diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000000..ee1dd274a2 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,856 @@ +name: Raptoreum Build +on: + push: + branches: + - master + - develop + - "ft/*" + - "bug/*" + - "release/*" + pull_request: + branches: + - develop + workflow_dispatch: + +env: + COIN_NAME: raptoreum + BUILD_DIR: raptoreum-build + COMPRESS_DIR: raptoreum-compress + TEST_DIR: raptoreum-test + +jobs: + get-version: + name: Get Version + runs-on: ubuntu-latest + steps: + - name: Triggered By + run: | + echo "checking out $GITHUB_REF triggered by $GITHUB_EVENT_NAME" + + - name: Checkout + uses: actions/checkout@v3 + + - name: Read versions + id: versions + uses: christian-draeger/read-properties@1.1.1 + with: + path: build.properties + properties: "release-version candidate-version snapshot-version" + + - name: Choose version + id: selected-version + shell: bash + run: | + if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]] || [[ "$GITHUB_REF" == *develop ]] || [[ "$GITHUB_REF" == *ft/* ]] || [[ "$GITHUB_REF" == *bug/* ]]; then + version=${{ steps.versions.outputs.snapshot-version }} + elif [[ "$GITHUB_EVENT_NAME" != "pull_request" ]] && [[ "$GITHUB_REF" == *"release/"* ]]; then + version=${{ steps.versions.outputs.candidate-version }} + elif [[ "$GITHUB_EVENT_NAME" != "pull_request" ]] && [[ "$GITHUB_REF" == "refs/heads/master" ]]; then + version=${{ steps.versions.outputs.release-version }} + fi + echo "version is: [$version]" + echo "version=$version" >> $GITHUB_OUTPUT + echo "BUILD_VERSION=$version" > version.txt + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: version + path: version.txt + + outputs: + version: ${{ steps.selected-version.outputs.version }} + + build-ubuntu20: + name: Ubuntu 20 Build + needs: get-version + runs-on: ubuntu-20.04 + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Required Packages + run: | + sudo apt-get update -y + sudo apt-get install curl libcurl4-openssl-dev build-essential libtool autotools-dev automake pkg-config python3 bsdmainutils cmake -y + - name: Build Depends + run: | + echo "building with $(nproc) threads" + gcc --version + export FALLBACK_DOWNLOAD_PATH=https://pool.nowput.org/depends/ + make -C depends -j$(nproc) HOST=x86_64-pc-linux-gnu + + - name: Configure + run: | + ./autogen.sh + ./configure --prefix=`pwd`/depends/x86_64-pc-linux-gnu + + - name: Build Binaries + run: | + make -j$(nproc) + mkdir -p ${BUILD_DIR} ${BUILD_DIR}_not_strip ${TEST_DIR} + cp src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}/ + mv src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}_not_strip/ + mv src/test/test_raptoreum ${TEST_DIR} + strip ${BUILD_DIR}/* + + - name: Build Debug Binaries + run: | + make clean + make distclean + ./autogen.sh + ./configure --prefix=`pwd`/depends/x86_64-pc-linux-gnu --disable-tests --enable-debug --enable-crash-hooks + make -j$(nproc) + mkdir -p ${BUILD_DIR}_debug + mv src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}_debug/ + + - name: Generate Checksum and Compress + run: | + mkdir -p ${COMPRESS_DIR} + cd ${BUILD_DIR} + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-ubuntu20-${{ needs.get-version.outputs.version }}.tar.gz * + cd ../${BUILD_DIR}_debug + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-ubuntu20-debug-${{ needs.get-version.outputs.version }}.tar.gz * + cd ../${BUILD_DIR}_not_strip + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-ubuntu20-not_strip-${{ needs.get-version.outputs.version }}.tar.gz * + cd .. + mv *.tar.gz ${COMPRESS_DIR}/ + cd ${COMPRESS_DIR} + echo "sha256: `shasum ${COIN_NAME}-ubuntu20-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-ubuntu20-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "sha256: `shasum ${COIN_NAME}-ubuntu20-debug-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-ubuntu20-debug-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "sha256: `shasum ${COIN_NAME}-ubuntu20-not_strip-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-ubuntu20-not_strip-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + cd .. + cat ${COMPRESS_DIR}/checksums.txt + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-ubuntu20-${{ needs.get-version.outputs.version }} + path: ${{ env.COMPRESS_DIR }} + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-ubuntu20-test-${{ needs.get-version.outputs.version }} + path: ${{ env.TEST_DIR }} + + test-ubuntu20: + name: Ubuntu 20 Tests + needs: [get-version, build-ubuntu20] + runs-on: ubuntu-20.04 + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-ubuntu20-test-${{ needs.get-version.outputs.version }} + + - name: Run Unit Tests + id: Tests + run: | + chmod +x test_raptoreum + ./test_raptoreum --log_format=JUNIT > unit_test_results.xml + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + if: always() + with: + name: ${{ env.COIN_NAME }}-ubuntu20-test-${{ needs.get-version.outputs.version }} + path: unit_test_results.xml + + - name: Publish Unit Test Report + uses: mikepenz/action-junit-report@v3 + if: always() + with: + check_name: "Ubuntu 20" + detailed_summary: ${{ steps.Tests.conclusion == 'failure'}} + include_passed: false + report_paths: "unit_test_results.xml" + + build-ubuntu22: + name: Ubuntu 22 Build + needs: get-version + runs-on: ubuntu-22.04 + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Required Packages + run: | + sudo apt-get update -y + sudo apt-get install curl libcurl4-openssl-dev build-essential libtool autotools-dev automake pkg-config python3 bsdmainutils cmake -y + + - name: Build Depends + run: | + echo "building with $(nproc) threads" + gcc --version + export FALLBACK_DOWNLOAD_PATH=https://pool.nowput.org/depends/ + make -C depends -j$(nproc) HOST=x86_64-pc-linux-gnu + + - name: Configure + run: | + ./autogen.sh + ./configure --prefix=`pwd`/depends/x86_64-pc-linux-gnu + # TODO: @Jami - this line was from malbit, I think we may not need it but could you help confirm? + # CONFIG_SITE=$PWD/depends/x86_64-pc-linux-gnu/share/config.site ./configure + + - name: Build Binaries + run: | + make -j$(nproc) + mkdir -p ${BUILD_DIR} ${BUILD_DIR}_not_strip ${TEST_DIR} + cp src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}/ + mv src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}_not_strip/ + mv src/test/test_raptoreum ${TEST_DIR} + strip ${BUILD_DIR}/* + + - name: Build Debug Binaries + run: | + make clean + make distclean + ./autogen.sh + ./configure --prefix=`pwd`/depends/x86_64-pc-linux-gnu --disable-tests --enable-debug --enable-crash-hooks + make -j$(nproc) + mkdir -p ${BUILD_DIR}_debug + mv src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}_debug/ + + - name: Generate Checksum and Compress + run: | + mkdir -p ${COMPRESS_DIR} + cd ${BUILD_DIR} + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-ubuntu22-${{ needs.get-version.outputs.version }}.tar.gz * + cd ../${BUILD_DIR}_debug + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-ubuntu22-debug-${{ needs.get-version.outputs.version }}.tar.gz * + cd ../${BUILD_DIR}_not_strip + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-ubuntu22-not_strip-${{ needs.get-version.outputs.version }}.tar.gz * + cd .. + mv *.tar.gz ${COMPRESS_DIR}/ + cd ${COMPRESS_DIR} + echo "sha256: `shasum ${COIN_NAME}-ubuntu22-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-ubuntu22-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "sha256: `shasum ${COIN_NAME}-ubuntu22-debug-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-ubuntu22-debug-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "sha256: `shasum ${COIN_NAME}-ubuntu22-not_strip-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-ubuntu22-not_strip-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + cd .. + cat ${COMPRESS_DIR}/checksums.txt + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-ubuntu22-${{ needs.get-version.outputs.version }} + path: ${{ env.COMPRESS_DIR }} + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-ubuntu22-test-${{ needs.get-version.outputs.version }} + path: ${{ env.TEST_DIR }} + + test-ubuntu22: + name: Ubuntu 22 Tests + needs: [get-version, build-ubuntu22] + runs-on: ubuntu-22.04 + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-ubuntu22-test-${{ needs.get-version.outputs.version }} + + - name: Run Unit Tests + id: Tests + run: | + chmod +x test_raptoreum + ./test_raptoreum --log_format=JUNIT > unit_test_results.xml + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + if: always() + with: + name: ${{ env.COIN_NAME }}-ubuntu22-test-${{ needs.get-version.outputs.version }} + path: unit_test_results.xml + + - name: Publish Unit Test Report + uses: mikepenz/action-junit-report@v3 + if: always() + with: + check_name: "Ubuntu 22" + detailed_summary: ${{ steps.Tests.conclusion == 'failure'}} + include_passed: false + report_paths: "unit_test_results.xml" + + build-macos: + name: macOS 12 Build + needs: get-version + runs-on: macos-12 + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Required Packages + run: | + brew install automake libtool pkg-config librsvg libnatpmp python + pip3 install ds_store mac_alias + pip3 install -U pip setuptools + + - name: Build Depends + run: | + echo "building with 8 threads" + export FALLBACK_DOWNLOAD_PATH=https://pool.nowput.org/depends/ + make -C depends -j8 HOST=x86_64-apple-darwin21.6.0 + + - name: Configure + run: | + ./autogen.sh + ./configure --prefix=`pwd`/depends/x86_64-apple-darwin21.6.0 + + - name: Build Binaries + run: | + make -j8 + mkdir -p ${BUILD_DIR} ${BUILD_DIR}_not_strip ${TEST_DIR} + cp src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}/ + mv src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}_not_strip/ + mv src/test/test_raptoreum ${TEST_DIR} + strip ${BUILD_DIR}/* + + - name: Generate Checksum and Compress + run: | + cd ${BUILD_DIR} + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + openssl sha256 * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-macos-${{ needs.get-version.outputs.version }}.tar.gz * + cd ../${BUILD_DIR}_not_strip + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + openssl sha256 * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-macos-not_strip-${{ needs.get-version.outputs.version }}.tar.gz * + cd .. + mkdir -p ${COMPRESS_DIR} + mv *.tar.gz ${COMPRESS_DIR}/ + cd ${COMPRESS_DIR} + echo "sha256: `shasum ${COIN_NAME}-macos-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `openssl sha256 ${COIN_NAME}-macos-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "sha256: `shasum ${COIN_NAME}-macos-not_strip-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `openssl sha256 ${COIN_NAME}-macos-not_strip-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + cat checksums.txt + cd .. + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-macos-${{ needs.get-version.outputs.version }} + path: ${{ env.COMPRESS_DIR }} + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-macos-test-${{ needs.get-version.outputs.version }} + path: ${{ env.TEST_DIR }} + + - name: Generate Macos dmg files + run: | + make deploy + mkdir -p macos-dmg + mv Raptoreum-Core.dmg macos-dmg/ + cd macos-dmg + echo "sha256: `shasum Raptoreum-Core.dmg`" >> checksums.txt + echo "openssl-sha256: `openssl sha256 Raptoreum-Core.dmg`" >> checksums.txt + cd .. + + - name: Upload dmg file + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-dmg-${{ needs.get-version.outputs.version }} + path: macos-dmg + + test-macos: + name: macOS Tests + needs: [get-version, build-macos] + runs-on: macos-12 + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-macos-test-${{ needs.get-version.outputs.version }} + + - name: Run Unit Tests + id: Tests + run: | + chmod +x test_raptoreum + ./test_raptoreum --log_format=JUNIT > unit_test_results.xml + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + if: always() + with: + name: ${{ env.COIN_NAME }}-macos-test-${{ needs.get-version.outputs.version }} + path: unit_test_results.xml + + - name: Publish Unit Test Report + uses: mikepenz/action-junit-report@v3 + if: always() + with: + check_name: "macOS 11" + detailed_summary: ${{ steps.Tests.conclusion == 'failure'}} + include_passed: false + report_paths: "unit_test_results.xml" + + # build-arm-32: + # name: ARM 32-bit Build + # needs: get-version + # runs-on: ubuntu-20.04 + + # steps: + # - name: Checkout + # uses: actions/checkout@v3 + + # - name: Install Required Packages + # run: | + # sudo apt-get update -y + # sudo apt-get upgrade -y + # sudo apt-get install curl build-essential libtool g++-arm-linux-gnueabihf autotools-dev automake pkg-config python3 bsdmainutils cmake + + # - name: Build Depends + # run: | + # echo "building with $(nproc) threads" + # make -C depends -j$(nproc) HOST=arm-linux-gnueabihf + + # - name: Configure + # run: | + # ./autogen.sh + # ./configure --prefix=`pwd`/depends/arm-linux-gnueabihf + + # - name: Build Binaries + # run: | + # make -j$(nproc) + # mkdir -p ${BUILD_DIR} ${TEST_DIR} + # mv src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}/ + # mv src/test/test_raptoreum ${TEST_DIR} + + # - name: Build Debug Binaries + # run: | + # make clean + # make distclean + # ./autogen.sh + # ./configure --prefix=`pwd`/depends/arm-linux-gnueabihf --disable-tests --enable-debug + # make -j$(nproc) + # mkdir -p ${BUILD_DIR}_debug + # mv src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}_debug/ + + # - name: Generate Checksum and Compress + # run: | + # mkdir -p ${COMPRESS_DIR} + # cd ${BUILD_DIR} + # echo "sha256:" >> checksums.txt + # echo "------------------------------------" >> checksums.txt + # shasum * >> checksums.txt + # echo "------------------------------------" >> checksums.txt + # echo "openssl-sha256:" >> checksums.txt + # echo "------------------------------------" >> checksums.txt + # sha256sum * >> checksums.txt + # cat checksums.txt + # tar -cvzf ../${COIN_NAME}-arm32-${{ needs.get-version.outputs.version }}.tar.gz * + # cd ../${BUILD_DIR}_debug + # echo "sha256:" >> checksums.txt + # echo "------------------------------------" >> checksums.txt + # shasum * >> checksums.txt + # echo "------------------------------------" >> checksums.txt + # echo "openssl-sha256:" >> checksums.txt + # echo "------------------------------------" >> checksums.txt + # sha256sum * >> checksums.txt + # cat checksums.txt + # tar -cvzf ../${COIN_NAME}-arm32-debug-${{ needs.get-version.outputs.version }}.tar.gz * + # cd .. + # mv *.tar.gz ${COMPRESS_DIR}/ + # cd ${COMPRESS_DIR} + # echo "sha256: `shasum ${COIN_NAME}-arm32-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + # echo "openssl-sha256: `sha256sum ${COIN_NAME}-arm32-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + # echo "sha256: `shasum ${COIN_NAME}-arm32-debug-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + # echo "openssl-sha256: `sha256sum ${COIN_NAME}-arm32-debug-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + # cd .. + # cat ${COMPRESS_DIR}/checksums.txt + + # - name: Upload Artifacts + # uses: actions/upload-artifact@v3 + # with: + # name: ${{ env.COIN_NAME }}-arm32-${{ needs.get-version.outputs.version }} + # path: ${{ env.COMPRESS_DIR }} + + # - name: Upload Test Artifacts + # uses: actions/upload-artifact@v3 + # with: + # name: ${{ env.COIN_NAME }}-arm32-test-${{ needs.get-version.outputs.version }} + # path: ${{ env.TEST_DIR }} + + # test-arm-32: + # name: ARM 32-bit Tests + # needs: [ get-version, build-arm-32 ] + # runs-on: ubuntu-20.04 + + # steps: + # - name: Download Artifacts + # uses: actions/download-artifact@v3 + # with: + # name: ${{ env.COIN_NAME }}-arm32-test-${{ needs.get-version.outputs.version }} + + # - name: Run Unit Tests + # id: Tests + # uses: nandofw/arm-runner-action@v2.5.2 + # with: + # base_image: raspios_lite:latest + # cpu: cortex-a7 + # cpu_info: cpuinfo/raspberrypi_3b + # copy_artifact_dest: ${{ github.workspace }} + # copy_artifact_path: unit_test_results.xml + # copy_artifacts_on_fail: yes + # commands: | + # chmod +x test_raptoreum + # ./test_raptoreum --log_format=JUNIT > unit_test_results.xml + + # - name: Upload Test Artifacts + # uses: actions/upload-artifact@v3 + # if: always() + # with: + # name: ${{ env.COIN_NAME }}-arm32-test-${{ needs.get-version.outputs.version }} + # path: unit_test_results.xml + + # - name: Publish Unit Test Report + # uses: mikepenz/action-junit-report@v3 + # if: always() + # with: + # check_name: "ARM 32-bit" + # detailed_summary: ${{ steps.Tests.conclusion == 'failure'}} + # include_passed: false + # report_paths: 'unit_test_results.xml' + + build-arm-64: + name: ARM 64-bit Build + needs: get-version + runs-on: ubuntu-20.04 + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Required Packages + run: | + sudo apt-get update -y + sudo apt-get install curl libcurl4-openssl-dev build-essential libtool g++-aarch64-linux-gnu autotools-dev automake pkg-config python3 bsdmainutils cmake -y + + - name: Build Depends + run: | + echo "building with $(nproc) threads" + export FALLBACK_DOWNLOAD_PATH=https://pool.nowput.org/depends/ + make -C depends -j$(nproc) HOST=aarch64-linux-gnu + + - name: Configure + run: | + ./autogen.sh + ./configure --prefix=`pwd`/depends/aarch64-linux-gnu + + - name: Build Binaries + run: | + make -j$(nproc) + mkdir -p ${BUILD_DIR} ${TEST_DIR} + mv src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}/ + mv src/test/test_raptoreum ${TEST_DIR}/ + + - name: Build Debug Binaries + run: | + make clean + make distclean + ./autogen.sh + ./configure --prefix=`pwd`/depends/aarch64-linux-gnu --disable-tests --enable-debug --enable-crash-hooks + make -j$(nproc) + mkdir -p ${BUILD_DIR}_debug + mv src/{raptoreum-cli,raptoreumd,qt/raptoreum-qt} ${BUILD_DIR}_debug/ + + - name: Generate Checksum and Compress + run: | + mkdir -p ${COMPRESS_DIR} + cd ${BUILD_DIR} + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-arm64-${{ needs.get-version.outputs.version }}.tar.gz * + cd ../${BUILD_DIR}_debug + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + tar -cvzf ../${COIN_NAME}-arm64-debug-${{ needs.get-version.outputs.version }}.tar.gz * + cd .. + mv *.tar.gz ${COMPRESS_DIR}/ + cd ${COMPRESS_DIR} + echo "sha256: `shasum ${COIN_NAME}-arm64-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-arm64-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "sha256: `shasum ${COIN_NAME}-arm64-debug-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-arm64-debug-${{ needs.get-version.outputs.version }}.tar.gz`" >> checksums.txt + cd .. + cat ${COMPRESS_DIR}/checksums.txt + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-arm64-${{ needs.get-version.outputs.version }} + path: ${{ env.COMPRESS_DIR }} + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-arm64-test-${{ needs.get-version.outputs.version }} + path: ${{ env.TEST_DIR }} + + test-arm-64: + name: ARM 64-bit Tests + needs: [get-version, build-arm-64] + runs-on: ubuntu-20.04 + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-arm64-test-${{ needs.get-version.outputs.version }} + + - name: Run Unit Tests + id: Tests + uses: nandofw/arm-runner-action@v2.5.2 + with: + base_image: raspios_lite_arm64:latest + cpu: cortex-a7 + copy_artifact_dest: ${{ github.workspace }} + copy_artifact_path: unit_test_results.xml + copy_artifacts_on_fail: yes + commands: | + chmod +x test_raptoreum + ./test_raptoreum --log_format=JUNIT > unit_test_results.xml + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + if: always() + with: + name: ${{ env.COIN_NAME }}-arm64-test-${{ needs.get-version.outputs.version }} + path: unit_test_results.xml + + - name: Publish Unit Test Report + uses: mikepenz/action-junit-report@v3 + if: always() + with: + check_name: "ARM 64-bit" + detailed_summary: ${{ steps.Tests.conclusion == 'failure'}} + include_passed: false + report_paths: "unit_test_results.xml" + + build-win64: + name: Win64 Build + needs: get-version + runs-on: ubuntu-22.04 + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Required Packages + run: | + sudo apt-get update -y + sudo apt-get install curl libcurl4-openssl-dev build-essential libtool autotools-dev automake pkg-config python3 bsdmainutils cmake -y + sudo apt-get install -y g++-mingw-w64-x86-64 gcc-mingw-w64-x86-64 nsis + sudo update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix + sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix + + - name: Build Depends + run: | + echo "building with $(nproc) threads" + export FALLBACK_DOWNLOAD_PATH=https://pool.nowput.org/depends/ + make -C depends -j$(nproc) HOST=x86_64-w64-mingw32 + + - name: Configure + run: | + ./autogen.sh + export FALLBACK_DOWNLOAD_PATH=https://pool.nowput.org/depends/ + ./configure --prefix=`pwd`/depends/x86_64-w64-mingw32 + # CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure + + - name: Build Binaries + run: | + make -j$(nproc) + mkdir -p ${BUILD_DIR} ${BUILD_DIR}_not_strip ${TEST_DIR} + cp src/{raptoreum-cli.exe,raptoreumd.exe,qt/raptoreum-qt.exe} ${BUILD_DIR}/ + mv src/{raptoreum-cli.exe,raptoreumd.exe,qt/raptoreum-qt.exe} ${BUILD_DIR}_not_strip/ + mv src/test/test_raptoreum.exe ${TEST_DIR} + strip ${BUILD_DIR}/* + + - name: Generate Checksum and Compress + run: | + cd ${BUILD_DIR} + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + zip -r ../${COIN_NAME}-win-${{ needs.get-version.outputs.version }}.zip . + cd ../${BUILD_DIR}_not_strip + echo "sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + shasum * >> checksums.txt + echo "------------------------------------" >> checksums.txt + echo "openssl-sha256:" >> checksums.txt + echo "------------------------------------" >> checksums.txt + sha256sum * >> checksums.txt + cat checksums.txt + zip -r ../${COIN_NAME}-win-not_strip-${{ needs.get-version.outputs.version }}.zip . + cd .. + mkdir -p ${COMPRESS_DIR} + mv *.zip ${COMPRESS_DIR}/ + cd ${COMPRESS_DIR} + echo "sha256: `shasum ${COIN_NAME}-win-${{ needs.get-version.outputs.version }}.zip`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-win-${{ needs.get-version.outputs.version }}.zip`" >> checksums.txt + echo "sha256: `shasum ${COIN_NAME}-win-not_strip-${{ needs.get-version.outputs.version }}.zip`" >> checksums.txt + echo "openssl-sha256: `sha256sum ${COIN_NAME}-win-not_strip-${{ needs.get-version.outputs.version }}.zip`" >> checksums.txt + cat checksums.txt + cd .. + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-win-${{ needs.get-version.outputs.version }} + path: ${{ env.COMPRESS_DIR }} + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-win-test-${{ needs.get-version.outputs.version }} + path: ${{ env.TEST_DIR }} + + - name: Generate window installation file + run: | + make deploy + mkdir win64-installation + mv *.exe win64-installation/ + cd win64-installation + echo "sha256: `shasum *.exe`" >> checksums.txt + echo "openssl-sha25: `sha256sum *.exe`" >> checksums.txt + cd .. + + - name: Upload Win64 installation file + uses: actions/upload-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-win-installation-${{ needs.get-version.outputs.version }} + path: win64-installation + + test-win64: + name: Win64 Tests + needs: [get-version, build-win64] + runs-on: windows-latest + + steps: + - name: Download Artifacts + uses: actions/download-artifact@v3 + with: + name: ${{ env.COIN_NAME }}-win-test-${{ needs.get-version.outputs.version }} + + - name: Check Artifacts + run: | + pwd + dir + + - name: Run Unit Tests B + id: Tests + run: | + pwd + dir + .\test_raptoreum.exe --log_format=JUNIT > unit_test_results.xml + + - name: Upload Test Artifacts + uses: actions/upload-artifact@v3 + if: always() + with: + name: ${{ env.COIN_NAME }}-win-test-${{ needs.get-version.outputs.version }} + path: unit_test_results.xml + + - name: Publish Unit Test Report + uses: mikepenz/action-junit-report@v3 + if: always() + with: + check_name: "Win64" + detailed_summary: ${{ steps.Tests.conclusion == 'failure'}} + include_passed: false + report_paths: "unit_test_results.xml" diff --git a/.github/workflows/release_docker_hub.yml b/.github/workflows/release_docker_hub.yml new file mode 100644 index 0000000000..9ceacdf71f --- /dev/null +++ b/.github/workflows/release_docker_hub.yml @@ -0,0 +1,73 @@ +name: Release to Docker Hub + +on: + release: + types: [published] + +jobs: + release: + name: Release to Docker Hub + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Docker meta + id: docker_meta + uses: crazy-max/ghaction-docker-meta@v2 + with: + images: dashpay/dashd + tags: | + type=match,pattern=v(\d+.\d+.\d+.\d+),group=1,enable=${{ !contains(github.event.release.tag_name, '-rc') }} + type=match,pattern=v(\d+.\d+.\d+),group=1,enable=${{ !contains(github.event.release.tag_name, '-rc') }} + type=match,pattern=v(\d+.\d+),group=1,enable=${{ !contains(github.event.release.tag_name, '-rc') }} + type=raw,value=latest,enable=${{ !contains(github.event.release.tag_name, '-rc') }} + type=match,pattern=v(.*),group=1,latest=false,enable=${{ contains(github.event.release.tag_name, '-rc') }} + type=raw,value=latest-dev,enable=${{ contains(github.event.release.tag_name, '-rc') }} + flavor: | + latest=false + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + context: ./docker + file: ./docker/Dockerfile.GitHubActions + push: true + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + build-args: TAG=${{ steps.docker_meta.outputs.version }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new + platforms: linux/amd64,linux/arm64,linux/arm/v7 + + - # Temp fix + # https://github.com/docker/build-push-action/issues/252 + # https://github.com/moby/buildkit/issues/1896 + name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/.gitignore b/.gitignore index 7fcadb2e5f..5a15513535 100644 --- a/.gitignore +++ b/.gitignore @@ -6,13 +6,17 @@ reset-files.bash *.tar.gz *.exe +*.pdb src/raptoreum src/raptoreumd src/raptoreum-cli -src/raptoreum-tx +src/raptoreum-wallet +src/test/fuzz +!src/test/fuzz/*.* src/test/test_raptoreum src/test/test_raptoreum_fuzzy src/qt/test/test_raptoreum-qt +src/qt/res/css/colors/* src/bench/bench_raptoreum # autoreconf @@ -34,6 +38,7 @@ build-aux/compile build-aux/test-driver config.log config.status +config.status.old configure libtool src/config/raptoreum-config.h @@ -62,8 +67,6 @@ libconftest.dylib* *.pyc *.o *.o-* -*.patch -!depends/patches/*/*.patch *.a *.pb.cc *.pb.h @@ -75,6 +78,10 @@ libconftest.dylib* *.json.h *.raw.h +# Only ignore unexpected patches +*.patch +!depends/patches/**/*.patch + #libtool object files *.lo *.la @@ -82,7 +89,7 @@ libconftest.dylib* # Compilation and Qt preprocessor part *.qm Makefile -raptoreum-qt +src/qt/raptoreum-qt Raptoreum-Qt.app !/depends/Makefile @@ -96,7 +103,8 @@ qrc_*.cpp # Mac specific .DS_Store build - +*.dSYM +._* #lcov *.gcno *.gcda @@ -104,6 +112,7 @@ build test_raptoreum.coverage/ total.coverage/ coverage_percent.txt +/cov_tool_wraper.sh #build tests linux-coverage-build @@ -128,12 +137,14 @@ qa/pull-tester/tests-config.sh raptoreum-cli raptoreumd raptoreum-qt +raptoreum-wallet make /docker/bin # CLion .idea +.vscode cmake-build-debug depends/built @@ -141,4 +152,12 @@ depends/x86_64-pc-linux-gnu depends/sdk-sources/ dist/ *.conf +.settings/language.settings.xml + +/raptoreum.iml +/testnet3_binary/ +/testnet4/ +osx_volname +dist/ +src/test/runtest.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c7d0a1af62..52391aa2c2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,67 +2,76 @@ image: "ubuntu:bionic" variables: DOCKER_DRIVER: overlay2 + FAST_MODE: "false" # when "true", only run linter on arm and unit/functional tests on linux64, skip everything else -cache: - # Cache by branch/tag and job name - # Gitlab can't use caches from parent pipelines when doing the first build in a PR, so we use artifacts to copy - # caches into PRs - key: ${CI_COMMIT_REF_SLUG}-${CI_JOB_NAME}${CI_EXTERNAL_PULL_REQUEST_IID} - paths: - - $CI_PROJECT_DIR/cache +workflow: + rules: + - when: always stages: + - builder-image + - build-depends - build + - test -.build_template: &build_template - stage: build +builder-image: + stage: builder-image + image: docker:19.03.5 + services: + - docker:19.03.5-dind + variables: + DOCKER_HOST: "tcp://docker:2375" + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" before_script: - - export BUILD_TARGET="$CI_JOB_NAME" - - echo BUILD_TARGET=$BUILD_TARGET - - source ./ci/matrix.sh - - # The ubuntu base image has apt configured to delete caches after each invocation, which is something that is not desirable for us - - rm /etc/apt/apt.conf.d/docker-clean - - apt-get update - - apt-get install -y wget unzip + - echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY + script: + - cd ci + - docker pull $CI_REGISTRY_IMAGE:builder-$CI_COMMIT_REF_SLUG || true + - docker pull $CI_REGISTRY_IMAGE:builder-develop || true + - docker build --cache-from $CI_REGISTRY_IMAGE:builder-$CI_COMMIT_REF_SLUG --cache-from $CI_REGISTRY_IMAGE:builder-develop -t $CI_REGISTRY_IMAGE:builder-$CI_COMMIT_REF_SLUG -f Dockerfile.builder . + - docker push $CI_REGISTRY_IMAGE:builder-$CI_COMMIT_REF_SLUG - # Init cache - - export CACHE_DIR=$CI_PROJECT_DIR/cache - - mkdir -p $CACHE_DIR +.build-depends-template: + stage: build-depends + image: $CI_REGISTRY_IMAGE:builder-$CI_COMMIT_REF_SLUG + variables: + SDK_URL: https://bitcoincore.org/depends-sources/sdks + OSX_SDK: "10.11" + MAKEJOBS: -j4 + before_script: + - echo HOST=$HOST - | - if [ "$CI_COMMIT_REF_SLUG" != "develop" -a "$CI_COMMIT_TAG" == "" ]; then - if [ ! -d $CACHE_DIR/ccache ]; then - echo "Downloading cache from develop branch" - mkdir cache-artifact - cd cache-artifact - if wget --quiet -O cache-artifact.zip https://gitlab.com/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/-/jobs/artifacts/develop/download?job=$CI_JOB_NAME; then - unzip -q cache-artifact.zip - rm cache-artifact.zip - mv cache-artifact/* $CACHE_DIR/ || true - else - echo "Failed to download cache" - fi - cd .. - rm -rf cache-artifact - else - echo "Not touching cache (was initialized from previous build)" + if [ "$HOST" = "x86_64-apple-darwin14" ]; then + echo "Downloading MacOS SDK" + mkdir -p depends/SDKs + mkdir -p depends/sdk-sources + if [ ! -f depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz ]; then + curl --location --fail $SDK_URL/MacOSX${OSX_SDK}.sdk.tar.gz -o depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz fi - else - echo "Not touching cache (building develop branch or tag)" + tar -C depends/SDKs -xf depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz fi - # Create missing cache dirs - - mkdir -p $CACHE_DIR/ccache && mkdir -p $CACHE_DIR/depends && mkdir -p $CACHE_DIR/sdk-sources && mkdir -p $CACHE_DIR/apt - # Keep this as it makes caching related debugging easier - - ls -lah $CACHE_DIR && ls -lah $CACHE_DIR/depends && ls -lah $CACHE_DIR/ccache && ls -lah $CACHE_DIR/apt - - mv $CACHE_DIR/apt/* /var/cache/apt/archives/ || true - - # Install base packages - - apt-get dist-upgrade -y - - apt-get install -y git g++ autotools-dev libtool m4 automake autoconf pkg-config zlib1g-dev libssl1.0-dev curl ccache bsdmainutils cmake - - apt-get install -y python3 python3-dev python3-pip + script: + - make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS + cache: + # Let all branches share the same cache, which is ok because the depends subsystem is able to handle this properly (it works with hashes of all scripts) + key: ${CI_JOB_NAME} + paths: + - $CI_PROJECT_DIR/depends/built + - $CI_PROJECT_DIR/depends/sdk-sources + artifacts: + name: depends + when: on_success + paths: + - $CI_PROJECT_DIR/depends/$HOST + - $CI_PROJECT_DIR/depends/SDKs - # jinja2 is needed for combine_logs.py - - pip3 install jinja2 +.base-template: + image: $CI_REGISTRY_IMAGE:builder-$CI_COMMIT_REF_SLUG + before_script: + - export CACHE_DIR=$CI_PROJECT_DIR/cache + - echo BUILD_TARGET=$BUILD_TARGET + - source ./ci/matrix.sh # Setup some environment variables - | @@ -87,73 +96,188 @@ stages: - echo PULL_REQUEST=$PULL_REQUEST COMMIT_RANGE=$COMMIT_RANGE HOST_SRC_DIR=$HOST_SRC_DIR CACHE_DIR=$CACHE_DIR - echo "Commit log:" && git log --format=fuller -1 - # Build raptoreum_hash - - git clone https://github.com/raptoreum/raptoreum_hash - - cd raptoreum_hash && python3 setup.py install - - # Install build target specific packages - - echo PACKAGES=$PACKAGES - - if [ -n "$DPKG_ADD_ARCH" ]; then dpkg --add-architecture "$DPKG_ADD_ARCH" ; fi - - if [ -n "$PACKAGES" ]; then apt-get update && apt-get install -y --no-install-recommends --no-upgrade $PACKAGES; fi - - # Move apt packages into cache - - mv /var/cache/apt/archives/* $CACHE_DIR/apt/ || true - - # Make mingw use correct threading libraries - - update-alternatives --set i686-w64-mingw32-gcc /usr/bin/i686-w64-mingw32-gcc-posix || true - - update-alternatives --set i686-w64-mingw32-g++ /usr/bin/i686-w64-mingw32-g++-posix || true - - update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix || true - - update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix || true - +.build-template: + stage: build + extends: .base-template script: - - export BUILD_TARGET="$CI_JOB_NAME" - - cd $CI_PROJECT_DIR - - ./ci/build_depends.sh - ./ci/build_src.sh - - ./ci/test_unittests.sh - - ./ci/test_integrationtests.sh --extended --exclude pruning,dbcrash + - ./ci/test_unittests.sh # Run unit tests in build stage to avoid creating too many parallel jobs + cache: + # Let all branches share the same cache, which is ok because ccache is able to handle it + key: ${CI_JOB_NAME} + paths: + - $CI_PROJECT_DIR/cache/ccache + artifacts: + name: binaries + when: always + paths: + - $CI_PROJECT_DIR/build-ci + expire_in: 3 days +.test-template: + stage: test + extends: .base-template + variables: + INTEGRATION_TESTS_ARGS: "--extended --exclude feature_pruning,feature_dbcrash" + script: + - echo "INTEGRATION_TESTS_ARGS=${INTEGRATION_TESTS_ARGS}" + - ./ci/test_integrationtests.sh $INTEGRATION_TESTS_ARGS after_script: - # Copy all cache files into cache-artifact so that they get uploaded. We only do this for develop so that artifacts - # stay minimal for PRs and branches (we never need them) - - mkdir -p $CI_PROJECT_DIR/cache-artifact - mkdir -p $CI_PROJECT_DIR/testlogs - - | - if [ "$CI_COMMIT_REF_SLUG" = "develop" ]; then - cp -ra $CI_PROJECT_DIR/cache/* $CI_PROJECT_DIR/cache-artifact/ - fi - - # We're actually only interested in the develop branch creating the cache artifact, but there is no way to control this - # until https://gitlab.com/gitlab-org/gitlab-foss/issues/25478 gets implemented. Until then, we use an expiration time of - # 3 days and rely on daily builds to refresh the cache artifacts. We also keep non-develop artifacts at minimum size artifacts: - name: cache-artifact + name: testlogs when: always paths: - - $CI_PROJECT_DIR/cache-artifact - $CI_PROJECT_DIR/testlogs expire_in: 3 days -arm-linux: - <<: *build_template +.skip-in-fast-mode-template: + rules: + - if: '$FAST_MODE == "true"' + when: never + - when: always + +### + +arm-linux-gnueabihf: + extends: .build-depends-template + variables: + HOST: arm-linux-gnueabihf + +i686-w64-mingw32: + extends: + - .build-depends-template + - .skip-in-fast-mode-template + variables: + HOST: i686-w64-mingw32 + +x86_64-w64-mingw32: + extends: + - .build-depends-template + - .skip-in-fast-mode-template + variables: + HOST: x86_64-w64-mingw32 + +i686-pc-linux-gnu: + extends: + - .build-depends-template + - .skip-in-fast-mode-template + variables: + HOST: i686-pc-linux-gnu + +x86_64-unknown-linux-gnu-debug: + extends: .build-depends-template + variables: + HOST: x86_64-unknown-linux-gnu + DEP_OPTS: "DEBUG=1" + +x86_64-unknown-linux-gnu-nowallet: + extends: + - .build-depends-template + - .skip-in-fast-mode-template + variables: + HOST: x86_64-unknown-linux-gnu + DEP_OPTS: "NO_WALLET=1" + +x86_64-unknown-linux-gnu-release: + extends: + - .build-depends-template + - .skip-in-fast-mode-template + variables: + HOST: x86_64-unknown-linux-gnu + DEP_OPTS: "NO_UPNP=1" + +x86_64-apple-darwin14: + extends: + - .build-depends-template + - .skip-in-fast-mode-template + variables: + HOST: x86_64-apple-darwin14 + +### + +arm-linux-build: + extends: .build-template + needs: + - arm-linux-gnueabihf + variables: + BUILD_TARGET: arm-linux + +win32-build: + extends: + - .build-template + - .skip-in-fast-mode-template + needs: + - i686-w64-mingw32 + variables: + BUILD_TARGET: win32 + +win64-build: + extends: + - .build-template + - .skip-in-fast-mode-template + needs: + - x86_64-w64-mingw32 + variables: + BUILD_TARGET: win64 + +linux32-build: + extends: + - .build-template + - .skip-in-fast-mode-template + needs: + - i686-pc-linux-gnu + variables: + BUILD_TARGET: linux32 -win32: - <<: *build_template +linux64-build: + extends: .build-template + needs: + - x86_64-unknown-linux-gnu-debug + variables: + BUILD_TARGET: linux64 -win64: - <<: *build_template +linux64_nowallet-build: + extends: + - .build-template + - .skip-in-fast-mode-template + needs: + - x86_64-unknown-linux-gnu-nowallet + variables: + BUILD_TARGET: linux64_nowallet -linux32: - <<: *build_template +linux64_release-build: + extends: + - .build-template + - .skip-in-fast-mode-template + needs: + - x86_64-unknown-linux-gnu-release + variables: + BUILD_TARGET: linux64_release -linux64: - <<: *build_template +mac-build: + extends: + - .build-template + - .skip-in-fast-mode-template + needs: + - x86_64-apple-darwin14 + variables: + BUILD_TARGET: mac -linux64_nowallet: - <<: *build_template +### -linux64_release: - <<: *build_template +linux32-test: + extends: + - .test-template + - .skip-in-fast-mode-template + needs: + - linux32-build + variables: + BUILD_TARGET: linux32 -mac: - <<: *build_template +linux64-test: + extends: .test-template + needs: + - linux64-build + variables: + BUILD_TARGET: linux64 diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index ce671f38f3..ce8a6633c0 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -1,28 +1,15 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index d0e500c207..cd1ce23dbd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ # IPv6 support sudo: required -dist: trusty +dist: bionic os: linux language: minimal @@ -47,8 +47,8 @@ runtests: &runtests - $DOCKER_RUN_IN_BUILDER ./ci/build_depends.sh - $DOCKER_RUN_IN_BUILDER ./ci/build_src.sh - $DOCKER_RUN_IN_BUILDER ./ci/test_unittests.sh - - if [ "$TRAVIS_EVENT_TYPE" = "cron" ]; then extended="--extended --exclude pruning,dbcrash"; fi - - $DOCKER_RUN_IN_BUILDER ./ci/test_integrationtests.sh --jobs=3 ${extended} + - if [ "$TRAVIS_EVENT_TYPE" = "cron" ]; then extended="--extended --exclude feature_pruning,feature_dbcrash"; fi + - $DOCKER_RUN_IN_BUILDER ./ci/test_integrationtests.sh --quiet --jobs=3 ${extended} builddocker: &builddocker stage: build docker @@ -60,64 +60,93 @@ jobs: include: # build depends - <<: *builddepends + name: depends-arm-linux env: BUILD_TARGET=arm-linux - <<: *builddepends + name: depends-win32 env: BUILD_TARGET=win32 - <<: *builddepends + name: depends-win64 env: BUILD_TARGET=win64 - <<: *builddepends + name: depends-linux32 env: BUILD_TARGET=linux32 - <<: *builddepends + name: depends-linux64 env: BUILD_TARGET=linux64 - <<: *builddepends + name: depends-linux64_nowallet env: BUILD_TARGET=linux64_nowallet - <<: *builddepends - env: BUILD_TARGET=linux64_release DOCKER_BUILD=true + name: depends-linux64_release + env: + - BUILD_TARGET=linux64_release + - DOCKER_BUILD=true - <<: *builddepends + name: depends-mac env: BUILD_TARGET=mac # build source - <<: *buildsrc + name: src-arm-linux env: BUILD_TARGET=arm-linux - <<: *buildsrc + name: src-win32 env: BUILD_TARGET=win32 - <<: *buildsrc + name: src-win64 env: BUILD_TARGET=win64 - <<: *buildsrc + name: src-linux32 env: BUILD_TARGET=linux32 - <<: *buildsrc + name: src-linux64 env: BUILD_TARGET=linux64 - <<: *buildsrc + name: src-linux64_nowallet env: BUILD_TARGET=linux64_nowallet - <<: *buildsrc - env: BUILD_TARGET=linux64_release DOCKER_BUILD=true + name: src-linux64_release + env: + - BUILD_TARGET=linux64_release + - DOCKER_BUILD=true - <<: *buildsrc + name: src-mac env: BUILD_TARGET=mac # run tests (no tests for arm-linux and mac) - <<: *runtests + name: tests-win32 env: BUILD_TARGET=win32 - <<: *runtests + name: tests-win64 env: BUILD_TARGET=win64 - <<: *runtests + name: tests-linux32 env: BUILD_TARGET=linux32 - <<: *runtests + name: tests-linux64 env: BUILD_TARGET=linux64 - <<: *runtests + name: tests-linux64_nowallet env: BUILD_TARGET=linux64_nowallet - <<: *runtests - env: BUILD_TARGET=linux64_release DOCKER_BUILD=true + name: tests-linux64_release + env: + - BUILD_TARGET=linux64_release + - DOCKER_BUILD=true # build docker - <<: *builddocker - env: BUILD_TARGET=linux64_release DOCKER_BUILD=true + name: docker-linux64_release + env: + - BUILD_TARGET=linux64_release + - DOCKER_BUILD=true before_cache: # Save builder image - docker save raptoreum-builder-$BUILD_TARGET-$TRAVIS_JOB_NUMBER $(docker history -q raptoreum-builder-$BUILD_TARGET-$TRAVIS_JOB_NUMBER | grep -v \) | gzip -2 > $HOME/cache/docker/raptoreum-builder-$BUILD_TARGET.tar.gz -before_install: - - travis_retry travis_apt_get_update - - travis_retry sudo apt-get -yq --no-install-suggests --no-install-recommends install docker-ce realpath - install: + # Fix annoying Travis bug: a branch with a single commit has an empty TRAVIS_COMMIT_RANGE sometimes + - if [ -z "$TRAVIS_COMMIT_RANGE" ]; then export TRAVIS_COMMIT_RANGE="HEAD~..HEAD"; fi # Our scripts try to be Travis agnostic - export PULL_REQUEST="$TRAVIS_PULL_REQUEST" - export COMMIT_RANGE="$TRAVIS_COMMIT_RANGE" @@ -125,7 +154,6 @@ install: - export HOST_SRC_DIR=$TRAVIS_BUILD_DIR - export HOST_CACHE_DIR=$HOME/cache - export TRAVIS_COMMIT_LOG=`git log --format=fuller -1` - - export PYTHON_DEBUG=1 - source ./ci/matrix.sh - mkdir -p $HOST_CACHE_DIR/docker && mkdir -p $HOST_CACHE_DIR/ccache && mkdir -p $HOST_CACHE_DIR/depends && mkdir -p $HOST_CACHE_DIR/sdk-sources # Keep this as it makes caching related debugging easier diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index 77027432db..0000000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,97 +0,0 @@ -# This CMakeLists.txt is not meant to actually work! -# It only serves as a dummy project to make CLion work properly when it comes to symbol resolution and all the nice -# features dependent on that. Building must still be done on the command line using the automake build chain -# If you load this project in CLion and would like to run/debug executables, make sure to remove the "Build" entry from -# the run/debug configuration as otherwise CLion will try to build this project with cmake, failing horribly. -# You'll also have to manually change the executable in the configuration to the correct path of the already built executable - -cmake_minimum_required(VERSION 3.7) - -set(PROJECT_NAME - raptoreum) - -project(${PROJECT_NAME} - LANGUAGES CXX C) - -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) - -include_directories( - src - src/qt/forms - src/leveldb/include - src/univalue/include -) - -if(UNIX AND NOT APPLE) - set(DEPENDS_PREFIX depends/x86_64-pc-linux-gnu) -elseif(APPLE) - set(DEPENDS_PREFIX depends/x86_64-apple-darwin11) -elseif(WIN32) - set(DEPENDS_PREFIX depends/x86_64-w64-mingw32) -endif() - -message(STATUS "DEPENDS_PREFIX: ${DEPENDS_PREFIX}") - -if(DEFINED DEPENDS_PREFIX) - include_directories(${DEPENDS_PREFIX}/include) - include_directories(${DEPENDS_PREFIX}/include/QtWidgets) -endif() - -add_definitions( - -DENABLE_CRASH_HOOKS=1 - -DENABLE_WALLET=1 -) - -file(GLOB SOURCE_FILES - src/*.cpp - src/*.h - src/bench/*.cpp - src/bench/*.h - src/bls/*.cpp - src/bls/*.h - src/compat/*.cpp - src/compat/*.h - src/consensus/*.cpp - src/consensus/*.h - src/crypto/*.c - src/crypto/*.cpp - src/crypto/*.h - src/evo/*.cpp - src/evo/*.h - src/leveldb/db/*.cc - src/leveldb/db/*.h - src/leveldb/include/*.h - src/llmq/*.cpp - src/llmq/*.h - src/smartnode/*.cpp - src/smartnode/*.h - src/policy/*.cpp - src/policy/*.h - src/primitives/*.cpp - src/primitives/*.h - src/privatesend/*.cpp - src/privatesend/*.h - src/qt/*.cpp - src/qt/*.h - src/qt/test/*.cpp - src/qt/test/*.h - src/rpc/*.cpp - src/rpc/*.h - src/script/*.cpp - src/script/*.h - src/secp256k1/include/*.h - src/test/*.cpp - src/test/*.h - src/univalue/include/*.h - src/univalue/lib/*.cpp - src/univalue/lib/*.h - src/wallet/*.cpp - src/wallet/*.h - src/wallet/test/*.cpp - src/zmq/*.cpp - src/zmq/*.h - ) - -add_executable(${PROJECT_NAME} ${SOURCE_FILES}) \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fbff0b4b5d..d1c47ecc15 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,9 +24,9 @@ facilitates social contribution, easy testing and peer review. To contribute a patch, the workflow is as follows: - - Fork repository - - Create topic branch - - Commit patches + 1. Fork repository + 1. Create topic branch + 1. Commit patches The project coding conventions in the [developer notes](doc/developer-notes.md) must be adhered to. @@ -42,8 +42,8 @@ in init.cpp") in which case a single title line is sufficient. Commit messages s helpful to people reading your code in the future, so explain the reasoning for your decisions. Further explanation [here](http://chris.beams.io/posts/git-commit/). -If a particular commit references another issue, please add the reference, for -example `refs #1234`, or `fixes #4321`. Using the `fixes` or `closes` keywords +If a particular commit references another issue, please add the reference. For +example: `refs #1234` or `fixes #4321`. Using the `fixes` or `closes` keywords will cause the corresponding issue to be closed when the pull request is merged. Please refer to the [Git manual](https://git-scm.com/doc) for more information @@ -57,12 +57,12 @@ the pull request affects. Valid areas as: - *Consensus* for changes to consensus critical code - *Docs* for changes to the documentation - - *Qt* for changes to bitcoin-qt + - *Qt* for changes to raptoreum-qt - *Mining* for changes to the mining code - *Net* or *P2P* for changes to the peer-to-peer network code - *RPC/REST/ZMQ* for changes to the RPC, REST or ZMQ APIs - *Scripts and tools* for changes to the scripts and tools - - *Tests* for changes to the bitcoin unit tests or QA tests + - *Tests* for changes to the unit tests or QA tests - *Trivial* should **only** be used for PRs that do not change generated executable code. Notably, refactors (change of function arguments and code reorganization) and changes in behavior should **not** be marked as trivial. @@ -81,7 +81,11 @@ Examples: Qt: Add feed bump button Trivial: Fix typo in init.cpp -If a pull request is specifically not to be considered for merging (yet) please +Note that translations should not be submitted as pull requests, please see +[Translation Process](https://github.com/Raptor3um/raptoreum/blob/master/doc/translation_process.md) +for more information on helping with translations. + +If a pull request is not to be considered for merging (yet), please prefix the title with [WIP] or use [Tasks Lists](https://help.github.com/articles/basic-writing-and-formatting-syntax/#task-lists) in the body of the pull request to indicate tasks are pending. @@ -102,10 +106,10 @@ before it will be merged. The basic squashing workflow is shown below. git checkout your_branch_name git rebase -i HEAD~n - # n is normally the number of commits in the pull - # set commits from 'pick' to 'squash', save and quit - # on the next screen, edit/refine commit messages - # save and quit + # n is normally the number of commits in the pull request. + # Set commits (except the one in the first line) from 'pick' to 'squash', save and quit. + # On the next screen, edit/refine commit messages. + # Save and quit. git push -f # (force push to GitHub) If you have problems with squashing (or other workflows with `git`), you can @@ -174,7 +178,7 @@ In general, all pull requests must: the project (for example refactoring for modularisation); - Be well peer reviewed; - Have unit tests and functional tests where appropriate; - - Follow [code style guidelines](/doc/developer-notes.md); + - Follow code style guidelines ([C++](doc/developer-notes.md), [functional tests](test/functional/README.md)); - Not break the existing test suite; - Where bugs are fixed, where possible, there should be unit tests demonstrating the bug and also proving the fix. This helps prevent regression. @@ -225,6 +229,25 @@ discussed extensively on the mailing list and IRC, be accompanied by a widely discussed BIP and have a generally widely perceived technical consensus of being a worthwhile change based on the judgement of the maintainers. +#### Verifying a Rebase + +When someone rebases their PR, it can often be very difficult to ensure that +extra changes were not included in that force push. This changes could be anything +from merge conflicts to someone attempting to sneak something into the PR. To check +that a PR is the same before and after force push, you can use the following function. +Place this function in your `~/.bashrc`. In order for this function to work, both the +before and after commits must be present locally. + +``` +function gfd() { + local fp1=$(git merge-base --fork-point develop $1) + local fp2=$(git merge-base --fork-point develop $2) + echo fp1=$fp1 + echo fp2=$fp2 + diff --color=always -u -I'^[^-+]' <(git diff $fp1..$1) <(git diff $fp2..$2) +} +``` + ### Finding Reviewers The review process is normally fairly responsive on the Raptoreum Core repository, however diff --git a/COPYING b/COPYING index 6f665c3478..0b6c52a691 100644 --- a/COPYING +++ b/COPYING @@ -3,7 +3,7 @@ The MIT License (MIT) Copyright (c) 2009-2020 The Bitcoin Core developers Copyright (c) 2009-2020 Bitcoin Developers Copyright (c) 2014-2020 The Dash Core developers -Copyright (c) 2020 The Raptoreum developers +Copyright (c) 2020-2022 The Raptoreum developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 6975482e1b..0000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,100 +0,0 @@ -// This Jenkinsfile will build a builder image and then run the actual build and tests inside this image -// It's very important to not execute any scripts outside of the builder container, as it's our protection against -// external developers bringing in harmful code into Jenkins. -// Jenkins will only run the build if this Jenkinsfile was not modified in an external pull request. Only branches -// which are part of the Raptoreum repo will allow modification to the Jenkinsfile. - -def targets = [ - 'win32', - 'win64', - 'linux32', - 'linux64', - 'linux64_nowallet', - 'linux64_release', - 'mac', -] - -def tasks = [:] -for(int i = 0; i < targets.size(); i++) { - def target = targets[i] - - tasks["${target}"] = { - node { - def BUILD_NUMBER = sh(returnStdout: true, script: 'echo $BUILD_NUMBER').trim() - def BRANCH_NAME = sh(returnStdout: true, script: 'echo $BRANCH_NAME').trim() - def UID = sh(returnStdout: true, script: 'id -u').trim() - def HOME = sh(returnStdout: true, script: 'echo $HOME').trim() - def pwd = sh(returnStdout: true, script: 'pwd').trim() - - checkout scm - - def env = [ - "BUILD_TARGET=${target}", - "PULL_REQUEST=false", - "JOB_NUMBER=${BUILD_NUMBER}", - ] - withEnv(env) { - def builderImageName="raptoreum-builder-${target}" - - def builderImage - stage("${target}/builder-image") { - builderImage = docker.build("${builderImageName}", "--build-arg BUILD_TARGET=${target} ci -f ci/Dockerfile.builder") - } - - builderImage.inside("-t") { - // copy source into fixed path - // we must build under the same path everytime as otherwise caches won't work properly - sh "cp -ra ${pwd}/. /raptoreum-src/" - - // restore cache - def hasCache = false - try { - copyArtifacts(projectName: "raptoreum-raptoreum/${BRANCH_NAME}", optional: true, selector: lastSuccessful(), filter: "ci-cache-${target}.tar.gz") - } catch (Exception e) { - } - if (fileExists("ci-cache-${target}.tar.gz")) { - hasCache = true - echo "Using cache from raptoreum-raptoreum/${BRANCH_NAME}" - } else { - try { - copyArtifacts(projectName: 'raptoreum-raptoreum/develop', optional: true, selector: lastSuccessful(), filter: "ci-cache-${target}.tar.gz"); - } catch (Exception e) { - } - if (fileExists("ci-cache-${target}.tar.gz")) { - hasCache = true - echo "Using cache from raptoreum-raptoreum/develop" - } - } - - if (hasCache) { - sh "cd /raptoreum-src && tar xzf ${pwd}/ci-cache-${target}.tar.gz" - } else { - sh "mkdir -p /raptoreum-src/ci-cache-${target}" - } - - stage("${target}/depends") { - sh 'cd /raptoreum-src && ./ci/build_depends.sh' - } - stage("${target}/build") { - sh 'cd /raptoreum-src && ./ci/build_src.sh' - } - stage("${target}/test") { - sh 'cd /raptoreum-src && ./ci/test_unittests.sh' - } - stage("${target}/test") { - sh 'cd /raptoreum-src && ./ci/test_integrationtests.sh' - } - - // archive cache and copy it into the jenkins workspace - sh "cd /raptoreum-src && tar czfv ci-cache-${target}.tar.gz ci-cache-${target} && cp ci-cache-${target}.tar.gz ${pwd}/" - } - - // upload cache - archiveArtifacts artifacts: "ci-cache-${target}.tar.gz", fingerprint: true - } - } - } -} - -parallel tasks - diff --git a/Jenkinsfile.gitian b/Jenkinsfile.gitian deleted file mode 100644 index c45a419584..0000000000 --- a/Jenkinsfile.gitian +++ /dev/null @@ -1,129 +0,0 @@ -def targets = [ - 'linux', - 'win', - 'osx', -] - -def osslTarUrl = 'http://downloads.sourceforge.net/project/osslsigncode/osslsigncode/osslsigncode-1.7.1.tar.gz' -def osslPatchUrl = 'https://bitcoincore.org/cfields/osslsigncode-Backports-to-1.7.1.patch' -def SDK_URL='https://bitcoincore.org/depends-sources/sdks' -def OSX_SDK='10.11' -def proc = 4 -def mem = 2000 - -def repositoryUrl = "https://github.com/raptoreum/raptoreum.git" - -def tasks = [:] -for(int i = 0; i < targets.size(); i++) { - def target = targets[i] - - tasks["${target}"] = { - node { - deleteDir() // cleanup workspace - - def pwd = sh(returnStdout: true, script: 'pwd').trim() - def dockerGid = sh(returnStdout: true, script: "stat -c '%g' /var/run/docker.sock").trim() - def BRANCH_NAME = sh(returnStdout: true, script: 'echo $BRANCH_NAME').trim() - def commit = BRANCH_NAME - def hasCache = false - - def gitianDescriptor - - stage("${target}/prepare") { - dir('raptoreum') { - checkout scm - gitianDescriptor = readYaml file: "contrib/gitian-descriptors/gitian-${target}.yml" - } - dir('gitian-builder') { - git url: 'https://github.com/raptoreum/gitian-builder.git' - } - sh "mkdir -p raptoreumcore-binaries" - if (target == "osx") { - dir('gitian-builder') { - sh 'mkdir -p inputs' - sh "curl --location --fail $SDK_URL/MacOSX${OSX_SDK}.sdk.tar.gz -o inputs/MacOSX${OSX_SDK}.sdk.tar.gz" - } - } - - // restore cache - try { - copyArtifacts(projectName: "raptoreum-raptoreum-gitian-nightly/${BRANCH_NAME}", optional: true, selector: lastSuccessful(), filter: "cache-${gitianDescriptor.name}.tar.gz") - } catch (Exception e) { - } - if (fileExists("cache-${gitianDescriptor.name}.tar.gz")) { - hasCache = true - echo "Using cache from raptoreum-raptoreum-gitian-nightly/${BRANCH_NAME}" - } else { - try { - copyArtifacts(projectName: 'raptoreum-raptoreum-gitian-nightly/develop', optional: true, selector: lastSuccessful(), filter: "cache-${gitianDescriptor.name}.tar.gz"); - } catch (Exception e) { - } - if (fileExists("cache-${gitianDescriptor.name}.tar.gz")) { - hasCache = true - echo "Using cache from raptoreum-raptoreum-gitian-nightly/develop" - } - } - } - - def gitianImage - stage("${target}/builder-image") { - dir('raptoreum') { - gitianImage = docker.build("raptoreum-gitian:${env.BUILD_ID}", 'ci -f ci/Dockerfile.gitian-builder') - } - } - - gitianImage.inside("--group-add ${dockerGid} -t -v \"/var/run/docker.sock:/var/run/docker.sock\"") { - sh "mkdir -p gitian-builder/cache" - if (hasCache) { - sh "cd gitian-builder/cache && tar xzfv ../../cache-${gitianDescriptor.name}.tar.gz" - } - - stage("${target}/download") { - dir('gitian-builder') { - sh "mkdir -p inputs" - sh "cd inputs && curl -R -O ${osslPatchUrl}" - sh "cd inputs && curl -R -O ${osslTarUrl}" - sh "make -C ../raptoreum/depends download SOURCES_PATH=`pwd`/cache/common" - } - } - stage("${target}/base-vm") { - dir('gitian-builder') { - sh "./bin/make-base-vm --suite bionic --arch amd64 --docker" - } - } - - stage("${target}/gbuild") { - dir('gitian-builder') { - // make sure an old version is not running - sh "docker rm -fv gitian-target || true" - - try { - sh """ - tail -F var/install.log & - tail -F var/build.log & - USE_DOCKER=1 ./bin/gbuild -j ${proc} -m ${mem} --commit raptoreum=${commit} --url raptoreum=${repositoryUrl} ../raptoreum/contrib/gitian-descriptors/gitian-${target}.yml - RET=\$? - # give the above tail calls enough time to print everything on failure - sleep 2s - exit \$RET - """ - } finally { - // make sure it doesn't run forever - sh "docker rm -fv gitian-target || true" - } - sh "mv build/out/raptoreumcore-* ../raptoreumcore-binaries/" - sh "mv build/out/src/raptoreumcore-* ../raptoreumcore-binaries/" - } - archiveArtifacts artifacts: 'raptoreumcore-binaries/*', fingerprint: true - } - - // TODO remove this in a few days (only needed to prune the old compressed file from Jenkins caches) - sh "cd gitian-builder/cache && find -name ccache.tar.gz | xargs rm -f" - sh "cd gitian-builder/cache && tar czfv ../../cache-${gitianDescriptor.name}.tar.gz common ${gitianDescriptor.name}" - archiveArtifacts artifacts: "cache-${gitianDescriptor.name}.tar.gz", fingerprint: true - } - } - } -} - -parallel tasks diff --git a/Makefile.am b/Makefile.am index 300d77a488..dffaad0234 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,17 +1,21 @@ # Copyright (c) 2013-2016 The Bitcoin Core developers # Copyright (c) 2014-2018 The Dash Core developers -# Copyright (c) 2020 The Raptoreum developers +# Copyright (c) 2020-2022 The Raptoreum developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. +# Pattern rule to print variables, e.g. make print-top_srcdir +print-%: + @echo '$*' = '$($*)' + ACLOCAL_AMFLAGS = -I build-aux/m4 SUBDIRS = src if ENABLE_MAN SUBDIRS += doc/man endif .PHONY: deploy FORCE +.INTERMEDIATE: $(COVERAGE_INFO) -GZIP_ENV="-9n" export PYTHONPATH if BUILD_BITCOIN_LIBS @@ -22,7 +26,8 @@ endif BITCOIND_BIN=$(top_builddir)/src/$(BITCOIN_DAEMON_NAME)$(EXEEXT) BITCOIN_QT_BIN=$(top_builddir)/src/qt/$(BITCOIN_GUI_NAME)$(EXEEXT) BITCOIN_CLI_BIN=$(top_builddir)/src/$(BITCOIN_CLI_NAME)$(EXEEXT) -BITCOIN_WIN_INSTALLER=$(PACKAGE)-$(PACKAGE_VERSION)-win$(WINDOWS_BITS)-setup$(EXEEXT) +BITCOIN_WALLET_BIN=$(top_builddir)/src/$(BITCOIN_WALLET_TOOL_NAME)$(EXEEXT) +BITCOIN_WIN_INSTALLER=$(PACKAGE)-$(PACKAGE_VERSION)-win64-setup$(EXEEXT) empty := space := $(empty) $(empty) @@ -30,39 +35,30 @@ space := $(empty) $(empty) OSX_APP=Raptoreum-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_INSTALLER_ICONS=$(top_srcdir)/src/qt/res/icons/bitcoin.icns +OSX_INSTALLER_ICONS=$(top_srcdir)/src/qt/res/icons/raptoreum.icns 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/raptoreum-cli.bash-completion \ - $(top_srcdir)/contrib/raptoreum-tx.bash-completion \ $(top_srcdir)/contrib/raptoreumd.bash-completion \ $(top_srcdir)/contrib/init DIST_SHARE = \ $(top_srcdir)/share/genbuild.sh \ - $(top_srcdir)/share/rpcuser + $(top_srcdir)/share/rpcauth BIN_CHECKS=$(top_srcdir)/contrib/devtools/symbol-check.py \ $(top_srcdir)/contrib/devtools/security-check.py -WINDOWS_PACKAGING = $(top_srcdir)/share/pixmaps/bitcoin.ico \ +WINDOWS_PACKAGING = $(top_srcdir)/share/pixmaps/raptoreum.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_INSTALLER_ICONS) \ - $(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 \ +COVERAGE_INFO = $(COV_TOOL_WRAPPER) baseline.info \ test_raptoreum_filtered.info total_coverage.info \ baseline_filtered.info functional_test.info functional_test_filtered.info \ test_raptoreum_coverage.info test_raptoreum.info @@ -70,94 +66,71 @@ COVERAGE_INFO = baseline.info \ dist-hook: -$(GIT) archive --format=tar HEAD -- src/clientversion.cpp | $(AMTAR) -C $(top_distdir) -xf - +if TARGET_WINDOWS $(BITCOIN_WIN_INSTALLER): all-recursive $(MKDIR_P) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIND_BIN) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_QT_BIN) $(top_builddir)/release STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_CLI_BIN) $(top_builddir)/release - @test -f $(MAKENSIS) && $(MAKENSIS) -V2 $(top_builddir)/share/setup.nsi || \ + STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_WALLET_BIN) $(top_builddir)/release + @test -f $(MAKENSIS) && echo 'OutFile "$@"' | cat $(top_builddir)/share/setup.nsi - | $(MAKENSIS) -V2 - || \ echo error: could not build $@ @echo built $@ +deploy: $(BITCOIN_WIN_INSTALLER) +endif + +if TARGET_DARWIN $(OSX_APP)/Contents/PkgInfo: $(MKDIR_P) $(@D) @echo "APPL????" > $@ $(OSX_APP)/Contents/Resources/empty.lproj: $(MKDIR_P) $(@D) - @touch $@ + @touch $@ $(OSX_APP)/Contents/Info.plist: $(OSX_PLIST) $(MKDIR_P) $(@D) $(INSTALL_DATA) $< $@ -$(OSX_APP)/Contents/Resources/bitcoin.icns: $(OSX_INSTALLER_ICONS) +$(OSX_APP)/Contents/Resources/raptoreum.icns: $(OSX_INSTALLER_ICONS) $(MKDIR_P) $(@D) $(INSTALL_DATA) $< $@ -$(OSX_APP)/Contents/MacOS/Raptoreum-Qt: $(BITCOIN_QT_BIN) +$(OSX_APP)/Contents/MacOS/Raptoreum-Qt: all-recursive $(MKDIR_P) $(@D) - STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $< $@ + STRIPPROG="$(STRIP)" $(INSTALL_STRIP_PROGRAM) $(BITCOIN_QT_BIN) $@ $(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/bitcoin.icns $(OSX_APP)/Contents/Info.plist \ + $(OSX_APP)/Contents/Resources/raptoreum.icns $(OSX_APP)/Contents/Info.plist \ $(OSX_APP)/Contents/MacOS/Raptoreum-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 -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 $@ +$(OSX_DMG): $(OSX_APP_BUILT) $(OSX_PACKAGING) + $(PYTHON) $(OSX_DEPLOY_SCRIPT) $(OSX_APP) $(OSX_VOLNAME) -translations-dir=$(QT_TRANSLATION_DIR) -dmg deploydir: $(OSX_DMG) -else +else !BUILD_DARWIN 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/Raptoreum-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)" +$(OSX_DMG): deploydir + $(XORRISOFS) -D -l -V "$(OSX_VOLUME)" -no-pad -r -dir-mode 0755 -o $@ dist $(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/Raptoreum-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 + INSTALL_NAME_TOOL=$(INSTALL_NAME_TOOL) OTOOL=$(OTOOL) STRIP=$(STRIP) $(PYTHON) $(OSX_DEPLOY_SCRIPT) $(OSX_APP) $(OSX_VOLNAME) -translations-dir=$(QT_TRANSLATION_DIR) -deploydir: $(APP_DIST_EXTRAS) -endif +deploydir: $(APP_DIST_DIR)/$(OSX_APP)/Contents/MacOS/Raptoreum-Qt +endif !BUILD_DARWIN -if TARGET_DARWIN -appbundle: $(OSX_APP_BUILT) deploy: $(OSX_DMG) endif -if TARGET_WINDOWS -deploy: $(BITCOIN_WIN_INSTALLER) -endif $(BITCOIN_QT_BIN): FORCE $(MAKE) -C src qt/$(@F) @@ -168,10 +141,28 @@ $(BITCOIND_BIN): FORCE $(BITCOIN_CLI_BIN): FORCE $(MAKE) -C src $(@F) -if USE_LCOV -LCOV_FILTER_PATTERN=-p "/usr/include/" -p "src/leveldb/" -p "src/bench/" -p "src/univalue" -p "src/crypto/ctaes" -p "src/secp256k1" +$(BITCOIN_WALLET_BIN): FORCE + $(MAKE) -C src $(@F) -baseline.info: +if USE_LCOV +LCOV_FILTER_PATTERN = \ + -p "/usr/include/" \ + -p "/usr/lib/" \ + -p "/usr/lib64/" \ + -p "src/dashbls/" \ + -p "src/leveldb/" \ + -p "src/crc32c/" \ + -p "src/bench/" \ + -p "src/univalue" \ + -p "src/crypto/ctaes" \ + -p "src/secp256k1" \ + -p "depends" + +$(COV_TOOL_WRAPPER): + @echo 'exec $(COV_TOOL) "$$@"' > $(COV_TOOL_WRAPPER) + @chmod +x $(COV_TOOL_WRAPPER) + +baseline.info: $(COV_TOOL_WRAPPER) $(LCOV) -c -i -d $(abs_builddir)/src -o $@ baseline_filtered.info: baseline.info @@ -216,7 +207,7 @@ endif dist_noinst_SCRIPTS = autogen.sh -EXTRA_DIST = $(DIST_SHARE) test/functional/test_runner.py test/functional $(DIST_CONTRIB) $(DIST_DOCS) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) $(BIN_CHECKS) +EXTRA_DIST = $(DIST_SHARE) $(DIST_CONTRIB) $(WINDOWS_PACKAGING) $(OSX_PACKAGING) $(BIN_CHECKS) EXTRA_DIST += \ test/util/bitcoin-util-test.py \ @@ -256,14 +247,29 @@ EXTRA_DIST += \ test/util/data/txcreatescript2.json \ test/util/data/txcreatesignv1.hex \ test/util/data/txcreatesignv1.json \ - test/util/data/txcreatesignv2.hex + test/util/data/txcreatesignv2.hex \ + test/util/rpcauth-test.py CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER) -.INTERMEDIATE: $(COVERAGE_INFO) - DISTCHECK_CONFIGURE_FLAGS = --enable-man -clean-local: - rm -rf coverage_percent.txt test_raptoreum.coverage/ total.coverage/ test/tmp/ cache/ $(OSX_APP) - rm -rf test/functional/__pycache__ +doc/doxygen/.stamp: doc/Doxyfile FORCE + $(MKDIR_P) $(@D) + $(DOXYGEN) $^ + $(AM_V_at) touch $@ + +if HAVE_DOXYGEN +docs: doc/doxygen/.stamp +else +docs: + @echo "error: doxygen not found" +endif + +clean-docs: + rm -rf doc/doxygen + +clean-local: clean-docs + rm -rf coverage_percent.txt test_raptoreum.coverage/ total.coverage/ test/tmp/ cache/ $(OSX_APP) src/qt/moc_* + rm -rf test/functional/__pycache__ test/functional/test_framework/__pycache__ test/cache + rm -rf osx_volname dist/ diff --git a/README.md b/README.md index 656f17c541..6d4221b66d 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ +Raptoreum Core Latest v2.0.3 +=========================== -What is Raptoreum? -------------- +|CI|master|develop| +|-|-|-| -The name Raptoreum is derived from the Victoria term for a bird of prey and ium/eum place for a pertaining to in this case birds of prey. The name comes from the team’s extensive experience in the security field with top level skills covering all aspects of it. This is a unique strength in the crypto community and will leverage well into a successful project. +The name Raptoreum is derived from the Victorian term for a bird of prey and ium/eum place for a pertaining to in this case birds of prey. The name comes from the team’s extensive experience in the security field with top level skills covering all aspects of it. This is a unique strength in the crypto community and will leverage well into a successful project. Introduction -Raptoreum began as the fairly simple idea, introducing smart contracts which would allow on chain, trustless transfers (goodbye centralized marketplaces) on the Ravencoin codebase, however with the automation of assets and RTM (Raptoreum). -The project has quickly evolved, adding innovative features that not only further expand the asset layer, but also introduce features that could help other Blockchain projects. Ravencoin unfortunately suffered several serious breaches of its asset layer so that code base has been abandoned by us. We are currently working with and building on Dash code expending its capabilities significantly. +Raptoreum began as the fairly simple idea, introducing smart contracts which would allow on chain, trustless transfers (goodbye centralized marketplaces) on the Ravencoin codebase, however with the automation of assets and RTM (Raptoreum). +The project has quickly evolved, adding innovative features that not only further expand the asset layer, but also introduce features that could help other Blockchain projects. Ravencoin unfortunately suffered several serious breaches of its asset layer so that code base has been abandoned by us. We are currently working with and building on Raptoreum code expending its capabilities significantly. Raptoreum is now a code fork of Dash and inherits current and optionally future features such as chain locks, oracles etc. We are further expanding capabilities by adding the following features: A) The deployment of a unique asset layer. @@ -29,7 +31,7 @@ Development Process ------------------- The `master` branch is meant to be stable. Development is done in separate branches. -[Tags](https://github.com/raptoreum/raptoreum/tags) are created to indicate new official, +[Tags](https://github.com/raptor3um/raptoreum/tags) are created to indicate new official, stable release versions of Raptoreum Core. The contribution workflow is described in [CONTRIBUTING.md](CONTRIBUTING.md). diff --git a/autogen.sh b/autogen.sh index 27417daf76..d355b99915 100755 --- a/autogen.sh +++ b/autogen.sh @@ -3,13 +3,14 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. +export LC_ALL=C set -e -srcdir="$(dirname $0)" +srcdir="$(dirname "$0")" cd "$srcdir" -if [ -z ${LIBTOOLIZE} ] && GLIBTOOLIZE="`which glibtoolize 2>/dev/null`"; then +if [ -z "${LIBTOOLIZE}" ] && GLIBTOOLIZE="$(command -v glibtoolize)"; then LIBTOOLIZE="${GLIBTOOLIZE}" export LIBTOOLIZE fi -which autoreconf >/dev/null || \ +command -v autoreconf >/dev/null || \ (echo "configuration failed, please install autoconf first" && exit 1) -autoreconf --install --force --warnings=all +autoreconf --install --force --warnings=all \ No newline at end of file diff --git a/build-aux/m4/ax_boost_base.m4 b/build-aux/m4/ax_boost_base.m4 index 650c94fa64..ac9d460594 100644 --- a/build-aux/m4/ax_boost_base.m4 +++ b/build-aux/m4/ax_boost_base.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_boost_base.html +# https://www.gnu.org/software/autoconf-archive/ax_boost_base.html # =========================================================================== # # SYNOPSIS @@ -11,7 +11,7 @@ # Test for the Boost C++ libraries of a particular version (or newer) # # If no path to the installed boost library is given the macro searchs -# under /usr, /usr/local, /opt and /opt/local and evaluates the +# under /usr, /usr/local, /opt, /opt/local and /opt/homebrew and evaluates the # $BOOST_ROOT environment variable. Further documentation is available at # . # @@ -33,7 +33,15 @@ # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 27 +#serial 49 + +# example boost program (need to pass version) +m4_define([_AX_BOOST_BASE_PROGRAM], + [AC_LANG_PROGRAM([[ +#include +]],[[ +(void) ((void)sizeof(char[1 - 2*!!((BOOST_VERSION) < ($1))])); +]])]) AC_DEFUN([AX_BOOST_BASE], [ @@ -44,110 +52,123 @@ AC_ARG_WITH([boost], or disable it (ARG=no) @<:@ARG=yes@:>@ ])], [ - if test "$withval" = "no"; then - want_boost="no" - elif test "$withval" = "yes"; then - want_boost="yes" - ac_boost_path="" - else - want_boost="yes" - ac_boost_path="$withval" - fi + AS_CASE([$withval], + [no],[want_boost="no";_AX_BOOST_BASE_boost_path=""], + [yes],[want_boost="yes";_AX_BOOST_BASE_boost_path=""], + [want_boost="yes";_AX_BOOST_BASE_boost_path="$withval"]) ], [want_boost="yes"]) AC_ARG_WITH([boost-libdir], - AS_HELP_STRING([--with-boost-libdir=LIB_DIR], - [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]), - [ - if test -d "$withval" - then - ac_boost_lib_path="$withval" - else - AC_MSG_ERROR(--with-boost-libdir expected directory name) - fi - ], - [ac_boost_lib_path=""] -) + [AS_HELP_STRING([--with-boost-libdir=LIB_DIR], + [Force given directory for boost libraries. + Note that this will override library path detection, + so use this parameter only if default library detection fails + and you know exactly where your boost libraries are located.])], + [ + AS_IF([test -d "$withval"], + [_AX_BOOST_BASE_boost_lib_path="$withval"], + [AC_MSG_ERROR([--with-boost-libdir expected directory name])]) + ], + [_AX_BOOST_BASE_boost_lib_path=""]) -if test "x$want_boost" = "xyes"; then - boost_lib_version_req=ifelse([$1], ,1.20.0,$1) - boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` - boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` - boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` - boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` - if test "x$boost_lib_version_req_sub_minor" = "x" ; then - boost_lib_version_req_sub_minor="0" - fi - WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` - AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) +BOOST_LDFLAGS="" +BOOST_CPPFLAGS="" +AS_IF([test "$want_boost" = "yes"], + [_AX_BOOST_BASE_RUNDETECT([$1],[$2],[$3])]) +AC_SUBST(BOOST_CPPFLAGS) +AC_SUBST(BOOST_LDFLAGS) +]) + + +# convert a version string in $2 to numeric and affect to polymorphic var $1 +AC_DEFUN([_AX_BOOST_BASE_TONUMERICVERSION],[ + AS_IF([test "$2" = ""],[_AX_BOOST_BASE_TONUMERICVERSION_req="1.20.0"],[_AX_BOOST_BASE_TONUMERICVERSION_req="$2"]) + _AX_BOOST_BASE_TONUMERICVERSION_req_shorten=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([[0-9]]*\.[[0-9]]*\)'` + _AX_BOOST_BASE_TONUMERICVERSION_req_major=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '\([[0-9]]*\)'` + AS_IF([test "$_AX_BOOST_BASE_TONUMERICVERSION_req_major" = ""], + [AC_MSG_ERROR([You should at least specify libboost major version])]) + _AX_BOOST_BASE_TONUMERICVERSION_req_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[[0-9]]*\.\([[0-9]]*\)'` + AS_IF([test "$_AX_BOOST_BASE_TONUMERICVERSION_req_minor" = ""], + [_AX_BOOST_BASE_TONUMERICVERSION_req_minor="0"]) + _AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` + AS_IF([test "$_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor" = ""], + [_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor="0"]) + _AX_BOOST_BASE_TONUMERICVERSION_RET=`expr $_AX_BOOST_BASE_TONUMERICVERSION_req_major \* 100000 \+ $_AX_BOOST_BASE_TONUMERICVERSION_req_minor \* 100 \+ $_AX_BOOST_BASE_TONUMERICVERSION_req_sub_minor` + AS_VAR_SET($1,$_AX_BOOST_BASE_TONUMERICVERSION_RET) +]) + +dnl Run the detection of boost should be run only if $want_boost +AC_DEFUN([_AX_BOOST_BASE_RUNDETECT],[ + _AX_BOOST_BASE_TONUMERICVERSION(WANT_BOOST_VERSION,[$1]) succeeded=no + + AC_REQUIRE([AC_CANONICAL_HOST]) dnl On 64-bit systems check for system libraries in both lib64 and lib. dnl The former is specified by FHS, but e.g. Debian does not adhere to dnl this (as it rises problems for generic multi-arch support). dnl The last entry in the list is chosen by default when no libraries dnl are found, e.g. when only header-only libraries are installed! - libsubdirs="lib" - ax_arch=`uname -m` - case $ax_arch in - x86_64) - libsubdirs="lib64 libx32 lib lib64" - ;; - ppc64|s390x|sparc64|aarch64|ppc64le) - libsubdirs="lib64 lib lib64" - ;; - esac + AS_CASE([${host_cpu}], + [x86_64],[libsubdirs="lib64 libx32 lib lib64"], + [mips*64*],[libsubdirs="lib64 lib32 lib lib64"], + [ppc64|powerpc64|s390x|sparc64|aarch64|ppc64le|powerpc64le|riscv64],[libsubdirs="lib64 lib lib64"], + [libsubdirs="lib"] + ) dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give dnl them priority over the other paths since, if libs are found there, they dnl are almost assuredly the ones desired. - AC_REQUIRE([AC_CANONICAL_HOST]) - libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs" - - case ${host_cpu} in - i?86) - libsubdirs="lib/i386-${host_os} $libsubdirs" - ;; - esac - - dnl some arches may advertise a cpu type that doesn't line up with their - dnl prefix's cpu type. For example, uname may report armv7l while libs are - dnl installed to /usr/lib/arm-linux-gnueabihf. Try getting the compiler's - dnl value for an extra chance of finding the correct path. - libsubdirs="lib/`$CXX -dumpmachine 2>/dev/null` $libsubdirs" + AS_CASE([${host_cpu}], + [i?86],[multiarch_libsubdir="lib/i386-${host_os}"], + [armv7l],[multiarch_libsubdir="lib/arm-${host_os}"], + [multiarch_libsubdir="lib/${host_cpu}-${host_os}"] + ) dnl first we check the system location for boost libraries dnl this location ist chosen if boost libraries are installed with the --layout=system option dnl or if you install boost with RPM - if test "$ac_boost_path" != ""; then - BOOST_CPPFLAGS="-I$ac_boost_path/include" - for ac_boost_path_tmp in $libsubdirs; do - if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then - BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" - break - fi - done - elif test "$cross_compiling" != yes; then - for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do - if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then - for libsubdir in $libsubdirs ; do - if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + AS_IF([test "$_AX_BOOST_BASE_boost_path" != ""],[ + AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) includes in "$_AX_BOOST_BASE_boost_path/include"]) + AS_IF([test -d "$_AX_BOOST_BASE_boost_path/include" && test -r "$_AX_BOOST_BASE_boost_path/include"],[ + AC_MSG_RESULT([yes]) + BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include" + for _AX_BOOST_BASE_boost_path_tmp in $multiarch_libsubdir $libsubdirs; do + AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION) lib path in "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"]) + AS_IF([test -d "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" && test -r "$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp" ],[ + AC_MSG_RESULT([yes]) + BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$_AX_BOOST_BASE_boost_path_tmp"; + break; + ], + [AC_MSG_RESULT([no])]) + done],[ + AC_MSG_RESULT([no])]) + ],[ + if test "$cross_compiling" = yes; then + search_libsubdirs=$multiarch_libsubdir + else + search_libsubdirs="$multiarch_libsubdir $libsubdirs" + fi + for _AX_BOOST_BASE_boost_path_tmp in /usr /usr/local /opt /opt/local /opt/homebrew ; do + if test -d "$_AX_BOOST_BASE_boost_path_tmp/include/boost" && test -r "$_AX_BOOST_BASE_boost_path_tmp/include/boost" ; then + for libsubdir in $search_libsubdirs ; do + if ls "$_AX_BOOST_BASE_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done - BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" - BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" + BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path_tmp/$libsubdir" + BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path_tmp/include" break; fi done - fi + ]) dnl overwrite ld flags if we have required special directory with dnl --with-boost-libdir parameter - if test "$ac_boost_lib_path" != ""; then - BOOST_LDFLAGS="-L$ac_boost_lib_path" - fi + AS_IF([test "$_AX_BOOST_BASE_boost_lib_path" != ""], + [BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_lib_path"]) + AC_MSG_CHECKING([for boostlib >= $1 ($WANT_BOOST_VERSION)]) CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS @@ -158,15 +179,7 @@ if test "x$want_boost" = "xyes"; then AC_REQUIRE([AC_PROG_CXX]) AC_LANG_PUSH(C++) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - @%:@include - ]], [[ - #if BOOST_VERSION >= $WANT_BOOST_VERSION - // Everything is okay - #else - # error Boost version is too old - #endif - ]])],[ + AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes @@ -178,40 +191,50 @@ if test "x$want_boost" = "xyes"; then dnl if we found no boost with system layout we search for boost libraries dnl built and installed without the --layout=system option or for a staged(not installed) version - if test "x$succeeded" != "xyes"; then + if test "$succeeded" != "yes" ; then CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" BOOST_CPPFLAGS= - BOOST_LDFLAGS= + if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then + BOOST_LDFLAGS= + fi _version=0 - if test "$ac_boost_path" != ""; then - if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then - for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do - _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + if test -n "$_AX_BOOST_BASE_boost_path" ; then + if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path"; then + for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` - BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" + BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path/include/boost-$VERSION_UNDERSCORE" done dnl if nothing found search for layout used in Windows distributions if test -z "$BOOST_CPPFLAGS"; then - if test -d "$ac_boost_path/boost" && test -r "$ac_boost_path/boost"; then - BOOST_CPPFLAGS="-I$ac_boost_path" + if test -d "$_AX_BOOST_BASE_boost_path/boost" && test -r "$_AX_BOOST_BASE_boost_path/boost"; then + BOOST_CPPFLAGS="-I$_AX_BOOST_BASE_boost_path" fi fi + dnl if we found something and BOOST_LDFLAGS was unset before + dnl (because "$_AX_BOOST_BASE_boost_lib_path" = ""), set it here. + if test -n "$BOOST_CPPFLAGS" && test -z "$BOOST_LDFLAGS"; then + for libsubdir in $libsubdirs ; do + if ls "$_AX_BOOST_BASE_boost_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi + done + BOOST_LDFLAGS="-L$_AX_BOOST_BASE_boost_path/$libsubdir" + fi fi else - if test "$cross_compiling" != yes; then - for ac_boost_path in /usr /usr/local /opt /opt/local ; do - if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then - for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do - _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` + if test "$cross_compiling" != "yes" ; then + for _AX_BOOST_BASE_boost_path in /usr /usr/local /opt /opt/local /opt/homebrew ; do + if test -d "$_AX_BOOST_BASE_boost_path" && test -r "$_AX_BOOST_BASE_boost_path" ; then + for i in `ls -d $_AX_BOOST_BASE_boost_path/include/boost-* 2>/dev/null`; do + _version_tmp=`echo $i | sed "s#$_AX_BOOST_BASE_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp - best_path=$ac_boost_path + best_path=$_AX_BOOST_BASE_boost_path fi done fi @@ -219,7 +242,7 @@ if test "x$want_boost" = "xyes"; then VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" - if test "$ac_boost_lib_path" = ""; then + if test -z "$_AX_BOOST_BASE_boost_lib_path" ; then for libsubdir in $libsubdirs ; do if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done @@ -227,7 +250,7 @@ if test "x$want_boost" = "xyes"; then fi fi - if test "x$BOOST_ROOT" != "x"; then + if test -n "$BOOST_ROOT" ; then for libsubdir in $libsubdirs ; do if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done @@ -236,7 +259,7 @@ if test "x$want_boost" = "xyes"; then stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` - if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then + if test "$V_CHECK" = "1" && test -z "$_AX_BOOST_BASE_boost_lib_path" ; then AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" @@ -251,15 +274,7 @@ if test "x$want_boost" = "xyes"; then export LDFLAGS AC_LANG_PUSH(C++) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - @%:@include - ]], [[ - #if BOOST_VERSION >= $WANT_BOOST_VERSION - // Everything is okay - #else - # error Boost version is too old - #endif - ]])],[ + AC_COMPILE_IFELSE([_AX_BOOST_BASE_PROGRAM($WANT_BOOST_VERSION)],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes @@ -270,15 +285,13 @@ if test "x$want_boost" = "xyes"; then if test "$succeeded" != "yes" ; then if test "$_version" = "0" ; then - AC_MSG_NOTICE([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) + AC_MSG_NOTICE([[We could not detect the boost libraries (version $1 or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) else AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) fi # execute ACTION-IF-NOT-FOUND (if present): ifelse([$3], , :, [$3]) else - AC_SUBST(BOOST_CPPFLAGS) - AC_SUBST(BOOST_LDFLAGS) AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) # execute ACTION-IF-FOUND (if present): ifelse([$2], , :, [$2]) @@ -286,6 +299,5 @@ if test "x$want_boost" = "xyes"; then CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" -fi -]) +]) \ No newline at end of file diff --git a/build-aux/m4/ax_boost_chrono.m4 b/build-aux/m4/ax_boost_chrono.m4 deleted file mode 100644 index 318ecea17f..0000000000 --- a/build-aux/m4/ax_boost_chrono.m4 +++ /dev/null @@ -1,119 +0,0 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_boost_chrono.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_BOOST_CHRONO -# -# DESCRIPTION -# -# Test for System library from the Boost C++ libraries. The macro requires -# a preceding call to AX_BOOST_BASE. Further documentation is available at -# . -# -# This macro calls: -# -# AC_SUBST(BOOST_CHRONO_LIB) -# -# And sets: -# -# HAVE_BOOST_CHRONO -# -# LICENSE -# -# Copyright (c) 2012 Xiyue Deng -# -# 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. - -#serial 1 - -AC_DEFUN([AX_BOOST_CHRONO], -[ - AC_ARG_WITH([boost-chrono], - AS_HELP_STRING([--with-boost-chrono@<:@=special-lib@:>@], - [use the Chrono library from boost - it is possible to specify a certain library for the linker - e.g. --with-boost-chrono=boost_chrono-gcc-mt ]), - [ - if test "$withval" = "no"; then - want_boost="no" - elif test "$withval" = "yes"; then - want_boost="yes" - ax_boost_user_chrono_lib="" - else - want_boost="yes" - ax_boost_user_chrono_lib="$withval" - fi - ], - [want_boost="yes"] - ) - - if test "x$want_boost" = "xyes"; then - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_BUILD]) - CPPFLAGS_SAVED="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" - export CPPFLAGS - - LDFLAGS_SAVED="$LDFLAGS" - LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" - export LDFLAGS - - AC_CACHE_CHECK(whether the Boost::Chrono library is available, - ax_cv_boost_chrono, - [AC_LANG_PUSH([C++]) - CXXFLAGS_SAVE=$CXXFLAGS - - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], - [[boost::chrono::system_clock::time_point time;]])], - ax_cv_boost_chrono=yes, ax_cv_boost_chrono=no) - CXXFLAGS=$CXXFLAGS_SAVE - AC_LANG_POP([C++]) - ]) - if test "x$ax_cv_boost_chrono" = "xyes"; then - AC_SUBST(BOOST_CPPFLAGS) - - AC_DEFINE(HAVE_BOOST_CHRONO,,[define if the Boost::Chrono library is available]) - BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` - - LDFLAGS_SAVE=$LDFLAGS - if test "x$ax_boost_user_chrono_lib" = "x"; then - ax_lib= - for libextension in `ls $BOOSTLIBDIR/libboost_chrono*.so* $BOOSTLIBDIR/libboost_chrono*.dylib* $BOOSTLIBDIR/libboost_chrono*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^lib\(boost_chrono.*\)\.so.*$;\1;' -e 's;^lib\(boost_chrono.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_chrono.*\)\.a.*$;\1;'` ; do - ax_lib=${libextension} - AC_CHECK_LIB($ax_lib, exit, - [BOOST_CHRONO_LIB="-l$ax_lib"; AC_SUBST(BOOST_CHRONO_LIB) link_chrono="yes"; break], - [link_chrono="no"]) - done - if test "x$link_chrono" != "xyes"; then - for libextension in `ls $BOOSTLIBDIR/boost_chrono*.dll* $BOOSTLIBDIR/boost_chrono*.a* 2>/dev/null | sed 's,.*/,,' | sed -e 's;^\(boost_chrono.*\)\.dll.*$;\1;' -e 's;^\(boost_chrono.*\)\.a.*$;\1;'` ; do - ax_lib=${libextension} - AC_CHECK_LIB($ax_lib, exit, - [BOOST_CHRONO_LIB="-l$ax_lib"; AC_SUBST(BOOST_CHRONO_LIB) link_chrono="yes"; break], - [link_chrono="no"]) - done - fi - - else - for ax_lib in $ax_boost_user_chrono_lib boost_chrono-$ax_boost_user_chrono_lib; do - AC_CHECK_LIB($ax_lib, exit, - [BOOST_CHRONO_LIB="-l$ax_lib"; AC_SUBST(BOOST_CHRONO_LIB) link_chrono="yes"; break], - [link_chrono="no"]) - done - - fi - if test "x$ax_lib" = "x"; then - AC_MSG_ERROR(Could not find a version of the boost_chrono library!) - fi - if test "x$link_chrono" = "xno"; then - AC_MSG_ERROR(Could not link against $ax_lib !) - fi - fi - - CPPFLAGS="$CPPFLAGS_SAVED" - LDFLAGS="$LDFLAGS_SAVED" - fi -]) diff --git a/build-aux/m4/ax_boost_filesystem.m4 b/build-aux/m4/ax_boost_filesystem.m4 index f5c9d56470..12f7bc5e2e 100644 --- a/build-aux/m4/ax_boost_filesystem.m4 +++ b/build-aux/m4/ax_boost_filesystem.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_boost_filesystem.html +# https://www.gnu.org/software/autoconf-archive/ax_boost_filesystem.html # =========================================================================== # # SYNOPSIS @@ -31,7 +31,7 @@ # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 26 +#serial 28 AC_DEFUN([AX_BOOST_FILESYSTEM], [ @@ -80,7 +80,6 @@ AC_DEFUN([AX_BOOST_FILESYSTEM], if test "x$ax_cv_boost_filesystem" = "xyes"; then AC_DEFINE(HAVE_BOOST_FILESYSTEM,,[define if the Boost::Filesystem library is available]) BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` - ax_lib= if test "x$ax_boost_user_filesystem_lib" = "x"; then for libextension in `ls -r $BOOSTLIBDIR/libboost_filesystem* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do ax_lib=${libextension} @@ -105,7 +104,7 @@ AC_DEFUN([AX_BOOST_FILESYSTEM], fi if test "x$ax_lib" = "x"; then - AC_MSG_ERROR(Could not find a version of the boost_filesystem library!) + AC_MSG_ERROR(Could not find a version of the Boost::Filesystem library!) fi if test "x$link_filesystem" != "xyes"; then AC_MSG_ERROR(Could not link against $ax_lib !) diff --git a/build-aux/m4/ax_boost_program_options.m4 b/build-aux/m4/ax_boost_program_options.m4 index 2bdb593716..7d23da4648 100644 --- a/build-aux/m4/ax_boost_program_options.m4 +++ b/build-aux/m4/ax_boost_program_options.m4 @@ -1,6 +1,6 @@ -# ============================================================================ -# http://www.gnu.org/software/autoconf-archive/ax_boost_program_options.html -# ============================================================================ +# ============================================================================= +# https://www.gnu.org/software/autoconf-archive/ax_boost_program_options.html +# ============================================================================= # # SYNOPSIS # @@ -29,7 +29,7 @@ # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 24 +#serial 26 AC_DEFUN([AX_BOOST_PROGRAM_OPTIONS], [ @@ -96,7 +96,7 @@ AC_DEFUN([AX_BOOST_PROGRAM_OPTIONS], done fi if test "x$ax_lib" = "x"; then - AC_MSG_ERROR(Could not find a version of the boost_program_options library!) + AC_MSG_ERROR(Could not find a version of the Boost::Program_Options library!) fi if test "x$link_program_options" != "xyes"; then AC_MSG_ERROR([Could not link against [$ax_lib] !]) diff --git a/build-aux/m4/ax_boost_system.m4 b/build-aux/m4/ax_boost_system.m4 index 1c05450cbe..323e2a676a 100644 --- a/build-aux/m4/ax_boost_system.m4 +++ b/build-aux/m4/ax_boost_system.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_boost_system.html +# https://www.gnu.org/software/autoconf-archive/ax_boost_system.html # =========================================================================== # # SYNOPSIS @@ -31,7 +31,7 @@ # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 18 +#serial 20 AC_DEFUN([AX_BOOST_SYSTEM], [ @@ -84,7 +84,6 @@ AC_DEFUN([AX_BOOST_SYSTEM], LDFLAGS_SAVE=$LDFLAGS if test "x$ax_boost_user_system_lib" = "x"; then - ax_lib= for libextension in `ls -r $BOOSTLIBDIR/libboost_system* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, @@ -109,7 +108,7 @@ AC_DEFUN([AX_BOOST_SYSTEM], fi if test "x$ax_lib" = "x"; then - AC_MSG_ERROR(Could not find a version of the boost_system library!) + AC_MSG_ERROR(Could not find a version of the Boost::System library!) fi if test "x$link_system" = "xno"; then AC_MSG_ERROR(Could not link against $ax_lib !) diff --git a/build-aux/m4/ax_boost_thread.m4 b/build-aux/m4/ax_boost_thread.m4 index 9f0bd0b23c..75e80e6e75 100644 --- a/build-aux/m4/ax_boost_thread.m4 +++ b/build-aux/m4/ax_boost_thread.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_boost_thread.html +# https://www.gnu.org/software/autoconf-archive/ax_boost_thread.html # =========================================================================== # # SYNOPSIS @@ -30,73 +30,96 @@ # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 27 +#serial 33 AC_DEFUN([AX_BOOST_THREAD], [ - AC_ARG_WITH([boost-thread], - AS_HELP_STRING([--with-boost-thread@<:@=special-lib@:>@], - [use the Thread library from boost - it is possible to specify a certain library for the linker - e.g. --with-boost-thread=boost_thread-gcc-mt ]), + AC_ARG_WITH([boost-thread], + AS_HELP_STRING([--with-boost-thread@<:@=special-lib@:>@], + [use the Thread library from boost - + it is possible to specify a certain library for the linker + e.g. --with-boost-thread=boost_thread-gcc-mt ]), [ - if test "$withval" = "no"; then - want_boost="no" - elif test "$withval" = "yes"; then + if test "$withval" = "yes"; then want_boost="yes" ax_boost_user_thread_lib="" else - want_boost="yes" - ax_boost_user_thread_lib="$withval" - fi + want_boost="yes" + ax_boost_user_thread_lib="$withval" + fi ], [want_boost="yes"] - ) + ) - if test "x$want_boost" = "xyes"; then + if test "x$want_boost" = "xyes"; then AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_BUILD]) - CPPFLAGS_SAVED="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" - export CPPFLAGS + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + export CPPFLAGS - LDFLAGS_SAVED="$LDFLAGS" - LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" - export LDFLAGS + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" + export LDFLAGS AC_CACHE_CHECK(whether the Boost::Thread library is available, - ax_cv_boost_thread, + ax_cv_boost_thread, [AC_LANG_PUSH([C++]) - CXXFLAGS_SAVE=$CXXFLAGS + CXXFLAGS_SAVE=$CXXFLAGS + + case "x$host_os" in + xsolaris ) + CXXFLAGS="-pthreads $CXXFLAGS" + break; + ;; + xmingw32 ) + CXXFLAGS="-mthreads $CXXFLAGS" + break; + ;; + *android* ) + break; + ;; + * ) + CXXFLAGS="-pthread $CXXFLAGS" + break; + ;; + esac - if test "x$host_os" = "xsolaris" ; then - CXXFLAGS="-pthreads $CXXFLAGS" - elif test "x$host_os" = "xmingw32" ; then - CXXFLAGS="-mthreads $CXXFLAGS" - else - CXXFLAGS="-pthread $CXXFLAGS" - fi - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], - [[boost::thread_group thrds; - return 0;]])], - ax_cv_boost_thread=yes, ax_cv_boost_thread=no) - CXXFLAGS=$CXXFLAGS_SAVE + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [[@%:@include ]], + [[boost::thread_group thrds; + return 0;]])], + ax_cv_boost_thread=yes, ax_cv_boost_thread=no) + CXXFLAGS=$CXXFLAGS_SAVE AC_LANG_POP([C++]) - ]) - if test "x$ax_cv_boost_thread" = "xyes"; then - if test "x$host_os" = "xsolaris" ; then - BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS" - elif test "x$host_os" = "xmingw32" ; then - BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS" - else - BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS" - fi + ]) + if test "x$ax_cv_boost_thread" = "xyes"; then + case "x$host_os" in + xsolaris ) + BOOST_CPPFLAGS="-pthreads $BOOST_CPPFLAGS" + break; + ;; + xmingw32 ) + BOOST_CPPFLAGS="-mthreads $BOOST_CPPFLAGS" + break; + ;; + *android* ) + break; + ;; + * ) + BOOST_CPPFLAGS="-pthread $BOOST_CPPFLAGS" + break; + ;; + esac - AC_SUBST(BOOST_CPPFLAGS) + AC_SUBST(BOOST_CPPFLAGS) - AC_DEFINE(HAVE_BOOST_THREAD,,[define if the Boost::Thread library is available]) + AC_DEFINE(HAVE_BOOST_THREAD,, + [define if the Boost::Thread library is available]) BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` - LDFLAGS_SAVE=$LDFLAGS + LDFLAGS_SAVE=$LDFLAGS case "x$host_os" in *bsd* ) LDFLAGS="-pthread $LDFLAGS" @@ -104,47 +127,61 @@ AC_DEFUN([AX_BOOST_THREAD], ;; esac if test "x$ax_boost_user_thread_lib" = "x"; then - ax_lib= for libextension in `ls -r $BOOSTLIBDIR/libboost_thread* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'`; do ax_lib=${libextension} - AC_CHECK_LIB($ax_lib, exit, - [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break], + AC_CHECK_LIB($ax_lib, exit, + [link_thread="yes"; break], [link_thread="no"]) - done + done if test "x$link_thread" != "xyes"; then for libextension in `ls -r $BOOSTLIBDIR/boost_thread* 2>/dev/null | sed 's,.*/,,' | sed 's,\..*,,'`; do ax_lib=${libextension} - AC_CHECK_LIB($ax_lib, exit, - [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break], + AC_CHECK_LIB($ax_lib, exit, + [link_thread="yes"; break], [link_thread="no"]) - done + done fi else for ax_lib in $ax_boost_user_thread_lib boost_thread-$ax_boost_user_thread_lib; do - AC_CHECK_LIB($ax_lib, exit, - [BOOST_THREAD_LIB="-l$ax_lib"; AC_SUBST(BOOST_THREAD_LIB) link_thread="yes"; break], + AC_CHECK_LIB($ax_lib, exit, + [link_thread="yes"; break], [link_thread="no"]) done fi if test "x$ax_lib" = "x"; then - AC_MSG_ERROR(Could not find a version of the boost_thread library!) + AC_MSG_ERROR(Could not find a version of the Boost::Thread library!) fi - if test "x$link_thread" = "xno"; then - AC_MSG_ERROR(Could not link against $ax_lib !) - else - case "x$host_os" in - *bsd* ) - BOOST_LDFLAGS="-pthread $BOOST_LDFLAGS" - break; - ;; - esac - - fi - fi + if test "x$link_thread" = "xno"; then + AC_MSG_ERROR(Could not link against $ax_lib !) + else + BOOST_THREAD_LIB="-l$ax_lib" + case "x$host_os" in + *bsd* ) + BOOST_LDFLAGS="-pthread $BOOST_LDFLAGS" + break; + ;; + xsolaris ) + BOOST_THREAD_LIB="$BOOST_THREAD_LIB -lpthread" + break; + ;; + xmingw32 ) + break; + ;; + *android* ) + break; + ;; + * ) + BOOST_THREAD_LIB="$BOOST_THREAD_LIB -lpthread" + break; + ;; + esac + AC_SUBST(BOOST_THREAD_LIB) + fi + fi - CPPFLAGS="$CPPFLAGS_SAVED" - LDFLAGS="$LDFLAGS_SAVED" - fi + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" + fi ]) diff --git a/build-aux/m4/ax_boost_unit_test_framework.m4 b/build-aux/m4/ax_boost_unit_test_framework.m4 index 4efd1e2f18..4cca32fcfd 100644 --- a/build-aux/m4/ax_boost_unit_test_framework.m4 +++ b/build-aux/m4/ax_boost_unit_test_framework.m4 @@ -1,6 +1,6 @@ -# ================================================================================ -# http://www.gnu.org/software/autoconf-archive/ax_boost_unit_test_framework.html -# ================================================================================ +# ================================================================================= +# https://www.gnu.org/software/autoconf-archive/ax_boost_unit_test_framework.html +# ================================================================================= # # SYNOPSIS # @@ -29,7 +29,7 @@ # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 19 +#serial 22 AC_DEFUN([AX_BOOST_UNIT_TEST_FRAMEWORK], [ @@ -66,7 +66,7 @@ AC_DEFUN([AX_BOOST_UNIT_TEST_FRAMEWORK], [AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], [[using boost::unit_test::test_suite; - test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" ); return 0;]])], + test_suite* test= BOOST_TEST_SUITE( "Unit test example 1" ); if (test == NULL) { return 1; } else { return 0; }]])], ax_cv_boost_unit_test_framework=yes, ax_cv_boost_unit_test_framework=no) AC_LANG_POP([C++]) ]) @@ -76,7 +76,6 @@ AC_DEFUN([AX_BOOST_UNIT_TEST_FRAMEWORK], if test "x$ax_boost_user_unit_test_framework_lib" = "x"; then saved_ldflags="${LDFLAGS}" - ax_lib= for monitor_library in `ls $BOOSTLIBDIR/libboost_unit_test_framework*.so* $BOOSTLIBDIR/libboost_unit_test_framework*.dylib* $BOOSTLIBDIR/libboost_unit_test_framework*.a* 2>/dev/null` ; do if test -r $monitor_library ; then libextension=`echo $monitor_library | sed 's,.*/,,' | sed -e 's;^lib\(boost_unit_test_framework.*\)\.so.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.dylib.*$;\1;' -e 's;^lib\(boost_unit_test_framework.*\)\.a.*$;\1;'` @@ -125,7 +124,7 @@ AC_DEFUN([AX_BOOST_UNIT_TEST_FRAMEWORK], done fi if test "x$ax_lib" = "x"; then - AC_MSG_ERROR(Could not find a version of the boost_unit_test_framework library!) + AC_MSG_ERROR(Could not find a version of the Boost::Unit_Test_Framework library!) fi if test "x$link_unit_test_framework" != "xyes"; then AC_MSG_ERROR(Could not link against $ax_lib !) diff --git a/build-aux/m4/ax_check_compile_flag.m4 b/build-aux/m4/ax_check_compile_flag.m4 index ca3639715e..12ae243f89 100644 --- a/build-aux/m4/ax_check_compile_flag.m4 +++ b/build-aux/m4/ax_check_compile_flag.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html +# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # =========================================================================== # # SYNOPSIS @@ -29,33 +29,12 @@ # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # -# 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 . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. +# Copying and distributing of this file, with or withour modification, +# are permitted in any medium without royality provided the copyright +# notice and this notice are preserved. +# This file is offered as-is, without any warranty. -#serial 4 +#serial 6 AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF diff --git a/build-aux/m4/ax_check_link_flag.m4 b/build-aux/m4/ax_check_link_flag.m4 index eb01a6ce13..2fee3f3997 100644 --- a/build-aux/m4/ax_check_link_flag.m4 +++ b/build-aux/m4/ax_check_link_flag.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html +# https://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html # =========================================================================== # # SYNOPSIS @@ -29,33 +29,12 @@ # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # -# 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 . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. +# Copying and distribution of this file, with or without modification, +# are permitrred in any mediunm without royality provided the copyright +# notice and this notice are preserved. This file is offered as-is, +# without any warranty. -#serial 4 +#serial 6 AC_DEFUN([AX_CHECK_LINK_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF diff --git a/build-aux/m4/ax_check_preproc_flag.m4 b/build-aux/m4/ax_check_preproc_flag.m4 index ca1d5ee2b6..e1a57e56ee 100644 --- a/build-aux/m4/ax_check_preproc_flag.m4 +++ b/build-aux/m4/ax_check_preproc_flag.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_check_preproc_flag.html +# https://www.gnu.org/software/autoconf-archive/ax_check_preproc_flag.html # =========================================================================== # # SYNOPSIS @@ -29,33 +29,12 @@ # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # -# 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 . -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. +# 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. -#serial 4 +#serial 6 AC_DEFUN([AX_CHECK_PREPROC_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF diff --git a/build-aux/m4/ax_cxx_compile_stdcxx.m4 b/build-aux/m4/ax_cxx_compile_stdcxx.m4 index f147cee3b1..51a35054d0 100644 --- a/build-aux/m4/ax_cxx_compile_stdcxx.m4 +++ b/build-aux/m4/ax_cxx_compile_stdcxx.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html # =========================================================================== # # SYNOPSIS @@ -10,13 +10,13 @@ # # Check for baseline language coverage in the compiler for the specified # version of the C++ standard. If necessary, add switches to CXX and -# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard) -# or '14' (for the C++14 standard). +# CXXCPP to enable support. VERSION may be '11', '14', '17', or '20' for +# the respective C++ standard version. # # The second argument, if specified, indicates whether you insist on an # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. # -std=c++11). If neither is specified, you get whatever works, with -# preference for an extended mode. +# preference for no added switch, and then for an extended mode. # # The third argument, if specified 'mandatory' or if left unspecified, # indicates that baseline support for the specified C++ standard is @@ -33,21 +33,26 @@ # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov # Copyright (c) 2015 Paul Norman # Copyright (c) 2015 Moritz Klammler +# Copyright (c) 2016, 2018 Krzesimir Nowak +# Copyright (c) 2019 Enji Cooper +# Copyright (c) 2020 Jason Merrill +# Copyright (c) 2021 Jörn Heusipp # # 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. -#serial 4 +#serial 14 dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro dnl (serial version number 13). AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl - m4_if([$1], [11], [], - [$1], [14], [], - [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])], + m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], + [$1], [14], [ax_cxx_compile_alternatives="14 1y"], + [$1], [17], [ax_cxx_compile_alternatives="17 1z"], + [$1], [20], [ax_cxx_compile_alternatives="20"], [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl m4_if([$2], [], [], [$2], [ext], [], @@ -57,26 +62,23 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], [$3], [optional], [ax_cxx_compile_cxx$1_required=false], [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) - m4_if([$4], [], [ax_cxx_compile_cxx$1_try_default=true], - [$4], [default], [ax_cxx_compile_cxx$1_try_default=true], - [$4], [nodefault], [ax_cxx_compile_cxx$1_try_default=false], - [m4_fatal([invalid fourth argument `$4' to AX_CXX_COMPILE_STDCXX])]) AC_LANG_PUSH([C++])dnl ac_success=no - m4_if([$4], [nodefault], [], [dnl - AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, - ax_cv_cxx_compile_cxx$1, - [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], - [ax_cv_cxx_compile_cxx$1=yes], - [ax_cv_cxx_compile_cxx$1=no])]) - if test x$ax_cv_cxx_compile_cxx$1 = xyes; then - ac_success=yes - fi]) + m4_if([$2], [], [dnl + AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, + ax_cv_cxx_compile_cxx$1, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [ax_cv_cxx_compile_cxx$1=yes], + [ax_cv_cxx_compile_cxx$1=no])]) + if test x$ax_cv_cxx_compile_cxx$1 = xyes; then + ac_success=yes + fi]) m4_if([$2], [noext], [], [dnl if test x$ac_success = xno; then - for switch in -std=gnu++$1 -std=gnu++0x; do + for alternative in ${ax_cxx_compile_alternatives}; do + switch="-std=gnu++${alternative}" cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, $cachevar, @@ -102,22 +104,27 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl dnl HP's aCC needs +std=c++11 according to: dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf dnl Cray's crayCC needs "-h std=c++11" - for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do - cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) - AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, - $cachevar, - [ac_save_CXX="$CXX" - CXX="$CXX $switch" - AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], - [eval $cachevar=yes], - [eval $cachevar=no]) - CXX="$ac_save_CXX"]) - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break fi - ac_success=yes + done + if test x$ac_success = xyes; then break fi done @@ -146,7 +153,6 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 ) - dnl Test body for checking C++14 support m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], @@ -154,6 +160,23 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 ) +dnl Test body for checking C++17 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 +) + +dnl Test body for checking C++20 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_20 +) + dnl Tests for new features in C++11 @@ -191,11 +214,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -524,7 +549,7 @@ namespace cxx14 } - namespace test_digit_seperators + namespace test_digit_separators { constexpr auto ten_million = 100'000'000; @@ -566,3 +591,415 @@ namespace cxx14 #endif // __cplusplus >= 201402L ]]) + + +dnl Tests for new features in C++17 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ + +// If the compiler admits that it is not ready for C++17, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201703L + +#error "This is not a C++17 compiler" + +#else + +#include +#include +#include + +namespace cxx17 +{ + + namespace test_constexpr_lambdas + { + + constexpr int foo = [](){return 42;}(); + + } + + namespace test::nested_namespace::definitions + { + + } + + namespace test_fold_expression + { + + template + int multiply(Args... args) + { + return (args * ... * 1); + } + + template + bool all(Args... args) + { + return (args && ...); + } + + } + + namespace test_extended_static_assert + { + + static_assert (true); + + } + + namespace test_auto_brace_init_list + { + + auto foo = {5}; + auto bar {5}; + + static_assert(std::is_same, decltype(foo)>::value); + static_assert(std::is_same::value); + } + + namespace test_typename_in_template_template_parameter + { + + template typename X> struct D; + + } + + namespace test_fallthrough_nodiscard_maybe_unused_attributes + { + + int f1() + { + return 42; + } + + [[nodiscard]] int f2() + { + [[maybe_unused]] auto unused = f1(); + + switch (f1()) + { + case 17: + f1(); + [[fallthrough]]; + case 42: + f1(); + } + return f1(); + } + + } + + namespace test_extended_aggregate_initialization + { + + struct base1 + { + int b1, b2 = 42; + }; + + struct base2 + { + base2() { + b3 = 42; + } + int b3; + }; + + struct derived : base1, base2 + { + int d; + }; + + derived d1 {{1, 2}, {}, 4}; // full initialization + derived d2 {{}, {}, 4}; // value-initialized bases + + } + + namespace test_general_range_based_for_loop + { + + struct iter + { + int i; + + int& operator* () + { + return i; + } + + const int& operator* () const + { + return i; + } + + iter& operator++() + { + ++i; + return *this; + } + }; + + struct sentinel + { + int i; + }; + + bool operator== (const iter& i, const sentinel& s) + { + return i.i == s.i; + } + + bool operator!= (const iter& i, const sentinel& s) + { + return !(i == s); + } + + struct range + { + iter begin() const + { + return {0}; + } + + sentinel end() const + { + return {5}; + } + }; + + void f() + { + range r {}; + + for (auto i : r) + { + [[maybe_unused]] auto v = i; + } + } + + } + + namespace test_lambda_capture_asterisk_this_by_value + { + + struct t + { + int i; + int foo() + { + return [*this]() + { + return i; + }(); + } + }; + + } + + namespace test_enum_class_construction + { + + enum class byte : unsigned char + {}; + + byte foo {42}; + + } + + namespace test_constexpr_if + { + + template + int f () + { + if constexpr(cond) + { + return 13; + } + else + { + return 42; + } + } + + } + + namespace test_selection_statement_with_initializer + { + + int f() + { + return 13; + } + + int f2() + { + if (auto i = f(); i > 0) + { + return 3; + } + + switch (auto i = f(); i + 4) + { + case 17: + return 2; + + default: + return 1; + } + } + + } + + namespace test_template_argument_deduction_for_class_templates + { + + template + struct pair + { + pair (T1 p1, T2 p2) + : m1 {p1}, + m2 {p2} + {} + + T1 m1; + T2 m2; + }; + + void f() + { + [[maybe_unused]] auto p = pair{13, 42u}; + } + + } + + namespace test_non_type_auto_template_parameters + { + + template + struct B + {}; + + B<5> b1; + B<'a'> b2; + + } + + namespace test_structured_bindings + { + + int arr[2] = { 1, 2 }; + std::pair pr = { 1, 2 }; + + auto f1() -> int(&)[2] + { + return arr; + } + + auto f2() -> std::pair& + { + return pr; + } + + struct S + { + int x1 : 2; + volatile double y1; + }; + + S f3() + { + return {}; + } + + auto [ x1, y1 ] = f1(); + auto& [ xr1, yr1 ] = f1(); + auto [ x2, y2 ] = f2(); + auto& [ xr2, yr2 ] = f2(); + const auto [ x3, y3 ] = f3(); + + } + + namespace test_exception_spec_type_system + { + + struct Good {}; + struct Bad {}; + + void g1() noexcept; + void g2(); + + template + Bad + f(T*, T*); + + template + Good + f(T1*, T2*); + + static_assert (std::is_same_v); + + } + + namespace test_inline_variables + { + + template void f(T) + {} + + template inline T g(T) + { + return T{}; + } + + template<> inline void f<>(int) + {} + + template<> int g<>(int) + { + return 5; + } + + } + +} // namespace cxx17 + +#endif // __cplusplus < 201703L + +]]) + + +dnl Tests for new features in C++20 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[ + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 202002L + +#error "This is not a C++20 compiler" + +#else + +#include + +namespace cxx20 +{ + +// As C++20 supports feature test macros in the standard, there is no +// immediate need to actually test for feature availability on the +// Autoconf side. + +} // namespace cxx20 + +#endif // __cplusplus < 202002L + +]]) diff --git a/build-aux/m4/ax_pthread.m4 b/build-aux/m4/ax_pthread.m4 index 4c4051ea37..9f35d13914 100644 --- a/build-aux/m4/ax_pthread.m4 +++ b/build-aux/m4/ax_pthread.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_pthread.html +# https://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS @@ -14,20 +14,24 @@ # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # -# Also sets PTHREAD_CC to any special C compiler that is needed for -# multi-threaded programs (defaults to the value of CC otherwise). (This -# is necessary on AIX to use the special cc_r compiler alias.) +# Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is +# needed for multi-threaded programs (defaults to the value of CC +# respectively CXX otherwise). (This is necessary on e.g. AIX to use the +# special cc_r/CC_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also to link with them as well. For example, you might link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threaded programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" +# CXX="$PTHREAD_CXX" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to @@ -55,6 +59,7 @@ # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. +# Copyright (c) 2019 Marc Stevens # # 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 @@ -67,7 +72,7 @@ # Public License for more details. # # You should have received a copy of the GNU General Public License along -# with this program. If not, see . +# with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure @@ -82,7 +87,7 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -#serial 23 +#serial 31 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ @@ -104,6 +109,7 @@ if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) + AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"]) CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) @@ -123,10 +129,12 @@ fi # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). -# Create a list of thread flags to try. Items starting with a "-" are -# C compiler flags, and other items are library names, except for "none" -# which indicates that we try without any flags at all, and "pthread-config" -# which is a program returning the flags for the Pth emulation library. +# Create a list of thread flags to try. Items with a "," contain both +# C compiler flags (before ",") and linker flags (after ","). Other items +# starting with a "-" are C compiler flags, and remaining items are +# library names, except for "none" which indicates that we try without +# any flags at all, and "pthread-config" which is a program returning +# the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" @@ -194,14 +202,47 @@ case $host_os in # that too in a future libc.) So we'll check first for the # standard Solaris way of linking pthreads (-mt -lpthread). - ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags" + ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags" ;; esac +# Are we compiling with Clang? + +AC_CACHE_CHECK([whether $CC is Clang], + [ax_cv_PTHREAD_CLANG], + [ax_cv_PTHREAD_CLANG=no + # Note that Autoconf sets GCC=yes for Clang as well as GCC + if test "x$GCC" = "xyes"; then + AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], + [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ +# if defined(__clang__) && defined(__llvm__) + AX_PTHREAD_CC_IS_CLANG +# endif + ], + [ax_cv_PTHREAD_CLANG=yes]) + fi + ]) +ax_pthread_clang="$ax_cv_PTHREAD_CLANG" + + # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) +# Note that for GCC and Clang -pthread generally implies -lpthread, +# except when -nostdlib is passed. +# This is problematic using libtool to build C++ shared libraries with pthread: +# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 +# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333 +# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 +# To solve this, first try -pthread together with -lpthread for GCC + AS_IF([test "x$GCC" = "xyes"], - [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"]) + [ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"]) + +# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first + +AS_IF([test "x$ax_pthread_clang" = "xyes"], + [ax_pthread_flags="-pthread,-lpthread -pthread"]) + # The presence of a feature test macro requesting re-entrant function # definitions is, on some systems, a strong hint that pthreads support is @@ -224,25 +265,86 @@ AS_IF([test "x$ax_pthread_check_macro" = "x--"], [ax_pthread_check_cond=0], [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"]) -# Are we compiling with Clang? -AC_CACHE_CHECK([whether $CC is Clang], - [ax_cv_PTHREAD_CLANG], - [ax_cv_PTHREAD_CLANG=no - # Note that Autoconf sets GCC=yes for Clang as well as GCC - if test "x$GCC" = "xyes"; then - AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], - [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ -# if defined(__clang__) && defined(__llvm__) - AX_PTHREAD_CC_IS_CLANG -# endif - ], - [ax_cv_PTHREAD_CLANG=yes]) - fi - ]) -ax_pthread_clang="$ax_cv_PTHREAD_CLANG" +if test "x$ax_pthread_ok" = "xno"; then +for ax_pthread_try_flag in $ax_pthread_flags; do + + case $ax_pthread_try_flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + *,*) + PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` + PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` + AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) + PTHREAD_CFLAGS="$ax_pthread_try_flag" + ;; + + pthread-config) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) + AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) + PTHREAD_LIBS="-l$ax_pthread_try_flag" + ;; + esac + + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include +# if $ax_pthread_check_cond +# error "$ax_pthread_check_macro must be defined" +# endif + static void *some_global = NULL; + static void routine(void *a) + { + /* To avoid any unused-parameter or + unused-but-set-parameter warning. */ + some_global = a; + } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" + + AC_MSG_RESULT([$ax_pthread_ok]) + AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi -ax_pthread_clang_warning=no # Clang needs special handling, because older versions handle the -pthread # option in a rather... idiosyncratic way @@ -261,11 +363,6 @@ if test "x$ax_pthread_clang" = "xyes"; then # -pthread does define _REENTRANT, and while the Darwin headers # ignore this macro, third-party headers might not.) - PTHREAD_CFLAGS="-pthread" - PTHREAD_LIBS= - - ax_pthread_ok=yes - # However, older versions of Clang make a point of warning the user # that, in an invocation where only linking and no compilation is # taking place, the -pthread option has no effect ("argument unused @@ -294,7 +391,7 @@ if test "x$ax_pthread_clang" = "xyes"; then # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' - ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` + ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do @@ -320,78 +417,7 @@ if test "x$ax_pthread_clang" = "xyes"; then fi # $ax_pthread_clang = yes -if test "x$ax_pthread_ok" = "xno"; then -for ax_pthread_try_flag in $ax_pthread_flags; do - - case $ax_pthread_try_flag in - none) - AC_MSG_CHECKING([whether pthreads work without any flags]) - ;; - - -mt,pthread) - AC_MSG_CHECKING([whether pthreads work with -mt -lpthread]) - PTHREAD_CFLAGS="-mt" - PTHREAD_LIBS="-lpthread" - ;; - - -*) - AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) - PTHREAD_CFLAGS="$ax_pthread_try_flag" - ;; - pthread-config) - AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) - AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) - PTHREAD_CFLAGS="`pthread-config --cflags`" - PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" - ;; - - *) - AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) - PTHREAD_LIBS="-l$ax_pthread_try_flag" - ;; - esac - - ax_pthread_save_CFLAGS="$CFLAGS" - ax_pthread_save_LIBS="$LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LIBS="$PTHREAD_LIBS $LIBS" - - # Check for various functions. We must include pthread.h, - # since some functions may be macros. (On the Sequent, we - # need a special flag -Kthread to make this header compile.) - # We check for pthread_join because it is in -lpthread on IRIX - # while pthread_create is in libc. We check for pthread_attr_init - # due to DEC craziness with -lpthreads. We check for - # pthread_cleanup_push because it is one of the few pthread - # functions on Solaris that doesn't have a non-functional libc stub. - # We try pthread_create on general principles. - - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include -# if $ax_pthread_check_cond -# error "$ax_pthread_check_macro must be defined" -# endif - static void routine(void *a) { a = 0; } - static void *start_routine(void *a) { return a; }], - [pthread_t th; pthread_attr_t attr; - pthread_create(&th, 0, start_routine, 0); - pthread_join(th, 0); - pthread_attr_init(&attr); - pthread_cleanup_push(routine, 0); - pthread_cleanup_pop(0) /* ; */])], - [ax_pthread_ok=yes], - []) - - CFLAGS="$ax_pthread_save_CFLAGS" - LIBS="$ax_pthread_save_LIBS" - - AC_MSG_RESULT([$ax_pthread_ok]) - AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) - - PTHREAD_LIBS="" - PTHREAD_CFLAGS="" -done -fi # Various other checks: if test "x$ax_pthread_ok" = "xyes"; then @@ -438,7 +464,8 @@ if test "x$ax_pthread_ok" = "xyes"; then AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[int i = PTHREAD_PRIO_INHERIT;]])], + [[int i = PTHREAD_PRIO_INHERIT; + return i;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) @@ -460,18 +487,28 @@ if test "x$ax_pthread_ok" = "xyes"; then [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], - [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], - [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + [ + AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"]) + AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])]) + ], + [ + AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC]) + AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])]) + ] + ) + ]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" +test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) +AC_SUBST([PTHREAD_CXX]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then diff --git a/build-aux/m4/bitcoin_find_bdb48.m4 b/build-aux/m4/bitcoin_find_bdb48.m4 index b9bf7bf46e..3ef7fab5b5 100644 --- a/build-aux/m4/bitcoin_find_bdb48.m4 +++ b/build-aux/m4/bitcoin_find_bdb48.m4 @@ -3,10 +3,12 @@ dnl Distributed under the MIT software license, see the accompanying dnl file COPYING or http://www.opensource.org/licenses/mit-license.php. AC_DEFUN([BITCOIN_FIND_BDB48],[ - AC_ARG_VAR(BDB_CFLAGS, [C compiler flags for BerkeleyDB, bypasses autodetection]) - AC_ARG_VAR(BDB_LIBS, [Linker flags for BerkeleyDB, bypasses autodetection]) + AC_ARG_VAR([BDB_CFLAGS], [C compiler flags for BerkeleyDB, bypasses autodetection]) + AC_ARG_VAR([BDB_LIBS], [Linker flags for BerkeleyDB, bypasses autodetection]) - if test "x$BDB_CFLAGS" = "x"; then + if test "$use_bdb" = "no"; then + use_bdb=no + elif test "$BDB_CFLAGS" = ""; then AC_MSG_CHECKING([for Berkeley DB C++ headers]) BDB_CPPFLAGS= bdbpath=X @@ -26,7 +28,7 @@ AC_DEFUN([BITCOIN_FIND_BDB48],[ #error "failed to find bdb 4.8+" #endif ]])],[ - if test "x$bdbpath" = "xX"; then + if test "$bdbpath" = "X"; then bdbpath="${searchpath}" fi ],[ @@ -43,36 +45,53 @@ AC_DEFUN([BITCOIN_FIND_BDB48],[ break ],[]) done - if test "x$bdbpath" = "xX"; then + if test "$bdbpath" = "X"; then + use_bdb=no AC_MSG_RESULT([no]) - AC_MSG_ERROR([libdb_cxx headers missing, ]AC_PACKAGE_NAME[ requires this library for wallet functionality (--disable-wallet to disable wallet functionality)]) - elif test "x$bdb48path" = "xX"; then + AC_MSG_WARN([libdb_cxx headers missing]) + AC_MSG_WARN(AC_PACKAGE_NAME[ requires this library for BDB (legacy) wallet support]) + AC_MSG_WARN([Passing --without-bdb will suppress this warning]) + elif test "$bdb48path" = "X"; then BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdbpath}],db_cxx) AC_ARG_WITH([incompatible-bdb],[AS_HELP_STRING([--with-incompatible-bdb], [allow using a bdb version other than 4.8])],[ - AC_MSG_WARN([Found Berkeley DB other than 4.8; wallets opened by this build will not be portable!]) + AC_MSG_WARN([Found Berkeley DB other than 4.8]) + AC_MSG_WARN([BDB (legacy) wallets opened by this build will not be portable!]) + use_bdb=yes ],[ - AC_MSG_ERROR([Found Berkeley DB other than 4.8, required for portable wallets (--with-incompatible-bdb to ignore or --disable-wallet to disable wallet functionality)]) + AC_MSG_WARN([Found Berkeley DB other than 4.8]) + AC_MSG_WARN([BDB (legacy) wallets opened by this build would not be portable!]) + AC_MSG_WARN([If this is intended, pass --with-incompatible-bdb]) + AC_MSG_WARN([Passing --without-bdb will suppress this warning]) + use_bdb=no ]) else BITCOIN_SUBDIR_TO_INCLUDE(BDB_CPPFLAGS,[${bdb48path}],db_cxx) bdbpath="${bdb48path}" + use_bdb=yes fi else BDB_CPPFLAGS=${BDB_CFLAGS} fi AC_SUBST(BDB_CPPFLAGS) - - if test "x$BDB_LIBS" = "x"; then + + if test "$use_bdb" = "no"; then + use_bdb=no + elif test "$BDB_LIBS" = ""; then # TODO: Ideally this could find the library version and make sure it matches the headers being used - for searchlib in db_cxx-4.8 db_cxx; do + for searchlib in db_cxx-4.8 db_cxx db4_cxx; do AC_CHECK_LIB([$searchlib],[main],[ BDB_LIBS="-l${searchlib}" break ]) done - if test "x$BDB_LIBS" = "x"; then - AC_MSG_ERROR([libdb_cxx missing, ]AC_PACKAGE_NAME[ requires this library for wallet functionality (--disable-wallet to disable wallet functionality)]) + if test "$BDB_LIBS" = ""; then + AC_MSG_WARN([libdb_cxx headers missing]) + AC_MSG_WARN(AC_PACKAGE_NAME[ requires this library for BDB (legacy) wallet support]) + AC_MSG_WARN([Passing --without-bdb will suppress this warning]) fi fi - AC_SUBST(BDB_LIBS) + if test "$use_bdb" != "no"; then + AC_DEFINE([USE_BDB], [1], [Define if BDB support should be compiled in]) + use_bdb=yes + fi ]) diff --git a/build-aux/m4/bitcoin_qt.m4 b/build-aux/m4/bitcoin_qt.m4 index 1d9d3cef1c..eb0008d6d5 100644 --- a/build-aux/m4/bitcoin_qt.m4 +++ b/build-aux/m4/bitcoin_qt.m4 @@ -5,8 +5,8 @@ dnl file COPYING or http://www.opensource.org/licenses/mit-license.php. dnl Helper for cases where a qt dependency is not met. dnl Output: If qt version is auto, set bitcoin_enable_qt to false. Else, exit. AC_DEFUN([BITCOIN_QT_FAIL],[ - if test "x$bitcoin_qt_want_version" = "xauto" && test x$bitcoin_qt_force != xyes; then - if test x$bitcoin_enable_qt != xno; then + if test "$bitcoin_qt_want_version" = "auto" && test "$bitcoin_qt_force" != "yes"; then + if test "$bitcoin_enable_qt" != "no"; then AC_MSG_WARN([$1; raptoreum-qt frontend will not be built]) fi bitcoin_enable_qt=no @@ -17,7 +17,7 @@ AC_DEFUN([BITCOIN_QT_FAIL],[ ]) AC_DEFUN([BITCOIN_QT_CHECK],[ - if test "x$bitcoin_enable_qt" != "xno" && test x$bitcoin_qt_want_version != xno; then + if test "$bitcoin_enable_qt" != "no" && test "$bitcoin_qt_want_version" != "no"; then true $1 else @@ -35,12 +35,12 @@ dnl Inputs: $4: If "yes", don't fail if $2 is not found. dnl Output: $1 is set to the path of $2 if found. $2 are searched in order. AC_DEFUN([BITCOIN_QT_PATH_PROGS],[ BITCOIN_QT_CHECK([ - if test "x$3" != "x"; then - AC_PATH_PROGS($1,$2,,$3) + if test "$3" != ""; then + AC_PATH_PROGS([$1], [$2], [], [$3]) else - AC_PATH_PROGS($1,$2) + AC_PATH_PROGS([$1], [$2]) fi - if test "x$$1" = "x" && test "x$4" != "xyes"; then + if test "$$1" = "" && test "$4" != "yes"; then BITCOIN_QT_FAIL([$1 not found]) fi ]) @@ -53,17 +53,25 @@ dnl CAUTION: Do not use this inside of a conditional. AC_DEFUN([BITCOIN_QT_INIT],[ dnl enable qt support AC_ARG_WITH([gui], - [AS_HELP_STRING([--with-gui@<:@=no|qt4|qt5|auto@:>@], - [build raptoreum-qt GUI (default=auto, qt5 tried first)])], + [AS_HELP_STRING([--with-gui@<:@=no|qt5|auto@:>@], + [build raptoreum-qt GUI (default=auto)])], [ bitcoin_qt_want_version=$withval - if test x$bitcoin_qt_want_version = xyes; then + if test "$bitcoin_qt_want_version" = "yes"; then bitcoin_qt_force=yes bitcoin_qt_want_version=auto fi ], [bitcoin_qt_want_version=auto]) + AS_IF([test "$with_gui" = "qt5_debug"], + [AS_CASE([$host], + [*darwin*], [qt_lib_suffix=_debug], + [qt_lib_suffix= ]); bitcoin_qt_want_version=qt5], + [qt_lib_suffix= ]) + + AS_CASE([$host], [*android*], [qt_lib_suffix=_$ANDROID_ARCH]) + AC_ARG_WITH([qt-incdir],[AS_HELP_STRING([--with-qt-incdir=INC_DIR],[specify qt include path (overridden by pkgconfig)])], [qt_include_path=$withval], []) AC_ARG_WITH([qt-libdir],[AS_HELP_STRING([--with-qt-libdir=LIB_DIR],[specify qt lib path (overridden by pkgconfig)])], [qt_lib_path=$withval], []) AC_ARG_WITH([qt-plugindir],[AS_HELP_STRING([--with-qt-plugindir=PLUGIN_DIR],[specify qt plugin path (overridden by pkgconfig)])], [qt_plugin_path=$withval], []) @@ -72,457 +80,317 @@ AC_DEFUN([BITCOIN_QT_INIT],[ AC_ARG_WITH([qtdbus], [AS_HELP_STRING([--with-qtdbus], - [enable DBus support (default is yes if qt is enabled and QtDBus is found)])], + [enable DBus support (default is yes if qt is enabled and QtDBus is found, except on Android)])], [use_dbus=$withval], [use_dbus=auto]) + dnl Android doesn't support D-Bus and certainly doesn't use it for notifications + case $host in + *android*) + if test "$use_dbus" != "yes"; then + use_dbus=no + fi + ;; + esac + AC_SUBST(QT_TRANSLATION_DIR,$qt_translation_path) ]) -dnl Find the appropriate version of Qt libraries and includes. -dnl Inputs: $1: Whether or not pkg-config should be used. yes|no. Default: yes. -dnl Inputs: $2: If $1 is "yes" and --with-gui=auto, which qt version should be -dnl tried first. -dnl Outputs: See _BITCOIN_QT_FIND_LIBS_* +dnl Find Qt libraries and includes. +dnl +dnl BITCOIN_QT_CONFIGURE([MINIMUM-VERSION]) +dnl +dnl Outputs: See _BITCOIN_QT_FIND_LIBS dnl Outputs: Sets variables for all qt-related tools. -dnl Outputs: bitcoin_enable_qt, bitcoin_enable_qt_dbus, bitcoin_enable_qt_test +dnl Outputs: bitcoin_enable_qt, bitcoin_enable_qt_test AC_DEFUN([BITCOIN_QT_CONFIGURE],[ - use_pkgconfig=$1 - - if test x$use_pkgconfig = x; then - use_pkgconfig=yes - fi - - if test x$use_pkgconfig = xyes; then - BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG([$2])]) - else - BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG]) - fi + qt_version=">= $1" + qt_lib_prefix="Qt5" + BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS]) dnl This is ugly and complicated. Yuck. Works as follows: - dnl We can't discern whether Qt4 builds are static or not. For Qt5, we can - dnl check a header to find out. When Qt is built statically, some plugins must - dnl be linked into the final binary as well. These plugins have changed between - dnl Qt4 and Qt5. With Qt5, languages moved into core and the WindowsIntegration - dnl plugin was added. Since we can't tell if Qt4 is static or not, it is - dnl assumed for windows builds. - dnl _BITCOIN_QT_CHECK_STATIC_PLUGINS does a quick link-check and appends the - dnl results to QT_LIBS. + dnl We check a header to find out whether Qt is built statically. + dnl When Qt is built statically, some plugins must be linked into + dnl the final binary as well. _BITCOIN_QT_CHECK_STATIC_PLUGIN does + dnl a quick link-check and appends the results to QT_LIBS. BITCOIN_QT_CHECK([ TEMP_CPPFLAGS=$CPPFLAGS TEMP_CXXFLAGS=$CXXFLAGS - CPPFLAGS="$QT_INCLUDES $CPPFLAGS" - CXXFLAGS="$PIC_FLAGS $CXXFLAGS" - if test x$bitcoin_qt_got_major_vers = x5; then - _BITCOIN_QT_IS_STATIC - if test x$bitcoin_cv_static_qt = xyes; then - _BITCOIN_QT_FIND_STATIC_PLUGINS - AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol if qt plugins are static]) - AC_CACHE_CHECK(for Qt < 5.4, bitcoin_cv_need_acc_widget,[AC_COMPILE_IFELSE([AC_LANG_PROGRAM( - [[#include ]],[[ - #if QT_VERSION >= 0x050400 - choke; - #endif - ]])], - [bitcoin_cv_need_acc_widget=yes], - [bitcoin_cv_need_acc_widget=no]) - ]) - if test "x$bitcoin_cv_need_acc_widget" = "xyes"; then - _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(AccessibleFactory)], [-lqtaccessiblewidgets]) + CPPFLAGS="$QT_INCLUDES $CORE_CPPFLAGS $CPPFLAGS" + CXXFLAGS="$PIC_FLAGS $CORE_CXXFLAGS $CXXFLAGS" + _BITCOIN_QT_IS_STATIC + if test "$bitcoin_cv_static_qt" = "yes"; then + _BITCOIN_QT_CHECK_STATIC_LIBS + + if test "$qt_plugin_path" != ""; then + if test -d "$qt_plugin_path/platforms"; then + QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms" + fi + if test -d "$qt_plugin_path/styles"; then + QT_LIBS="$QT_LIBS -L$qt_plugin_path/styles" fi - _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin)],[-lqminimal]) - AC_DEFINE(QT_QPA_PLATFORM_MINIMAL, 1, [Define this symbol if the minimal qt platform exists]) - if test x$TARGET_OS = xwindows; then - _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)],[-lqwindows]) - AC_DEFINE(QT_QPA_PLATFORM_WINDOWS, 1, [Define this symbol if the qt platform is windows]) - elif test x$TARGET_OS = xlinux; then - _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)],[-lqxcb -lxcb-static]) - AC_DEFINE(QT_QPA_PLATFORM_XCB, 1, [Define this symbol if the qt platform is xcb]) - elif test x$TARGET_OS = xdarwin; then - AX_CHECK_LINK_FLAG([[-framework IOKit]],[QT_LIBS="$QT_LIBS -framework IOKit"],[AC_MSG_ERROR(could not iokit framework)]) - _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin)],[-lqcocoa]) - AC_DEFINE(QT_QPA_PLATFORM_COCOA, 1, [Define this symbol if the qt platform is cocoa]) + if test -d "$qt_plugin_path/accessible"; then + QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible" + fi + if test -d "$qt_plugin_path/platforms/android"; then + QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms/android -lqtfreetype -lEGL" fi fi - else - if test x$TARGET_OS = xwindows; then - AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol if qt plugins are static]) - _BITCOIN_QT_CHECK_STATIC_PLUGINS([ - Q_IMPORT_PLUGIN(qcncodecs) - Q_IMPORT_PLUGIN(qjpcodecs) - Q_IMPORT_PLUGIN(qtwcodecs) - Q_IMPORT_PLUGIN(qkrcodecs) - Q_IMPORT_PLUGIN(AccessibleFactory)], - [-lqcncodecs -lqjpcodecs -lqtwcodecs -lqkrcodecs -lqtaccessiblewidgets]) + + AC_DEFINE([QT_STATICPLUGIN], [1], [Define this symbol if qt plugins are static]) + if test "$TARGET_OS" != "android"; then + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QMinimalIntegrationPlugin], [-lqminimal]) + AC_DEFINE([QT_QPA_PLATFORM_MINIMAL], [1], [Define this symbol if the minimal qt platform exists]) + fi + if test "$TARGET_OS" = "windows"; then + dnl Linking against wtsapi32 is required. See #17749 and + dnl https://bugreports.qt.io/browse/QTBUG-27097. + AX_CHECK_LINK_FLAG([-lwtsapi32], [QT_LIBS="$QT_LIBS -lwtsapi32"], [AC_MSG_ERROR([could not link against -lwtsapi32])]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QWindowsIntegrationPlugin], [-lqwindows]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QWindowsVistaStylePlugin], [-lqwindowsvistastyle]) + AC_DEFINE([QT_QPA_PLATFORM_WINDOWS], [1], [Define this symbol if the qt platform is windows]) + elif test "$TARGET_OS" = "linux"; then + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QXcbIntegrationPlugin], [-lqxcb]) + AC_DEFINE([QT_QPA_PLATFORM_XCB], [1], [Define this symbol if the qt platform is xcb]) + elif test "$TARGET_OS" = "darwin"; then + AX_CHECK_LINK_FLAG([-framework Carbon], [QT_LIBS="$QT_LIBS -framework Carbon"], [AC_MSG_ERROR(could not link against Carbon framework)]) + AX_CHECK_LINK_FLAG([-framework IOSurface], [QT_LIBS="$QT_LIBS -framework IOSurface"], [AC_MSG_ERROR(could not link against IOSurface framework)]) + AX_CHECK_LINK_FLAG([-framework Metal], [QT_LIBS="$QT_LIBS -framework Metal"], [AC_MSG_ERROR(could not link against Metal framework)]) + AX_CHECK_LINK_FLAG([-framework QuartzCore], [QT_LIBS="$QT_LIBS -framework QuartzCore"], [AC_MSG_ERROR(could not link against QuartzCore framework)]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QCocoaIntegrationPlugin], [-lqcocoa]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QMacStylePlugin], [-lqmacstyle]) + AC_DEFINE([QT_QPA_PLATFORM_COCOA], [1], [Define this symbol if the qt platform is cocoa]) + elif test "$TARGET_OS" = "android"; then + QT_LIBS="-Wl,--export-dynamic,--undefined=JNI_OnLoad -lplugins_platforms_qtforandroid${qt_lib_suffix} -ljnigraphics -landroid -lqtfreetype${qt_lib_suffix} $QT_LIBS" + AC_DEFINE([QT_QPA_PLATFORM_ANDROID], [1], [Define this symbol if the qt platform is android]) fi fi CPPFLAGS=$TEMP_CPPFLAGS CXXFLAGS=$TEMP_CXXFLAGS ]) - if test x$use_pkgconfig$qt_bin_path = xyes; then - if test x$bitcoin_qt_got_major_vers = x5; then - qt_bin_path="`$PKG_CONFIG --variable=host_bins Qt5Core 2>/dev/null`" - fi + if test "$qt_bin_path" = ""; then + qt_bin_path="`$PKG_CONFIG --variable=host_bins ${qt_lib_prefix}Core 2>/dev/null`" fi - if test x$use_hardening != xno; then + if test "$use_hardening" != "no"; then BITCOIN_QT_CHECK([ - AC_MSG_CHECKING(whether -fPIE can be used with this Qt config) + AC_MSG_CHECKING([whether -fPIE can be used with this Qt config]) TEMP_CPPFLAGS=$CPPFLAGS TEMP_CXXFLAGS=$CXXFLAGS - CPPFLAGS="$QT_INCLUDES $CPPFLAGS" - CXXFLAGS="$PIE_FLAGS $CXXFLAGS" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + CPPFLAGS="$QT_INCLUDES $CORE_CPPFLAGS $CPPFLAGS" + CXXFLAGS="$PIE_FLAGS $CORE_CXXFLAGS $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #ifndef QT_VERSION + # include + #endif + ]], [[ - #if defined(QT_REDUCE_RELOCATIONS) - choke; - #endif + #if defined(QT_REDUCE_RELOCATIONS) + choke + #endif ]])], - [ AC_MSG_RESULT(yes); QT_PIE_FLAGS=$PIE_FLAGS ], - [ AC_MSG_RESULT(no); QT_PIE_FLAGS=$PIC_FLAGS] + [ AC_MSG_RESULT([yes]); QT_PIE_FLAGS=$PIE_FLAGS ], + [ AC_MSG_RESULT([no]); QT_PIE_FLAGS=$PIC_FLAGS] ) CPPFLAGS=$TEMP_CPPFLAGS CXXFLAGS=$TEMP_CXXFLAGS ]) else BITCOIN_QT_CHECK([ - AC_MSG_CHECKING(whether -fPIC is needed with this Qt config) + AC_MSG_CHECKING([whether -fPIC is needed with this Qt config]) TEMP_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$QT_INCLUDES $CPPFLAGS" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + CPPFLAGS="$QT_INCLUDES $CORE_CPPFLAGS $CPPFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #ifndef QT_VERSION + # include + #endif + ]], [[ - #if defined(QT_REDUCE_RELOCATIONS) - choke; - #endif + #if defined(QT_REDUCE_RELOCATIONS) + choke + #endif ]])], - [ AC_MSG_RESULT(no)], - [ AC_MSG_RESULT(yes); QT_PIE_FLAGS=$PIC_FLAGS] + [ AC_MSG_RESULT([no])], + [ AC_MSG_RESULT([yes]); QT_PIE_FLAGS=$PIC_FLAGS] ) CPPFLAGS=$TEMP_CPPFLAGS ]) fi - BITCOIN_QT_PATH_PROGS([MOC], [moc-qt${bitcoin_qt_got_major_vers} moc${bitcoin_qt_got_major_vers} moc], $qt_bin_path) - BITCOIN_QT_PATH_PROGS([UIC], [uic-qt${bitcoin_qt_got_major_vers} uic${bitcoin_qt_got_major_vers} uic], $qt_bin_path) - BITCOIN_QT_PATH_PROGS([RCC], [rcc-qt${bitcoin_qt_got_major_vers} rcc${bitcoin_qt_got_major_vers} rcc], $qt_bin_path) - BITCOIN_QT_PATH_PROGS([LRELEASE], [lrelease-qt${bitcoin_qt_got_major_vers} lrelease${bitcoin_qt_got_major_vers} lrelease], $qt_bin_path) - BITCOIN_QT_PATH_PROGS([LUPDATE], [lupdate-qt${bitcoin_qt_got_major_vers} lupdate${bitcoin_qt_got_major_vers} lupdate],$qt_bin_path, yes) - - BITCOIN_QT_CHECK([ - AC_CACHE_CHECK([whether $RCC accepts --format-version option], - [ac_cv_prog_rcc_accepts_format_version], - [ac_cv_prog_rcc_accepts_format_version=no - echo '' > conftest.qrc - $RCC --format-version 1 conftest.qrc >/dev/null 2>&1 && ac_cv_prog_rcc_accepts_format_version=yes - rm -f conftest.qrc]) - if test "$ac_cv_prog_rcc_accepts_format_version" = yes; then - RCCFLAGS="--format-version 1" - else - RCCFLAGS= - fi - AC_SUBST(RCCFLAGS) - ]) + BITCOIN_QT_PATH_PROGS([MOC], [moc-qt5 moc5 moc], $qt_bin_path) + BITCOIN_QT_PATH_PROGS([UIC], [uic-qt5 uic5 uic], $qt_bin_path) + BITCOIN_QT_PATH_PROGS([RCC], [rcc-qt5 rcc5 rcc], $qt_bin_path) + BITCOIN_QT_PATH_PROGS([LRELEASE], [lrelease-qt5 lrelease5 lrelease], $qt_bin_path) + BITCOIN_QT_PATH_PROGS([LUPDATE], [lupdate-qt5 lupdate5 lupdate],$qt_bin_path, yes) + BITCOIN_QT_PATH_PROGS([LCONVERT], [lconvert-qt5 lconvert5 lconvert], $qt_bin_path, yes) MOC_DEFS='-DHAVE_CONFIG_H -I$(srcdir)' case $host in *darwin*) - BITCOIN_QT_CHECK([ - MOC_DEFS="${MOC_DEFS} -DQ_OS_MAC" - base_frameworks="-framework Foundation -framework ApplicationServices -framework AppKit" - AX_CHECK_LINK_FLAG([[$base_frameworks]],[QT_LIBS="$QT_LIBS $base_frameworks"],[AC_MSG_ERROR(could not find base frameworks)]) - ]) + BITCOIN_QT_CHECK([ + MOC_DEFS="${MOC_DEFS} -DQ_OS_MAC" + base_frameworks="-framework Foundation -framework AppKit" + AX_CHECK_LINK_FLAG([$base_frameworks], [QT_LIBS="$QT_LIBS $base_frameworks"], [AC_MSG_ERROR(could not find base frameworks)]) + ]) ;; *mingw*) - BITCOIN_QT_CHECK([ - AX_CHECK_LINK_FLAG([[-mwindows]],[QT_LDFLAGS="$QT_LDFLAGS -mwindows"],[AC_MSG_WARN(-mwindows linker support not detected)]) - ]) + BITCOIN_QT_CHECK([ + AX_CHECK_LINK_FLAG([-mwindows], [QT_LDFLAGS="$QT_LDFLAGS -mwindows"], [AC_MSG_WARN([-mwindows linker support not detected])]) + ]) + ;; esac - dnl enable qt support - AC_MSG_CHECKING(whether to build ]AC_PACKAGE_NAME[ GUI) + AC_MSG_CHECKING([whether to build ]AC_PACKAGE_NAME[ GUI]) BITCOIN_QT_CHECK([ bitcoin_enable_qt=yes bitcoin_enable_qt_test=yes - if test x$have_qt_test = xno; then + if test "$have_qt_test" = "no"; then bitcoin_enable_qt_test=no fi bitcoin_enable_qt_dbus=no - if test x$use_dbus != xno && test x$have_qt_dbus = xyes; then + if test "$use_dbus" != "no" && test "$have_qt_dbus" = "yes"; then bitcoin_enable_qt_dbus=yes fi - if test x$use_dbus = xyes && test x$have_qt_dbus = xno; then - AC_MSG_ERROR("libQtDBus not found. Install libQtDBus or remove --with-qtdbus.") + if test "$use_dbus" = "yes" && test "$have_qt_dbus" = "no"; then + AC_MSG_ERROR([libQtDBus not found. Install libQtDBus or remove --with-qtdbus.]) + fi + if test "$LUPDATE" = ""; then + AC_MSG_WARN([lupdate tool is required to update Qt translations.]) fi - if test x$LUPDATE = x; then - AC_MSG_WARN("lupdate is required to update qt translations") + if test "$LCONVERT" = ""; then + AC_MSG_WARN([lconvert tool is required to update Qt translations.]) fi ],[ bitcoin_enable_qt=no ]) - AC_MSG_RESULT([$bitcoin_enable_qt (Qt${bitcoin_qt_got_major_vers})]) + if test "$bitcoin_enable_qt" = "yes"; then + AC_MSG_RESULT([$bitcoin_enable_qt ($qt_lib_prefix)]) + else + AC_MSG_RESULT([$bitcoin_enable_qt]) + fi AC_SUBST(QT_PIE_FLAGS) AC_SUBST(QT_INCLUDES) AC_SUBST(QT_LIBS) AC_SUBST(QT_LDFLAGS) AC_SUBST(QT_DBUS_INCLUDES) - AC_SUBST(QT_DBUS_LIBS) AC_SUBST(QT_TEST_INCLUDES) - AC_SUBST(QT_TEST_LIBS) - AC_SUBST(QT_SELECT, qt${bitcoin_qt_got_major_vers}) + AC_SUBST(QT_SELECT, qt5) AC_SUBST(MOC_DEFS) ]) -dnl All macros below are internal and should _not_ be used from the main -dnl configure.ac. -dnl ---- +dnl All macros below are internal and should _not_ be used from configure.ac. -dnl Internal. Check if the included version of Qt is Qt5. -dnl Requires: INCLUDES must be populated as necessary. -dnl Output: bitcoin_cv_qt5=yes|no -AC_DEFUN([_BITCOIN_QT_CHECK_QT5],[ - AC_CACHE_CHECK(for Qt 5, bitcoin_cv_qt5,[ - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( - [[#include ]], - [[ - #if QT_VERSION < 0x050000 - choke me - #else - return 0; - #endif - ]])], - [bitcoin_cv_qt5=yes], - [bitcoin_cv_qt5=no]) -])]) - -dnl Internal. Check if the linked version of Qt was built as static libs. -dnl Requires: Qt5. This check cannot determine if Qt4 is static. +dnl Internal. Check if the linked version of Qt was built statically. +dnl +dnl _BITCOIN_QT_IS_STATIC +dnl --------------------- +dnl dnl Requires: INCLUDES and LIBS must be populated as necessary. dnl Output: bitcoin_cv_static_qt=yes|no -dnl Output: Defines QT_STATICPLUGIN if plugins are static. AC_DEFUN([_BITCOIN_QT_IS_STATIC],[ AC_CACHE_CHECK(for static Qt, bitcoin_cv_static_qt,[ - AC_COMPILE_IFELSE([AC_LANG_PROGRAM( - [[#include ]], - [[ - #if defined(QT_STATIC) - return 0; - #else - choke me - #endif - ]])], - [bitcoin_cv_static_qt=yes], - [bitcoin_cv_static_qt=no]) - ]) - if test xbitcoin_cv_static_qt = xyes; then - AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol for static Qt plugins]) - fi + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #ifndef QT_VERSION + # include + #endif + ]], + [[ + #if !defined(QT_STATIC) + choke + #endif + ]])], + [bitcoin_cv_static_qt=yes], + [bitcoin_cv_static_qt=no]) + ]) ]) -dnl Internal. Check if the link-requirements for static plugins are met. +dnl Internal. Check if the link-requirements for a static plugin are met. +dnl +dnl _BITCOIN_QT_CHECK_STATIC_PLUGIN(PLUGIN, LIBRARIES) +dnl -------------------------------------------------- +dnl dnl Requires: INCLUDES and LIBS must be populated as necessary. -dnl Inputs: $1: A series of Q_IMPORT_PLUGIN(). +dnl Inputs: $1: A static plugin name. dnl Inputs: $2: The libraries that resolve $1. dnl Output: QT_LIBS is prepended or configure exits. -AC_DEFUN([_BITCOIN_QT_CHECK_STATIC_PLUGINS],[ - AC_MSG_CHECKING(for static Qt plugins: $2) +AC_DEFUN([_BITCOIN_QT_CHECK_STATIC_PLUGIN], [ + AC_MSG_CHECKING([for $1 ($2)]) CHECK_STATIC_PLUGINS_TEMP_LIBS="$LIBS" - LIBS="$2 $QT_LIBS $LIBS" + LIBS="$2${qt_lib_suffix} $QT_LIBS $LIBS" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - #define QT_STATICPLUGIN - #include - $1]], - [[return 0;]])], - [AC_MSG_RESULT(yes); QT_LIBS="$2 $QT_LIBS"], - [AC_MSG_RESULT(no); BITCOIN_QT_FAIL(Could not resolve: $2)]) + #include + Q_IMPORT_PLUGIN($1) + ]])], + [AC_MSG_RESULT([yes]); QT_LIBS="$2${qt_lib_suffix} $QT_LIBS"], + [AC_MSG_RESULT([no]); BITCOIN_QT_FAIL([$1 not found.])]) LIBS="$CHECK_STATIC_PLUGINS_TEMP_LIBS" ]) -dnl Internal. Find paths necessary for linking qt static plugins -dnl Inputs: bitcoin_qt_got_major_vers. 4 or 5. -dnl Inputs: qt_plugin_path. optional. -dnl Outputs: QT_LIBS is appended -AC_DEFUN([_BITCOIN_QT_FIND_STATIC_PLUGINS],[ - if test x$bitcoin_qt_got_major_vers = x5; then - if test x$qt_plugin_path != x; then - QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms" - if test -d "$qt_plugin_path/accessible"; then - QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible" - fi - fi - if test x$use_pkgconfig = xyes; then - : dnl - m4_ifdef([PKG_CHECK_MODULES],[ - PKG_CHECK_MODULES([QTPLATFORM], [Qt5PlatformSupport], [QT_LIBS="$QTPLATFORM_LIBS $QT_LIBS"]) - if test x$TARGET_OS = xlinux; then - PKG_CHECK_MODULES([X11XCB], [x11-xcb], [QT_LIBS="$X11XCB_LIBS $QT_LIBS"]) - if ${PKG_CONFIG} --exists "Qt5Core >= 5.5" 2>/dev/null; then - PKG_CHECK_MODULES([QTXCBQPA], [Qt5XcbQpa], [QT_LIBS="$QTXCBQPA_LIBS $QT_LIBS"]) - fi - elif test x$TARGET_OS = xdarwin; then - PKG_CHECK_MODULES([QTPRINT], [Qt5PrintSupport], [QT_LIBS="$QTPRINT_LIBS $QT_LIBS"]) - fi - ]) - else - if test x$TARGET_OS = xwindows; then - AC_CACHE_CHECK(for Qt >= 5.6, bitcoin_cv_need_platformsupport,[AC_COMPILE_IFELSE([AC_LANG_PROGRAM( - [[#include ]],[[ - #if QT_VERSION < 0x050600 - choke; - #endif - ]])], - [bitcoin_cv_need_platformsupport=yes], - [bitcoin_cv_need_platformsupport=no]) - ]) - if test x$bitcoin_cv_need_platformsupport = xyes; then - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}PlatformSupport],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXPlatformSupport not found))) - fi - fi - fi - else - if test x$qt_plugin_path != x; then - QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible" - QT_LIBS="$QT_LIBS -L$qt_plugin_path/codecs" - fi +dnl Internal. Check Qt static libs with PKG_CHECK_MODULES. +dnl +dnl _BITCOIN_QT_CHECK_STATIC_LIBS +dnl ----------------------------- +dnl +dnl Outputs: QT_LIBS is prepended. +AC_DEFUN([_BITCOIN_QT_CHECK_STATIC_LIBS], [ + PKG_CHECK_MODULES([QT_ACCESSIBILITY], [${qt_lib_prefix}AccessibilitySupport${qt_lib_suffix}], [QT_LIBS="$QT_ACCESSIBILITY_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_DEVICEDISCOVERY], [${qt_lib_prefix}DeviceDiscoverySupport${qt_lib_suffix}], [QT_LIBS="$QT_DEVICEDISCOVERY_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_EDID], [${qt_lib_prefix}EdidSupport${qt_lib_suffix}], [QT_LIBS="$QT_EDID_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_EVENTDISPATCHER], [${qt_lib_prefix}EventDispatcherSupport${qt_lib_suffix}], [QT_LIBS="$QT_EVENTDISPATCHER_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_FB], [${qt_lib_prefix}FbSupport${qt_lib_suffix}], [QT_LIBS="$QT_FB_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_FONTDATABASE], [${qt_lib_prefix}FontDatabaseSupport${qt_lib_suffix}], [QT_LIBS="$QT_FONTDATABASE_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_THEME], [${qt_lib_prefix}ThemeSupport${qt_lib_suffix}], [QT_LIBS="$QT_THEME_LIBS $QT_LIBS"]) + if test "$TARGET_OS" = "linux"; then + PKG_CHECK_MODULES([QT_INPUT], [${qt_lib_prefix}InputSupport], [QT_LIBS="$QT_INPUT_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_XCBQPA], [${qt_lib_prefix}XcbQpa], [QT_LIBS="$QT_XCBQPA_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_XKBCOMMON], [${qt_lib_prefix}XkbCommonSupport], [QT_LIBS="$QT_XKBCOMMON_LIBS $QT_LIBS"]) + elif test "$TARGET_OS" = "darwin"; then + PKG_CHECK_MODULES([QT_CLIPBOARD], [${qt_lib_prefix}ClipboardSupport${qt_lib_suffix}], [QT_LIBS="$QT_CLIPBOARD_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_GRAPHICS], [${qt_lib_prefix}GraphicsSupport${qt_lib_suffix}], [QT_LIBS="$QT_GRAPHICS_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport${qt_lib_suffix}], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"]) + elif test "$TARGET_OS" = "windows"; then + PKG_CHECK_MODULES([QT_WINDOWSUIAUTOMATION], [${qt_lib_prefix}WindowsUIAutomationSupport${qt_lib_suffix}], [QT_LIBS="$QT_WINDOWSUIAUTOMATION_LIBS $QT_LIBS"]) + elif test "$TARGET_OS" = "android"; then + PKG_CHECK_MODULES([QT_EGL], [${qt_lib_prefix}EglSupport${qt_lib_suffix}], [QT_LIBS="$QT_EGL_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport${qt_lib_suffix}], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"]) fi ]) - dnl Internal. Find Qt libraries using pkg-config. -dnl Inputs: bitcoin_qt_want_version (from --with-gui=). The version to check -dnl first. -dnl Inputs: $1: If bitcoin_qt_want_version is "auto", check for this version -dnl first. +dnl +dnl _BITCOIN_QT_FIND_LIBS +dnl --------------------- +dnl dnl Outputs: All necessary QT_* variables are set. -dnl Outputs: bitcoin_qt_got_major_vers is set to "4" or "5". -dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no. -AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG],[ - m4_ifdef([PKG_CHECK_MODULES],[ - auto_priority_version=$1 - if test x$auto_priority_version = x; then - auto_priority_version=qt5 - fi - if test x$bitcoin_qt_want_version = xqt5 || ( test x$bitcoin_qt_want_version = xauto && test x$auto_priority_version = xqt5 ); then - QT_LIB_PREFIX=Qt5 - bitcoin_qt_got_major_vers=5 - else - QT_LIB_PREFIX=Qt - bitcoin_qt_got_major_vers=4 - fi - qt5_modules="Qt5Core Qt5Gui Qt5Network Qt5Widgets" - qt4_modules="QtCore QtGui QtNetwork" - BITCOIN_QT_CHECK([ - if test x$bitcoin_qt_want_version = xqt5 || ( test x$bitcoin_qt_want_version = xauto && test x$auto_priority_version = xqt5 ); then - PKG_CHECK_MODULES([QT5], [$qt5_modules], [QT_INCLUDES="$QT5_CFLAGS"; QT_LIBS="$QT5_LIBS" have_qt=yes],[have_qt=no]) - elif test x$bitcoin_qt_want_version = xqt4 || ( test x$bitcoin_qt_want_version = xauto && test x$auto_priority_version = xqt4 ); then - PKG_CHECK_MODULES([QT4], [$qt4_modules], [QT_INCLUDES="$QT4_CFLAGS"; QT_LIBS="$QT4_LIBS" ; have_qt=yes], [have_qt=no]) - fi - - dnl qt version is set to 'auto' and the preferred version wasn't found. Now try the other. - if test x$have_qt = xno && test x$bitcoin_qt_want_version = xauto; then - if test x$auto_priority_version = xqt5; then - PKG_CHECK_MODULES([QT4], [$qt4_modules], [QT_INCLUDES="$QT4_CFLAGS"; QT_LIBS="$QT4_LIBS" ; have_qt=yes; QT_LIB_PREFIX=Qt; bitcoin_qt_got_major_vers=4], [have_qt=no]) - else - PKG_CHECK_MODULES([QT5], [$qt5_modules], [QT_INCLUDES="$QT5_CFLAGS"; QT_LIBS="$QT5_LIBS" ; have_qt=yes; QT_LIB_PREFIX=Qt5; bitcoin_qt_got_major_vers=5], [have_qt=no]) - fi - fi - if test x$have_qt != xyes; then - have_qt=no - BITCOIN_QT_FAIL([Qt dependencies not found]) - fi - ]) - BITCOIN_QT_CHECK([ - PKG_CHECK_MODULES([QT_TEST], [${QT_LIB_PREFIX}Test], [QT_TEST_INCLUDES="$QT_TEST_CFLAGS"; have_qt_test=yes], [have_qt_test=no]) - if test x$use_dbus != xno; then - PKG_CHECK_MODULES([QT_DBUS], [${QT_LIB_PREFIX}DBus], [QT_DBUS_INCLUDES="$QT_DBUS_CFLAGS"; have_qt_dbus=yes], [have_qt_dbus=no]) - fi - ]) +dnl Outputs: have_qt_test. +AC_DEFUN([_BITCOIN_QT_FIND_LIBS],[ + BITCOIN_QT_CHECK([ + PKG_CHECK_MODULES([QT_CORE], [${qt_lib_prefix}Core${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_CORE_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_CORE_LIBS $QT_LIBS"], + [BITCOIN_QT_FAIL([${qt_lib_prefix}Core${qt_lib_suffix} $qt_version not found])]) ]) - true; dnl -]) - -dnl Internal. Find Qt libraries without using pkg-config. Version is deduced -dnl from the discovered headers. -dnl Inputs: bitcoin_qt_want_version (from --with-gui=). The version to use. -dnl If "auto", the version will be discovered by _BITCOIN_QT_CHECK_QT5. -dnl Outputs: All necessary QT_* variables are set. -dnl Outputs: bitcoin_qt_got_major_vers is set to "4" or "5". -dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no. -AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[ - TEMP_CPPFLAGS="$CPPFLAGS" - TEMP_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$PIC_FLAGS $CXXFLAGS" - TEMP_LIBS="$LIBS" BITCOIN_QT_CHECK([ - if test x$qt_include_path != x; then - QT_INCLUDES="-I$qt_include_path -I$qt_include_path/QtCore -I$qt_include_path/QtGui -I$qt_include_path/QtWidgets -I$qt_include_path/QtNetwork -I$qt_include_path/QtTest -I$qt_include_path/QtDBus" - CPPFLAGS="$QT_INCLUDES $CPPFLAGS" - fi + PKG_CHECK_MODULES([QT_GUI], [${qt_lib_prefix}Gui${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_GUI_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_GUI_LIBS $QT_LIBS"], + [BITCOIN_QT_FAIL([${qt_lib_prefix}Gui${qt_lib_suffix} $qt_version not found])]) ]) - - BITCOIN_QT_CHECK([AC_CHECK_HEADER([QtPlugin],,BITCOIN_QT_FAIL(QtCore headers missing))]) - BITCOIN_QT_CHECK([AC_CHECK_HEADER([QApplication],, BITCOIN_QT_FAIL(QtGui headers missing))]) - BITCOIN_QT_CHECK([AC_CHECK_HEADER([QLocalSocket],, BITCOIN_QT_FAIL(QtNetwork headers missing))]) - BITCOIN_QT_CHECK([ - if test x$bitcoin_qt_want_version = xauto; then - _BITCOIN_QT_CHECK_QT5 - fi - if test x$bitcoin_cv_qt5 = xyes || test x$bitcoin_qt_want_version = xqt5; then - QT_LIB_PREFIX=Qt5 - bitcoin_qt_got_major_vers=5 - else - QT_LIB_PREFIX=Qt - bitcoin_qt_got_major_vers=4 - fi + PKG_CHECK_MODULES([QT_WIDGETS], [${qt_lib_prefix}Widgets${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_WIDGETS_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_WIDGETS_LIBS $QT_LIBS"], + [BITCOIN_QT_FAIL([${qt_lib_prefix}Widgets${qt_lib_suffix} $qt_version not found])]) ]) - BITCOIN_QT_CHECK([ - LIBS= - if test x$qt_lib_path != x; then - LIBS="$LIBS -L$qt_lib_path" - fi - - if test x$TARGET_OS = xwindows; then - AC_CHECK_LIB([imm32], [main],, BITCOIN_QT_FAIL(libimm32 not found)) - fi + PKG_CHECK_MODULES([QT_NETWORK], [${qt_lib_prefix}Network${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_NETWORK_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_NETWORK_LIBS $QT_LIBS"], + [BITCOIN_QT_FAIL([${qt_lib_prefix}Network${qt_lib_suffix} $qt_version not found])]) ]) - BITCOIN_QT_CHECK(AC_CHECK_LIB([z] ,[main],,AC_MSG_WARN([zlib not found. Assuming qt has it built-in]))) - BITCOIN_QT_CHECK(AC_SEARCH_LIBS([png_error] ,[qtpng png],,AC_MSG_WARN([libpng not found. Assuming qt has it built-in]))) - BITCOIN_QT_CHECK(AC_SEARCH_LIBS([jpeg_create_decompress] ,[qtjpeg jpeg],,AC_MSG_WARN([libjpeg not found. Assuming qt has it built-in]))) - BITCOIN_QT_CHECK(AC_SEARCH_LIBS([pcre16_exec], [qtpcre pcre16],,AC_MSG_WARN([libpcre16 not found. Assuming qt has it built-in]))) - BITCOIN_QT_CHECK(AC_SEARCH_LIBS([hb_ot_tags_from_script] ,[qtharfbuzzng harfbuzz],,AC_MSG_WARN([libharfbuzz not found. Assuming qt has it built-in or support is disabled]))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Core] ,[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXCore not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Gui] ,[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXGui not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Network],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXNetwork not found))) - if test x$bitcoin_qt_got_major_vers = x5; then - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Widgets],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXWidgets not found))) - fi - QT_LIBS="$LIBS" - LIBS="$TEMP_LIBS" - BITCOIN_QT_CHECK([ - LIBS= - if test x$qt_lib_path != x; then - LIBS="-L$qt_lib_path" - fi - AC_CHECK_LIB([${QT_LIB_PREFIX}Test], [main],, have_qt_test=no) - AC_CHECK_HEADER([QTest],, have_qt_test=no) - QT_TEST_LIBS="$LIBS" - if test x$use_dbus != xno; then - LIBS= - if test x$qt_lib_path != x; then - LIBS="-L$qt_lib_path" - fi - AC_CHECK_LIB([${QT_LIB_PREFIX}DBus], [main],, have_qt_dbus=no) - AC_CHECK_HEADER([QtDBus],, have_qt_dbus=no) - QT_DBUS_LIBS="$LIBS" + PKG_CHECK_MODULES([QT_TEST], [${qt_lib_prefix}Test${qt_lib_suffix} $qt_version], [QT_TEST_INCLUDES="$QT_TEST_CFLAGS"; have_qt_test=yes], [have_qt_test=no]) + if test "$use_dbus" != "no"; then + PKG_CHECK_MODULES([QT_DBUS], [${qt_lib_prefix}DBus $qt_version], [QT_DBUS_INCLUDES="$QT_DBUS_CFLAGS"; have_qt_dbus=yes], [have_qt_dbus=no]) fi ]) - CPPFLAGS="$TEMP_CPPFLAGS" - CXXFLAGS="$TEMP_CXXFLAGS" - LIBS="$TEMP_LIBS" -]) - +]) \ No newline at end of file diff --git a/build-aux/m4/bitcoin_runtime_lib.m4 b/build-aux/m4/bitcoin_runtime_lib.m4 new file mode 100644 index 0000000000..1a6922deca --- /dev/null +++ b/build-aux/m4/bitcoin_runtime_lib.m4 @@ -0,0 +1,42 @@ +# On some platforms clang builtin implementations +# require compiler-rt as a runtime library to use. +# +# See: +# - https://bugs.llvm.org/show_bug.cgi?id=28629 + +m4_define([_CHECK_RUNTIME_testbody], [[ + bool f(long long x, long long y, long long* p) + { + return __builtin_mul_overflow(x, y, p); + } + int main() { return 0; } +]]) + +AC_DEFUN([CHECK_RUNTIME_LIB], [ + + AC_LANG_PUSH([C++]) + + AC_MSG_CHECKING([for __builtin_mul_overflow]) + AC_LINK_IFELSE( + [AC_LANG_SOURCE([_CHECK_RUNTIME_testbody])], + [ + AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_BUILTIN_MUL_OVERFLOW], [1], [Define if you have a working __builtin_mul_overflow]) + ], + [ + ax_check_save_flags="$LDFLAGS" + LDFLAGS="$LDFLAGS --rtlib=compiler-rt -lgcc_s" + AC_LINK_IFELSE( + [AC_LANG_SOURCE([_CHECK_RUNTIME_testbody])], + [ + AC_MSG_RESULT([yes, with additional linker flags]) + RUNTIME_LDFLAGS="--rtlib=compiler-rt -lgcc_s" + AC_DEFINE([HAVE_BUILTIN_MUL_OVERFLOW], [1], [Define if you have a working __builtin_mul_overflow]) + ], + [AC_MSG_RESULT([no])]) + LDFLAGS="$ax_check_save_flags" + ]) + + AC_LANG_POP + AC_SUBST([RUNTIME_LDFLAGS]) +]) diff --git a/build-aux/m4/bitcoin_subdir_to_include.m4 b/build-aux/m4/bitcoin_subdir_to_include.m4 index 7841042ac8..736270afea 100644 --- a/build-aux/m4/bitcoin_subdir_to_include.m4 +++ b/build-aux/m4/bitcoin_subdir_to_include.m4 @@ -5,13 +5,13 @@ dnl file COPYING or http://www.opensource.org/licenses/mit-license.php. dnl BITCOIN_SUBDIR_TO_INCLUDE([CPPFLAGS-VARIABLE-NAME],[SUBDIRECTORY-NAME],[HEADER-FILE]) dnl SUBDIRECTORY-NAME must end with a path separator AC_DEFUN([BITCOIN_SUBDIR_TO_INCLUDE],[ - if test "x$2" = "x"; then + if test "$2" = ""; then AC_MSG_RESULT([default]) else echo "#include <$2$3.h>" >conftest.cpp newinclpath=`${CXXCPP} ${CPPFLAGS} -M conftest.cpp 2>/dev/null | [ tr -d '\\n\\r\\\\' | sed -e 's/^.*[[:space:]:]\(\/[^[:space:]]*\)]$3[\.h[[:space:]].*$/\1/' -e t -e d`] AC_MSG_RESULT([${newinclpath}]) - if test "x${newinclpath}" != "x"; then + if test "${newinclpath}" != ""; then eval "$1=\"\$$1\"' -I${newinclpath}'" fi fi diff --git a/build-aux/m4/l_atomic.m4 b/build-aux/m4/l_atomic.m4 index 75c43f9a92..40639dfe61 100644 --- a/build-aux/m4/l_atomic.m4 +++ b/build-aux/m4/l_atomic.m4 @@ -12,8 +12,17 @@ dnl warranty. m4_define([_CHECK_ATOMIC_testbody], [[ #include #include + #include + + using namespace std::chrono_literals; int main() { + std::atomic lock{true}; + std::atomic_exchange(&lock, false); + + std::atomic t{0s}; + t.store(2s); + std::atomic a{}; int64_t v = 5; diff --git a/build-aux/m4/l_filesystem.m4 b/build-aux/m4/l_filesystem.m4 new file mode 100644 index 0000000000..ca3a0cd41c --- /dev/null +++ b/build-aux/m4/l_filesystem.m4 @@ -0,0 +1,47 @@ +dnl Copyright (c) 2022 The Bitcoin Core developers +dnl Distributed under the MIT software license, see the accompanying +dnl file COPYING or http://www.opensource.org/licenses/mit-license.php. + +# GCC 8.1 and earlier requires -lstdc++fs +# Clang 8.0.0 (libc++) and earlier requires -lc++fs + +m4_define([_CHECK_FILESYSTEM_testbody], [[ + #include + + namespace fs = std::filesystem; + + int main() { + (void)fs::current_path().root_name(); + return 0; + } +]]) + +AC_DEFUN([CHECK_FILESYSTEM], [ + + AC_LANG_PUSH(C++) + + AC_MSG_CHECKING([whether std::filesystem can be used without link library]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_FILESYSTEM_testbody])],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + SAVED_LIBS="$LIBS" + LIBS="$SAVED_LIBS -lstdc++fs" + AC_MSG_CHECKING([whether std::filesystem needs -lstdc++fs]) + AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_FILESYSTEM_testbody])],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_CHECKING([whether std::filesystem needs -lc++fs]) + LIBS="$SAVED_LIBS -lc++fs" + AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_FILESYSTEM_testbody])],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_FAILURE([cannot figure out how to use std::filesystem]) + ]) + ]) + ]) + + AC_LANG_POP +]) diff --git a/build-aux/m4/l_socket.m4 b/build-aux/m4/l_socket.m4 new file mode 100644 index 0000000000..15a467322b --- /dev/null +++ b/build-aux/m4/l_socket.m4 @@ -0,0 +1,36 @@ +# Illumos/SmartOS requires linking with -lsocket if +# using getifaddrs & freeifaddrs + +m4_define([_CHECK_SOCKET_testbody], [[ + #include + #include + + int main() { + struct ifaddrs *ifaddr; + getifaddrs(&ifaddr); + freeifaddrs(ifaddr); + } +]]) + +AC_DEFUN([CHECK_SOCKET], [ + + AC_LANG_PUSH(C++) + + AC_MSG_CHECKING([whether ifaddrs funcs can be used without link library]) + + AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_SOCKET_testbody])],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + LIBS="$LIBS -lsocket" + AC_MSG_CHECKING([whether getifaddrs needs -lsocket]) + AC_LINK_IFELSE([AC_LANG_SOURCE([_CHECK_SOCKET_testbody])],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([can not figure out how to use getifaddrs]) + ]) + ]) + + AC_LANG_POP +]) diff --git a/build.properties b/build.properties new file mode 100644 index 0000000000..599a90600b --- /dev/null +++ b/build.properties @@ -0,0 +1,3 @@ +snapshot-version=2.0.3.99-SNAPSHOT +release-version=2.0.3.01 +candidate-version=2.0.3.01-candidate \ No newline at end of file diff --git a/ci/Dockerfile.builder b/ci/Dockerfile.builder index 4f70883013..f7f3ff3e92 100644 --- a/ci/Dockerfile.builder +++ b/ci/Dockerfile.builder @@ -4,20 +4,21 @@ FROM ubuntu:bionic # (zlib1g-dev and libssl-dev are needed for the Qt host binary builds, but should not be used by target binaries) # We split this up into multiple RUN lines as we might need to retry multiple times on Travis. This way we allow better # cache usage. -RUN apt-get update -RUN apt-get update && apt-get install -y git -RUN apt-get update && apt-get install -y g++ -RUN apt-get update && apt-get install -y autotools-dev libtool m4 automake autoconf pkg-config -RUN apt-get update && apt-get install -y zlib1g-dev libssl1.0-dev curl ccache bsdmainutils cmake -RUN apt-get update && apt-get install -y python3 python3-dev -RUN apt-get update && apt-get install -y python3-pip +ENV APT_ARGS="-y --no-install-recommends --no-upgrade" +RUN apt-get update && apt-get install $APT_ARGS git wget unzip && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS g++ && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS autotools-dev libtool m4 automake autoconf pkg-config && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS zlib1g-dev libssl1.0-dev curl ccache bsdmainutils cmake && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS python3 python3-dev && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS python3-pip python3-setuptools && rm -rf /var/lib/apt/lists/* # Python stuff RUN pip3 install pyzmq # really needed? RUN pip3 install jinja2 +RUN pip3 install flake8 # raptoreum_hash -RUN git clone https://github.com/raptoreum/raptoreum_hash +RUN git clone https://github.com/raptor3um/raptoreum_hash RUN cd raptoreum_hash && python3 setup.py install ARG USER_ID=1000 @@ -29,15 +30,24 @@ ENV GROUP_ID ${GROUP_ID} RUN groupadd -g ${GROUP_ID} raptoreum RUN useradd -u ${USER_ID} -g raptoreum -s /bin/bash -m -d /raptoreum raptoreum -# Extra packages -ARG BUILD_TARGET=linux64 -ADD matrix.sh /tmp/matrix.sh -RUN . /tmp/matrix.sh && \ - if [ -n "$DPKG_ADD_ARCH" ]; then dpkg --add-architecture "$DPKG_ADD_ARCH" ; fi && \ - if [ -n "$PACKAGES" ]; then apt-get update && apt-get install -y --no-install-recommends --no-upgrade $PACKAGES; fi +# Packages needed for all target builds +RUN dpkg --add-architecture i386 +RUN apt-get update && apt-get install $APT_ARGS g++-7-multilib && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS g++-arm-linux-gnueabihf && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS g++-mingw-w64-i686 && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS g++-mingw-w64-x86-64 && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS wine-stable wine32 wine64 bc nsis && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS python3-zmq && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS shellcheck && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install $APT_ARGS imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools && rm -rf /var/lib/apt/lists/* + +# This is a hack. It is needed because gcc-multilib and g++-multilib are conflicting with g++-arm-linux-gnueabihf. This is +# due to gcc-multilib installing the following symbolic link, which is needed for -m32 support. However, this causes +# arm builds to also have the asm folder implicitely in the include search path. This is kind of ok, because the asm folder +# for arm has precedence. +RUN ln -s x86_64-linux-gnu/asm /usr/include/asm # Make sure std::thread and friends is available -# Will fail on non-win builds, but we ignore this RUN \ update-alternatives --set i686-w64-mingw32-gcc /usr/bin/i686-w64-mingw32-gcc-posix; \ update-alternatives --set i686-w64-mingw32-g++ /usr/bin/i686-w64-mingw32-g++-posix; \ diff --git a/ci/Dockerfile.gitian-builder b/ci/Dockerfile.gitian-builder deleted file mode 100644 index d1f0715cfa..0000000000 --- a/ci/Dockerfile.gitian-builder +++ /dev/null @@ -1,17 +0,0 @@ -FROM ubuntu:bionic - -RUN apt-get update && apt-get install -y \ - ruby curl make libltdl7 git apache2 apt-cacher-ng python-vm-builder ruby qemu-utils \ - && rm -rf /var/lib/apt/lists - -ARG USER_ID=1000 -ARG GROUP_ID=1000 - -# add user with specified (or default) user/group ids -ENV USER_ID ${USER_ID} -ENV GROUP_ID ${GROUP_ID} -RUN groupadd -g ${GROUP_ID} raptoreum -RUN useradd -u ${USER_ID} -g raptoreum -s /bin/bash -m -d /raptoreum raptoreum - -WORKDIR /raptoreum -USER raptoreum \ No newline at end of file diff --git a/ci/build_depends.sh b/ci/build_depends.sh index d4e7cd0e59..fec2cad4de 100755 --- a/ci/build_depends.sh +++ b/ci/build_depends.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash - +# # This script is executed inside the builder image +export LC_ALL=C + set -e source ./ci/matrix.sh diff --git a/ci/build_src.sh b/ci/build_src.sh index 33fec0be56..55e8361b50 100755 --- a/ci/build_src.sh +++ b/ci/build_src.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash - +# # This script is executed inside the builder image +export LC_ALL=C + set -e source ./ci/matrix.sh @@ -12,9 +14,21 @@ unset DISPLAY export CCACHE_COMPRESS=${CCACHE_COMPRESS:-1} export CCACHE_SIZE=${CCACHE_SIZE:-400M} -if [ "$PULL_REQUEST" != "false" ]; then contrib/devtools/commit-script-check.sh $COMMIT_RANGE; fi - -#if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/check-doc.py; fi TODO reenable after all Bitcoin PRs have been merged and docs fully fixed +if [ "$PULL_REQUEST" != "false" ]; then test/lint/commit-script-check.sh $COMMIT_RANGE; fi + +if [ "$CHECK_DOC" = 1 ]; then + # TODO: Verify subtrees + #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 + # TODO: Check docs (reenable after all Bitcoin PRs have been merged and docs fully fixed) + #test/lint/check-doc.py + # Check rpc consistency + test/lint/check-rpc-mappings.py . + # Run all linters + test/lint/lint-all.sh +fi ccache --max-size=$CCACHE_SIZE @@ -24,7 +38,7 @@ fi BITCOIN_CONFIG_ALL="--disable-dependency-tracking --prefix=$BUILD_DIR/depends/$HOST --bindir=$OUT_DIR/bin --libdir=$OUT_DIR/lib" -test -n "$USE_SHELL" && eval '"$USE_SHELL" -c "./autogen.sh"' || ./autogen.sh +( test -n "$USE_SHELL" && eval '"$USE_SHELL" -c "./autogen.sh"' ) || ./autogen.sh rm -rf build-ci mkdir build-ci diff --git a/ci/matrix.sh b/ci/matrix.sh index b3154836d0..88ea73628c 100755 --- a/ci/matrix.sh +++ b/ci/matrix.sh @@ -1,8 +1,10 @@ #!/usr/bin/env bash - +# # This script is meant to be sourced into the actual build script. It contains the build matrix and will set all # necessary environment variables for the request build target +export LC_ALL=C + export BUILD_TARGET=${BUILD_TARGET:-linux64} export PULL_REQUEST=${PULL_REQUEST:-false} export JOB_NUMBER=${JOB_NUMBER:-1} @@ -34,59 +36,59 @@ export RUN_INTEGRATIONTESTS=false if [ "$BUILD_TARGET" = "arm-linux" ]; then export HOST=arm-linux-gnueabihf - export PACKAGES="g++-arm-linux-gnueabihf" export CHECK_DOC=1 # -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 BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports CXXFLAGS=-Wno-psabi" + export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports --enable-suppress-external-warnings --enable-werror CXXFLAGS=-Wno-psabi" elif [ "$BUILD_TARGET" = "win32" ]; then export HOST=i686-w64-mingw32 export DPKG_ADD_ARCH="i386" - export PACKAGES="python3 nsis g++-mingw-w64-i686 wine-stable wine32 bc" export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner" export DIRECT_WINE_EXEC_TESTS=true export RUN_UNITTESTS=true elif [ "$BUILD_TARGET" = "win64" ]; then export HOST=x86_64-w64-mingw32 export DPKG_ADD_ARCH="i386" - export PACKAGES="python3 nsis g++-mingw-w64-x86-64 wine-stable wine64 bc" export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner" export DIRECT_WINE_EXEC_TESTS=true export RUN_UNITTESTS=true elif [ "$BUILD_TARGET" = "linux32" ]; then export HOST=i686-pc-linux-gnu - export PACKAGES="g++-multilib bc python3-zmq" - export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports --enable-stacktraces LDFLAGS=-static-libstdc++" + export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports --enable-crash-hooks LDFLAGS=-static-libstdc++" export USE_SHELL="/bin/raptoreum" export PYZMQ=true export RUN_UNITTESTS=true export RUN_INTEGRATIONTESTS=true elif [ "$BUILD_TARGET" = "linux64" ]; then export HOST=x86_64-unknown-linux-gnu - export PACKAGES="bc python3-zmq" export DEP_OPTS="NO_UPNP=1 DEBUG=1" - export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports --enable-stacktraces" + export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports --enable-crash-hooks" + export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_RAPTOREUM_DEBUG" + export PYZMQ=true + export RUN_UNITTESTS=true + export RUN_INTEGRATIONTESTS=true +elif [ "$BUILD_TARGET" = "linux64_cxx17" ]; then + export HOST=x86_64-unknown-linux-gnu + export DEP_OPTS="NO_UPNP=1 DEBUG=1" + export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports --enable-crash-hooks --enable-c++17 --enable-suppress-external-warnings --enable-werror --with-sanitizers=undefined" export CPPFLAGS="-DDEBUG_LOCKORDER -DENABLE_RAPTOREUM_DEBUG" export PYZMQ=true export RUN_UNITTESTS=true export RUN_INTEGRATIONTESTS=true elif [ "$BUILD_TARGET" = "linux64_nowallet" ]; then export HOST=x86_64-unknown-linux-gnu - export PACKAGES="python3" export DEP_OPTS="NO_WALLET=1" export BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports" export RUN_UNITTESTS=true elif [ "$BUILD_TARGET" = "linux64_release" ]; then export HOST=x86_64-unknown-linux-gnu - export PACKAGES="bc python3-zmq" export DEP_OPTS="NO_UPNP=1" export BITCOIN_CONFIG="--enable-zmq --enable-glibc-back-compat --enable-reduce-exports" export PYZMQ=true export RUN_UNITTESTS=true elif [ "$BUILD_TARGET" = "mac" ]; then - export HOST=x86_64-apple-darwin11 - export PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools" + export HOST=x86_64-apple-darwin14 export BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --disable-miner" export OSX_SDK=10.11 - export GOAL="deploy" + export GOAL="all deploy" fi diff --git a/ci/test_integrationtests.sh b/ci/test_integrationtests.sh index 6bd95d1e8b..23309f1312 100755 --- a/ci/test_integrationtests.sh +++ b/ci/test_integrationtests.sh @@ -1,10 +1,12 @@ #!/usr/bin/env bash - +# # This script is executed inside the builder image +export LC_ALL=C + set -e -PASS_ARGS="$@" +PASS_ARGS="$*" source ./ci/matrix.sh @@ -17,8 +19,22 @@ export LD_LIBRARY_PATH=$BUILD_DIR/depends/$HOST/lib cd build-ci/raptoreumcore-$BUILD_TARGET +if [ "$SOCKETEVENTS" = "" ]; then + # Let's switch socketevents mode to some random mode + R=$(($RANDOM%3)) + if [ "$R" == "0" ]; then + SOCKETEVENTS="select" + elif [ "$R" == "1" ]; then + SOCKETEVENTS="poll" + else + SOCKETEVENTS="epoll" + fi +fi +echo "Using socketevents mode: $SOCKETEVENTS" +EXTRA_ARGS="--raptoreum-arg=-socketevents=$SOCKETEVENTS" + set +e -./test/functional/test_runner.py --coverage --quiet --nocleanup --tmpdir=$(pwd)/testdatadirs $PASS_ARGS +./test/functional/test_runner.py --ci --combinedlogslen=4000 --coverage --failfast --nocleanup --tmpdir=$(pwd)/testdatadirs $PASS_ARGS $EXTRA_ARGS RESULT=$? set -e @@ -26,10 +42,13 @@ echo "Collecting logs..." BASEDIR=$(ls testdatadirs) if [ "$BASEDIR" != "" ]; then mkdir testlogs - for d in $(ls testdatadirs/$BASEDIR | grep -v '^cache$'); do + TESTDATADIRS=$(ls testdatadirs/$BASEDIR) + for d in $TESTDATADIRS; do + [[ "$d" ]] || break # found nothing + [[ "$d" != "cache" ]] || continue # skip cache dir mkdir testlogs/$d - ./test/functional/combine_logs.py -c ./testdatadirs/$BASEDIR/$d > ./testlogs/$d/combined.log - ./test/functional/combine_logs.py --html ./testdatadirs/$BASEDIR/$d > ./testlogs/$d/combined.html + PYTHONIOENCODING=UTF-8 ./test/functional/combine_logs.py -c ./testdatadirs/$BASEDIR/$d > ./testlogs/$d/combined.log + PYTHONIOENCODING=UTF-8 ./test/functional/combine_logs.py --html ./testdatadirs/$BASEDIR/$d > ./testlogs/$d/combined.html cd testdatadirs/$BASEDIR/$d LOGFILES="$(find . -name 'debug.log' -or -name "test_framework.log")" cd ../../.. diff --git a/ci/test_unittests.sh b/ci/test_unittests.sh index 076436afe8..90765cd04b 100755 --- a/ci/test_unittests.sh +++ b/ci/test_unittests.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash - +# # This script is executed inside the builder image +export LC_ALL=C + set -e source ./ci/matrix.sh diff --git a/configure.ac b/configure.ac index 5db49646d4..8487c0cd48 100644 --- a/configure.ac +++ b/configure.ac @@ -1,27 +1,32 @@ -dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) -AC_PREREQ([2.60]) -define(_CLIENT_VERSION_MAJOR, 1) -define(_CLIENT_VERSION_MINOR, 2) -define(_CLIENT_VERSION_REVISION, 15) -define(_CLIENT_VERSION_BUILD, 3) +AC_PREREQ([2.69]) +define(_CLIENT_VERSION_MAJOR, 2) +define(_CLIENT_VERSION_MINOR, 0) +define(_CLIENT_VERSION_REVISION, 03) +define(_CLIENT_VERSION_BUILD, 01) define(_CLIENT_VERSION_IS_RELEASE, true) -define(_COPYRIGHT_YEAR, 2020) +define(_COPYRIGHT_YEAR, 2024) define(_COPYRIGHT_HOLDERS,[The %s developers]) define(_COPYRIGHT_HOLDERS_SUBSTITUTION,[[Raptoreum Core]]) -AC_INIT([Raptoreum Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/raptoreum/raptoreum/issues],[raptoreumcore],[https://raptoreum.org/]) +AC_INIT([Raptoreum Core],m4_join([.], _CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MINOR, _CLIENT_VERSION_REVISION, m4_if(_CLIENT_VERSION_BUILD, [0], [], _CLIENT_VERSION_BUILD))m4_if(_CLIENT_VERSION_RC, [0], [], [rc]_CLIENT_VERSION_RC),[https://github.com/Raptor3um/raptoreum/issues],[raptoreumcore],[https://raptoreum.com/]) AC_CONFIG_SRCDIR([src/validation.cpp]) AC_CONFIG_HEADERS([src/config/raptoreum-config.h]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([build-aux/m4]) +m4_ifndef([PKG_PROG_PKG_CONFIG], [m4_fatal([PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh])]) +PKG_PROG_PKG_CONFIG +if test "$PKG_CONFIG" = ""; then + AC_MSG_ERROR([pkg-config not found]) +fi + BITCOIN_DAEMON_NAME=raptoreumd BITCOIN_GUI_NAME=raptoreum-qt BITCOIN_CLI_NAME=raptoreum-cli -BITCOIN_TX_NAME=raptoreum-tx +BITCOIN_WALLET_TOOL_NAME=raptoreum-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]) -if test "x${ARFLAGS+set}" != "xset"; then +AC_ARG_VAR([ARFLAGS], [Flags for the archiver, defaults to if not set]) +if test "${ARFLAGS+set}" != "set"; then ARFLAGS="cr" fi @@ -31,21 +36,16 @@ AH_TOP([#ifndef RAPTOREUM_CONFIG_H]) AH_TOP([#define RAPTOREUM_CONFIG_H]) AH_BOTTOM([#endif //RAPTOREUM_CONFIG_H]) -dnl faketime breaks configure and is only needed for make. Disable it here. -unset FAKETIME - dnl Automake init set-up and checks -AM_INIT_AUTOMAKE([no-define subdir-objects foreign]) +AM_INIT_AUTOMAKE([1.13 no-define subdir-objects foreign]) -dnl faketime messes with timestamps and causes configure to be re-run. -dnl --disable-maintainer-mode can be used to bypass this. AM_MAINTAINER_MODE([enable]) dnl make the compilation flags quiet unless V=1 is used -m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +AM_SILENT_RULES([yes]) dnl Compiler checks (here before libtool). -if test "x${CXXFLAGS+set}" = "xset"; then +if test "${CXXFLAGS+set}" = "set"; then CXXFLAGS_overridden=yes else CXXFLAGS_overridden=no @@ -56,272 +56,426 @@ dnl By default, libtool for mingw refuses to link static libs into a dll for dnl fear of mixing pic/non-pic objects, and import/export complications. Since dnl we have those under control, re-enable that functionality. case $host in - *mingw*) - lt_cv_deplibs_check_method="pass_all" - ;; + *mingw*) lt_cv_deplibs_check_method="pass_all" ;; esac -dnl Require C++14 compiler (no GNU extensions) -AX_CXX_COMPILE_STDCXX([14], [noext], [mandatory], [nodefault]) + +dnl Require C++17 compiler (no GNU extensions) +AX_CXX_COMPILE_STDCXX([17], [noext], [mandatory]) + dnl Check if -latomic is required for CHECK_ATOMIC dnl Unless the user specified OBJCXX, force it to be the same as CXX. This ensures dnl that we get the same -std flags for both. m4_ifdef([AC_PROG_OBJCXX],[ -if test "x${OBJCXX+set}" = "x"; then +if test "${OBJCXX+set}" = ""; then OBJCXX="${CXX}" fi AC_PROG_OBJCXX ]) +dnl Since libtool 1.5.2 (released on 2004-01-25), on Linux libtool no longer +dnl sets RPATH for any directories in the dynamic linker search path. +dnl See more: https://wiki.debian.org/RpathIssue +LT_PREREQ([2.4.2]) + dnl Libtool init checks. -LT_INIT([pic-only]) +LT_INIT([pic-only win32-dll]) dnl Check/return PATH for base programs. -AC_PATH_TOOL(AR, ar) -AC_PATH_TOOL(RANLIB, ranlib) -AC_PATH_TOOL(STRIP, strip) -AC_PATH_TOOL(GCOV, gcov) -AC_PATH_PROG(LCOV, lcov) +AC_PATH_TOOL([AR], [ar]) +AC_PATH_TOOL([RANLIB], [ranlib]) +AC_PATH_TOOL([STRIP], [strip]) +AC_PATH_TOOL([GCOV], [gcov]) +AC_PATH_PROG([LLVM_COV], [llvm-cov]) +AC_PATH_PROG([LCOV], [lcov]) dnl Python 3.x is supported from 3.4 on (see https://github.com/bitcoin/bitcoin/issues/7893) -AC_PATH_PROGS([PYTHON], [python3.6 python3.5 python3.4 python3 python2.7 python2 python]) -AC_PATH_PROG(GENHTML, genhtml) +AC_PATH_PROGS([PYTHON], [python3.6 python3.7 python3.8 python3.9 python3.10 python3.11 python3 python]) +AC_PATH_PROG([GENHTML], [genhtml]) AC_PATH_PROG([GIT], [git]) -AC_PATH_PROG(CCACHE,ccache) -AC_PATH_PROG(XGETTEXT,xgettext) -AC_PATH_PROG(HEXDUMP,hexdump) -AC_PATH_TOOL(READELF, readelf) -AC_PATH_TOOL(CPPFILT, c++filt) -AC_PATH_TOOL(OBJCOPY, objcopy) -AC_PATH_TOOL(DSYMUTIL, dsymutil) +AC_PATH_PROG([CCACHE], [ccache]) +AC_PATH_PROG([XGETTEXT], [xgettext]) +AC_PATH_PROG([HEXDUMP], [hexdump]) +AC_PATH_TOOL([READELF], [readelf]) +AC_PATH_TOOL([CPPFILT], [c++filt]) +AC_PATH_TOOL([DSYMUTIL], [dsymutil]) +AC_PATH_TOOL([OBJCOPY], [objcopy]) +AC_PATH_PROG([DOXYGEN], [doxygen]) +AM_CONDITIONAL([HAVE_DOXYGEN], [test -n "$DOXYGEN"]) + +AC_ARG_VAR([PYTHONPATH], [Augments the default search path for python module files]) -AC_ARG_VAR(PYTHONPATH, Augments the default search path for python module files) - -# Enable wallet AC_ARG_ENABLE([wallet], - [AS_HELP_STRING([--disable-wallet], - [disable wallet (enabled by default)])], - [enable_wallet=$enableval], - [enable_wallet=yes]) + [AS_HELP_STRING([--disable-wallet], [disable wallet (enabled by default)])], + [enable_wallet=$enableval], + [enable_wallet=auto]) + +AC_ARG_WITH([bdb], + [AS_HELP_STRING([--without-bdb], [disable bdb wallet support (default is enabled if wallet is enabled)])], + [use_bdb=$withval], + [use_bdb=auto]) AC_ARG_WITH([miniupnpc], - [AS_HELP_STRING([--with-miniupnpc], - [enable UPNP (default is yes if libminiupnpc is found)])], - [use_upnp=$withval], - [use_upnp=auto]) + [AS_HELP_STRING([--with-miniupnpc], [enable UPNP (default is yes if libminiupnpc is found)])], + [use_upnp=$withval], + [use_upnp=auto]) AC_ARG_ENABLE([upnp-default], - [AS_HELP_STRING([--enable-upnp-default], - [if UPNP is enabled, turn it on at startup (default is no)])], - [use_upnp_default=$enableval], - [use_upnp_default=no]) - -AC_ARG_ENABLE(tests, - AS_HELP_STRING([--disable-tests],[do not compile tests (default is to compile)]), + [AS_HELP_STRING([--enable-upnp-default], [if UPNP is enabled, turn it on at startup (default is no)])], + [use_upnp_default=$enableval], + [use_upnp_default=no]) + +AC_ARG_WITH([natpmp], + [AS_HELP_STRING([--with-natpmp], [enable NAT-PMP (default is yes if libnatpmp is found)])], + [use_natpmp=$withval], + [use_natpmp=auto]) + +AC_ARG_ENABLE([natpmp-default], + [AS_HELP_STRING([--enabler-natpmp-default], [if NAT-PMP is enabled, turn it on at startup (default is no)])], + [use_natpmp_default=$enableval], + [use_natpmp_default=no]) + +AC_ARG_ENABLE([tests], + [AS_HELP_STRING([--disable-tests], [do not compile tests (default is to compile)])], [use_tests=$enableval], [use_tests=yes]) -AC_ARG_ENABLE(gui-tests, - AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)]), +AC_ARG_ENABLE([gui-tests], + [AS_HELP_STRING([--disable-gui-tests],[do not compile GUI tests (default is to compile if GUI and tests enabled)])], [use_gui_tests=$enableval], [use_gui_tests=$use_tests]) -AC_ARG_ENABLE(bench, - AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)]), +AC_ARG_ENABLE([bench], + [AS_HELP_STRING([--disable-bench],[do not compile benchmarks (default is to compile)])], [use_bench=$enableval], [use_bench=yes]) AC_ARG_ENABLE([extended-functional-tests], - AS_HELP_STRING([--enable-extended-functional-tests],[enable expensive functional tests when using lcov (default no)]), + [AS_HELP_STRING([--enable-extended-functional-tests], [enable expensive functional tests when using lcov (default no)])], [use_extended_functional_tests=$enableval], [use_extended_functional_tests=no]) AC_ARG_WITH([qrencode], - [AS_HELP_STRING([--with-qrencode], - [enable QR code support (default is yes if qt is enabled and libqrencode is found)])], - [use_qr=$withval], - [use_qr=auto]) + [AS_HELP_STRING([--with-qrencode], [enable QR code support (default is yes if qt is enabled and libqrencode is found)])], + [use_qr=$withval], + [use_qr=auto]) AC_ARG_ENABLE([hardening], - [AS_HELP_STRING([--disable-hardening], - [do not attempt to harden the resulting executables (default is to harden)])], - [use_hardening=$enableval], - [use_hardening=yes]) + [AS_HELP_STRING([--disable-hardening], [do not attempt to harden the resulting executables (default is to harden when possible)])], + [use_hardening=$enableval], + [use_hardening=auto]) AC_ARG_ENABLE([reduce-exports], - [AS_HELP_STRING([--enable-reduce-exports], - [attempt to reduce exported symbols in the resulting executables (default is no)])], - [use_reduce_exports=$enableval], - [use_reduce_exports=no]) + [AS_HELP_STRING([--enable-reduce-exports], [attempt to reduce exported symbols in the resulting executables (default is no)])], + [use_reduce_exports=$enableval], + [use_reduce_exports=no]) AC_ARG_ENABLE([ccache], - [AS_HELP_STRING([--disable-ccache], - [do not use ccache for building (default is to use if found)])], - [use_ccache=$enableval], - [use_ccache=auto]) + [AS_HELP_STRING([--disable-ccache], [disable ccache for building (default is AUTO)])], + [use_ccache=$enableval], + [use_ccache=auto]) + +dnl Suppress warnings from external headers like Boost, Qt. +dnl May be useful if warnings from external headers clutter the build output +dnl too much, so that it becomes difficult to spot Raptoreum Core warnings +dnl or if they cause a build failure with --enable-werror. +AC_ARG_ENABLE([suppress-external-warnings], + [AS_HELP_STRING([--enable-suppress-external-warnings], [Suppress warnings from external headers (default is no)])], + [suppress_external_warnings=$enableval], + [suppress_external_warnings=no]) AC_ARG_ENABLE([lcov], - [AS_HELP_STRING([--enable-lcov], - [enable lcov testing (default is no)])], - [use_lcov=yes], + [AS_HELP_STRING([--enable-lcov], [enable lcov testing (default is no)])], + [use_lcov=$enableval], [use_lcov=no]) - + AC_ARG_ENABLE([lcov-branch-coverage], - [AS_HELP_STRING([--enable-lcov-branch-coverage], - [enable lcov testing branch coverage (default is no)])], + [AS_HELP_STRING([--enable-lcov-branch-coverage], [enable lcov testing branch coverage (default is no)])], [use_lcov_branch=yes], [use_lcov_branch=no]) -AC_ARG_ENABLE([glibc-back-compat], - [AS_HELP_STRING([--enable-glibc-back-compat], - [enable backwards compatibility with glibc])], - [use_glibc_compat=$enableval], - [use_glibc_compat=no]) +AC_ARG_ENABLE([threadlocal], [AS_HELP_STRING([--enable-threadlocal], + [enable features that depend on the c++ thread_local keyword (currently just thread names in debug logs). (default is to enable if there is platform support)])], + [use_thread_local=$enableval], [use_thread_local=auto]) AC_ARG_ENABLE([asm], - [AS_HELP_STRING([--disable-asm], - [disable assembly routines (enabled by default)])], + [AS_HELP_STRING([--disable-asm], [disable assembly routines (enabled by default)])], [use_asm=$enableval], [use_asm=yes]) -if test "x$use_asm" = xyes; then - AC_DEFINE(USE_ASM, 1, [Define this symbol to build in assembly routines]) +if test "$use_asm" = "yes"; then + AC_DEFINE([USE_ASM], [1], [Define this symbol to build in assembly routines]) fi -AC_ARG_WITH([system-univalue], - [AS_HELP_STRING([--with-system-univalue], - [Build with system UniValue (default is no)])], - [system_univalue=$withval], - [system_univalue=no] -) AC_ARG_ENABLE([zmq], - [AS_HELP_STRING([--disable-zmq], - [disable ZMQ notifications])], + [AS_HELP_STRING([--disable-zmq], [disable ZMQ notifications])], [use_zmq=$enableval], [use_zmq=yes]) -AC_ARG_WITH([protoc-bindir],[AS_HELP_STRING([--with-protoc-bindir=BIN_DIR],[specify protoc bin path])], [protoc_bin_path=$withval], []) +AC_ARG_ENABLE([man], [AS_HELP_STRING([--disable-man], [do not install man pages (default is to install)])], [enable_man=$enableval], [enable_man=yes]) +AM_CONDITIONAL([ENABLE_MAN], [test "$enable_man" != "no"]) -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 +dnl Enable debug AC_ARG_ENABLE([debug], - [AS_HELP_STRING([--enable-debug], - [use debug compiler flags and macros (default is no)])], - [enable_debug=$enableval], - [enable_debug=no]) - -# Enable crash hooks + [AS_HELP_STRING([--enable-debug], [use debug compiler flags and macros (default is no)])], + [enable_debug=$enableval], + [enable_debug=no]) + +dnl Enable exception stacktrace +AC_ARG_ENABLE([stacktraces], + [AS_HELP_STRING([--enable-stacktraces], + [gather and print exception stack traces (default is yes)])], + [enable_stacktraces=$enableval], + [enable_stacktraces=yes]) + +dnl Enable crash hooks AC_ARG_ENABLE([crash-hooks], - [AS_HELP_STRING([--enable-crash-hooks], - [hook into exception/signal/assert handling to gather stack traces (default is no)])], - [enable_crashhooks=$enableval], - [enable_crashhooks=no]) + [AS_HELP_STRING([--enable-crash-hooks], [hook into exception/signal/assert handling to gather stack traces (default is no)])], + [enable_crashhooks=$enableval], + [enable_crashhooks=no]) -# Enable in-wallet miner +dnl Enable in-wallet miner AC_ARG_ENABLE([miner], - [AS_HELP_STRING([--enable-miner], - [enable in-wallet miner (default is yes)])], - [enable_miner=$enableval], - [enable_miner=yes]) -AM_CONDITIONAL([ENABLE_MINER], [test x$enable_miner = xyes]) -if test "x$enable_miner" = xyes; then - AC_DEFINE(ENABLE_MINER, 1, [Define this symbol if in-wallet miner should be enabled]) + [AS_HELP_STRING([--enable-miner], [enable in-wallet miner (default is yes)])], + [enable_miner=$enableval], + [enable_miner=yes]) + +AM_CONDITIONAL([ENABLE_MINER], [test "$enable_miner" = "yes"]) +if test "$enable_miner" = "yes"; then + AC_DEFINE([ENABLE_MINER], [1], [Define this symbol if in-wallet miner should be enabled]) fi -# Turn warnings into errors +dnl Enable different -fsanitize options +AC_ARG_WITH([sanitizers], + [AS_HELP_STRING([--with-sanitizers], + [comma separated list of extra sanitizers to build with (default is none enabled)])], + [use_sanitizers=$withval]) + +dnl Enable gprof profiling +AC_ARG_ENABLE([gprof], + [AS_HELP_STRING([--enable-gprof], + [use gprof profiling compiler flags (default is no)])], + [enable_gprof=$enableval], + [enable_gprof=no]) + +dnl Turn warnings into errors AC_ARG_ENABLE([werror], [AS_HELP_STRING([--enable-werror], [Treat certain compiler warnings as errors (default is no)])], [enable_werror=$enableval], [enable_werror=no]) +AC_ARG_ENABLE([lto], + [AS_HELP_STRING([--enable-lto],[build without using LTO (default is no)])], + [enable_lto=$enableval], + [enable_lto=no]) + AC_LANG_PUSH([C++]) -AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""]) -if test "x$enable_debug" = xyes; then - CPPFLAGS="$CPPFLAGS -DDEBUG" - if test "x$GCC" = xyes; then - CFLAGS="$CFLAGS -g3 -O0" - fi +dnl Check for a flag to turn compiler warning into errors. This is helpful for checks which may +dnl appear to succeed because by default they morely emit warnings when they fail. +dnl +dnl Note that this is not necessarily a check to see if -Werror is supported, but rather to see if +dnl a compiler with -Werror fan succeed. This is important because the compiler may already be +dnl warning about something unrelated, for example about some path issue. If that is the case, +dnl -Werror cannot be used because all of those warnings would be turned into errors. +AX_CHECK_COMPILE_FLAG([-Werror], [CXXFLAG_WERROR="-Werror"], [CXXFLAG_WERROR=""]) + +dnl Check for a flag to turn linker warnings into errors. When flags are passed to linkers via the +dnl compiler driver using a -Wl,-foo flag, linker warnings may be swallowed rather than bubbling up. +dnl See note above, the same applies here as well. +dnl +dnl LDFLAG_WERROR Should only be used when testing -Wl,* +case $host in + *darwin*) + AX_CHECK_LINK_FLAG([-Wl,-fatal_warnings], [LDFLAG_WERROR="-Wl,-fatal_warnings"], [LDFLAG_WERROR=""]) + ;; + *) + AX_CHECK_LINK_FLAG([-Wl,--fatal-warnings], [LDFLAG_WERROR="-Wl,--fatal-warnings"], [LDFLAG_WERROR=""]) + ;; +esac - if test "x$GXX" = xyes; then - CXXFLAGS="$CXXFLAGS -g3 -O0" - fi +if test "$enable_debug" = "yes"; then + dnl If debugging is enabled and the user hasn't overriden CXXFLAGS, + dnl clear them to prevent autoconfs "-g -O2" being added. + dnl Otherwise we'd end up with "-O0 -g3 -g -O2" + if test "$CXXFLAGS_overridden" = "no"; then + CXXFLAGS="" + fi + + dnl Disable all optimizations + AX_CHECK_COMPILE_FLAG([-O0], [DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -O0"], [], [$CXXFLAG_WERROR]) + + dnl Prefer -g3, fall back to -g if that is unavailable. + AX_CHECK_COMPILE_FLAG( + [-g3], + [DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -g3"], + [AX_CHECK_COMPILE_FLAG([-g], [DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -g"], [], [$CXXFLAG_WERROR])], + [$CXXFLAG_WERROR]) + + AX_CHECK_PREPROC_FLAG([-DDEBUG_CORE], [DEBUG_CPPFLAGS="$DEBUG_CPPFLAGS -DDEBUG_CORE"], [], [$CXXFLAG_WERROR]) + AX_CHECK_PREPROC_FLAG([-DDEBUG_LOCKORDER], [DEBUG_CPPFLAGS="$DEBUG_CPPFLAGS -DDEBUG_LOCKORDER"], [], [$CXXFLAG_WERROR]) + AX_CHECK_PREPROC_FLAG([-DABORT_ON_FAILED_ASSUME], [DEBUG_CPPFLAGS="$DEBUG_CPPFLAGS -DABORT_ON_FAILED_ASSUME"], [], [£CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-ftrapv], [DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -ftrapv"], [], [$CXXFLAG_WERROR]) else - # We always enable at at least -g1 debug info to support proper stacktraces in crash infos - # Stacktraces will be suboptimal due to optimization, but better than nothing. Also, -fno-omit-frame-pointer - # mitigates this a little bit - if test "x$GCC" = xyes; then - CFLAGS="$CFLAGS -g1 -fno-omit-frame-pointer" - fi + if test "$GCC" = "yes"; then + CFLAGS="$CFLAGS -g1 -fno-omit-frame-pointer" + fi - if test "x$GXX" = xyes; then - CXXFLAGS="$CXXFLAGS -g1 -fno-omit-frame-pointer" - fi + if test "$GXX" = "yes"; then + CXXFLAGS="$CXXFLAGS -g1 -fno-omit-frame-pointer" + fi fi -AM_CONDITIONAL([ENABLE_CRASH_HOOKS], [test x$enable_crashhooks = xyes]) -if test "x$enable_crashhooks" = xyes; then - AC_DEFINE(ENABLE_CRASH_HOOKS, 0, [Define this symbol if crash hooks should be enabled]) +if test "$enable_stacktraces" != "no"; then + AC_CHECK_HEADERS([execinfo.h], [], [enable_stacktraces=no]) fi + +AM_CONDITIONAL([ENABLE_STACKTRACES], [test "$enable_stacktraces" = "yes"]) +if test "$enable_stacktraces" = "yes"; then + AC_DEFINE([ENABLE_STACKTRACES], [1], [Define this symbol if stacktraces should be enabled]) +else + enable_crashhooks=no +fi + +AM_CONDITIONAL([ENABLE_CRASH_HOOKS], [test "$enable_crashhooks" = "yes"]) +if test "$enable_crashhooks" = "yes"; then + AC_DEFINE([ENABLE_CRASH_HOOKS], [1], [Define this symbol if crash hooks should be enabled]) +fi + AX_CHECK_LINK_FLAG([-Wl,-wrap=__cxa_allocate_exception], [LINK_WRAP_SUPPORTED=yes],,,) -AM_CONDITIONAL([CRASH_HOOKS_WRAPPED_CXX_ABI],[test x$LINK_WRAP_SUPPORTED = xyes]) +AM_CONDITIONAL([CRASH_HOOKS_WRAPPED_CXX_ABI], [test "$LINK_WRAP_SUPPORTED" = "yes"]) -if test x$LINK_WRAP_SUPPORTED = "xyes"; then - AC_DEFINE(CRASH_HOOKS_WRAPPED_CXX_ABI, 1, [Define this symbol to use wrapped CXX ABIs for exception stacktraces]) +if test "$LINK_WRAP_SUPPORTED" = "yes"; then + AC_DEFINE([CRASH_HOOKS_WRAPPED_CXX_ABI], [1], [Define this symbol to use wrapped CXX ABIs for exception stacktraces]) fi -# Needed for MinGW targets when debug symbols are enabled as compiled objects get very large +dnl Needed for MinGW targets when debug symbols are enabled as compiled objects get very large AX_CHECK_COMPILE_FLAG([-Wa,-mbig-obj], [CXXFLAGS="$CXXFLAGS -Wa,-mbig-obj"],,,) +if test "$enable_lto" = "yes"; then + AX_CHECK_COMPILE_FLAG([-flto], [LTO_CXXFLAGS="$LTO_CXXFLAGS -flto"], [AC_MSG_ERROR([compile failed with -flto])], [$CXXFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-flto], [LTO_LDFLAGS="$LTO_LDFLAGS -flto"], [AC_MSG_ERROR([link failed with -flto])], [$CXXFLAG_WERROR]) +fi + +if test "$use_sanitizers" != ""; then + dnl First check if the compiler accepts flags. If an incompatible pair like + dnl -fsanitize=address,thread is used here, this check will fail. This will also + dnl fail if a bad argument is passed, e.g. -fsanitize=undefined + AX_CHECK_COMPILE_FLAG([-fsanitize=$use_sanitizers], [SANITIZER_CXXFLAGS="-fsanitize=$use_sanitizers"], + [AC_MSG_ERROR([compiler did not accept requested flags])]) + + dnl Some compilers (e.g. GCC) require additional libraries like libasan, + dnl libtsan, libubsan, etc. Make sure linking still works with the sanitize + dnl flag. This is a separate check so we can give a better error message when + dnl the sanitize flags are supported by the compiler but the actual sanitizer + dnl libs are missing. + AX_CHECK_LINK_FLAG([-fsanitize=$use_sanitizers], [SANITIZER_LDFLAGS="-fsanitize=$use_sanitizers"], + [AC_MSG_ERROR([linker did not accept requested flags, you are missing required libraries])], [], + [AC_LANG_PROGRAM([[ + #include + #include + extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { return 0; } + __attribute__((weak)) // allow for libFuzzer linking + ]],[[]])]) +fi + ERROR_CXXFLAGS= -if test "x$enable_werror" = "xyes"; then - if test "x$CXXFLAG_WERROR" = "x"; then - AC_MSG_ERROR("enable-werror set but -Werror is not usable") +if test "$enable_werror" = "yes"; then + if test "$CXXFLAG_WERROR" = ""; then + AC_MSG_ERROR([enable-werror set but -Werror is not usable]) fi - AX_CHECK_COMPILE_FLAG([-Werror=vla],[ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Werror=vla"],,[[$CXXFLAG_WERROR]]) + ERROR_CXXFLAGS=$CXXFLAG_WERROR + + dnl -Wreturn-typeis broken in GCC for MinGW-w64. + dnl https://sourceforge.net/p/mingw-w64/bugs/306/ + AX_CHECK_COMPILE_FLAG([-Werror=return-type], [], [ERROR_CXXFLAGS="$ERROR_CXXFLAGS -Wno-error=return-type"], [$CXXFLAG_WERROR], + [AC_LANG_SOURCE([[#include + int f(){ assert(false); }]])]) fi -if test "x$CXXFLAGS_overridden" = "xno"; then - AX_CHECK_COMPILE_FLAG([-Wall],[CXXFLAGS="$CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]]) - AX_CHECK_COMPILE_FLAG([-Wextra],[CXXFLAGS="$CXXFLAGS -Wextra"],,[[$CXXFLAG_WERROR]]) - AX_CHECK_COMPILE_FLAG([-Wformat],[CXXFLAGS="$CXXFLAGS -Wformat"],,[[$CXXFLAG_WERROR]]) - AX_CHECK_COMPILE_FLAG([-Wvla],[CXXFLAGS="$CXXFLAGS -Wvla"],,[[$CXXFLAG_WERROR]]) - AX_CHECK_COMPILE_FLAG([-Wformat-security],[CXXFLAGS="$CXXFLAGS -Wformat-security"],,[[$CXXFLAG_WERROR]]) - - ## Some compilers (gcc) ignore unknown -Wno-* options, but warn about all - ## unknown options if any other warning is produced. Test the -Wfoo case, and - ## set the -Wno-foo case if it works. - AX_CHECK_COMPILE_FLAG([-Wunused-parameter],[CXXFLAGS="$CXXFLAGS -Wno-unused-parameter"],,[[$CXXFLAG_WERROR]]) - AX_CHECK_COMPILE_FLAG([-Wself-assign],[CXXFLAGS="$CXXFLAGS -Wno-self-assign"],,[[$CXXFLAG_WERROR]]) - AX_CHECK_COMPILE_FLAG([-Wunused-local-typedef],[CXXFLAGS="$CXXFLAGS -Wno-unused-local-typedef"],,[[$CXXFLAG_WERROR]]) - AX_CHECK_COMPILE_FLAG([-Wdeprecated-register],[CXXFLAGS="$CXXFLAGS -Wno-deprecated-register"],,[[$CXXFLAG_WERROR]]) - AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough],[CXXFLAGS="$CXXFLAGS -Wno-implicit-fallthrough"],,[[$CXXFLAG_WERROR]]) +if test "$CXXFLAGS_overridden" = "no"; then + AX_CHECK_COMPILE_FLAG([-Wall], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wall"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wextra], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wextra"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wgnu], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wgnu"], [], [$CXXFLAG_WERROR]) + dnl some compilers will ignore -Wformat-security without -Wformat, so just combine the two here. + AX_CHECK_COMPILE_FLAG([-Wformat -Wformat-security], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wformat -Wformat-security"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wvla], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wvla"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wshadow-field], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wshadow-field"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wthread-safety], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wthread-safety"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wloop-analysis], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wloop-analysis"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wredundant-decls], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wredundant-decls"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wunused-member-function], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wunused-member-function"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wdate-time], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wdate-time"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wconditional-uninitialized], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wconditional-uninitialized"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wduplicated-branches], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wduplicated-branches"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wduplicated-cond], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wduplicated-cond"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wlogical-op], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wlogical-op"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Woverloaded-virtual], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Woverloded-virtual"], [], [$CXXFLAG_WERROR]) + dnl -Wsuggest-override is broken with GCC before 9.2 + dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78010 + AX_CHECK_COMPILE_FLAG([-Wsuggest-override], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wsuggest-override"], [], [$CXXFLAG_WERROR], + [AC_LANG_SOURCE([[struct A { virtual void f(); }; struct B : A { void f() final; };]])]) + AX_CHECK_COMPILE_FLAG([-Wunreachable-code-loop-increment], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wunreachable-code-loop-increment"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wimplicit-fallthrough], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wimplicit-fallthrough"], [], [$CXXFLAG_WERROR]) + + if test "$suppress_external_warnings" != "no" ; then + AX_CHECK_COMPILE_FLAG([-Wdocumentation], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wdocumentation"], [], [$CXXFLAG_WERROR]) + fi + + dnl Some compilers (gcc) ignore unknown -Wno-* options, but warn about all + dnl unknown options if any other warning is produced. Test the -Wfoo case, and + dnl set the -Wno-foo case if it works. + AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-unused-parameter"], [], [$CXXFLAG_WERROR]) + AX_CHECK_COMPILE_FLAG([-Wself-assign], [NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-self-assign"], [], [$CXXFLAG_WERROR]) + if test "$supress_external_warnings" != "yes" ; then + AX_CHECK_COMPILE_FLAG([-Wdeprecated-copy], [NOWARN_CXXFLAGS="$NOWARN_CXXFLAGS -Wno-deprecated-copy"], [], [$CXXFLAG_WERROR]) + fi fi -enable_hwcrc32=no +dnl Do not allow extended (non-ASCII) symbols in identifiers. This is easier for code review. +AX_CHECK_COMPILE_FLAG([-fno-extended-identifiers], [CORE_CXXFLAGS="$CORE_CXXFLAGS -fno-extended-identifiers"], [], [$CXXFLAG_WERROR]) + +enable_arm_crc=no +enable_arm_shani=no +enable_sse42=no enable_sse41=no enable_avx2=no -enable_shani=no - -if test "x$use_asm" = "xyes"; then - -# Check for optional instruction set support. Enabling these does _not_ imply that all code will -# be compiled with them, rather that specific objects/libs may use them after checking for runtime -# compatibility. -AX_CHECK_COMPILE_FLAG([-msse4.2],[[SSE42_CXXFLAGS="-msse4.2"]],,[[$CXXFLAG_WERROR]]) -AX_CHECK_COMPILE_FLAG([-msse4.1],[[SSE41_CXXFLAGS="-msse4.1"]],,[[$CXXFLAG_WERROR]]) -AX_CHECK_COMPILE_FLAG([-mavx -mavx2],[[AVX2_CXXFLAGS="-mavx -mavx2"]],,[[$CXXFLAG_WERROR]]) -AX_CHECK_COMPILE_FLAG([-msse4 -msha],[[SHANI_CXXFLAGS="-msse4 -msha"]],,[[$CXXFLAG_WERROR]]) +enable_x86_shani=no + +if test "$use_asm" = "yes"; then + +dnl Check for optional instruction set support. Enabling these does _not_ imply that all code will +dnl be compiled with them, rather that specific objects/libs may use them after checking for runtime +dnl compatibility. + +dnl x86 +AX_CHECK_COMPILE_FLAG([-msse4.2], [SSE42_CXXFLAGS="-msse4.2"], [], [$CXXFLAG_WERROR]) +AX_CHECK_COMPILE_FLAG([-msse4.1], [SSE41_CXXFLAGS="-msse4.1"], [], [$CXXFLAG_WERROR]) +AX_CHECK_COMPILE_FLAG([-mavx -mavx2], [AVX2_CXXFLAGS="-mavx -mavx2"], [], [$CXXFLAG_WERROR]) +AX_CHECK_COMPILE_FLAG([-msse4 -msha], [X86_SHANI_CXXFLAGS="-msse4 -msha"], [], [$CXXFLAG_WERROR]) + +enable_clmul= +AX_CHECK_COMPILE_FLAG([-mpclmul], [enable_clmul=yes], [], [$CXXFLAG_WERROR], [AC_LANG_PROGRAM([ + #include + #include +], [ + __m128i a = _mm_cvtsi64_si128((uint64_t)7); + __m128i b = _mm_clmulepi64_si128(a, a, 37); + __m128i c = _mm_srli_epi64(b, 41); + __m128i d = _mm_xor_si128(b, c); + uint64_t e = _mm_cvtsi128_si64(d); + return e == 0; +])]) + +if test "$enable_clmul" = "yes"; then + CLMUL_CXXFLAGS="-mpclmul" + AC_DEFINE([HAVE_CLMUL], [1], [Define this symbol if clmul instructions can be used]) +fi TEMP_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $SSE42_CXXFLAGS" -AC_MSG_CHECKING(for assembler crc32 support) +AC_MSG_CHECKING([for SSE4.2 intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #if defined(_MSC_VER) @@ -336,14 +490,14 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ l = _mm_crc32_u64(l, 0); return l; ]])], - [ AC_MSG_RESULT(yes); enable_hwcrc32=yes], - [ AC_MSG_RESULT(no)] + [ AC_MSG_RESULT([yes]); enable_sse42=yes], + [ AC_MSG_RESULT([no])] ) CXXFLAGS="$TEMP_CXXFLAGS" TEMP_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $SSE41_CXXFLAGS" -AC_MSG_CHECKING(for SSE4.1 intrinsics) +AC_MSG_CHECKING([for SSE4.1 intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include @@ -351,14 +505,14 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ __m128i l = _mm_set1_epi32(0); return _mm_extract_epi32(l, 3); ]])], - [ AC_MSG_RESULT(yes); enable_sse41=yes; AC_DEFINE(ENABLE_SSE41, 1, [Define this symbol to build code that uses SSE4.1 intrinsics]) ], - [ AC_MSG_RESULT(no)] + [ AC_MSG_RESULT([yes]); enable_sse41=yes; AC_DEFINE([ENABLE_SSE41], [1], [Define this symbol to build code that uses SSE4.1 intrinsics]) ], + [ AC_MSG_RESULT([no])] ) CXXFLAGS="$TEMP_CXXFLAGS" TEMP_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $AVX2_CXXFLAGS" -AC_MSG_CHECKING(for AVX2 intrinsics) +AC_MSG_CHECKING([for AVX2 intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include @@ -366,14 +520,14 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ __m256i l = _mm256_set1_epi32(0); return _mm256_extract_epi32(l, 7); ]])], - [ AC_MSG_RESULT(yes); enable_avx2=yes; AC_DEFINE(ENABLE_AVX2, 1, [Define this symbol to build code that uses AVX2 intrinsics]) ], - [ AC_MSG_RESULT(no)] + [ AC_MSG_RESULT([yes]); enable_avx2=yes; AC_DEFINE([ENABLE_AVX2], [1], [Define this symbol to build code that uses AVX2 intrinsics]) ], + [ AC_MSG_RESULT([no])] ) CXXFLAGS="$TEMP_CXXFLAGS" TEMP_CXXFLAGS="$CXXFLAGS" -CXXFLAGS="$CXXFLAGS $SHANI_CXXFLAGS" -AC_MSG_CHECKING(for SHA-NI intrinsics) +CXXFLAGS="$CXXFLAGS $X86_SHANI_CXXFLAGS" +AC_MSG_CHECKING([for X86 SHA-NI intrinsics]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include @@ -383,21 +537,74 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ __m128i k = _mm_set1_epi32(2); return _mm_extract_epi32(_mm_sha256rnds2_epu32(i, i, k), 0); ]])], - [ AC_MSG_RESULT(yes); enable_shani=yes; AC_DEFINE(ENABLE_SHANI, 1, [Define this symbol to build code that uses SHA-NI intrinsics]) ], - [ AC_MSG_RESULT(no)] + [ AC_MSG_RESULT([yes]); enable_x86_shani=yes; AC_DEFINE([ENABLE_X86_SHANI], [1], [Define this symbol to build code that uses x86 SHA-NI intrinsics]) ], + [ AC_MSG_RESULT([no])] +) +CXXFLAGS="$TEMP_CXXFLAGS" + +# ARM +AX_CHECK_COMPILE_FLAG([-march=armv8-a+crc+crypto], [ARM_CRC_CXXFLAGS="-march=armv8-a+crc+crypto"], [], [$CXXFLAG_WERROR]) +AX_CHECK_COMPILE_FLAG([-march=armv8-a+crc+crypto], [ARM_SHANI_CXXFLAGS="-march=armv8-a+crc+crypto"], [], [$CXXFLAG_WERROR]) + +TEMP_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $ARM_CRC_CXXFLAGS" +AC_MSG_CHECKING([for ARMv8 CRC32 intrinsics]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include + ]],[[ +#ifdef __aarch64__ + __crc32cb(0, 0); __crc32ch(0, 0); __crc32cw(0, 0); __crc32cd(0, 0); + vmull_p64(0, 0); +#else +#error "crc32 library does not support hardware acceleration on 32-bit ARM" +#endif + ]])], + [ AC_MSG_RESULT([yes]); enable_arm_crc=yes; ], + [ AC_MSG_RESULT([no])] +) +CXXFLAGS="$TEMP_CXXFLAGS" + +TEMP_CXXFLAGS="$CXXFLAGS" +CXXFLAGS="$CXXFLAGS $ARM_SHANI_CXXFLAGS" +AC_MSG_CHECKING([for ARMv8 SHA-NI intrinsics]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include + ]],[[ + uint32x4_t a, b, c; + vsha256h2q_u32(a, b, c); + vsha256hq_u32(a, b, c); + vsha256su0q_u32(a, b); + vsha256su1q_u32(a, b, c); + ]])], + [ AC_MSG_RESULT([yes]); enable_arm_shani=yes; AC_DEFINE([ENABLE_ARM_SHANI], [1], [Define this symbol to build code that uses ARMv8 SHA-NI intrinsics]) ], + [ AC_MSG_RESULT([no])] ) CXXFLAGS="$TEMP_CXXFLAGS" fi -CPPFLAGS="$CPPFLAGS -DHAVE_BUILD_INFO -D__STDC_FORMAT_MACROS" +CORE_CPPFLAGS="$CORE_CPPFLAGS -DHAVE_BUILD_INFO" AC_ARG_WITH([utils], [AS_HELP_STRING([--with-utils], - [build raptoreum-cli raptoreum-tx (default=yes)])], + [build raptoreum-cli raptoreum-wallet (default=yes)])], [build_bitcoin_utils=$withval], [build_bitcoin_utils=yes]) +AC_ARG_ENABLE([util-cli], + [AS_HELP_STRING([--enable-util-cli], + [build raptoreum-cli])], + [build_bitcoin_cli=$enableval], + [build_bitcoin_cli=$build_bitcoin_utils]) + +AC_ARG_ENABLE([util-wallet], + [AS_HELP_STRING([--enable-util-wallet], + [build raptoreum-wallet])], + [build_bitcoin_wallet=$enableval], + [build_bitcoin_wallet=$build_bitcoin_utils]) + AC_ARG_WITH([libs], [AS_HELP_STRING([--with-libs], [build libraries (default=yes)])], @@ -410,190 +617,202 @@ AC_ARG_WITH([daemon], [build_bitcoind=$withval], [build_bitcoind=yes]) -use_pkgconfig=yes case $host in *mingw*) + TARGET_OS=windows + AC_CHECK_LIB([mingwthrd], [main], [], [AC_MSG_ERROR([libmingwthrd missing])]) + AC_CHECK_LIB([kernel32], [main], [], [AC_MSG_ERROR([libkernel32 missing])]) + AC_CHECK_LIB([user32], [main], [], [AC_MSG_ERROR([libuser32 missing])]) + AC_CHECK_LIB([gdi32], [main], [], [AC_MSG_ERROR([libgdi32 missing])]) + AC_CHECK_LIB([comdlg32], [main], [], [AC_MSG_ERROR([libcomdlg32 missing])]) + AC_CHECK_LIB([winspool], [main], [], [AC_MSG_ERROR([libwinspool missing])]) + AC_CHECK_LIB([winmm], [main], [], [AC_MSG_ERROR([libwinmm missing])]) + AC_CHECK_LIB([shell32], [main], [], [AC_MSG_ERROR([libshell32 missing])]) + AC_CHECK_LIB([comctl32], [main], [], [AC_MSG_ERROR([libcomctl32 missing])]) + AC_CHECK_LIB([ole32], [main], [], [AC_MSG_ERROR([libole32 missing])]) + AC_CHECK_LIB([oleaut32], [main], [], [AC_MSG_ERROR([liboleaut32 missing])]) + AC_CHECK_LIB([uuid], [main], [], [AC_MSG_ERROR([libuuid missing])]) + AC_CHECK_LIB([rpcrt4], [main], [], [AC_MSG_ERROR([librpcrt4 missing])]) + AC_CHECK_LIB([advapi32], [main], [], [AC_MSG_ERROR([libadvapi32 missing])]) + AC_CHECK_LIB([ws2_32], [main], [], [AC_MSG_ERROR([libws2_32 missing])]) + AC_CHECK_LIB([mswsock], [main], [], [AC_MSG_ERROR([libmswsock missing])]) + 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])]) + + dnl -static is interpreted by libtool, where it has a different meaning. + dnl 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 "$MAKENSIS" = "none"; then + AC_MSG_WARN([makensis not found. Cannot create installer.]) + fi - #pkgconfig does more harm than good with MinGW - use_pkgconfig=no - - TARGET_OS=windows - AC_CHECK_LIB([mingwthrd], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([kernel32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([user32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([gdi32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([comdlg32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([winspool], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([winmm], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([shell32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([comctl32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([ole32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([oleaut32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([uuid], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([rpcrt4], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([advapi32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([ws2_32], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([mswsock], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([shlwapi], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([iphlpapi], [main],, AC_MSG_ERROR(lib missing)) - AC_CHECK_LIB([crypt32], [main],, AC_MSG_ERROR(lib 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") - fi - - CPPFLAGS="$CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB" - LEVELDB_TARGET_FLAGS="-DOS_WINDOWS" - if test "x$CXXFLAGS_overridden" = "xno"; then - CXXFLAGS="$CXXFLAGS -w" - fi - case $host in - i?86-*) WINDOWS_BITS=32 ;; - x86_64-*) WINDOWS_BITS=64 ;; - *) AC_MSG_ERROR("Could not determine win32/win64 for installer") ;; - esac - AC_SUBST(WINDOWS_BITS) - - dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against. - dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override - dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are - dnl also overridden to prevent their insertion later. - dnl This should only affect dll's. - archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib" - postdeps_CXX= - - ;; + AC_PATH_TOOL([WINDRES], [windres], [none]) + if test "$WINDRES" = "none"; then + AC_MSG_ERROR([windres not found]) + fi + + CORE_CPPFLAGS="$CORE_CPPFLAGS -D_MT -DWIN32 -D_WINDOWS -DBOOST_THREAD_USE_LIB -D_WIN32_WINNT=0x0601 -D_WIN32_IE=0x0501 -DWIN32_LEAN_AND_MEAN" + + dnl libtool insists upon adding -nostdlib and a list of objects/libs to link against. + dnl That breaks our ability to build dll's with static libgcc/libstdc++/libssp. Override + dnl its command here, with the predeps/postdeps removed, and -static inserted. Postdeps are + dnl also overridden to prevent their insertion later. + dnl This should only affect dll's. + archive_cmds_CXX="\$CC -shared \$libobjs \$deplibs \$compiler_flags -static -o \$output_objdir/\$soname \${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker \$lib" + postdeps_CXX= + + dnl We require Windows 7 (NT 6.1) or later + AX_CHECK_LINK_FLAG([-Wl,--major-subsystem-version -Wl,6 -Wl,--minor-subsystem-version -Wl,1], [CORE_LDFLAGS="$CORE_LDFLAGS -Wl,--major-subsystem-version -Wl,6 -Wl,--minor-subsystem-version -Wl,1"], [], [$LDFLAG_WERROR]) + ;; *darwin*) - TARGET_OS=darwin - LEVELDB_TARGET_FLAGS="-DOS_MACOSX" - if test x$cross_compiling != xyes; then - BUILD_OS=darwin - AC_CHECK_PROG([PORT],port, port) - if test x$PORT = xport; then - dnl add default macports paths - CPPFLAGS="$CPPFLAGS -isystem /opt/local/include" - LIBS="$LIBS -L/opt/local/lib" - if test -d /opt/local/include/db48; then - CPPFLAGS="$CPPFLAGS -I/opt/local/include/db48" - LIBS="$LIBS -L/opt/local/lib/db48" - fi - fi - - AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert) - AC_CHECK_PROG([BREW],brew, brew) - if test x$BREW = xbrew; then - dnl These Homebrew packages may be keg-only, meaning that they won't be found - dnl in expected paths because they may conflict with system files. Ask - dnl Homebrew where each one is located, then adjust paths accordingly. - dnl It's safe to add these paths even if the functionality is disabled by - dnl the user (--without-wallet or --without-gui for example). - - openssl_prefix=`$BREW --prefix openssl 2>/dev/null` - bdb_prefix=`$BREW --prefix berkeley-db4 2>/dev/null` - qt5_prefix=`$BREW --prefix qt5 2>/dev/null` - if test x$openssl_prefix != x; then - PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH" - export PKG_CONFIG_PATH - fi - if test x$bdb_prefix != x; then - CPPFLAGS="$CPPFLAGS -I$bdb_prefix/include" - LIBS="$LIBS -L$bdb_prefix/lib" - fi - if test x$qt5_prefix != x; then - PKG_CONFIG_PATH="$qt5_prefix/lib/pkgconfig:$PKG_CONFIG_PATH" - export PKG_CONFIG_PATH - fi - fi - else - case $build_os in - *darwin*) - BUILD_OS=darwin - ;; - *) - AC_PATH_TOOL([INSTALLNAMETOOL], [install_name_tool], install_name_tool) - AC_PATH_TOOL([OTOOL], [otool], otool) - AC_PATH_PROGS([GENISOIMAGE], [genisoimage mkisofs],genisoimage) - AC_PATH_PROGS([RSVG_CONVERT], [rsvg-convert rsvg],rsvg-convert) - AC_PATH_PROGS([IMAGEMAGICK_CONVERT], [convert],convert) - AC_PATH_PROGS([TIFFCP], [tiffcp],tiffcp) - - dnl libtool will try to strip the static lib, which is a problem for - dnl cross-builds because strip attempts to call a hard-coded ld, - dnl which may not exist in the path. Stripping the .a is not - dnl necessary, so just disable it. - old_striplib= - ;; - esac - fi - - AX_CHECK_LINK_FLAG([[-Wl,-headerpad_max_install_names]], [LDFLAGS="$LDFLAGS -Wl,-headerpad_max_install_names"]) - CPPFLAGS="$CPPFLAGS -DMAC_OSX -DOBJC_OLD_DISPATCH_PROTOTYPES=1" - OBJCXXFLAGS="$CXXFLAGS" - ;; - *linux*) - TARGET_OS=linux - LEVELDB_TARGET_FLAGS="-DOS_LINUX" - ;; - *freebsd*) - LEVELDB_TARGET_FLAGS="-DOS_FREEBSD" - ;; - *openbsd*) - LEVELDB_TARGET_FLAGS="-DOS_OPENBSD" - ;; - *) - OTHER_OS=`echo ${host_os} | awk '{print toupper($0)}'` - AC_MSG_WARN([Guessing LevelDB OS as OS_${OTHER_OS}, please check whether this is correct, if not add an entry to configure.ac.]) - LEVELDB_TARGET_FLAGS="-DOS_${OTHER_OS}" - ;; -esac + TARGET_OS=darwin + if test $cross_compiling != "yes"; then + BUILD_OS=darwin + AC_CHECK_PROG([BREW], [brew], [brew]) + if test "$BREW" = "brew"; then + dnl These Homebrew packages may be keg-only, meaning that they won't be found + dnl in expected paths because they may conflict with system files. Ask + dnl Homebrew where each one is located, then adjust paths accordingly. + dnl It's safe to add these paths even if the functionality is disabled by + dnl the user (--without-wallet or --without-gui for example). + + if test "$use_bdb" != "no" && $BREW list --versions berkeley-db@4 >/dev/null && test "$BDB_CFLAGS" = "" && test "$BDB_LIBS" = ""; then + bdb_prefix=$($BREW --prefix berkeley-db@4 2>/dev/null) + dnl This must precede the call to BITCOIN_FIND_BDB48 below. + BDB_CFLAGS="-I$bdb_prefix/include" + BDB_LIBS="-L$bdb_prefix/lib -ldb_cxx-4.8" + fi -if test x$use_pkgconfig = xyes; then - m4_ifndef([PKG_PROG_PKG_CONFIG], [AC_MSG_ERROR(PKG_PROG_PKG_CONFIG macro not found. Please install pkg-config and re-run autogen.sh.)]) - m4_ifdef([PKG_PROG_PKG_CONFIG], [ - PKG_PROG_PKG_CONFIG - if test x"$PKG_CONFIG" = "x"; then - AC_MSG_ERROR(pkg-config not found.) - fi - ]) -fi + if $BREW list --versions qt@5 >/dev/null; then + export PKG_CONFIG_PATH="$($BREW --prefix qt@5 2>/dev/null)/lib/pkgconfig:$PKG_CONFIG_PATH" + fi + + case $host in + *aarch64*) + dnl The preffered Homebrew prefix for Apple Silicon is /opt/homebrew. + dnl Therefore, as we do not use pkg-config to detect miniupnpc and lipnatpmp + dnl packages, we should set the CPPFLAGS and LDFLAGS variables for them + dnl explicitly + if test "$use_upnp" != "no" && $BREW list --versions miniupnpc >/dev/null; then + miniupnpc_prefix=$($BREW --prefix miniupnpc 2>/dev/null) + if test "$suppress_external_warnings" != "no"; then + CORE_CPPFLAGS="$CORE_CPPFLAGS -isystem $miniupnpc_prefix/include" + else + CORE_CPPFLAGS="$CORE_CPPFLAGS -I$miniupnpc_prefix/include" + fi + CORE_LDFLAGS="$CORE_LDFLAGS -L$miniupnpc_prefix/lib" + fi + if test "$use_natpmp" != "no" && $BREW list --version libnatpmp >/dev/null; then + libnatpmp_prefix=$($BREW --prefix libnatpmp 2>/dev/null) + if test "$suppress_external_warnings" != "no"; then + CORE_CPPFLAGS="$CORE_CPPFLAGS -isystem $libnatpmp_prefix/include" + else + CORE_CPPFLAGS="$CORE_CPPFLAGS -I$libnatpmp_prefix/include" + fi + CORE_LDFLAGS="$CORE_LDFLAGS -L$libnatpmp_prefix/lib" + fi + ;; + esac + fi + else + case $build_os in + *darwin*) + BUILD_OS=darwin + ;; + *) + AC_PATH_TOOL([DSYMUTIL], [dsymutil], [dsymutil]) + AC_PATH_TOOL([INSTALL_NAME_TOOL], [install_name_tool], [install_name_tool]) + AC_PATH_TOOL([OTOOL], [otool], [otool]) + AC_PATH_PROGS([XORRISOFS], [xorrisofs], [xorrisofs]) + + dnl libtool will try to strip the static lib, which is a problem for + dnl cross-builds because strip attempts to call a hard-coded ld, + dnl which may not exist in the path. Stripping the .a is not + dnl necessary, so just disable it. + old_striplib= + ;; + esac + fi -if test x$use_extended_functional_tests != xno; then + AX_CHECK_LINK_FLAG([-Wl,-headerpad_max_install_names], [CORE_LDFLAGS="$CORE_LDFLAGS -Wl,-headerpad_max_install_names"], [], [$LDFLAG_WERROR]) + CORE_CPPFLAGS="$CORE_CPPFLAGS -DMAC_OSX -DOBJC_OLD_DISPATCH_PROTOTYPES=0" + OBJCXXFLAGS="$CXXFLAGS" + ;; + *android*) + TARGET_OS=android + dnl make sure android stays above linux for hosts like *linux-android* + case $host in + *x86_64*) + ANDROID_ARCH=x86_64 + ;; + *aarch64*) + ANDROID_ARCH=arm64-v8a + ;; + *armv7a*) + ANDROID_ARCH=armeabi-v7a + ;; + *) AC_MSG_ERROR("Could not determine Android arch or it is unsupported") ;; + esac + ;; + *linux*) + TARGET_OS=linux + ;; +esac + +if test "$use_extended_functional_tests" != "no"; then AC_SUBST(EXTENDED_FUNCTIONAL_TESTS, --extended) fi -if test x$use_lcov = xyes; then - if test x$LCOV = x; then - AC_MSG_ERROR("lcov testing requested but lcov not found") +if test "$use_lcov" = "yes"; then + if test "$LCOV" = ""; then + AC_MSG_ERROR([lcov testing requested but lcov not found]) fi - if test x$GCOV = x; then - AC_MSG_ERROR("lcov testing requested but gcov not found") + if test "$PYTHON" = ""; then + AC_MSG_ERROR([lcov testing requested but python not found]) fi - if test x$PYTHON = x; then - AC_MSG_ERROR("lcov testing requested but python not found") + if test "$GENHTML" = ""; then + AC_MSG_ERROR([lcov testing requested but genhtml not found]) fi - if test x$GENHTML = x; then - AC_MSG_ERROR("lcov testing requested but genhtml not found") + + AC_MSG_CHECKING([whether compiler is Clang]) + AC_PREPROC_IFELSE([AC_LANG_SOURCE([[ + #if defined(__clang__) && defined(__llvm__) + // Compiler is Clang + #else + # error Compiler is not Clang + #endif + ]])],[ + AC_MSG_RESULT([yes]) + if test "$LLVM_COV" = ""; then + AC_MSG_ERROR([lcov testing requested but llvm-cov not found]) + fi + COV_TOOL="$LLVM_COV gcov" + ],[ + AC_MSG_RESULT([no]) + if test "$GCOV" = "x"; then + AC_MSG_ERROR([lcov testing requested but gcov not found]) + fi + COV_TOOL="$GCOV" + ]) + AC_SUBST(COV_TOOL) + AC_SUBST(COV_TOOL_WRAPPER, "cov_tool_wrapper.sh") + LCOV="$LCOV --gcov-tool $(pwd)/$COV_TOOL_WRAPPER" + + AX_CHECK_LINK_FLAG([--coverage], [CORE_LDFLAGS="$CORE_LDFLAGS --coverage"], [AC_MSG_ERROR([lcov testing requested but --coverage linker flag does not work])]) + AX_CHECK_COMPILE_FLAG([--coverage],[CORE_CXXFLAGS="$CORE_CXXFLAGS --coverage"], [AC_MSG_ERROR([lcov testing requested but --coverage flag does not work])]) + dnl If coverage is enabled and the user hasn't overriden CXXFLAGS, + dnl clear them to prevent autoconfs "-g -O2" being added. + dnl Otherwise we'd end up with "--coverage -Og -O0 -g -O2". + if test "$CXXFLAGS_overridden" = "no"; then + CXXFLAGS="" fi - LCOV="$LCOV --gcov-tool=$GCOV" - AX_CHECK_LINK_FLAG([[--coverage]], [LDFLAGS="$LDFLAGS --coverage"], - [AC_MSG_ERROR("lcov testing requested but --coverage linker flag does not work")]) - AX_CHECK_COMPILE_FLAG([--coverage],[CXXFLAGS="$CXXFLAGS --coverage"], - [AC_MSG_ERROR("lcov testing requested but --coverage flag does not work")]) - AC_DEFINE(USE_COVERAGE, 1, [Define this symbol if coverage is enabled]) - CXXFLAGS="$CXXFLAGS -Og" + CORE_CXXFLAGS="CORE_CXXFLAGS -Og -O0" fi -if test x$use_lcov_branch != xno; then +if test "$use_lcov_branch" != "no"; then AC_SUBST(LCOV_OPTS, "$LCOV_OPTS --rc lcov_branch_coverage=1") fi @@ -603,100 +822,125 @@ AC_C_BIGENDIAN dnl Check for pthread compile/link requirements AX_PTHREAD -# The following macro will add the necessary defines to raptoreum-config.h, but -# they also need to be passed down to any subprojects. Pull the results out of -# the cache and add them to CPPFLAGS. +dnl The following macro will add the necessary defines to raptoreum-config.h, but +dnl they also need to be passed down to any subprojects. Pull the results out of +dnl the cache and add them to CPPFLAGS. AC_SYS_LARGEFILE -# detect POSIX or GNU variant of strerror_r +dnl detect POSIX or GNU variant of strerror_r AC_FUNC_STRERROR_R -if test x$ac_cv_sys_file_offset_bits != x && - test x$ac_cv_sys_file_offset_bits != xno && - test x$ac_cv_sys_file_offset_bits != xunknown; then - CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits" +if test "$ac_cv_sys_file_offset_bits" != "" && + test "$ac_cv_sys_file_offset_bits" != "no" && + test "$ac_cv_sys_file_offset_bits" != "unknown"; then + CORE_CPPFLAGS="$CORE_CPPFLAGS -D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits" fi -if test x$ac_cv_sys_large_files != x && - test x$ac_cv_sys_large_files != xno && - test x$ac_cv_sys_large_files != xunknown; then - CPPFLAGS="$CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files" +if test "$ac_cv_sys_large_files" != "" && + test "$ac_cv_sys_large_files" != "no" && + test "$ac_cv_sys_large_files" != "unknown"; then + CORE_CPPFLAGS="$CORE_CPPFLAGS -D_LARGE_FILES=$ac_cv_sys_large_files" fi -AX_CHECK_LINK_FLAG([[-Wl,--large-address-aware]], [LDFLAGS="$LDFLAGS -Wl,--large-address-aware"]) - -AX_GCC_FUNC_ATTRIBUTE([visibility]) -AX_GCC_FUNC_ATTRIBUTE([dllexport]) -AX_GCC_FUNC_ATTRIBUTE([dllimport]) - -if test x$use_glibc_compat != xno; then - - #glibc absorbed clock_gettime in 2.17. librt (its previous location) is safe to link - #in anyway for back-compat. - AC_CHECK_LIB([rt],[clock_gettime],, AC_MSG_ERROR(lib missing)) - - #__fdelt_chk's params and return type have changed from long unsigned int to long int. - # See which one is present here. - AC_MSG_CHECKING(__fdelt_chk type) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#ifdef _FORTIFY_SOURCE - #undef _FORTIFY_SOURCE - #endif - #define _FORTIFY_SOURCE 2 - #include - extern "C" long unsigned int __fdelt_warn(long unsigned int);]],[[]])], - [ fdelt_type="long unsigned int"], - [ fdelt_type="long int"]) - AC_MSG_RESULT($fdelt_type) - AC_DEFINE_UNQUOTED(FDELT_TYPE, $fdelt_type,[parameter and return value type for __fdelt_chk]) -else - AC_SEARCH_LIBS([clock_gettime],[rt]) +AC_SEARCH_LIBS([clock_gettime],[rt]) + +if test "$enable_gprof" = "yes"; then + dnl -pg is incompatible with -pie. Since hardening and profiling together doesn't make sense, + dnl we simply make them mutually exclusive here. Additionally, hardened toolchains may force + dnl -pie by default, in which case it needs to be turned off with -no-pie. + + if test "$use_hardening" = "yes"; then + AC_MSG_ERROR([gprof profiling is not compatible with hardening. Reconfigure with --disable-hardening or --disable-gprof]) + fi + use_hardening=no + AX_CHECK_COMPILE_FLAG([-pg],[GPROF_CXXFLAGS="-pg"], + [AC_MSG_ERROR([gprof profiling requested but not available])], [$CXXFLAG_WERROR]) + + AX_CHECK_LINK_FLAG([-no-pie], [GPROF_LDFLAGS="-no-pie"]) + AX_CHECK_LINK_FLAG([-pg], [GPROF_LDFLAGS="$GPROF_LDFLAGS -pg"], + [AC_MSG_ERROR([gprof profiling requested but not available])], [$GPROF_LDFLAGS]) fi -if test x$TARGET_OS != xwindows; then - # All windows code is PIC, forcing it on just adds useless compile warnings - AX_CHECK_COMPILE_FLAG([-fPIC],[PIC_FLAGS="-fPIC"]) +if test "$TARGET_OS" != "windows"; then + dnl All windows code is PIC, forcing it on just adds useless compile warnings + AX_CHECK_COMPILE_FLAG([-fPIC], [PIC_FLAGS="-fPIC"]) fi -if test x$use_hardening != xno; then - AX_CHECK_COMPILE_FLAG([-Wstack-protector],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"]) - AX_CHECK_COMPILE_FLAG([-fstack-protector-all],[HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"]) +dnl All versions of gcc that we commonly use for building are subject to bug +dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90384. To work around that, +dnl set -fstack-reuse=none for all gcc builds. (Only gcc understands this flag) +AX_CHECK_COMPILE_FLAG([-fstack-reuse=none], [HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-reuse=none"]) +if test "$use_hardening" != "no"; then + use_hardening=yes + AX_CHECK_COMPILE_FLAG([-Wstack-protector], [HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -Wstack-protector"]) + AX_CHECK_COMPILE_FLAG([-fstack-protector-all], [HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-protector-all"]) - AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[ - AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[ - HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE" - ]) - HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2" - ]) + dnl -fcf-protection used with Clang 7 causes ld to emit warnings: + dnl ld: error: ... + dnl use CHECK_LINK_FLAG & --fatal-warnings to ensure we won't use the flag in this case. + AX_CHECK_LINK_FLAG([-fcf-protection=full], [HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fcf-protection=full"], [], [$LDFLAGS_WERROR]) - AX_CHECK_LINK_FLAG([[-Wl,--dynamicbase]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"]) - AX_CHECK_LINK_FLAG([[-Wl,--nxcompat]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"]) - AX_CHECK_LINK_FLAG([[-Wl,--high-entropy-va]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"]) - AX_CHECK_LINK_FLAG([[-Wl,-z,relro]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"]) - AX_CHECK_LINK_FLAG([[-Wl,-z,now]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"]) + case $host in + *mingw*) + dnl stack-clash-protector doesn't currently work, and likely should just be skipped for Windows. + dnl See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90458 for more details. + ;; + *) + AX_CHECK_COMPILE_FLAG([-fstack-clash-protection], [HARDENED_CXXFLAGS="$HARDENED_CXXFLAGS -fstack-clash-protection"], [], [$CXXFLAG_WERROR]) + ;; + esac - if test x$TARGET_OS != xwindows; then - AX_CHECK_COMPILE_FLAG([-fPIE],[PIE_FLAGS="-fPIE"]) - AX_CHECK_LINK_FLAG([[-pie]], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"]) + dnl When enable_debug is yes, all optimizations are disabled. + dnl However, FORTIFY_SOURCE requires that there is some level of ioptimization, + dnl otherwise it does nothing and just creates a compiler warning. + dnl Since FORTIFY_SOURCE is a no-op without optimization, + dnl do not enable it when enable_debug is yes. + if test "$enable_debug" != "yes"; then + AX_CHECK_PREPROC_FLAG([-D_FORTIFY_SOURCE=2],[ + AX_CHECK_PREPROC_FLAG([-U_FORTIFY_SOURCE],[ + HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -U_FORTIFY_SOURCE" + ]) + HARDENED_CPPFLAGS="$HARDENED_CPPFLAGS -D_FORTIFY_SOURCE=2" + ]) fi + AX_CHECK_LINK_FLAG([-Wl,--enable-reloc-section], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--enable-reloc-section"], [], [$LDFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-Wl,--dynamicbase], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--dynamicbase"], [], [$LDFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-Wl,--nxcompat], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--nxcompat"], [], [$LDFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-Wl,--high-entropy-va], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,--high-entropy-va"], [], [$LDFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-Wl,-z,relro], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,relro"], [], [$LDFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-Wl,-z,now], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,now"], [], [$LDFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-Wl,-z,separate-code], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-z,separate-code"], [], [$LDFLAG_WERROR]) + + AX_CHECK_LINK_FLAG([-fPIE -pie], [PIE_FLAGS="-fPIE"; HARDENED_LDFLAGS="$HARDENED_LDFLAGS -pie"], [], [$CXXFLAG_WERROR]) + case $host in *mingw*) - AC_CHECK_LIB([ssp], [main],, AC_MSG_ERROR(lib missing)) + AC_CHECK_LIB([ssp], [main], [], [AC_MSG_ERROR([libssp missing])]) ;; esac fi -dnl this flag screws up non-darwin gcc even when the check fails. special-case it. -if test x$TARGET_OS = xdarwin; then - AX_CHECK_LINK_FLAG([[-Wl,-dead_strip]], [LDFLAGS="$LDFLAGS -Wl,-dead_strip"]) +dnl These flags are specific do ld64, and may cause issues with other linkers. +dnl For example: GNU ld will interpret -dead_strip as a -de and then try and use +dnl "ad_strip" as the symbol for the entry point. +if test "$TARGET_OS" = "darwin"; then + AX_CHECK_LINK_FLAG([-Wl,-dead_strip], [CORE_LDFLAGS="$CORE_LDFLAGS -Wl,-dead_strip"], [], [$LDFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-Wl,-dead_strip_dylibs], [CORE_LDFLAGS="$CORE_LDFLAGS -Wl,-dead_strip_dylibs"], [], [$LDFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-Wl,-bind_at_load], [HARDENED_LDFLAGS="$HARDENED_LDFLAGS -Wl,-bind_at_load"], [], [$LDFLAG_WERROR]) fi -AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h execinfo.h]) +AC_CHECK_HEADERS([endian.h sys/endian.h byteswap.h stdio.h stdlib.h unistd.h strings.h sys/types.h sys/stat.h sys/select.h sys/prctl.h sys/sysctl.h vm/vm_param.h sys/vmmeter.h sys/resources.h]) -AC_CHECK_DECLS([strnlen]) +AC_CHECK_DECLS([getifaddrs, freeifaddrs], [CHECK_SOCKET],, + [#include + #include ] +) -# Check for daemon(3), unrelated to --with-daemon (although used by it) +dnl Check for daemon(3), unrelated to --with-daemon (although used by it) AC_CHECK_DECLS([daemon]) +AC_CHECK_DECLS([pipe2]) + AC_CHECK_DECLS([le16toh, le32toh, le64toh, htole16, htole32, htole64, be16toh, be32toh, be64toh, htobe16, htobe32, htobe64],,, [#if HAVE_ENDIAN_H #include @@ -709,459 +953,559 @@ AC_CHECK_DECLS([bswap_16, bswap_32, bswap_64],,, #include #endif]) -AC_CHECK_DECLS([__builtin_clz, __builtin_clzl, __builtin_clzll]) +AC_MSG_CHECKING([for __builtin_clzl]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[ + (void) __builtin_clzl(0); + ]])], + [ AC_MSG_RESULT([yes]); have_clzl=yes; AC_DEFINE([HAVE_BUILTIN_CLZL], [1], [Define this symbol if you have __builtin_clzl])], + [ AC_MSG_RESULT([no]); have_clzl=no;] +) -dnl Check for MSG_NOSIGNAL -AC_MSG_CHECKING(for MSG_NOSIGNAL) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[ int f = MSG_NOSIGNAL; ]])], - [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_NOSIGNAL, 1,[Define this symbol if you have MSG_NOSIGNAL]) ], - [ AC_MSG_RESULT(no)] +AC_MSG_CHECKING([for __builtin_clzll]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[ + (void) __builtin_clzll(0); + ]])], + [ AC_MSG_RESULT([yes]); have_clzll=yes; AC_DEFINE([HAVE_BUILTIN_CLZLL], [1], [Define this symbol if you have __builtin_clzll])], + [ AC_MSG_RESULT([no]); have_clzll=no;] ) -dnl Check for MSG_DONTWAIT -AC_MSG_CHECKING(for MSG_DONTWAIT) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[ int f = MSG_DONTWAIT; ]])], - [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MSG_DONTWAIT, 1,[Define this symbol if you have MSG_DONTWAIT]) ], - [ AC_MSG_RESULT(no)] +dnl Check for malloc_info (for memory statistics information in getmemoryinfo) +AC_MSG_CHECKING([for getmemoryinfo]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[ int f = malloc_info(0, NULL); ]])], + [ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_MALLOC_INFO], [1], [Define this symbol if you have malloc_info]) ], + [ AC_MSG_RESULT([no])] ) dnl Check for mallopt(M_ARENA_MAX) (to set glibc arenas) -AC_MSG_CHECKING(for mallopt M_ARENA_MAX) +AC_MSG_CHECKING([for mallopt M_ARENA_MAX]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[ mallopt(M_ARENA_MAX, 1); ]])], - [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOPT_ARENA_MAX, 1,[Define this symbol if you have mallopt with M_ARENA_MAX]) ], - [ AC_MSG_RESULT(no)] + [[ mallopt(M_ARENA_MAX, 1); ]])], + [ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_MALLOPT_ARENA_MAX], [1], [Define this symbol if you have mallopt with M_ARENA_MAX]) ], + [ AC_MSG_RESULT([no])] ) -dnl Check for malloc_info (for memory statistics information in getmemoryinfo) -AC_MSG_CHECKING(for getmemoryinfo) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[ int f = malloc_info(0, NULL); ]])], - [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_MALLOC_INFO, 1,[Define this symbol if you have malloc_info]) ], - [ AC_MSG_RESULT(no)] +dnl Check for posix_fallocate +AC_MSG_CHECKING([for posix_fallocate]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + // same as in src/util.cpp + #ifdef __linux__ + #ifdef _POSIX_C_SOURCE + #undef _POSIX_C_SOURCE + #endif + #define _POSIX_C_SOURCE 200112L + #endif // __linux__ + #include ]], + [[ int f = posix_fallocate(0, 0, 0); ]])], + [ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_POSIX_FALLOCATE], [1], [Define this symbol if you have posix_fallocate]) ], + [ AC_MSG_RESULT([no])] ) -AC_MSG_CHECKING([for visibility attribute]) -AC_LINK_IFELSE([AC_LANG_SOURCE([ - int foo_def( void ) __attribute__((visibility("default"))); +AC_MSG_CHECKING([for default visibility attribute]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + int foo(void) __attribute__((visibility("default"))); int main(){} ])], [ - AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE,1,[Define if the visibility attribute is supported.]) - AC_MSG_RESULT(yes) + AC_DEFINE([HAVE_DEFAULT_VISIBILITY_ATTRIBUTE], [1], [Define if the visibility attribute is supported.]) + AC_MSG_RESULT([yes]) ], [ - AC_MSG_RESULT(no) - if test x$use_reduce_exports = xyes; then + AC_MSG_RESULT([no]) + if test "$use_reduce_exports" = "yes"; then AC_MSG_ERROR([Cannot find a working visibility attribute. Use --disable-reduce-exports.]) fi ] ) -# Check for different ways of gathering OS randomness -AC_MSG_CHECKING(for Linux getrandom syscall) +AC_MSG_CHECKING([for dllexport attribute]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + __declspec(dllexport) int foo(void); + int main(){} + ])], + [ + AC_DEFINE([HAVE_DLLEXPORT_ATTRIBUTE], [1], [Define if the dllexport attribute is supported.]) + AC_MSG_RESULT([yes]) + ], + [AC_MSG_RESULT([no])] +) + +if test "$use_thread_local" = "yes" || test "$use_thread_local" = "auto"; then + TEMP_LDFLAGS="$LDFLAGS" + LDFLAGS="$TEMP_LDFLAGS $PTHREAD_CFLAGS" + AC_MSG_CHECKING([for thread_local support]) + AC_LINK_IFELSE([AC_LANG_SOURCE([ + #include + static thread_local int foo = 0; + static void run_thread() { foo++; } + int main() { + for(int i = 0; i < 10; i++) { std::thread(run_thread).detach(); } + return foo; + } + ])], + [ + case $host in + *mingw*) + dnl mingw32's implementation of thread_local has also been shown to behave + dnl erroneously under concurrent usage; see: + dnl https://gist.github.com/jamesob/fe9a872051a88b2025b1aa37bfa98605 + AC_MSG_RESULT([no]) + ;; + *freebsd*) + dnl FreeBSD's implementation of thread_local is also buggy (per + dnl 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]) + ;; + esac + ], + [ + AC_MSG_RESULT([no]) + ] + ) + LDFLAGS="$TEMP_LDFLAGS" +fi + +dnl check for gmtime_r(), fallback to gmtime_s() if that is unavailable +dnl fail if neither are available. +AC_MSG_CHECKING([for gmtime_r]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[ gmtime_r((const time_t *) nullptr, (struct tm *) nullptr); ]] ) ], + [ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_GMTIME_R], [1], [Define this symbol if gmtime_r is available]) ], + [ AC_MSG_RESULT([no]); + AC_MSG_CHECKING([for gmtime_s]); + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[ gmtime_s((struct tm *) nullptr, (const time_t *) nullptr); ]] ) ], + [ AC_MSG_RESULT([yes])], + [ AC_MSG_RESULT([no]); AC_MSG_ERROR([Both gmtime_r and gmtime_s are unavailable]) ] + ) + ] +) + +dnl Check for different ways of gathering OS randomness +AC_MSG_CHECKING([for Linux getrandom syscall]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #include #include ]], - [[ syscall(SYS_getrandom, nullptr, 32, 0); ]])], - [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYS_GETRANDOM, 1,[Define this symbol if the Linux getrandom system call is available]) ], - [ AC_MSG_RESULT(no)] -) - -AC_MSG_CHECKING(for getentropy) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], - [[ getentropy(nullptr, 32) ]])], - [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY, 1,[Define this symbol if the BSD getentropy system call is available]) ], - [ AC_MSG_RESULT(no)] + [[ syscall(SYS_getrandom, nullptr, 32, 0); ]] ) ], + [ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_SYS_GETRANDOM], [1], [Define this symbol if the Linux getrandom system call is available]) ], + [ AC_MSG_RESULT([no])] ) -AC_MSG_CHECKING(for getentropy via random.h) +AC_MSG_CHECKING([for getentropy via random.h]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #include ]], - [[ getentropy(nullptr, 32) ]])], - [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_GETENTROPY_RAND, 1,[Define this symbol if the BSD getentropy system call is available with sys/random.h]) ], - [ AC_MSG_RESULT(no)] + [[ getentropy(nullptr, 32); ]] ) ], + [ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_GETENTROPY_RAND], [1], [Define this symbol if the BSD getentropy system call is available with sys/random.h]) ], + [ AC_MSG_RESULT([no])] ) -AC_MSG_CHECKING(for sysctl KERN_ARND) +AC_MSG_CHECKING([for sysctl]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include + #include ]], + [[ #ifdef __linux__ + # error "Do not use sysctl on Linux. It is deprecated even when it works" + #endif + sysctl(nullptr, 2, nullptr, nullptr, nullptr, 0); ]] ) ], + [ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_SYSCTL], [1], [Define this symbol if the BSD sysctl() is available]) ], + [ AC_MSG_RESULT([no])] + ) + +AC_MSG_CHECKING([for sysctl KERN_ARND]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #include ]], - [[ static const int name[2] = {CTL_KERN, KERN_ARND}; - sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]])], - [ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSCTL_ARND, 1,[Define this symbol if the BSD sysctl(KERN_ARND) is available]) ], - [ AC_MSG_RESULT(no)] + [[ #ifdef __linux__ + #error "Do not use sysctl on Linux. It is deprecated even when it works" + #endif + static int name[2] = {CTL_KERN, KERN_ARND}; + sysctl(name, 2, nullptr, nullptr, nullptr, 0); ]] ) ], + [ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_SYSCTL_ARND], [1], [Define this symbol if the BSD sysctl(KERN_ARND) is available]) ], + [ AC_MSG_RESULT([no])] ) -# ensure backtrace() is found, check -lexecinfo if necessary -if test x$TARGET_OS != xwindows; then - AC_SEARCH_LIBS([backtrace], [execinfo], [], [ - AC_MSG_ERROR([Unable to find backtrace()]) - ]) -fi +AC_MSG_CHECKING([for if type char equals int8_t]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include + #include ]], + [[ static_assert(std::is_same::value, ""); ]] ) ], + [ AC_MSG_RESULT([yes]); AC_DEFINE([CHAR_EQUALS_INT8], [1], [Define this symbol if type char equals int8_t]) ], + [ AC_MSG_RESULT([no])] +) -# Check for reduced exports -if test x$use_reduce_exports = xyes; then - AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[RE_CXXFLAGS="-fvisibility=hidden"], - [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])]) +if test "$TARGET_OS" != "windows"; then + if test "$enable_stacktraces" != "no"; then + AC_SEARCH_LIBS([backtrace], [execinfo], [], [AC_MSG_ERROR([Unable to find backtrace()])]) + fi fi -LEVELDB_CPPFLAGS= -LIBLEVELDB= -LIBMEMENV= -AM_CONDITIONAL([EMBEDDED_LEVELDB],[true]) -AC_SUBST(LEVELDB_CPPFLAGS) -AC_SUBST(LIBLEVELDB) -AC_SUBST(LIBMEMENV) +AC_MSG_CHECKING([for fdatasync]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[ fdatasync(0); ]])], + [ AC_MSG_RESULT([yes]); HAVE_FDATASYNC=1 ], + [ AC_MSG_RESULT([no]); HAVE_FDATASYNC=0 ] +) +AC_DEFINE_UNQUOTED([HAVE_FDATASYNC], [$HAVE_FDATASYNC], [Define to 1 if fdatasync is available.]) -if test x$enable_wallet != xno; then - dnl Check for libdb_cxx only if wallet enabled - BITCOIN_FIND_BDB48 -fi +AC_MSG_CHECKING([for F_FULLFSYNC]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[ fcntl(0, F_FULLFSYNC, 0); ]])], + [ AC_MSG_RESULT([yes]); HAVE_FULLFSYNC=1 ], + [ AC_MSG_RESULT([no]); HAVE_FULLFSYNC=0 ] +) -dnl Check for libminiupnpc (optional) -if test x$use_upnp != xno; then - AC_CHECK_HEADERS( - [miniupnpc/miniwget.h miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h], - [AC_CHECK_LIB([miniupnpc], [main],[MINIUPNPC_LIBS=-lminiupnpc], [have_miniupnpc=no])], - [have_miniupnpc=no] - ) -fi +AC_MSG_CHECKING([for O_CLOEXEC]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[ open("", O_CLOEXEC); ]])], + [ AC_MSG_RESULT([yes]); HAVE_O_CLOEXEC=1 ], + [ AC_MSG_RESULT([no]); HAVE_O_CLOEXEC=0 ] +) +AC_DEFINE_UNQUOTED([HAVE_O_CLOEXEC], [$HAVE_O_CLOEXEC], [Define to 1 if O_CLOEXEC flag is available.]) + +dnl crc32c platform checks +AC_MSG_CHECKING([for __builtin_prefetch]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ ]], [[ + char data = 0; + const char* address = &data; + __builtin_prefetch(address, 0, 0); + ]])], + [ AC_MSG_RESULT([yes]); HAVE_BUILTIN_PREFETCH=1 ], + [ AC_MSG_RESULT([no]); HAVE_BUILTIN_PREFETCH=0 ] +) -BITCOIN_QT_INIT +AC_MSG_CHECKING([for _mm_prefetch]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[ + char data = 0; + const char* address = &data; + _mm_prefetch(address, _MM_HINT_NTA); + ]])], + [ AC_MSG_RESULT([yes]); HAVE_MM_PREFETCH=1 ], + [ AC_MSG_RESULT([no]); HAVE_MM_PREFETCH=0 ] +) -dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus -BITCOIN_QT_CONFIGURE([$use_pkgconfig], [qt5]) +AC_MSG_CHECKING([for strong getauxval support in the system headers]) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + ]], [[ + getauxval(AT_HWCAP); + ]])], + [ AC_MSG_RESULT([yes]); HAVE_STRONG_GETAUXVAL=1; AC_DEFINE([HAVE_STRONG_GETAUXVAL], [1], [Define this symbol to build code that uses getauxval]) ], + [ AC_MSG_RESULT([no]); HAVE_STRONG_GETAUXVAL=0 ] +) -if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then - use_boost=no -else - use_boost=yes -fi +have_any_system=no +AC_MSG_CHECKING([for std::system]) +AC_LINK_IFELSE( + [ AC_LANG_PROGRAM( + [[ #include ]], + [[ int nErr = std::system(""); ]] + )], + [ AC_MSG_RESULT([yes]); have_any_system=yes], + [ AC_MSG_RESULT([no]) ] +) -if test x$use_boost = xyes; then +AC_MSG_CHECKING([for ::_wsystem]) +AC_LINK_IFELSE( + [ AC_LANG_PROGRAM( + [[ ]], + [[ int nErr = ::_wsystem(""); ]] + )], + [ AC_MSG_RESULT([yes]); have_any_system=yes], + [ AC_MSG_RESULT([no]) ] +) -dnl Minimum required Boost version -define(MINIMUM_REQUIRED_BOOST, 1.47.0) +if test "$have_any_system" != "no"; then + AC_DEFINE([HAVE_SYSTEM], [1], [Define if std::system or ::wsystem is available]) +fi -dnl Check for boost libs -AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST]) -AX_BOOST_SYSTEM -AX_BOOST_FILESYSTEM -AX_BOOST_PROGRAM_OPTIONS -AX_BOOST_THREAD -AX_BOOST_CHRONO +dnl SUPPRESSED_CPPFLAGS=SUPPRESS_WARNINGS([$SOME_CPPFLAGS]) +dnl Replace -I with -isystem in $SOME_CPPFLAGS to suppress warnings from +dnl headers from its include directories and return the result. +dnl See -isystem documentation: +dnl https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html +dnl https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-isystem-directory +dnl Do not change "-I/usr/include" to "-isystem /usr/include" because that +dnl is not necessary (/usr/include is already a system directory) and because +dnl it would break GCC's #include_next. +AC_DEFUN([SUPPRESS_WARNINGS], + [$(echo $1 |${SED} -E -e 's/(^| )-I/\1-isystem /g' -e 's;-isystem /usr/include([/ ]|$);-I/usr/include\1;g')]) + +dnl enable-fuzz should disable all other targets +if test "$enable_fuzz" = "yes"; then + AC_MSG_WARN([enable-fuzz will disable all other targets and force --enable-fuzz-binary=yes]) + build_bitcoin_utils=no + build_bitcoin_cli=no + build_bitcoin_wallet=no + build_bitcoind=no + build_bitcoin_libs=no + bitcoin_enable_qt=no + bitcoin_enable_qt_test=no + bitcoin_enable_qt_dbus=no + use_bench=no + use_upnp=no + use_natpmp=no + use_zmq=no + enable_fuzz_binary=yes + + AX_CHECK_PREPROC_FLAG([-DABORT_ON_FAILED_ASSUME], [DEBUG_CPPFLAGS="$DEBUG_CPPFLAGS -DABORT_ON_FAILED_ASSUME"], [], [$CXXFLAG_WERROR]) +else + BITCOIN_QT_INIT -dnl Boost 1.56 through 1.62 allow using std::atomic instead of its own atomic -dnl counter implementations. In 1.63 and later the std::atomic approach is default. -m4_pattern_allow(DBOOST_AC_USE_STD_ATOMIC) dnl otherwise it's treated like a macro -BOOST_CPPFLAGS="-DBOOST_SP_USE_STD_ATOMIC -DBOOST_AC_USE_STD_ATOMIC $BOOST_CPPFLAGS" + dnl sets $bitcoin_enable_qt, $bitcoin_enable_qt_test, $bitcoin_enable_qt_dbus. + BITCOIN_QT_CONFIGURE([5.11.3]) -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 + dnl Keep a copy of the original $QT_INCLUDES and use it when invoking qt's moc + QT_INCLUDES_UNSUPPRESSED=$QT_INCLUDES + if test "$suppress_external_warnings" != "no" ; then + QT_INCLUDES=SUPPRESS_WARNINGS($QT_INCLUDES) + QT_DBUS_INCLUDES=SUPPRESS_WARNINGS($QT_DBUS_INCLUDES) + QT_TEST_INCLUDES=SUPPRESS_WARNINGS($QT_TEST_INCLUDES) + fi fi -if test x$use_reduce_exports = xyes; then - CXXFLAGS="$CXXFLAGS $RE_CXXFLAGS" - AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]], [RELDFLAGS="-Wl,--exclude-libs,ALL"]) +if test "$enable_fuzz_binary" = "yes"; then + AC_MSG_CHECKING([whether main function is needed for fuzz binary]) + AX_CHECK_LINK_FLAG( + [], + [AC_MSG_RESULT([no])], + [AC_MSG_RESULT([yes]); CORE_CPPFLAGS="$CORE_CPPFLAGS -DPROVIDE_FUZZ_MAIN_FUNCTION"], + [$SANITIZER_LDFLAGS], + [AC_LANG_PROGRAM([[ + #include + #include + extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { return 0; } + /* comment to remove the main function ... + ]],[[ + */ int not_main() { + ]])]) + + CHECK_RUNTIME_LIB fi -if test x$use_tests = xyes; then - - if test x$HEXDUMP = x; then - AC_MSG_ERROR(hexdump is required for tests) +if test "$enable_wallet" != "no"; then + dnl Check for libdb_cxx only if wallet enabled + if test "$use_bdb" != "no"; then + BITCOIN_FIND_BDB48 + if test "$suppress_external_warnings" != "no"; then + BDB_CPPFLAGS=SUPPRESS_WARNINGS($BDB_CPPFLAGS) + fi fi + dnl Disable wallet if --without-bdb + if test "$use_bdb" = "no"; then + if test "$enable_wallet" = "yes"; then + AC_MSG_ERROR([wallet functionality requested but no BDB support available.]) + fi + enable_wallet=no + fi +fi - if test x$use_boost = xyes; then - - AX_BOOST_UNIT_TEST_FRAMEWORK +if test "$build_bitcoin_cli$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests" = "nononononono"; then + use_upno=no + use_natpmp=no + use_zmq=no +fi - dnl Determine if -DBOOST_TEST_DYN_LINK is needed - AC_MSG_CHECKING([for dynamic linked boost test]) - TEMP_LIBS="$LIBS" - LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB" +dnl Check for libminiupnpc (optional) +if test "$use_upnp" != "no"; then TEMP_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" - AC_LINK_IFELSE([AC_LANG_SOURCE([ - #define BOOST_TEST_DYN_LINK - #define BOOST_TEST_MAIN - #include - - ])], - [AC_MSG_RESULT(yes)] - [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"], - [AC_MSG_RESULT(no)]) - LIBS="$TEMP_LIBS" + CPPFLAGS="$CPPFLAGS $MINIUPNPC_CPPFLAGS" + AC_CHECK_HEADERS( + [miniupnpc/miniupnpc.h miniupnpc/upnpcommands.h miniupnpc/upnperrors.h], + [AC_CHECK_LIB([miniupnpc], [upnpDiscover], [MINIUPNPC_LIBS="$MINIUPNPC_LIBS -lminiupnpc"], [have_miniupnpc=no], [$MINIUPNPC_LIBS])], + [have_miniupnpc=no] + ) + dnl Minimum miniupnpc API version supported is 10. This keeps compatibility + dnl with Ubuntu 16.04 LTS and Debian 8 libminiupnpc-dev packages. + if test "$have_miniupnpc" != "no"; then + AC_MSG_CHECKING([whether miniUPnPc API version is supported]) + AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + #if MINIUPNPC_API_VERSION >= 10 + // Everything is OK + #else + # error miniUPnPc API version is too old + #endif + ]])],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([miniUPnPc API version < 10 is unsupported, disabling UPnP support.]) + have_miniupnpc=no + ]) + fi CPPFLAGS="$TEMP_CPPFLAGS" +fi - fi +dnl Check fot libnatpmp +if test "$use_natpmp" != "no"; then + TEMP_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $NATPMP_CPPFLAGS" + AC_CHECK_HEADERS([natpmp.h], + [AC_CHECK_LIB([natpmp], [initnatpmp], [NATPMP_LIBS="$NATPMP_LIBS -lnatpmp"], [have_natpmp=no], [$NATPMP_LIBS])], + [have_natpmp=no]) + CPPFLAGS="$TEMP_CPPFLAGS" fi -if test x$use_boost = xyes; then - -BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_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 "boost/config.hpp" - #include "boost/version.hpp" - #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 "boost/filesystem.hpp" - ]],[[ - #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" - -dnl Boost >= 1.50 uses sleep_for rather than the now-deprecated sleep, however -dnl it was broken from 1.50 to 1.52 when backed by nanosleep. Use sleep_for if -dnl a working version is available, else fall back to sleep. sleep was removed -dnl after 1.56. -dnl If neither is available, abort. -TEMP_LIBS="$LIBS" -LIBS="$BOOST_LIBS $LIBS" -TEMP_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" -AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - #include - #include - ]],[[ - #if BOOST_VERSION >= 105000 && (!defined(BOOST_HAS_NANOSLEEP) || BOOST_VERSION >= 105200) - boost::this_thread::sleep_for(boost::chrono::milliseconds(0)); - #else - choke me - #endif - ]])], - [boost_sleep=yes; - AC_DEFINE(HAVE_WORKING_BOOST_SLEEP_FOR, 1, [Define this symbol if boost sleep_for works])], - [boost_sleep=no]) -LIBS="$TEMP_LIBS" -CPPFLAGS="$TEMP_CPPFLAGS" - -if test x$boost_sleep != xyes; then -TEMP_LIBS="$LIBS" -LIBS="$BOOST_LIBS $LIBS" -TEMP_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" -AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - #include - #include - #include - ]],[[ - #if BOOST_VERSION <= 105600 - boost::this_thread::sleep(boost::posix_time::milliseconds(0)); - #else - choke me - #endif - ]])], - [boost_sleep=yes; AC_DEFINE(HAVE_WORKING_BOOST_SLEEP, 1, [Define this symbol if boost sleep works])], - [boost_sleep=no]) -LIBS="$TEMP_LIBS" -CPPFLAGS="$TEMP_CPPFLAGS" +if test "$build_bitcoin_wallet$build_bitcoin_cli$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench" = "nonononononono"; then + use_boost=no +else + use_boost=yes fi -if test x$boost_sleep != xyes; then - AC_MSG_ERROR(No working boost sleep implementation found.) +if test "$use_boost" = "yes"; then + + dnl Check for boost libs + AX_BOOST_BASE([1.64.0],[],[AC_MSG_ERROR([Boost is not available!])]) + if test "$want_boost" = "no"; then + AC_MSG_ERROR([only libraptoreumconsensus can be built without boost]) + fi + AX_BOOST_FILESYSTEM + AX_BOOST_SYSTEM + AX_BOOST_THREAD + + if test "$suppress_external_warnings" != "no"; then + BOOST_CPPFLAGS=SUPPRESS_WARNINGS($BOOST_CPPFLAGS) + fi fi +dnl Check for reduced exports +if test "$use_reduce_exports" = "yes"; then + AX_CHECK_COMPILE_FLAG([-fvisibility=hidden], [CORE_CXXFLAGS="$CORE_CXXFLAGS -fvisibility=hidden"], + [AC_MSG_ERROR([Cannot set default symbol visibility. Use --disable-reduce-exports.])], [$CXXFLAG_WERROR]) + AX_CHECK_LINK_FLAG([-Wl,--exclude-libs,ALL], [RELDFLAGS="-Wl,--exclude-libs,ALL"], [], [$LDFLAG_WERROR]) fi -if test x$use_pkgconfig = xyes; then - : dnl - m4_ifdef( - [PKG_CHECK_MODULES], - [ - PKG_CHECK_MODULES([SSL], [libssl],, [AC_MSG_ERROR(openssl not found.)]) - PKG_CHECK_MODULES([CRYPTO], [libcrypto],,[AC_MSG_ERROR(libcrypto not found.)]) - BITCOIN_QT_CHECK([PKG_CHECK_MODULES([PROTOBUF], [protobuf], [have_protobuf=yes], [BITCOIN_QT_FAIL(libprotobuf not found)])]) - if test x$use_qr != xno; then - BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])]) - fi - if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then - PKG_CHECK_MODULES([EVENT], [libevent],, [AC_MSG_ERROR(libevent not found.)]) - if test x$TARGET_OS != xwindows; then - PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)]) - fi - fi +AX_CHECK_LINK_FLAG([-lssl], [LDFLAGS="$LDFLAGS -lssl"]) +AX_CHECK_LINK_FLAG([-lcrypto], [LDFLAGS="$LDFLAGS -lcrypto"]) - if test "x$use_zmq" = "xyes"; then - PKG_CHECK_MODULES([ZMQ],[libzmq >= 4], - [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])], - [AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions]) - AC_MSG_WARN([libzmq version 4.x or greater not found, disabling]) - use_zmq=no]) - else - AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions]) - fi - ] - ) -else - AC_CHECK_HEADER([openssl/crypto.h],,AC_MSG_ERROR(libcrypto headers missing)) - AC_CHECK_LIB([crypto], [main],CRYPTO_LIBS=-lcrypto, AC_MSG_ERROR(libcrypto missing)) +if test "$use_tests" = "yes"; then + if test "$HEXDUMP" = ""; then + AC_MSG_ERROR([hexdump is required for tests]) + fi - AC_CHECK_HEADER([openssl/ssl.h],, AC_MSG_ERROR(libssl headers missing),) - AC_CHECK_LIB([ssl], [main],SSL_LIBS=-lssl, AC_MSG_ERROR(libssl missing)) + if test "$use_boost" = "yes"; then + AX_BOOST_UNIT_TEST_FRAMEWORK + + dnl Determine if -DBOOST_TEST_DYN_LINK is needed + AC_MSG_CHECKING([for dynamic linked boost test]) + TEMP_LIBS="$LIBS" + LIBS="$LIBS $BOOST_LDFLAGS $BOOST_UNIT_TEST_FRAMEWORK_LIB" + TEMP_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" + AC_LINK_IFELSE([AC_LANG_SOURCE([ + #define BOOST_TEST_DYN_LINK + #define BOOST_TEST_MAIN + #include - if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests != xnononono; then - AC_CHECK_HEADER([event2/event.h],, AC_MSG_ERROR(libevent headers missing),) - AC_CHECK_LIB([event],[main],EVENT_LIBS=-levent,AC_MSG_ERROR(libevent missing)) - if test x$TARGET_OS != xwindows; then - AC_CHECK_LIB([event_pthreads],[main],EVENT_PTHREADS_LIBS=-levent_pthreads,AC_MSG_ERROR(libevent_pthreads missing)) - fi + ])], + [AC_MSG_RESULT([yes])] + [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"], + [AC_MSG_RESULT([no])]) + LIBS="$TEMP_LIBS" + CPPFLAGS="$TEMP_CPPFLAGS" fi +fi - if test "x$use_zmq" = "xyes"; then - AC_CHECK_HEADER([zmq.h], - [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])], - [AC_MSG_WARN([zmq.h not found, disabling zmq support]) - use_zmq=no - AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])]) - AC_CHECK_LIB([zmq],[zmq_ctx_shutdown],ZMQ_LIBS=-lzmq, - [AC_MSG_WARN([libzmq >= 4.0 not found, disabling zmq support]) - use_zmq=no - AC_DEFINE([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions])]) - else - AC_DEFINE_UNQUOTED([ENABLE_ZMQ],[0],[Define to 1 to enable ZMQ functions]) - fi +if test "$use_boost" = "yes"; then + BOOST_LIBS="$BOOST_LDFLAGS $BOOST_FILESYSTEM_LIB $BOOST_SYSTEM_LIB $BOOST_THREAD_LIB" +fi - if test "x$use_zmq" = "xyes"; then - dnl Assume libzmq was built for static linking - case $host in - *mingw*) - ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC" - ;; - esac +dnl libevent check +if test "$build_bitcoin_cli$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench" != "nonononono"; then + PKG_CHECK_MODULES([EVENT], [libevent >= 2.1.8], [use_libevent=yes], [AC_MSG_ERROR([libevent version 2.1.8 or greater not found.])]) + if test "$TARGET_OS" != "windows"; then + PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads >= 2.1.8], [], [AC_MSG_ERROR([libevent_pthreads version 2.1.8 or greater not found.])]) fi - BITCOIN_QT_CHECK(AC_CHECK_LIB([protobuf] ,[main],[PROTOBUF_LIBS=-lprotobuf], BITCOIN_QT_FAIL(libprotobuf not found))) - if test x$use_qr != xno; then - BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main],[QR_LIBS=-lqrencode], [have_qrencode=no])]) - BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, have_qrencode=no)]) + if test "$suppress_external_warnings" != "no"; then + EVENT_CFLAGS=SUPPRESS_WARNINGS($EVENT_CFLAGS) fi fi -save_CXXFLAGS="${CXXFLAGS}" -CXXFLAGS="${CXXFLAGS} ${CRYPTO_CFLAGS} ${SSL_CFLAGS}" -AC_CHECK_DECLS([EVP_MD_CTX_new],,,[AC_INCLUDES_DEFAULT -#include -]) -CXXFLAGS="${save_CXXFLAGS}" +if test "$use_libevent" = "yes"; then + TEMP_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS $EVENT_CFLAGS" + AC_MSG_CHECKING([if evhttp_connection_get_peer expects const char**]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + #include + ]], [[ + evhttp_connection* conn = (evhttp_connection *)1; + const char* host; + uint16_t port; + + evhttp_connection_get_peer(conn, &host, &port); + ]])], + [ AC_MSG_RESULT([yes]); AC_DEFINE([HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR], [1], [Define this symbol if evhttp_connection_get_peer expects const char**]) ], + [ AC_MSG_RESULT([no]) ] + ) + CXXFLAGS="$TEMP_CXXFLAGS" +fi -dnl univalue check +dnl QR Code encoding library check +if test "$use_qr" != "no"; then + BITCOIN_QT_CHECK([PKG_CHECK_MODULES([QR], [libqrencode], [have_qrencode=yes], [have_qrencode=no])]) + BITCOIN_QT_CHECK([AC_CHECK_HEADER([qrencode.h],, [have_qrencode=no])]) + BITCOIN_QT_CHECK([AC_CHECK_LIB([qrencode], [main], [QR_LIBS=-lqrencode], [have_qrencode=no])]) +fi -need_bundled_univalue=yes +dnl ZMQ check -if test x$build_bitcoin_utils$build_bitcoind$bitcoin_enable_qt$use_tests$use_bench = xnonononono; then - need_bundled_univalue=no +if test "$use_zmq" = "yes"; then + PKG_CHECK_MODULES([ZMQ], [libzmq >= 4], + AC_DEFINE([ENABLE_ZMQ], [1], [Define to 1 to enable ZMQ functions]), + [AC_DEFINE([ENABLE_ZMQ], [0], [Define to 1 to enable ZMQ functions]) + AC_MSG_WARN([libzmq version 4.x or greater not found, disabling]) + use_zmq=no]) else - -if test x$system_univalue != xno ; then - found_univalue=no - if test x$use_pkgconfig = xyes; then - : #NOP - m4_ifdef( - [PKG_CHECK_MODULES], - [ - PKG_CHECK_MODULES([UNIVALUE],[libunivalue],[found_univalue=yes],[true]) - ] - ) - else - AC_CHECK_HEADER([univalue.h],[ - AC_CHECK_LIB([univalue], [main],[ - UNIVALUE_LIBS=-lunivalue - found_univalue=yes - ],[true]) - ],[true]) - fi - - if test x$found_univalue = xyes ; then - system_univalue=yes - need_bundled_univalue=no - elif test x$system_univalue = xyes ; then - AC_MSG_ERROR([univalue not found]) - else - system_univalue=no - fi -fi - -if test x$need_bundled_univalue = xyes ; then - UNIVALUE_CFLAGS='-I$(srcdir)/univalue/include' - UNIVALUE_LIBS='univalue/libunivalue.la' + AC_DEFINE_UNQUOTED([ENABLE_ZMQ], [0], [Define to 1 to enable ZMQ functions]) fi +if test "$use_zmq" = "yes"; then + dnl Assume libzmq was build for static linking + case $host in + *mingw*) + ZMQ_CFLAGS="$ZMQ_CFLAGS -DZMQ_STATIC" + ;; + esac fi -AM_CONDITIONAL([EMBEDDED_UNIVALUE],[test x$need_bundled_univalue = xyes]) -AC_SUBST(UNIVALUE_CFLAGS) -AC_SUBST(UNIVALUE_LIBS) +dnl Check for gmp +AC_CHECK_HEADER([gmp.h]) +AC_CHECK_LIB([gmp], [__gmpz_init], [GMP_LIBS=-lgmp], [AC_MSG_ERROR([libgmp missing])]) -BITCOIN_QT_PATH_PROGS([PROTOC], [protoc],$protoc_bin_path) +dnl check for immer header +AC_CHECK_HEADER([immer/map.hpp],, [AC_MSG_ERROR([immer map header not found])]) AC_MSG_CHECKING([whether to build raptoreumd]) -AM_CONDITIONAL([BUILD_BITCOIND], [test x$build_bitcoind = xyes]) -AC_MSG_RESULT($build_bitcoind) +AM_CONDITIONAL([BUILD_BITCOIND], [test $build_bitcoind = "yes"]) +AC_MSG_RESULT([$build_bitcoind]) -AC_MSG_CHECKING([whether to build utils (raptoreum-cli raptoreum-tx)]) -AM_CONDITIONAL([BUILD_BITCOIN_UTILS], [test x$build_bitcoin_utils = xyes]) -AC_MSG_RESULT($build_bitcoin_utils) +AC_MSG_CHECKING([whether to build raptoreum-cli]) +AM_CONDITIONAL([BUILD_BITCOIN_CLI], [test $build_bitcoin_cli = "yes"]) +AC_MSG_RESULT([$build_bitcoin_cli]) + +AC_MSG_CHECKING([whether to build raptoreum-wallet]) +AM_CONDITIONAL([BUILD_BITCOIN_WALLET], [test $build_bitcoin_wallet = "yes"]) +AC_MSG_RESULT($build_bitcoin_wallet) AC_MSG_CHECKING([whether to build libraries]) -AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test x$build_bitcoin_libs = xyes]) -if test x$build_bitcoin_libs = xyes; then - AC_DEFINE(HAVE_CONSENSUS_LIB, 1, [Define this symbol if the consensus lib has been built]) +AM_CONDITIONAL([BUILD_BITCOIN_LIBS], [test $build_bitcoin_libs = "yes"]) +if test "$build_bitcoin_libs" = "yes"; then + AC_DEFINE([HAVE_CONSENSUS_LIB], [1], [Define this symbol if the consensus lib has been built]) AC_CONFIG_FILES([libraptoreumconsensus.pc:libraptoreumconsensus.pc.in]) fi AC_MSG_RESULT($build_bitcoin_libs) AC_LANG_POP -if test "x$use_ccache" != "xno"; then - AC_MSG_CHECKING(if ccache should be used) - if test x$CCACHE = x; then - if test "x$use_ccache" = "xyes"; then +if test "$use_ccache" != "no"; then + AC_MSG_CHECKING([if ccache should be used]) + if test "$CCACHE" = ""; then + if test "$use_ccache" = "yes"; then AC_MSG_ERROR([ccache not found.]); else use_ccache=no @@ -1172,81 +1516,110 @@ if test "x$use_ccache" != "xno"; then CXX="$ac_cv_path_CCACHE $CXX" fi AC_MSG_RESULT($use_ccache) -fi -if test "x$use_ccache" = "xyes"; then - AX_CHECK_PREPROC_FLAG([-Qunused-arguments],[CPPFLAGS="-Qunused-arguments $CPPFLAGS"]) + if test "$use_ccache" = "yes"; then + AX_CHECK_COMPILE_FLAG([-fdebug-prefix-map=A=B], [DEBUG_CXXFLAGS="$DEBUG_CXXFLAGS -fdebug-prefix-map=\$(abs_top_srcdir)=."], [], [$CXXFLAG_WERROR]) + AX_CHECK_PREPROC_FLAG([-fmacro-prefix-map=A=B], [DEBUG_CPPFLAGS="$DEBUG_CPPFLAGS -fmacro-prefix-map=\$(abs_top_srcdir)=."], [], [$CXXFLAG_WERROR]) + fi fi dnl enable wallet AC_MSG_CHECKING([if wallet should be enabled]) -if test x$enable_wallet != xno; then - AC_MSG_RESULT(yes) - AC_DEFINE_UNQUOTED([ENABLE_WALLET],[1],[Define to 1 to enable wallet functions]) +if test "$enable_wallet" != "no"; then + AC_MSG_RESULT([yes]) + AC_DEFINE([ENABLE_WALLET], [1], [Define to 1 to enable wallet functions]) + enable_wallet=yes else - AC_MSG_RESULT(no) + AC_MSG_RESULT([no]) fi dnl enable upnp support AC_MSG_CHECKING([whether to build with support for UPnP]) -if test x$have_miniupnpc = xno; then - if test x$use_upnp = xyes; then - AC_MSG_ERROR("UPnP requested but cannot be built. use --without-miniupnpc") +if test "$have_miniupnpc" = "no"; then + if test "$use_upnp" = "yes"; then + AC_MSG_ERROR([UPnP requested but cannot be built. Use --without-miniupnpc]) fi - AC_MSG_RESULT(no) + AC_MSG_RESULT([no]) + use_upnp=no else - if test x$use_upnp != xno; then - AC_MSG_RESULT(yes) + if test "$use_upnp" != "no"; then + AC_MSG_RESULT([yes]) AC_MSG_CHECKING([whether to build with UPnP enabled by default]) use_upnp=yes upnp_setting=0 - if test x$use_upnp_default != xno; then + if test "$use_upnp_default" != "no"; then use_upnp_default=yes upnp_setting=1 fi - AC_MSG_RESULT($use_upnp_default) - AC_DEFINE_UNQUOTED([USE_UPNP],[$upnp_setting],[UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state]) - if test x$TARGET_OS = xwindows; then - MINIUPNPC_CPPFLAGS="-DSTATICLIB -DMINIUPNP_STATICLIB" + AC_MSG_RESULT([$use_upnp_default]) + AC_DEFINE_UNQUOTED([USE_UPNP], [$upnp_setting], [UPnP support not compiled if undefined, otherwise value (0 or 1) determines default state]) + if test "$TARGET_OS" = "windows"; then + MINIUPNPC_CPPFLAGS="$MINIUPNPC_CPPFLAGS -DSTATICLIB -DMINIUPNP_STATICLIB" fi else - AC_MSG_RESULT(no) + AC_MSG_RESULT([no]) + fi +fi + +dnl Enable NAT-PMP support +AC_MSG_CHECKING([whether to build with support for NAT-PMP]) +if test "$have_natpmp" = "yes"; then + if test "$use_natpmp" = "yes"; then + AC_MSG_ERROR([NAT-PMP requested but can not be built. Use --without-natpmp]) + fi + AC_MSG_RESULT([no]) + use_natpmp=no +else + if test "$use_natpmp" != "no"l; then + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([whether to build with NAT-PMP enabled by default]) + use_natpmp=yes + natpmp_setting=0 + if test "$use_natpmp_default" != "no"; then + use_natpmp_default=yes + natpmp_setting=1 + fi + AC_MSG_RESULT([$use_natpmp_default]) + AC_DEFINE_UNQUOTED([USE_NATPMP], [$natpmp_setting], [NAT-PMP support not compiled if undefined, otherwise value (0 or 1) determine default state]) + if test "$TARGET_OS" = "windows"; then + NATPMP_CPPFLAGS="$NATPMP_CPPFLAGS -DSTATICLIB -DNATPMP_STATICLIB" + fi + else + AC_MSG_RESULT([no]) fi fi dnl these are only used when qt is enabled BUILD_TEST_QT="" -if test x$bitcoin_enable_qt != xno; then +if test "$bitcoin_enable_qt" != "no"; then dnl enable dbus support AC_MSG_CHECKING([whether to build GUI with support for D-Bus]) - if test x$bitcoin_enable_qt_dbus != xno; then - AC_DEFINE([USE_DBUS],[1],[Define if dbus support should be compiled in]) + if test "$bitcoin_enable_qt_dbus" != "no"; then + AC_DEFINE([USE_DBUS], [1], [Define if dbus support should be compiled in]) fi - AC_MSG_RESULT($bitcoin_enable_qt_dbus) + AC_MSG_RESULT([$bitcoin_enable_qt_dbus]) dnl enable qr support AC_MSG_CHECKING([whether to build GUI with support for QR codes]) - if test x$have_qrencode = xno; then - if test x$use_qr = xyes; then - AC_MSG_ERROR("QR support requested but cannot be built. use --without-qrencode") + if test "$have_qrencode" = "no"; then + if test "$use_qr" = "yes"; then + AC_MSG_ERROR([QR support requested but cannot be built. use --without-qrencode]) fi - AC_MSG_RESULT(no) + use_qr=no else - if test x$use_qr != xno; then - AC_MSG_RESULT(yes) - AC_DEFINE([USE_QRCODE],[1],[Define if QR support should be compiled in]) + if test "$use_qr" != "no"; then + AC_DEFINE([USE_QRCODE], [1], [Define if QR support should be compiled in]) use_qr=yes - else - AC_MSG_RESULT(no) fi fi + AC_MSG_RESULT([$use_qr]) - if test x$XGETTEXT = x; then - AC_MSG_WARN("xgettext is required to update qt translations") + if test "$XGETTEXT" = ""; then + AC_MSG_WARN([xgettext is required to update qt translations]) fi AC_MSG_CHECKING([whether to build test_raptoreum-qt]) - if test x$use_gui_tests$bitcoin_enable_qt_test = xyesyes; then + if test "$use_gui_tests$bitcoin_enable_qt_test" = "yesyes"; then AC_MSG_RESULT([yes]) BUILD_TEST_QT="yes" else @@ -1254,10 +1627,10 @@ if test x$bitcoin_enable_qt != xno; then fi fi -AM_CONDITIONAL([ENABLE_ZMQ], [test "x$use_zmq" = "xyes"]) +AM_CONDITIONAL([ENABLE_ZMQ], [test "$use_zmq" = "yes"]) AC_MSG_CHECKING([whether to build test_raptoreum]) -if test x$use_tests = xyes; then +if test "$use_tests" = "yes"; then AC_MSG_RESULT([yes]) BUILD_TEST="yes" else @@ -1266,56 +1639,67 @@ else fi AC_MSG_CHECKING([whether to reduce exports]) -if test x$use_reduce_exports = xyes; then +if test "$use_reduce_exports" = "yes"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi -# When compiled natively on MacOS, we need to specify -flat to avoid producing a dSYM bundle -# When cross-compiled on linux, we're using a different version of the tool that only supports flat symbol files +# dnl When compiled natively on MacOS, we need to specify -flat to avoid producing a dSYM bundle. +# dnl When cross-compiled on linux, we are using a differewnt version of the tool that only support flat symbol files. AC_MSG_CHECKING([whether dsymutil needs -flat]) -if test x$DSYMUTIL != x && ($DSYMUTIL --help | grep -q \\-flat); then -AC_MSG_RESULT([yes]) - DSYMUTIL_FLAT="$DSYMUTIL -flat" +if test "$DSYMUTIL" != "" && ($DSYMUTIL --help | grep -q \\-flat); then + AC_MSG_RESULT([yes]) + DSYMUTIL_FLAT="$DSYMUTIL -flat" else - AC_MSG_RESULT([no]) - DSYMUTIL_FLAT="$DSYMUTIL" + AC_MSG_RESULT([no]) + DSYMUTIL_FLAT="$DSYMUTIL" fi -AC_MSG_RESULT($dsymutil_needs_flat) +AC_MSG_RESULT([$dsymutil_needs_flat]) -if test x$build_bitcoin_utils$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests = xnononononono; then +if test "$build_bitcoin_wallet$build_bitcoin_cli$build_bitcoin_libs$build_bitcoind$bitcoin_enable_qt$use_bench$use_tests" = "nononononononono"; then AC_MSG_ERROR([No targets! Please specify at least one of: --with-utils --with-libs --with-daemon --with-gui --enable-bench or --enable-tests]) fi -AM_CONDITIONAL([TARGET_DARWIN], [test x$TARGET_OS = xdarwin]) -AM_CONDITIONAL([BUILD_DARWIN], [test x$BUILD_OS = xdarwin]) -AM_CONDITIONAL([TARGET_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_QT],[test x$bitcoin_enable_qt = xyes]) -AM_CONDITIONAL([ENABLE_QT_TESTS],[test x$BUILD_TEST_QT = xyes]) -AM_CONDITIONAL([ENABLE_BENCH],[test x$use_bench = xyes]) -AM_CONDITIONAL([USE_QRCODE], [test x$use_qr = xyes]) -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]) -AM_CONDITIONAL([ENABLE_HWCRC32],[test x$enable_hwcrc32 = xyes]) -AM_CONDITIONAL([ENABLE_SSE41],[test x$enable_sse41 = xyes]) -AM_CONDITIONAL([ENABLE_AVX2],[test x$enable_avx2 = xyes]) -AM_CONDITIONAL([ENABLE_SHANI],[test x$enable_shani = xyes]) -AM_CONDITIONAL([USE_ASM],[test x$use_asm = xyes]) - -AC_DEFINE(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR, [Major version]) -AC_DEFINE(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR, [Minor version]) -AC_DEFINE(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION, [Build revision]) -AC_DEFINE(CLIENT_VERSION_BUILD, _CLIENT_VERSION_BUILD, [Version Build]) -AC_DEFINE(CLIENT_VERSION_IS_RELEASE, _CLIENT_VERSION_IS_RELEASE, [Version is release]) -AC_DEFINE(COPYRIGHT_YEAR, _COPYRIGHT_YEAR, [Copyright year]) -AC_DEFINE(COPYRIGHT_HOLDERS, "_COPYRIGHT_HOLDERS", [Copyright holder(s) before %s replacement]) -AC_DEFINE(COPYRIGHT_HOLDERS_SUBSTITUTION, "_COPYRIGHT_HOLDERS_SUBSTITUTION", [Replacement for %s in copyright holders string]) +AM_CONDITIONAL([TARGET_DARWIN], [test "$TARGET_OS" = "darwin"]) +AM_CONDITIONAL([BUILD_DARWIN], [test "$BUILD_OS" = "darwin"]) +AM_CONDITIONAL([TARGET_LINUX], [test "$TARGET_OS" = "linux"]) +AM_CONDITIONAL([TARGET_WINDOWS], [test "$TARGET_OS" = "windows"]) +AM_CONDITIONAL([ENABLE_WALLET], [test "$enable_wallet" = "yes"]) +AM_CONDITIONAL([USE_BDB], [test "$use_bdb" = "yes"]) +AM_CONDITIONAL([ENABLE_TESTS], [test "$BUILD_TEST" = "yes"]) +AM_CONDITIONAL([ENABLE_QT], [test "$bitcoin_enable_qt" = "yes"]) +AM_CONDITIONAL([ENABLE_QT_TESTS], [test "$BUILD_TEST_QT" = "yes"]) +AM_CONDITIONAL([ENABLE_BENCH], [test "$use_bench" = "yes"]) +AM_CONDITIONAL([USE_QRCODE], [test "$use_qr" = "yes"]) +AM_CONDITIONAL([USE_LCOV], [test "$use_lcov" = "yes"]) +AM_CONDITIONAL([USE_LIBEVENT], [test "$use_libevent" = "yes"]) +AM_CONDITIONAL([HARDEN], [test "$use_hardening" = "yes"]) +AM_CONDITIONAL([ENABLE_SSE42], [test "$enable_sse42" = "yes"]) +AM_CONDITIONAL([ENABLE_SSE41], [test "$enable_sse41" = "yes"]) +AM_CONDITIONAL([ENABLE_AVX2], [test "$enable_avx2" = "yes"]) +AM_CONDITIONAL([ENABLE_X86_SHANI], [test "$enable_x86_shani" = "yes"]) +AM_CONDITIONAL([ENABLE_ARM_CRC], [test "$enable_arm_crc" = "yes"]) +AM_CONDITIONAL([ENABLE_ARM_SHANI], [test "$enable_arm_shani" = "yes"]) +AM_CONDITIONAL([USE_ASM], [test "$use_asm" = "yes"]) +AM_CONDITIONAL([WORDS_BIGENDIAN], [test "$ac_cv_c_bigendian" = "yes"]) +AM_CONDITIONAL([USE_NATPMP], [test "$use_natpmp" = "yes"]) +AM_CONDITIONAL([USE_UPNP], [test "$use_upnp" = "yes"]) + +dnl for minisketch +AM_CONDITIONAL([ENABLE_CLMUL], [test "$enable_clmul" = "yes"]) +AM_CONDITIONAL([HAVE_CLZ], [test "$have_clzl$have_clzll" = "yesyes"]) + +AC_DEFINE([CLIENT_VERSION_MAJOR], [_CLIENT_VERSION_MAJOR], [Major version]) +AC_DEFINE([CLIENT_VERSION_MINOR], [_CLIENT_VERSION_MINOR], [Minor version]) +AC_DEFINE([CLIENT_VERSION_REVISION], [_CLIENT_VERSION_REVISION], [Build revision]) +AC_DEFINE([CLIENT_VERSION_BUILD], [_CLIENT_VERSION_BUILD], [Version Build]) +AC_DEFINE([CLIENT_VERSION_IS_RELEASE], [_CLIENT_VERSION_IS_RELEASE], [Version is release]) +AC_DEFINE([COPYRIGHT_YEAR], [_COPYRIGHT_YEAR], [Copyright year]) +AC_DEFINE([COPYRIGHT_HOLDERS], ["_COPYRIGHT_HOLDERS"], [Copyright holder(s) before %s replacement]) +AC_DEFINE([COPYRIGHT_HOLDERS_SUBSTITUTION], ["_COPYRIGHT_HOLDERS_SUBSTITUTION"], [Replacement for %s in copyright holders string]) define(_COPYRIGHT_HOLDERS_FINAL, [patsubst(_COPYRIGHT_HOLDERS, [%s], [_COPYRIGHT_HOLDERS_SUBSTITUTION])]) -AC_DEFINE(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL", [Copyright holder(s)]) +AC_DEFINE([COPYRIGHT_HOLDERS_FINAL], ["_COPYRIGHT_HOLDERS_FINAL"], [Copyright holder(s)]) AC_SUBST(CLIENT_VERSION_MAJOR, _CLIENT_VERSION_MAJOR) AC_SUBST(CLIENT_VERSION_MINOR, _CLIENT_VERSION_MINOR) AC_SUBST(CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION) @@ -1328,41 +1712,63 @@ AC_SUBST(COPYRIGHT_HOLDERS_FINAL, "_COPYRIGHT_HOLDERS_FINAL") AC_SUBST(BITCOIN_DAEMON_NAME) AC_SUBST(BITCOIN_GUI_NAME) AC_SUBST(BITCOIN_CLI_NAME) -AC_SUBST(BITCOIN_TX_NAME) +AC_SUBST(BITCOIN_WALLET_TOOL_NAME) AC_SUBST(RELDFLAGS) +AC_SUBST(CORE_LDFLAGS) +AC_SUBST(CORE_CPPFLAGS) +AC_SUBST(CORE_CXXFLAGS) +AC_SUBST(DEBUG_CPPFLAGS) +AC_SUBST(WARN_CXXFLAGS) +AC_SUBST(NOWARN_CXXFLAGS) +AC_SUBST(DEBUG_CXXFLAGS) AC_SUBST(ERROR_CXXFLAGS) +AC_SUBST(GPROF_CXXFLAGS) +AC_SUBST(GPROF_LDFLAGS) AC_SUBST(HARDENED_CXXFLAGS) AC_SUBST(HARDENED_CPPFLAGS) AC_SUBST(HARDENED_LDFLAGS) +AC_SUBST(LTO_CXXFLAGS) +AC_SUBST(LTO_LDFLAGS) AC_SUBST(PIC_FLAGS) AC_SUBST(PIE_FLAGS) +AC_SUBST(SANITIZER_CXXFLAGS) +AC_SUBST(SANITIZER_LDFLAGS) AC_SUBST(SSE42_CXXFLAGS) AC_SUBST(SSE41_CXXFLAGS) AC_SUBST(AVX2_CXXFLAGS) -AC_SUBST(SHANI_CXXFLAGS) +AC_SUBST(X86_SHANI_CXXFLAGS) +AC_SUBST(ARM_CRC_CXXFLAGS) +AC_SUBST(ARM_SHANI_CXXFLAGS) AC_SUBST(LIBTOOL_APP_LDFLAGS) +AC_SUBST(USE_BDB) AC_SUBST(USE_UPNP) AC_SUBST(USE_QRCODE) AC_SUBST(BOOST_LIBS) AC_SUBST(TESTDEFS) -AC_SUBST(LEVELDB_TARGET_FLAGS) AC_SUBST(MINIUPNPC_CPPFLAGS) AC_SUBST(MINIUPNPC_LIBS) -AC_SUBST(CRYPTO_LIBS) -AC_SUBST(SSL_LIBS) -AC_SUBST(EVENT_LIBS) -AC_SUBST(EVENT_PTHREADS_LIBS) -AC_SUBST(ZMQ_LIBS) -AC_SUBST(PROTOBUF_LIBS) -AC_SUBST(QR_LIBS) +AC_SUBST(NATPMP_CPPFLAGS) +AC_SUBST(NATPMP_LIBS) +AC_SUBST(GMP_LIBS) AC_SUBST(DSYMUTIL_FLAT) +AC_SUBST(HAVE_GMTIME_R) +AC_SUBST(HAVE_FDATASYNC) +AC_SUBST(HAVE_FULLFSYNC) +AC_SUBST(HAVE_O_CLOEXEC) +AC_SUBST(HAVE_BUILTIN_PREFETCH) +AC_SUBST(HAVE_MM_PREFETCH) +AC_SUBST(HAVE_STRONG_GETAUXVAL) +AC_SUBST(HAVE_EVHTTP_CONNECTION_GET_PEER_CONST_CHAR) +AC_SUBST(ANDROID_ARCH) AC_CONFIG_FILES([Makefile src/Makefile doc/man/Makefile share/setup.nsi share/qt/Info.plist test/config.ini]) AC_CONFIG_FILES([contrib/devtools/split-debug.sh],[chmod +x contrib/devtools/split-debug.sh]) -AC_CONFIG_FILES([doc/Doxyfile]) +AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([doc/Doxyfile])]) AC_CONFIG_LINKS([contrib/filter-lcov.py:contrib/filter-lcov.py]) +AC_CONFIG_LINKS([contrib/macdeploy/background.tiff:contrib/macdeploy/background.tiff]) AC_CONFIG_LINKS([test/functional/test_runner.py:test/functional/test_runner.py]) AC_CONFIG_LINKS([test/util/bitcoin-util-test.py:test/util/bitcoin-util-test.py]) +AC_CONFIG_LINKS([test/util/rpcauth-test.py:test/util/rpcauth-test.py]) dnl boost's m4 checks do something really nasty: they export these vars. As a dnl result, they leak into secp256k1's configure and crazy things happen. @@ -1379,34 +1785,11 @@ LIBS_TEMP="$LIBS" unset LIBS LIBS="$LIBS_TEMP" -PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH" -unset PKG_CONFIG_PATH -PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP" - -PKGCONFIG_LIBDIR_TEMP="$PKG_CONFIG_LIBDIR" -unset PKG_CONFIG_LIBDIR -PKG_CONFIG_LIBDIR="$PKGCONFIG_LIBDIR_TEMP" - -if test x$need_bundled_univalue = xyes; then - AC_CONFIG_SUBDIRS([src/univalue]) -fi - -ac_configure_args="${ac_configure_args} --disable-shared --with-pic --with-bignum=no --enable-module-recovery --disable-jni" -AC_CONFIG_SUBDIRS([src/secp256k1]) +ac_configure_args="${ac_configure_args} --disable-shared --with-pic --enable-benchmark=no --enable-module-recovery --enable-module-schnorrsig" +AC_CONFIG_SUBDIRS([src/dashbls src/secp256k1]) AC_OUTPUT -dnl Taken from https://wiki.debian.org/RpathIssue -case $host in - *-*-linux-gnu) - AC_MSG_RESULT([Fixing libtool for -rpath problems.]) - sed < libtool > libtool-2 \ - 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/' - mv libtool-2 libtool - chmod 755 libtool - ;; -esac - dnl Replace the BUILDDIR path with the correct Windows path if compiling on Native Windows case ${OS} in *Windows*) @@ -1415,32 +1798,40 @@ case ${OS} in ;; esac -echo +echo echo "Options used to compile and link:" +echo " with libs = $build_bitcoin_libs" echo " with wallet = $enable_wallet" +if test "$enable_wallet" != "no"; then + echo " with bdb = $use_bdb" +fi echo " with gui / qt = $bitcoin_enable_qt" -if test x$bitcoin_enable_qt != xno; then - echo " qt version = $bitcoin_qt_got_major_vers" +if test $bitcoin_enable_qt != "no"; then echo " with qr = $use_qr" fi echo " with zmq = $use_zmq" echo " with test = $use_tests" echo " with bench = $use_bench" echo " with upnp = $use_upnp" +echo " with natpmp = $use_natpmp" echo " use asm = $use_asm" +echo " sanitizers = $use_sanitizers" echo " debug enabled = $enable_debug" +echo " stacktraces enabled = $enable_stacktraces" echo " crash hooks enabled = $enable_crashhooks" echo " miner enabled = $enable_miner" +echo " gprof enabled = $enable_gprof" echo " werror = $enable_werror" -echo -echo " target os = $TARGET_OS" -echo " build os = $BUILD_OS" +echo " LTO = $enable_lto" +echo +echo " target os = $host_os" +echo " build os = $build_os" echo echo " CC = $CC" -echo " CFLAGS = $CFLAGS" -echo " CPPFLAGS = $CPPFLAGS" +echo " CFLAGS = $PTHREAD_CFLAGS $CFLAGS" +echo " CPPFLAGS = $DEBUG_CPPFLAGS $HARDENED_CPPFLAGS $CORE_CPPFLAGS $CPPFLAGS" echo " CXX = $CXX" -echo " CXXFLAGS = $CXXFLAGS" -echo " LDFLAGS = $LDFLAGS" +echo " CXXFLAGS = $LTO_CXXFLAGS $DEBUG_CXXFLAGS $HARDENED_CXXFLAGS $WARN_CXXFLAGS $NOWARN_CXXFLAGS $ERROR_CXXFLAGS $GPROF_CXXFLAGS $CORE_CXXFLAGS $CXXFLAGS" +echo " LDFLAGS = $LTO_LDFLAGS $PTHREAD_LIBS $HARDENED_LDFLAGS $GPROF_LDFLAGS $CORE_LDFLAGS $LDFLAGS" echo " ARFLAGS = $ARFLAGS" -echo +echo diff --git a/contrib/auto_gdb/common_helpers.py b/contrib/auto_gdb/common_helpers.py index 7dcc6c021d..d85ffb0b04 100644 --- a/contrib/auto_gdb/common_helpers.py +++ b/contrib/auto_gdb/common_helpers.py @@ -1,15 +1,11 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # -try: - import gdb -except ImportError as e: - raise ImportError("This script must be run in GDB: ", str(e)) import sys import os -sys.path.append(os.getcwd()) import stl_containers import simple_class_obj +sys.path.append(os.getcwd()) SIZE_OF_INT = 4 SIZE_OF_BOOL = 1 diff --git a/contrib/auto_gdb/debug.gdb b/contrib/auto_gdb/debug.gdb index 23753fe770..45b4b82da8 100644 --- a/contrib/auto_gdb/debug.gdb +++ b/contrib/auto_gdb/debug.gdb @@ -2,8 +2,8 @@ set pagination off source used_size.py source log_size.py source test_used_size.gdb -#logsize privateSendClient "memlog.txt" -#logsize privateSendServer "memlog.txt" +#logsize coinJoinClient "memlog.txt" +#logsize coinJoinServer "memlog.txt" #logsize mnodeman "memlog.txt" logsize mnpayments "memlog.txt" #logsize instantsend "memlog.txt" diff --git a/contrib/auto_gdb/log_size.py b/contrib/auto_gdb/log_size.py index 08eaa9048c..8d5084eef1 100644 --- a/contrib/auto_gdb/log_size.py +++ b/contrib/auto_gdb/log_size.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # try: @@ -9,8 +9,8 @@ import datetime import sys import os -sys.path.append(os.getcwd()) import common_helpers +sys.path.append(os.getcwd()) class LogSizeCommand (gdb.Command): @@ -23,7 +23,7 @@ def invoke(self, arg, from_tty): try: args = gdb.string_to_argv(arg) obj = gdb.parse_and_eval(args[0]) - logfile = open(args[1], 'a') + logfile = open(args[1], 'a', encoding="utf8") size = common_helpers.get_instance_size(obj) logfile.write("%s %s: %d\n" % (str(datetime.datetime.now()), args[0], size)) logfile.close() diff --git a/contrib/auto_gdb/simple_class_obj.py b/contrib/auto_gdb/simple_class_obj.py index b8cd0e717d..ebe7cd315f 100644 --- a/contrib/auto_gdb/simple_class_obj.py +++ b/contrib/auto_gdb/simple_class_obj.py @@ -1,22 +1,18 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # -try: - import gdb -except ImportError as e: - raise ImportError("This script must be run in GDB: ", str(e)) import sys import os -sys.path.append(os.getcwd()) import common_helpers +sys.path.append(os.getcwd()) simple_types = ["CSmartnode", "CSmartnodeVerification", "CSmartnodeBroadcast", "CSmartnodePing", "CSmartnodeMan", "CDarksendQueue", "CDarkSendEntry", - "CTransaction", "CMutableTransaction", "CPrivateSendBaseSession", - "CPrivateSendBaseManager", "CPrivateSendClientSession", - "CPrivateSendClientManager", "CPrivateSendServer", "CSmartnodePayments", + "CTransaction", "CMutableTransaction", "CCoinJoinBaseSession", + "CCoinJoinBaseManager", "CCoinJoinClientSession", + "CCoinJoinClientManager", "CCoinJoinServer", "CSmartnodePayments", "CSmartnodePaymentVote", "CSmartnodeBlockPayees", "CSmartnodePayee", "CInstantSend", "CTxLockRequest", "CTxLockVote", "CTxLockCandidate", "COutPoint", diff --git a/contrib/auto_gdb/stl_containers.py b/contrib/auto_gdb/stl_containers.py index cb6763c5e0..a4fdb4afe9 100644 --- a/contrib/auto_gdb/stl_containers.py +++ b/contrib/auto_gdb/stl_containers.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # try: @@ -7,8 +7,8 @@ raise ImportError("This script must be run in GDB: ", str(e)) import sys import os -sys.path.append(os.getcwd()) import common_helpers +sys.path.append(os.getcwd()) def find_type(orig, name): diff --git a/contrib/auto_gdb/used_size.py b/contrib/auto_gdb/used_size.py index 5285965210..3123eadbe6 100644 --- a/contrib/auto_gdb/used_size.py +++ b/contrib/auto_gdb/used_size.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 # try: @@ -8,8 +8,8 @@ import traceback import sys import os -sys.path.append(os.getcwd()) import common_helpers +sys.path.append(os.getcwd()) class UsedSizeCommand (gdb.Command): diff --git a/contrib/debian/control b/contrib/debian/control index aa97d2ddc3..55e3e327e8 100644 --- a/contrib/debian/control +++ b/contrib/debian/control @@ -14,21 +14,17 @@ Build-Depends: debhelper, libevent-dev, libboost-system1.48-dev | libboost-system-dev (>> 1.47), libboost-filesystem1.48-dev | libboost-filesystem-dev (>> 1.47), - libboost-program-options1.48-dev | libboost-program-options-dev (>> 1.47), libboost-thread1.48-dev | libboost-thread-dev (>> 1.47), libboost-test1.48-dev | libboost-test-dev (>> 1.47), - libboost-chrono1.48-dev | libboost-chrono-dev (>> 1.47), libminiupnpc8-dev | libminiupnpc-dev, - qt4-qmake, libqt4-dev, qttools5-dev-tools, qttools5-dev, libqrencode-dev, - libprotobuf-dev, protobuf-compiler, python, libzmq3-dev Standards-Version: 3.9.2 Homepage: https://www.raptoreum.org/ -Vcs-Git: git://github.com/raptoreum/raptoreum.git -Vcs-Browser: https://github.com/raptoreum/raptoreum +Vcs-Git: git://github.com/raptor3um/raptoreum.git +Vcs-Browser: https://github.com/raptor3um/raptoreum Package: raptoreumd Architecture: any @@ -54,17 +50,3 @@ Description: peer-to-peer network based digital currency - Qt GUI is the name of the open source software which enables the use of this currency. . This package provides Raptoreum-Qt, a GUI for Raptoreum based on Qt. - -Package: raptoreum-tx -Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends} -Description: peer-to-peer digital currency - standalone transaction tool - Raptoreum is an experimental new digital currency that enables instant, private - payments to anyone, anywhere in the world. Raptoreum uses peer-to-peer - technology to operate with no central authority: managing transactions - and issuing money are carried out collectively by the network. Raptoreum Core - is the name of the open source software which enables the use of this currency. - . - This package provides raptoreum-tx, a command-line transaction creation - tool which can be used without a raptoreum daemon. Some means of - exchanging minimal transaction data with peers is still required. diff --git a/contrib/debian/copyright b/contrib/debian/copyright index 901f5fdf7b..a67d7c793e 100644 --- a/contrib/debian/copyright +++ b/contrib/debian/copyright @@ -1,90 +1,29 @@ 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 +Upstream-Name: Dash Core +Upstream-Contact: Dash Core Group, Inc https://www.dash.org/team/ +Source: https://github.com/dashpay/dash Files: * -Copyright: 2009-2017, Bitcoin Core Developers +Copyright: 2009-2017, Bitcoin Core Developers, + 2019-2020, Dash 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. + as well as the numerous contributors to the project. The Dash Core Developers + encompasses the current developers listed on https://www.dash.org/team/, as well as + the numerous contributors to the project. Files: debian/* Copyright: 2010-2011, Jonas Smedegaard 2011, Matt Corallo License: GPL-2+ -Files: src/qt/res/icons/add.png - src/qt/res/icons/address-book.png - src/qt/res/icons/chevron.png - src/qt/res/icons/configure.png - src/qt/res/icons/debugwindow.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/filesave.png - src/qt/res/icons/history.png - src/qt/res/icons/info.png - src/qt/res/icons/key.png - src/qt/res/icons/lock_*.png - src/qt/res/icons/open.png - src/qt/res/icons/overview.png - src/qt/res/icons/quit.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 Raptoreumjr -License: Expat -Comment: Inspired by Stephan 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 -Comment: - -Files: src/qt/res/icons/clock*.png - src/qt/res/icons/eye_*.png - src/qt/res/icons/verify.png - src/qt/res/icons/tx_in*.png - src/qt/res/src/clock_*.svg - src/qt/res/src/tx_*.svg - src/qt/res/src/verify.svg -Copyright: Stephan Hutching, Jonas Schnelli -License: Expat -Comment: Modifications of Stephan Hutchings Typicons - -Files: src/qt/res/icons/about.png - src/qt/res/icons/bitcoin.* - share/pixmaps/bitcoin* - src/qt/res/src/bitcoin.svg -Copyright: Bitboy, Jonas Schnelli -License: public-domain -Comment: Site: https://bitcointalk.org/?topic=1756.0 +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 License: Expat Permission is hereby granted, free of charge, to any person obtaining a @@ -106,6 +45,12 @@ License: Expat 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 diff --git a/contrib/debian/examples/raptoreum.conf b/contrib/debian/examples/raptoreum.conf index 1d8873fd63..c7ac9d2db3 100644 --- a/contrib/debian/examples/raptoreum.conf +++ b/contrib/debian/examples/raptoreum.conf @@ -1,7 +1,7 @@ ## ## raptoreum.conf configuration file. Lines beginning with # are comments. ## - + # Network-related settings: # Run on the test network instead of the real raptoreum network. @@ -76,8 +76,8 @@ #rpcuser=Ulysseys #rpcpassword=YourSuperGreatPasswordNumber_DO_NOT_USE_THIS_OR_YOU_WILL_GET_ROBBED_385593 # -# The second method `rpcauth` can be added to server startup argument. It is set at intialization time -# using the output from the script in share/rpcuser/rpcuser.py after providing a username: +# The second method `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: # # ./share/rpcuser/rpcuser.py alice # String to be appended to raptoreum.conf: @@ -93,7 +93,7 @@ # rpcauth=bob:b2dd077cb54591a2f3139e69a897ac$4e71f08d48b4347cf8eff3815c0e25ae2e9a4340474079f55705f40574f4ec99 # How many seconds Raptoreum Core will wait for a complete RPC HTTP request. -# after the HTTP connection is established. +# after the HTTP connection is established. #rpcclienttimeout=30 # By default, only RPC connections from localhost are allowed. @@ -131,7 +131,7 @@ # be validated sooner. #paytxfee=0.00 -# Enable pruning to reduce storage requirements by deleting old blocks. +# Enable pruning to reduce storage requirements by deleting old blocks. # This mode is incompatible with -txindex and -rescan. # 0 = default (no pruning). # 1 = allows manual pruning via RPC. diff --git a/contrib/debian/raptoreum-tx.bash-completion b/contrib/debian/raptoreum-tx.bash-completion deleted file mode 100644 index 72f63d3f99..0000000000 --- a/contrib/debian/raptoreum-tx.bash-completion +++ /dev/null @@ -1 +0,0 @@ -contrib/raptoreum-tx.bash-completion raptoreum-tx diff --git a/contrib/debian/raptoreum-tx.install b/contrib/debian/raptoreum-tx.install deleted file mode 100644 index cd3d92fe83..0000000000 --- a/contrib/debian/raptoreum-tx.install +++ /dev/null @@ -1 +0,0 @@ -usr/local/bin/raptoreum-tx usr/bin diff --git a/contrib/debian/raptoreum-tx.manpages b/contrib/debian/raptoreum-tx.manpages deleted file mode 100644 index 176637e791..0000000000 --- a/contrib/debian/raptoreum-tx.manpages +++ /dev/null @@ -1 +0,0 @@ -doc/man/raptoreum-tx.1 diff --git a/contrib/devtools/README.md b/contrib/devtools/README.md index 9146f6c715..3bf170fbbc 100644 --- a/contrib/devtools/README.md +++ b/contrib/devtools/README.md @@ -2,12 +2,6 @@ Contents ======== This directory contains tools for developers working on this repository. -check-doc.py -============ - -Check if all command line args are documented. The return value indicates the -number of undocumented args. - clang-format-diff.py =================== @@ -85,22 +79,13 @@ 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/ -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)` +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: -`COMMIT` may be omitted, in which case `HEAD` is used. +```bash +BUILDDIR=$PWD/build contrib/devtools/gen-manpages.sh +``` github-merge.py =============== @@ -150,11 +135,11 @@ Perform basic ELF security checks on a series of executables. symbol-check.py =============== -A script to check that the (Linux) executables produced by gitian only contain +A script to check that the (Linux) executables produced by Gitian only contain allowed gcc, glibc and libstdc++ version symbols. This makes sure they are still compatible with the minimum supported Linux distribution versions. -Example usage after a gitian build: +Example usage after a Gitian build: find ../gitian-builder/build -type f -executable | xargs python contrib/devtools/symbol-check.py @@ -178,3 +163,14 @@ It will do the following automatically: - add missing translations to the build system (TODO) See doc/translation-process.md for more information. + +circular-dependencies.py +======================== + +Run this script from the root of the source tree (`src/`) to find circular dependencies in the source code. +This looks only at which files include other files, treating the `.cpp` and `.h` file as one unit. + +Example usage: + + cd .../src + ../contrib/devtools/circular-dependencies.py {*,*/*,*/*/*}.{h,cpp} diff --git a/contrib/devtools/check-doc.py b/contrib/devtools/check-doc.py deleted file mode 100755 index 77ab7c32fa..0000000000 --- a/contrib/devtools/check-doc.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) 2015 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -''' -This checks if all command line args are documented. -Return value is 0 to indicate no error. - -Author: @MarcoFalke -''' - -from subprocess import check_output -import re - -FOLDER_GREP = 'src' -FOLDER_TEST = 'src/test/' -CMD_ROOT_DIR = '`git rev-parse --show-toplevel`/{}'.format(FOLDER_GREP) -CMD_GREP_ARGS = r"egrep -r -I '(map(Multi)?Args(\.count\(|\[)|Get(Bool)?Arg\()\"\-[^\"]+?\"' {} | grep -v '{}'".format(CMD_ROOT_DIR, FOLDER_TEST) -CMD_GREP_DOCS = r"egrep -r -I 'HelpMessageOpt\(\"\-[^\"=]+?(=|\")' {}".format(CMD_ROOT_DIR) -REGEX_ARG = re.compile(r'(?:map(?:Multi)?Args(?:\.count\(|\[)|Get(?:Bool)?Arg\()\"(\-[^\"]+?)\"') -REGEX_DOC = re.compile(r'HelpMessageOpt\(\"(\-[^\"=]+?)(?:=|\")') -# list unsupported, deprecated and duplicate args as they need no documentation -SET_DOC_OPTIONAL = set(['-rpcssl', '-benchmark', '-h', '-help', '-socks', '-tor', '-debugnet', '-whitelistalwaysrelay', '-blockminsize', '-dbcrashratio', '-forcecompactdb']) - -def main(): - used = check_output(CMD_GREP_ARGS, shell=True, universal_newlines=True) - docd = check_output(CMD_GREP_DOCS, shell=True, universal_newlines=True) - - args_used = set(re.findall(REGEX_ARG,used)) - args_docd = set(re.findall(REGEX_DOC,docd)).union(SET_DOC_OPTIONAL) - args_need_doc = args_used.difference(args_docd) - args_unknown = args_docd.difference(args_used) - - print("Args used : {}".format(len(args_used))) - print("Args documented : {}".format(len(args_docd))) - print("Args undocumented: {}".format(len(args_need_doc))) - print(args_need_doc) - print("Args unknown : {}".format(len(args_unknown))) - print(args_unknown) - - exit(len(args_need_doc)) - -if __name__ == "__main__": - main() diff --git a/contrib/devtools/check-rpc-mappings.py b/contrib/devtools/check-rpc-mappings.py new file mode 100755 index 0000000000..c66be05436 --- /dev/null +++ b/contrib/devtools/check-rpc-mappings.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +# Copyright (c) 2017 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +"""Check RPC argument consistency.""" + +from collections import defaultdict +import os +import re +import sys + +# Source files (relative to root) to scan for dispatch tables +SOURCES = [ + "src/rpc/server.cpp", + "src/rpc/blockchain.cpp", + "src/rpc/governance.cpp", + "src/rpc/smartnode.cpp", + "src/rpc/mining.cpp", + "src/rpc/misc.cpp", + "src/rpc/net.cpp", + "src/rpc/privatesend.cpp", + "src/rpc/rawtransaction.cpp", + "src/rpc/rpcevo.cpp", + "src/rpc/rpcquorums.cpp", + "src/wallet/rpcwallet.cpp", +] +# Source file (relative to root) containing conversion mapping +SOURCE_CLIENT = 'src/rpc/client.cpp' +# Argument names that should be ignored in consistency checks +IGNORE_DUMMY_ARGS = {'dummy', 'arg0', 'arg1', 'arg2', 'arg3', 'arg4', 'arg5', 'arg6', 'arg7', 'arg8', 'arg9'} + +class RPCCommand: + def __init__(self, name, args): + self.name = name + self.args = args + +class RPCArgument: + def __init__(self, names, idx): + self.names = names + self.idx = idx + self.convert = False + +def parse_string(s): + assert s[0] == '"' + assert s[-1] == '"' + return s[1:-1] + +def process_commands(fname): + """Find and parse dispatch table in implementation file `fname`.""" + cmds = [] + in_rpcs = False + with open(fname, "r") as f: + for line in f: + line = line.rstrip() + if not in_rpcs: + if re.match("static const CRPCCommand .*\[\] =", line): + in_rpcs = True + else: + if line.startswith('};'): + in_rpcs = False + elif '{' in line and '"' in line: + m = re.search('{ *("[^"]*"), *("[^"]*"), *&([^,]*), *{([^}]*)} *},', line) + assert m, 'No match to table expression: %s' % line + name = parse_string(m.group(2)) + args_str = m.group(4).strip() + if args_str: + args = [RPCArgument(parse_string(x.strip()).split('|'), idx) for idx, x in enumerate(args_str.split(','))] + else: + args = [] + cmds.append(RPCCommand(name, args)) + assert not in_rpcs and cmds, "Something went wrong with parsing the C++ file: update the regexps" + return cmds + +def process_mapping(fname): + """Find and parse conversion table in implementation file `fname`.""" + cmds = [] + in_rpcs = False + with open(fname, "r") as f: + for line in f: + line = line.rstrip() + if not in_rpcs: + if line == 'static const CRPCConvertParam vRPCConvertParams[] =': + in_rpcs = True + else: + if line.startswith('};'): + in_rpcs = False + elif '{' in line and '"' in line: + m = re.search('{ *("[^"]*"), *([0-9]+) *, *("[^"]*") *},', line) + assert m, 'No match to table expression: %s' % line + name = parse_string(m.group(1)) + idx = int(m.group(2)) + argname = parse_string(m.group(3)) + cmds.append((name, idx, argname)) + assert not in_rpcs and cmds + return cmds + +def main(): + root = sys.argv[1] + + # Get all commands from dispatch tables + cmds = [] + for fname in SOURCES: + cmds += process_commands(os.path.join(root, fname)) + + cmds_by_name = {} + for cmd in cmds: + cmds_by_name[cmd.name] = cmd + + # Get current convert mapping for client + client = SOURCE_CLIENT + mapping = set(process_mapping(os.path.join(root, client))) + + print('* Checking consistency between dispatch tables and vRPCConvertParams') + + # Check mapping consistency + errors = 0 + for (cmdname, argidx, argname) in mapping: + try: + rargnames = cmds_by_name[cmdname].args[argidx].names + except IndexError: + print('ERROR: %s argument %i (named %s in vRPCConvertParams) is not defined in dispatch table' % (cmdname, argidx, argname)) + errors += 1 + continue + if argname not in rargnames: + print('ERROR: %s argument %i is named %s in vRPCConvertParams but %s in dispatch table' % (cmdname, argidx, argname, rargnames), file=sys.stderr) + errors += 1 + + # Check for conflicts in vRPCConvertParams conversion + # All aliases for an argument must either be present in the + # conversion table, or not. Anything in between means an oversight + # and some aliases won't work. + for cmd in cmds: + for arg in cmd.args: + convert = [((cmd.name, arg.idx, argname) in mapping) for argname in arg.names] + if any(convert) != all(convert): + print('ERROR: %s argument %s has conflicts in vRPCConvertParams conversion specifier %s' % (cmd.name, arg.names, convert)) + errors += 1 + arg.convert = all(convert) + + # Check for conversion difference by argument name. + # It is preferable for API consistency that arguments with the same name + # have the same conversion, so bin by argument name. + all_methods_by_argname = defaultdict(list) + converts_by_argname = defaultdict(list) + for cmd in cmds: + for arg in cmd.args: + for argname in arg.names: + all_methods_by_argname[argname].append(cmd.name) + converts_by_argname[argname].append(arg.convert) + + for argname, convert in converts_by_argname.items(): + if all(convert) != any(convert): + if argname in IGNORE_DUMMY_ARGS: + # these are testing or dummy, don't warn for them + continue + print('WARNING: conversion mismatch for argument named %s (%s)' % + (argname, list(zip(all_methods_by_argname[argname], converts_by_argname[argname])))) + + sys.exit(errors > 0) + + +if __name__ == '__main__': + main() diff --git a/contrib/devtools/circular-dependencies.py b/contrib/devtools/circular-dependencies.py new file mode 100755 index 0000000000..2e4657f1dd --- /dev/null +++ b/contrib/devtools/circular-dependencies.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 + +import sys +import re + +MAPPING = { + 'core_read.cpp': 'core_io.cpp', + 'core_write.cpp': 'core_io.cpp', +} + +# Directories with header-based modules, where the assumption that .cpp files +# define functions and variables declared in corresponding .h files is +# incorrect. +HEADER_MODULE_PATHS = [ + 'interfaces/' +] + +def module_name(path): + if path in MAPPING: + path = MAPPING[path] + if any(path.startswith(dirpath) for dirpath in HEADER_MODULE_PATHS): + return path + if path.endswith(".h"): + return path[:-2] + if path.endswith(".c"): + return path[:-2] + if path.endswith(".cpp"): + return path[:-4] + return None + +files = dict() +deps = dict() + +RE = re.compile("^#include <(.*)>") + +# Iterate over files, and create list of modules +for arg in sys.argv[1:]: + module = module_name(arg) + if module is None: + print("Ignoring file %s (does not constitute module)\n" % arg) + else: + files[arg] = module + deps[module] = set() + +# Iterate again, and build list of direct dependencies for each module +# TODO: implement support for multiple include directories +for arg in sorted(files.keys()): + module = files[arg] + with open(arg, 'r', encoding="utf8") as f: + for line in f: + match = RE.match(line) + if match: + include = match.group(1) + included_module = module_name(include) + if included_module is not None and included_module in deps and included_module != module: + deps[module].add(included_module) + +# Loop to find the shortest (remaining) circular dependency +have_cycle = False +while True: + shortest_cycle = None + for module in sorted(deps.keys()): + # Build the transitive closure of dependencies of module + closure = dict() + for dep in deps[module]: + closure[dep] = [] + while True: + old_size = len(closure) + old_closure_keys = sorted(closure.keys()) + for src in old_closure_keys: + for dep in deps[src]: + if dep not in closure: + closure[dep] = closure[src] + [src] + if len(closure) == old_size: + break + # If module is in its own transitive closure, it's a circular dependency; check if it is the shortest + if module in closure and (shortest_cycle is None or len(closure[module]) + 1 < len(shortest_cycle)): + shortest_cycle = [module] + closure[module] + if shortest_cycle is None: + break + # We have the shortest circular dependency; report it + module = shortest_cycle[0] + print("Circular dependency: %s" % (" -> ".join(shortest_cycle + [module]))) + # And then break the dependency to avoid repeating in other cycles + deps[shortest_cycle[-1]] = deps[shortest_cycle[-1]] - set([module]) + have_cycle = True + +sys.exit(1 if have_cycle else 0) diff --git a/contrib/devtools/clang-format-diff.py b/contrib/devtools/clang-format-diff.py index ca1bd8854f..77e845a9b4 100755 --- a/contrib/devtools/clang-format-diff.py +++ b/contrib/devtools/clang-format-diff.py @@ -71,7 +71,6 @@ import difflib import io import re -import string import subprocess import sys @@ -153,7 +152,7 @@ def main(): sys.exit(p.returncode) if not args.i: - with open(filename) as f: + with open(filename, encoding="utf8") as f: code = f.readlines() formatted_code = io.StringIO(stdout).readlines() diff = difflib.unified_diff(code, formatted_code, diff --git a/contrib/devtools/copyright_header.py b/contrib/devtools/copyright_header.py index 7b1447a702..8fb18863bf 100755 --- a/contrib/devtools/copyright_header.py +++ b/contrib/devtools/copyright_header.py @@ -25,21 +25,34 @@ 'src/secp256k1/src/java/org_bitcoin_NativeSecp256k1.h', 'src/secp256k1/src/java/org_bitcoin_Secp256k1Context.c', 'src/secp256k1/src/java/org_bitcoin_Secp256k1Context.h', - # auto generated: + # univalue: + 'src/univalue/test/object.cpp', 'src/univalue/lib/univalue_escapes.h', + # auto generated: 'src/qt/bitcoinstrings.cpp', 'src/chainparamsseeds.h', # other external copyrights: 'src/tinyformat.h', 'src/leveldb/util/env_win.cc', 'src/crypto/ctaes/bench.c', + 'src/bench/nanobench.h', 'test/functional/test_framework/bignum.py', # python init: '*__init__.py', ] EXCLUDE_COMPILED = re.compile('|'.join([fnmatch.translate(m) for m in EXCLUDE])) -INCLUDE = ['*.h', '*.cpp', '*.cc', '*.c', '*.py'] +EXCLUDE_DIRS = [ + # git subtrees + "src/crypto/ctaes/", + "src/dashbls/", + "src/leveldb/", + "src/secp256k1/", + "src/univalue/", + "src/crc32c/", +] + +INCLUDE = ['*.h', '*.cpp', '*.cc', '*.c', '*.mm', '*.py', '*.sh', '*.bash-completion'] INCLUDE_COMPILED = re.compile('|'.join([fnmatch.translate(m) for m in INCLUDE])) def applies_to_file(filename): @@ -50,16 +63,22 @@ def applies_to_file(filename): # obtain list of files in repo according to INCLUDE and EXCLUDE ################################################################################ -GIT_LS_CMD = 'git ls-files' +GIT_LS_CMD = 'git ls-files --full-name'.split(' ') +GIT_TOPLEVEL_CMD = 'git rev-parse --show-toplevel'.split(' ') -def call_git_ls(): - out = subprocess.check_output(GIT_LS_CMD.split(' ')) +def call_git_ls(base_directory): + out = subprocess.check_output([*GIT_LS_CMD, base_directory]) return [f for f in out.decode("utf-8").split('\n') if f != ''] -def get_filenames_to_examine(): - filenames = call_git_ls() - return sorted([filename for filename in filenames if - applies_to_file(filename)]) +def call_git_toplevel(): + "Returns the absolute path to the project root" + return subprocess.check_output(GIT_TOPLEVEL_CMD).strip().decode("utf-8") + +def get_filenames_to_examine(base_directory): + "Returns an array of absolute paths to any project files in the base_directory that pass the include/exclude filters" + root = call_git_toplevel() + filenames = call_git_ls(base_directory) + return sorted([os.path.join(root, filename) for filename in filenames if applies_to_file(filename)]) ################################################################################ # define and compile regexes for the patterns we are looking for @@ -85,24 +104,12 @@ def compile_copyright_regex(copyright_style, year_style, name): EXPECTED_HOLDER_NAMES = [ "Satoshi Nakamoto\n", "The Bitcoin Core developers\n", - "The Bitcoin Core developers \n", "Bitcoin Core Developers\n", - "the Bitcoin Core developers\n", - "The Bitcoin developers\n", - "The LevelDB Authors\. All rights reserved\.\n", "BitPay Inc\.\n", - "BitPay, Inc\.\n", "University of Illinois at Urbana-Champaign\.\n", - "MarcoFalke\n", "Pieter Wuille\n", - "Pieter Wuille +\*\n", - "Pieter Wuille, Gregory Maxwell +\*\n", - "Pieter Wuille, Andrew Poelstra +\*\n", - "Andrew Poelstra +\*\n", "Wladimir J. van der Laan\n", "Jeff Garzik\n", - "Diederik Huys, Pieter Wuille +\*\n", - "Thomas Daede, Cory Fields +\*\n", "Jan-Klaas Kollhof\n", "Sam Rushing\n", "ArtForz -- public domain half-a-node\n", @@ -146,7 +153,7 @@ def file_has_without_c_style_copyright_for_holder(contents, holder_name): ################################################################################ def read_file(filename): - return open(os.path.abspath(filename), 'r').read() + return open(filename, 'r', encoding="utf8").read() def gather_file_info(filename): info = {} @@ -260,12 +267,9 @@ def print_report(file_infos, verbose): print(SEPARATOR) def exec_report(base_directory, verbose): - original_cwd = os.getcwd() - os.chdir(base_directory) - filenames = get_filenames_to_examine() + filenames = get_filenames_to_examine(base_directory) file_infos = [gather_file_info(f) for f in filenames] print_report(file_infos, verbose) - os.chdir(original_cwd) ################################################################################ # report cmd @@ -286,7 +290,7 @@ def exec_report(base_directory, verbose): def report_cmd(argv): if len(argv) == 2: sys.exit(REPORT_USAGE) - + base_directory = argv[2] if not os.path.exists(base_directory): sys.exit("*** bad : %s" % base_directory) @@ -325,13 +329,13 @@ def get_most_recent_git_change_year(filename): ################################################################################ def read_file_lines(filename): - f = open(os.path.abspath(filename), 'r') + f = open(filename, 'r', encoding="utf8") file_lines = f.readlines() f.close() return file_lines def write_file_lines(filename, file_lines): - f = open(os.path.abspath(filename), 'w') + f = open(filename, 'w', encoding="utf8") f.write(''.join(file_lines)) f.close() @@ -399,11 +403,8 @@ def update_updatable_copyright(filename): "Copyright updated! -> %s" % last_git_change_year) def exec_update_header_year(base_directory): - original_cwd = os.getcwd() - os.chdir(base_directory) - for filename in get_filenames_to_examine(): + for filename in get_filenames_to_examine(base_directory): update_updatable_copyright(filename) - os.chdir(original_cwd) ################################################################################ # update cmd @@ -444,7 +445,7 @@ def print_file_action_message(filename, action): def update_cmd(argv): if len(argv) != 3: sys.exit(UPDATE_USAGE) - + base_directory = argv[2] if not os.path.exists(base_directory): sys.exit("*** bad base_directory: %s" % base_directory) @@ -506,7 +507,7 @@ def file_has_hashbang(file_lines): def insert_python_header(filename, file_lines, start_year, end_year): if file_has_hashbang(file_lines): - insert_idx = 1 + insert_idx = 1 else: insert_idx = 0 header_lines = get_python_header_lines_to_insert(start_year, end_year) @@ -570,13 +571,13 @@ def insert_cmd(argv): _, extension = os.path.splitext(filename) if extension not in ['.h', '.cpp', '.cc', '.c', '.py']: sys.exit("*** cannot insert for file extension %s" % extension) - - if extension == '.py': + + if extension == '.py': style = 'python' else: style = 'cpp' exec_insert_header(filename, style) - + ################################################################################ # UI ################################################################################ diff --git a/contrib/devtools/gen-manpages.sh b/contrib/devtools/gen-manpages.sh index 3fd68b6034..43cf6cc04c 100755 --- a/contrib/devtools/gen-manpages.sh +++ b/contrib/devtools/gen-manpages.sh @@ -1,12 +1,14 @@ -#!/bin/sh +#!/usr/bin/env bash +export LC_ALL=C TOPDIR=${TOPDIR:-$(git rev-parse --show-toplevel)} -SRCDIR=${SRCDIR:-$TOPDIR/src} +BUILDDIR=${BUILDDIR:-$TOPDIR} + +BINDIR=${BINDIR:-$BUILDDIR/src} MANDIR=${MANDIR:-$TOPDIR/doc/man} BITCOIND=${BITCOIND:-$SRCDIR/raptoreumd} BITCOINCLI=${BITCOINCLI:-$SRCDIR/raptoreum-cli} -BITCOINTX=${BITCOINTX:-$SRCDIR/raptoreum-tx} BITCOINQT=${BITCOINQT:-$SRCDIR/qt/raptoreum-qt} [ ! -x $BITCOIND ] && echo "$BITCOIND not found or not executable." && exit 1 @@ -15,12 +17,12 @@ BITCOINQT=${BITCOINQT:-$SRCDIR/qt/raptoreum-qt} BTCVER=($($BITCOINCLI --version | head -n1 | awk -F'[ -]' '{ print $6, $7 }')) # Create a footer file with copyright content. -# This gets autodetected fine for bitcoind if --version-string is not set, -# but has different outcomes for bitcoin-qt and bitcoin-cli. +# This gets autodetected fine for raptoreumd if --version-string is not set, +# but has different outcomes for raptoreum-qt and raptoreum-cli. echo "[COPYRIGHT]" > footer.h2m $BITCOIND --version | sed -n '1!p' >> footer.h2m -for cmd in $BITCOIND $BITCOINCLI $BITCOINTX $BITCOINQT; do +for cmd in $BITCOIND $BITCOINCLI $BITCOINQT; 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 diff --git a/contrib/devtools/git-subtree-check.sh b/contrib/devtools/git-subtree-check.sh deleted file mode 100755 index 2384d66cad..0000000000 --- a/contrib/devtools/git-subtree-check.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh -# Copyright (c) 2015 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -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 junk; 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 -} - -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 -if [ "d$(git cat-file -t $rev 2>/dev/null)" != dcommit ]; then - echo "ERROR: subtree commit $rev unavailable. Fetch/update the subtree repository" >&2 - exit 2 -fi -tree_subtree=$(git show -s --format="%T" $rev) -echo "$DIR in $COMMIT was last updated to upstream commit $rev (tree $tree_subtree)" -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 -if [ "$tree_actual_tree" != "$tree_subtree" ]; then - git diff-tree $tree_actual_tree $tree_subtree >&2 - echo "FAIL: subtree directory tree doesn't match subtree commit tree" >&2 - exit 1 -fi -echo "GOOD" diff --git a/contrib/devtools/github-merge.py b/contrib/devtools/github-merge.py index c664cf81fa..4e90f85f50 100755 --- a/contrib/devtools/github-merge.py +++ b/contrib/devtools/github-merge.py @@ -20,7 +20,9 @@ import argparse import hashlib import subprocess -import json,codecs +import sys +import json +import codecs try: from urllib.request import Request,urlopen except: @@ -45,7 +47,7 @@ def git_config_get(option, default=None): ''' try: return subprocess.check_output([GIT,'config','--get',option]).rstrip().decode('utf-8') - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: return default def retrieve_pr_info(repo,pull): @@ -158,11 +160,11 @@ def main(): if repo is None: print("ERROR: No repository configured. Use this command to set:", file=stderr) print("git config githubmerge.repository /", file=stderr) - exit(1) + sys.exit(1) if signingkey is None: print("ERROR: No GPG signing key set. Set one using:",file=stderr) print("git config --global user.signingkey ",file=stderr) - exit(1) + sys.exit(1) host_repo = host+":"+repo # shortcut for push/pull target @@ -173,7 +175,7 @@ def main(): # Receive pull information from github info = retrieve_pr_info(repo,pull) if info is None: - exit(1) + sys.exit(1) title = info['title'].strip() body = info['body'].strip() # precedence order for destination branch argument: @@ -189,32 +191,28 @@ def main(): merge_branch = 'pull/'+pull+'/merge' local_merge_branch = 'pull/'+pull+'/local-merge' - devnull = open(os.devnull,'w') + devnull = open(os.devnull, 'w', encoding="utf8") try: subprocess.check_call([GIT,'checkout','-q',branch]) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: print("ERROR: Cannot check out branch %s." % (branch), file=stderr) - exit(3) + sys.exit(3) try: - subprocess.check_call([GIT,'fetch','-q',host_repo,'+refs/pull/'+pull+'/*:refs/heads/pull/'+pull+'/*']) - except subprocess.CalledProcessError as e: - print("ERROR: Cannot find pull request #%s on %s." % (pull,host_repo), file=stderr) - exit(3) + subprocess.check_call([GIT,'fetch','-q',host_repo,'+refs/pull/'+pull+'/*:refs/heads/pull/'+pull+'/*', + '+refs/heads/'+branch+':refs/heads/'+base_branch]) + except subprocess.CalledProcessError: + print("ERROR: Cannot find pull request #%s or branch %s on %s." % (pull,branch,host_repo), file=stderr) + sys.exit(3) try: subprocess.check_call([GIT,'log','-q','-1','refs/heads/'+head_branch], stdout=devnull, stderr=stdout) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: print("ERROR: Cannot find head of pull request #%s on %s." % (pull,host_repo), file=stderr) - exit(3) + sys.exit(3) try: subprocess.check_call([GIT,'log','-q','-1','refs/heads/'+merge_branch], stdout=devnull, stderr=stdout) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: print("ERROR: Cannot find merge of pull request #%s on %s." % (pull,host_repo), file=stderr) - exit(3) - try: - subprocess.check_call([GIT,'fetch','-q',host_repo,'+refs/heads/'+branch+':refs/heads/'+base_branch]) - except subprocess.CalledProcessError as e: - print("ERROR: Cannot find branch %s on %s." % (branch,host_repo), file=stderr) - exit(3) + sys.exit(3) subprocess.check_call([GIT,'checkout','-q',base_branch]) subprocess.call([GIT,'branch','-q','-D',local_merge_branch], stderr=devnull) subprocess.check_call([GIT,'checkout','-q','-b',local_merge_branch]) @@ -233,33 +231,33 @@ def main(): message += '\n\nPull request description:\n\n ' + body.replace('\n', '\n ') + '\n' try: subprocess.check_call([GIT,'merge','-q','--commit','--no-edit','--no-ff','-m',message.encode('utf-8'),head_branch]) - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: print("ERROR: Cannot be merged cleanly.",file=stderr) subprocess.check_call([GIT,'merge','--abort']) - exit(4) + sys.exit(4) logmsg = subprocess.check_output([GIT,'log','--pretty=format:%s','-n','1']).decode('utf-8') if logmsg.rstrip() != firstline.rstrip(): print("ERROR: Creating merge failed (already merged?).",file=stderr) - exit(4) + sys.exit(4) symlink_files = get_symlink_files() for f in symlink_files: print("ERROR: File %s was a symlink" % f) if len(symlink_files) > 0: - exit(4) + sys.exit(4) # Put tree SHA512 into the message try: first_sha512 = tree_sha512sum() message += '\n\nTree-SHA512: ' + first_sha512 - except subprocess.CalledProcessError as e: - printf("ERROR: Unable to compute tree hash") - exit(4) + except subprocess.CalledProcessError: + print("ERROR: Unable to compute tree hash") + sys.exit(4) try: subprocess.check_call([GIT,'commit','--amend','-m',message.encode('utf-8')]) - except subprocess.CalledProcessError as e: - printf("ERROR: Cannot update message.",file=stderr) - exit(4) + except subprocess.CalledProcessError: + print("ERROR: Cannot update message.", file=stderr) + sys.exit(4) print_merge_details(pull, title, branch, base_branch, head_branch) print() @@ -268,7 +266,7 @@ def main(): if testcmd: if subprocess.call(testcmd,shell=True): print("ERROR: Running %s failed." % testcmd,file=stderr) - exit(5) + sys.exit(5) # Show the created merge. diff = subprocess.check_output([GIT,'diff',merge_branch+'..'+local_merge_branch]) @@ -279,7 +277,7 @@ def main(): if reply.lower() == 'ignore': print("Difference with github ignored.",file=stderr) else: - exit(6) + sys.exit(6) else: # Verify the result manually. print("Dropping you on a shell so you can try building/testing the merged source.",file=stderr) @@ -292,7 +290,7 @@ def main(): second_sha512 = tree_sha512sum() if first_sha512 != second_sha512: print("ERROR: Tree hash changed unexpectedly",file=stderr) - exit(8) + sys.exit(8) # Sign the merge commit. print_merge_details(pull, title, branch, base_branch, head_branch) @@ -302,11 +300,11 @@ def main(): try: subprocess.check_call([GIT,'commit','-q','--gpg-sign','--amend','--no-edit']) break - except subprocess.CalledProcessError as e: + except subprocess.CalledProcessError: print("Error while signing, asking again.",file=stderr) elif reply == 'x': print("Not signing off on merge, exiting.",file=stderr) - exit(1) + sys.exit(1) # Put the result in branch. subprocess.check_call([GIT,'checkout','-q',branch]) @@ -326,7 +324,7 @@ def main(): subprocess.check_call([GIT,'push',host_repo,'refs/heads/'+branch]) break elif reply == 'x': - exit(1) + sys.exit(1) if __name__ == '__main__': main() diff --git a/contrib/devtools/lint-all.sh b/contrib/devtools/lint-all.sh new file mode 100755 index 0000000000..b6d86959c6 --- /dev/null +++ b/contrib/devtools/lint-all.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# Copyright (c) 2017 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# This script runs all contrib/devtools/lint-*.sh files, and fails if any exit +# with a non-zero status code. + +set -u + +SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}") +LINTALL=$(basename "${BASH_SOURCE[0]}") + +for f in "${SCRIPTDIR}"/lint-*.sh; do + if [ "$(basename "$f")" != "$LINTALL" ]; then + if ! "$f"; then + echo "^---- failure generated from $f" + exit 1 + fi + fi +done diff --git a/contrib/devtools/lint-whitespace.sh b/contrib/devtools/lint-whitespace.sh new file mode 100755 index 0000000000..7b586420d7 --- /dev/null +++ b/contrib/devtools/lint-whitespace.sh @@ -0,0 +1,88 @@ +#!/bin/bash +# +# Copyright (c) 2017 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# Check for new lines in diff that introduce trailing whitespace. + +# We can't run this check unless we know the commit range for the PR. +if [ -z "${COMMIT_RANGE}" ]; then + echo "Cannot run lint-whitespace.sh without commit range. To run locally, use:" + echo "COMMIT_RANGE='' .lint-whitespace.sh" + echo "For example:" + echo "COMMIT_RANGE='47ba2c3...ee50c9e' .lint-whitespace.sh" + exit 1 +fi + +showdiff() { + if ! git diff -U0 "${COMMIT_RANGE}" -- "." ":(exclude)src/leveldb/" ":(exclude)src/secp256k1/" ":(exclude)src/univalue/" ":(exclude)doc/release-notes/"; then + echo "Failed to get a diff" + exit 1 + fi +} + +showcodediff() { + if ! git diff -U0 "${COMMIT_RANGE}" -- *.cpp *.h *.md *.py *.sh ":(exclude)src/leveldb/" ":(exclude)src/secp256k1/" ":(exclude)src/univalue/" ":(exclude)doc/release-notes/"; then + echo "Failed to get a diff" + exit 1 + fi +} + +RET=0 + +# Check if trailing whitespace was found in the diff. +if showdiff | grep -E -q '^\+.*\s+$'; then + echo "This diff appears to have added new lines with trailing whitespace." + echo "The following changes were suspected:" + FILENAME="" + SEEN=0 + while read -r line; do + if [[ "$line" =~ ^diff ]]; then + FILENAME="$line" + SEEN=0 + elif [[ "$line" =~ ^@@ ]]; then + LINENUMBER="$line" + else + if [ "$SEEN" -eq 0 ]; then + # The first time a file is seen with trailing whitespace, we print the + # filename (preceded by a newline). + echo + echo "$FILENAME" + echo "$LINENUMBER" + SEEN=1 + fi + echo "$line" + fi + done < <(showdiff | grep -E '^(diff --git |@@|\+.*\s+$)') + RET=1 +fi + +# Check if tab characters were found in the diff. +if showcodediff | grep -P -q '^\+.*\t'; then + echo "This diff appears to have added new lines with tab characters instead of spaces." + echo "The following changes were suspected:" + FILENAME="" + SEEN=0 + while read -r line; do + if [[ "$line" =~ ^diff ]]; then + FILENAME="$line" + SEEN=0 + elif [[ "$line" =~ ^@@ ]]; then + LINENUMBER="$line" + else + if [ "$SEEN" -eq 0 ]; then + # The first time a file is seen with a tab character, we print the + # filename (preceded by a newline). + echo + echo "$FILENAME" + echo "$LINENUMBER" + SEEN=1 + fi + echo "$line" + fi + done < <(showcodediff | grep -P '^(diff --git |@@|\+.*\t)') + RET=1 +fi + +exit $RET diff --git a/contrib/devtools/optimize-pngs.py b/contrib/devtools/optimize-pngs.py index 548a9faa53..6a3248efed 100755 --- a/contrib/devtools/optimize-pngs.py +++ b/contrib/devtools/optimize-pngs.py @@ -46,19 +46,18 @@ def content_hash(filename): file_path = os.path.join(absFolder, file) fileMetaMap = {'file' : file, 'osize': os.path.getsize(file_path), 'sha256Old' : file_hash(file_path)} fileMetaMap['contentHashPre'] = content_hash(file_path) - try: subprocess.call([pngcrush, "-brute", "-ow", "-rem", "gAMA", "-rem", "cHRM", "-rem", "iCCP", "-rem", "sRGB", "-rem", "alla", "-rem", "text", file_path], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) except: print("pngcrush is not installed, aborting...") sys.exit(0) - + #verify if "Not a PNG file" in subprocess.check_output([pngcrush, "-n", "-v", file_path], stderr=subprocess.STDOUT, universal_newlines=True): print("PNG file "+file+" is corrupted after crushing, check out pngcursh version") sys.exit(1) - + fileMetaMap['sha256New'] = file_hash(file_path) fileMetaMap['contentHashPost'] = content_hash(file_path) @@ -77,5 +76,5 @@ def content_hash(filename): totalSaveBytes += fileDict['osize'] - fileDict['psize'] noHashChange = noHashChange and (oldHash == newHash) print(fileDict['file']+"\n size diff from: "+str(fileDict['osize'])+" to: "+str(fileDict['psize'])+"\n old sha256: "+oldHash+"\n new sha256: "+newHash+"\n") - + print("completed. Checksum stable: "+str(noHashChange)+". Total reduction: "+str(totalSaveBytes)+" bytes") diff --git a/contrib/devtools/security-check.py b/contrib/devtools/security-check.py index aa73bc61d0..1ef360d6ee 100755 --- a/contrib/devtools/security-check.py +++ b/contrib/devtools/security-check.py @@ -14,7 +14,7 @@ READELF_CMD = os.getenv('READELF', '/usr/bin/readelf') OBJDUMP_CMD = os.getenv('OBJDUMP', '/usr/bin/objdump') -NONFATAL = {'HIGH_ENTROPY_VA'} # checks which are non-fatal for now but only generate a warning +NONFATAL = {} # checks which are non-fatal for now but only generate a warning def check_ELF_PIE(executable): ''' @@ -97,7 +97,7 @@ def check_ELF_RELRO(executable): raise IOError('Error opening file') for line in stdout.splitlines(): tokens = line.split() - if len(tokens)>1 and tokens[1] == '(BIND_NOW)' or (len(tokens)>2 and tokens[1] == '(FLAGS)' and 'BIND_NOW' in tokens[2]): + if len(tokens)>1 and tokens[1] == '(BIND_NOW)' or (len(tokens)>2 and tokens[1] == '(FLAGS)' and 'BIND_NOW' in tokens[2:]): have_bindnow = True return have_gnu_relro and have_bindnow @@ -150,7 +150,7 @@ def check_PE_DYNAMIC_BASE(executable): def check_PE_HIGH_ENTROPY_VA(executable): '''PIE: DllCharacteristics bit 0x20 signifies high-entropy ASLR''' (arch,bits) = get_PE_dll_characteristics(executable) - if arch == 'i386:x86-64': + if arch == 'i386:x86-64': reqbits = IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA else: # Unnecessary on 32-bit assert(arch == 'i386') @@ -211,5 +211,5 @@ def identify_executable(executable): except IOError: print('%s: cannot open' % filename) retval = 1 - exit(retval) + sys.exit(retval) diff --git a/contrib/devtools/symbol-check.py b/contrib/devtools/symbol-check.py index c945fcbde9..e58be5d626 100755 --- a/contrib/devtools/symbol-check.py +++ b/contrib/devtools/symbol-check.py @@ -3,7 +3,7 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. ''' -A script to check that the (Linux) executables produced by gitian only contain +A script to check that the (Linux) executables produced by Gitian only contain allowed gcc, glibc and libstdc++ version symbols. This makes sure they are still compatible with the minimum supported Linux distribution versions. @@ -52,7 +52,7 @@ CPPFILT_CMD = os.getenv('CPPFILT', '/usr/bin/c++filt') # Allowed NEEDED libraries ALLOWED_LIBRARIES = { -# bitcoind and bitcoin-qt +# raptoreumd and raptoreum-qt 'libgcc_s.so.1', # GCC base support 'libc.so.6', # C library 'libpthread.so.0', # threading @@ -61,9 +61,7 @@ 'librt.so.1', # real-time (clock) 'ld-linux-x86-64.so.2', # 64-bit dynamic linker 'ld-linux.so.2', # 32-bit dynamic linker -# bitcoin-qt only -'libX11-xcb.so.1', # part of X11 -'libX11.so.6', # part of X11 +# raptoreum-qt only 'libxcb.so.1', # part of X11 'libfontconfig.so.1', # font support 'libfreetype.so.6', # font parsing @@ -158,6 +156,6 @@ def read_libraries(filename): print('%s: NEEDED library %s is not allowed' % (filename, library_name)) retval = 1 - exit(retval) + sys.exit(retval) diff --git a/contrib/devtools/test-security-check.py b/contrib/devtools/test-security-check.py index 18f9835faa..bb1910415e 100755 --- a/contrib/devtools/test-security-check.py +++ b/contrib/devtools/test-security-check.py @@ -1,16 +1,15 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 # Copyright (c) 2015-2016 The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. ''' Test script for security-check.py ''' -from __future__ import division,print_function import subprocess import unittest def write_testcode(filename): - with open(filename, 'w') as f: + with open(filename, 'w', encoding="utf8") as f: f.write(''' #include int main() @@ -22,7 +21,7 @@ def write_testcode(filename): def call_security_check(cc, source, executable, options): subprocess.check_call([cc,source,'-o',executable] + options) - p = subprocess.Popen(['./security-check.py',executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) + p = subprocess.Popen(['./security-check.py',executable], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, universal_newlines=True) (stdout, stderr) = p.communicate() return (p.returncode, stdout.rstrip()) @@ -33,29 +32,39 @@ def test_ELF(self): cc = 'gcc' write_testcode(source) - self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-zexecstack','-fno-stack-protector','-Wl,-znorelro']), + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-zexecstack','-fno-stack-protector','-Wl,-znorelro','-no-pie','-fno-PIE']), (1, executable+': failed PIE NX RELRO Canary')) - self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-znoexecstack','-fno-stack-protector','-Wl,-znorelro']), + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-znoexecstack','-fno-stack-protector','-Wl,-znorelro','-no-pie','-fno-PIE']), (1, executable+': failed PIE RELRO Canary')) - self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-znoexecstack','-fstack-protector-all','-Wl,-znorelro']), + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-znoexecstack','-fstack-protector-all','-Wl,-znorelro','-no-pie','-fno-PIE']), (1, executable+': failed PIE RELRO')) - self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-znoexecstack','-fstack-protector-all','-Wl,-znorelro','-pie','-fPIE']), + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-znoexecstack','-fstack-protector-all','-Wl,-znorelro','-pie','-fPIE']), (1, executable+': failed RELRO')) - self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-znoexecstack','-fstack-protector-all','-Wl,-zrelro','-Wl,-z,now','-pie','-fPIE']), + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,-znoexecstack','-fstack-protector-all','-Wl,-zrelro','-Wl,-z,now','-pie','-fPIE']), (0, '')) - def test_PE(self): + def test_32bit_PE(self): source = 'test1.c' executable = 'test1.exe' cc = 'i686-w64-mingw32-gcc' write_testcode(source) - self.assertEqual(call_security_check(cc, source, executable, []), - (1, executable+': failed PIE NX')) - self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat']), - (1, executable+': failed PIE')) - self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--dynamicbase']), + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--no-nxcompat','-Wl,--no-dynamicbase']), + (1, executable+': failed DYNAMIC_BASE NX')) + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--no-dynamicbase']), + (1, executable+': failed DYNAMIC_BASE')) + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--dynamicbase']), (0, '')) + def test_64bit_PE(self): + source = 'test1.c' + executable = 'test1.exe' + cc = 'x86_64-w64-mingw32-gcc' + write_testcode(source) + + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--no-nxcompat','-Wl,--no-dynamicbase','-Wl,--no-high-entropy-va']), (1, executable+': failed DYNAMIC_BASE HIGH_ENTROPY_VA NX')) + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--no-dynamicbase','-Wl,--no-high-entropy-va']), (1, executable+': failed DYNAMIC_BASE HIGH_ENTROPY_VA')) + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--dynamicbase','-Wl,--no-high-entropy-va']), (1, executable+': failed HIGH_ENTROPY_VA')) + self.assertEqual(call_security_check(cc, source, executable, ['-Wl,--nxcompat','-Wl,--dynamicbase','-Wl,--high-entropy-va']), (0, '')) if __name__ == '__main__': unittest.main() diff --git a/contrib/devtools/update-css-files.py b/contrib/devtools/update-css-files.py new file mode 100755 index 0000000000..ceb48e0025 --- /dev/null +++ b/contrib/devtools/update-css-files.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python3 +# +# update-css-files.py creates color analyse files in css/colors and updates the +# `` section in all css files. +# +# Copyright (c) 2020 The Dash Core developers +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +from pathlib import Path +import re +import subprocess +import sys + +MATCH_REPLACE = '.+?' +MATCH_COLORS = '#(?:[0-9a-fA-F]{2}){2,4}|#(?:[0-9a-f]{1}){3}' + +def error(msg): + exit('\nERROR: {}\n'.format(msg)) + +def parse_css(file_css): + # Temporarily + state = 0 + selectors = [] + + # Results + by_attribute = {} + by_color = {} + + for line in file_css.read_text().splitlines(): + + if line == '': + continue + + # start of a comment + if state == 0 and line.startswith('/*'): + if '*/' in line: + state = 0 + else: + state = 1 + # we are in a comment section + elif state == 1: + # end of the comment + if '*/' in line: + state = 0 + else: + continue + # first line of multiple selector + elif (state == 0 or state == 2) and ',' in line: + state = 2 + # first line of single selector or end of multiple + elif (state == 0 or state == 2) and '{' in line: + state = 3 + # end of element + elif state == 4 and line == '}': + state = 0 + + if state == 0 and len(selectors): + selectors = [] + + if state == 2: + selector = line.split(",")[0].strip(' ') + selectors.append(selector) + + if state == 3: + selector = line.split("{")[0].strip(' ') + selectors.append(selector) + state = 4 + continue + + if state == 4: + matched_colors = re.findall(MATCH_COLORS, line) + + if len(matched_colors) > 1: + error("Multiple colors in a line.\n\n {}\n\nSeems to be an invalid file!".format(line)) + elif len(matched_colors) == 1: + matched_color = matched_colors[0] + element = line.split(":")[0].strip(' ') + + if not matched_color in by_color: + by_color[matched_color] = [] + + by_color[matched_color].append(element) + + entry = element + " " + matched_color + + if not entry in by_attribute: + by_attribute[entry] = [] + + by_attribute[entry].extend(selectors) + + def sort_color(color): + tmp = color[0].replace('#', '0x') + return int(tmp, 0) + + def remove_duplicates(l): + no_duplicates = [] + [no_duplicates.append(i) for i in l if not no_duplicates.count(i)] + return no_duplicates + + colors = [] + + # sort colors just by hex value + if len(by_color): + colors = sorted(by_color.items(), key=lambda x: sort_color(x)) + + for k, l in by_attribute.items(): + by_attribute[k] = remove_duplicates(l) + + for k, l in by_color.items(): + by_color[k] = remove_duplicates(l) + + return {'fileName': file_css.stem, 'byAttribute': by_attribute, 'byColor': by_color, 'colors': colors} + + +def create_color_file(content, commit): + + str_result = "Color analyse of " +\ + content['fileName'] + ".css " + \ + "by " + \ + Path(__file__).name + \ + " for commit " + \ + commit + \ + "\n\n" + + if not len(content['colors']): + return None + + str_result += "# Used colors\n\n" + for c in content['colors']: + str_result += c[0] + '\n' + + str_result += "\n# Grouped by attribute\n" + + for k, v in content['byAttribute'].items(): + str_result += '\n' + k + '\n' + for val in v: + str_result += ' ' + val + '\n' + + str_result += "\n# Grouped by color\n" + + for k, v in content['byColor'].items(): + str_result += '\n' + k + '\n' + for val in v: + str_result += ' ' + val + '\n' + + return str_result + +if __name__ == '__main__': + + if len(sys.argv) > 1: + error('No argument required!') + + try: + css_folder_path = Path(__file__).parent.absolute() / Path('../../src/qt/res/css/') + css_folder_path = css_folder_path.resolve(strict=True) + except Exception: + error("Path doesn't exist: {}".format(css_folder_path)) + + if not len(list(css_folder_path.glob('*.css'))): + error("No .css files found in {}".format(css_folder_path)) + + results = [parse_css(x) for x in css_folder_path.glob('*.css') if x.is_file()] + + colors_folder_path = css_folder_path / Path('colors/') + if not colors_folder_path.is_dir(): + try: + colors_folder_path.mkdir() + except Exception: + error("Can't create new folder: {}".format(colors_folder_path)) + + commit = subprocess.check_output(['git', '-C', css_folder_path, 'rev-parse', '--short', 'HEAD']).decode("utf-8") + + for r in results: + + # Update the css file + css_file = css_folder_path / Path(r['fileName'] + '.css') + css_content = css_file.read_text() + to_replace = re.findall(MATCH_REPLACE, css_content, re.DOTALL) + + str_result = "\n# Used colors in {}.css for commit {}\n".format(r['fileName'], commit) + for c in r['colors']: + str_result += c[0] + '\n' + + str_replace = "\n{}\n".format(str_result) + css_content = css_content.replace(to_replace[0], str_replace) + css_file.write_text(css_content) + + # Write the _color.txt files + str_result = create_color_file(r, commit) + + if str_result is not None: + color_file = colors_folder_path / Path(r['fileName'] + '_css_colors.txt') + color_file.write_text(str_result) + + print('\n{}.css -> {} created!'.format(r['fileName'], color_file)) + else: + print('\n{}.css -> No colors found..'.format(r['fileName'] + ".css")) diff --git a/contrib/devtools/update-translations.py b/contrib/devtools/update-translations.py index 98d8bc943e..6cf93f4b38 100755 --- a/contrib/devtools/update-translations.py +++ b/contrib/devtools/update-translations.py @@ -35,12 +35,12 @@ def check_at_repository_root(): if not os.path.exists('.git'): print('No .git directory found') print('Execute this script at the root of the repository', file=sys.stderr) - exit(1) + sys.exit(1) def fetch_all_translations(): if subprocess.call([TX, 'pull', '-f', '-a']): print('Error while fetching translations', file=sys.stderr) - exit(1) + sys.exit(1) def find_format_specifiers(s): '''Find all format specifiers in a string.''' diff --git a/contrib/devtools/utxo_snapshot.sh b/contrib/devtools/utxo_snapshot.sh new file mode 100755 index 0000000000..526ff5f0fd --- /dev/null +++ b/contrib/devtools/utxo_snapshot.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2019 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +export LC_ALL=C + +set -ueo pipefail + +if (( $# < 3 )); then + echo 'Usage: utxo_snapshot.sh ' + echo + echo " if is '-', don't produce a snapshot file but instead print the " + echo " expected assumeutxo hash" + echo + echo 'Examples:' + echo + echo " ./contrib/devtools/utxo_snapshot.sh 570000 utxo.dat ./src/raptoreum-cli -datadir=\$(pwd)/testdata" + echo ' ./contrib/devtools/utxo_snapshot.sh 570000 - ./src/raptoreum-cli' + exit 1 +fi + +GENERATE_AT_HEIGHT="${1}"; shift; +OUTPUT_PATH="${1}"; shift; +# Most of the calls we make take a while to run, so pad with a lengthy timeout. +BITCOIN_CLI_CALL="${*} -rpcclienttimeout=9999999" + +# Block we'll invalidate/reconsider to rewind/fast-forward the chain. +PIVOT_BLOCKHASH=$($BITCOIN_CLI_CALL getblockhash $(( GENERATE_AT_HEIGHT + 1 )) ) + +(>&2 echo "Rewinding chain back to height ${GENERATE_AT_HEIGHT} (by invalidating ${PIVOT_BLOCKHASH}); this may take a while") +${BITCOIN_CLI_CALL} invalidateblock "${PIVOT_BLOCKHASH}" + +if [[ "${OUTPUT_PATH}" = "-" ]]; then + (>&2 echo "Generating txoutset info...") + ${BITCOIN_CLI_CALL} gettxoutsetinfo | grep hash_serialized_2 | sed 's/^.*: "\(.\+\)\+",/\1/g' +else + (>&2 echo "Generating UTXO snapshot...") + ${BITCOIN_CLI_CALL} dumptxoutset "${OUTPUT_PATH}" +fi + +(>&2 echo "Restoring chain to original height; this may take a while") +${BITCOIN_CLI_CALL} reconsiderblock "${PIVOT_BLOCKHASH}" diff --git a/contrib/filter-lcov.py b/contrib/filter-lcov.py index 299377d691..df1db76e92 100755 --- a/contrib/filter-lcov.py +++ b/contrib/filter-lcov.py @@ -13,8 +13,8 @@ outfile = args.outfile in_remove = False -with open(tracefile, 'r') as f: - with open(outfile, 'w') as wf: +with open(tracefile, 'r', encoding="utf8") as f: + with open(outfile, 'w', encoding="utf8") as wf: for line in f: for p in pattern: if line.startswith("SF:") and p in line: diff --git a/contrib/gitian-build.py b/contrib/gitian-build.py old mode 100755 new mode 100644 index a8df4d7e5b..09a8b7e901 --- a/contrib/gitian-build.py +++ b/contrib/gitian-build.py @@ -23,13 +23,13 @@ def setup(): exit(1) subprocess.check_call(['sudo', 'apt-get', 'install', '-qq'] + programs) if not os.path.isdir('gitian.sigs'): - subprocess.check_call(['git', 'clone', 'https://github.com/raptoreum/gitian.sigs.git']) + subprocess.check_call(['git', 'clone', 'https://github.com/raptor3um/gitian.sigs.git']) if not os.path.isdir('raptoreum-detached-sigs'): - subprocess.check_call(['git', 'clone', 'https://github.com/raptoreum/raptoreum-detached-sigs.git']) + subprocess.check_call(['git', 'clone', 'https://github.com/raptor3um/raptoreum-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('raptoreum'): - subprocess.check_call(['git', 'clone', 'https://github.com/raptoreum/raptoreum.git']) + subprocess.check_call(['git', 'clone', 'https://github.com/raptor3um/raptoreum.git']) os.chdir('gitian-builder') make_image_prog = ['bin/make-base-vm', '--suite', 'bionic', '--arch', 'amd64'] if args.docker: @@ -138,7 +138,7 @@ def main(): parser = argparse.ArgumentParser(usage='%(prog)s [options] signer version') 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/raptoreum/raptoreum', help='Specify the URL of the repository. Default is %(default)s') + parser.add_argument('-u', '--url', dest='url', default='https://github.com/raptor3um/raptoreum', 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') diff --git a/contrib/gitian-descriptors/README.md b/contrib/gitian-descriptors/README.md index deeef7d3ed..f71eb49556 100644 --- a/contrib/gitian-descriptors/README.md +++ b/contrib/gitian-descriptors/README.md @@ -1,4 +1,4 @@ -### Gavin's notes on getting gitian builds up and running using KVM +### Gavin's notes on getting Gitian builds up and running using KVM These instructions distilled from [https://help.ubuntu.com/community/KVM/Installation](https://help.ubuntu.com/community/KVM/Installation). @@ -19,7 +19,7 @@ Sanity checks: Once you've got the right hardware and software: - git clone git://github.com/raptoreum/raptoreum.git + git clone git://github.com/raptor3um/raptoreum.git git clone git://github.com/devrandom/gitian-builder.git mkdir gitian-builder/inputs cd gitian-builder/inputs @@ -56,10 +56,10 @@ Here's a description of Gavin's setup on OSX 10.6: 4. Inside the running Ubuntu desktop, install: - sudo apt-get install debootstrap lxc ruby apache2 git apt-cacher-ng python-vm-builder + sudo apt-get install debootstrap lxc ruby apache2 git apt-cacher-ng python-vm-builder 5. Still inside Ubuntu, tell gitian-builder to use LXC, then follow the "Once you've got the right hardware and software" instructions above: export USE_LXC=1 - git clone git://github.com/raptoreum/raptoreum.git + git clone git://github.com/raptor3um/raptor3um.git ... etc diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml old mode 100755 new mode 100644 index ae22f2dafe..5b8f326577 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -23,7 +23,6 @@ packages: - "autoconf" - "libtool" - "automake" -- "cmake" - "faketime" - "bsdmainutils" - "ca-certificates" @@ -32,7 +31,7 @@ packages: - "libxkbcommon0" - "ccache" remotes: -- "url": "https://github.com/raptoreum/raptoreum.git" +- "url": "https://github.com/raptor3um/raptoreum.git" "dir": "raptoreum" files: [] script: | @@ -47,6 +46,7 @@ script: | HOST_LDFLAGS=-static-libstdc++ export QT_RCC_TEST=1 + export QT_RCC_SOURCE_DATE_OVERRIDE=1 export GZIP="-9n" export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" export TZ="UTC" @@ -80,7 +80,7 @@ script: | function create_global_faketime_wrappers { for prog in ${FAKETIME_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} echo "# GCCVERSION=${GCCVERSION}" >> ${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} @@ -94,7 +94,7 @@ script: | function create_per-host_faketime_wrappers { for i in $HOSTS; do for prog in ${FAKETIME_HOST_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} echo "# GCCVERSION=${GCCVERSION}" >> ${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} @@ -126,7 +126,7 @@ script: | for prog in gcc g++; do rm -f ${WRAP_DIR}/${prog} cat << EOF > ${WRAP_DIR}/${prog} - #!/bin/bash + #!/usr/bin/env bash # GCCVERSION=${GCCVERSION} REAL="`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1`" for var in "\$@" diff --git a/contrib/gitian-descriptors/gitian-osx-signer.yml b/contrib/gitian-descriptors/gitian-osx-signer.yml index 3bc633a089..e8936eb4f8 100644 --- a/contrib/gitian-descriptors/gitian-osx-signer.yml +++ b/contrib/gitian-descriptors/gitian-osx-signer.yml @@ -7,7 +7,7 @@ architectures: packages: - "faketime" remotes: -- "url": "https://github.com/raptoreum/raptoreum-detached-sigs.git" +- "url": "https://github.com/raptor3um/raptoreum-detached-sigs.git" "dir": "signature" files: - "raptoreumcore-osx-unsigned.tar.gz" @@ -19,7 +19,7 @@ script: | # Create global faketime wrappers for prog in ${FAKETIME_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${prog} + 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} diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml index 6075ff1e48..fbb608f8b8 100644 --- a/contrib/gitian-descriptors/gitian-osx.yml +++ b/contrib/gitian-descriptors/gitian-osx.yml @@ -1,5 +1,5 @@ --- -name: "raptoreum-osx-0.15" +name: "raptoreum-osx-0.17" enable_cache: true suites: - "bionic" @@ -18,7 +18,6 @@ packages: - "automake" - "faketime" - "bsdmainutils" -- "cmake" - "imagemagick" - "libcap-dev" - "libz-dev" @@ -31,18 +30,19 @@ packages: - "fonts-tuffy" - "ccache" remotes: -- "url": "https://github.com/raptoreum/raptoreum.git" +- "url": "https://github.com/raptor3um/raptoreum.git" "dir": "raptoreum" files: - "MacOSX10.11.sdk.tar.gz" script: | WRAP_DIR=$HOME/wrapped - HOSTS="x86_64-apple-darwin11" + HOSTS="x86_64-apple-darwin14" CONFIGFLAGS="--enable-reduce-exports --disable-miner --disable-bench --disable-gui-tests GENISOIMAGE=$WRAP_DIR/genisoimage --enable-crash-hooks" FAKETIME_HOST_PROGS="" FAKETIME_PROGS="ar ranlib date dmg genisoimage" export QT_RCC_TEST=1 + export QT_RCC_SOURCE_DATE_OVERRIDE=1 export GZIP="-9n" export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" export TZ="UTC" @@ -73,7 +73,7 @@ script: | function create_global_faketime_wrappers { for prog in ${FAKETIME_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${prog} + 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} @@ -86,7 +86,7 @@ script: | function create_per-host_faketime_wrappers { for i in $HOSTS; do for prog in ${FAKETIME_HOST_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog} + 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} @@ -186,8 +186,8 @@ script: | done mkdir -p $OUTDIR/src mv $SOURCEDIST $OUTDIR/src - mv ${OUTDIR}/${DISTNAME}-x86_64-apple-darwin11.tar.gz ${OUTDIR}/${DISTNAME}-osx64.tar.gz - mv ${OUTDIR}/${DISTNAME}-x86_64-apple-darwin11-debug.tar.gz ${OUTDIR}/${DISTNAME}-osx64-debug.tar.gz + mv ${OUTDIR}/${DISTNAME}-x86_64-apple-darwin14.tar.gz ${OUTDIR}/${DISTNAME}-osx64.tar.gz + mv ${OUTDIR}/${DISTNAME}-x86_64-apple-darwin14-debug.tar.gz ${OUTDIR}/${DISTNAME}-osx64-debug.tar.gz # Compress ccache (otherwise the assert file will get too huge) if [ "$CCACHE_DIR" != "" ]; then diff --git a/contrib/gitian-descriptors/gitian-win-signer.yml b/contrib/gitian-descriptors/gitian-win-signer.yml index f7ed67b682..4cffe595f7 100644 --- a/contrib/gitian-descriptors/gitian-win-signer.yml +++ b/contrib/gitian-descriptors/gitian-win-signer.yml @@ -11,7 +11,7 @@ packages: - "libtool" - "pkg-config" remotes: -- "url": "https://github.com/raptoreum/raptoreum-detached-sigs.git" +- "url": "https://github.com/raptor3um/raptoreum-detached-sigs.git" "dir": "signature" files: - "osslsigncode-2.0.tar.gz" diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml old mode 100755 new mode 100644 index ad1d1fc733..94038fe1e2 --- a/contrib/gitian-descriptors/gitian-win.yml +++ b/contrib/gitian-descriptors/gitian-win.yml @@ -1,5 +1,5 @@ --- -name: "raptoreum-win-0.15" +name: "raptoreum-win-0.17" enable_cache: true suites: - "bionic" @@ -13,7 +13,6 @@ packages: - "autoconf" - "libtool" - "automake" -- "cmake" - "faketime" - "bsdmainutils" - "mingw-w64" @@ -26,7 +25,7 @@ packages: - "rename" - "ccache" remotes: -- "url": "https://github.com/raptoreum/raptoreum.git" +- "url": "https://github.com/raptor3um/raptoreum.git" "dir": "raptoreum" files: [] script: | @@ -39,6 +38,7 @@ script: | HOST_CXXFLAGS="-O2 -g" export QT_RCC_TEST=1 + export QT_RCC_SOURCE_DATE_OVERRIDE=1 export GZIP="-9n" export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME"" export TZ="UTC" @@ -72,7 +72,7 @@ script: | function create_global_faketime_wrappers { for prog in ${FAKETIME_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} echo "# GCCVERSION=${GCCVERSION}" >> ${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} @@ -86,7 +86,7 @@ script: | function create_per-host_faketime_wrappers { for i in $HOSTS; do for prog in ${FAKETIME_HOST_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} echo "# GCCVERSION=${GCCVERSION}" >> ${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} @@ -104,7 +104,7 @@ script: | for i in $HOSTS; do mkdir -p ${WRAP_DIR}/${i} for prog in collect2; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}/${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}/${prog} echo "# GCCVERSION=${GCCVERSION}" >> ${WRAP_DIR}/${i}/${prog} REAL=$(${i}-gcc -print-prog-name=${prog}) echo "export MALLOC_PERTURB_=255" >> ${WRAP_DIR}/${i}/${prog} @@ -113,7 +113,7 @@ script: | touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${i}/${prog} done for prog in gcc g++; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} echo "# GCCVERSION=${GCCVERSION}" >> ${WRAP_DIR}/${i}-${prog} echo "REAL=\`which -a ${i}-${prog}-posix | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} echo '# Add the gcc version to the wrapper so that ccache takes this into account (we use CCACHE_COMPILERCHECK=content)' >> ${WRAP_DIR}/${i}-${prog} diff --git a/contrib/gitian-keys/README.md b/contrib/gitian-keys/README.md index 439910330d..4b0b7a2615 100644 --- a/contrib/gitian-keys/README.md +++ b/contrib/gitian-keys/README.md @@ -3,7 +3,7 @@ PGP keys This folder contains the public keys of developers and active contributors. -The keys are mainly used to sign git commits or the build results of gitian +The keys are mainly used to sign git commits or the build results of Gitian builds. You can import the keys into gpg as follows. Also, make sure to fetch the diff --git a/contrib/gitian-keys/dustinface.pgp b/contrib/gitian-keys/dustinface.pgp new file mode 100644 index 0000000000..5ca47295d7 --- /dev/null +++ b/contrib/gitian-keys/dustinface.pgp @@ -0,0 +1,51 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +xsFNBF7RsuoBEACnCaQNZ34cBCz9SrNN6WV/y9t3+Il6Oewpk4YJ4NaWyx7Jdf9t +68XLBQrOxWI/+jTNz2KHVFLEg8tdIPL30A2mgamyo170uwneywAFitE9PDzEYTjc +chVoPQNNjgzxoP/icdEyLZfZfpMPU6deClmNOAJqMizv8wlkTA81S6AWEwUyiBM2 +pR0cXraXVZ7yKzUKbV9HauBLqHX43xf/Oxb3HS8y6iXokW0GEqJAry7gXFX6neJ5 +PSeDM0Egzb2Th85UzjhlX18xf8zCuN0YweVKPXBhbnw9dSwGgvbKtV39vjCZCatA ++X9onE7nqj/FXisNW/BoFsacyZ5P5W3EHq2B1QkXZDX9xy0SlcobFVmo0QN1rjeT +266+YjSmiheMkaQITs9fGdu21zL7Z0tlElmTXmrv7flYHrHpYzcASnraYcadJLpv +337NLdHo9SqulpHRI75FhxzfxeR8zb6aokDFCrtm39AOXKlixjUlW76kRF6fnMkf +LasCK9TVlpQUDfKJEwBEjRQ0u2F1OkAa7N0RD+aMfmgSD2BO0E6KbwB2QIR+QRa/ +jGByk3Opqa+1fIfSr5o9DK9eG9lXz9Vq+KL6aygQh/umR8VW3oDcnPSJqD3j1FAt +vyv+y3G9P79FgeFTKRfWOXWLJLcv+ropEa4FjeImHnqh6xpbek5aCBFPzwARAQAB +zSNEdXN0aW5mYWNlIDx4ZHVzdGluZmFjZXhAZ21haWwuY29tPsLBeAQTAQgALAUC +XtGy6gkQoAeMcrF3dhYCGwMFCR4TOAACGQEECwcJAwUVCAoCAwQWAAECAAAoFBAA +imuzksH/yy89X7FmjI05Lh0vTAylcHxqEjx85p75lb5IdU2wWbOVZuMkG6GOyzko +kKRIai35MG3uFUXIxkKPeWunQT69bTsyOeRKpZrT6OS5WqnU8bttfi3ipP+SxJU/ +4rFpVxiRI9KtamrJMv0ZKEuVsaMy3Vb2WLbBA+uKHl2MhgXCHMYmA2kSqwHQponh +QPYglYI3aw+YV+mZEn3bJYLHH/VxprG6C9aOsugS4KPlfZt4dcf4rzErQCoRQkt1 +IxdsyLOwXsH2thDBVeN1cIQxBc7RSo5CwvRsrxOPBnw7jU3jzgAHkMtHE3nG7sUK +r3Ay2QiScTax/gvNr65uqYa7KCGGjd94YQlFDn9tzhfGiquAXjPJj7SXQAoo+gcF +y1b06mBLE1GZ5uzFYg6Xa9jnbjoEMBvuAhVNVmGrUABTlpH7p0OgjjQwgKWJQ8b4 +Z4mR7yzwiZcSSvUmq7pEQ/aWKgDJo7EaJoGQyfx+DRFoDPsh0oSWs/MkSGkoTxad +Z3Dbn6BR9r2vipX/KM4MQEYBPlBMOjWvtlxtj9LnsQRX3sMy+HddxUCjy5NSwA1/ +jlm6e8p5zeWV0xkRihawFAFTibJcXDjaTJ4oMpZdxv9FWvLJ/Kt3aHlTyp91vwc1 +qtVVdhzh0nXhXlHikpGljBjDEciL0HSwjHbXgOVswcnOwU0EXtGy6gEQAMZ3F72B +J66PCQXA1Y40/Oxv3hMWRMcHPvjcOQGqtvs6rgM52g4H68wqXMdsBwZZWv3rnwmi +cI5vzzSWhCSltr/8x1uVGARiMRbhyoEdilwJpHJB4eHmPyNU5/Bj7tuLvPAahrHG +QYCWKlMDmACWm4NOc8GOexo6OCfK98emHVA7ZC6PoC801gsmrNy+gLeAgwgwB8ru +um7r97W3G0AVmev3voYKci+NUe+acVZQm+Fx6sYnYEkXxUBWkFmvM+FdEIOQTzkl +1aGrM3cAlfjFeYiu4prBRdNlfymaRobUEURfB687LTnSEcMIP4rEZ21gSSA2W0+l +BmOorCAcmUyOzzflv0Kw6TUu/tVj09kICrp8P7HxkHINBHq/3adSYYYih7VXb4YM +Ol8wKF1kxjbooZQZQu1vWOE54wn0IWY4A3sW0GT4FD4Bep0hu2rf8tNRg3cCHlz2 +2Ck7sD//kjTiv5aZg/VYZDTj2w6rdeMiWBbtp9KGmxMVS5hKSvcmeMZcPI5bH0KY +z0yMg0iADKp+6NjbfvFOf7uyIXrzEPguIij/GbSFFkRjVnJ5PtL+uwACQIZbI3qG +p1vFU3/yI2OdN9c/9nPZENvgoBlMjBUOQ0x4C2giaoa3MLp1K/ZhzizaBhZJ+Kdv +86mseijswDcGc2JOLXVp6/nLgan+Jb/fsGcNABEBAAHCwXUEGAEIACkFAl7RsuoJ +EKAHjHKxd3YWAhsMBQkeEzgABAsHCQMFFQgKAgMEFgABAgAAY40QAIrofyWybJ6L +pqopZ7Tk7Wylf6752EnHa77dzgb1QLyTanPoyYQyNK66RTc1Xe4bXcfBZXMctqyB +eR7oJwfI9J18svt96hYN8PRvVgKFkj0MZUmyGz+2qqKgXbBnfR9MsWgTBYRclsI+ +z7fwhqs8mMaXENACNeGORxUqVU6wn+d9CK5EmYr5JaV+RXKZQdr0p8MxmjvnpE+1 +eow1hl/oRe7FesUmn5xznDbCrF5Jf0PIliAYhzX34A48Z7iDo5/Mwd64xQoxAYlQ +B/wk6+gunJKw6RbiTtLKP4l4FQTyZ1FeGDsiPm2f/cYic4uizPrWfEaRJNBsVLVq +W81ngcWFzJJKKg1blyJ+3/jkOkiD28PCHVfDAHfVsafSGHKF72r9PJPFQ8zkLhdl +0BPkUnsXY1D5IpkJcJjzJ9KbSCoZeDZ/skOr9/yuKSGpFpH6L7APQbd7T90mMwXl +qr+M98fMAkSDWcw2fQsQMOT5I2Zc1cEpJvD9mzQ7R5zegnfN9++q0+2lNY5uOFus +IQU72RSaWYopzOcO5LKLxDxrmgIEbFRORun7E9rIZu4MBTtdnPTYqE8zE50G8eQ5 +k+gWyglMKSnjXg7WJknsDtBAeHWyjI2ASyFwcRmzzOHlyUx6TzZNMmahBCIzZucj +qbRoo5XtAtn1JmG5SUusU9CoTCfo6NaR +=7UE4 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/gitian-keys/thephez.pgp b/contrib/gitian-keys/thephez.pgp new file mode 100644 index 0000000000..6a252e2018 --- /dev/null +++ b/contrib/gitian-keys/thephez.pgp @@ -0,0 +1,51 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBFlnyosBEADPxor0suVPon713tlBFjpSF7iS/52BzmbRBg8HTb3BMW5hy+GW +Ex+C2HCS3CFuEn1qG9HuG8/qtBBen4uHtEy4gNBlSNQ7kH/HLk0n1fzH/Y3yXwuQ +K8nmJekPCsEKuuGLxrfiY102ZRLmC6ASOnzdQOCqpNlVJn+igWIwguwK9jpNG6KK +fG53RtwYfqdgEISm7gniEQHyREjL1KFvFxoG92kHmuk4cwrOT3lYZAUaH4H5HPHZ +xyrLqQBnhdbjBekLXNrkshg0heXHRFeTHNuL6RckFPiOkbDkBQfso9CqUQaxJjLo +z/FIvuifU3o67kx+2D24SfWWELSsueN+KhY0XyjjPftNptpFHLyRoobA/p38dnbS +tGI7u4pAUYzkalLFs/BU+UWstteTXkFNRHaaevBUwIfo3rai2+EQmeLJzVmcLOWZ +6VDOUAB2/uE6D5g0LzGEd0SNrI92StQjPnBl8PBo/Ox3BUpnNiXd2WzGkHEaZT/z +l71tc1PrmOOCjT1NBpjVpNiu81+dqZBR+S0ZakUyKn0tCrWxVBgqQYNU0cif5MdH +yPmfjsmkYZ9bb/HHqw78lpsE5zM2Vb9oYDJ+bwHbAChOpG+EKs2wq9zQtSVJdBDz +oVxrYKsjSIL2JvH5uD8UA1JzqxmsiZ0HhqI6lgfc/7QOKxtY01x7Q4ko9wARAQAB +tBt0aGVwaGV6IDx0aGVwaGV6QGdtYWlsLmNvbT6JAjgEEwEIACwFAllnyosJEGMX +8B5vSRByAhsDBQkeEzgAAhkBBAsHCQMFFQgKAgMEFgABAgAAx7oQAIcazwz8LrU+ +pFyMVpgqxHbv4KWvcPD4UfRwiGVN7Sa5C2CIaYxyzswh10UIY9m/3+ClIIP+UpkO ++CTMmjYHNer4r/aB/24wdB0LKL/5fv6JNI7RooD/GsxHbajH/W11zSmMqg2xfdBB +tz+cKF9fZsgJKZbmDJIVE+oCGneqLKwFQkDb10NdsRimZIK39e4lH2u2iV6XVK3D +K3dSDh9fWtBLd82IAZQO33sK75FKRfYnYCuJq5okfFd4DEq4P3eYZ4H6+j9IjFgp +F1eqM2va929ou2ZvkzUob0N2FBWpKAmQvrY45oXRk32nRKWGc5JvDNcaLrxiXRkv +Eb6nEwHIHlfv/O6ijF2qywgeqPtliuSmLa1Jb1yvw62JilRR7QVLwGeT6XYkIYvd +5UB18gmEN+sanwlYjewPc8w5lXBrCApXt6Iuvs6SIFx5rO/y+ItB4enMDvpf3yyz +ehewo2IpPoX8MKHV+wCJlqN1wlBbsm5M7u//Js4Fz2gNG8rrnRu58BSZOFnhBsIU +TXBQ/43LaTemnJJZHR3pV1K/LROIHt+l+TWYnrhTFiiXLbWnVIiV2Y6tfr/N0mHb +eqTFZTbToNngb4vLvSsbxsDtRJMVHdl9xXu3UHFz6Xent2qWrKImIzYhcF6FDD0V +BhyRl9X4Du+XzzbKS60PcaY7TJuMn0CxuQINBFlnyosBEADxBHmjFOSDQl3ZdoGl +RlTGd98/xiSgordkg8xIWaQkzRjeGGNaWj34BN4O0gHQut8XYB3i0AWc4o+xKM/q +cRRgZMf0Ucfo+VYuoxrIHK9OPGnw4nP09kEG/Ygoj1P4+ZM0yqhAIcZIpOYUxvOU +f8X5Bn+p4dr9vhjcggnEu76YJNz0wJyH5IJufrSoH5uztLjLwawvZBMKpTpPTkhd +BQgEbcRT6O7D7uk0kxx+SHuDmz+etm4FZ8BE5nN+qxrQl+wys4IQ6ZQ5DQkyzfqK +Tgcr7y/PQf2Pt5Op+46tFjrT2yUxedBlPv2f+0S7AXqbFm0rI86G6LHcYxgrePZF +5d3OErCHaE+Duje+zv8oWqciBr7pxzZXC7kwYwViK0EXsy2up5aWutjB7Dx1iwZr +2OtPmnBFNAV/BiTruHT9HDDRxOAWnYXhd+GbolgR//IKaJIR+g+BKqNu/bLMlyUe +SyMdvpuPweVPmnaUKJ/MBC5VRUf+5Xk05mhcvmivdqutZUKJCKIEV9N872gMk33o +6AwsmAcVdgw/2IwuPoTsAm31ywzquihMXvO8ImFZX/yxG3C1DhR+0h7QM+k7DxMG +fwfO0dm16OCJtVbYd9BLqL/IaZ5ehZm/ax6rOmCB7Oowtn9Cus64RLY789ACzZef +yaRe/MvJzhyHNfa61NE1J+2NZwARAQABiQI1BBgBCAApBQJZZ8qLCRBjF/Aeb0kQ +cgIbDAUJHhM4AAQLBwkDBRUICgIDBBYAAQIAAPH3D/93gOiZdgXILu5VXVHiLgu2 +u8dt4jPl09ATZ59ZpH85CZfodD5MfW5TfW7eKdIUrNmWvK1mIFeebr3QDK96Eu/F +jnT1maF6H8y9yq9VW6X9UDM9xkTbqqc+y6+86FcGceUe+CQYS9FFAl5osAmvxwxo +QRKpW67WsAsxt4EMpdRY38T2Q/ISVc8eI4iNi5XJznLkV5P6KJtO6DAvZeaMeKhp +pqstxFJ9wKRoKxIISOruoye/qzcQNdGjHWtbGarGnX+wJIIQ/hRPpxFY4ccDbG1Z +BYAzgE0YM2L0WwzxuYv3HoRtM1cYuDsuVFhN9Rhep6P/rI03Ryj4Yz/iridIS8lF +9z8GkbUtEPxNvsUOoXhIKSKp8PHto1tjZEitPwRiIeO726b5F/vsni5jKuFN5pSt +e2AVP16Nq5U08YpPTlYDSgs3ToFs6kCSJftxZULhrKSrfEATYEdXn4GfMcPRT12y +QzUivr19D4lNEYnTivCij3As4jSIv9hJFLEqmleQoT/YOEUH2R+PDRhrila4FF6b +JeZ0OBmo5qJDD0zbMELpscE24dqbnNhYx10Gl5iYokjxsldTS6l5H8ds2LvaYyz1 +YYjNsBO0v3KyzXbfyr4BKP3mldGF7SrPBY/gIA+NcvnjItTDsh6FUCBYyC296lgg +KEr7LyKDPE88ohzj3oERoA== +=etY5 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/contrib/init/org.raptoreum.dashd.plist b/contrib/init/org.raptoreum.dashd.plist index 87f6213340..6b0d9ce40c 100644 --- a/contrib/init/org.raptoreum.dashd.plist +++ b/contrib/init/org.raptoreum.dashd.plist @@ -7,7 +7,6 @@ ProgramArguments /usr/local/bin/raptoreumd - -daemon RunAtLoad diff --git a/contrib/init/raptoreumd.conf b/contrib/init/raptoreumd.conf index 4d51cb98fc..3eb79a8e57 100644 --- a/contrib/init/raptoreumd.conf +++ b/contrib/init/raptoreumd.conf @@ -30,12 +30,12 @@ pre-start script 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 "You can generate a suitable random password using the following " echo "command from the shell:" echo echo "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'" echo - echo "It is also recommended that you also set alertnotify so you are " + echo "It is recommended that you also set alertnotify so you are " echo "notified of problems:" echo echo "ie: alertnotify=echo %%s | mail -s \"Raptoreum Core Alert\"" \ diff --git a/contrib/init/raptoreumd.init b/contrib/init/raptoreumd.init index 0d488f2c4e..23e6d6bed7 100644 --- a/contrib/init/raptoreumd.init +++ b/contrib/init/raptoreumd.init @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # raptoreumd The Raptoreum Core server. # diff --git a/contrib/init/raptoreumd.openrc b/contrib/init/raptoreumd.openrc index c976ebcd9a..0c2c8e1112 100644 --- a/contrib/init/raptoreumd.openrc +++ b/contrib/init/raptoreumd.openrc @@ -76,12 +76,12 @@ checkconfig() eerror "" eerror "This password is security critical to securing wallets " eerror "and must not be the same as the rpcuser setting." - eerror "You can generate a suitable random password using the following" + eerror "You can generate a suitable random password using the following " eerror "command from the shell:" eerror "" eerror "bash -c 'tr -dc a-zA-Z0-9 < /dev/urandom | head -c32 && echo'" eerror "" - eerror "It is also recommended that you also set alertnotify so you are " + eerror "It is recommended that you also set alertnotify so you are " eerror "notified of problems:" eerror "" eerror "ie: alertnotify=echo %%s | mail -s \"Raptoreum Core Alert\"" \ diff --git a/contrib/init/raptoreumd.openrcconf b/contrib/init/raptoreumd.openrcconf index 2d9068c3d5..d5da5fd953 100644 --- a/contrib/init/raptoreumd.openrcconf +++ b/contrib/init/raptoreumd.openrcconf @@ -25,7 +25,7 @@ # Additional options (avoid -conf and -datadir, use flags above) #BITCOIND_OPTS="" -# The timeout in seconds OpenRC will wait for bitcoind to terminate +# The timeout in seconds OpenRC will wait for raptoreumd to terminate # after a SIGTERM has been raised. # Note that this will be mapped as argument to start-stop-daemon's # '--retry' option, which means you can specify a retry schedule diff --git a/contrib/linearize/README.md b/contrib/linearize/README.md index a79b49202c..1f9b076476 100644 --- a/contrib/linearize/README.md +++ b/contrib/linearize/README.md @@ -4,7 +4,7 @@ run using Python 3 but are compatible with Python 2. ## Step 0: Install raptoreum_hash -https://github.com/raptoreum/raptoreum_hash +https://github.com/raptor3um/raptoreum_hash ## Step 1: Download hash list @@ -50,7 +50,7 @@ linearize-hashes.py. (Default: `1000*1000*1000 bytes`) * `netmagic`: Network magic number. (default is 'bf0c6bbd', mainnet) * `out_of_order_cache_sz`: If out-of-order blocks are being read, the block can -be written to a cache so that the blockchain doesn't have to be seeked again. +be written to a cache so that the blockchain doesn't have to be sought again. This option specifies the cache size. (Default: `100*1000*1000 bytes`) * `rev_hash_bytes`: If true, the block hash list written by linearize-hashes.py will be byte-reversed when read by linearize-data.py. See the linearize-hashes diff --git a/contrib/linearize/example-linearize-testnet.cfg b/contrib/linearize/example-linearize-testnet.cfg index bfdfea32a2..bad538afc9 100644 --- a/contrib/linearize/example-linearize-testnet.cfg +++ b/contrib/linearize/example-linearize-testnet.cfg @@ -1,5 +1,5 @@ -# bitcoind RPC settings (linearize-hashes) +# raptoreumd RPC settings (linearize-hashes) rpcuser=someuser rpcpassword=somepassword host=127.0.0.1 diff --git a/contrib/linearize/example-linearize.cfg b/contrib/linearize/example-linearize.cfg index 883c6c180e..a0a9aefb9a 100644 --- a/contrib/linearize/example-linearize.cfg +++ b/contrib/linearize/example-linearize.cfg @@ -1,7 +1,7 @@ -# bitcoind RPC settings (linearize-hashes) +# raptoreumd RPC settings (linearize-hashes) rpcuser=someuser rpcpassword=somepassword -#datadir=~/.bitcoin +#datadir=~/.dashcore host=127.0.0.1 port=9998 diff --git a/contrib/linearize/linearize-data.py b/contrib/linearize/linearize-data.py index 0539a84cf8..28b38bc9b1 100755 --- a/contrib/linearize/linearize-data.py +++ b/contrib/linearize/linearize-data.py @@ -22,37 +22,41 @@ settings = {} -##### Switch endian-ness ##### def hex_switchEndian(s): - """ Switches the endianness of a hex string (in pairs of hex chars) """ - pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)] - return b''.join(pairList[::-1]).decode() + """ Switches the endianness of a hex string (in pairs of hex chars) """ + pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)] + return b''.join(pairList[::-1]).decode() def uint32(x): - return x & 0xffffffff + return x & 0xffffffff def bytereverse(x): - return uint32(( ((x) << 24) | (((x) << 8) & 0x00ff0000) | - (((x) >> 8) & 0x0000ff00) | ((x) >> 24) )) + return uint32(( ((x) << 24) | (((x) << 8) & 0x00ff0000) | + (((x) >> 8) & 0x0000ff00) | ((x) >> 24) )) def bufreverse(in_buf): - out_words = [] - for i in range(0, len(in_buf), 4): - word = struct.unpack('@I', in_buf[i:i+4])[0] - out_words.append(struct.pack('@I', bytereverse(word))) - return b''.join(out_words) + out_words = [] + for i in range(0, len(in_buf), 4): + word = struct.unpack('@I', in_buf[i:i+4])[0] + out_words.append(struct.pack('@I', bytereverse(word))) + return b''.join(out_words) def wordreverse(in_buf): - out_words = [] - for i in range(0, len(in_buf), 4): - out_words.append(in_buf[i:i+4]) - out_words.reverse() - return b''.join(out_words) + out_words = [] + for i in range(0, len(in_buf), 4): + out_words.append(in_buf[i:i+4]) + out_words.reverse() + return b''.join(out_words) def calc_hdr_hash(blk_hdr): - #hash1 = hashlib.sha256() - #hash1.update(blk_hdr) - #hash1_o = hash1.digest() + #hash1 = hashlib.sha256() + #hash1.update(blk_hdr) + #hash1_o = hash1.digest() + + #hash2 = hashlib.sha256() + #hash2.update(hash1_o) + #hash2_o = hash2.digest() + #hash2 = hashlib.sha256() #hash2.update(hash1_o) @@ -63,263 +67,263 @@ def calc_hdr_hash(blk_hdr): return pow_hash def calc_hash_str(blk_hdr): - hash = calc_hdr_hash(blk_hdr) - hash = bufreverse(hash) - hash = wordreverse(hash) - hash_str = hexlify(hash).decode('utf-8') - return hash_str + hash = calc_hdr_hash(blk_hdr) + hash = bufreverse(hash) + hash = wordreverse(hash) + hash_str = hexlify(hash).decode('utf-8') + return hash_str def get_blk_dt(blk_hdr): - members = struct.unpack(" self.maxOutSz): - self.outF.close() - if self.setFileTime: - os.utime(self.outFname, (int(time.time()), self.highTS)) - self.outF = None - self.outFname = None - self.outFn = self.outFn + 1 - self.outsz = 0 - - (blkDate, blkTS) = get_blk_dt(blk_hdr) - if self.timestampSplit and (blkDate > self.lastDate): - print("New month " + blkDate.strftime("%Y-%m") + " @ " + self.hash_str) - self.lastDate = blkDate - if self.outF: - self.outF.close() - if self.setFileTime: - os.utime(self.outFname, (int(time.time()), self.highTS)) - self.outF = None - self.outFname = None - self.outFn = self.outFn + 1 - self.outsz = 0 - - if not self.outF: - if self.fileOutput: - self.outFname = self.settings['output_file'] - else: - self.outFname = os.path.join(self.settings['output'], "blk%05d.dat" % self.outFn) - print("Output file " + self.outFname) - self.outF = open(self.outFname, "wb") - - self.outF.write(inhdr) - self.outF.write(blk_hdr) - self.outF.write(rawblock) - self.outsz = self.outsz + len(inhdr) + len(blk_hdr) + len(rawblock) - - self.blkCountOut = self.blkCountOut + 1 - if blkTS > self.highTS: - self.highTS = blkTS - - if (self.blkCountOut % 1000) == 0: - print('%i blocks scanned, %i blocks written (of %i, %.1f%% complete)' % - (self.blkCountIn, self.blkCountOut, len(self.blkindex), 100.0 * self.blkCountOut / len(self.blkindex))) - - def inFileName(self, fn): - return os.path.join(self.settings['input'], "blk%05d.dat" % fn) - - def fetchBlock(self, extent): - '''Fetch block contents from disk given extents''' - with open(self.inFileName(extent.fn), "rb") as f: - f.seek(extent.offset) - return f.read(extent.size) - - def copyOneBlock(self): - '''Find the next block to be written in the input, and copy it to the output.''' - extent = self.blockExtents.pop(self.blkCountOut) - if self.blkCountOut in self.outOfOrderData: - # If the data is cached, use it from memory and remove from the cache - rawblock = self.outOfOrderData.pop(self.blkCountOut) - self.outOfOrderSize -= len(rawblock) - else: # Otherwise look up data on disk - rawblock = self.fetchBlock(extent) - - self.writeBlock(extent.inhdr, extent.blkhdr, rawblock) - - def run(self): - while self.blkCountOut < len(self.blkindex): - if not self.inF: - fname = self.inFileName(self.inFn) - print("Input file " + fname) - try: - self.inF = open(fname, "rb") - except IOError: - print("Premature end of block data") - return - - inhdr = self.inF.read(8) - if (not inhdr or (inhdr[0] == "\0")): - self.inF.close() - self.inF = None - self.inFn = self.inFn + 1 - continue - - inMagic = inhdr[:4] - if (inMagic != self.settings['netmagic']): - print("Invalid magic: " + hexlify(inMagic).decode('utf-8')) - return - inLenLE = inhdr[4:] - su = struct.unpack(" self.maxOutSz): + self.outF.close() + if self.setFileTime: + os.utime(self.outFname, (int(time.time()), self.highTS)) + self.outF = None + self.outFname = None + self.outFn = self.outFn + 1 + self.outsz = 0 + + (blkDate, blkTS) = get_blk_dt(blk_hdr) + if self.timestampSplit and (blkDate > self.lastDate): + print("New month " + blkDate.strftime("%Y-%m") + " @ " + self.hash_str) + self.lastDate = blkDate + if self.outF: + self.outF.close() + if self.setFileTime: + os.utime(self.outFname, (int(time.time()), self.highTS)) + self.outF = None + self.outFname = None + self.outFn = self.outFn + 1 + self.outsz = 0 + + if not self.outF: + if self.fileOutput: + self.outFname = self.settings['output_file'] + else: + self.outFname = os.path.join(self.settings['output'], "blk%05d.dat" % self.outFn) + print("Output file " + self.outFname) + self.outF = open(self.outFname, "wb") + + self.outF.write(inhdr) + self.outF.write(blk_hdr) + self.outF.write(rawblock) + self.outsz = self.outsz + len(inhdr) + len(blk_hdr) + len(rawblock) + + self.blkCountOut = self.blkCountOut + 1 + if blkTS > self.highTS: + self.highTS = blkTS + + if (self.blkCountOut % 1000) == 0: + print('%i blocks scanned, %i blocks written (of %i, %.1f%% complete)' % + (self.blkCountIn, self.blkCountOut, len(self.blkindex), 100.0 * self.blkCountOut / len(self.blkindex))) + + def inFileName(self, fn): + return os.path.join(self.settings['input'], "blk%05d.dat" % fn) + + def fetchBlock(self, extent): + '''Fetch block contents from disk given extents''' + with open(self.inFileName(extent.fn), "rb") as f: + f.seek(extent.offset) + return f.read(extent.size) + + def copyOneBlock(self): + '''Find the next block to be written in the input, and copy it to the output.''' + extent = self.blockExtents.pop(self.blkCountOut) + if self.blkCountOut in self.outOfOrderData: + # If the data is cached, use it from memory and remove from the cache + rawblock = self.outOfOrderData.pop(self.blkCountOut) + self.outOfOrderSize -= len(rawblock) + else: # Otherwise look up data on disk + rawblock = self.fetchBlock(extent) + + self.writeBlock(extent.inhdr, extent.blkhdr, rawblock) + + def run(self): + while self.blkCountOut < len(self.blkindex): + if not self.inF: + fname = self.inFileName(self.inFn) + print("Input file " + fname) + try: + self.inF = open(fname, "rb") + except IOError: + print("Premature end of block data") + return + + inhdr = self.inF.read(8) + if (not inhdr or (inhdr[0] == "\0")): + self.inF.close() + self.inF = None + self.inFn = self.inFn + 1 + continue + + inMagic = inhdr[:4] + if (inMagic != self.settings['netmagic']): + print("Invalid magic: " + hexlify(inMagic).decode('utf-8')) + return + inLenLE = inhdr[4:] + su = struct.unpack("" echo "example: $0 -s MyIdentity" exit 1 @@ -22,7 +23,7 @@ fi rm -rf ${TEMPDIR} ${TEMPLIST} mkdir -p ${TEMPDIR} -${CODESIGN} -f --file-list ${TEMPLIST} "$@" "${BUNDLE}" +${CODESIGN} -f --file-list ${TEMPLIST} -o runtime "$@" "${BUNDLE}" grep -v CodeResources < "${TEMPLIST}" | while read i; do TARGETFILE="${BUNDLE}/`echo "${i}" | sed "s|.*${BUNDLE}/||"`" @@ -40,7 +41,7 @@ grep CodeResources < "${TEMPLIST}" | while read i; do RESOURCE="${TEMPDIR}/${OUTROOT}/${TARGETFILE}" DIRNAME="`dirname "${RESOURCE}"`" mkdir -p "${DIRNAME}" - echo "Adding resource for: "${TARGETFILE}"" + echo "Adding resource for: \"${TARGETFILE}\"" cp "${i}" "${RESOURCE}" done diff --git a/contrib/macdeploy/extract-osx-sdk.sh b/contrib/macdeploy/extract-osx-sdk.sh index ff9fbd58df..4c175156f4 100755 --- a/contrib/macdeploy/extract-osx-sdk.sh +++ b/contrib/macdeploy/extract-osx-sdk.sh @@ -1,8 +1,9 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright (c) 2016 The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. +export LC_ALL=C set -e INPUTFILE="Xcode_7.3.1.dmg" diff --git a/contrib/macdeploy/fancy.plist b/contrib/macdeploy/fancy.plist deleted file mode 100644 index 178455c75a..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 - - Raptoreum-Qt.app - - 128 - 156 - - - - diff --git a/contrib/macdeploy/macdeployqtplus b/contrib/macdeploy/macdeployqtplus index 20815ff23c..e23f056e1f 100755 --- a/contrib/macdeploy/macdeployqtplus +++ b/contrib/macdeploy/macdeployqtplus @@ -16,9 +16,15 @@ # along with this program. If not, see . # -import subprocess, sys, re, os, shutil, stat, os.path, time +import plistlib +import sys, re, os, platform, shutil, stat, subprocess, os.path from string import Template from argparse import ArgumentParser +from ds_store import DSStore +from mac_alias import Alias +from pathlib import Path +from subprocess import PIPE, run +from typing import List, Optional # This is ported from the original macdeployqt with modifications @@ -48,29 +54,18 @@ class FrameworkInfo(object): 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) - + return f""" Framework name: {frameworkName} + Framework directory: {self.frameworkDirectory} + Framework path: {self.frameworkPath} + Binary name: {self.binaryName} + Binary directory: {self.binaryDirectory} + Binary path: {self.binaryPath} + Version: {self.version} + Install name: {self.installName} + Deployed install name: {self.deployedInstallName} + Source file Path: {self.sourceFilePath} + Deployed Directory (relative to bundle): {self.destinationDirectory} + """ def isDylib(self): return self.frameworkName.endswith(".dylib") @@ -85,7 +80,7 @@ class FrameworkInfo(object): bundleBinaryDirectory = "Contents/MacOS" @classmethod - def fromOtoolLibraryLine(cls, line): + def fromOtoolLibraryLine(cls, line: str) -> Optional['FrameworkInfo']: # Note: line must be trimmed if line == "": return None @@ -96,7 +91,7 @@ class FrameworkInfo(object): m = cls.reOLine.match(line) if m is None: - raise RuntimeError("otool line could not be parsed: " + line) + raise RuntimeError(f"otool line could not be parsed: {line}") path = m.group(1) @@ -116,7 +111,7 @@ class FrameworkInfo(object): info.version = "-" info.installName = path - info.deployedInstallName = "@executable_path/../Frameworks/" + info.binaryName + info.deployedInstallName = f"@executable_path/../Frameworks/{info.binaryName}" info.sourceFilePath = path info.destinationDirectory = cls.bundleFrameworkDirectory else: @@ -128,7 +123,7 @@ class FrameworkInfo(object): break i += 1 if i == len(parts): - raise RuntimeError("Could not find .framework or .dylib in otool line: " + line) + raise RuntimeError(f"Could not find .framework or .dylib in otool line: {line}") info.frameworkName = parts[i] info.frameworkDirectory = "/".join(parts[:i]) @@ -139,25 +134,24 @@ class FrameworkInfo(object): 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.deployedInstallName = f"@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): + def __init__(self, path: str): self.path = path - appName = "Raptoreum-Qt" - self.binaryPath = os.path.join(path, "Contents", "MacOS", appName) + # for backwards compatibility reasons, this must remain as Raptoreum-Qt + self.binaryPath = os.path.join(path, "Contents", "MacOS", "Raptoreum-Qt") if not os.path.exists(self.binaryPath): - raise RuntimeError("Could not find bundle binary for " + path) + raise RuntimeError(f"Could not find bundle binary for {path}") self.resourcesPath = os.path.join(path, "Contents", "Resources") self.pluginPath = os.path.join(path, "Contents", "PlugIns") @@ -167,17 +161,11 @@ class DeploymentInfo(object): self.pluginPath = None self.deployedFrameworks = [] - def detectQtPath(self, frameworkDirectory): + def detectQtPath(self, frameworkDirectory: str): 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 - elif os.path.exists(os.path.join(parentDir, "share", "qt4", "translations")): - # MacPorts layout, e.g. "/opt/local/share/qt4" - self.qtPath = os.path.join(parentDir, "share", "qt4") - elif os.path.exists(os.path.join(os.path.dirname(parentDir), "share", "qt4", "translations")): - # Newer Macports layout - self.qtPath = os.path.join(os.path.dirname(parentDir), "share", "qt4") else: self.qtPath = os.getenv("QTDIR", None) @@ -186,31 +174,27 @@ class DeploymentInfo(object): if os.path.exists(pluginPath): self.pluginPath = pluginPath - def usesFramework(self, name): - nameDot = "%s." % name - libNameDot = "lib%s." % name + def usesFramework(self, name: str) -> bool: for framework in self.deployedFrameworks: if framework.endswith(".framework"): - if framework.startswith(nameDot): + if framework.startswith(f"{name}."): return True elif framework.endswith(".dylib"): - if framework.startswith(libNameDot): + if framework.startswith(f"lib{name}."): return True return False -def getFrameworks(binaryPath, verbose): - if verbose >= 3: - print("Inspecting with otool: " + binaryPath) +def getFrameworks(binaryPath: str, verbose: int) -> List[FrameworkInfo]: + if verbose: + print(f"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() + otool = run([otoolbin, "-L", binaryPath], stdout=PIPE, stderr=PIPE, universal_newlines=True) 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) + sys.stderr.write(otool.stderr) + sys.stderr.flush() + raise RuntimeError(f"otool failed with return code {otool.returncode}") - otoolLines = o_stdout.split("\n") + otoolLines = otool.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. @@ -220,50 +204,50 @@ def getFrameworks(binaryPath, verbose): line = line.replace("@loader_path", os.path.dirname(binaryPath)) info = FrameworkInfo.fromOtoolLibraryLine(line.strip()) if info is not None: - if verbose >= 3: + if verbose: 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 runInstallNameTool(action: str, *args): + installnametoolbin=os.getenv("INSTALL_NAME_TOOL", "install_name_tool") + run([installnametoolbin, "-"+action] + list(args), check=True) -def changeInstallName(oldName, newName, binaryPath, verbose): - if verbose >= 3: +def changeInstallName(oldName: str, newName: str, binaryPath: str, verbose: int): + if verbose: 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: +def changeIdentification(id: str, binaryPath: str, verbose: int): + if verbose: print("Using install_name_tool:") print(" change identification in", binaryPath) print(" to", id) runInstallNameTool("id", id, binaryPath) -def runStrip(binaryPath, verbose): +def runStrip(binaryPath: str, verbose: int): stripbin=os.getenv("STRIP", "strip") - if verbose >= 3: + if verbose: print("Using strip:") print(" stripped", binaryPath) - subprocess.check_call([stripbin, "-x", binaryPath]) + run([stripbin, "-x", binaryPath], check=True) -def copyFramework(framework, path, verbose): +def copyFramework(framework: FrameworkInfo, path: str, verbose: int) -> Optional[str]: if framework.sourceFilePath.startswith("Qt"): #standard place for Nokia Qt installer's frameworks - fromPath = "/Library/Frameworks/" + framework.sourceFilePath + fromPath = f"/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) + raise RuntimeError(f"No file at {fromPath}") if os.path.exists(toPath): return None # Already there @@ -272,7 +256,7 @@ def copyFramework(framework, path, verbose): os.makedirs(toDir) shutil.copy2(fromPath, toPath) - if verbose >= 3: + if verbose: print("Copied:", fromPath) print(" to:", toPath) @@ -286,13 +270,12 @@ def copyFramework(framework, path, verbose): linkto = framework.version if not os.path.exists(linkfrom): os.symlink(linkto, linkfrom) - if verbose >= 2: - print("Linked:", linkfrom, "->", linkto) + 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: + if verbose: print("Copied resources:", fromResourcesDir) print(" to:", toResourcesDir) fromContentsDir = framework.sourceVersionContentsDirectory @@ -301,7 +284,7 @@ def copyFramework(framework, path, verbose): if os.path.exists(fromContentsDir): toContentsDir = os.path.join(path, framework.destinationVersionContentsDirectory) shutil.copytree(fromContentsDir, toContentsDir, symlinks=True) - if verbose >= 3: + if verbose: print("Copied Contents:", fromContentsDir) print(" to:", toContentsDir) elif framework.frameworkName.startswith("libQtGui"): # Copy qt_menu.nib (applies to non-framework layout) @@ -309,13 +292,13 @@ def copyFramework(framework, path, verbose): 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: + if verbose: print("Copied for libQtGui:", qtMenuNibSourcePath) print(" to:", qtMenuNibDestinationPath) return toPath -def deployFrameworks(frameworks, bundlePath, binaryPath, strip, verbose, deploymentInfo=None): +def deployFrameworks(frameworks: List[FrameworkInfo], bundlePath: str, binaryPath: str, strip: bool, verbose: int, deploymentInfo: Optional[DeploymentInfo] = None) -> DeploymentInfo: if deploymentInfo is None: deploymentInfo = DeploymentInfo() @@ -323,16 +306,14 @@ def deployFrameworks(frameworks, bundlePath, binaryPath, strip, verbose, deploym framework = frameworks.pop(0) deploymentInfo.deployedFrameworks.append(framework.frameworkName) - if verbose >= 2: - print("Processing", framework.frameworkName, "...") + 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.") + print(framework.frameworkName, "already deployed, skipping.") continue # install_name_tool the new id into the binary @@ -361,15 +342,15 @@ def deployFrameworks(frameworks, bundlePath, binaryPath, strip, verbose, deploym return deploymentInfo -def deployFrameworksForAppBundle(applicationBundle, strip, verbose): +def deployFrameworksForAppBundle(applicationBundle: ApplicationBundleInfo, strip: bool, verbose: int) -> DeploymentInfo: 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)) + if len(frameworks) == 0: + print(f"Warning: Could not find any external frameworks to deploy in {applicationBundle.path}.") return DeploymentInfo() else: return deployFrameworks(frameworks, applicationBundle.path, applicationBundle.binaryPath, strip, verbose) -def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): +def deployPlugins(appBundleInfo: ApplicationBundleInfo, deploymentInfo: DeploymentInfo, strip: bool, verbose: int): # Lookup available plugins, exclude unneeded plugins = [] if deploymentInfo.pluginPath is None: @@ -379,10 +360,12 @@ def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): 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 == "printsupport": + # Skip printsupport plugins + continue + elif pluginDirectory == "imageformats": + # Skip imageformats plugins + continue elif pluginDirectory == "sqldrivers": # Deploy the sql plugins only if QtSql is in use if not deploymentInfo.usesFramework("QtSql"): @@ -415,6 +398,42 @@ def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): # Deploy the mediaservice plugins only if QtMultimediaWidgets is in use if not deploymentInfo.usesFramework("QtMultimediaWidgets"): continue + elif pluginDirectory == "canbus": + # Deploy the canbus plugins only if QtSerialBus is in use + if not deploymentInfo.usesFramework("QtSerialBus"): + continue + elif pluginDirectory == "webview": + # Deploy the webview plugins only if QtWebView is in use + if not deploymentInfo.usesFramework("QtWebView"): + continue + elif pluginDirectory == "gamepads": + # Deploy the webview plugins only if QtGamepad is in use + if not deploymentInfo.usesFramework("QtGamepad"): + continue + elif pluginDirectory == "geoservices": + # Deploy the webview plugins only if QtLocation is in use + if not deploymentInfo.usesFramework("QtLocation"): + continue + elif pluginDirectory == "texttospeech": + # Deploy the texttospeech plugins only if QtTextToSpeech is in use + if not deploymentInfo.usesFramework("QtTextToSpeech"): + continue + elif pluginDirectory == "virtualkeyboard": + # Deploy the virtualkeyboard plugins only if QtVirtualKeyboard is in use + if not deploymentInfo.usesFramework("QtVirtualKeyboard"): + continue + elif pluginDirectory == "sceneparsers": + # Deploy the virtualkeyboard plugins only if Qt3DCore is in use + if not deploymentInfo.usesFramework("Qt3DCore"): + continue + elif pluginDirectory == "renderplugins": + # Deploy the renderplugins plugins only if Qt3DCore is in use + if not deploymentInfo.usesFramework("Qt3DCore"): + continue + elif pluginDirectory == "geometryloaders": + # Deploy the geometryloaders plugins only if Qt3DCore is in use + if not deploymentInfo.usesFramework("Qt3DCore"): + continue for pluginName in filenames: pluginPath = os.path.join(pluginDirectory, pluginName) @@ -437,12 +456,15 @@ def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): # Deploy the accessible qtquick plugin only if QtQuick is in use if not deploymentInfo.usesFramework("QtQuick"): continue + elif pluginPath == "platforminputcontexts/libqtvirtualkeyboardplugin.dylib": + # Deploy the virtualkeyboardplugin plugin only if QtVirtualKeyboard is in use + if not deploymentInfo.usesFramework("QtVirtualKeyboard"): + continue plugins.append((pluginDirectory, pluginName)) for pluginDirectory, pluginName in plugins: - if verbose >= 2: - print("Processing plugin", os.path.join(pluginDirectory, pluginName), "...") + print("Processing plugin", os.path.join(pluginDirectory, pluginName), "...") sourcePath = os.path.join(deploymentInfo.pluginPath, pluginDirectory, pluginName) destinationDirectory = os.path.join(appBundleInfo.pluginPath, pluginDirectory) @@ -451,7 +473,7 @@ def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): destinationPath = os.path.join(destinationDirectory, pluginName) shutil.copy2(sourcePath, destinationPath) - if verbose >= 3: + if verbose: print("Copied:", sourcePath) print(" to:", destinationPath) @@ -467,146 +489,50 @@ def deployPlugins(appBundleInfo, deploymentInfo, strip, verbose): 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'""") +Optionally, Qt translation files (.qm) can be added to the bundle.""") 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("appname", nargs=1, metavar="addname", help="name of the app being depoloyed") +ap.add_argument("-verbose", nargs="?", const=True, help="Output additional debugging information") 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") +ap.add_argument("-dmg", nargs="?", const="", metavar="basename", help="create a .dmg disk image") +ap.add_argument("-translations-dir", nargs=1, metavar="path", default=None, help="Path to Qt's translations. Base translations will automatically be added to the bundle's resources.") config = ap.parse_args() -verbose = config.verbose[0] +verbose = config.verbose # ------------------------------------------------ app_bundle = config.app_bundle[0] +appname = config.appname[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.stderr.write("Error: Could not find app bundle \"{app_bundle}\"\n") 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 +") - + print("+ Removing old dist folder +") shutil.rmtree("dist") -# ------------------------------------------------ - -if len(config.volname) == 1: - volname = config.volname[0] -else: - volname = app_bundle_name +if os.path.exists(appname + ".dmg"): + print("+ Removing existing DMG +") + os.unlink(appname + ".dmg") # ------------------------------------------------ target = os.path.join("dist", "Raptoreum-Qt.app") -if verbose >= 2: - print("+ Copying source bundle +") -if verbose >= 3: +print("+ Copying source bundle +") +if verbose: print(app_bundle, "->", target) os.mkdir("dist") @@ -616,258 +542,160 @@ applicationBundle = ApplicationBundleInfo(target) # ------------------------------------------------ -if verbose >= 2: - print("+ Deploying frameworks +") +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") + 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.stderr.write(f"Error: {str(e)}\n") sys.exit(1) # ------------------------------------------------ if config.plugins: - if verbose >= 2: - print("+ Deploying plugins +") + 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.stderr.write(f"Error: {str(e)}\n") 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 config.translations_dir: + if not Path(config.translations_dir[0]).exists(): + sys.stderr.write(f"Error: Could not find translation dir \"{config.translations_dir[0]}\"\n") + sys.exit(1) + +print("+ Adding Qt translations +") + +translations = Path(config.translations_dir[0]) + +regex = re.compile('qt_[a-z]*(.qm|_[A-Z]*.qm)') + +lang_files = [x for x in translations.iterdir() if regex.match(x.name)] + +for file in lang_files: + if verbose: + print(file.as_posix(), "->", os.path.join(applicationBundle.resourcesPath, file.name)) + shutil.copy2(file.as_posix(), os.path.join(applicationBundle.resourcesPath, file.name)) # ------------------------------------------------ -if verbose >= 2: - print("+ Installing qt.conf +") +print("+ Installing qt.conf +") + +qt_conf="""[Paths] +Translations=Resources +Plugins=Plugind +""" 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)) +print("+ Generating .DS_Store +") + +output_file = os.path.join("dist", ".DS_Store") + +ds = DSStore.open(output_file, 'w+') + +ds['.']['bwsp'] = { + 'WindowBounds': '{{300, 280}, {500, 343}}', + 'PreviewPaneVisibility': False, +} + +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\x07bitcoin\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 = appname +alias.volume.posix_path = '/Volumes/' + appname +icvp['backgroundImageAlias'] = alias.to_bytes() +ds['.']['icvp'] = icvp + +ds['.']['vSrn'] = ('long', 1) + +ds['Applications']['Iloc'] = (370, 156) +ds['Raptoreum-Qt.app']['Iloc'] = (128, 156) + +ds.flush() +ds.close() # ------------------------------------------------ -if len(config.add_resources) > 0 and verbose >= 2: - print("+ Adding additional resources +") +if platform.system() == "Darwin": + subprocess.check_call(f"codesign --deep --force --sign - {target}", shell=True) -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) +print("+ Installing background.tiff +") + +bg_path = os.path.join('dist', '.background', 'background.tiff') +os.mkdir(os.path.dirname(bg_path)) + +tiff_path = os.path.join('contrib', 'macdeploy', 'background.tiff') +shutil.copy2(tiff_path, bg_path) # ------------------------------------------------ -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) +print("+ Generating symlink for /Applications +") + +os.symlink("/Applications", os.path.join('dist', "Applications")) # ------------------------------------------------ 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 +") + 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) - - time.sleep(2) # fixes '112:116: execution error: Finder got an error: Can’t get disk "Raptoreum-Core". (-1728)' - 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: + 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: + print("Creating temp image for modification...") + + tempname: str = appname + ".temp.dmg" + + run(["hdiutil", "create", tempname, "-srcfolder", "dist", "-format", "UDRW", "-size", str(size), "-volname", appname], check=True, universal_newlines=True) + + if verbose: + print("Attaching temp image...") + output = run(["hdiutil", "attach", tempname, "-readwrite"], check=True, universal_newlines=True, stdout=PIPE).stdout + + print("+ Finalizing .dmg disk image +") + + run(["hdiutil", "detach", f"/Volumes/{appname}"], universal_newlines=True) + + run(["hdiutil", "convert", tempname, "-format", "UDZO", "-o", appname, "-imagekey", "zlib-level=9"], check=True, universal_newlines=True) + + os.unlink(tempname) # ------------------------------------------------ -if verbose >= 2: - print("+ Done +") +print("+ Done +") sys.exit(0) diff --git a/contrib/qos/README.md b/contrib/qos/README.md index bcbdbc7d2f..46cd977b60 100644 --- a/contrib/qos/README.md +++ b/contrib/qos/README.md @@ -2,4 +2,4 @@ This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Raptoreum network. It limits outbound TCP traffic with a source or destination port of 9999, but not if the destination IP is within a LAN. -This means one can have an always-on bitcoind instance running, and another local bitcoind/bitcoin-qt instance which connects to this node and receives blocks from it. +This means one can have an always-on raptoreumd instance running, and another local raptoreumd/raptoreum-qt instance which connects to this node and receives blocks from it. diff --git a/contrib/qos/tc.sh b/contrib/qos/tc.sh index fd5539ff94..101fe21215 100644 --- a/contrib/qos/tc.sh +++ b/contrib/qos/tc.sh @@ -2,6 +2,7 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. +export LC_ALL=C #network interface on which to limit traffic IF="eth0" #limit of the network interface in question @@ -30,7 +31,7 @@ tc class add dev ${IF} parent 1:1 classid 1:11 htb rate ${LIMIT} ceil ${LIMIT} p tc filter add dev ${IF} parent 1: protocol ip prio 1 handle 1 fw classid 1:10 tc filter add dev ${IF} parent 1: protocol ip prio 2 handle 2 fw classid 1:11 -if [ ! -z "${LOCALNET_V6}" ] ; then +if [ -n "${LOCALNET_V6}" ] ; then # v6 cannot have the same priority value as v4 tc filter add dev ${IF} parent 1: protocol ipv6 prio 3 handle 1 fw classid 1:10 tc filter add dev ${IF} parent 1: protocol ipv6 prio 4 handle 2 fw classid 1:11 @@ -53,7 +54,7 @@ fi iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 9999 ! -d ${LOCALNET_V4} -j MARK --set-mark 0x2 iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 9999 ! -d ${LOCALNET_V4} -j MARK --set-mark 0x2 -if [ ! -z "${LOCALNET_V6}" ] ; then +if [ -n "${LOCALNET_V6}" ] ; then ip6tables -t mangle -A OUTPUT -p tcp -m tcp --dport 9999 ! -d ${LOCALNET_V6} -j MARK --set-mark 0x4 ip6tables -t mangle -A OUTPUT -p tcp -m tcp --sport 9999 ! -d ${LOCALNET_V6} -j MARK --set-mark 0x4 fi diff --git a/contrib/raptoreum-qt.pro b/contrib/raptoreum-qt.pro index 580794984e..e6853327de 100644 --- a/contrib/raptoreum-qt.pro +++ b/contrib/raptoreum-qt.pro @@ -1,6 +1,7 @@ FORMS += \ ../src/qt/forms/aboutdialog.ui \ ../src/qt/forms/addressbookpage.ui \ + ../src/qt/forms/appearancewidget.ui \ ../src/qt/forms/askpassphrasedialog.ui \ ../src/qt/forms/coincontroldialog.ui \ ../src/qt/forms/debugwindow.ui \ @@ -17,7 +18,8 @@ FORMS += \ ../src/qt/forms/sendcoinsdialog.ui \ ../src/qt/forms/sendcoinsentry.ui \ ../src/qt/forms/signverifymessagedialog.ui \ - ../src/qt/forms/transactiondescdialog.ui + ../src/qt/forms/transactiondescdialog.ui \ + ../src/qt/forms/createwalletdialog.ui RESOURCES += \ ../src/qt/raptoreum.qrc diff --git a/contrib/raptoreum-tx.bash-completion b/contrib/raptoreum-tx.bash-completion deleted file mode 100644 index 906b145396..0000000000 --- a/contrib/raptoreum-tx.bash-completion +++ /dev/null @@ -1,57 +0,0 @@ -# bash programmable completion for raptoreum-tx(1) -# Copyright (c) 2016 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -_raptoreum_tx() { - local cur prev words=() cword - local raptoreum_tx - - # save and use original argument to invoke raptoreum-tx for -help - # it might not be in $PATH - raptoreum_tx="$1" - - COMPREPLY=() - _get_comp_words_by_ref -n =: cur prev words cword - - case "$cur" in - load=*:*) - cur="${cur#load=*:}" - _filedir - return 0 - ;; - *=*) # prevent attempts to complete other arguments - return 0 - ;; - esac - - if [[ "$cword" == 1 || ( "$prev" != "-create" && "$prev" == -* ) ]]; then - # only options (or an uncompletable hex-string) allowed - # parse raptoreum-tx -help for options - local helpopts - helpopts=$($raptoreum_tx -help | sed -e '/^ -/ p' -e d ) - COMPREPLY=( $( compgen -W "$helpopts" -- "$cur" ) ) - else - # only commands are allowed - # parse -help for commands - local helpcmds - helpcmds=$($raptoreum_tx -help | sed -e '1,/Commands:/d' -e 's/=.*/=/' -e '/^ [a-z]/ p' -e d ) - COMPREPLY=( $( compgen -W "$helpcmds" -- "$cur" ) ) - fi - - # Prevent space if an argument is desired - if [[ $COMPREPLY == *= ]]; then - compopt -o nospace - fi - - return 0 -} && -complete -F _raptoreum_tx raptoreum-tx - -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: -# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/raptoreumd.bash-completion b/contrib/raptoreumd.bash-completion index 9589e325c4..b8ebeb83ce 100644 --- a/contrib/raptoreumd.bash-completion +++ b/contrib/raptoreumd.bash-completion @@ -15,7 +15,7 @@ _raptoreumd() { _get_comp_words_by_ref -n = cur prev words cword case "$cur" in - -conf=*|-pid=*|-loadblock=*|-rootcertificates=*|-rpccookiefile=*|-wallet=*) + -conf=*|-pid=*|-loadblock=*|-rpccookiefile=*|-wallet=*) cur="${cur#*=}" _filedir return 0 @@ -30,7 +30,7 @@ _raptoreumd() { ;; *) - # only parse -help if senseful + # only parse -help if sensible if [[ -z "$cur" || "$cur" =~ ^- ]]; then local helpopts helpopts=$($raptoreumd -help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' ) diff --git a/contrib/seeds/README.md b/contrib/seeds/README.md index 353d0d838e..4aaead9295 100644 --- a/contrib/seeds/README.md +++ b/contrib/seeds/README.md @@ -17,4 +17,5 @@ that the list is as expected. Ubuntu: - sudo apt-get install python3-dnspython + sudo apt-get install python3-pip + pip3 install dnspython diff --git a/contrib/seeds/generate-seeds.py b/contrib/seeds/generate-seeds.py index 6b0d5ee8b6..de6e214dba 100755 --- a/contrib/seeds/generate-seeds.py +++ b/contrib/seeds/generate-seeds.py @@ -11,7 +11,7 @@ nodes_main.txt nodes_test.txt -These files must consist of lines in the format +These files must consist of lines in the format : @@ -34,7 +34,8 @@ from base64 import b32decode from binascii import a2b_hex -import sys, os +import sys +import os import re # ipv4 in ipv6 prefix @@ -46,7 +47,7 @@ def name_to_ipv6(addr): if len(addr)>6 and addr.endswith('.onion'): vchAddr = b32decode(addr[0:-6], True) if len(vchAddr) != 16-len(pchOnionCat): - raise ValueError('Invalid onion %s' % s) + raise ValueError('Invalid onion %s' % vchAddr) return pchOnionCat + vchAddr elif '.' in addr: # IPv4 return pchIPv4 + bytearray((int(x) for x in addr.split('.'))) @@ -114,7 +115,7 @@ def process_nodes(g, f, structname, defaultport): def main(): if len(sys.argv)<2: print(('Usage: %s ' % sys.argv[0]), file=sys.stderr) - exit(1) + sys.exit(1) g = sys.stdout indir = sys.argv[1] g.write('#ifndef RAPTOREUM_CHAINPARAMSSEEDS_H\n') @@ -124,13 +125,13 @@ def main(): g.write(' * AUTOGENERATED by contrib/seeds/generate-seeds.py\n') g.write(' *\n') g.write(' * Each line contains a 16-byte IPv6 address and a port.\n') - g.write(' * IPv4 as well as onion addresses are wrapped inside a IPv6 address accordingly.\n') + g.write(' * IPv4 as well as onion addresses are wrapped inside an IPv6 address accordingly.\n') g.write(' */\n') with open(os.path.join(indir,'nodes_main.txt'),'r') as f: - process_nodes(g, f, 'pnSeed6_main', 9999) + process_nodes(g, f, 'pnSeed6_main', 10226) g.write('\n') with open(os.path.join(indir,'nodes_test.txt'),'r') as f: - process_nodes(g, f, 'pnSeed6_test', 19999) + process_nodes(g, f, 'pnSeed6_test', 10227) g.write('#endif // RAPTOREUM_CHAINPARAMSSEEDS_H\n') if __name__ == '__main__': diff --git a/contrib/seeds/makeseeds.py b/contrib/seeds/makeseeds.py index 45ddc1ac0c..e5eb924a12 100755 --- a/contrib/seeds/makeseeds.py +++ b/contrib/seeds/makeseeds.py @@ -6,6 +6,13 @@ # Generate seeds.txt from "protx list valid 1" # +import re +import sys +import dns.resolver +import collections +import json +import multiprocessing + NSEEDS=512 MAX_SEEDS_PER_ASN=4 @@ -15,14 +22,6 @@ SUSPICIOUS_HOSTS = { } -import re -import sys -import dns.resolver -import collections -import json -import time -import multiprocessing - PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):(\d+)$") PATTERN_IPV6 = re.compile(r"^\[([0-9a-z:]+)\]:(\d+)$") PATTERN_ONION = re.compile(r"^([abcdefghijklmnopqrstuvwxyz234567]{16}\.onion):(\d+)$") @@ -92,7 +91,7 @@ def filtermultipayoutaddress(mns): return [mn for mn in mns if len(hist[mn['state']['payoutAddress']]) == 1] def resolveasn(resolver, ip): - asn = int([x.to_text() for x in resolver.query('.'.join(reversed(ip.split('.'))) + '.origin.asn.cymru.com', 'TXT').response.answer][0].split('\"')[1].split(' ')[0]) + asn = int([x.to_text() for x in resolver.resolve('.'.join(reversed(ip.split('.'))) + '.origin.asn.cymru.com', 'TXT').response.answer][0].split('\"')[1].split(' ')[0]) return asn # Based on Greg Maxwell's seed_filter.py @@ -107,7 +106,7 @@ def filterbyasn(ips, max_per_asn, max_total): pool = multiprocessing.Pool(processes=16) # OpenDNS servers - my_resolver.nameservers = ['208.67.222.222', '208.67.220.220'] + my_resolver.nameservers = ['1.1.1.1', '8.8.8.8'] # Resolve ASNs in parallel asns = [pool.apply_async(resolveasn, args=(my_resolver, ip['ip'])) for ip in ips_ipv4] @@ -140,7 +139,7 @@ def filterbyasn(ips, max_per_asn, max_total): def main(): # This expects a json as outputted by "protx list valid 1" if len(sys.argv) > 1: - with open(sys.argv[1], 'r') as f: + with open(sys.argv[1], 'r', encoding="utf8") as f: mns = json.load(f) else: mns = json.load(sys.stdin) diff --git a/contrib/seeds/nodes_main.txt b/contrib/seeds/nodes_main.txt index d56a09728f..db62205252 100644 --- a/contrib/seeds/nodes_main.txt +++ b/contrib/seeds/nodes_main.txt @@ -1,250 +1,73 @@ -2.56.213.220:9999 -2.56.213.221:9999 -3.89.82.153:9999 -5.40.8.67:9999 -5.101.78.47:9999 -5.132.191.109:9999 -5.132.191.112:9999 -5.132.191.213:9999 -5.132.191.214:9999 -5.134.115.37:9999 -5.187.2.26:9999 -5.189.166.213:9999 -13.67.76.10:9999 -13.94.173.222:9999 -18.211.5.180:9999 -23.106.123.152:9999 -23.152.0.95:9999 -23.152.0.197:9999 -23.175.0.111:9999 -23.175.0.113:9999 -23.175.0.114:9999 -23.175.0.116:9999 -23.227.163.52:9999 -23.253.213.225:9999 -31.10.97.36:9999 -31.31.73.82:9999 -31.178.4.50:9999 -31.192.110.71:9999 -34.83.128.64:9999 -34.83.233.120:9999 -34.209.237.242:9999 -34.225.101.97:9999 -34.255.85.157:9999 -35.199.145.175:9999 -35.247.94.64:9999 -37.18.227.56:9999 -37.97.227.21:9999 -37.120.161.145:9999 -37.157.199.210:9999 -38.127.169.147:9999 -43.229.77.46:9999 -45.32.243.128:9999 -45.33.57.231:9999 -45.63.107.90:9999 -45.76.39.241:9999 -46.21.155.50:9999 -46.101.135.60:9999 -46.163.166.50:9999 -47.75.49.228:9999 -47.88.51.15:9999 -47.90.14.156:9999 -47.91.204.190:9999 -47.110.197.5:9999 -51.15.172.192:9999 -51.91.57.8:9999 -51.144.71.213:9999 -52.33.34.63:9999 -52.72.237.43:9999 -54.169.246.41:9999 -62.75.203.240:9999 -62.75.203.242:9999 -62.75.207.166:9999 -64.140.157.114:9999 -64.140.159.226:9999 -66.45.245.213:9999 -66.172.12.86:9999 -66.244.243.68:9999 -66.244.243.69:9999 -66.244.243.70:9999 -69.10.35.39:9999 -69.10.54.244:9999 -74.118.137.70:9999 -77.37.240.140:9999 -77.81.226.146:9999 -77.81.234.111:9999 -78.41.207.70:9999 -78.83.19.0:9999 -78.94.32.197:9999 -78.108.216.95:9999 -78.108.216.248:9999 -80.209.238.217:9999 -80.211.207.138:9999 -80.211.221.139:9999 -80.211.241.233:9999 -80.211.245.51:9999 -80.211.246.225:9999 -80.240.132.231:9999 -81.171.2.245:9999 -82.118.227.52:9999 -82.165.76.29:9999 -82.211.21.23:9999 -82.211.21.179:9999 -82.211.21.240:9999 -82.211.25.34:9999 -83.96.169.215:9999 -85.25.97.244:9999 -85.25.138.47:9999 -85.206.165.89:9999 -87.117.253.55:9999 -89.36.220.128:9999 -89.39.106.15:9999 -89.40.114.69:9999 -89.40.127.116:9999 -89.40.127.187:9999 -89.45.67.54:9999 -91.132.145.51:9999 -91.219.237.111:9999 -91.219.239.82:9999 -92.60.37.50:9999 -93.158.216.153:9999 -93.186.255.44:9999 -94.16.117.161:9999 -94.176.237.88:9999 -94.177.225.210:9999 -94.177.230.42:9999 -94.177.253.17:9999 -95.43.139.162:9999 -95.183.51.15:9999 -95.183.51.98:9999 -95.183.53.39:9999 -95.183.53.128:9999 -95.211.196.34:9999 -95.215.45.225:9999 -95.217.255.194:9999 -103.218.240.67:9999 -104.149.36.119:9999 -104.160.42.222:9999 -104.206.240.12:9999 -104.216.5.104:9999 -107.191.101.212:9999 -109.123.102.122:9999 -109.237.24.123:9999 -115.159.86.118:9999 -116.62.140.10:9999 -116.203.81.220:9999 -118.31.38.232:9999 -119.23.29.18:9999 -120.92.112.179:9999 -123.193.64.166:9999 -130.185.251.69:9999 -130.185.251.113:9999 -133.130.102.22:9999 -134.249.148.62:9999 -137.74.194.15:9999 -144.76.31.203:9999 -144.76.238.2:9999 -144.202.16.80:9999 -145.14.158.235:9999 -145.239.163.130:9999 -146.185.175.206:9999 -151.236.10.109:9999 -154.127.57.240:9999 -162.250.124.61:9999 -163.44.167.237:9999 -163.44.169.29:9999 -163.44.171.51:9999 -163.172.96.100:9999 -163.172.128.187:9999 -167.71.51.205:9999 -167.88.15.97:9999 -168.63.153.192:9999 -168.235.74.53:9999 -168.235.74.65:9999 -168.235.99.41:9999 -170.75.162.60:9999 -170.75.163.108:9999 -172.81.132.245:9999 -172.81.180.210:9999 -172.86.120.107:9999 -172.105.222.151:9999 -172.110.5.98:9999 -172.110.6.169:9999 -173.212.218.130:9999 -173.212.221.13:9999 -173.212.241.50:9999 -176.10.97.105:9999 -176.223.137.49:9999 -178.33.189.154:9999 -178.157.91.176:9999 -178.157.91.179:9999 -178.238.42.7:9999 -180.68.191.77:9999 -185.2.83.231:9999 -185.22.174.37:9999 -185.25.51.117:9999 -185.26.126.250:9999 -185.34.40.36:9999 -185.35.67.185:9999 -185.43.210.125:9999 -185.58.224.234:9999 -185.64.104.222:9999 -185.64.104.223:9999 -185.136.170.231:9999 -185.141.62.97:9999 -185.142.212.144:9999 -185.165.168.22:9999 -185.165.168.25:9999 -185.165.168.224:9999 -185.165.168.243:9999 -185.168.8.144:9999 -185.177.59.140:9999 -185.180.221.100:9999 -185.183.96.80:9999 -185.183.97.131:9999 -185.183.97.136:9999 -185.212.131.112:9999 -185.212.131.209:9999 -185.213.37.1:9999 -185.213.37.6:9999 -185.213.37.11:9999 -185.228.83.30:9999 -185.243.113.149:9999 -185.253.189.16:9999 -185.253.189.22:9999 -185.253.189.27:9999 -185.253.189.114:9999 -188.227.16.83:9999 -188.227.18.74:9999 -188.227.75.67:9999 -190.2.149.236:9999 -190.4.184.180:9999 -191.101.20.93:9999 -192.81.130.228:9999 -192.250.230.17:9999 -193.37.215.58:9999 -193.187.182.106:9999 -193.187.182.109:9999 -193.187.183.183:9999 -193.187.183.185:9999 -194.36.189.6:9999 -195.154.222.45:9999 -195.181.210.17:9999 -195.181.211.64:9999 -196.251.250.217:9999 -199.192.17.103:9999 -200.122.128.172:9999 -200.122.181.44:9999 -204.16.243.106:9999 -204.16.245.98:9999 -212.24.96.159:9999 -212.116.121.11:9999 -212.116.121.73:9999 -212.116.121.105:9999 -212.224.118.7:9999 -212.227.201.203:9999 -212.237.12.215:9999 -213.64.197.95:9999 -216.189.147.178:9999 -216.189.151.94:9999 -217.61.97.99:9999 +1.117.47.80:10226 +3.130.218.222:10226 +13.53.80.85:10226 +18.116.126.53:10226 +23.126.185.88:10226 +34.229.162.75:10226 +45.13.58.243:10226 +45.32.215.222:10226 +45.32.237.4:10226 +45.43.18.126:10226 +45.76.120.169:10226 +45.76.231.11:10226 +47.104.30.69:10226 +47.104.83.176:10226 +47.104.90.240:10226 +47.104.98.199:10226 +51.195.149.133:10226 +52.15.133.243:10226 +54.90.166.254:10226 +54.226.160.165:10226 +65.21.2.169:10226 +65.21.49.132:10226 +66.94.124.143:10226 +68.183.95.239:10226 +74.208.48.117:10226 +74.208.82.68:10226 +75.119.146.16:10226 +76.93.146.134:10226 +77.68.100.78:10226 +89.149.31.157:10226 +95.216.146.82:10226 +95.217.30.144:10226 +100.26.29.116:10226 +104.248.207.174:10226 +106.55.134.48:10226 +115.227.28.219:10226 +122.148.134.76:10226 +122.148.134.79:10226 +129.146.8.121:10226 +138.68.90.202:10226 +139.162.119.163:10226 +139.162.163.58:10226 +139.162.251.103:10226 +141.95.54.156:10226 +161.97.124.226:10226 +167.114.67.142:10226 +172.14.54.207:10226 +178.18.241.13:10226 +178.62.205.194:10226 +185.190.143.3:10226 +192.53.122.25:10226 +193.188.15.210:10226 +193.188.15.243:10226 +193.188.15.248:10226 +194.1.144.37:10226 +194.1.144.38:10226 +194.1.144.39:10226 +194.100.215.188:10226 +194.156.89.33:10226 +194.156.89.162:10226 +194.156.90.115:10226 +194.156.90.140:10226 +194.156.90.176:10226 +194.156.90.216:10226 +194.233.80.168:10226 +195.206.229.94:10226 +195.206.229.95:10226 +195.206.229.96:10226 +198.251.78.48:10226 +209.126.77.166:10226 +209.145.52.180:10226 +209.145.58.114:10226 +217.182.45.97:10226 diff --git a/contrib/seeds/nodes_test.txt b/contrib/seeds/nodes_test.txt index aff7a7f9dc..382eae2295 100644 --- a/contrib/seeds/nodes_test.txt +++ b/contrib/seeds/nodes_test.txt @@ -1,21 +1,17 @@ -3.213.227.101:19999 -35.185.202.219:19999 -45.32.237.76:19999 -51.68.175.79:19999 -52.35.83.81:19999 -52.204.225.60:19999 -95.183.53.17:10011 -95.183.53.128:10001 -106.12.73.74:19999 -108.61.189.144:19999 -108.61.192.47:19999 -109.235.71.56:19999 -134.209.90.112:19999 -134.209.231.79:19999 -140.82.59.51:10003 -144.76.66.20:19999 -144.217.86.47:19999 -165.22.213.149:19999 -178.62.203.249:19999 -185.213.37.1:19999 -185.213.37.2:19999 +170.239.85.193:10227 +51.38.114.105:10227 +45.95.203.184:10227 +89.58.107.136:10227 +51.75.163.170:10227 +173.230.141.28:10227 +195.206.229.95:10227 +205.185.125.164:10227 +45.61.185.38:10227 +209.141.35.216:10227 +45.7.230.141:10227 +65.21.105.82:10227 +45.95.203.125:10227 +209.141.60.127:10227 +65.21.247.190:10227 +139.99.250.53:10227 +45.95.203.170:10227 diff --git a/contrib/seeds/protx.json b/contrib/seeds/protx.json new file mode 100644 index 0000000000..d9fcc8a674 --- /dev/null +++ b/contrib/seeds/protx.json @@ -0,0 +1,14977 @@ +[ + { + "proTxHash": "d4a0d9a3fe1cca5120916e4faa6fd3b39f0bb2a7c336643e24972dcb094f6420", + "collateralHash": "b742f89c3f178b7b46bd86a75dc1fb9dc06bf25613d584f7275575c95bac4016", + "collateralIndex": 0, + "collateralAddress": "RL5eyF6wN8EJ4Pm7R6KNJTuVYHdFAxdpyJ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "161.97.124.226:10226", + "registeredHeight": 174652, + "lastPaidHeight": 190564, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPC5r8MkfA3bty7J5Tt5M1P7RG6CnBcYXm", + "votingAddress": "RXVN77wsWJhZQ9KuHm758yqGZB1PcDxX1b", + "payoutAddress": "RJmJdfj4RAoA3E7wgatxx6PDU8E6qc5GXC", + "pubKeyOperator": "92ef18cab8073e4fd817e0bcb3d4acce74bb3edb6db8c46c6f891c7e6e63877880d4fc09f901ce79c6f58d382242c91c" + }, + "confirmations": 16345, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "62765371d0750d3997368e917e19c2c3b376bb9025ffe156f0a1dae5bc326d20", + "collateralHash": "caac64d86ca9836c2010cb2009b10fa4f6181e4c229c4699c0698e642bf9f8c1", + "collateralIndex": 1, + "collateralAddress": "RL2uo96CZNakjZUJ4YTY2rfU6LBkTGH6T9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.98:10226", + "registeredHeight": 174597, + "lastPaidHeight": 190983, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTsAQ1rUZURRR5BvnmwXUCoXbHYDi83P4m", + "votingAddress": "RNQBBhJTZuoQ8xbFkoCFiynR3xKLMDNbL5", + "payoutAddress": "RYUdsjXP8stoA61xXeb3hbgT8C8fm1jLLt", + "pubKeyOperator": "09f527cba67d0e7906ba88d10ede4077662c29e87a737242a4b9ca376f8aed0bf8f098e321a43f9b16b6f75ffe1091ba" + }, + "confirmations": 16399, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "42855904f9823815023be467c65f650ab1aa9ed14944ee8bfdafce054171d540", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 8, + "collateralAddress": "RTvrxKnZgyrAwwbqJAz6DEZPMPg5wM99hM", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.160:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190754, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFy6uS5EzjibteHpJvMMaJk1to7MrypZgm", + "votingAddress": "RHeAyj7KnEjGyo1BTqfzcycqWgfQHWmpdn", + "payoutAddress": "RJ5AoscjosWBbvQNk9oahZwmwRK8J7oo2n", + "pubKeyOperator": "84bdc5bd20bd7f96573383b3aec3c0a206242e5c4d94ce37aa005ea709ebe0e8c0502eb3f167971e7070da19afafdd4e" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4e6e1249225825e60618d9a960e4f0c64db9ed0b493fa3fb90f975cc1eaea200", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 4, + "collateralAddress": "RNzQwdR6hZWPcHcgdpaYPFgkhHfuyuhNom", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.52.113:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190837, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBGwKbNTNmMASzPjc9p6ANu8SpyciPQyBW", + "votingAddress": "RLq7jnihXbUm3oVuY13n3m7Uki7riEKHXS", + "payoutAddress": "RAe1XfsWmSKGqsHmBRwqcjiJ9qs6AMY4nE", + "pubKeyOperator": "0976225e1902ceeda58de1b9f94cd21ce32131938c0a3f428b7a353e06d6c8662be750a10abba4852baa2e84d6d92730" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c25e50307417e5f2e894b54ef4ad74f6893e71b0ca0f565bcaffe433448a12c0", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 2, + "collateralAddress": "RMFLG1tqLdLjFcaQrAxmVZpUdbM6y4yNv8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.137.194:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190772, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTqzDqfUPtajodNvm75q2rzUkyWxbG45ZY", + "votingAddress": "RLBuyd7oADQFsP4J6BCFoNwJQwyjqJX3E2", + "payoutAddress": "RGrkXSrduSjzsJv8YqK1J7KsF64fDTvzTC", + "pubKeyOperator": "813d9c372ff2c460a675ebf42f729a22893f3390b88fcb035ef69c77daaa76b690427b502532fd92904d66d29c79cd9d" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6354472a64eeac74ea1ef9851b556c9af02f7d7e036eb6bbd300a64068357ae0", + "collateralHash": "21281d16f73f5390815ffa9af6ad27aa1fca6a2ca5070f2f9c985551d5387de7", + "collateralIndex": 2, + "collateralAddress": "RKzvXvJomMmFrYjjdXT4C6bRuedqKWQf8m", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.4:10226", + "registeredHeight": 186186, + "lastPaidHeight": 190894, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9otfiMTKpC3V3cbu3wmRMAGg7wt9C7745", + "votingAddress": "RQVGXmnBD3BETPjESQawAQ7qarY5sjM6F5", + "payoutAddress": "RGD9eraBPuN82oE3qbMtuFGLFL5jPJF4iT", + "pubKeyOperator": "88b732327bc391382769ff5aceaa134bc9b30c4edcb986b2f07353e4d33cf2259dcb48379566c492739590a7943e2496" + }, + "confirmations": 4811, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "be560d0dc100840d98b3a70ca2f162b8992043c4620ea4242a79dd27b354df20", + "collateralHash": "ce5a39c16d8a256fc3745e95e11a96852105647a7b778951039e8a8975420ba6", + "collateralIndex": 1, + "collateralAddress": "RJweUNTuWNUHk7yTBCRrnjbAL9yqNjBKjX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "192.53.122.25:10226", + "registeredHeight": 178870, + "lastPaidHeight": 190669, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKYGmX22SmvGDdJLW8xxLDfeRu4AQnREJ8", + "votingAddress": "RBfCeGpqdMPrxgjJLFf2Xp9fNMmmyXNcny", + "payoutAddress": "RLsjHoDdu9i43Vp29KDyVCGP84asecA8Yd", + "pubKeyOperator": "8dc6ee40a032a431b4df53f04e62bbbb2a0d5157c963c458cd0a1ea21bfa6016a1d1ac4c31e9ee2c1879d2b68886892e" + }, + "confirmations": 12217, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8ee796595f8256b8796d48c61b199def81b93faa419affd8573acba735ba7380", + "collateralHash": "cc7e408da7724a01a09edc69668a74c6ed9d803f54328e511fd45cbef0728d20", + "collateralIndex": 1, + "collateralAddress": "RD7rMyCfvuCDnR6293VqaDh51d1HQ6bWvV", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "139.162.251.103:10226", + "registeredHeight": 178869, + "lastPaidHeight": 190900, + "PoSePenalty": 0, + "PoSeRevivedHeight": 182969, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHuKyyyuJJ39t7pZ14awzm5yLCT3pn9tP1", + "votingAddress": "RWfTnQ3VJYskY566QKkNFbpUvYUcpbbym1", + "payoutAddress": "REHSgNRouEa6FZQQfLsJUAgWdDwK4RNaN9", + "pubKeyOperator": "80787f0f6c21900b425364606fcb1389b108ecb8f5fd4fd316fabbe9f13781b2288995ea04bb0ef80fec930cfb070b8d" + }, + "confirmations": 12219, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "08c92930285170d6cef9715508f2c439bd9eddf0630e7aa628f3c90ecea703e0", + "collateralHash": "6db91dd7aaba6bd3a2ab32db429368a8ec2849343be35fe3fd1bc42a9e1295de", + "collateralIndex": 1, + "collateralAddress": "RJEQ9PBzmXUyU4gME6vMKcQiV2gsVmkjLk", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "185.190.143.3:10226", + "registeredHeight": 176402, + "lastPaidHeight": 190554, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMfR95SpjkZMbawpws74beT6w5siWv47pC", + "votingAddress": "RNp8XxtDQo1E6FJYospuyGCXm1gqQbiKG1", + "payoutAddress": "RCS2ws3xwTaQWvHLRpjxVrse9EeyXgRPVW", + "pubKeyOperator": "8986b1c34e35b853d1b8fddfa82ccdfe4cfcf7ed53b3d8a10d08f659fcb935fa53c1a2508acb9e1d346f159ba3fcab8f" + }, + "confirmations": 14599, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "84e2af8d2ac4fab1e5326c402f0b107344bdc15ad68e2a4eb8b7b02b93e29901", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 6, + "collateralAddress": "RPid3cfJcecUnhpgWqpukVGPS1brDgzuk5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.52.192:10226", + "registeredHeight": 174965, + "lastPaidHeight": 190906, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJWgWFwqncUzvRRfHiKN9qcgsD6wnNg8j1", + "votingAddress": "RLCiBtxsGbAupoc1ALYVWo2EJCdSdvuPrW", + "payoutAddress": "RVK6H7ThFzb84YzCGUTZiTgGsEJZwt3MpX", + "pubKeyOperator": "8928a8876f874fa61096690b7f3dd7b6e1085bb3c9d9113f5884ff44a616bdc92d68f8beb0135b0c6ce41727c0469234" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "650b0ca0f2222cc6330cf9d35393d2494cf8acaeb97c093c227d2fb24bc9a981", + "collateralHash": "4b5ffe4e903ad609b2302e455834bd4325c9faa17100c86b24b401aae3bb8c2e", + "collateralIndex": 1, + "collateralAddress": "RDgfBUBeWcxe2VXfNtYbHj9b5T9gcLzkuy", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "178.18.241.13:10226", + "registeredHeight": 174577, + "lastPaidHeight": 190960, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDMTjFBdFQViVdJY9LvSKpMgACRoqmpzVB", + "votingAddress": "RJjB1cdFXYn7jrRXNKAtADVompmtiNUPYF", + "payoutAddress": "RKERgGBKKC48Kxk6AXthkXAZUQT6JyeskP", + "pubKeyOperator": "94c64eb028ab02e61ed378f523e24a9e1430e3d5e17a358313ba0c7f6203f06af7d1d95b98f56a166e7ff2d36b6f1282" + }, + "confirmations": 16428, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "af1c55f6b4d766db7c09952cc086f1f91231359aa56dfb117959ff53727731c1", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 10, + "collateralAddress": "RXz6KjjUAVLDWqS9aTVe3uQNAMDX7SPXWe", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.84:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190635, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAiXbKZUJhVQxGr2d2B1tV4mAnSm6gdhhm", + "votingAddress": "RVbpmdYLjTLChjv6ypAWyrp6FwDNoQmuVQ", + "payoutAddress": "RMkcquU4Saa8Jgm12VAw5zDevGKwzsxTSB", + "pubKeyOperator": "962adca1ac18811a02ac0c440849ec9a2392c775886fdb7b8e8b808eb37b984de16b0db1aa038072e71efa42d2da85b0" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "569beeb09a81f989358dbc15d5403da918cddd9ba503f71e51984a38e4ee62c1", + "collateralHash": "6ace3e972cf0440cf15a9a4ca8da58c363e3730c47856bb68496ccb87b4ae8d0", + "collateralIndex": 1, + "collateralAddress": "RC7FDq9UDAzSCSkYLPRcvDcczr8Ca4YJtf", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "209.145.58.114:10226", + "registeredHeight": 173772, + "lastPaidHeight": 190600, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJwRczBQgTNDSEddpmeBRDfAU5SAwNQjjW", + "votingAddress": "RAgWNTgzjX1e2VVoZF8Asg5QgSPNCtogHT", + "payoutAddress": "RVpz7ZepLdMDecQ77qWpPWQYQcMpPapAvU", + "pubKeyOperator": "9632d2c408ea8ad4bf59330f01f6967ad8d575ddfc1e0a31c9004d0348334c1813f450056cf96474e05b938a1ceff166", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 17229, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "cad83cf4d14b817d542dd416c3bb409d0819a8601b3cb67cdcdd17644e8c5341", + "collateralHash": "011217540ae3a2893e41b525a903910b3c1105af0d697618d0dac72d5b865fd7", + "collateralIndex": 1, + "collateralAddress": "RB5XGehjKbPCQq55g3b8B5ictDjt9MZLE2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.216.146.82:10226", + "registeredHeight": 176788, + "lastPaidHeight": 190525, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUxcmAJVnujiLEKw2aS418nJre6gcrS5Gz", + "votingAddress": "RXHWBE4wdJ43F3kxqdugatFwBgswnEn7af", + "payoutAddress": "RXdsxkjJ2UJZhJ4yZjG84wSqAiu6vbC7cd", + "pubKeyOperator": "17383a1a7d4ac67d20474031662b1eeb261bae3a13c93316e2d192bb1c8520b79b8facf09579efd90759a57b7a4d48fd" + }, + "confirmations": 14212, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5c496e197cb1bf8f6017383be27c0acda0eefcb4da456e6aa4a6e47a6f421b81", + "collateralHash": "ed5303d32971426e87455a48a0a15e072a7ccb67b5ccf39144c33e2a62021fac", + "collateralIndex": 1, + "collateralAddress": "RGrr1uY99akHpddzvV7QbFTC9Ns6KwLN8r", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.104:10226", + "registeredHeight": 181149, + "lastPaidHeight": 190849, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNXhcQ1ru5etDd7ptcsSjayEz8Ahn8HEcd", + "votingAddress": "RNsKgf1oSYCst8pk3rpbhdcdk5vfjVgJGj", + "payoutAddress": "RDMp4AKehdj7JtuSWpgBjnrz5NNg24g9eK", + "pubKeyOperator": "83b66bf40b8a3ffebdd59b35d922ad0c18649e3a412870af89e0bbeb74a0c389dfc7d0dbdd2f4925df971bee0b3f6c79" + }, + "confirmations": 9847, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9d6f51fa7e943aa7e30e46f46419bc121d5d77a60eb0e86c8c8bba8860bff7c1", + "collateralHash": "e8debe83e868fcca2268b83732155d9e2fad5c2fa3a5141c7e4027f08ffacc82", + "collateralIndex": 1, + "collateralAddress": "RWQxxWBhWYL1qrdCCjwhDPcqgULyDV6L9o", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.124.143:10226", + "registeredHeight": 179133, + "lastPaidHeight": 190592, + "PoSePenalty": 0, + "PoSeRevivedHeight": 187303, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKQWnkMCmwugahuGpFauYNLtw4vt5Vw3Yv", + "votingAddress": "RBhuJuswjjbgF5jPTY8jNSpBet4jBHLpHu", + "payoutAddress": "RU53AN6UXsYQoUgLN47VKayKHzs8vuevZF", + "pubKeyOperator": "081e88e5c67b53302b33f9983942885d30c6a529bc8474b058fa6710fab6740957ada048b499f0d4c86351ae2057c895" + }, + "confirmations": 11863, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "153a3d87d994aa27cf55c19c890a2e7d6073152505ff71beb98d5aa7e5dad5e1", + "collateralHash": "c35cf5df16d6ec7d51d00145555c99d5dcf8195332c2616b73ac9db88a536ab8", + "collateralIndex": 1, + "collateralAddress": "RFp76G6E4YH6UDyFquNaf6vExge4DeAH5b", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "138.68.90.202:10226", + "registeredHeight": 175921, + "lastPaidHeight": 190970, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSEp1hNDb5cDzykkENiTcYSr4fLtm4r62p", + "votingAddress": "RXCY3SaQPRU3HFSiw3CSfTjPB7Pwq9QaQL", + "payoutAddress": "RKVCnwWP5WUiG9Urn24e4WCGQVGZHvCnjq", + "pubKeyOperator": "0c22d176476a44d3af262142a3aee677e1c6418ef9248115d29bb3a9eb7cd9dc79d11f2da6dfb28e8cf4aa90b335588e" + }, + "confirmations": 15076, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "fb897a3abcec82a63a66d3e4a959444e67456aa855aa182b241d24ad368779e1", + "collateralHash": "eedf21d3bf12ae9eb0cd66a3c726bc3fba08ca56b26c1c92b6211877161c7f15", + "collateralIndex": 1, + "collateralAddress": "RFgQfq7c2NHJNCeYBg3WAF7JbcUjadt8Dd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "45.32.237.4:10226", + "registeredHeight": 176634, + "lastPaidHeight": 190867, + "PoSePenalty": 0, + "PoSeRevivedHeight": 178215, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNji93TqqKZxF5gF9yvRfsG3DCNCS1qXxX", + "votingAddress": "REusToYrnQe3cUX1oM5T32pEHyfAN2wtsh", + "payoutAddress": "RFdzxX51SCNmxaoq9AXBxecfbLno752nUY", + "pubKeyOperator": "824e1af32c4d3a116ed8d88e3aaf78dd9cedb96d6e5e46fd179784bee5344d054c4ecb55792e163a05b612a4ad81a166" + }, + "confirmations": 14368, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "05d536ee9a7697b77575e4c0577779df099d954efd9c0cf56c5cd18a8a499b01", + "collateralHash": "9a4fbc09ed30c20a4561600fd0046983d4a47cabb57f1adbac1a6440eb11504c", + "collateralIndex": 1, + "collateralAddress": "RPs5NruEy4T6RXfwW3pa7ZCmHKzmQMbsuW", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "45.32.215.222:10226", + "registeredHeight": 176630, + "lastPaidHeight": 190778, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMHiccw6WEVhdhFKXrU8DmuhWtGeNUD3b5", + "votingAddress": "RWpBZpax2qCbRpfZ36KdPuWRzF8Hyk7Uiu", + "payoutAddress": "RKMbyPNxkxWdv2sV3XhEPJd7xgr5AizsVk", + "pubKeyOperator": "06e6da2ddee576aa51f62804f73967a779c7ea1763e0531858ce1bfe7364a15e6063b30ebabb38c0513ff8c6f9c85a28" + }, + "confirmations": 14384, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "504074a6d28e3840db87a97041ebf7ca94b24ebed978976ee46e1deffd5c4701", + "collateralHash": "b9d8f0a8a3aeb78af858e859cdc97f92c6ae70a1bf0eac3f409d9cae640c1a30", + "collateralIndex": 1, + "collateralAddress": "RRK7SC3WBdcF1AQvRSawtSSWFtDBYWQxMR", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.166:10226", + "registeredHeight": 175562, + "lastPaidHeight": 190583, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXsm9zoorWuRmc8P48CgUu4ur4CbxTrJ2B", + "votingAddress": "RP8Vv97ihxCVkiwFFiZ6VN8SWn4YZCEh8C", + "payoutAddress": "RY9yRPmuPbwNrZ7vDDPpah1eNGfGjNTz1S", + "pubKeyOperator": "99ca5ef836fa14f5190ee806ce4d8dfb2ea7d257061576be93ed38c069ffb82e6a36449bc8dd504038d1f4f1201ad32d" + }, + "confirmations": 15434, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4ab8cb8c58158f1d06456af7e85eb9463a4a2ae8ce7d56df1410cfe132a64122", + "collateralHash": "47fecd38e55a5db9eec65940d91728346298972efa6582ac09ac9d9e36a9c7ad", + "collateralIndex": 1, + "collateralAddress": "RJAyRSjAcqHkqnekbvQNhAZyaJvMjQ6pzC", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "74.208.82.68:10226", + "registeredHeight": 174656, + "lastPaidHeight": 190567, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RV6BqsM5SvrRdbF4eHXV4pVVvkbk5oTZX3", + "votingAddress": "RY47TfcHwHPGyDQBuCaiExikg3uknEZGMF", + "payoutAddress": "RVUv43te17wE6kv3aB1f7KwDSk7okFh9Bc", + "pubKeyOperator": "1114311c9cf94611340197c84ebc0664741c22289be8b54fb0a4e29750b9f3041e4482f2a857b48b61cf173a9696c634" + }, + "confirmations": 16341, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c54ce621d7e1c73fbd9093460fad69f958d3e2b0d709fab159e6da2bf758eb22", + "collateralHash": "91470bf8aa9ed5fe887b2eaab56765b497ab2fbc79a16c990450e04a7d48984c", + "collateralIndex": 1, + "collateralAddress": "RJMmd59EmuLKTXdLtFbvKswxHdZaCAnR2x", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "104.248.207.174:10226", + "registeredHeight": 175916, + "lastPaidHeight": 190961, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGL57GodoFrLjY9XigVcwYD9uMCKiVWVek", + "votingAddress": "RLhb3acHMuzdBbcy1NeR4yhoeDgzVieL86", + "payoutAddress": "RTVNS7E3zhnRgHw5McDz3oqhewdazLYD3M", + "pubKeyOperator": "9337689557b67ddbd991fc1ba3a187c5c17d7908ffc6090e0baa9c682f994a3bc2f12b6d160fbe766a77d65cf27bb03f" + }, + "confirmations": 15080, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4ffd3594e5ce37d326d5fabb3c929fabc080a317c795d6c7fa7ef30bc7911b42", + "collateralHash": "5e148e86a7da68b7c8ff4569b4d6f440b788ef6343a2ce8146bb978c7c5671bd", + "collateralIndex": 1, + "collateralAddress": "RC8kRpSj88uQx6y1TPC4Rp6Z3GnvK3t4cL", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "141.95.54.156:10226", + "registeredHeight": 176750, + "lastPaidHeight": 190941, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDg6HvnE1TrCCN2cS4o7asM4xFJZnDrq75", + "votingAddress": "RTdGe7ra9ng6mBF6LCE38uW4HyrKEvEN9a", + "payoutAddress": "RVDYiiLGeYhwGSguUadxwy9MvmUtDGbkJU", + "pubKeyOperator": "18f22c600486278bb607aa58a76e0a047b5ef7e8dd30c732d21eb20b80275a92906832ba3c03b70b9c56194b94374535" + }, + "confirmations": 14249, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "330e08128d8ab66105f389709f22559b6344e9dc3cfd385169b87cac92cf9762", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 7, + "collateralAddress": "RSLksiP4anSmENz4i6Pjhi7bSbdNRZVexd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.132:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190847, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTrrnX29vp8jJGjM4XpQYtwKDe4mXF92De", + "votingAddress": "RXKxfbERt2HFRpXaEiktvvYkni8NjQsrgP", + "payoutAddress": "RDTFLpPsCBLrs3ZTtL8hq4nvyjdSk4rM8B", + "pubKeyOperator": "99d98863eaa52be88adffe00373f5f639052bd16182e19a08de2971056d12372a37d3fd9cfd3f4c7ba57b4089a954185" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "240eaa2f9f6b4d1a00aafede053477d62e80da717cb82b12d10a2c349f2143e2", + "collateralHash": "7485e827d352a46c4a6d5526f791fa77aa967d456df7fe544f955452e6a7b89e", + "collateralIndex": 1, + "collateralAddress": "RGiXFRcR7y7Bq7bmjm8H8X6hyhpSQafeSx", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "45.13.58.243:10226", + "registeredHeight": 176655, + "lastPaidHeight": 190813, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDH3ngxdowx7rec8PDZ7c5WecLZB7XFrzM", + "votingAddress": "RBtSCm5G7YtEgdGf5uwGGvDVGxrrdTzgwA", + "payoutAddress": "RGdPTXcEH8TRGwdY7hafukDyRXASWNV9b1", + "pubKeyOperator": "0a4773f35fedc904e0fca70a369b1e8289bb0e17decc2017e87a35c26e17d202e3076521a74ac295afe0b224065072f5" + }, + "confirmations": 14349, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f1ce8b963bcb24c9ad3e344584b972787bbc4f94dc2d847287082f77196685c2", + "collateralHash": "2106aeb46c279c87b46cca0a4ca0f1a0b55727737a04b0e2fac1b430be06c651", + "collateralIndex": 1, + "collateralAddress": "RPuLxrg9Z2G7HGKp7BxzPdRq8fm7QQcwyc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "74.208.48.117:10226", + "registeredHeight": 174788, + "lastPaidHeight": 190611, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBP6yoECiA7Wu3SiycPd4FmR58sUx4u3Lk", + "votingAddress": "RNvL4eTiUFgjos5VuUMT9fQQU5ZSkoqeG7", + "payoutAddress": "RTLFjbYPL8xcJEaGefCWJ4EMfSp7T3Dr4a", + "pubKeyOperator": "8deed6c1acd732e6cc35fb9afa28bdc7b291e64a7e28736b85f447463d9b4ada41f7526b033fb7e4b73de4a61357f210" + }, + "confirmations": 16208, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "096de36071f3e3e27dd430a3cbc1fdf3f605b75444002cf337f9dacbb3ef71c2", + "collateralHash": "8bb99ccedda95d61843f960fbd8dd60ff5a90c06001c6aa430b97d7c7113c73b", + "collateralIndex": 1, + "collateralAddress": "RP7oQbA6zLFZNL3ZvJXhpDghKKcJ8ju8MD", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.56.247:10226", + "registeredHeight": 176159, + "lastPaidHeight": 190743, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RA6N9WbJubBYEytChE2ZCfBtHTeBr1mdp7", + "votingAddress": "RDcKDYUo97pQ29DWUBv7w138YCbQnufBnT", + "payoutAddress": "RDnTJoQP5aTsuPrFH5FrJmgQHESzvS4Atw", + "pubKeyOperator": "967153b389a28f6cd895cf02475cccb899f79ef48acaa3642baebef003e9f2b049289606cfc6f15a12afe17b46321514" + }, + "confirmations": 14846, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a7ecfc050e6b274a59962629779e4e351230694af57d59c69b0f7231a5b65de2", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 2, + "collateralAddress": "RLDDL5dE77FhVpYfATBt5tz4oc1X2ABcG3", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.91:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190955, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYECwxL3SnWPrnRuk213PUyBSeutrWZnnB", + "votingAddress": "RVzyn2tuJAesU4JczGRXFXermUaiTivDip", + "payoutAddress": "RQrTADEvudsbccyv8NS37oai82nTduJXpQ", + "pubKeyOperator": "07064403a8ce3e68df11e220398b99edced203a143422927b0097378f050b64ae0904a3178083e14d7713709ed4c0ca3" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "bb265387258e2a26dc893d3611a00a53ad2254b4f658fef8764e7dc00096e9e2", + "collateralHash": "aad526080af8f8eb2279400b47ec0e6b1b469abced96ab6badf7a4bed23ea0e5", + "collateralIndex": 3, + "collateralAddress": "RT1Hqgm4F4ozGGBvsWAeoFXGmRANLvCHMP", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.177:10226", + "registeredHeight": 177719, + "lastPaidHeight": 190751, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKwFfTz1PdAC9kgpvD8LWo9TL8nFSto2Ea", + "votingAddress": "RFFDhCaLZjYP3XC7H4fXsBn4e6TxzNTTmw", + "payoutAddress": "RQJ4NxDF4D8cNdk1ZZUVaqehTGxMNjcgVF", + "pubKeyOperator": "199f181ec3e8897bd9b8120232f1c5d593051dd15e3d5dfcd3127a096be32407e814d9f097c8e9c5f401a8af6570e3c1" + }, + "confirmations": 13278, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "12ab74d0b9ef2f4d7d8e49d9f66edf056fedaee4bf3f5fdd2379dc02670d1a62", + "collateralHash": "0ce1b9316379234438823ccdd66f2d6021456e0ce56510bcde7046253ab7029c", + "collateralIndex": 1, + "collateralAddress": "RFHhpsVX1ctXKEZVBvmLFhpihwZGoYnQRz", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "75.119.146.16:10226", + "registeredHeight": 175220, + "lastPaidHeight": 190615, + "PoSePenalty": 0, + "PoSeRevivedHeight": 176513, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVJGngeg2CzKLE1aKZrSbqbKcUsvqn7REb", + "votingAddress": "RAUKvbARmPPc8ioppZefeEqJhJpAutrZSs", + "payoutAddress": "RJY85pihNtLjN1xFKaF3YRpdgLCeuEhQMQ", + "pubKeyOperator": "8b6042f1e5cbe3776d4a653f63aa0a102b6ead888f45dfac1357b5df8b72327b79afa2caee7906a23846b8287679fbc0" + }, + "confirmations": 15781, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "3a66b5c7204c9543dc3c79e84ab12a85efbbdda5526e11810943a78db8ca5262", + "collateralHash": "f188c67b51c2d5a9812bb32139716d078044824bd7a55e63fe58f1e2b67024d4", + "collateralIndex": 1, + "collateralAddress": "RKUv7J2YyFMud84Hdpn3HUtKGqeYD4Vu1x", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "45.43.18.126:10226", + "registeredHeight": 176656, + "lastPaidHeight": 190816, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBVvLoxKpk2fHQ6wr7ovVfgdqUShA7pcLn", + "votingAddress": "RXpfwHiANxNe2j9ZM29Ft3nitv8fUJhfqD", + "payoutAddress": "RRfrfAEz4djYgNathDABiaJUp7xg2dH5wm", + "pubKeyOperator": "82944fafe89b7bc2f4ec8c0d67c8b4a738c2d6f7d211a577ff7102d4681f959352ed0b9b16dd413af631a5533037d1ef" + }, + "confirmations": 14350, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "53704dd0e0d0d7488466f6e9e83c915118971946b7f014584af86dd7ae25a6a2", + "collateralHash": "fe213a92efd0d31e14df3bd6902f8f4eb635a0225697c595f5ceb29b140ea057", + "collateralIndex": 1, + "collateralAddress": "RHij59K9zHTfATF7ZbireM6yQcM8h56Gen", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "139.162.163.58:10226", + "registeredHeight": 178868, + "lastPaidHeight": 190667, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RC5wUD4tuUMUNhqf8Yb1K2NGxH13PpXDJs", + "votingAddress": "RQ3ZgSRRmNqY17ywwW5sNvARDu9hbDtB2x", + "payoutAddress": "RNNNBfYzaGTybnt19HGjcw2eh1ADNXqer4", + "pubKeyOperator": "92c7e8ee04a30af136d27c953ebc98b912fd28a4495210fa0e581afc96a9f022485c28ef02cd2c88a0bd47b513507ecf" + }, + "confirmations": 12219, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7eae55942cdbbe2b3c2df3ace3cf33b10f979c89e48eb50f30f9cb31039d2ea2", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 1, + "collateralAddress": "RAxm6XKB4HwP5PFUhjDj6kineP55PbTPmq", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.128:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190763, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBGKi7NnnR4y8UgtcsAEfcVKVmfyizZwXw", + "votingAddress": "RKqabAF6gRB1KkPphqUHyrVwm13dEP85z6", + "payoutAddress": "RKZVwZvMrzh3hWfJRj4MZfgRC6mF12boip", + "pubKeyOperator": "866132c1e8595b2d62653ac778c4a9ddcfb45cf24964c3063116697b0ca773cc49b3d0e5fcbb71204823d9e45f6bd4ac" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ba2131c6436133e4ee6aa099e3a0852cc63f615f9ba7299ad384ac3b49b14063", + "collateralHash": "f7ea3d052f659cc0b1a7d9462e32d8eda54fe425fb49baae5c279d53b8426392", + "collateralIndex": 1, + "collateralAddress": "RWCTDHJEXSsro3c6ryTqPbdF1Ho9ULqKWa", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "195.206.229.95:10226", + "registeredHeight": 174388, + "lastPaidHeight": 190692, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RK3T9gETGfFfbYGjz9Fsu5aDBWiLL6mjHt", + "votingAddress": "RAReiMEnbDF8doN8SSgoMzkfis2gJnQKUP", + "payoutAddress": "RTtX6xJGqHcbQRGzxamWgtFtAd79QDt46P", + "pubKeyOperator": "8a2db3a7f171518378c2e2fc8b9c00d453ceafcc8b41f2985f1ee2bab5a71293bbc3c5b816f95f6fde123b4f805ba295" + }, + "confirmations": 16624, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dd7943ffba42016a518ed9a4be35935dc1e82b6d3e5806151b7cb9526b3cada3", + "collateralHash": "7ebfcde3003ab310f846b3f4ee7f5c336bcf0fe740f58e1d41b9596273bf1712", + "collateralIndex": 1, + "collateralAddress": "RJMysLRdYGCELQts1fx8i7CxAjGzMwHkGc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.128.185:10226", + "registeredHeight": 176002, + "lastPaidHeight": 190572, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTb82dXsYa1mbadcNersXVivzysQtB33Q3", + "votingAddress": "REUr6zbLkbNMHFZUwTT9GUhb6h5o3rCD9m", + "payoutAddress": "REYnJEauFFpApzYdafE1kArPoER7mAkYLL", + "pubKeyOperator": "0022d02d4ea1d1ada0aa455f14e92a55031c713d2984eba96341e6b2928e3250ae9c5e47196b5dab173cebd5d1523b4f" + }, + "confirmations": 14996, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8fd099f541a2a8137df5fe20a4cfdcb79062068031023fcca0b3e275714c0de3", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 8, + "collateralAddress": "RSKEpjLYTH1EwQ3P2HjurKGUtDLSqFuRDN", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.91.90.104:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190863, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBDS2Zit1WqVvRCJ9CrJ8L35peWTkCcmjP", + "votingAddress": "RXiDFYXByCqhdE6FULJ997ZaQngjHuDaxM", + "payoutAddress": "RSU6opyccTPpqQ63MSX8YyNgebr3s79QvH", + "pubKeyOperator": "0e4031822d4d2be4b58f00962e8980bff439846224b2fd2cc621ecf78797b5900093bf90530c081b0b1532c140077510" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "aab19183c6ab993d841f9880192deac767098c008c25b4cb994f250e79b76a03", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 2, + "collateralAddress": "RGN2KiwwURZNNb2cpG7aHtyMN52DFrhmNA", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.48.223:10226", + "registeredHeight": 174604, + "lastPaidHeight": 190986, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFRAfNjuRNgLh9VpHpiG7jCREnRWab2szV", + "votingAddress": "RR66qdcDXzezEFgdRqUMMEDhwejkXCtj2j", + "payoutAddress": "RKxcahr3RTXAokMWVFFoaa2zHCt6uEHy1Z", + "pubKeyOperator": "049362815535aceceb3ae995108b94da860a81ed18be8f9d1fb26ffcc0cfdd5d270ac2211810f4552aab9854f3fa9801" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "17611604666d429a0efa8459948313433ce7614b141c33947a04e702a2877a43", + "collateralHash": "2391e628b34cc53dc85807d40f9d58783d92c0198e597ed18117e3db7dd49952", + "collateralIndex": 1, + "collateralAddress": "RFApKEv9KJ3KRemHqT93oHM7hwatxudVZW", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.26:10226", + "registeredHeight": 189784, + "lastPaidHeight": 190729, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLLEo22WENTq5LpSsVoCKp4gDrkRLn5mgq", + "votingAddress": "REAVxGg7vDL4MrrhqJVttLAxFwrgrNXj9U", + "payoutAddress": "RPyEZf9aaR1ApBCMt54yijNnFRvpurN9Py", + "pubKeyOperator": "89acc4c7cb9ed803a12893a77bc0c026dd135a58cd927919a77bbd930f179e3d5ec420d940c1eec19aa680fe96a07229" + }, + "confirmations": 1217, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d7a7f28c8bc1892080e4f80841b72635d18dcd120b4b0d004801dcd976bd9683", + "collateralHash": "6157e3706cf3252527c838e102e8c1aedf123e5874bcbb3dd11ef09805db33bb", + "collateralIndex": 2, + "collateralAddress": "RMeTgMij6m2yr5vq591CQsgZTfBJeHG18F", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.178:10226", + "registeredHeight": 175559, + "lastPaidHeight": 190577, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNaXWfX2SLZvFYTeuWt2oCm27jGKGXdRPn", + "votingAddress": "RQCKHx8x1YCGVPHXH5pZYHt6QPATA62k7s", + "payoutAddress": "RTKQ91WvNFRJPG82CSkqyV5MpxpGT5Rx2C", + "pubKeyOperator": "911daf0be0fa54b1a917aaefddb34d5ca5333d6a6098bc18688d9e29c66ecd4ef5c37d17a600cfe1ad9cac45c6911a79" + }, + "confirmations": 15438, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "93c86ea026240555910411e7ce2517e0f3971400de67398f1a888988bb5f5ae3", + "collateralHash": "c155287353c64ccdc19a5e8bbe035751c591f52353e590a9bb787ea772df1b56", + "collateralIndex": 1, + "collateralAddress": "RQBhoeyB8FFtSbnRzQ7W849bD9M1gbiARJ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.28:10226", + "registeredHeight": 190014, + "lastPaidHeight": 190962, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJz5yRdJktNbe8DYLyowusazSRbrFqEQkk", + "votingAddress": "RMm236qAcxJeMYuBH98AqEEb8Gwt6JW7uo", + "payoutAddress": "RNrHSbQuoXtKdHxbW1u5UXcR4bUwQ7wBcn", + "pubKeyOperator": "0e16574b24a13ef83003ff8f674235f44670cb3d348e117ac1f7269d585e7f5ce7e59d26a5825def9d9d1ca8a6013dbd" + }, + "confirmations": 982, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "086fce9e35d407390986821afc9a6ff42e372f0d22dbfd628065fd3421851723", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 9, + "collateralAddress": "RWegJ7MRqmMZtFBFXT2YA1CdgfcKqnehy4", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.83:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190622, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RX6ms69yFqVMSTevfgV5qWeaM8fq7wbtXf", + "votingAddress": "RSYsfu3eZnxAabYq7Z6sPRskH4Z1rbSD5o", + "payoutAddress": "RCno9PniUjPxU7sTHbVtd38S86XH64LYMA", + "pubKeyOperator": "8568c260d76bbeec7b46f533a431ee2db3cfe6e7413a19e0fe54a77e0345ae5f551dcab19194b02d3eaa48ca73ee78ec" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b7b1f5ff7d65132a4d542c5881030eeaa96e22d8667f267ac7a8bb6a5b401343", + "collateralHash": "a83aaddbbf253f700f1c4e22e1058dd00f50356bc71e4993189b52facce2f767", + "collateralIndex": 1, + "collateralAddress": "RWZNEQGbbLfJx3sF6Znb3P9obxkabueSeH", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "185.213.25.170:10226", + "registeredHeight": 187742, + "lastPaidHeight": 190571, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHqLguMpTx7E7udvsX789jDh1hCPAfRAPR", + "votingAddress": "RETYvZPpbxAp7wp36DSz4qmt3vdsQjrsiN", + "payoutAddress": "RYNMhEXJkDWYFWRnu8jnfxXvsJKWzuCGki", + "pubKeyOperator": "982c7d36972fb258a05ec3a0bcad6a61deaf353bd3efa80e0b497e2ddab2517c16b2fbb6e33b4b5bcb11e7c353575ec9" + }, + "confirmations": 3635, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2520b84bf34e0606c61732d99ecaeba5895cf542cb5e2400b7e282105a1a27a3", + "collateralHash": "c8d7e823775dc3816281bf7843030294aa0a412099aff647d5dd2350d99f1c0d", + "collateralIndex": 1, + "collateralAddress": "RLwErYo3fiKM7D6KyzKNjqVYP4ViJShFae", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "178.18.253.201:10226", + "registeredHeight": 175213, + "lastPaidHeight": 190639, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUfEpqK9uWX4fDzxwQximARK5nVGTASH2G", + "votingAddress": "RLUbKcp4cka9rzHi69JM9rhSDirEU6YXPo", + "payoutAddress": "RVQTdrYp68PxdR6aCaPgcfsQLSGPL7iYxF", + "pubKeyOperator": "111575473e1d851d89e6f907ec2fc05fa1c1b9eb60a313bc25e1693bba20abbd8f6396a548442c4bc77dee7b50ddfc70" + }, + "confirmations": 15785, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b9fd903591bad45ace97e31ae2a22e3c76107bdb5375063b00b83a1352124fe3", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 6, + "collateralAddress": "RSHU378Z1dCdz7vZxrtGx18xRqjZD9ku2Q", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.173:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190776, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9fTGKvAqyXLfdA7o3aHMyQDCKxTN3NgUm", + "votingAddress": "RV7RgtCnkZ6WcC5CuEJTV4g41zcjjnwqj2", + "payoutAddress": "RULXdU3pkEZEfucku3xhmZxrSunZ5VTwAs", + "pubKeyOperator": "1012de5c77119fe3961fc090172c8bb5cdaf64f9bfefc324dac681894be16a63278302062295731356b41ba449587b80" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "30a1a846c4c13b887fd8e9e6c7c8ed708957ebd731b5d3219f2480e452af0803", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 10, + "collateralAddress": "RXa98hsqZaamGcZKoXWA962adZzi9LM5j5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.57.182:10226", + "registeredHeight": 174612, + "lastPaidHeight": 190545, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RC47BxMWFkSDrXdCZKuiQqNeYwLMguTH4g", + "votingAddress": "RD3PMBRy2RBgJP51gM9mJEmtxhaVmWUcH4", + "payoutAddress": "RWXigJ3Gg7ea2zk4FyGmXs5VN4nVTcNyAy", + "pubKeyOperator": "965dc51f343fe31de03a8d0d0dd9c071012fc8ba808e0cd5b5bacca9b7dd9096a67d65ce47df8cfabe8a5eb276c3c230" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "869aaac4c1091d876e6ac22fe59578b8c6ff3b68afb6a02d41c4567303611403", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 1, + "collateralAddress": "RESE7XXFCGXqGmoEmh1xZg75qeMC1xsRfT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.115:10226", + "registeredHeight": 174913, + "lastPaidHeight": 190834, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSMXN4EhwRvXCP5hAZNRBhW8Nvv4NpWFvt", + "votingAddress": "RG9Zavq9P8pkzNTPNS2QBEk2kUoT1HHa23", + "payoutAddress": "RDHHS95yC2ZnuTtwHqVi8rZdmD3gjrwVCr", + "pubKeyOperator": "143b46f0b408dfaa911e31577697f9db232f6c2c323bcc172a845b674ee60a864f1a98e1c15a86c41bb31800a22ad4cc" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5db9075d33fe199ab670c3761290c53cc712d868d17aa10a442de3b431c33a23", + "collateralHash": "fd8b3d4ecbbfdfa03a67a8c88fb93f18314381d6fae4c44422ac72032d2ecd1d", + "collateralIndex": 1, + "collateralAddress": "RDAcpugUzN3NdwjtsFfegN5tFxhw6Zsxv5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "34.229.162.75:10226", + "registeredHeight": 175878, + "lastPaidHeight": 190920, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUeAkXRvhXULxyhmmHsJ9mDb4TsP4jPN2P", + "votingAddress": "RH3woreibTQvKCvDwNvcNwbxJg4Dmy7397", + "payoutAddress": "RUqwj4hEEw4yiMa37d6ohxjxrmp5DqjFsF", + "pubKeyOperator": "1689d3d81a162dab64b7a0db0c15595eb71411792e76accb7667bb6298707c899b6da41f0abd0ea172e82e599e75cce9" + }, + "confirmations": 15118, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4a1d2eadc0926bc2e62f4641475466ca436b10241b88a28f714d8cbbc3e5ea23", + "collateralHash": "53158d52fe1891aedc31cca2dbc89d24790b0a344bdfee90a076f8883285ae35", + "collateralIndex": 1, + "collateralAddress": "RL2uo96CZNakjZUJ4YTY2rfU6LBkTGH6T9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.97:10226", + "registeredHeight": 174596, + "lastPaidHeight": 190982, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUJPsJRJszmno6h1WtcZS2pqyPFV6jV28h", + "votingAddress": "RCkk53XQhJXxp7bWSwU4s5oYWffJJnvFSS", + "payoutAddress": "RVGFSyHuqjC3TqUH1s4Rq9CgqtqfgDaEBW", + "pubKeyOperator": "1201356ddcdb483b37b7ac82088bf6b0b1080e65b3cec91e301d96aef33443a11ad4c978762a90951ce152a37c8633a5" + }, + "confirmations": 16401, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4e3f11477f47e500b4e0ca97a3b4694c4e5be30f2c1675c0db15a8a751707223", + "collateralHash": "175340913fa3eef9ec31097c6dd6445e36d4f2e23dcdeb7404d194d4c1e8747c", + "collateralIndex": 1, + "collateralAddress": "RKGqdqL1jXysPKTijwBAz4caVVr81p26PZ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.52.180:10226", + "registeredHeight": 176166, + "lastPaidHeight": 190759, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUrf8ejYhv4PBxstGG5gdZvr1VJ1oLLQsE", + "votingAddress": "RHUWQeF8KYtxh1Vc834STS2E9nZ9djuqTh", + "payoutAddress": "RLxs6Ko2itAX37ekaV71eErQcDYabHpSCq", + "pubKeyOperator": "000af86c2671821be36e95c5b159fa08aaa2f56bf602cda117626dfc3ad6567fd990c776e64f00c43d6fa89908217465" + }, + "confirmations": 14830, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "cbc0d25eab9deaf573f0e43c3699b7650e31df286ffeb918b8c09bff4005f044", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 8, + "collateralAddress": "RSkD3foU9jDZNBMq2ayLqcDUhVfc1WmBWy", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.52.211:10226", + "registeredHeight": 174965, + "lastPaidHeight": 190774, + "PoSePenalty": 0, + "PoSeRevivedHeight": 187485, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGnPLSDs7ssnYgRBQu8R92yTjkRZERVwHk", + "votingAddress": "RGWUqj1orDL8LrzpwPDChkj9hgqYo6ENeH", + "payoutAddress": "RJkNooSdeeJPsoT1LSQ9PYoz2t9VTfezfF", + "pubKeyOperator": "87c24112fb20f2cc608eb32d8f1a2b037ca67ccba5f5e1fa93f40c19bf0dcebc2beb9e424e0f2b4138a716e87a61106e" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "39f8dac9a1acb70d2ea25ad480df3535e41550b3fdfa6dce2b910270d7246104", + "collateralHash": "6ade17611c5d97ea0d4aca699e485cfdc0f7ae96c9048982c7b4b818188f730a", + "collateralIndex": 1, + "collateralAddress": "RBCrqSWgQmKXYZd8TFc9s6xsK71T1rPi3C", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.157.56:10226", + "registeredHeight": 178283, + "lastPaidHeight": 190947, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTQmHcY1uo2TRyVvCVPgzAMmcrCC2zuEcr", + "votingAddress": "RC7X2baibYnHhYfFqVSduc5TTrnkYqgBqR", + "payoutAddress": "RQmXqxxyZjNrCvewG5Rcz2X4jFiok1PtmF", + "pubKeyOperator": "18ab4bd0178ac553f4048cdd16c3bba1a72e7784b3d69873af60d4003ac7e5bf39e4e6233ada05144c29374b3bc3927d", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 12719, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0de2c8f54e27ecc686eb4b16a147fe3fe839d0d02e9c02b51f7565b12e71c164", + "collateralHash": "98d4eee2cdae1404eee3219b16ce92f0142752c746ec81fa8c3791c22345e273", + "collateralIndex": 1, + "collateralAddress": "RHWN2P6KsYuvwSi6gBUHMWj6hT2w4Qadck", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "161.97.187.76:10226", + "registeredHeight": 176498, + "lastPaidHeight": 190604, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMu1KJvJS3zo6xNokFCqxCNbEoefd4r4rH", + "votingAddress": "RRLpQfvXmc4cYeKJNEjHeMz1AqoLLRVVzV", + "payoutAddress": "RNyfbSrejdyb2E6NopE2uT15Se7j8iHLrh", + "pubKeyOperator": "01a80c9a7b6b8c1487cf4004f0740ef189e6847b2bf3480bbdf40ebbcbadeb4cf1ff87843953cee6d24500cc6d8df807" + }, + "confirmations": 14505, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e6fddc08b9fb0f48975caf5bb23823edad73836f26f793bbbf07f600de962984", + "collateralHash": "e638ea8767f877069fb0ed20bb3fd4c15601520e7e7cf83691068e5cbe9a33d8", + "collateralIndex": 1, + "collateralAddress": "RCeBLSnJhJuSxrAXgpz5aUBtgrcwo41u4z", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "5.189.171.177:10226", + "registeredHeight": 176159, + "lastPaidHeight": 190736, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSN4Ux9ULkwAG8vXk6uYaEKPUCq6YbPPpX", + "votingAddress": "RYPY8DTZ321JBTXCYUKWVGyNXk76tvDXxj", + "payoutAddress": "RDnTJoQP5aTsuPrFH5FrJmgQHESzvS4Atw", + "pubKeyOperator": "99466d336f974b23d82446480fb198934d25644344091b6cee76b9982fc1b576d5d665160c3b21bfe1cc854f3aecc394" + }, + "confirmations": 14842, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4a50011bf8f6775290c511fec43657a641dece19a61d3b698917cc8428422e64", + "collateralHash": "7eae70123b8adb2cd8afe723fae4493d13b0dcff30ec8ddf1ce295a734c9c35d", + "collateralIndex": 0, + "collateralAddress": "RB8dyFndKrY2gMwfS5iY2vRZWQHwou42b3", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.49.132:10226", + "registeredHeight": 176114, + "lastPaidHeight": 190658, + "PoSePenalty": 295, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RM7tYRhCFXzutiBrjF6xJnM8bsFrzA2F5x", + "votingAddress": "RMDyA4hH8vU1b5629oRAFRYR3mBcJ98E3z", + "payoutAddress": "RPGRKkm4qaeYXzLWSdVZY4vufds2WgWgdh", + "pubKeyOperator": "11dab618d1757e1d088e306997cd4733189600567826646168ae68d3d8624865c453b0f4907e7d754cd58dbd0f3cbebf" + }, + "confirmations": 14883, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ac0b91a966b15b97a1f9aaeea616c837e462e407c0f0ec2d3116c071c41182c4", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 5, + "collateralAddress": "REf1QnofX2q79bHEo1EfPVgGogn5MLDWmb", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.122.211:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190862, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RA3HT3o1vWBF76uhJYn2zLnrzY1Q4vZjXN", + "votingAddress": "RTLt4XwwAG12YwCaGsUNYnsM5mq9xcW5ca", + "payoutAddress": "RFcLSYNFxrzqKr4SwWP5mpcS98MiBMddys", + "pubKeyOperator": "14c02ec6c649611e576a84fc4b9d7231711f5046b0f5813c8ccbb6c2efaca1d66399d467cd818f1fdbdb363f4af2b47d" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c5a991ba707254386ca68ed511ea083462de2e91f76c23b8f5c42e3bbd57cae4", + "collateralHash": "b1dea4570bb87b9db8aa674e0234486fa4e7e0ed163433d807318c71cddf628a", + "collateralIndex": 0, + "collateralAddress": "RMCVyXRT5YQ9WVEAQbQnTFcGWKF27mp65S", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.121.254:10226", + "registeredHeight": 174497, + "lastPaidHeight": 190871, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHxYHRtz9uAi8ND1FqG2h4JXYmXLLzgW4w", + "votingAddress": "RUm99Rkb6TZGShC79cpVb5o1L8dgYMoYdU", + "payoutAddress": "RNo8EpwGoNoDKFBKX5d3wPYktU3be6vzsc", + "pubKeyOperator": "8e85fe0baa9ec032d7f2a52a23a80b6dab937ee1d8e9acdcf081237b039d5429010791ede1019ab3ae219fdccad178d0" + }, + "confirmations": 16500, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9c101e69e381f49622e515ef53294744a98f77836a20f327c6025aab1c365344", + "collateralHash": "6bd67c7cdd0f89741d6272f76198f5dccc212ca7d2dccdb98d5e5151ee5cdfda", + "collateralIndex": 1, + "collateralAddress": "R9nbbT4LgANWFB4JV9Jogn3XsgfBxFsBQi", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.2.169:10226", + "registeredHeight": 177437, + "lastPaidHeight": 187110, + "PoSePenalty": 324, + "PoSeRevivedHeight": 190942, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAUPpD51hDa14C1RuyjRdmVV3UxqZDspt6", + "votingAddress": "RJs23cE2k7sukzKXKCpWsrt5GGYfsVPsWs", + "payoutAddress": "RY6iPtGUMib6sfRTzvZKYU3gJc9dv6XzVV", + "pubKeyOperator": "8c5e46f260fc058364d0af5f0d03b9e7d629fc2a219cf3decfbed8499b236f8e34ea9327d774e2bd36484b47befa88ed" + }, + "confirmations": 13569, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "71d57c577372d5dfd3693f47d37cadf59c69db732dd0a9c4995379c5888e97a4", + "collateralHash": "ff87f8854b7418e2d283bfc0aef8d53944a7a5b0eff8c97605bdbfa2d157cf19", + "collateralIndex": 1, + "collateralAddress": "RXeo9ZNFxMaS94FLR1X2We9Yk5xWHcGT7z", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.217.30.144:10226", + "registeredHeight": 178558, + "lastPaidHeight": 190801, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJdUobABEfxvgap8DJhsLoLz558F3ynQGo", + "votingAddress": "RNA8PDMteYpYVyt5Aynk9uPbgjE49UHJmD", + "payoutAddress": "RLVeESSejxxUPJK83WRdThA3ra4bpXEQJu", + "pubKeyOperator": "95d804a21e4e3ec0c21fb41184e38470257b6d2ded79c7d01cde77f3d30716b8eb845a1db7969d92ae9039b81ec0e8e0" + }, + "confirmations": 12442, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ce3db2312deb17dc8993c0748954f6e7893bde7b8bd4c5ea62958ac8f8dc7064", + "collateralHash": "a594173507c8e535cc38b782ca521b72b49feba7cce374b13624698eb92269aa", + "collateralIndex": 1, + "collateralAddress": "RRqNWmMHvbxSEUpN7nU45K5TWnfAjHA1sh", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.195.149.133:10226", + "registeredHeight": 160936, + "lastPaidHeight": 190689, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REzeYAyJkauQe9sBryp2SA9bcHTsWUnDTL", + "votingAddress": "RCoBLa1HpAuwEhut5NGDcKVpvLogboiQ3N", + "payoutAddress": "RVHEnqPLyipn4q4smfhveVSehEGEAkjww3", + "pubKeyOperator": "846f0dc7758d08b45cf9e21f04239c72a5513019611f7fd1ca8e1c3ab05d60e056b50376bfc40211f3875a73c808152d" + }, + "confirmations": 30064, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "555f6cfa91504a6ec7b7ad7730186cbb842a88321cc31da4b726fc9d351c8d24", + "collateralHash": "537274e1ec60d1c485c56ac4d9deca6aa92ebf20ec00527b76193a2cce585bbd", + "collateralIndex": 1, + "collateralAddress": "RSbFA4BX5LpAfXBDR9VDYHv2nKLc5hQxbV", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.103:10226", + "registeredHeight": 181007, + "lastPaidHeight": 190678, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REcqr7YpTYQHCsw2XeaspJRtG15eSNFMfW", + "votingAddress": "RUFBRMTwJrrqryxR1wGCqNsYv7rnt2x22R", + "payoutAddress": "RGebqciNRs9MkfWowgDQunnNzsYrQYCSAU", + "pubKeyOperator": "993ec09c39e5c42912b6acc3b93b1e52923f7dc2ed7cfa89d0d101518323c27d0411d212c15712c8fbb0950fd6759cd4" + }, + "confirmations": 9989, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0032c0b7ded53f18f7e705a055ae7a1b6239285cab31082ea5c2b2601cd7bd24", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 9, + "collateralAddress": "RStHcpRchtUCQcoHcqG4EFAnY5i25qdzBN", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.141.72:10226", + "registeredHeight": 174910, + "lastPaidHeight": 190810, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAN9ED2QGfpA8CMKtdf4JyYtd7vDWF5DQJ", + "votingAddress": "RW9EKUCf967tw7QnuMNBg152fYqMZkpkqA", + "payoutAddress": "RUCam2VhR55BAupHN3mJbQ1fbw8tndYUeJ", + "pubKeyOperator": "9818a2eee30b00aad499e5b72da19abe371072b17467ef3a7616d08a47a809adbe4d641a21db48ca2837ac9142ac0734" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "258b54227ad696459f2e05c365f4ecff5b0cf859ab1725265bb58078e5ce8244", + "collateralHash": "6290aeb1ba039d64d0dc5ce66a4b09429dc59cdff4a3cefa1db901db57e13557", + "collateralIndex": 0, + "collateralAddress": "RJQGFKA7oiAcW4BQHH5mCdbKbNCffuPTAt", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.216.211.207:10226", + "registeredHeight": 176578, + "lastPaidHeight": 190701, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKgxfcnpxiAiDjYDxD9tndcgjG93B5XWe3", + "votingAddress": "RSVGzFjx8oEj33VyCD1kgUs8EDUz1GFvNH", + "payoutAddress": "RKsQ5cbnN5kPv6zXNYh1p3YmWuzwYsNKE2", + "pubKeyOperator": "0695054ea93cbc59625a46ffc78387f908dc651871dcb263424d05de937d09126d5d9136578c75f3123d22131a77951f" + }, + "confirmations": 14423, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "95c0d582beee72c5c3fe7f5973848ce9168d2c6ef82e7f65c9c8345313ec8644", + "collateralHash": "2ba47078eb4210bdc086788f2a2065b39d78247b23c82dcb0cef9f4758f3466a", + "collateralIndex": 1, + "collateralAddress": "RBiN8wzATCuNzdCh5zqe8nrRER7P7MxuNu", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.73:10226", + "registeredHeight": 184053, + "lastPaidHeight": 190599, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRKm5steDGNDLPK1Ehu7KW3i6Y8tNKGFPe", + "votingAddress": "RMewnsJcWG1B2vB9kiN8fX7m4qaAj4hF9h", + "payoutAddress": "RVFoTZdfojbwae1yWWPk1BA2L8KvpGE1f3", + "pubKeyOperator": "97349f7a807b3cf405c47a3bef4251a796270b56264e1ec49ea244b3a47678c121dce4a2d99e060e6bcd3268bac346e3" + }, + "confirmations": 6943, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a34a9067b98f4b1ee2fbe90da9f20a5d7427487b888de58032b3f7b67e537085", + "collateralHash": "6b91f8c660aabab8aa4ad6c99330ecfcb8b48cf1161dbd8cbf87aacded9f4e19", + "collateralIndex": 1, + "collateralAddress": "RNdRqm82BaAo2tFLAuj98Y4ysa4LHduTEe", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.104.73:10226", + "registeredHeight": 176467, + "lastPaidHeight": 190586, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLUA3YPahaRcq5iDYhBoeJERWfmwtje2H2", + "votingAddress": "RYaMVsn2HZjvevCo37ENDNtuNBoSECPrzj", + "payoutAddress": "RFdMGV1nhEKdYSYsiXQVshAFeBFsQYbTjD", + "pubKeyOperator": "8160168bb9e1ab01068f299cdbb92202b3a692cad0b0bc705a869168687d2da4d6b68319bb213643619339a81068f264" + }, + "confirmations": 14541, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a1238f0aefe0d3072e654b4fbd9c9fd83c370e3e528ecd5e4f79bd0219e304e5", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 5, + "collateralAddress": "RRcKjhuRhsT27QE5YCNRsHoS8MCtw3ACdG", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.172:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190777, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RT9yNCbxh6c5Bu9s69124PghT4Jft53B4M", + "votingAddress": "RBmbTBmFqXt5ArmhJfXwRWBx5wxnsf5T8d", + "payoutAddress": "RF37wLD52HYAQSxsszoy4iyE3HfBD2W9Ku", + "pubKeyOperator": "0883a46504e2dc31ec877f27d90cf435c9ba7ccef83f21115de5012fa99c0f86ad2cef00a78047605cda1e5b20e1c266" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "429d48a5b89c844fcffe708041f09e60271919d5796a5af492ff3be53c51cd05", + "collateralHash": "aad526080af8f8eb2279400b47ec0e6b1b469abced96ab6badf7a4bed23ea0e5", + "collateralIndex": 1, + "collateralAddress": "R9MSygUqwR9s6kTCyND8YC2LhU6PWr8osB", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.179:10226", + "registeredHeight": 177719, + "lastPaidHeight": 190745, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYJQpdxiEUrfaDbocu38BerYYJk6oCj8V7", + "votingAddress": "RFvE3yA3Qem17uFHgdFWCg8BouK7up6Xmb", + "payoutAddress": "RT8EENvPDyBRar3czS7jekKhnmzNooPGRP", + "pubKeyOperator": "10e9f612a408aea348e273ff2cb1fa590687e928bd8f05e822c505a3d3c5ed3a9a4e048a4a2ae91e00dc07c939ba55b9" + }, + "confirmations": 13278, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "62ead3ce611088c7282d90dbcb0d8c05db1bdca0d7ff5afb499300761e8b4545", + "collateralHash": "4574065417b414a793334c3de861375ee7fb20fb0a44211217bde6ed4c17b755", + "collateralIndex": 1, + "collateralAddress": "RFBG2EA7MJBsnFyiF4n4B1C8ox4rieVEtT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.156.90.140:10226", + "registeredHeight": 176660, + "lastPaidHeight": 190825, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RU6U8k8d4kUfSKfXg5qXz7W7mEcBqtruSw", + "votingAddress": "RST26jGiBR2NLzKce9FscqVduq5XbdwxLQ", + "payoutAddress": "R9YrQ7DkKnDL9UCku43EBcDJg9ncjdzpFm", + "pubKeyOperator": "87043ebbfe0b6a2f93563259758f957403eb13aa3b50853b2bb0ddb6ef69d457fdf46546e01782650ef13454683ff2b4" + }, + "confirmations": 14345, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "82be25eceb3662a1fde9bf4d489ea4868a7e59bfcd9f9273e97097c83ed4d185", + "collateralHash": "ef070b269dba77bf57390e2099349581780ca20ff58f20fde022f43e83932441", + "collateralIndex": 1, + "collateralAddress": "RPLsBTZfW6tGy6YvgLkKKJMQgcjegEed9s", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.145.164:10226", + "registeredHeight": 175177, + "lastPaidHeight": 190608, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFq3YMGDh2o19WWUPcCpCsV4nixRPoXYPT", + "votingAddress": "RTu8ejtVdSRDvxzha9Yzt4EW3Vau17fax4", + "payoutAddress": "RSGJ681JsxsZ8VVakSDupP4CCFDizagS6i", + "pubKeyOperator": "07b850cdd4e63584b07f46607caba726ecce9a2d9289a22c14cc518ddc50ca99deec968adec677810bcf06d68c2d19f5", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15835, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "56de8b7952d5b8862f7f5c4e2b2e482f7db27f1875adb1715aac12aab5ae85a5", + "collateralHash": "63dd8daba0bacc5b260e26def5e90e58d2a59dff6f1a699084730bccc79c3b75", + "collateralIndex": 1, + "collateralAddress": "RQjda2joWJAtnZxUqDx48rKSmams1ptvFm", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.124.144:10226", + "registeredHeight": 179005, + "lastPaidHeight": 190712, + "PoSePenalty": 0, + "PoSeRevivedHeight": 187427, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDeCneZxLwGEWYLWgwCt3B3iZn9D1twCzV", + "votingAddress": "RBZWRWKZgVhh4QfyPDD5qiAUqoDmEtAgeh", + "payoutAddress": "RRb9QN1Aak6VJiDE3XkXjxH7qRuNTCA4JV", + "pubKeyOperator": "8f6c06f565d1cd082b2e5f0dfd086a5ab178209c0688c7273396545ed5ebed05c4a767f84847a79640d12ef816ec4479" + }, + "confirmations": 11991, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "cb519e44cdf5cc4ccadb1471344a1261af018533ba0a14bc94228532e21c6b25", + "collateralHash": "0b03bfbcf502a029fefeea7fa92e012ce29d590c98dccb6fa48dc66dc23f1da4", + "collateralIndex": 1, + "collateralAddress": "RGuA1XwBeJ2dR8NS1GyLrKqMTXh1vZg81V", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.217.189.62:10226", + "registeredHeight": 176104, + "lastPaidHeight": 190640, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWdXDFg3USJyKW828HtnwynATFxDcKBvYn", + "votingAddress": "RJfMs9FNsEpeKhdarP7b2Rc5SxREF83CQS", + "payoutAddress": "RJwz9kz9uYu7KBvtpzZi9MaUWNz9x136Hv", + "pubKeyOperator": "1218d7e0f448317401dc4c573e483929e012552ed3d67488f2006694f2c7efb30ffce1a094d859fe9f717941d05fd4e9" + }, + "confirmations": 14893, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6a3c2df06cfa11c99f1c8601b2c21ad68f47c1a93bdb757f956f99ef4d1bf345", + "collateralHash": "4c0ba5f609364b79cdf42f973c3cc84b35a0229836328afbb9c4e57abe360769", + "collateralIndex": 1, + "collateralAddress": "RDiJcPhqBURL6SmkR72pov1YZPkpLYgTS9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "139.162.119.163:10226", + "registeredHeight": 178871, + "lastPaidHeight": 190676, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RES6bt9vibyEEwbGvmt9KA8rgWbsFDPy4f", + "votingAddress": "RXRJrVmpfmygdiJ8BwoWe8NYtJ4azRth79", + "payoutAddress": "RWoHXoCGsmLEVACL3dTca2GdrfNmDsRSuL", + "pubKeyOperator": "93aa16dc724f1e0638c90c8d9798962ebb4c2b7142fcbaf7584e186307a8cac9d985e05d580c904c8ac342812cf68803" + }, + "confirmations": 12214, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "622f49c031805c4169e2f3e454c51b2991bfd397150467c246a1725ed6b2afe5", + "collateralHash": "87d644dd0ce4eee4fec67978a6078d712dec4e723f2859ab782f8c9294382991", + "collateralIndex": 1, + "collateralAddress": "RP1ZEcps5T8K2nz85dseA78uhJ6gGbL5od", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 4, + "state": { + "service": "207.244.251.147:10226", + "registeredHeight": 180748, + "lastPaidHeight": 190884, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRL1to8xS2Gzkcacj8trty3dkZtaPdYje8", + "votingAddress": "RUcraY6skhEt6nbr9mfTdKhGH787Psa8re", + "payoutAddress": "RMLWenNctmeKH8o12noq1pBTYtFYysqhse", + "pubKeyOperator": "0495b0b29461ae57966ed9c35a25c666274fb1bd31742ac7a7073b74eb87b1bd8af8c24bd8bd808b83c6fefe57b56065", + "operatorPayoutAddress": "RNFh6umwSVuKwPPbwrzfZYWrM74FKzr6rs" + }, + "confirmations": 10255, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ecc3763e21be796f4b26166f7e39b8d5263995738342a61ba832e7c4defe4825", + "collateralHash": "20ba234db427d2ab90ba9690fe138db0214d587def1341de22d56552dc269402", + "collateralIndex": 1, + "collateralAddress": "RJxtqmVP8GgYZckLDivkCcAokBcb3wFjHT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.140.171:10226", + "registeredHeight": 175219, + "lastPaidHeight": 190644, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTrYsgt934qe6LKYuuvuyNUkydB3KzDGdy", + "votingAddress": "RUokjAoZRXN2wo5HeWACv7eHpDT4FMbPp8", + "payoutAddress": "RTPRftyp661ELAwVv4K47KRbFBTJeabh5S", + "pubKeyOperator": "95577d17334206b21a54cbf452ae1c89a385e1c0296bdc68a126b7fa71f43f8ac56bd04781c268320613c490fae07dcb", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 97021, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ce12a0a45638d53eabd565d3bcecb05eff3140c175c7ea11bfa162d97ff7d425", + "collateralHash": "aaf65c675db8a298fff1d80237e410a487c47d7d0e96c3af0ad824c7d7745392", + "collateralIndex": 1, + "collateralAddress": "RFXbdTDWoSGei1fkiCUoHYD5wbavr44zmt", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.163.177.158:10226", + "registeredHeight": 176740, + "lastPaidHeight": 190926, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYUBphtAHwja8YzGYWo9EkdnFpaYtFoiBg", + "votingAddress": "RRRLYWy7oThTzE24UtDJowRqJZoTYJ3no2", + "payoutAddress": "RByYa2s5UFzWmWPXWjpAoFXNUuLEPBtfMR", + "pubKeyOperator": "01d1fdeb2b3de393bdd1aec67ce0dd1b5ad0619e5abe1b0d72d8d62f33d6b0728726263078fc299225788c99774a5e1a" + }, + "confirmations": 14259, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "64e3b450bda8d10e710564d75f05d4001b27e5480b093c5ccc89334e94640445", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 3, + "collateralAddress": "RH8d8ykRTPMDFpKVmGKR96Dmpz8dbsw93U", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.152:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190756, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFdLBkgVs5FjUzpPoV6iDUCyjrcRsrAYcr", + "votingAddress": "RMWJvgQ658Czpnos39y9FdxHed4q1XMSgR", + "payoutAddress": "RMVsCckXvJnsbSEvDqLX6dXTEqFbLFRi4S", + "pubKeyOperator": "18713826166a89d0ada83d8cca9cb6437044f846b0ae93a2939482958a2033c3415962f40d5239e4525d1f77d82c1789" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e649ae07f7fa9d17bed28436855e267ec48c0600579ea9485790a4e351979c45", + "collateralHash": "6126385b5392c37e34068e7ff07217967c20c27c344678043ddb381074ae85e7", + "collateralIndex": 1, + "collateralAddress": "RBgpXD9xsiHsMUEAJFnAeMGZ4oRskHxzvT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.134.101:10226", + "registeredHeight": 183215, + "lastPaidHeight": 190675, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGDsBqNSdpa96BQP7wfw14zVENvUwDSHiH", + "votingAddress": "RRyrq8s88BeWbehuvW1YYDHWrasp7oSrcM", + "payoutAddress": "RC3VE1P2HMcmg5vksEmK86Ad4cMf6yPoUq", + "pubKeyOperator": "15beb5c74576ba712820126991c45e2d3a9e6bab44e6a0c98da139d37924d724bf02d27ef45f9707c107bc67e23f96da" + }, + "confirmations": 7784, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e5995c305e5168e0795788a7c4c5f3ff25b7ea73aaf0f64f610671d26cdaa445", + "collateralHash": "faebc088d5ca23e99ddee4f12d1c765c10cd336cf3980c8867ea2483598b4e06", + "collateralIndex": 1, + "collateralAddress": "RNbTyCx1K3HHwjKzJboLPFBejrNk1Pas1f", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.180.203.238:10226", + "registeredHeight": 176389, + "lastPaidHeight": 190535, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBLc1e39cab4HGR5Z1CnYMwuP7YtAfgPhm", + "votingAddress": "RRgtSG1eCXiguz19zu5V2b2HERLYegHJ3u", + "payoutAddress": "RSr8fGEFRCYHyQND5mewKLEZ3B5eb9HnZL", + "pubKeyOperator": "098c1d97ec20727fdc1177a75ffd12b1b9d02d79c8793575478684e03b07851ea3bc60f4899d9b2c430cb4ff38a2ce60" + }, + "confirmations": 14612, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9f63679a5d4dddc57ae98bd7c53c3351001b582344f44698600932e05a46de85", + "collateralHash": "7c3c235e99a780981e113221e1cf13e2e93608be6d5a1f46acbbec15cd80c905", + "collateralIndex": 1, + "collateralAddress": "RNLZ3jaz5rcDyC5nm1cEyt5jLhRjLi7R4M", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.143.181:10226", + "registeredHeight": 176906, + "lastPaidHeight": 190645, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUvqSRnb7iJkcx4JsfiBQeGsuS5qbpjHqP", + "votingAddress": "RHdBZVNLXyRmELLworg7UhQHEuqbSdLKs8", + "payoutAddress": "RRM3JYBj89hY3jfg2sVEaKFTgygXgHT1nh", + "pubKeyOperator": "87054a1e1feef30f539bf052e2a298b7038cd74c080159b38da3ad5e82b4f5f4d1f0437b30e5e4f60a226081d8097fb4" + }, + "confirmations": 14092, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "25b538302e6dc03466d9f9242244112c7b77a568627562bec34c86ebaf696a85", + "collateralHash": "3cef1430a0bd448f94286f3b0b0f2b5b75342cf91032e73aaf6ac8cf6b831a1a", + "collateralIndex": 1, + "collateralAddress": "RGSx4mysLQKStfP8iJEaqQjJGtDdpb9rTT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "172.105.54.136:10226", + "registeredHeight": 178861, + "lastPaidHeight": 190656, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUf7xHJgcNamSinm8zsk5QsCg7CjDB1a5b", + "votingAddress": "RSuQ4D8YQUqbKx7qGmHFmK3mbb4zmc475J", + "payoutAddress": "RM95NHssE4nyKgnLrzucTmkgFcaGEzDLhr", + "pubKeyOperator": "869ee13b76ff1bc48693db3913496be5993681985634583781ddac097c8d86bf6be3e83ff34e2787b8fb9c6fb7d2d6be" + }, + "confirmations": 12230, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "36b29cbb680a82f85ca7d74e2c4a0954102a6b6a9d5f331d7c99a2ed45e16705", + "collateralHash": "70f35885f696c4e3d797f64535b406bc220730135d53750bee6de37088c06a5e", + "collateralIndex": 1, + "collateralAddress": "RPfhQQfQ5no4X2KzUKecyyywWWJNWEsw36", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "167.114.67.142:10226", + "registeredHeight": 176022, + "lastPaidHeight": 190580, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RP6gLahwrEpyW75hGCNxFT9tHnTN9hwhUW", + "votingAddress": "RDjK1oZckvFcjMicD4vDgrwC3Ajrbq3i69", + "payoutAddress": "RCH3rHrm4BoQRxTdn2XmymP8idmiTSKWQa", + "pubKeyOperator": "923a2a1b46cfb7fd2bcaa490ebb680f1fb10af1bcd24db96afa8ca656e703a43247e477c8421fa79dd61e24ca1998c07" + }, + "confirmations": 14984, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "fb1c8c817bf8bb9e671ce8a4876d21692e85d4ef751dc1b9c929aea21a137b05", + "collateralHash": "e5fbeb85f7c71c618583e5be15c41efc25181f1b292a8dc564617f373c94704a", + "collateralIndex": 1, + "collateralAddress": "RWGNwMMnoZpgqPad4nDEZkYYMFVL9aLynX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "161.97.86.40:10226", + "registeredHeight": 176079, + "lastPaidHeight": 190610, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCL5nBha4gHWVZeN7oJhSRknQagU6VUSVB", + "votingAddress": "RFAGsgyMmcGgQa3A9NiK11pZiDwW7Qrc5U", + "payoutAddress": "RMTkBNpoWKwta55GxgJdPqa1t3xsixc9sn", + "pubKeyOperator": "8aae5e089c74e67a2098056786ebc6d45b3be628747cfa114b0aaf03e361776e1801ab2685be9a00ee583b6cb885f7e5" + }, + "confirmations": 14921, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d06271f0288f34625f23b596deb0dc1fc7b764f397dc2cf9bbad0edfabaaea26", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 10, + "collateralAddress": "RUVTUv5riX4Vz6Xnmy8YrNx4AG1KpwzaJN", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.253.18:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190853, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBrN2LgnsY47A67vJSR5UijPSkjPyYoG9N", + "votingAddress": "R9rhYDt4c1Do7q8c5AHhfuiAMh3QzSswyC", + "payoutAddress": "RWYGwr5YARi2fpPVRxRgs6QWP3cMUXYxhR", + "pubKeyOperator": "05ec81fb8b5b9e6364cc215d9d1fe0fdab7166cfb78d6186c4aab8cadacaf98d1f1623de2757e45bc74fc8a5714ca962" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c8448239fac9099a12a49c32aa009d0b585538878f18a9babc25677ebae7d666", + "collateralHash": "d17a71c0edab1fc30f82624c12015b371015f88111d8344ecdefb111ecabee6e", + "collateralIndex": 1, + "collateralAddress": "RCNXpLgoXqvgjeujZMCyjuwKeKVeC9ggVQ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.156.90.115:10226", + "registeredHeight": 176658, + "lastPaidHeight": 190821, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RC1Hznc9Me3oTXAC5tyJPtn4jJjvvvrScE", + "votingAddress": "REqUKoMtnjfybNBUJtF4i75DAM3sxXBReF", + "payoutAddress": "RTgnvAXj4JhPM4BDRhfak17HYNAw9HQ5Ez", + "pubKeyOperator": "18d585b1c884eae4fd1da4ae9eab50aa0ddace96587aebf78f7fb2f98efcbacc0c1be6b3cfcef0e86d2af64b1aa6376a" + }, + "confirmations": 14347, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "837358322480644d94ac3fe50c53fe5e68074838ecb11f193d90a126181e82c6", + "collateralHash": "05793e0e28951e9e9f5bae0c96d59e5d4cd029ab833862815162d437a78af365", + "collateralIndex": 0, + "collateralAddress": "RCZ9kZhdSP7b1xCYVoddYQuV9k6g85CZjg", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.145.171:10226", + "registeredHeight": 175223, + "lastPaidHeight": 190661, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWrzFHtQrknCQoeBcsnYwyNPbSH29f2ZrH", + "votingAddress": "RYNm8cL53278J1XGRVbUwJyffmu4bAT1TS", + "payoutAddress": "RTPRftyp661ELAwVv4K47KRbFBTJeabh5S", + "pubKeyOperator": "199c437cc773d6d74a3948d14b229b3e32f245d7a42d2eebf554fd7a5135227c350c29a210a5a4429fb9007bb75f34a0", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15784, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "37f975368c4ae716d5634cc689d4bc51155913c3b2b21f4fb4b81c91cb08bae6", + "collateralHash": "ee6597dff3fd143a421f84e189aedf63389696a31434f072e39d749b4f2b8f8c", + "collateralIndex": 1, + "collateralAddress": "RP9faEaduXVPpNan269B2zTyNYUqGgiGWn", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.157.55:10226", + "registeredHeight": 180164, + "lastPaidHeight": 190713, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSqb2Rtu1F6uw3E349K9wDmRe3DKREeFLu", + "votingAddress": "RXFy6raTcUkWx3g2Shg8zH431UZHa9K8HF", + "payoutAddress": "RSh281PnkAMViJUDF6XajBouHXZTdbofSn", + "pubKeyOperator": "0f9de3dda60e80d1fc93d9ffa1ac4ef537c10f4e5e10f88b305f7cc305363e9e210004972af069550baf6584f10fac07", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 10854, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "3e74de4fc6fd490a4de527e697d28222f7c08151cc00ecffc3acbd408173b706", + "collateralHash": "4f69dc7f087b96d01a3a255d52b92fe54f0e71b103d09971b53c9c626f3db74f", + "collateralIndex": 2, + "collateralAddress": "RSsJroZ69Tb3gHcfKEeEZS57sAKCsvWzsd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "207.244.249.180:10226", + "registeredHeight": 175956, + "lastPaidHeight": 190533, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXourwRgS7L8EMyxbsLMAJhw5bAbtsDqH4", + "votingAddress": "RDsuxhk9VGpDtF3Eh8f6NxPmMGbhQ948zw", + "payoutAddress": "RF7W5NmPYcQfWLNpQtZH14AtuyAmaGMCJP", + "pubKeyOperator": "142a9b25a85f2c0a2c3f443a4d5da04603354ce0cb6974b33b56e8e6c3255c67650fc1cef459e5a155fad54463ea6029", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15057, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0b85cc99145b79dc2b0e52845abfbc80bf6528bbe95bc93f6416d4f8633cff26", + "collateralHash": "67743c359dafdda58f5b8812ef6cec390927b4066e81cb21c30cc55fc39f743a", + "collateralIndex": 0, + "collateralAddress": "RQNdmefpnSXJQXwPa8eSDv764YizLdbZee", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "161.97.101.152:10226", + "registeredHeight": 174646, + "lastPaidHeight": 190560, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGxZKA5M9haL7wGZQMLT6J6zXsWsweZrPq", + "votingAddress": "RVYK7FduTALdrHYZk1goDFbi4zkKYNGbmk", + "payoutAddress": "RTRuBgqfay1jiCBJQxWpZqQFTqiAp1nqcu", + "pubKeyOperator": "09cf16c232316f678e223ea71666950190f6385453ce55f611ffa803f4eb9e674aaf996ad16d6f69938c25d093ce9c28" + }, + "confirmations": 16351, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "29e38a0eb038533267d6e630be04d65b763883d62949563dd4d9b8fccd9d5f86", + "collateralHash": "b92e17ccb820c1d8bddd3ec5b65fd56c7a58959fd00219fb57413f3e9cf32811", + "collateralIndex": 0, + "collateralAddress": "RHbWwkc3JEsWYvtzzQigccXeb9NSti7ypp", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.141.229:10226", + "registeredHeight": 179584, + "lastPaidHeight": 190551, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RH1x4ArWyugpEAtqTEBV2DD4iQFPvRdBx9", + "votingAddress": "RDHGHW6dfzRC8kxhtdEXZdysSmWRGbrCvd", + "payoutAddress": "RRM3JYBj89hY3jfg2sVEaKFTgygXgHT1nh", + "pubKeyOperator": "815c6de7f8ceda288495fa93ba06e8e4b1426382a7d02a37336c5377d0e7207017e19f3f0eceedd575f36f7bb0dd4407" + }, + "confirmations": 14109, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8c5b0c420e659d457b7d7fd09c483dfd125edc14cc4099ebd2f02a809f1643c6", + "collateralHash": "fb973e868b86a08256a418564652760ad596fd551faaf76d6317e499a5b991b5", + "collateralIndex": 1, + "collateralAddress": "RNnszMJCXnZbfpHzuQUczWm3jg5v6HX3Sw", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "217.182.45.97:10226", + "registeredHeight": 176722, + "lastPaidHeight": 190905, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RU7zUsrEq188cd2CnDTExharHbZ8uPQwDY", + "votingAddress": "RYZpJrRDsDozDnSJ99fobWmseJPkbbztHs", + "payoutAddress": "RM6zpNUuZKaZcnS1mJyf1gdFqGMwSYo5Nm", + "pubKeyOperator": "85619778705576073958f687b0780ed88f300c0c92156adadf18e8bb607447841ef12c86661b0b752e3a361819d39580" + }, + "confirmations": 14278, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "efae918edcef9b9167dc861f68acc879d8f8a16d6bf12a6d092aaef481e90486", + "collateralHash": "8f66f9e52b2ec00b33ebadc5662e973f02a62cabf62b4056ed9eacd95786e325", + "collateralIndex": 1, + "collateralAddress": "RNwQHVnmar5iMeMA1CRicPjwNuLRGGvhE9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.180.214.205:10226", + "registeredHeight": 178661, + "lastPaidHeight": 190922, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMTyd7vxW2WFLShXVrr5GU8xohJPSjc5V6", + "votingAddress": "RQAzKiTwzWg6Zc7s243MQhsyDHu31ybJGc", + "payoutAddress": "REbJ2A4MSLF5exToUQxz64qkSLzu9Ypf3h", + "pubKeyOperator": "913db4dd4ce9934300ca1d684051d3b5fb70c789071934f7f84fea5e308c231301ae05f5e83e9e55b3ab6c2d55f8dee1" + }, + "confirmations": 12338, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d684b6623121c4993e9f29dffc53c0cc74ebb0169e2a94ca2bd933a52548f086", + "collateralHash": "e14776938824929da7c57bc36809f4fa63a3b8deb8aa4cb866e3da1ab3b810bb", + "collateralIndex": 2, + "collateralAddress": "RVzbDj9G2BgW4mGnNmiXQazsHGrHo1Zk5k", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.171:10226", + "registeredHeight": 176660, + "lastPaidHeight": 190827, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNLuMKctGNzCjpmQYJqXeLiURmBm9nMb3r", + "votingAddress": "RWt9JRVU6Kwje5tgzPuZpuGqdy6P2uMeGa", + "payoutAddress": "RDe1AZYnrFeQWtxgVMq8FV94BKAyfu2i2j", + "pubKeyOperator": "8d1465d0960f8eddead26bdb7b43986fd72c1c73040a8021155bac998597049d6b1c43d855705ddd4dfcaefebb2e9307" + }, + "confirmations": 14336, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f056d701e1ef75680e1d5ed3bcd5505a3a33eb7b11a28b7c45ddaf8da37518c6", + "collateralHash": "5ca845d8e79d4a82cf6886e218866ac28755b7fd20b31c0f9b98eb760b2225da", + "collateralIndex": 1, + "collateralAddress": "RWEV4AthPt2pTkisyfqagn848DpYjukCq9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "75.119.141.253:10226", + "registeredHeight": 175753, + "lastPaidHeight": 190790, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RH6YVU41JFCXZw5fna4mMYHU3PKN82DNaW", + "votingAddress": "RDAvsAbvoNQ7MibRaKGe6GiBM9zLqF1yvK", + "payoutAddress": "RQc9ZJ7zDmh4gfMoGEm8AgHMoSt1n3bgxP", + "pubKeyOperator": "01179ae276056e6949152357140b527155d07842acb1467770e3682fc02f5ebd88e96d5b4c0eb5a5131a9e746200d9a5" + }, + "confirmations": 15245, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "fd60f45d22ac0ba58ed356eda9f8a7b71b6b95a8b0552ab28a75123a8b9840c6", + "collateralHash": "9872c95e498f37a9fb5b9f5e91844e4f8d04138ee6c70814fcb0cd4d8a516fd7", + "collateralIndex": 1, + "collateralAddress": "RFYScVKKTgoSzGMf4eLto19SKXyftwJwdU", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.95:10226", + "registeredHeight": 174590, + "lastPaidHeight": 190973, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLzVMd1WRnLmfGngVTHN5MwJJpgZ1dNr1N", + "votingAddress": "RVxn69TejexY6GwbtRVPeEoTmdiq8E2fqv", + "payoutAddress": "RULsjWeaanJNAWnshL6mimaP7SLfN7GkAs", + "pubKeyOperator": "8a87b4376410a552a26c343c65db590e769aebf0e0b6731e7c510009aa867b5b0e2c9bf2aa192a3893902aefd22139e2" + }, + "confirmations": 16407, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5715095ced89a7e42d043dd63608a902ffc933e5f4c1c81d9508a223aad05d46", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 1, + "collateralAddress": "RAcVHYUuhxDHGgzdJ7TJ22HgUZFUMTrV25", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.51.252:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190625, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBgWZ8YL6wPqJPsi4aPrgnsyqE2ArHZ76M", + "votingAddress": "RKnwu2CPVGV1xW3rkBhSVLGTUCyBXhLrwu", + "payoutAddress": "RB1HehH9o5bsmiQBC6iYvVUZ9P54SaKPpk", + "pubKeyOperator": "866047b6d808e118c3227411f82178641fd72338785cfb645f2638da710f55705aeec4ea939604caa7a736a60cd05d08" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "fc958868300e52c502a294ca756e14723e55f8ae03123a74084e47b2a0808407", + "collateralHash": "f20a3fcfe7c8e5aae2f102f4181d5c1661971f3ed06bcb4416f41980ac803823", + "collateralIndex": 1, + "collateralAddress": "RBQP3MvqJZce7ZvwxSHgfVKYYkiXCSDSpD", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.180.198.194:10226", + "registeredHeight": 181607, + "lastPaidHeight": 190868, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXKZCxEN3Nx8uDVBAtea6yBnXVaLEW7oUT", + "votingAddress": "RHZutRjVvXiZoJy4iGpBYNTLi8WvBpejns", + "payoutAddress": "RCnTazgWQWsHHBLzC3aGgZPf3jXYsVMLNU", + "pubKeyOperator": "10cd6109be3af46c759e6a20143e3884187d43d52552cec5b747a5786ae454bfdaa543071a4c7d3e3f8563d08792847a" + }, + "confirmations": 9399, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4e0103f2acc18800db2639de64dd80bcb0a9d68e6f9c07c8074260c555127447", + "collateralHash": "db07826d49f68dcbc62880f7ba19e284a6aad8adc6d568c8b9ecba5b651c5b13", + "collateralIndex": 1, + "collateralAddress": "RDUH8QCu6RWRA9kse3xtzkoF4T82Bcntd3", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "172.14.54.207:10226", + "registeredHeight": 176643, + "lastPaidHeight": 190553, + "PoSePenalty": 0, + "PoSeRevivedHeight": 180874, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXb4yx2siQZhHtYJoje1aPhGsT4urahx6c", + "votingAddress": "RRqVpv1J713sqEUWb4W8yeh99LskbXA24j", + "payoutAddress": "R9KcMoToJLEQKzAbs9yNNCUwMafcUH71Fq", + "pubKeyOperator": "10f6a276e11597deea52ad9b9ebf013ae4eab3b37bd22a1f0507f225259c88db935a703cf1a0ec98d1059856f797a6be" + }, + "confirmations": 14356, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0cae9708995dbaddf1d2a8cfee6fe52faf9094074817e1cd53a15f0d7a9fc4a7", + "collateralHash": "30b189bb64ef03c6e899791ed4d02c7749805e6b87f5b14da6447464b7738799", + "collateralIndex": 1, + "collateralAddress": "RCSLZrSUZK2o5QDeTYVm2N5tQhMc6nvUn7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "54.226.160.165:10226", + "registeredHeight": 175878, + "lastPaidHeight": 190925, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBjphYFftoqm4ejeT7chmsT2Q2uWGZq5Mt", + "votingAddress": "RBZ6mXXj9hH3bG4CPvg2qqufzi6fJ8SLUu", + "payoutAddress": "RWt8rXzF3b1B4Lz9mdHLuZBdzN37nXi6Nh", + "pubKeyOperator": "97e358244ca82ef7a201261b48d0830a4cdb559c923163b0cfdf348931e8d859a172a5f43bc7db390bd7922ed2c2184f" + }, + "confirmations": 15118, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c7e1fd5b62425c0151b99b17a97b0c0f7cc8218046ead0fecdab01fd3e99f127", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 7, + "collateralAddress": "RSXfMTmPc2w6HMuYkzx8prfkHorfrf9Ac3", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.131:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190768, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBb2DbhBSB8y3YB4LFnBQ6NWfVzBajWcyW", + "votingAddress": "R9bbyCzMvnZQwMGsRfg3r62vpch11B1Wwa", + "payoutAddress": "RP9oU1RuhEz1B8vMGGyLwRUb5toTXAzUAX", + "pubKeyOperator": "99f0c010d0af052f26ba4a8d2aeea709ed8859b90005d2098e3d7e09b4028fcf9c6bcc85ac7af1780932ebfbe875585c" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8732fd61fb6ec75b9ce96eb787612f07593160cf130c327b114bde35a6df1947", + "collateralHash": "fa55b8a5416182d4bca325af13e7aed87dbc6e0f274dd193ebb8e7bebf7a98a0", + "collateralIndex": 1, + "collateralAddress": "RRCdtUfZa9k2BicYPhuvanePhyfAwVKzu8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "178.18.255.75:10226", + "registeredHeight": 174451, + "lastPaidHeight": 190832, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAHtvUEpqPTf2pzkov3umbF2Rxs6Vnp1SX", + "votingAddress": "REx5sLrk9pPqDAAtiVgTvY7k4xehoK8bah", + "payoutAddress": "RGjHR9nzj3de4MN9yd8cmZzsrpvigrxHWV", + "pubKeyOperator": "87ebc27061a9bebffc0c76712a8f0c9e8571649dc0c33abe8f781757265e34ed6802626ae244a3eef657c81094d8d272" + }, + "confirmations": 16550, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f2a334544d4620043828a96e54c721358e986de11a19e1038fb15012b42155c7", + "collateralHash": "9a63342448484f8dfc124ba632f01e3f21fa40b48854c9180c4c144640784ef3", + "collateralIndex": 1, + "collateralAddress": "RDnDG9JyjeZovDvXGtpQGiHJW7rLqgNxCn", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "45.76.120.169:10226", + "registeredHeight": 177128, + "lastPaidHeight": 190967, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDtUUEQUvtiBr7AAbzKup8BWp5NSV6zemR", + "votingAddress": "RH4oqBxk37gMPeXnAwzC2EMCYtzTart9qK", + "payoutAddress": "RJg9SjuGj1PzrLcKUrMUxXXfLYbBzMQxnK", + "pubKeyOperator": "166ca1db59c6b1a3062b37e9e79ba6c26a9a0bc68854ff5120d7413b28db1238167eb9c400c4d971447ec28b04386caa" + }, + "confirmations": 13897, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "003f464775479ca40f4997ac882178b4a9078922a9e8df7cd2274c3be4aab5e7", + "collateralHash": "6dfcf8946daaab3a8bd1bc4f3983c51b7ac4b3604ed53dbbc5325b55f3737d5a", + "collateralIndex": 1, + "collateralAddress": "RUMXvPUSYzmTRd1qM8GG9g74XhtomHBtS7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "77.68.100.78:10226", + "registeredHeight": 162300, + "lastPaidHeight": 190638, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUpuJiBXMaaJfVFeFD2wW65yTxvkhe5Zk9", + "votingAddress": "RFYUfDki7RUqphp5aNX2suUG6u2q7zFqSa", + "payoutAddress": "RR87JyszmXuCte5KmuAYP5dXAMnsi7QqhS", + "pubKeyOperator": "8f126fd6b984c75d988fe4dc4f19fec59d9dee35e985b9187a637532d41ae007e54eb33edade267550451bf3c829a1b6" + }, + "confirmations": 28699, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7b8d78ff9e29300580ec3d9ab6e4b7515c183d2c6c88f2bd2a539d8cb2882b27", + "collateralHash": "3c95bc5944a60aa841d3d6bd0b162934b442bc6b829ab9e11e2ce205b7d41073", + "collateralIndex": 1, + "collateralAddress": "R9N58idcYR5V1daFz7MzUUv7cd3CnKxSDz", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "45.76.231.11:10226", + "registeredHeight": 175302, + "lastPaidHeight": 190792, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVQDav9pC2NwtondZpUYL5jiLvFNcbsD3C", + "votingAddress": "RR53Xe3hiVzq4HCaBrzJQ89ofXovHwKq5d", + "payoutAddress": "RJaxYw4Z4wK5Hg2Z4vWSgYSckNzVvNdxH7", + "pubKeyOperator": "0fbb96c39bcf0830537c11fd0d0673c59e939bbd6b604da2f7d22da040109d1dc3a6672169828d0145b84f31329e5026" + }, + "confirmations": 15699, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ea52309568391c82c86bee94d07f21f58cb23e5bcca9a616ac844c8b492fd767", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 10, + "collateralAddress": "RVH7anPBEr8sDNbJh9tqBrG6BgktfoPPB8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.49.246:10226", + "registeredHeight": 174605, + "lastPaidHeight": 190519, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSTxEUpJV8enoLhaFCZkELkN16UKdWN3Tw", + "votingAddress": "RAjZMUmDq73miP2TUQKfZx7rWnDrxhX69h", + "payoutAddress": "RJhKzbF3TQ47wHQyoE8XsSwFUY2QwZ7nBh", + "pubKeyOperator": "99fe48ad75c5fb9f3d93fd7d452a4d28b34ea74d8726482afbdb6caf608c4fc09dfcaacac1a0e3e25dd430079dc61861" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "702bee2ee71d97b67ebb33ff3e2b6626355013f2e1fc2abf57d6755ef4a7cf87", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 3, + "collateralAddress": "RLff72rEBQHTEh8KT4iw1eTvrVwQVBSoNs", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.81.71:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190848, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBj1JNHG4XzD2uRANvurcUU9j7SGrgEwtK", + "votingAddress": "RFEGhhfrd4UR2T9RrQcoSV9kZnf9NewhUu", + "payoutAddress": "RDnhvJDK5C7SKKRpvzgmVYA7nrovaSrRC2", + "pubKeyOperator": "071b56ca4011bf217656b9cf47af3c9c096ba09fd4d00772156dc65a4b359b1f0a8da5ca7fca5295de36d23b81cdbf9d" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "38d97eba45a81e45bd49e80a498d4ddf91fed35c0092cc13fe42fc8eb14c9bc7", + "collateralHash": "4f69dc7f087b96d01a3a255d52b92fe54f0e71b103d09971b53c9c626f3db74f", + "collateralIndex": 3, + "collateralAddress": "RUsreZg5yukWLnJiQjELrx5XTEFBXBcBdg", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.133.237:10226", + "registeredHeight": 175957, + "lastPaidHeight": 190537, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REGJZjMtZFzxR8WVtKVZRvhhw8rB2u5B5y", + "votingAddress": "RQhMiX1LCBnPg695uppFQsTuSgXxZQip25", + "payoutAddress": "RWwSUEs5oSDPFM9J26hHiiJ4n7KMSR4mMR", + "pubKeyOperator": "17b4520ec66a5f3febcd017fc2744349770a0f87aeb0c98cc8d6e550a6d018f80902084553c289a9459bf6a1d720acec", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15057, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dc221160971b7e3f03f5a74458978a0626dc5903d4ce87604d486945074213e7", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 9, + "collateralAddress": "RXXiBGayV6JJzSS336DkaMjm32sgdXXxBp", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.125:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190725, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RL75F6KwP9A241dY8YjGVrevyVUkBvxmhJ", + "votingAddress": "RMrhYXNftKoHvoVgzonzcSyrG96KEJQiWW", + "payoutAddress": "RJgfLoYE2SqZ4rp5NPQBVBMR1UDhYjQHPN", + "pubKeyOperator": "9494b8858bd3996aad5d2ba5311183b22204e6c7811f8d3dc3afccc546cc7337a9da9a77c17daf63fd557bf48e54fe1e" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ef85ee08b15de90b4b5418a7d9debdc971b051413dd9c033b99375cc5eeec887", + "collateralHash": "4a20bf210df88794ccefa8e0ef0d9f39c728c2eb11353491627cf2a5f354bf30", + "collateralIndex": 1, + "collateralAddress": "RWNdfPVHM3nDoUq7KGDTtff1hySUxesdb7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.133.241:10226", + "registeredHeight": 174652, + "lastPaidHeight": 190566, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAfpjFfHKvencvgKRcCr4xjEH96DVXxwbM", + "votingAddress": "RBP27tjKxg7fB1nKxUMh6kedPFoxEpmC2s", + "payoutAddress": "RRzwtAwENKhqW8km1CeM3RUxQGWr9khs8u", + "pubKeyOperator": "89b5cd911942debde1dd7a44498aa02e55fd9f024739d0cb100410dbdd65cce1715dd12a12390c9ff7d0b8074f1a6313", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 16353, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8b3862854f86de10e421eddd1d901febe47218d341172fc103b2a65ebca04c87", + "collateralHash": "68a767de7289f199f64f686e07e4ede286468b0b611c060eff6830351c618f32", + "collateralIndex": 1, + "collateralAddress": "RQCK2ECHTvyUh4C6SkXo4PpEqaUZtHnfVJ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "207.244.242.140:10226", + "registeredHeight": 174652, + "lastPaidHeight": 190565, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXnrzfcwUPNcyaN5GnS5FSUB9GxbuJ8opd", + "votingAddress": "RKoroQjZPFHc8wYeHgTgSfU1n2d8JdAMbK", + "payoutAddress": "RRzwtAwENKhqW8km1CeM3RUxQGWr9khs8u", + "pubKeyOperator": "8936125c92de487d1480beed2ed3f088ebb475ceaed14f4ac8bf22b409af47f5bb4edf227422bdcdd84e9628200727c8", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 16446, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "648ac9bc87eea73ba6a3f7f8527d4d72b5b430acbe6ba82c33b850dd9391f0e7", + "collateralHash": "53579c9ccfc8ec5b49f09a626d4001acf6c211f2acdd2b49c07b801614afea89", + "collateralIndex": 1, + "collateralAddress": "RJQkjKHz741g1bd2eTi8sii3bTQ2MN6Xk3", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "193.188.15.210:10226", + "registeredHeight": 174326, + "lastPaidHeight": 190618, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REkFCLQw58RbyJ7Vf3aR6m5tss1AHwP2qw", + "votingAddress": "REkFCLQw58RbyJ7Vf3aR6m5tss1AHwP2qw", + "payoutAddress": "RRFbtqxM876qTEJBeR56uY8uPa7DEWLUSv", + "pubKeyOperator": "0caef8ea48cab1197769239963d831a5452e31d4edb1d5845bd6e290b379095ffc03ad3c3033aaf8e94056bad82ecd03" + }, + "confirmations": 16677, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6a8fe48bae3f5e7cfbdf7d92c87d6bb51cf5787aba4dde3588d849642b2d78e7", + "collateralHash": "ab3564b5e3cf155cb25c43265e010f38264403c7a81609463e7b736dbe64f266", + "collateralIndex": 1, + "collateralAddress": "RACtZL8BTYiC6GzpEePJMVDQkdNFT3cSSv", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.55.1:10226", + "registeredHeight": 177437, + "lastPaidHeight": 190877, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RL7kfmvhuMCgN9rYCBhLU9Nppu6xWTUcVt", + "votingAddress": "RSMKiD5SbsFiSguGvv8CKaYq3AAG5wDPEn", + "payoutAddress": "RUP2EFqv2ncsQ3f3xoWVBMAVTYe3xfLsoY", + "pubKeyOperator": "91e04cf51b4619424965006417695aa4bcf31e2b7a8409d3478f55689caf7c529bb6d3323719e712560a033aced3e2fc" + }, + "confirmations": 13568, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dfe666999576781ecaacf898303a55f1c9bea25787503a834c3721d53ea60e47", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 2, + "collateralAddress": "RCGuF3KxZ3ioLp36ihKX6pEQH2hnMNr5oc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.126:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190757, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBynABe1pcUiFvSuEoFUiibS4ZqVnLdFR3", + "votingAddress": "RJVXCgZTx4FUHtyH8fEvzfe3c269Seuwr6", + "payoutAddress": "RJsuF2FXK2vyviF8BfeRN4YotVi89Xy7JG", + "pubKeyOperator": "83a210b1b9aba10ee8916948e5c2b6f9e74d1726b2f2054d950747ee7a659ffd8e43ea9ed5c4732781988fcbe7577dc5" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e85e28198a81a9325270de2cceeede33b10b9a2b2a928f2b48614855b7311647", + "collateralHash": "cb6f5046c089729500438551c8131476ec727ed7dab31272292f5eddf32111dc", + "collateralIndex": 1, + "collateralAddress": "RTnEvgxx4bDvSRbSew4vyrpmdAxYsN8zNh", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "62.171.182.243:10226", + "registeredHeight": 182267, + "lastPaidHeight": 190775, + "PoSePenalty": 0, + "PoSeRevivedHeight": 187485, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RF4WAxmWNGZqaB8Lt7MB9m9NXUj5fnTDdP", + "votingAddress": "RE939MphXFcX9o4UuyZYRkvPYHhTMe7Dpm", + "payoutAddress": "RMiu3jp422CpdK4rfEZQPQ4J3NJVNZN3NP", + "pubKeyOperator": "018d0cfb6630ad8771907770186e28ce84a8ddeb0a3dce0fb5b73098261249457094f09267de81cb2787ca4d8dc524a7" + }, + "confirmations": 8730, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "92dcc562e2ec28eba6b64f07c2ea97025818a99dc13648f591227241553a3a87", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 4, + "collateralAddress": "RKbwA1nbaAHk5ko4QZJ9od5pyXHGyqA2tC", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.49.25:10226", + "registeredHeight": 174605, + "lastPaidHeight": 190520, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RASzuMLcNVBsfkVwuXtpWBB8ut2dtBJU98", + "votingAddress": "RXDWjEPALDUCRVZdmLkbQDB2y9oYZXgHm5", + "payoutAddress": "RWHdQ7y3H7C51Z4vassvn7VmGW5bJtHj6m", + "pubKeyOperator": "9975ab65ead2d6f0c64fa49ef3a5db70a0e30a4a95be2e75b6641e715438f66e6f41b42a63340174648b35c1fab8d700" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a0b55c5034a634dc1785119ed103bd013e175c93c165f9f914be2f9b6cb24287", + "collateralHash": "cf83c5e2fe479e90d04283a20b12dad57bbf8c74be417f72b6df70ee0c2d390b", + "collateralIndex": 1, + "collateralAddress": "RVqnky1kf6ruVZbEaMV3QzZ7Rh8fyFGyHV", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.23:10226", + "registeredHeight": 188669, + "lastPaidHeight": 190556, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RW4RDNXCace3F5UMjBLJS5PZtT3Z8bg3G5", + "votingAddress": "RG2b6QwjnmifyyEwUp987AcxKboJuRFZdW", + "payoutAddress": "RUCBUo7vfh1rJcgKbBPMxVN9Vih69LShBY", + "pubKeyOperator": "89b2623c5ebae5513b21864656f7973e7e3fbbc670c28d018fc190869e06afecc4083ebd836bf47a94a13048d8b8a602" + }, + "confirmations": 2327, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8bfb6bcc668dfe4e2c332437d159bf52a1cef0e16d956e0044a4b24c3ed74888", + "collateralHash": "3503aa0737940483fde7f8b3ede6f6a6d50f042b7a6058886abc4bb25165fb54", + "collateralIndex": 1, + "collateralAddress": "RQHZZqxCDGuRMsLfCjxv1AjbMa7vG3EN5g", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.156.90.176:10226", + "registeredHeight": 176658, + "lastPaidHeight": 190822, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJxhASYjPwDokPjBcHae7hAmhByuzrtmQy", + "votingAddress": "RAeFVWwZRKEunRwtdiTRW6EdKUMzQHby6J", + "payoutAddress": "RJsGNm3HKRePKmf1X1mAWY5t1GYAc2kSsY", + "pubKeyOperator": "15ca00772cc583ed8dfc2f9c46eb3402900f195dc664ddec5f69130e1d5c2c9ba2c74054e5ee6224aab475f343dbb9cd" + }, + "confirmations": 14348, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f6b7e532d5fbbfedda41a0ebc3f5dbbd067bbd02792d4d1dcdeb020002de1d88", + "collateralHash": "73f6dcccebc35fee324251f67a634590954e83e847ce2b5331397c9b6f139beb", + "collateralIndex": 1, + "collateralAddress": "RFcTCfLahtvb8h3D9jPCCRGoH51TmLENRc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.152.134:10226", + "registeredHeight": 176906, + "lastPaidHeight": 190646, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGqQetaKXjRhsqktigXqJpAkTAKv2jqBag", + "votingAddress": "RLHzL5nBYgeeLL5SLogyj7DSj1F1f6qDyx", + "payoutAddress": "RRM3JYBj89hY3jfg2sVEaKFTgygXgHT1nh", + "pubKeyOperator": "0293a784cac85d76b11e1451b2704112fcc9c0436995192eaf4683a0b6bf4a49bb1b0b146bb2c326be2e11d44f4ed972" + }, + "confirmations": 14092, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0b227b58021d685d615a83ff81525bb607b1a54c153f07f3e7784ddf4dcbe5a8", + "collateralHash": "a8d2f98621054a27877e3e40b7f5279d6a2686f0ad931dd70ac25e4d9fa477c8", + "collateralIndex": 0, + "collateralAddress": "RR9LHaorE3eFnsEdStrcwwsvM1Ukjrwyw2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.242.246:10226", + "registeredHeight": 176071, + "lastPaidHeight": 190605, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKSVN25tgynqYPN8P8p72BBdLkj1PxsdE7", + "votingAddress": "RNxJdydMMh4jmYyrwA6TbBFXeUA7Ej8M1V", + "payoutAddress": "RTpTMw975su5U5k8qLYB6ZynGLzBjKK5rH", + "pubKeyOperator": "16c96370c27f00535da46ee127370f0216c41d7b69a5efbe381037153ea01176d0840acbe44cff9d56251a94f7948624" + }, + "confirmations": 14926, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "205dacc18a6c587e598961ba835c6a59d043ba3bd01e431d9b95f03135487668", + "collateralHash": "46a07efebbaba7dba4d40d42227a21fdae13f82cf70bf7e0c9d8ee8c23af4af2", + "collateralIndex": 1, + "collateralAddress": "RDKrAUFYPFQq34Dw3LDu7m89v3ijwneHVs", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "188.34.183.81:10226", + "registeredHeight": 177439, + "lastPaidHeight": 190881, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAPKiTaHYCdmsdhi1VWYkHKEDcvCjM8nTJ", + "votingAddress": "RJRuoqvpYyKyL473FSn8iG6WH4zxY2Kq57", + "payoutAddress": "RVEwgPYGA3NMncuMNtjtrkWnzCBJdP2pxH", + "pubKeyOperator": "0778b2d57223647a5a7cfd3183b2bb401669c4546566fd4dfb422fe7a8fed230937b1802f76a3c9b21a7f7c34a01b50d" + }, + "confirmations": 13561, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "eb6fde5d38dc40f2b17e7d4851eda3b8737c1e0b100508ef561e97019ac772a8", + "collateralHash": "3baccf43876dbc06b859c8b7a4011edfd584fae92344f66f1e26007ffeb7cd91", + "collateralIndex": 1, + "collateralAddress": "RMD1TUDtdMj5kAWrHafqwQuo3WUwZY1Pui", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.172:10226", + "registeredHeight": 176944, + "lastPaidHeight": 190720, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWZVuLsC7JirRiGQUgwRSqReVchE4RSA8X", + "votingAddress": "RE9sZidYt8nexudjTiSC8HhUmAikykH5Y3", + "payoutAddress": "RXZws7xKeGrMPBtTP8ieRgkCChv2i1KNAo", + "pubKeyOperator": "09d41903d569b09707e79bf4abcc4ae6b45b5e260db7fa62e1ffc8db37506da0f289a8410c909105b28c31221bb3f761" + }, + "confirmations": 14052, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6951bd5a1104012f4b021295fcd16b7ff621684239d25ee59a5cfccd4696fb08", + "collateralHash": "c129587c75daf009779b1c007d64f34c6081bf37991571b1c33f75582cda9400", + "collateralIndex": 1, + "collateralAddress": "RWTqNvVriTfxmjMDTg1A3wwtSpTxoLCfZg", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.6:10226", + "registeredHeight": 186943, + "lastPaidHeight": 190699, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRMY9fmDU8YMwegZkykxsrGDvLDHJgMGZ5", + "votingAddress": "RMZWZQenKdVsGhiaPhVjKUbzuouXmKmJwH", + "payoutAddress": "RWXt21r4nnVXzTrFBzK4oJ9DRDgTr58BxA", + "pubKeyOperator": "92f415c669c490472b32c870ee85907332ece3e5284ee8ab5e64a5d4f665a00032acaa75bed1a34a148a53c214e31fbb" + }, + "confirmations": 4053, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "14251c66c38647765b3355a988006c6dd7d0da35303f666bfe7dac211a5fb328", + "collateralHash": "eb8856c2c230882bff26d370284f600fe54dfc1146c40aa577f28b9c42c254fd", + "collateralIndex": 1, + "collateralAddress": "RWfAadargCUwBWCgnYE6fQwEifLKuwsyBD", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.158.2:10226", + "registeredHeight": 183733, + "lastPaidHeight": 190747, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXZw7HBHLuNPqXwREm2MhBAixwTg9LDbUf", + "votingAddress": "RKeFXXcXrcnJctfvBHbWG2e8sm2NfTRH4o", + "payoutAddress": "RKfXnojwweQuj1beABauYZ7voPQURr4oDt", + "pubKeyOperator": "8408d886bae8cd8bcd653e7fbe0758342a0cb07f0ba9ed2964657d135208f9e6bf0a722b5e7ef7e521d9ea8289024b2a" + }, + "confirmations": 7271, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "46ed0fca0231f5312d98e41594448b7c17d7c35e89a390f0952c329e58354f88", + "collateralHash": "c9e418ab2587559648de0e78b136074caa432bd4dd0f66397a17d7d5f0564049", + "collateralIndex": 1, + "collateralAddress": "RFKAJ22RZqBGeB8QTk8Zy4ijhJXUENpAC9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.146.100:10226", + "registeredHeight": 177969, + "lastPaidHeight": 190721, + "PoSePenalty": 0, + "PoSeRevivedHeight": 178098, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPB64tevQ7LgWPeXGSXmDQACmmNkLwB71d", + "votingAddress": "RKufjhyQzgyXx6q4ccKQM6FQA54erp24w9", + "payoutAddress": "RP9E121U2REZCPAVBhpSYiQJhVKrYXDksk", + "pubKeyOperator": "80f2994b2e25341e3885bc8e2102ffe46b9751ad26f90c5f395081242489d7591f42d36e828d45d323ba1667b1aa5b93" + }, + "confirmations": 13028, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9c2c690e9093ed4acfc152f58b9d15c411c7b448b746068133620da452e373e8", + "collateralHash": "8c15cdd2cf6da36a1a58943e6c156f7d83fc926f43c7645d4c2f736e3e503c8f", + "collateralIndex": 1, + "collateralAddress": "RLfnxMU3mzgvMn7Et3iattSKXh2jjTBP7G", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.22:10226", + "registeredHeight": 190492, + "lastPaidHeight": 190966, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNhoDzznj6Z96QEMiCaFuxkAcxT2NNiBu1", + "votingAddress": "RBsvGDPYW7BurGGbX72HpMDm7npRkvo7CK", + "payoutAddress": "RMJJdgimHxQTsXK4PeTYpTMgur1yVFFBad", + "pubKeyOperator": "1221c42b16f9133966a0becde3dc4524b71f026b0c2ab41766fef33ba9d3652a65c3abc2800894936c188bdf74ee57a5" + }, + "confirmations": 505, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "3646476983dbaf08215d33979addf782c008b4dd6b1e80ae89dbac27a7fdc028", + "collateralHash": "66daacc5e5b7c515dff07c1aa95396a07a11cd024286eedb9fb4179a56a53cc6", + "collateralIndex": 1, + "collateralAddress": "RXBXz2ZvyXKzthYjNLPUYMHfAC1kZ8zVg5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "100.26.29.116:10226", + "registeredHeight": 175878, + "lastPaidHeight": 190921, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYSX3EeEQL1f3KR4TfXiau3aEy7jPudu2r", + "votingAddress": "RY9F45QSB9xKAXCJwdDRMtKbMqCQaE7t8N", + "payoutAddress": "RPqqtcshAyoC87dEVCpD67dvz9e9BwKDJK", + "pubKeyOperator": "8fdd5956670018798a2e55893be36104fb0bb4492e99a8b154b48f8121f93dfc12ec6766d365ab83c56a3d8ffa8f53c5" + }, + "confirmations": 15118, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "99ba66abb73b3d015331d2da457775eea1db634f8481be3440788a85e2676028", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 2, + "collateralAddress": "RJV5KzCxP6GN4UwfJshweUiW4v4y8tvaaF", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.121.184:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190844, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RG5qhK2i2JtTu4d4iqmiStrFoWZ19oqLgo", + "votingAddress": "RX4J3fmbJhsqir2QodsEk3u97PorowfTj3", + "payoutAddress": "RQn7zcAFjQhpaLMQH9GXz48vdrWsazjtjV", + "pubKeyOperator": "8337664ebad4b505e48e30687b59d0776d0321eae4572e493195c6dc412d09d89ccbc6752cff11f5988104933ff24a8d" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6c3618b08337ff6df03f39680106cf10d506f3793d0b781b4c3ee5ae0d957ce8", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 7, + "collateralAddress": "RSCHdcSjDkUAkcfE66UhLRexGgUr7rypfs", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.159:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190765, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RY5JwxbGXAXfrtQ7asueVk7dvs1djdPvog", + "votingAddress": "RX9bZEa6ZnmHuha8nrmtLfRiN8q77GoxDy", + "payoutAddress": "RKjvcDYHmqTtRuphkEkR6cqXkN8Sb28goP", + "pubKeyOperator": "14d538de094a91395f618138cf0fb22e3470b09287f4e19ac4d21208eb025e9ff192fe7c17a09df1f16c551c7168ea1b" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "73e76fc704bd71085658f9eed9aacd488f87ff82c997be5a732bfd67578d1e28", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 8, + "collateralAddress": "RSe7WbVegehcJhz2L8HxeutJH5wM8DwfdL", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.50.90:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190843, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTr4CE3Ufwv2KTcFiSTu8XiH2W1C28WE9B", + "votingAddress": "RDRvx1xe9ULD2D6oJs7VRWmzwYS2PLpdD6", + "payoutAddress": "RNNR2uDh4FNeCzKrLqncpky544WjeJ1gWz", + "pubKeyOperator": "0169898c17c82a1fa8fcd5a1d45821368a2da10aad541261059c38ff662b6f4b6e2065a0ffd2f679697212de31e5688b" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "56a59dd379e86fccf3e4a4eb0cbf99d0cf9faede406484a3d9609fc631f86e28", + "collateralHash": "a3872b0d4f9bde3aaeeca8b41676c80c069493431ebbf40085ab6bd2fcc7a966", + "collateralIndex": 1, + "collateralAddress": "RSZUgvs8hbQq8f9eh1ANybbhdNkJarGqyE", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "158.101.23.198:10226", + "registeredHeight": 188626, + "lastPaidHeight": 190987, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWmWoJ7j5g4QBkohsz4411cRcFAiewcMXG", + "votingAddress": "RESbte7jff9pnhJateJM6XqnaMfenqagZe", + "payoutAddress": "RMMmmyPWrK83Ho5MfU8BwsSUMfgHWnxiYo", + "pubKeyOperator": "941c381479fe72490ffbf32e440894255c3c30c76125ba575ecc93f94e83ac54ca136bdc206346ab74bf12851dd03f72" + }, + "confirmations": 2387, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0a96ecdb5be6cbbe2a3df80a5c74959073178b73ad48fb97506562d6963046e8", + "collateralHash": "e4ab95eb0d0079618b937724560e4ceee68fd3bb4fbcf3ccfc0d557b053e4fe3", + "collateralIndex": 1, + "collateralAddress": "RUtEFsHS78Y8ZXgy2iJ4Qce17Psg1e1uqf", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "52.15.133.243:10226", + "registeredHeight": 177308, + "lastPaidHeight": 190698, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPwQrWZwfBdNmun5nHofYe3YD89VU7V12N", + "votingAddress": "RPgfRDPQfQjUJq1EjofJbw8AmQ3NKU4HdS", + "payoutAddress": "RWMBjqEUvHCAKvDVyM47HyRcnh5h9Jht4q", + "pubKeyOperator": "97e71691a8e32494d6a273acd90592434e46701e013b00272357d6b619d37e3d156f0262401881ae2eaadac93fa98d59" + }, + "confirmations": 13693, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c74dad01911c036656fa636db60b26365bc53f8d63cf26e56e1566028480fee8", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 7, + "collateralAddress": "RW3LAwHthRPwT57nrq4pLAaESXa1y26k4G", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.129:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190726, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGtEGnE41ncdAHfDTWBT5a92j8oe7nYYmE", + "votingAddress": "RGBLdK6BnttdVfT3MyQ7XAE1Ht23CRDWFy", + "payoutAddress": "RL6mtpoFSVFX8ehjmnB471q3M334KDjmkS", + "pubKeyOperator": "84715b2278bc66558a5e860a7303c7cade819efc17faae142ca0d96899841220740b8f36087de23f06638ba6485b05fc" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "3523115c7b04162d4ee65d351489106d85e273aa6460a833d29d5f262a5a4348", + "collateralHash": "4b65cfe777e314af0d3e07fd1eb0827912e62840b618966140491dbe10f76a88", + "collateralIndex": 1, + "collateralAddress": "RAGBnJVQQn42jX8pLCejJjXEbsV4A9fV82", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.158.74.143:10226", + "registeredHeight": 187983, + "lastPaidHeight": 190811, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCd417o2JqyHq5q7NRNDfGhPYnrPV24Zda", + "votingAddress": "RRpxy5P8bkAatYke715F5cxQQvPsggvArz", + "payoutAddress": "RFhcdD2u2AwRZvw8mADndyoxL6VZjtajQG", + "pubKeyOperator": "01fe531c56ecf894244b2a1a45d92296ca026fe93c6b83ab3b642d7a2da03a56739459dd7d4e228488d244583780e807" + }, + "confirmations": 3016, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f2085451c5bdf5ee32a230e16c7ee902641a871de4c30223e02dd76f3b1e7348", + "collateralHash": "07eadfa4b1317e2e5036cfc2c92d1e59f3010ddbc34edabe2871f22ef4f86b3d", + "collateralIndex": 1, + "collateralAddress": "RHGo1ZktVZoFW1SVuSB8a3fCjmRsiVPyCn", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.21:10226", + "registeredHeight": 185146, + "lastPaidHeight": 190787, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWdS6FxzvPEyq5u14Sjvw19PTSUYfzFciP", + "votingAddress": "RApSMtqaWLrPAJK3MTUUHGPWCnWDomDPLD", + "payoutAddress": "RGYQ3aj6BkW4RBgWFvFciaC6BABSQkYvUM", + "pubKeyOperator": "86cf285e2e386e104434734d25b11f9c9e2ceff77f046bc5a53f9bc89d58b3787fbd66f5b4f31e6d65fda360a1c41402" + }, + "confirmations": 5850, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d04959556a04476066b5a83a413adebdc336b1c3a6a9ca9f89976178d4e8ac29", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 3, + "collateralAddress": "RMmeT8y3rgRv7pb172ATFbikgQ24vNjZYe", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.90:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190933, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBTwfm4gzVkPa1mUpMhuRLUyPZcBhf2TWf", + "votingAddress": "RSyASavdphJSD9hrvuRNVHdzC4r6rVVyQW", + "payoutAddress": "RXK6Xrs4MVxar6vXbHbFE2BKxm9iDpoh5E", + "pubKeyOperator": "9872bb24174ecec8e54800875832dd51cf1f1ad2d2cdf66c456b378d31f20efab98693969f172f480ac300af49f05926" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "fa8545f42ebbd37606ef8ded1a40cb00ad3357112ade18f270e72af36dc690c9", + "collateralHash": "fd69c6476d8e5dde4499cfa5e078b91f018e64f398561cd3c873c18b892353d1", + "collateralIndex": 1, + "collateralAddress": "RXTUJUcXBxGvbJGSxhNTuQ9HHxKxWb8rbj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "47.104.30.69:10226", + "registeredHeight": 162520, + "lastPaidHeight": 190969, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAP6r2bPzMtVc3G3X5m5RV7XEpASRGXMM2", + "votingAddress": "RF4mQqqJUzqfbYoTN6BRVh959S13GyvVSD", + "payoutAddress": "RNj1nKPQPUE2nY8S61U5ptbaBeJJjhgmtf", + "pubKeyOperator": "084a78f417ba29bb1a1033e027cfcde6512b075c14f262673377c1ddcc6116abb288936d2c3eb6b8bd3bbf200a473aaa" + }, + "confirmations": 28479, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2fcf8c4462259f36e82611a1fb510d3002bd849c7925c98a2c1c08eb048d6d29", + "collateralHash": "35d53fcae2320a5f88ee870cf1de77d1c19c6212690690e9d06ad338cf58649f", + "collateralIndex": 1, + "collateralAddress": "RVtHzZH4qvVXGK9nrJuf75fPgCtx4aaAPv", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.0:10226", + "registeredHeight": 185266, + "lastPaidHeight": 190908, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNBt3ogEqWoqDpBLYVmdRWubEp5jZC9W7D", + "votingAddress": "RBDvzP1aS3eeo5hdoFi5YXZgZbJnSnR5SF", + "payoutAddress": "RUkT9pqAMj9XmtZveHf4gdPrGheEgA28ZX", + "pubKeyOperator": "0252c50155c4b2ee4189fbf5429bb9f65556ba02ea5b9f55f7c70b5810ecb86b67d8e54521b95b98471a4ccceaaee3da" + }, + "confirmations": 5731, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "327b2e66fb810d88fa6f02632a378cccb5975b200add79814abaabf9ba114d89", + "collateralHash": "cd53f0d0ac816c2055e2d1880546509a4ad5e72f4ef2c255b3b44847257a1f4f", + "collateralIndex": 1, + "collateralAddress": "RNYjkUtPc3vNLTKqHS9eo295xuaqeGZZCq", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "49.12.74.161:10226", + "registeredHeight": 176133, + "lastPaidHeight": 190691, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFdW7haJFJoYgGozZwm4SU2QnCikXs67hz", + "votingAddress": "RXFPjrFTobBePWkvu1cCkP48qfoAwrYwcD", + "payoutAddress": "RLLFi59MizzzsFEPZsky4JDrMuy13te9tv", + "pubKeyOperator": "0054f548ac99b74ba634f8a0d4933e075b513c4bb00e0ede1fabaabaabb80eaa0df30ce0a874d4a22734be2c8ecec71c" + }, + "confirmations": 14864, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "770051028f88e5027f49e4614bfea4fdcd2ac541512d249a23c46630f53bb609", + "collateralHash": "4a57e531c147a3c7f928b771a0bc15842aa31a0b003e4379455009963efcc74d", + "collateralIndex": 1, + "collateralAddress": "RDNcnCvneanVkCW5mCApgJffvEAX7Sct4t", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.134.102:10226", + "registeredHeight": 183423, + "lastPaidHeight": 190898, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMGqYJTCUoeKgedLDTNSibNK7BQ9Qab6ud", + "votingAddress": "RX9zz3b23aowkzCY8kfR9h2cju3y8LVHb2", + "payoutAddress": "RMXewQHv39m7LxcQUPtw4wPSuvNRYbb2oM", + "pubKeyOperator": "8bb37527b0bed0526f8494ae837ab948ff858fb6a599549d60073c03d3f5928e7cca6f47e0dd3f9b57f2789cb9bd1d5a" + }, + "confirmations": 7573, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "07e6dbabb598c80400d9a302c7cfaf5cd35650a4b72ba0a76d07784a11c03689", + "collateralHash": "7e933ba493a3131bd001cfa3101f931ea94cfec4db9f99cec19dd1b69eb27e8a", + "collateralIndex": 1, + "collateralAddress": "RCvCZsiZe7ua6GPjiukg1eq34s3VQZkNyx", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "157.90.245.152:10226", + "registeredHeight": 176458, + "lastPaidHeight": 190584, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSW7Ms9YJCBkuQCi8JA7zvksR52nAuUsNR", + "votingAddress": "R9m8KtzonJ8pAG5HsbyS2HjMmv593DpGX6", + "payoutAddress": "RQQ7ycFEHhJzv7BjkUYmB2nYN738SyQNpY", + "pubKeyOperator": "0863d7247d25010effabfef73d9f6ab68282bce85ab53a11a95633e65e5d75acdf1508c5e452a5179d151224da1db6c9" + }, + "confirmations": 14544, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dc7a78aaf076dd3d728f18fa92f8b40159b1ddd1547a28b597c0fab944bb52c9", + "collateralHash": "5bb1a02de406998b6c484d449404e2dba8528b0080c0b4c42c402cd0dc2386df", + "collateralIndex": 1, + "collateralAddress": "RJwsAFUtw43QvhfrPMmvkYGowQW7f3KZQx", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "139.162.2.143:10226", + "registeredHeight": 178863, + "lastPaidHeight": 190882, + "PoSePenalty": 0, + "PoSeRevivedHeight": 181620, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTZ3DWLSuEj2pRvxZ2tWBgKNS39qe95V4G", + "votingAddress": "RTHgcjtB9gyGjP8X1x5GpC7kx2aE9C5WJ1", + "payoutAddress": "RFFgYURDNSpydXAP2FLBNW74F3VX5S652T", + "pubKeyOperator": "0ede8c77a8734e0c35c71afd3ddd9c5e845f82478c1ee3d64f9bc7c1e4c7bffa78f9ace6d5b592e6e634da4238a7645b" + }, + "confirmations": 12220, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a4f1c1c11f1a7bb6d37bd28ddee2f739cd1e7cc92b973c2f2afb213830639ee9", + "collateralHash": "937608bbac0a43b89c6501908e053a0a10d5897feb24e158a32c29a38ef5e5cd", + "collateralIndex": 1, + "collateralAddress": "RMmfevjHDEjFyj3JqHMvr1HGEzLhbqsvps", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "159.69.11.122:10226", + "registeredHeight": 176469, + "lastPaidHeight": 190589, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUpb9Jd9rpe9cQXU4Bvp7ycwQEACzSKvht", + "votingAddress": "RVSfxaMApjE1dE8nitEU4Lh2BvZMQ18n4R", + "payoutAddress": "RQGLjPDFJn7KBfcbr2yBsZp5eogVyuFZqY", + "pubKeyOperator": "147e461201dab17bc04b3192d81662eba060ff09b55cd13adb1eb7d02a8bd5cb304de57d99e72698b773ba93f104a055" + }, + "confirmations": 14540, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "62a5d62050234d4ab79cf562271484e230abd9fbe49aacda7205d3be2f0bf749", + "collateralHash": "bd7c42ac1b1bbedec03e32143191c765ab691597fd0f0c4847a88a29b48d7979", + "collateralIndex": 1, + "collateralAddress": "RCN6GbnqxCEmW3nr9gRcWgV4ZF6FA4SxU8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.124.6:10226", + "registeredHeight": 180224, + "lastPaidHeight": 190788, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RU82B2uihX9BxB7jjU4Cc8Yhcm6EQqBxXL", + "votingAddress": "RTRUKJx4buftpS1QcySZj3iAgM9JtFyruj", + "payoutAddress": "RRZwBiCHbcaa9XSF8waTLbjGpvxoUwpqqp", + "pubKeyOperator": "19ba03f6aa28276f5b5b11ecd849d84c72f8aef672f11d49b2805e8f89e30ac9f4d2bd0cef760e2a8fc99415b70a8814" + }, + "confirmations": 10772, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6f64ba48149e3568568143c22923ce594c91c1eb60a0cbc436e6f96c9dcf5fa9", + "collateralHash": "48be32fb21f51e97c02d8f390c71b8f9ac039dcc342eb4df8a42042f66fa731d", + "collateralIndex": 1, + "collateralAddress": "RKBmEDyufoTUzETEEeNwnZeRxBoVnCh5Fp", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "193.188.15.243:10226", + "registeredHeight": 174335, + "lastPaidHeight": 190620, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBJ6HzV5JndxXqnQD9reZ2dEwWkeiNxQMF", + "votingAddress": "RBJ6HzV5JndxXqnQD9reZ2dEwWkeiNxQMF", + "payoutAddress": "RNnM6aaeD6HzELX4rWMcncfRQtyM3Q5xZ9", + "pubKeyOperator": "09cbbf9a8c100236690fe7e6b6d3e6e03f155566c377a0176a50f05c6c0cc8838603ee49312389638b57089aff1ebac5" + }, + "confirmations": 16673, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "aa886d855d45128a024a465cf1e95036393266cd815d444e6ad6445decf177c9", + "collateralHash": "408d22b843d57630d94de20bedac6bc2b2974eafef5fcf290342e4573273b6f4", + "collateralIndex": 1, + "collateralAddress": "RPR8mb8V8asxenDJvzUBsCjoGjZXuhPAtu", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.217.7.159:10226", + "registeredHeight": 184052, + "lastPaidHeight": 190598, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJtqUBWLiuVDUas2z5pguKAE6ErpgogKX2", + "votingAddress": "RWzGpKpvNtbPn3RpcVPw4PJpjq9pGotEUG", + "payoutAddress": "RD6ndkej6yCHYuNzeMUpEqKcXfE7NkwBqy", + "pubKeyOperator": "122763169ccd3138bf7418b87abb9335a4a793fa522f7f9c78b2ef8ccb34a53a9366c6fdfce5b9ecf9700071177863ff" + }, + "confirmations": 6951, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "81b789ab1eb0352d945b7e9cc2d1f2aca6781467f0cf92f1c22019f42f235c09", + "collateralHash": "b52a28731bedce2dcb7bdb0ed92b6c8477ba5e967fdab2e2b98992041afe5090", + "collateralIndex": 1, + "collateralAddress": "RQZNrD8f4HKeToxWKAAQNYVZpADhoHuC2z", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "122.148.134.79:10226", + "registeredHeight": 170393, + "lastPaidHeight": 190864, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RC3uuLp5yobPjwkWQKDTTjYqwh2coyBJWf", + "votingAddress": "RUUdL8YoqpabkhyFyhLuPe6XcnmC4Ga38g", + "payoutAddress": "RJ3yNCxRzH3PTuJNW6Y5PFYNZusRbwWcWs", + "pubKeyOperator": "1173a26d55c2aad8bf59957df11282c5ae47342d618347689db24a4e61570f2a0b5221e3ca7d1c3849919425a9f16d8b" + }, + "confirmations": 20634, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9d5b9b972c9d621beef8c3c9a4b3dca588cc660e6528065168a72ffd57741f29", + "collateralHash": "f504b051f296b4edfdb6d05f49b03a85f73afb455beb8f340c59c10543d52caa", + "collateralIndex": 0, + "collateralAddress": "RDX2A4yN7VjcuYi8QHTscZxx49kGQhC3xc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "168.119.101.165:10226", + "registeredHeight": 176123, + "lastPaidHeight": 190674, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWmKT4PH9fxcCULvU8PRdadkTnqRXAppVr", + "votingAddress": "RXu16arXe1ULjWhj2pQtuSUpSCjfST51JA", + "payoutAddress": "RLSSE9BJ1yRMJvEFZJDN8bfiyzyntebEuh", + "pubKeyOperator": "1335a0478f2c2b1bdfdc8a9e8e96b2203026c8aac2cd3a8376027177771cf058c6aa9697f58445c01e2a795134adf5d5" + }, + "confirmations": 14883, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "73fd73d1d812627bd19443164a64009b6af9924fec66ed8357387a0069f1a729", + "collateralHash": "a402c0a319cb14b6096e3467c4302b02130299a7a12b0274171488837883b568", + "collateralIndex": 2, + "collateralAddress": "RXk6Jx6E5uWFaKi7b9RddxTNMBJWUbnfC2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.2:10226", + "registeredHeight": 185820, + "lastPaidHeight": 190528, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKgNRKTwxJK4wutkAMxZCt27nMMYCGqGnB", + "votingAddress": "R9sK4Fnfe2DhVdRje2sBErd9M369xRqXfU", + "payoutAddress": "RKTd6rKQFvZaqWvjdbf1J12YLo9LRhVHbx", + "pubKeyOperator": "0f6f5c072cc33af83b227145bf49400f31aec766e5d1a31a879fccd67421d6356128efa93a8ff0e1a01f1ccd733efbfd" + }, + "confirmations": 5176, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dd48e5f34004dcaae1d0ee8abd619123fa64f10514e0f7889c7841be57376c2a", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 6, + "collateralAddress": "RQHJzWji9CSHVJCYCP2fopih598orLbkVS", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.50.15:10226", + "registeredHeight": 174611, + "lastPaidHeight": 190538, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RY9jbZyEMCGTSE7KawxqiiDe7cz7QQHGc8", + "votingAddress": "RBBJgDEzb1c5N5k6wQJpc8Qwx6q1jrDAmP", + "payoutAddress": "RLeMME3ex9urch5JtC3EafK3R9AgS5d5jH", + "pubKeyOperator": "065c7a180fe0a8206e914a22b63b71131f8ff06688ee1838ec57059b55fdee19fede140585ff598e36a47d89010c77b6" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d224cc5b3d87f860bd18fb50ae025a66449c7b1cd1b669b1c9a95d0dfbdaadca", + "collateralHash": "88f420ae29eb64b6028eed0cb19a265934317e9042f45088e4206df400d33e03", + "collateralIndex": 1, + "collateralAddress": "RMyoLKzsYzZhkqeno79BMUZiyyFeNwH6se", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "115.227.28.219:10226", + "registeredHeight": 176473, + "lastPaidHeight": 190591, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFcGcU7G7xu5XPggoNaU1j1EwvnmW1QpAb", + "votingAddress": "RMAkWPYY85DBYk1NqxUKN66cz9TU5N5aYC", + "payoutAddress": "RKA9UEg5kUHRCASN7pLqvWNyzMBurNqrp3", + "pubKeyOperator": "06427ff6ebfd6ef9925abf0303185323b6b9f8a5c78e1b0b7e8d2f627b789ea5f0e3ef1ad1aa73553f01aae9112fc6ec" + }, + "confirmations": 14524, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ce8e8559a919586b1cdbce58bfa4a4cfdfd18d79b60b1b711b9c7a497a9019ea", + "collateralHash": "ad51ecc1efb95f4952f6aec3572c5ff322747e7925db3c2ca5ec30d38ad3a4f5", + "collateralIndex": 1, + "collateralAddress": "RCCTdQ9DdjRxRjQ32ywZeJecJJFHHe2zmL", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.216.218.142:10226", + "registeredHeight": 174447, + "lastPaidHeight": 190802, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWe99DNEbqK3V8qn91M9uCdkiYV2yEnQh1", + "votingAddress": "RWVm85zwV7fmUL2JukhG5Gg9tp58KwyUwf", + "payoutAddress": "RMwAE3Cigy1B5Tw6RUD8eJuMZuABgxXxts", + "pubKeyOperator": "13efb2769c4e75af026254e65b6496cb676f19010d820c1676748042b20c706cecd809fdc51272cd47d840debf7811ec" + }, + "confirmations": 16550, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4b2d107e0b54cb0acc5e6b8b1aeb127fb70e3a1c5f908f659c18c647fbb43a8a", + "collateralHash": "800e49972f10d3d34912180015dd2c479e337a3d33d18d1138b1eddb91364ccb", + "collateralIndex": 1, + "collateralAddress": "RVuN1b9RFx8bLamS1Z9rH3Nq9QTEJrGwM5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "76.93.146.134:10226", + "registeredHeight": 175964, + "lastPaidHeight": 190546, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWSwnCBGa6T8wVZyj5JGzY3xPPDZaud5oL", + "votingAddress": "RTTsU5sRXy8kCiuBs6JWxPyWWRJPbhZt2T", + "payoutAddress": "RMFWUViGErBZNhtpwsHtqUSusgeBifYkNY", + "pubKeyOperator": "90569177437938c51bd44194e9b743cd58c934f12e1bb3542b24252083d4b72e9cf3c231d015fb2337bf02bfd9c1f68f" + }, + "confirmations": 15034, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "236b6188a94fe208b94fd0e044c9d5903e529e373649e3fd60e3b97df8360aca", + "collateralHash": "a9c16389de366476adf4cae358c1d98d878b22b546d56515cb36a8c85b1b1c98", + "collateralIndex": 1, + "collateralAddress": "RBVwxikmytTVhrVKmNoJZ5QhzRL6m9MxFq", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.124.2:10226", + "registeredHeight": 179746, + "lastPaidHeight": 190723, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RENCHYsJ8pEpkTqFBQNZbKcer61M1ibgSH", + "votingAddress": "RNPFQkxDnQxkcdL2MoaiCqxhXPcih1sZ3T", + "payoutAddress": "RFnw1xxBtBd16hNsNzikCLrTgdZzMac6pe", + "pubKeyOperator": "16b11f4a927ff31505b2f0721d5ddb42784c6b8c3528aa42b9d2937330a1f522a8bc4415fcdef430b6738d9f73b9dde1" + }, + "confirmations": 11251, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a72a0d68db145583d16cc361881ec07c8ffbaf44b9b378c4b5d56472bee3332a", + "collateralHash": "6e2c9cb2ddea3450f8659c4d6d0fd05b44d69d4f10acb690fb69a6714c184900", + "collateralIndex": 1, + "collateralAddress": "RNo774B69Q2z9vRqdtBgeUhNucRgSTzQKJ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.163.188.98:10226", + "registeredHeight": 176550, + "lastPaidHeight": 190654, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQoncQyoKtWxb6MEqHnKdeifD5bWFHVWm7", + "votingAddress": "RVketY9gGZXUgXx7LQRzVabt8nDdJgAM86", + "payoutAddress": "RM6Sf4QprTA8cQkJXWfHCp5WyHoAnupP9U", + "pubKeyOperator": "999785c4caa38769961c9802d08053b92c562bc90b190c6f4cc3328a9af3d8eed078bc216ab606fa8e47e5a81ceecfb1" + }, + "confirmations": 14456, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "43352f388ce4a840cc4c31e55dedf20b4eb728013a1e490890b848ba3e97f34a", + "collateralHash": "f8597e5d98a82793ff56ebbae9c94ba6d574149e3ba317a1bb37bc112e9aaf22", + "collateralIndex": 1, + "collateralAddress": "RF1KDSfZ32MS8eoJgieAX2rsjjraCgfrAt", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "207.244.224.235:10226", + "registeredHeight": 175950, + "lastPaidHeight": 190527, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFzRkdyaNeUV7uXRrwBSpfUUaM2mdFB9aj", + "votingAddress": "RC3c7XYFxGzX464qASJaT31gJmQY3gm85n", + "payoutAddress": "RWkWiVdNso3Lv12PZNuLZ71tqLm78pSeDD", + "pubKeyOperator": "8c99d83977c9a2a063e80ec3b13a352c16991082be1837e216711c8fa5d137fcc0d1ecdfd1e00de679d2353a71332713", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15053, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "517441081c3993772ed3d6ebed8ce2ae85e28bce8c88dd8f866a29b577cb4f8a", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 9, + "collateralAddress": "RUjxhqYXqBgvqEtSNXMgqNTQq9f6LsUWkR", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.240.164:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190890, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFuzza8onEzXHU5XDpDMHD5wHnusT5XEhP", + "votingAddress": "RNyWVH3L863xNzyYmhZK85DiYZ7CVWvbTu", + "payoutAddress": "RYVzQ3B2aM63mbSqyPPw2rVKPpZTBhnqzF", + "pubKeyOperator": "008c124bde3b2555ebd6fcc69201f2e1766768368946120c4b70353b80ca65cd389932fc34d1458cc0a7008f512fa99d" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2c41b026f1602882c5ed495fe19ae4c7959f194c1ad8ce18d5987867d1d37bea", + "collateralHash": "9c50eb174e4e3cb0fd78d18b2b5b3913b9720af9c54a4b2023615d0ba7b06fdd", + "collateralIndex": 0, + "collateralAddress": "RP4PVswuu6RPYvi1Ptpa291aeD3QNEAGR6", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "162.55.59.251:10226", + "registeredHeight": 176578, + "lastPaidHeight": 190706, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REdHeP1s87eTMwy8id9bBGwCTQKMFhRqPo", + "votingAddress": "RJtPPdcPconNEoDZji1Kktn5vjenQnNe8c", + "payoutAddress": "RDwsgtuzKJCXA3yuxf4CZqJX6RM13u6Veu", + "pubKeyOperator": "8ef44547f5227fd844a940f537181625fe6e9e3489afe4559161b4ab96d3d44587f5b4f710713febcf77ca880f523ca3" + }, + "confirmations": 14424, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1779f99fca30a0ddb5c4f3738d3283ac8f0daae16978d38b66d8e912882844ea", + "collateralHash": "257c718c0275eb7251afa72f7a5e1c5af29354b2c57649c16c657b582f6f11ea", + "collateralIndex": 1, + "collateralAddress": "RDAr2vxc8gDyJ1xTMFnDg2YfMjH3cq2NXk", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.156.90.216:10226", + "registeredHeight": 176658, + "lastPaidHeight": 190823, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWUD1V3hZ95P2ebjAQdF9VcsWgpCX2hiru", + "votingAddress": "RB4ScLC6mrDPL4eDwWXd84zsmpDqhQKZAS", + "payoutAddress": "RSZbQyjtMpAELzJTUGhRhKekA2VnfwACYe", + "pubKeyOperator": "1820049979baf1974af8741e188d043af439567c3c89fa95666476765e69306344a4f7236aa144ba872f68ebef97e7cc" + }, + "confirmations": 14348, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7f847d3b5fe021e069dc3d12e4183d114c29121980805a35e3bb64bff33d58ea", + "collateralHash": "5fa5aad45a186564aa10f4f8767293f55d7abc249a5ff00ff55374be0a1efd7e", + "collateralIndex": 1, + "collateralAddress": "RW9BFeRiApMvAXf5iZZVtLmoCyzWx848UF", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.96:10226", + "registeredHeight": 174594, + "lastPaidHeight": 190979, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWJMtZAavWTShpxd9VkjwRh12cDEpXLbz1", + "votingAddress": "RQR1ACtLZ4xM86Ap8xHSCcd1NKtgcpcFu9", + "payoutAddress": "RBo9LHgofeXokG5prJnzNYFfKzPnhefnZM", + "pubKeyOperator": "0b112b9b8896b8798bfca149e71cc9c517f31620dfdfe90f1611d3e3055819a440942a5a87ac48d38ee86cd3d2c8b110" + }, + "confirmations": 16405, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0be063c042fb1ae2d92fb76b6148d0117e13fb85fe63d451a4ae60927c23252a", + "collateralHash": "791338f7c5765920939ea190abc2b83fe7d6ee0c5101916657fc1f9427ad37ac", + "collateralIndex": 1, + "collateralAddress": "RGzurxM9R4vgNM8xscME9NBqcdujGPyYTP", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.167:10226", + "registeredHeight": 175904, + "lastPaidHeight": 190952, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMsN4w18E3mx1KrTcCQghTBuMeGr7P8uPj", + "votingAddress": "RJwKjWoBmuUhH8L577zJLDejoCHzxmcZdR", + "payoutAddress": "RGj5aGnbftwvgaHBQC58Lvv646bMKAV8iV", + "pubKeyOperator": "0a15fbb28e46be00367c720b0b249ac8d85209b4849618dc3921007d979a66c3c074ba7bbfcef5e86f8970ac7e69e4eb" + }, + "confirmations": 15095, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "240f7b9c4fc8dadd0ce211ac67931e7701f3c527b4b6596fdccdc1c59cebdd2a", + "collateralHash": "b1fe8df2345902fa3342c77d8b594917cf872917b892d70741e177af1f9cb0ee", + "collateralIndex": 1, + "collateralAddress": "RMra9h3DLLCqKgY8L1inyXD5sXTxSB617u", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "161.97.87.0:10226", + "registeredHeight": 185427, + "lastPaidHeight": 190593, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REMcoBvpTds9XWxUyH3nGb1VV8c2jXikWr", + "votingAddress": "RSdfP6r35hE3zW2zFEeQHS1ajsEwnyuGiE", + "payoutAddress": "RFKfkJZiJApj9U7stuqwPJ1HbAhrsCuYWQ", + "pubKeyOperator": "919faa04d06d5d25f58fad3c812380727729ebdfe4465947eaa8ca027d02f1f432a5df978b0f8cce956b22621b6cec46" + }, + "confirmations": 5575, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "23795f2defa9f9ab3b090b9a0639189ed6408c127a85f6d209ff0065a7aff52a", + "collateralHash": "38f3c9be02baa7eebdf40e5c5a3215fe7c84953588bb047e678410eaf3e45338", + "collateralIndex": 1, + "collateralAddress": "RXU8G8p1fkJhJ4SM4BTRoftBVs8YRZjTNM", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.62.7:10226", + "registeredHeight": 187403, + "lastPaidHeight": 190688, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVZVqZFtdsGXDmDzDREiXpD641Zg4mzoZ9", + "votingAddress": "RMGwfjaRvmSLGHCjAQLtH4BPfXyCNmacyD", + "payoutAddress": "RUv6dKXPPNNPgzTjNRNNnrTa6cNRNbovVu", + "pubKeyOperator": "96afea82d99a9f0c2ab9d1e47a1ad93b92ea2ea1373bb72e3494c34d093db8511084d383866b5a0aac460b6c6bc1c269" + }, + "confirmations": 3635, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a6d9143589c8d282b7d2324b26b5aa80fb73e7e268c3c573b2c0748e3da88faa", + "collateralHash": "d7eddf1ca23a3b627db8be28fb83bbee073942617f45b9f1d9a1862b5ac3de7b", + "collateralIndex": 1, + "collateralAddress": "RDQ3s3GMH5svb5wSxcfsgAXR1TZH1wYT61", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.168:10226", + "registeredHeight": 181973, + "lastPaidHeight": 190795, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMZRDdEuv48nocvbZ6Ru7fbMxBC9CLVsVX", + "votingAddress": "RN6KDJkMcghnWe3ZXKtNjov7HNpbGBmm9n", + "payoutAddress": "RXMAHbpJ7zLtxkSbjqxrboEtRi6kL6TtBJ", + "pubKeyOperator": "0e6619f4cfdc5c01a67f6d077778b278d35ff7a2ae23faaa401a07ed3c1316201d608c831dd5faaa981c56e13b2c09bb" + }, + "confirmations": 9343, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "42cf35d45cc7daa68c1f267f133be49824e44cbb0f72ecd51da23bc994d84baa", + "collateralHash": "ad241a104f15bff56bcf34fc15568f38ffbaf7084ab5c61c20a0468001bedecd", + "collateralIndex": 1, + "collateralAddress": "RFF2ntRbVPQvSVZHvHfDK2j84ZktPjXsvv", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "5.135.71.199:10226", + "registeredHeight": 176716, + "lastPaidHeight": 190896, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RA2YkYiBpf4hkfMf7EXqyB7EnzMRbCyL1v", + "votingAddress": "RDhq2iRdnjHC4EvrzgCYyMfZkyNfHTa9Ao", + "payoutAddress": "RXFREBammkLRzaH4EyX2Yp2WBjaoSd9eiq", + "pubKeyOperator": "1332cd898933d4969b49601a0eddd02c7330e46f075590296410bf6f1256bc76045fa15dac6ae26d15a2b31315ee0ac4" + }, + "confirmations": 14281, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "edfad8f6d03e052458e5b35da87150c220a9e8f6877a270ce17314332821582b", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 2, + "collateralAddress": "RAzccfjr4FoBvPkVB13RZ8bhiL5PuNJTtR", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.238.134:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190623, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGQ1cu4gwYBn9BJpTveTzDQiAE6sGd7cKx", + "votingAddress": "RMbRXNck2HRAGz8E8zv7ibjNcx8NQq2r2N", + "payoutAddress": "RNEJ4V2KhVWKVwVNNNQp8P2WgVgtjME259", + "pubKeyOperator": "907034fed83acb8ee283dbe7ed92cf549618b9c5cc90087d24885c68ce7aa5b1e4c3b116a601dd2c7a02a551caa18919" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ac4b9b89881f3a463596ad8320e0263f0fc69ea251f61e08a352f0e8b3a9f44b", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 4, + "collateralAddress": "RNEVJeiGm36SpnBszNnNR72MpmdNW19bBs", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.167:10226", + "registeredHeight": 174965, + "lastPaidHeight": 190909, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RU9UNcELg4sbB4DkKZvrJzHePBnz9hb2pM", + "votingAddress": "RDzHsCntVtFcJ7UgyB1xbQsDWaYViU22AT", + "payoutAddress": "RGxeoqHEEbENnwQgekqvqn4msBSCtcc97V", + "pubKeyOperator": "147593dab5e6ee96b671f2b0d2a46d2cc7d79af6ed019e5ecc95e37e524053482afff1a664332912725530e61d16215b" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a9359eb9eff28dfb30d25cdeea8dda54fe6f2ed72b1a8b788a6fa6352f58bc6b", + "collateralHash": "4d139b3e35abf6108e76b10ae5612d1d77d4ac4eee016e418c9d7cbdb0f8b440", + "collateralIndex": 1, + "collateralAddress": "RNLc1QwNPVCcsHsSHgBgyopdejCjXfMkjH", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.145.169:10226", + "registeredHeight": 176022, + "lastPaidHeight": 190581, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPC2Sx7pTZNnn9pmC5Gjxm5rzXsWndscGS", + "votingAddress": "RH5Qjrw2RtkyQMbUjoKVT5cX2TyCw6Zu2t", + "payoutAddress": "RXSNV2ieTzcFfYucZCubGKcXVD3zeHurGY", + "pubKeyOperator": "9092873b492b6dba58ff2f1a5515734ad55b2fa948fb73b027f4d0afcd541468fdded00d0e3c4f4c6a8d08178fed08ec", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 14976, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d9c679adcfbde68c59a4cc5dca51fb319c5db41569d2d2818431f928a93c68ab", + "collateralHash": "aad526080af8f8eb2279400b47ec0e6b1b469abced96ab6badf7a4bed23ea0e5", + "collateralIndex": 2, + "collateralAddress": "RNgHuVief7FfUzm2VxVh7UAexhuo6EwrqY", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.175:10226", + "registeredHeight": 177719, + "lastPaidHeight": 190746, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSHmGU2zUXwNGqhszQKrMCkrmdP14a2nCf", + "votingAddress": "RHSUYbYtLkpEtqKiDaMvP5oGcMkSq9SLBN", + "payoutAddress": "RAeVYydx9F9xWL8HuPhqfNjMfcTFjgFLKT", + "pubKeyOperator": "98b9852e1bc806a05548a78e0807235e71e052a7bf9f68460be76a3e6e2d28932cd53b82b67d52b3daf9657e7cb36f79" + }, + "confirmations": 13278, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "77f175ca9f589fea1e58ba1db4caf47699b169cb3b970eadd824a0c5ae29c12b", + "collateralHash": "44000de2ca34c2eec245e27b3bf7a0b6cabc004b610737e3291361e09b66b42c", + "collateralIndex": 1, + "collateralAddress": "RK1PrUDcGTtWZ6YKLGZXraup4PSzQ3Jwjj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "47.104.90.240:10226", + "registeredHeight": 162539, + "lastPaidHeight": 190984, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNyWZWNqXvGaFiQeVyKoXJ35u5fyMd2a8S", + "votingAddress": "RW9QrS1Zx2pt2qwdMTjCy4N1jEvsqFYarG", + "payoutAddress": "RQMu1oXzes9xcXWfSXPNasQxbNFhPdeRhi", + "pubKeyOperator": "8f2a3206f2af79625a77e847ca88365ebe13a65d7a5c9165093787f0092510dbc40ee05f11bcb9bad5922f9ca26873e7" + }, + "confirmations": 28467, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c828846c130744c499f160954dbb3d8f96af74545879215e73c32027c2e09d8b", + "collateralHash": "f3bdf8eb0537fd71236cdf4f2d2b53885c7c2dde18ad7b1a6bb0b67448bacb4a", + "collateralIndex": 1, + "collateralAddress": "RDqHgGiSpqf8NTkp34uGx8C3PXKbWouZdy", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "47.104.83.176:10226", + "registeredHeight": 162524, + "lastPaidHeight": 190971, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMb3CNMNtHf8nAvNvt1UqJd5f2qAJXoUv6", + "votingAddress": "RCWtxkfaHuVFZnngomDdNqM9WXySWhUfmK", + "payoutAddress": "RNizToK1LW685fKSg5n7EVhsX8iJGKZmz6", + "pubKeyOperator": "1470b4152c3e5000d6d2fd9e504b1fb01f24d87c54b716ae08764c421afbcd60189b53e5d3a76067efd1ecd8c25ead03" + }, + "confirmations": 28475, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8fef8cc7579a6d43f4e3e2d04ed487cdac8320a5cda12612f1357508616db1ab", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 5, + "collateralAddress": "RQYaqcaUYnmfWym4oLbgUVsKSX8LTs3dUv", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.93:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190942, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSP36czdPkF6F3g5cYJ3bJm3X2vPkRmzyX", + "votingAddress": "RDPkNQf87a84TNFJXvSfqGpCbRTNS3HM7H", + "payoutAddress": "REzo8PPZhYtekb6AQjsCrVPXcyfpHrgioC", + "pubKeyOperator": "06f30ece648aa04240ba748ecef5b94a7035343c199deb3e45270f04749adaf308fdb4548f82e463221ad6246547e57b" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "03946676470985180513924ef90f9ccf7a4b06b9881fa716ef952dc8466195cb", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 6, + "collateralAddress": "RRBkmQL6gkWoypGCetrhop1q765wATZAJX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.58.126:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190901, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDEQdJoizmF7pjccUn8CY836kK31L8aD4u", + "votingAddress": "RJbmfQwjWtuy5X4ZJUgZQtKpMHVRoFzJFY", + "payoutAddress": "RRAwLcb34Wq8znEHgMvrkkqwKRtrpptxri", + "pubKeyOperator": "0571fb8b3179d35b4e61140a2247f9f91324a19cf2b5b146a1e10766f4619542adac3069a3995227805ed4c799d0f0dd" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5dbdd4da169ce1049f27f978eae881c053be63e2fab8b79d4dfcaeeefebab64b", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 2, + "collateralAddress": "RKZqA9cXj2HXQ71zncENHvZG8iPDooraLR", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.237.53:10226", + "registeredHeight": 174611, + "lastPaidHeight": 190539, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RANHMtcC46VVgtdKo58GG5yAqnM4FXMM1U", + "votingAddress": "RXuD1ELHxbCzZmHpA5RMbvSrJmSvUxv5nL", + "payoutAddress": "REhej3P6rYbtNTJK16mSz1xphLeLV1VnKQ", + "pubKeyOperator": "0ab834cee615b179506490025badd76f613c19a25194c930838ee540324feb80760cf6aa0a0d656b482c7468f953d82c" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0bbb1c85c7811dba7f77427bd0bf6dc9e68c1fde703e62b2c3bf764d4c53d2cb", + "collateralHash": "8692d0a62fa8c054ee22bf9218367cb8a2c080a1e46883e56d65dc6432751ed7", + "collateralIndex": 1, + "collateralAddress": "RNSFNGt1VMS6i3KTEMW8zZcDksSAGNP3UW", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "185.213.25.215:10226", + "registeredHeight": 187398, + "lastPaidHeight": 190681, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCEyNLmmd5wX33ip3gZ4ft8E41c55Nqu7J", + "votingAddress": "RCTBddqoDNpYvVxqbyhZqwXXG7hmrx1hyu", + "payoutAddress": "RS9VESSLudYNqS19joDywi4unA98BA3eV1", + "pubKeyOperator": "187b1709b31fd9b34c48f6fea693fbf26e5375483261467b63a3ddcb3e140f783007ee50bad30aa7227d3ff871a8025c" + }, + "confirmations": 3635, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "adf16021ea7afe4fe0c8bc52ab35a1dde51ead2ab563b63a2cdf09c2fb7152eb", + "collateralHash": "cf9d49563c3b7f093ba38f22a86d17a044105010e6015d50c256b81280351419", + "collateralIndex": 1, + "collateralAddress": "RRCmS6QpMnajdh63wEJdEmp4QGgYEieyPv", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.60.252:10226", + "registeredHeight": 176553, + "lastPaidHeight": 190662, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REXjwzrnp4BGsWFyfnfo2Pg65bKrVDWNTr", + "votingAddress": "RDasef2f7dqiXcRf78sDXdLPHoPzHSWSY1", + "payoutAddress": "RSDXqzPBpt6KREYwTHaYaYdXnWso38tUKM", + "pubKeyOperator": "0599bae3729120d66bf7dbf2c181d3308ac416961d3e5e678eca2d356579edf4f90ecbbf8a7fc8081679e69d7fa7ea5c" + }, + "confirmations": 14443, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1b9db50c053294f0fb4fb7de71e3ad78cb5c72607aced93f80db57380925070b", + "collateralHash": "369f273f468871fae38e2931f6ee7489c5ed1b9c7f3b43ac993c09ca80ce6f09", + "collateralIndex": 1, + "collateralAddress": "RVifM7dPyjDhEt3XWMAjaHMassC5uLe92i", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.146.119:10226", + "registeredHeight": 179420, + "lastPaidHeight": 190845, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUmDR8Tz6q4JVYajSYbt957cKJsZ8pLfei", + "votingAddress": "RPS4SbjE1k75Ud29iMgYdYrk54hGwfgvCr", + "payoutAddress": "RCdyAc4nAPF4BHYRKgFjb6SjPsbeNuueYp", + "pubKeyOperator": "0eb4516586cf6f9443b37be2230157c9e6d38e15d520d8e18b97de8b44ef5104d6a8b3bcd5d8d4bd487ab2b29e6a8a33" + }, + "confirmations": 11577, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "af70bd732bd7c54a1846918e5679ccf9a768893a7157c41af420f6a8d744ef4b", + "collateralHash": "4462db08c08683e9817b3643e8659126f7565f3c258269c6e6b2cf158ed7dbaf", + "collateralIndex": 1, + "collateralAddress": "RS1HDXL6oSBiGkKudmPA8K1BaHRxLjwZxc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.156.89.33:10226", + "registeredHeight": 176655, + "lastPaidHeight": 190812, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHkXP9EM2BvWY5o9X4N5YQLXNrTGyaArBT", + "votingAddress": "REUSEzfd3bjYbDGZWbrHAVXL2C6CUbRUdk", + "payoutAddress": "RH4DSJZU1egpzw69G9pVXv1Gj8Rqgqf5hq", + "pubKeyOperator": "17729242358299e8b12fa4f3c27d9b464ac1a4246a5a2fe50b5b706ccf94f47dd31c78826b386b2065369bd5bac43e54" + }, + "confirmations": 14351, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "776f9e6643c07e9d95a67cca905a0beaadcc7a945832baf8a9899cd0e74ddbab", + "collateralHash": "7f401df19d590a1272233a4c8006a2e970b41ea4d17ffdf7b326b471650e0788", + "collateralIndex": 1, + "collateralAddress": "RLPSTVeGUctTi9JsVpTmc66DBqsUwB3wkc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "198.251.78.48:10226", + "registeredHeight": 174789, + "lastPaidHeight": 190613, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCa3ZPuAaZtAqdhahXzYFZvG8tb3PjbCx1", + "votingAddress": "RUwS7QpLu5qj3jstt4ZurJ5tix552vcUtx", + "payoutAddress": "RQ39XGX12ZRCQgaLPk9WPjo2ZWVSUn9VFE", + "pubKeyOperator": "944b1f8477a58ac1e384924d6e84edcd7336f2c441d4c2c8fc76bdbff94cf3eabeb86748cd32a9f88a50367a16cf0842" + }, + "confirmations": 16207, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4ab6604f39cdf72cd1f1f85408c1d872455975b3004afe1b9dd97a4c7a881fcb", + "collateralHash": "49c1273ee6f327904ccdc221b791ec22b2f1f7a06d87056ebaa5f0b5f975d38b", + "collateralIndex": 1, + "collateralAddress": "RT5grYHZrSKovPTaucifHud11vGka3YL1m", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.56.226:10226", + "registeredHeight": 172304, + "lastPaidHeight": 190653, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQsCFnHxuTcW8mU9mLYYHeQv5sU5JLGhtd", + "votingAddress": "RKyPq7fkCYo8g3TFGGGxx5oagnpzUsVmr4", + "payoutAddress": "RG3ktHEW1rvLDMquhmcwLBnmU4UKD22giH", + "pubKeyOperator": "07df9371b237fea96ca1f3a4e2fcfa5fc0610928f5eb3d5eabe514a12b561d5d7b73c224233b492db89e388c739178db" + }, + "confirmations": 18694, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "cbae28339afb81407a56f45c4ed1ec4fdd2ecaee53427141a4d867d49d01c80b", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 5, + "collateralAddress": "RPKxkehEFht5PFuFdoqgm3b8MsMdCyKrzy", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.49.217:10226", + "registeredHeight": 174611, + "lastPaidHeight": 190771, + "PoSePenalty": 0, + "PoSeRevivedHeight": 181522, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBrhvbp3xkAGGCR11EUWgD9fpNei9tDH4G", + "votingAddress": "RRNhqYLYqWgbKpTFnabaEYZUQUbEZMyhLe", + "payoutAddress": "RYWAywEZgKKy2rh3hfivS2JUieLjgERU9c", + "pubKeyOperator": "157ccaf4d577e04b97e115eaea0b55a98edb739ca2a469627b2e9e016c4f77bae45f7f7a4b898f6effc500366d1ee79e" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b2bdbfda8f98a472e8fa2d9c329106c1e86e5f9a1843662d14e2fb81a7cf5c0b", + "collateralHash": "d5d03546b7ce55e192fec5fe16d5a359f69ae5a45a79b47b5ec36cd113e1a4f3", + "collateralIndex": 1, + "collateralAddress": "R9o8vX57dVVd9jn9LpoaFLEje1Jpxn4VLh", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.48.40:10226", + "registeredHeight": 177437, + "lastPaidHeight": 190872, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RF9zftJSsdAoyNerUDdEpAX4YqK7K31Bsp", + "votingAddress": "RBbJtkgPcXDJgh47FNjYynYVKjbxeaEWd3", + "payoutAddress": "RLVbaeYGWWQqooJGVjvFVDMrVg1NqxZhMF", + "pubKeyOperator": "91ab5fdd8046d2ca463041810f84f6c70d43c9f6e0a4f089bb194389d2fe350804ad36d1d4d49daf8bd9eb670c07df79" + }, + "confirmations": 13569, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8ef7acab4138f5816636003538b232de8e894a393530a955fbde7b89cbc7c88b", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 8, + "collateralAddress": "RU59uoWF51UoWt6xmJTEYC99mUP3rKU7Tp", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.240.140:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190893, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RN3ginmTRSyxUDzTTmutJngeDZnJdE13eb", + "votingAddress": "RLtcK5eE8f91vTn6h9ARN9EbNyoTT2wksi", + "payoutAddress": "RRjRVTZ9FKh1xuuvEtJubxT3eUDfotVU3a", + "pubKeyOperator": "0206f745d1f15edd49af64d1cc1358f5859acef59f67ca1a3da1dd19512e793668bf4636c631ee59dcf6b0cd103a8d85" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e4c12a786336dd9aeb61f57ab8c2a8b4449c48d4401da573dbfe0b1dc3b4150b", + "collateralHash": "27d21258429b1571061a8e4cd8e8a7d280f6c029cfa9963fb6919ee1b6c3adce", + "collateralIndex": 1, + "collateralAddress": "RB72EKmzfiE3Qtwjj6kpv2wKjcSGgiEL5B", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "47.104.98.199:10226", + "registeredHeight": 162515, + "lastPaidHeight": 190959, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9VqFh3bDbtRvPdvt4MbKTSmu5huAVR9RQ", + "votingAddress": "RWddPWdNL2Tj8NzsuVoXNDQNhWdeinqfVM", + "payoutAddress": "RM3MqqNVtmmz41yW3G8NFvUdYG6pJAoGyc", + "pubKeyOperator": "912f382e595a7cfc0be227121907237b92ea0e22cd601cbf363b764a5e7d272b305169ffe567bb279abaf3d82e9faff4" + }, + "confirmations": 28482, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "02c589f2b883096043498717abb2ff86c3dc8f6e059e5f5f7896b312da72a10b", + "collateralHash": "99148a9bc433456cd9f6059770df82319ee727d1d2e54c39e3f378ce6b091ab8", + "collateralIndex": 0, + "collateralAddress": "RMdoiR4Xe1YNCU14WuSpaH1PUBvF8hBP1t", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "23.88.38.158:10226", + "registeredHeight": 176129, + "lastPaidHeight": 190687, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUMcC4Nrpt3VpXtPF5rYHgxpVhmaRj8173", + "votingAddress": "RLRFXTD8bxGFEetETYaHzm7gcmRqLoTxZk", + "payoutAddress": "RT7vhumadoxGaPDcqgBeu42y6aC4HikZHt", + "pubKeyOperator": "8dea4263b1ff83e1790d35a3ced7aa13d31caf282dcc1afb8febb4ac1a6728e4172f351dcf2ea6b5bda26530b9281452" + }, + "confirmations": 14883, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ff79e3062355c42b2d025d54c6cde672b5589cc59247fa7967901b9679d5572b", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 2, + "collateralAddress": "REtyY2EBxQxodM9mn9TGrmwfAxrFMKFuFB", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.121.125:10226", + "registeredHeight": 174909, + "lastPaidHeight": 190803, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTNYLL3tdzi3xEnogmzajhbaZMmrFYprw9", + "votingAddress": "RS2Dt3nwWJKuF2m9L4isppvW7DzWdG4nSk", + "payoutAddress": "RMLmbj3UQ6nzPRi1H7iNiirEVqequKLQQt", + "pubKeyOperator": "05967643c505b1f9bc91d63f70c173991ae1aeacf2f20de6ad435d46a287108266834c6fd7d67813c3a1545268e8a454" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a2d07f5b4dc442704f74418cf0bbe952dc53dd2008632e44d6e3237f0a125f2b", + "collateralHash": "a9e0bb7c065d6a1021862d577ed192fed93010bb7a8ccfe3c49667297f82f28e", + "collateralIndex": 1, + "collateralAddress": "RXCmXV7SNLKgw3H3LaFdkRQZTUGbe5Wcsd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "68.183.95.239:10226", + "registeredHeight": 176763, + "lastPaidHeight": 190838, + "PoSePenalty": 0, + "PoSeRevivedHeight": 182908, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTAJtomVuDevqT1XcqRpeqWx4Et7hHEDG4", + "votingAddress": "RC8bycPjLCSVgw9oSt4P7xxXNFZeWJFich", + "payoutAddress": "RL5dfDKeQ1JWirgjkrJdomgPAa3PYV4ZD8", + "pubKeyOperator": "1344fd39d63fa27bb1b023b6a2415523e4adbe7ed786750badbe5df5120b26035f783a8585fefe8c934a8d33e33ca52f" + }, + "confirmations": 14234, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a5067b2d1290771d183c912cf72f52b6b435af02dd04c3e2b67178f003b9a78b", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 5, + "collateralAddress": "RHg2V2sYaFt6a6PGoS5zeAU7iPps3SnzTX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.78:10226", + "registeredHeight": 174910, + "lastPaidHeight": 190830, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJ7oTTwK7Q8awrvUVnKgzkxUbtCWzqWaUR", + "votingAddress": "RCUa29QoXMv6wfpjZJf9ZfXq1m7ay26qtF", + "payoutAddress": "RNNEFhXwSFjT4kQQ4Da6pLyZUDXYYyaebT", + "pubKeyOperator": "00fa50b95debba1c44c396eec6ee74264b409440706605d3541db7081d891ffed459d8da12821debd5a63cb51218d391" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "481e6354b42883cfd7e15c94febbaad6bb5d221a5e15a6940acc2e8367e4678b", + "collateralHash": "848987362c13584fad97c78aa0a68d493a7bc2b9411ff2e7aaadf41f69446377", + "collateralIndex": 1, + "collateralAddress": "RRk6bipZSfQtxXRDzvyq6HVQTG9KdM1by2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.174:10226", + "registeredHeight": 175320, + "lastPaidHeight": 190807, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RA2m4EGDNbBLJiNvrKQ15RgCudBHjUPEDY", + "votingAddress": "RDjLRMssK6GGPuhkiwBXBsT3RQqm5U7neo", + "payoutAddress": "R9fdAXxHHpWf5LD3LLr4TJJzRuYrTgzHee", + "pubKeyOperator": "160ee2c5712aa5587da3f15f01dd61631923d775c43dbf5c6d11189eb15eb30c5150d8943df27159781d82c4fefd4e1a" + }, + "confirmations": 15677, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "56fd7d3526e47417f994bf73e685f596bcfc4aa1f7cd77a0f3c6cb3fb820b02c", + "collateralHash": "8ace4e45ea45f238abc2f832a2675e8ec04e15f6004cf599158a2745c68eb022", + "collateralIndex": 1, + "collateralAddress": "RNaYsfCqJ3cEbu5EobG1UbZhYsciAsev14", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.217.97.208:10226", + "registeredHeight": 175843, + "lastPaidHeight": 190879, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUYtKVmZjD2ZV4QNQGRfR74sEsGVbLGjAZ", + "votingAddress": "RSK2vY8oXxnCmDNzJWx3aPLAAmZTMAW37M", + "payoutAddress": "RF3HYfYxN5HAi4K4Fj4pWoEQyuPmQCasBt", + "pubKeyOperator": "8faf66e4372a5b25152416f92aa6fe5363f9e04cd99aebd35a5dc08720dbdc26b156cc53e2ea51f40ee19dcd5af37d49" + }, + "confirmations": 15153, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ae7b08e8a226e5ac5c390d08d0b549f4c7f908fb410d56bf8cdd8635a253054c", + "collateralHash": "61b3247fda38637032b044812b1c93bb37deb9480292e3a73e9f6eaa922ecbda", + "collateralIndex": 1, + "collateralAddress": "RVuX4bihR4ojGw6TMscsCBxjdgHSN7HcPj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.24:10226", + "registeredHeight": 189300, + "lastPaidHeight": 190716, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REXp84vnfw5UYuVbHQNbGCEcKuoJ27yfvc", + "votingAddress": "RBohdcpg8dzwtfP6YjkvhTsTiH1TJa4fVH", + "payoutAddress": "RH5Fr85kmhJ8NZGbuE6g8xcSGFPKrAmYsP", + "pubKeyOperator": "893c77c270c2075bdba63824759fa9e7bdd246e0b52f18733963be95184893222b6e2aee590f16070912710c94d80eeb" + }, + "confirmations": 1696, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "3064800bf7dcc5d527a5e26b3c2c94053a3baad85659bbed1641792d2ea4ee6c", + "collateralHash": "ab3a3345308223ee30d48958c9bdde23465f59c4a90c038a8f26e9c2e24e5581", + "collateralIndex": 1, + "collateralAddress": "RBqt9gamD7oqdv4Gsmk3GbTbWyWCoZ14CH", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.216.193.222:10226", + "registeredHeight": 177437, + "lastPaidHeight": 190876, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGxTuxQJysofc6m7UuzzEuSZDxcV8bTE7F", + "votingAddress": "RXTJquJd5pHSPcgNa2eM9KcS16q8wvDTF6", + "payoutAddress": "RWwG3bU3db4DgyQCZdnJ1XPe41V3KkRc7s", + "pubKeyOperator": "8b6c0368430ada92b3f1bdabb2a6190172706119f90c2fc9a187d6699e900dc55dc4bf59dd8507c07e8c1c36c4db89b4" + }, + "confirmations": 13567, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ee6ec5271fc86c7c8056859f5066fa2a1a14659b7f225cc5e30cc6e260f536cc", + "collateralHash": "5ce55b29c58c9e1d97d857512cf4fc01b73527cecfa0bb87981714c853888487", + "collateralIndex": 1, + "collateralAddress": "RALjELybCZWPgLn8ofiQu1FdyzgEFRepta", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "70.35.204.119:10226", + "registeredHeight": 174793, + "lastPaidHeight": 190617, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RU8sLN9zPA8zxjZ6xg35LPkbxHpLauagZv", + "votingAddress": "REXxdsictzWvbsRHQggvSdGsxQ8mPgVBNT", + "payoutAddress": "RLRgziteJt3oP79cBNcYU7NgVQkK8YrTt2", + "pubKeyOperator": "849190bcb0443c77343faae4edef185a0016eec4058d935a5918787d52dd479af1c006aef18d12d5b6ee6bbf78b00d03" + }, + "confirmations": 16204, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "306e2599225b64970b867a6efa37c48e848aae69167c2daec7bfed4eddc61b0c", + "collateralHash": "7cd8dae97a68161472d292bd78ec18a08a2bb808afaa57c2864f8126a5a4468d", + "collateralIndex": 1, + "collateralAddress": "RCcCqEyVD2DuLzhbfv5MyASc8gtpQHz8P5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "129.146.8.121:10226", + "registeredHeight": 176601, + "lastPaidHeight": 190737, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RES9VxiWd8VxLgXkgbtAoDhsg7dVDrUmyf", + "votingAddress": "RSQDadqhuWbQf43AfnHyqiCCZa9YsR4FgJ", + "payoutAddress": "RYSvNmy8pf418YFh37q9mQYyNRkuQCi4di", + "pubKeyOperator": "8cd028c8410732bbcd68e6f12544ba41f20496a1d1dd7d7269a2935427f35ba137b68de80a95e2194f002a2ab3782154" + }, + "confirmations": 14409, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c3cbda6f8b4873d7afd53872c4669aea9c0495ba735833c66a700d4c77709b2c", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 10, + "collateralAddress": "RYDFvdUNhVm2FUYbYt2utm6y86VaLtcxBe", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.162:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190752, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRMEeMqSPx5FLjjxfQaKjvG2ebPcQXUC6K", + "votingAddress": "RHo1nKkjscLizfo4yi5A2gHuEw4KH5R8aB", + "payoutAddress": "RSBz7bfz9SvfHj8SxdDjawzBirwB5xnvFi", + "pubKeyOperator": "95d096393072dea1c78aabe0d7cab0db86f61558259e071e86e4089a2830ecb30a5a348003f64483ac8b63ab87c7db1c" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dee38456b165f12f057dc14597e694fa94d13c7d35905addf1db3f25e1998f4c", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 9, + "collateralAddress": "RWoirxdD32Pn2roZRFt8ALc49EoNy6dKmT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.166:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190815, + "PoSePenalty": 0, + "PoSeRevivedHeight": 187522, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBi8AHxo5pBwHiZx8AoWJ4ieMm2t3VmXiq", + "votingAddress": "RQbipR86kERF1ZnP9fD15AdKQqNgQhsLdB", + "payoutAddress": "RE7eKg84DTy3MoKyAHoWH6g4sGWaRqKYCP", + "pubKeyOperator": "0662c47ad7dedde62e065a0c987b72fdd789ce827315412264e227a7d516de1c2f31c6ad53c832c5750fe13c71c390fc" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "54d060868ed7fb506b5e25200304a0e3776c3c5be29f81d453e4b1f70e81b3cc", + "collateralHash": "991040c2c0563bf2f7cf55dca36adf6bc743ff63fd6902a33e64b24e347e5a67", + "collateralIndex": 1, + "collateralAddress": "RCDoB25Z8eEFvFK4z4ehSSW1HzvX2UHwvH", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.158.174:10226", + "registeredHeight": 176212, + "lastPaidHeight": 190833, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGUqLtR2xr9yskPaS7UxqaZdrTfrCpohnR", + "votingAddress": "RJ9z2zp35NFEb22q3p1PMfJDfoXRV1uq34", + "payoutAddress": "RDF4ca1B464N5imKW72qxpXFHzvozX2R1X", + "pubKeyOperator": "0ad2cafe9928129ca568ea0b3265163c7a80acc9719769ca5fafa2a8043b479b082699c4a8d0a89fa411f9b21ec82212" + }, + "confirmations": 14786, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ad645d233bc02b7bcd1cf44a74e9454e069ccc5ed5ef8bb9193143bfabe8150c", + "collateralHash": "e1b4dd90cfc7a5c2618dd6eb8b076082dda658b15793a3d347f3de9b7a3a1df6", + "collateralIndex": 1, + "collateralAddress": "RJvYbH1xoX99cWLYRQtc1fMsEUkbu45dx7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.5:10226", + "registeredHeight": 186557, + "lastPaidHeight": 190796, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REKoShHhknvuBsDPZBEDANzXWuPrfZsmFT", + "votingAddress": "RJw6VBVgkqVWxi583fbh2G2F2rtHFfLfzK", + "payoutAddress": "RH69eRsYTAjcxr4Q9qe1UHrFBwZSVWzpCg", + "pubKeyOperator": "8f38e77cef41e23071fe72d8c1aa687010c5f104d1db4302f29bf04c9172e14d67b4b0d5ff97687d7f248c450b79ddfe" + }, + "confirmations": 4441, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c4e053a09f16434a60acf85709c2e41c18836267ccd4dda93da465627fd4dd0c", + "collateralHash": "54633f4f5e1c0040c2c69abc2412a9945a2d566ffc6257e1c9efbe759271eb09", + "collateralIndex": 1, + "collateralAddress": "RBrxMr5tsivzvaAX7MvFyMCVekBFC5Bj8U", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "47.104.65.167:10226", + "registeredHeight": 162528, + "lastPaidHeight": 190972, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDbeiyCFCKndbBec4gzcyKPuJtX3TwJcGy", + "votingAddress": "RQQBW8kXHGGEFnMCHxQhwfzxKP8zt3gbxw", + "payoutAddress": "RYL8eUSjD382mAq5vA4USSZaVHhqjJmsr4", + "pubKeyOperator": "055bac73e7f7479bda1c9226adca36927ff9c8517ce8753d601c9eb231dad12d9d5b83dd4c9a8b135186970dbe579551" + }, + "confirmations": 28471, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "af7010add3212513edf84385b5338470cfd7feeeaeaa5933c30408c0e48cd06d", + "collateralHash": "90d8c4cd113b8856ecfa3159773ddf5a153290268e5a88a6737ab02c8fa5e571", + "collateralIndex": 1, + "collateralAddress": "R9hmCgePTaMU3CfDvBunpG8km3ddmdRwqr", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "43.231.127.236:10226", + "registeredHeight": 183538, + "lastPaidHeight": 190548, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPd7A8ZzHQZBdMyBeYZUyMsJbEAJDor4Me", + "votingAddress": "RRCZftSEPzELzafi3Gsh9drJS3fmJTUXcn", + "payoutAddress": "RBBNbobzPEtWS6pCxJMxXkWCjH4SKSTABv", + "pubKeyOperator": "92a5d3e99e247303a77ed93b7b68f2068ba102c0d275ae57b03d7c3eed323f121a60793decbcc00674427e08a02192cb" + }, + "confirmations": 7479, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c8262af7afd9838d071e708a55a622baedff229c051ebc8c181e280c8ad684ad", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 2, + "collateralAddress": "REQyCzSkK7ffvV7rXoyUT6EEfAfawgjPUD", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.49.115:10226", + "registeredHeight": 174965, + "lastPaidHeight": 190915, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RD5DQHvNWBeJNn7whUb8QvWrSnbbjYTg9R", + "votingAddress": "RXYRcVFPrBtNhS3t618TsXWXiUCVtTaC68", + "payoutAddress": "RRcNDz6ceEjNSNPqdYmCogopcjQWnBGCZN", + "pubKeyOperator": "017cff485aa7af24340770f4db5d28a590316d5d4ea2f4202b23b5fe92cf15c28a0a8bbdba903e2e3ff570871d10f323" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "540c5ca982f0ee4585056e6094a8bbd4d882c01a1babccb2d59535cdb82c54cd", + "collateralHash": "d45133c3f6e27e69736264f4fcee3cb8649aeaa0fb1ccd6b293a9c9a0436a2c2", + "collateralIndex": 1, + "collateralAddress": "RWxrMwXmNRfYvFbZsjRM8uiWHcNzheYoGd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.141.181:10226", + "registeredHeight": 176159, + "lastPaidHeight": 190744, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMfA91HXU9F7YZCYW3rvLsXydG2nA1hgdz", + "votingAddress": "RAjjdgJ4bdvDWKWdrLnMVQWm6cPvDmzQDG", + "payoutAddress": "RDnTJoQP5aTsuPrFH5FrJmgQHESzvS4Atw", + "pubKeyOperator": "01c83b61c9222740bef5506689c7463c78c4b85f476d4d124b863e7c0937cdc677c5b28c1c27235b86dca8083ceeaf93" + }, + "confirmations": 14844, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4a9b8dd91865243aa1970d9633484fe29e891ecaad949e87e893028737d8558d", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 9, + "collateralAddress": "RTrrxMs6U4oWgofMhQevumWdeknprSJQ1a", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.50.159:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190817, + "PoSePenalty": 0, + "PoSeRevivedHeight": 187523, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REgMVNHwRH4rDQEwSiGTctMgeWzE4jNGJ4", + "votingAddress": "R9r1z3k7fwpcT2Zf99hPaN9kvgSeV8ovY3", + "payoutAddress": "RA1bXuJZD3Xi2CRgntJA3vZoaoPESjssS2", + "pubKeyOperator": "818a809a44f958bb1cc4359b580aaccce37564042dca7b4d1ed4f9817ec634877fb1423329fa5e2c649e95c7df36c7b8" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a4bce0acf914725ca014073a661914dd4ce8cee25debd674c1a793beb3d0e1cd", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 3, + "collateralAddress": "RJ8cXQY4EAoG4uWShkgnW7T1F47F6XM7Uj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.238.47:10226", + "registeredHeight": 174605, + "lastPaidHeight": 190526, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RC4fewzLPWtuLfRwZbdiNFraeVdZLrn72M", + "votingAddress": "RSoFPy3cqrtiLMYsbY7BGAnW3zfXnR1jzW", + "payoutAddress": "RQrCtdKwE72tF9Je8LmhACjHyLGN347GSp", + "pubKeyOperator": "16659b50f5bf33010f5dad4648e7c2051f65745136b3a68673837afb24ede3a668dd9bd28ec8ea28bee0c0950a8ed551" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b4ef9194347ec560f6594943cee0bc62364036a5365cf57e8deb9d6638701b8d", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 10, + "collateralAddress": "RWxP3VcvyRgVgdKP11Zna2zETo6fquFjAF", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.50.50:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190850, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJjas4KXpKkS7RDGAphiVr34qgwBttsVpb", + "votingAddress": "RKuvUnQoXWMihLVbEK8A2TAwkC4vJc2CUg", + "payoutAddress": "RW4hWJ7vHb91yyA1X4fgHTdqRZ6Kp2QxA5", + "pubKeyOperator": "0c1e00278b4322bf528ab27b621a32f65f70dfdb0683e4cca2a0835f6484aa5fb0019f8800d6bfb2f0f95bb93104fb19" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b6a6c887e9890104397b3fd11d651535468f0032928f39c047eb0db85e8527ed", + "collateralHash": "6c4544f818eeda5bf26f9b481b43947cf09db57a8d58d5c333f53afaa39e69c6", + "collateralIndex": 1, + "collateralAddress": "RPQvibhNry4pLmNAZQ8QgPdBrMFYsm4Dt8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "54.90.166.254:10226", + "registeredHeight": 175878, + "lastPaidHeight": 190927, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDo4PNf4QaUiD3dWGzMSEuypyRahj7FqHh", + "votingAddress": "RRTspTMZKAxK77WGdpGNjhV9Qq7zmLY6vb", + "payoutAddress": "RSF5rukzy74PnRus7S1SNLY7MZffJtAL2a", + "pubKeyOperator": "8d4af6040b61efa30111394c3fa572d1f5447d20efb116b142f4bd2972ddd445c2488852d81af0908b37400546139791" + }, + "confirmations": 15118, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6dc388746bda2291f31c61fa1b7ca2536a2521c346c427f5161e7f4ac5464d4d", + "collateralHash": "59bf2927a15810ebc675193e20f5c1c7eb6dc086452e6c3ba78290da399bb3a1", + "collateralIndex": 1, + "collateralAddress": "RChjDCPTdtD79GMcZtXPnDhwtyxmbMhwBM", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.99:10226", + "registeredHeight": 174603, + "lastPaidHeight": 190985, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RU3jSD4kUSvXE7jn4k69crEPhXCcvGxGE1", + "votingAddress": "RTyG4QEEfjXJKweky2dh9i9QHHPbuyDBBJ", + "payoutAddress": "RXfSuAtLoCQiiFvdHSgZY2dTH6H5fkYTPw", + "pubKeyOperator": "8cc56b37c2957675457c06ea719929a404d05663b0ebe943c8db569958693d651afb660250e150e8222edf8a063749ec" + }, + "confirmations": 16396, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "81de371d908e59a6de1cec1920378aa797bd51f6d32e590dd435a67d0126614d", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 1, + "collateralAddress": "RBeUNqDc1erCf39EoRpYWq4UM721gbfXrZ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.107:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190934, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAod3E2FNyfMK5yUqAYbQcutqZSRRxavu7", + "votingAddress": "RFx7UhKwrnAhLFZhHbp5VJ2zVN2ysyDQow", + "payoutAddress": "RVyqNouMRhMxidrevGbq7vDaNYjZFtSPy2", + "pubKeyOperator": "02dab6b776b7be5ca80c15b85c6ec3f8491eb82e0682fac5c0014a200ecaa864e31b13e045e00e0e8b8c85c343ed8c44" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c614b62ef8183f5cff53a2ddb3e649a88dca58377c5e27872b10a73c8412ed4d", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 5, + "collateralAddress": "RPRu5byzW28iRvz9NZX9wmnihShXSHGaEE", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.56.174:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190878, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGqx4ymamhHmvVugXC5NnswZcXZhpGvt21", + "votingAddress": "RSntmioCJ3okqiHbnnF2AjUzFEckgJMH8T", + "payoutAddress": "RYEm1SFUztsGjvDcW5pVCS1vXfJkHx3FB9", + "pubKeyOperator": "8ca192e6a89782b2d9a28305e5533a31aa448e047b0dc356df3db92dc4e7437b710cae72f187aaf7a4d04035bbd1a3d4" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "936a00eb51a32cf23f8cd3368d5c1e26fd83fc0361a24951d994c3e40a3e0e0d", + "collateralHash": "9948db073eb4ec8283ec16692809f7cd0a969af0a35da74695dc2030253c2ab9", + "collateralIndex": 1, + "collateralAddress": "RQZ2t79vKb6Dmwe2qeAhyCQFQSX4iUewac", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "109.205.176.15:10226", + "registeredHeight": 186446, + "lastPaidHeight": 190671, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVcfqXBGX4fuPnnQWnN8v8uNAjbWeP6Kgt", + "votingAddress": "RG5Px6p49VErPTqB7CC2zbxR8MHzqcwnWP", + "payoutAddress": "RK8S3pjMJg1wefndSxuzeZyQbBHih8HoP3", + "pubKeyOperator": "85604e63f5ab3eb0e3b9e9e7e8c9bcd9e5ef6317af26b0eacff84f2687ca70f5f4daa4ccd21afa9df71eda1fb59d5f60" + }, + "confirmations": 4556, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b61d177667b851060c3de04d1ad03407f1be4112fdf682ba924edc1e986cd20d", + "collateralHash": "4f0b327aab92d9f0b2041708dfabc1ee94d1dcdced1335888e9449edf4aa1b8b", + "collateralIndex": 1, + "collateralAddress": "RPjCsuSQV7hATBsh5LZ1dxNw7NBNaXcGEt", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.58.128:10226", + "registeredHeight": 175983, + "lastPaidHeight": 190976, + "PoSePenalty": 0, + "PoSeRevivedHeight": 187677, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RN7En8z86GkWXrXkPvQMHvpaHD7hHaCKT2", + "votingAddress": "R9sn9aRDRSh5F28iPczCAAyDfcCS9XKF1e", + "payoutAddress": "RTne88FJCKqCsJhx1EGpGnD82NbUSe4Cs2", + "pubKeyOperator": "05a1043da9bbb6e43d65bfc69fcd26bd4c88ada7f6094c69385bc2987bd9fb3f4390efbe70a48ed063370d963cd85af5" + }, + "confirmations": 15016, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a46be96a7f1f715d4a944bc81e545eb61838b1c0492d597d186527db59e5b7ad", + "collateralHash": "392088635b42f4565a7424a0dac467b7d8e8b432e503bc9ed8731c23932b1614", + "collateralIndex": 0, + "collateralAddress": "RWVfgatD2dj1toksxAbc2pk5hugCC7x5GA", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.216.190.143:10226", + "registeredHeight": 176113, + "lastPaidHeight": 190657, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAy8VUfr21By2TNGsNWWf3wyfPx519jPiD", + "votingAddress": "RCQZdUoSZfPSg1ZEPfB1embpXmHeh4vaV9", + "payoutAddress": "RKp3D1aEssKqDixupbYgudT773hbQdiq8U", + "pubKeyOperator": "813591148e56e7c6d22bd850a2b4b9ead17773e3fa532ce7c5505829725b69b4502722ff88635f1f6c1679b81db6fa23" + }, + "confirmations": 14884, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "17f88ae33aacc864c24acb81a7dc904b4bca2a061d896b7c55069124607a640e", + "collateralHash": "577d3c6ab3406d6a8728b360923fa3f041718edfef01815f9c3c1dd927dea308", + "collateralIndex": 0, + "collateralAddress": "RM1RhEMsqkNKywtUHGBCWtq4gAivm6r2bw", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "135.181.145.25:10226", + "registeredHeight": 176081, + "lastPaidHeight": 190612, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFmHPNiz4pyrMxQQ13ZLSeFjnAAzdCFKyr", + "votingAddress": "RVSBfPkuA1fC4jByTGooB87kurEigd1SK9", + "payoutAddress": "RBSxZozJJzqjXkrBTdxuAdmYwr7S7QAz4R", + "pubKeyOperator": "0605e045816e3d1b90b471620e9d64ac2f8fe191314eb1bc9229ce41de87940c3666e3389ba31c337d325ee5c9a0de27" + }, + "confirmations": 14916, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "91469394dc51e2b478d8661b8a8f1cca4abd3bff622538563c47da64f7a0d04e", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 1, + "collateralAddress": "RDZ98jAGsM2jNZtEhxARmA9zLQBigG3HKB", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.228.164:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190855, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWxuHBauA5yXyXMSjMz6F7vRP46mrUhg7o", + "votingAddress": "RDWUCuv4YsN3NCF8LNkpNWvVQLFv1qycb7", + "payoutAddress": "RLhP6Zkw24jUeNzrjvHVpDZ8SvEJ77y4ak", + "pubKeyOperator": "040d4507ca2daa7ad0d97feb400c7bf2285985d8a74a1bb7fcf202c816279ce8ec895b370004f0b41165abee1fdeefd3" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a82ec7ccf5cb920d6825c9d6d727b9e979c81c11a5f7fe7256d421d96816e48e", + "collateralHash": "81f1d2087fe85d788eb0a10c6ebc1d8e12e24b7a40d1ec5b248b793cdf7f5df5", + "collateralIndex": 1, + "collateralAddress": "RWfhaHDDxqj7iX5afgVbq92yHSKaRZvJk2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.100:10226", + "registeredHeight": 174567, + "lastPaidHeight": 190957, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDuYeLJa9WmX7bzU5933ZhqonVLv2EGAmu", + "votingAddress": "RMdPVfcCrp8GKFk7rddzdofzNEYeZCvaE8", + "payoutAddress": "RWiVKxS6iVYFGCD5bBKtiHnfkBAKmtUXLf", + "pubKeyOperator": "948cbf7ad8368bd5e6d665ccc6785bcb7c5372d5b5931ccf3e7525589f756dda862a44b63b6d0aff8d23740ef2f960c5" + }, + "confirmations": 16430, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "655474728caeae005cfec3cc363fbda18846643e2d6a4b5aed171f83524d64ae", + "collateralHash": "64f4930eb702893669b707fd3096953ebd1b9497e60d09a3df9989fd7236f8a2", + "collateralIndex": 1, + "collateralAddress": "RLNyWmCqxHZjVqYmTM2ahtBcteqdME3HJZ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "118.190.145.15:10226", + "registeredHeight": 176419, + "lastPaidHeight": 190559, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWqs2qN4npVhChXjxTkLp8XpGwGdkc7KYJ", + "votingAddress": "RCnvz7B2CNKArfW3QkYayqYdo6vW8tWk1s", + "payoutAddress": "RYBVTLWonhk1i4ysCa6soYu1X7o8VGRgCC", + "pubKeyOperator": "9788cad3e5211890aff3387be0b245c0a4198733a6f8e3d9d40addac28bc93cadcb2d7c2a96c46dec82bfcc6fd3ed4f1" + }, + "confirmations": 14582, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a7ea039d80472ade4eef45ea6ed6bedb0b9c22a6645fc1aa8d095165933bd4ce", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 4, + "collateralAddress": "RQLoc2KU4h5w1ayJme1rtgvbzNo8ZKXaKF", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.140.219:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190773, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJBStJqX9TQyXJBhBB5vETgH7sdjWrY1R4", + "votingAddress": "RYb4gHjhYp6gM9suZHBom5WbJbD5fKQYLv", + "payoutAddress": "RS5XWSwybZSc6TaTJFM3bPYyzBZ3dzgabZ", + "pubKeyOperator": "068500e6129a61439960cc906d2b291a0f5ddeee5c75137dad22467c494714446f5fcc6fa56a2e48c859d6dd9a8fd240" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "66d145981de570063f7c9d6c9fb70518218aaab0d701612fce811423a2180cee", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 6, + "collateralAddress": "RSAwBdyQTRWGTNb8y3G6qL3CASewXfJtmM", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.53.124:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190636, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLPFFEufZRpo6LgCwhaanghjfaJamQ7yjy", + "votingAddress": "REdoRD3xrJHPmWLw5DRy5iTw6fqrPARUWG", + "payoutAddress": "RJDooXh9hS7g5fKaEyQK3y1ze9xRRzjBrn", + "pubKeyOperator": "138072aac7c62a57754a9c388b525f495d13472349a56ea125d3972fcc33a3d8bf2e169f2ee46f1d1496e2d3c91eb7d8" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9e867b158c3c8bf4b5276bb5f525525ee2a318e80b7c6f3d641e9fa5e4e82d0e", + "collateralHash": "30bbb6baa414bfc685f8169fd5a87bd7495acace5dad2c5aa295b9b8368cddd7", + "collateralIndex": 1, + "collateralAddress": "RMYJnttJ8ekQCtGWx7bzAons2qK8CmyUDa", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "143.198.166.144:10226", + "registeredHeight": 186414, + "lastPaidHeight": 190637, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRHgcfP3McjtJ4LAuXpznMrN9ttR5srpBG", + "votingAddress": "RHJT9BkkS7mPJLMUojzVoGAXuX6wfMaiXR", + "payoutAddress": "RVYTZCCVCCRcudkLUwcxTygKPvA3giJRoD", + "pubKeyOperator": "89a17795e43a3d5c9fefd8f06422c59abac3b7d0f1178c7bd13b21f11cb455fcd0609638f013a154feac5cf709e48813" + }, + "confirmations": 4604, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "44eb30652e5b7629e787be47ed9d8604e1a25ad29e2acbc85f701f6331a2b56e", + "collateralHash": "21281d16f73f5390815ffa9af6ad27aa1fca6a2ca5070f2f9c985551d5387de7", + "collateralIndex": 1, + "collateralAddress": "RKYB1Fg9uJaoNmfRfvWDn7CjT1eXX2dpsB", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.3:10226", + "registeredHeight": 186186, + "lastPaidHeight": 190892, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNachCqsLvv69ckVRoahzkvgK4xUD7ZLZt", + "votingAddress": "RDtRTHVVmhr1Xrk3ycW4LQivK3ub1jjQX6", + "payoutAddress": "RPNGca5bw4fpB4WFXxuLoryASzHNXTeTFa", + "pubKeyOperator": "8ae5087d957c0de9700b706eb709cc93c5405b87da18878badbfb2315b04d99c4f72b20f85ffebffe357f6368e00032a" + }, + "confirmations": 4811, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1f2cbdeae92dd8ca45220dbc8861a35b7f9bc5718c0995c1f2171d445d4a91ee", + "collateralHash": "ac2764509698fa3919c9544d4d148b9d9045bc84ec8833616677655bf4fdec9f", + "collateralIndex": 1, + "collateralAddress": "RFjkrnzSHcaorCfjPLik78vxkWvrb9ve5q", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "3.130.218.222:10226", + "registeredHeight": 177301, + "lastPaidHeight": 190690, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUZherE9g4kvMtgaj8d7qNqiRd2cMKUJUL", + "votingAddress": "RFLV82kVQUhP5DrfzFgzAEWFxcuonQaMcU", + "payoutAddress": "RXpgvHd25syDXsr6WnTTqxXeG9ygey63Uv", + "pubKeyOperator": "816c320aa6600ced3945bd93a30b8888f7ffac0cf9c949d0875a06bfc2257a5b9b38646ae5e3b69d7d3aec85f2c979b1" + }, + "confirmations": 13704, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9a18d77f1e9ded5274bf37294711a6b4a23508e67209a2a8301d4fc66bf5ee0e", + "collateralHash": "9673a46281109a6ec9047df726820b729313cb1e04c6cf27385290cc433daf3b", + "collateralIndex": 1, + "collateralAddress": "RWL188RXLKYLe8x3dL61y18nGYxLpcdSL9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.25:10226", + "registeredHeight": 189403, + "lastPaidHeight": 190824, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGC2zQeGNxrPKmbSUp7egHQ1dsUJ9Nk2dB", + "votingAddress": "RRtSJK37UGmHh3syHxRtqaUbr9Tkm2FNfW", + "payoutAddress": "RAjKhtAqnwsVAAMNE6ddUSaqdBpn8nXeYT", + "pubKeyOperator": "173119746e1ac68d6ba99722c05cb15de25f59765fae68dd76cef18731e9f043df3f069b9d1c5595e7378f0f32eff52b" + }, + "confirmations": 1593, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a55e5f8ce294763ce933604fd52b843be73cbb6f0c96fc5a14736cf6b438f24e", + "collateralHash": "b3b825fbbb8fddc7bc24690404a090902510988532d79b24b7bb07c65ddc2487", + "collateralIndex": 1, + "collateralAddress": "RBoBCpKXjMouagdj7htP16tnJ2QHWzeoiR", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "164.68.103.231:10226", + "registeredHeight": 174731, + "lastPaidHeight": 190793, + "PoSePenalty": 0, + "PoSeRevivedHeight": 190320, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RY9RjXFZSidw1Sa2ytxGhW3bE9dY6B6UnE", + "votingAddress": "RRqSLZxsQWAf5QZAghSWbv4A1MRHrwFKfR", + "payoutAddress": "RXis6pr1CAwQmjZSXQBY339DEQA73qYQB1", + "pubKeyOperator": "8cd3207abfcfe0087aa6500dd18542d43531185163eb9159e4f5dd6b91909623502b7479fc8808b3dac93b85252ec19d" + }, + "confirmations": 16267, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4f1562ab1481153aa2f523fcb4da437e2253bc5bd0c4f7bd2e496f1f53b8826e", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 7, + "collateralAddress": "RRQFTHDBSia3YtZ1RU1Be5fwjh9caZB2T1", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.52.214:10226", + "registeredHeight": 174965, + "lastPaidHeight": 190913, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQReeb99mn9gdaT97fozTfHLUXXEVP93HB", + "votingAddress": "RPvuoJztW4xydn8ekz2TqebmXSedvCy9Fq", + "payoutAddress": "RAhVhPXD1AtKxLz9BoJjAzjHHALV8Nz64U", + "pubKeyOperator": "894045574cc6a04375125c26ee41f2c84e908042675c67f8587d9474afa9f72952a3954727fe57e9baa518d142ab7ede" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "39fa4d25e3ec4310846a24937b2f4e00824bfd680c3db63a650b601ce9a77aae", + "collateralHash": "e9780630042a5eacf0257597cae743e75e64b4c4dc52f9812a62a20b49628644", + "collateralIndex": 0, + "collateralAddress": "RBvncGWTFJR6tUYRWVsJafkn41yvVx6Mv6", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "141.95.53.250:10226", + "registeredHeight": 174743, + "lastPaidHeight": 190595, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQtvQL1m7Q6UxUFyhYjYwWWzACYTwBoLYb", + "votingAddress": "RQtvQL1m7Q6UxUFyhYjYwWWzACYTwBoLYb", + "payoutAddress": "RYUt4iggPT1VA54yCUN3pX5fvVbgDFKinu", + "pubKeyOperator": "952bb30e1488da1b919517e858b379144797f36f0985467b164e6534820c2c67963e51b8dceef1fe8d60c866c36876c0" + }, + "confirmations": 16253, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b4d04a15da2dec508ab50534ed0b2f453856e5627f9f25d3699961fece66df4e", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 4, + "collateralAddress": "RQNksvphDL43439ZYXtiKCsUUfmhBHYEN2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.92:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190936, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RP6m3aMGm4RToHA4kL45RYZyuFrsDZ6N5K", + "votingAddress": "RPYfYNNrR36kmjx4XVvqQFp5mueKgxYeeJ", + "payoutAddress": "RTV2niKVB7iHBUxFeg4n7uG1ewxFLheNzA", + "pubKeyOperator": "996efebf4ba60ec5fcae01bd2fc0e686386f304c965a92cc2767a3893d5b50690c6374ab077544f536f845a058eb966f" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d89101832158d88b8f62e38536cdc27e8a12daa1f3067588ad40a2b0424a5fee", + "collateralHash": "2e9e5d77f98960f5282e79bdbc0353eaf40ae35988bccbbfa251152302eacb96", + "collateralIndex": 0, + "collateralAddress": "RD4ffqMm23A8MrgBaz7nVEgxQrJFefdcuz", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "116.202.24.151:10226", + "registeredHeight": 176122, + "lastPaidHeight": 190673, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAzotT6CNNNMjcUgifXaPL8MrTGcPLaSFP", + "votingAddress": "RBJSUoKoCvgefZ7Czxcgr4Um5XwG3g3Tp5", + "payoutAddress": "RTA7QoSonsGhfAf47DmbatQoYriQ6RtA1B", + "pubKeyOperator": "84a6778970b426bb6e95a30f0893ed6c25920cdecac82a81b8dcf126c3afd1d3178f0b73c54a12770e69bfaf07417b4f" + }, + "confirmations": 14883, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e9e704cbf355b634ff7e2d279c59c0671ca3eba097ab5f6305a13455161b518e", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 6, + "collateralAddress": "RRcuKu3sWLygAb75rLX39MzMhguJcBrdYp", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.158:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190761, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNjRCJVdkFangaHFVcT1T2uVwUXSYekfpt", + "votingAddress": "RReAgL68Au8t6SYdqCctSX4DVytreqjRzN", + "payoutAddress": "REaki61hFyiuFKvFbGRGKJeWjke6odxuz1", + "pubKeyOperator": "92a1db72b73a33b2915fd421fc87f6f51dff441798fb8b73093da95caef81374bbe5a2671e4bae1e2d0abc03c7a3a4e8" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7e34e30c170bd4d3ae6026666587ee60ff8cc35b13ec9ee9fe7317c0f732f98e", + "collateralHash": "5426476c3d65710464991ec6a8640323fff00e7b09dbcc2e56e225c10dd793a1", + "collateralIndex": 1, + "collateralAddress": "RVh6TQhwoUCE2YJFBDSEpS2oZvj3dWhX2B", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "139.162.126.131:10226", + "registeredHeight": 178862, + "lastPaidHeight": 190660, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9p4fzAHmYcYrFrm5bE6PuBkzc9zM77c7T", + "votingAddress": "RVJmtcyaXXg6hPV2ciywfuvBHsk9ejiCB8", + "payoutAddress": "RCbnefLL1P2UbfThevDdVcAYev2QuHGdsV", + "pubKeyOperator": "04aca8ac8037f76e01b9f47e63ad687e20951aee26d11feb30dde921bceb19d76431ad21edbb2b36c09e8e8521fd18c3" + }, + "confirmations": 12224, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "14aed85c86ad8372112d4eaaa4cda294503acf04b8510f09e395839bb50005ae", + "collateralHash": "1915afcc0cd9efa6e05f7c5af8790a0bf0fc31673c07b4be99af31b2a7e513ee", + "collateralIndex": 1, + "collateralAddress": "RY5X6YFahhchhvkxKno6ZtGoSRToEVCuxH", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.134.26:10226", + "registeredHeight": 182909, + "lastPaidHeight": 190841, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXfSyWuqM98yg8C2QZwWkKgAcGVuRqnnRp", + "votingAddress": "REzdh9VarHUA2Jzq237LkU82pJbA5vVdgH", + "payoutAddress": "RFwDLAHadqU2m1QvLVbwNMX1A2qAgUGypc", + "pubKeyOperator": "06bbbaf4314ab29334cd92c8ecea23e1ead9ad9b0375b64f31bcf64d7631f12a88b6fc2bdc8e157f8e922c43adfdb421" + }, + "confirmations": 8094, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8ea6b67d88ecea2bb66d700e100bc34ea5e03b94b054a9fa00897918c2f339ae", + "collateralHash": "00ae6a614e0e2fadce259e7f7ae1c2fabbda2bb715347d4ebb0d57419046be49", + "collateralIndex": 1, + "collateralAddress": "RMBcERBsJ4DpP4a47SgWwweQZbzECqYjYf", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.168:10226", + "registeredHeight": 176040, + "lastPaidHeight": 190590, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJkQZzUsgxQ9a8Q7Z5u3EhjQBt7jBQP6Vk", + "votingAddress": "REsHYfZKX5CC2v8BgLtjkauRy2wx6AsGd6", + "payoutAddress": "RB8qVNez6GLvN7v2ZsCrJhYK6Myds6XrSM", + "pubKeyOperator": "8fa9531006c965ade2939a2518ab273a69c9acdbd63274dc0457df8b31cfbc8dc41d1b4defbe7e48bcb40abdf33eaa69" + }, + "confirmations": 14956, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2ac1dd97465f130fc2afb0e556c387982007c13190c8518c5b6cf7e440573b0e", + "collateralHash": "411d26a7cd364ab36269e2e05e68b8499c38540b6bcd21d1bae9da244179d659", + "collateralIndex": 1, + "collateralAddress": "RVGaTsc5Emj7sUocexGrUnfkFVYtLq7Aeo", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.133.52:10226", + "registeredHeight": 184468, + "lastPaidHeight": 190563, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQPXDaSPqqEGUW2yuheGHqKTMJpxSqBnSF", + "votingAddress": "RHZEXqaz6gKmuCqJeQgZR41TiihCNQ4Uud", + "payoutAddress": "RCxNxXoYj7CGo28sgCKzq8d2qcVTAZFcCe", + "pubKeyOperator": "054cb6dd6fa3e1b54b95408c5d96cfab20c1ab89defc4533fb6219614a0af32527f998e49266faf86fe3298c86c51c75" + }, + "confirmations": 6528, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e2b7090beb5aad7ae0c6b807812adb03593a042d27e42a4a9d2f8d58f7f1ff0e", + "collateralHash": "18de2ae97e28d1e2c17fe833602867371fda2dbb2b97c2f0bc353e8d1ddb3cf4", + "collateralIndex": 1, + "collateralAddress": "RGgKdphd3Ut1U58ZG6iym7F7iFqUgJuJsD", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.157.39:10226", + "registeredHeight": 180159, + "lastPaidHeight": 190700, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLjSkd3ZqrPdpahQL3myqt3Q6s6hSzxpST", + "votingAddress": "RLtFVxCaLC1XHGTNK9j2nb3h6za8aJoaXb", + "payoutAddress": "RSh281PnkAMViJUDF6XajBouHXZTdbofSn", + "pubKeyOperator": "891df4b3504dee430be02557798f28b43dcdcb4839aa1e182871107ed3e41407324c544a30f06422ec1f826f07eb858b", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 10854, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1c594f3d50394ae79c0d5a0d20c119dd9505c56e85608a7d17aca64740521b8e", + "collateralHash": "09f3c2dc47d7ea77b1f926e1bc5ceb348dd7a11e3a5f0556a6604b742bd9b0a2", + "collateralIndex": 0, + "collateralAddress": "RDznJjqLRYVZgyakfb8qqQdnJxt7HVTZC3", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "49.12.102.26:10226", + "registeredHeight": 176128, + "lastPaidHeight": 190686, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDygsa7CKs3DiEsP9n4SuWERd8z5ptEy4i", + "votingAddress": "RWv3AqBRVNdQWXVn9utdj4b5Cz9HRJTZQ5", + "payoutAddress": "RHsh9kactjFiYnwb7uLq32sZaCq8uqzZs7", + "pubKeyOperator": "8e745f476294bf67c55f98fc4ca4de5ada65ebb3104a8189a3d3bd9ba7b32b9e7326010e69d55c3546c0c2a2edfd0e3b" + }, + "confirmations": 14883, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f1c3d1d57bf94424b159e0bc2ed8e3584928d36efa1cb4c528fdbd83fac3b10f", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 4, + "collateralAddress": "RKBrEixcyTnh93zq76hzoSa8JWKK8XRMek", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.88:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190693, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGE2TAVkRm6Qf8ud65tJq3CFsFJobPTLsJ", + "votingAddress": "RXRsRoFGgzqcSn9w4hcf9j1dgDVN38HCNY", + "payoutAddress": "RGsnsujMrcsJsmPvBWhncSKVaodp5esNtw", + "pubKeyOperator": "19242e69be56908385ce1c8fbddb0af330c5cc14763dc19470554c477efa7a8be0740126a3167bf123137f86e839956f" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "132c96fb2f210d33b7fec025b6b1298373493db779ce352986d5fe4f2a25954f", + "collateralHash": "06cb141910c6e7eb36729857ea72233fd5af776a877af2b228f111298479fdb5", + "collateralIndex": 1, + "collateralAddress": "RSXKF2WYFxSKu7JoF2nrnbn8KZuC6pYkAE", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "120.27.13.4:10226", + "registeredHeight": 176419, + "lastPaidHeight": 190558, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXmPd9rYFXVLHKxzCat2J5AqC3gFvsnb82", + "votingAddress": "RGM7PCUqfHNZXZVgJ2Z56YVj9c4n7tpTBM", + "payoutAddress": "RVyTFaJTPGNLQLqggnei92AfF4VKaMrzd7", + "pubKeyOperator": "8f9a79f21ee06bd53ae7f8545a11c4feac7ea4869893854ba5706a34577d9d07380881001c9af6a9b4fe860b86bf3122" + }, + "confirmations": 14581, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e4fb15b061a13c5f29467a000291c9f0a82a7eb613ac40202886d1bb6ba2f1cf", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 5, + "collateralAddress": "RQ6rUfRoTnZth2H6chejScsvNXWFtdcro4", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.50.192:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190851, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYJUK7JzQFnY8eUaCpsw6H171iZt6sNV8v", + "votingAddress": "RPHxPEPtrjZjikavcFiU774K5sRHuRuuD9", + "payoutAddress": "RDBWvL6yv3XrXThWWE7QHo3HcY54mR9v9J", + "pubKeyOperator": "182fc79ef427253406cc87719a66f2cdd82658d924e4247c0b1e2e1a368dbd58aef89c0cfa63352ff8715f2fef35e2fa" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8550809c25ac551af774221febdf0c748ad8291d300592ef9505dbd6d21a71ef", + "collateralHash": "23eeb0cefe7f18e3df80a50117bca61a68f69c1be955e495a54a83dae76713a9", + "collateralIndex": 1, + "collateralAddress": "RKoZHRfqTjp3DJru9SthxEUpPa8YFnZT2a", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.156.90.199:10226", + "registeredHeight": 179118, + "lastPaidHeight": 190938, + "PoSePenalty": 0, + "PoSeRevivedHeight": 190465, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJ8Ntj247dmm23jtdeLppxQu5ubxbnWLLe", + "votingAddress": "RDmCYy4Wv5ECDWAf9TXMf1NXkFPkvm8CrN", + "payoutAddress": "RBZpQvRZnG4S15gDbnHakQd8F3cNtjVeEt", + "pubKeyOperator": "869a843a7dc769c47487a7ab7024768244467ab07c19d384222e3e953d6eb82b091bb079a1282301b34c549e9106b80d" + }, + "confirmations": 11878, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "99577dbb468fb98fca69cd4dd912c13bf14aec2609731c54f027bda078a0464f", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 5, + "collateralAddress": "RP37NCAPFxCc5YnjChLQCVHG1iJ4eFnaMj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "62.171.183.183:10226", + "registeredHeight": 174965, + "lastPaidHeight": 190911, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYTtDL14KzN7SJ4bbpu4Q9NMEtFshc5ZnD", + "votingAddress": "RVfJBNLNLCBszKhFvhDsvvwKF7bxkWPei9", + "payoutAddress": "RUYkUEou5Y9zpvV2K2eNAbryL6F2CV4uYL", + "pubKeyOperator": "10d3b55e602276788c9a9753e4fa3dc08c83e441fed7221bf59c392827a2d320c3df4f5f82a861908810ec82622f9f6b" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0537c399b9cba83275afb61c28b0c3c05828ae383160e11381002d5474ece2af", + "collateralHash": "36944a971d4f7b9d162136cd91040a8b842351fb6738f1ae34d5b161fe10530c", + "collateralIndex": 1, + "collateralAddress": "RQ7epWzf5eGjJX11xXpKUqFmL1m3z3CGGN", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.60:10226", + "registeredHeight": 182379, + "lastPaidHeight": 190748, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSJ3YwzpSqtLdd4sQs1ebskcEJ63HiQAyK", + "votingAddress": "RW3ya3SBvJiciu3PgGxRcdUUj6Hcn4Uugg", + "payoutAddress": "RUVUDyeDaRsyWWw5PqP3kkuX2XDERTj1Wp", + "pubKeyOperator": "14cb8a36e730f626fabc7261da4fbc5f3ceaaa766a7037c9ba4098b81162e80536195de69aeeb48f4cf6a82a0c7697f2" + }, + "confirmations": 8619, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "05f7059bc1e131a9d5bd591e6c94c82abdb1dca6f301920358749540415a73cf", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 3, + "collateralAddress": "RLuRmj5tHaLgRJPbXsov8XmCV31g6trd3F", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.229.8:10226", + "registeredHeight": 174611, + "lastPaidHeight": 190543, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRGKBEJs3NpPPwUuDL2SN5Ain1wosgJ1Vw", + "votingAddress": "RN1JBdiFcVKNxPdeDsNDiJSEsswL21UVPP", + "payoutAddress": "RXv44mTErWiVAUA46tCng9sxK8tyC6jgMe", + "pubKeyOperator": "818ddc13cd0cf3b34066f78aba2ae243dc2103cea283886bce6b17cf89426f6bfb9b0b0294c18809f092d9042890eb6b" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c26e189977a85a14a24047b0df4041b49f6140eaa2bbe1467881501c78c3f56f", + "collateralHash": "7c5f02c845c6e6743c15f512caa871777df7de0b2b7d4790020164a1d11b9c89", + "collateralIndex": 0, + "collateralAddress": "REEv1u9s3LqtbFzxe3CMMzrtxg8M7Futet", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.255.92:10226", + "registeredHeight": 176084, + "lastPaidHeight": 190616, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSpVFCxfftio7V8UD87RBcM4m2KfRzdG9w", + "votingAddress": "RR8RGfuKm4VUMnFee1JMChqxzkLFx2i7au", + "payoutAddress": "RHsjcoVt2ANwF7ftWh2j3BvvGvLugvxC4Q", + "pubKeyOperator": "09021a795e050fdaf72a0ff12d7a1d5e6bab7006c65b10c6cd66800aa9a5f43256b2400d86657c452ddc1be4b700d074" + }, + "confirmations": 14912, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2e2f3cf0035a3c041d46c9769025a006b4d5179634aa2301b958609b225022ef", + "collateralHash": "2479bfd20b3e29abff09d5861e9fdde67271b36bed33e8d6d18e8f3bb39986c6", + "collateralIndex": 1, + "collateralAddress": "RGMZR8Dahbne28kWhCd2NqEcRrBjeEErYD", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.156.89.162:10226", + "registeredHeight": 176655, + "lastPaidHeight": 190814, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLEW7tXLmip8XKmf1eRApgF6zqJReCegV7", + "votingAddress": "RT8sZ6nLSbcb1NL4Art2St2okCUqHv6WQU", + "payoutAddress": "RQwKvfLxsDDSq4RVGHXdGY5qpDHzx6VCkw", + "pubKeyOperator": "88b756f2d802a6cd90a32923752cc2478bd2b5c14f1249c94853df4f6154b22632bfbb2b78d817c6d4faa6ac3055ac26" + }, + "confirmations": 14352, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "57633aa6305ddcb975050563514b8ecad99811d80c320b56b05805a4765d9810", + "collateralHash": "23d3ebf5ed24e8e0a54fd342cc4b9a1d7a5ae3c645f762c7159db97736278ecc", + "collateralIndex": 1, + "collateralAddress": "RBzznz34WWCgvJNQ2e3CKMjD76VNSkwiDz", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.163.142.128:10226", + "registeredHeight": 186436, + "lastPaidHeight": 190659, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHaMDw5Ut1QuDktPvYCTACuG86As72VpU9", + "votingAddress": "REKrjSHfer7z3tSG4oDQRarHbopP628KS9", + "payoutAddress": "RSNz743qBeJXJ4dCLuSWT77Hck9vK8Tkwc", + "pubKeyOperator": "81eb1f8997184430c0c228f7d593bc2bd01f322485912764984adcf15266b7457a92a68866536b9d52a36d1c86df0dee" + }, + "confirmations": 4565, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9d62167bde789c4be75942e0980084343596e8d15545a76901f72f6b3ef108b0", + "collateralHash": "840d63d256c751374af6e543666bd18cf31458997e3624f6efde26efe678ea4b", + "collateralIndex": 1, + "collateralAddress": "RVU35ZzntiXJohea1pru1uvVEDssr9sM9m", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.174:10226", + "registeredHeight": 187417, + "lastPaidHeight": 190702, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCFtdNqDnFvFRLtynpW4oSPjPULWATo115", + "votingAddress": "RMBSDK5dJedqweu33kg4RiswzSQZy3Phqi", + "payoutAddress": "RRFho2JDT79eWQs7qJgptvaauC6dwDoeTv", + "pubKeyOperator": "02073876c1c554201940b7d73e7a9112de9cdda438448702736c4dffe715a916b0f9b15cd1e0a8f26d92cd906c18bb73" + }, + "confirmations": 3635, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c7bc0a59bb86b0e85b6da27dbaaad769060fe847e867781b9ce45712c3248cd0", + "collateralHash": "cf9454495a0d892ae73b3bd759a511371be95ecbaf349aee168e7685f9513fc4", + "collateralIndex": 3, + "collateralAddress": "RCRaGfe5H4QVCLrHxUUCxobxhVzgzPSqUF", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.173:10226", + "registeredHeight": 175109, + "lastPaidHeight": 190576, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWXvQXYf8jBqicJFStcAT1rj5BgFHWMwkj", + "votingAddress": "RX222tckahJEQmu6EJFDgvrwnpZPwMLmfF", + "payoutAddress": "RUnDU6HF8CWLE3ikYZ9Qv7zSj7L6hDtyj7", + "pubKeyOperator": "011ea3a84cb649a1bf6cdf0e9fdc720a68d027fdf3d66dfcf56b0ef7e47c1ec05e647cbb7564733f6c3690816ff97711" + }, + "confirmations": 15887, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7552e5832d9127c2d1e116f7adcd806699b4b7992d6959f25533c3fe5586d110", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 1, + "collateralAddress": "RGqhpCDZPb93TZkvfvM9BGy7pMJZAgSTaj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.121.242:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190839, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFrVjYvwEzAUGzSwwh8Rz4Nw2iRtNMvwqK", + "votingAddress": "RVNkszgnj2zqycRJxQavGsuX5qsHeAaL13", + "payoutAddress": "RHYA5E3V3E1NDXtuZ55Zty9KWGADKmwRYs", + "pubKeyOperator": "943b23a90a695e6511418442edcd9170d6aaad7713500293d8cd934cd952d06dcfdd3f3e6cad6561276b954dc3aeb555" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7a1e69036496403c992afb09c6fa3892e75bea050bbacc8661ba805c8af4dd90", + "collateralHash": "539ea3ac77d1ce89d61f2fc575d2c3e346f51aee653b22e613bc78f81ace7526", + "collateralIndex": 1, + "collateralAddress": "RNDn37tLCPQLGsdvfSba4EvoiTULE5UU9b", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.1.144.38:10226", + "registeredHeight": 175932, + "lastPaidHeight": 190981, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXzvvwRXKf5D9aD8gE12MtC4WZvfHs1mq9", + "votingAddress": "RACcE7gdcJS88kSkuZwLPFLeaWXqghpvBq", + "payoutAddress": "RCo8cZUf4vmx6FYB9nXhp4DGEb6Np1mfbG", + "pubKeyOperator": "881c2e1b19aa32ad2938963d18e7eb3696b3f5d6a0e4ba725ba52e1a3065c0f63468e784103b913c5bf268bdd303cdd5" + }, + "confirmations": 15068, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6af3aaf8a5bb7c4c6ed930875fac443fc3926ea7ce5c37cbe7524185fb045a50", + "collateralHash": "94af4b7d14a808bef4a7e876a20c5a5d79b7c097df23b71913931aa2fc410091", + "collateralIndex": 1, + "collateralAddress": "RFU6wFqTxwQK4q95HBwSeezVfgJx1AmQ7f", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "185.190.143.113:10226", + "registeredHeight": 176710, + "lastPaidHeight": 190883, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RE2yf7mDvsuZ4zFRfon7Gge5JdmAPBhsjP", + "votingAddress": "RGHewrpt8MAPepUCFDLEcnryhAYRo598bD", + "payoutAddress": "RJPnjGrS2PdrbauaQdavAKXGAW7xBbSG4X", + "pubKeyOperator": "999314aeeddd9ded097d5e7f7e6dfb4880ab84fcf720e4b16a233d9b7891694d5b38e199c3c15818468c59e6157e0059" + }, + "confirmations": 14288, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5a8462b1ac68b24d46a6fd78973898465641317dc2eb2b2a51937c7c063072d0", + "collateralHash": "d4b13bc435d64f2a3ce91acaed00bc9212eff7109fc1659cd98f97d5c1fde282", + "collateralIndex": 1, + "collateralAddress": "RC16TjneiEuFHvYTAYtW9pdcV71qhFKLTi", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "66.94.123.234:10226", + "registeredHeight": 173883, + "lastPaidHeight": 190722, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDtcGczCo41LcVoya3n9Xazn3NzdfLpTQ3", + "votingAddress": "RC3zxAm3afer4Nb6roaoRNSCzZhat9NTES", + "payoutAddress": "RHqF8EFdKJWDpoPodRmsTDUWYKZMqCMiH4", + "pubKeyOperator": "845e13e5259a9733cfb4eeb883e65ec21c3dea291c9b87d522ccfe6fb841e2049b1176bc4206336cdb684ac7d78698fc", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 17119, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "72816c459746607a90424f0f009ee09a00066e88840f0082409dfc017d546b70", + "collateralHash": "8604b56568358f81361f6710fd267301a11536c940a3014a847a873be333041a", + "collateralIndex": 1, + "collateralAddress": "RNdcS8icm9gVqcSMLc89tkGfADD7iSzhuZ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.85.49:10226", + "registeredHeight": 176002, + "lastPaidHeight": 190569, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTrA9AzwtjpHttD8cAtP6LaULrekrhBn3q", + "votingAddress": "RASrDCR6CnpAqZsnuekcJzctazjamcwEX8", + "payoutAddress": "REYnJEauFFpApzYdafE1kArPoER7mAkYLL", + "pubKeyOperator": "8599e3a01e3c117e2b3c80fb0f4005dfb66d9aabd8eca9ad4bad4443aa52393ed6e691973263556751551f9d33b52941" + }, + "confirmations": 15004, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5af0e144c98124fe6babd04c2e3ce9c227f76b591346a222bc4f35c60f334bd0", + "collateralHash": "d6dc150c7a7d4eeaf76e69be0232fe32622737ef172c9d42e2276bedec4ca80d", + "collateralIndex": 0, + "collateralAddress": "REXdw8nua7TgAYFRkjZGdtx34WmMUobecY", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.217.21.37:10226", + "registeredHeight": 176578, + "lastPaidHeight": 190704, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTv8eEZhGXHUBqa1fPfLKNK3hHqdcjTSCg", + "votingAddress": "RPBFzotUDDKX48V2uJspteAQcwimQxy6aV", + "payoutAddress": "RS1KTkANiyxXBnhYy6wgRXGW99ndQQUZxQ", + "pubKeyOperator": "11d43f72e8f2eb2a44d5fc8ce483161d683f0e1cc074dc1a2c5cbae3d28bd9adaf0238bca190b05a879625896ba19855" + }, + "confirmations": 14423, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2f44064cd6eae592da46d7848fb9eda60929214d3fcbbefbd2e1fbb804af7ff0", + "collateralHash": "7c728e12143622c3e014e74c5fd1bc403c4eb521e21923c583bb058545b96f5e", + "collateralIndex": 1, + "collateralAddress": "RJq2PxNckrnnkvTMYw2oPmzV8j8XvpzTBK", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "45.33.117.158:10226", + "registeredHeight": 178873, + "lastPaidHeight": 190683, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDRyQ62stynWti9PNwVzPtYhZzSFRwz8n1", + "votingAddress": "RN8a7FJcNd6C7GajXUiAewdRr7f5ALmAf2", + "payoutAddress": "RAzgzaCco5QmSfhgtQyuzrm3hwdst84k5m", + "pubKeyOperator": "0964e4b6545d927b9298c0c5cdb414232f8947ae282a5ac65963cd8a40821a246aae650f7939fc9efca4d76508abc25b" + }, + "confirmations": 12211, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "563bdb508cfcf85441f1362b87b4a9d52444d91866cedd6026c2e0e83f8dac11", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 6, + "collateralAddress": "RVBXHYbQ7Xz7Q97rR4ws6DvFFqsKgmTYMX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.130:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190707, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNGUTrKarjxLs2ey9dWwwyya4r9H2yKC66", + "votingAddress": "RGejxkfzJFBTepjtmfHJ3pfgojoBtoGkCM", + "payoutAddress": "RAoPnxBvef1pv9yRNCnhiPWLFQPuoma8hL", + "pubKeyOperator": "15301391feed64eaebe760566ef94f1667347d46fd8ce13d5a105a6860b6393aa1c94c89c33f3e5522f6fb97e6114c55" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a50d570e89a94454e2afad65951dba8ea9f47bdc09fe8cad1e9a03b8a2eed451", + "collateralHash": "f61087a5c603d6044af4ad5298ff66d1c535e696e5aae9dec5924921b449bba3", + "collateralIndex": 1, + "collateralAddress": "RLkXi25q32c13HKFESPpSAkGkteYEfReET", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.140.243:10226", + "registeredHeight": 176165, + "lastPaidHeight": 190758, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRWqXeLRwGjWdRRexXMK1vFmTxnnrY8mqQ", + "votingAddress": "RVimvrVtgcEA2Fdp8qWfdyLusw2CHL5nBg", + "payoutAddress": "RWsi3PnUY5AeQrvPcGjdt7JmuxY3GCxrDi", + "pubKeyOperator": "04850c8d4d745effdab89fbf7e1c37a1b6dcb7a5f79c563b3fcfc1228386ab74c0e4f1db4a8ea3c0e768845bb50b82a5", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 14873, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "61bc1bc5b22d5f33e1bcfce3476c020735a93952d4bab7621e2c82ab55080531", + "collateralHash": "92433e02ce279779d786b5cd0625726b428b9fea5d1ea2bad98706b4b418d913", + "collateralIndex": 1, + "collateralAddress": "RJwDJJuofjknsyU2uSGEH9zeyc4p16hLkS", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "162.255.84.133:10226", + "registeredHeight": 174792, + "lastPaidHeight": 190614, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHehoNMbAsB9mraixKaRdvsCF3iZBT7gfn", + "votingAddress": "RCv5AxTxx9c5BjALWHSZXMKugxn4zxaaS1", + "payoutAddress": "RNjGt32qnU8HCLBhWdWje2FCU2obfEFZ2T", + "pubKeyOperator": "84aee6ff1eb3d1694a0a700e12bf3a0181fee9f1ea53b749eaeeb08c3db730061101c8e007930d3de86e0e88fd5d8df5" + }, + "confirmations": 16205, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ee9f8fa571619c68b8744892ec140b80ac0f4927a590a06c50beb575b09c2591", + "collateralHash": "4ee8453e5fac13995b961b40f69a5041045832100c579250f6e82d60a4fbcda1", + "collateralIndex": 1, + "collateralAddress": "RFRbWvBbzUP6ZM5649FKrWs1MeQipnrnAP", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "141.95.54.155:10226", + "registeredHeight": 176749, + "lastPaidHeight": 190937, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRhd4srTVgnwNuc3YvFJwmADrwUszADTLy", + "votingAddress": "RKkAoS9ELRXYfrMH74XP96yQ5GKrNSAvUd", + "payoutAddress": "RCpVvd1aGApQ1NvPKXVAW7uLgKGjrkaN3X", + "pubKeyOperator": "94088c847a0cbcf0e4eb0c966f646579507cadc1c16115e5473a8b00b12075b8f21f5dbc953fa39c3f0c4da9b2b9852b" + }, + "confirmations": 14249, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5cd4ea08c2201b85dfab0dab95b137540e6307fa8913a9b0d357b7b1b3536611", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 10, + "collateralAddress": "RUMtbYhJDxQgZs7TiXGpxZHrq1M25FRvSq", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.154.232:10226", + "registeredHeight": 174910, + "lastPaidHeight": 190806, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHghHiFotHvZiWu24eYZUGMyNnNx3oWzCB", + "votingAddress": "RQ5Fp2wppdc4mH1m3EkVXLegYYmG27yQKM", + "payoutAddress": "RSpL7Ccqts9ADgMALEapj4KysVgmQ9Js3N", + "pubKeyOperator": "81a5c0c4a03fc0277b4d86ea9a0628985312dee40b1521fc7672f0932bf278537106d048f1e7115666fd56c1b5d14d9c" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2b443d26fc62e7285f8210ed83e514a3dc213fbb210981c158b83f0ab499dab1", + "collateralHash": "a66e13787bc9e950cf036aa84d722860be0be5fdac8245fdbd54e6e6b1d6c176", + "collateralIndex": 1, + "collateralAddress": "RNuftf8v35kSaPuQp2E3uU9GwrbqBYrux6", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.91.119.69:10226", + "registeredHeight": 186445, + "lastPaidHeight": 190670, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGeddhz1EAevAoi45qJjSTdZp5nkxmYWW2", + "votingAddress": "RDt141uLLkB4ehyvtqbPax9PGusvjn866r", + "payoutAddress": "RQjqYm36G23JhDMLheWQC3MMSzdACB77NA", + "pubKeyOperator": "0fef6e2d39671eeb4f6e696f6c0d911176f6a4b141ccba24762ddbb5fb7648577f47038e76d138e12dfbc45b380170fd" + }, + "confirmations": 4556, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7bd7a30cf505694dbae555bdd7b44b5cb14c16db87213305a8fc0049bb1caed1", + "collateralHash": "291c67728fd9ac4e255c4a683dbd25e73aeaec83431c2a15824a6471f1d4e425", + "collateralIndex": 1, + "collateralAddress": "RGSiMwCGMxD8bpVmh58wqJMp2WyyfSwT8S", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.135.202:10226", + "registeredHeight": 184840, + "lastPaidHeight": 190950, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRE5Sor3SmkPryXWBrfKwiDacLymzxuHpC", + "votingAddress": "RJhKFHbF12AtyJ8KBmLFyCAujDN7qhANsV", + "payoutAddress": "RXAGiqhV3uTaptczSWpTj2Uiryikkpqrx9", + "pubKeyOperator": "94ec39e45141b73c7aa263294a2755ba311ba64c6d12a92894ad32b34abb931bbd2e921e58e8352d4ec3d13b292d4512" + }, + "confirmations": 6157, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6706a6ee2017f0bc1f5392c5c6279050d349fb98fedca2e3ca3303c97828f731", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 8, + "collateralAddress": "RS4fHQHKMs6CXjWJbMdHnbYjemUCsHM7LG", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.140.94:10226", + "registeredHeight": 174910, + "lastPaidHeight": 190819, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWrGxr8yQAnfS4riJutMQ9NgFwP22KwRkm", + "votingAddress": "RPXR5YTahwwio6bC4zEprFR6ijXLYskwRZ", + "payoutAddress": "RDcz9sJWSHt1wRnsin8MQWiBhGwRLDR9ue", + "pubKeyOperator": "162cfd79ae0c4d328952c31334b1a2ba784e29b5e5e45e3729fe3347bb7fad7b9426bdbdb1d3ae200110127e24f93ea6" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "847dbbb0de650f485c678bf7e9371629d309112103ec7716eff56299350ed371", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 10, + "collateralAddress": "RXZYUopykNN69uzn8LRsdLiTSb3Zp3iJYe", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.133:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190715, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCzGub21HdC45DpQir7XKL8upuk1y5omLk", + "votingAddress": "RY9wHsJw7t1ZJJ6pdP4UgBrCAdvEMqYGoy", + "payoutAddress": "RYMFKKFZdeXsjizd9BeZBrW47itKJABJUs", + "pubKeyOperator": "0ccdf2921c7cd629bd1bd72777a0a55341ab317870d3f854d6796ea1967e7000e9aa34a798997e2584f9050cfd10cd8c" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d7670e75770dad573b7bcb3a507dbc15df401ae6bee2d6e9272dc70d4c5214b1", + "collateralHash": "644d203466472eb6ad2cee9b5e75e0a2e2eb6cee24192c0b8fa6ea3f0cc56a0f", + "collateralIndex": 1, + "collateralAddress": "RBjnpz2wsK85aWANtwqa7S7cm65ro9jWkf", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "62.171.143.119:10226", + "registeredHeight": 176394, + "lastPaidHeight": 190540, + "PoSePenalty": 280, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAaG9VgnTgrAsgQGbHCny8MGbDKWdQj4Ce", + "votingAddress": "RH6pCGBS9GZrPVwEpqhTk37LcG2iYhQjYr", + "payoutAddress": "RW7YP68TLTUJKjxZBuZat1wzw3buJJaXa1", + "pubKeyOperator": "9686ea8d74e8b0e80b14f432906423fca2ceeaeb0189d95420c8a01b7d21266db5503cf0c5817526fc33d4546e10edc1" + }, + "confirmations": 14603, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f307fa95419d8859dd1b21ce50540b5a6136c802addcb79ebd39dfa0bd052cb1", + "collateralHash": "d0228fa762b0daa37bfa4521f86c01fa0f5977454221b5f3500def2be0bd3ae6", + "collateralIndex": 1, + "collateralAddress": "RV1mMZmmki3huLuP5AdMXSDXanzaVRCShT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.195.117.118:10226", + "registeredHeight": 184789, + "lastPaidHeight": 190891, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHioHDFwLo6uywKPcvwZdZ2hRM2BP6HHRB", + "votingAddress": "RKooEuxgBqYxARy2AYAH9rPbupaL96dJQT", + "payoutAddress": "RDkjge9TfLRt443d65AuMX5VYo4oDZQXkL", + "pubKeyOperator": "8b31c73dbcca140edb8a38cfc1f9dfc26e02bc132c9c477162ab09d05dfc3dc69dc9387405bffc71fca49e3968008afb" + }, + "confirmations": 6214, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8f1df6af5a6fe50878c721d7b30fa30c7fdbd6b668ba8dcc296fd46c730ac8d1", + "collateralHash": "a17709c13dd5eb7f0b8b0f41edcd1e33ac4661f8b8f9446daa39afe831ee5b12", + "collateralIndex": 1, + "collateralAddress": "RVzKdc7h2TyS7oDmaUs4Vmp7tbHfVnpZSj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.72:10226", + "registeredHeight": 184053, + "lastPaidHeight": 190601, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXfWHCvb3Kv4rT31picsubx91i25zHsTUP", + "votingAddress": "RSwUifsoAUB1ebkbHMh3SuwVXZ6tNy45oo", + "payoutAddress": "RTBkKR56sJR8S1Fud54r4o6QpbzEFYdR51", + "pubKeyOperator": "0c04512ffb07b5bc6354c972fe40d30e0b6aa986b83160a38bb17667d66fae5d911dbe4052d8ca94d211f8e592880fe4" + }, + "confirmations": 6943, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8f4b62ae62d72b34b7eb59ba4c31751d410172194ab11aac04cb0941aaeb7cd1", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 7, + "collateralAddress": "RQCWvjjH8M8T8iNG19dxAZb7GKPqYbG6FF", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.48.16:10226", + "registeredHeight": 174605, + "lastPaidHeight": 190531, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9owcoFp4LtEa3f3Sm3bzaGYxonPQWMKTZ", + "votingAddress": "RCG5nXDoQPhQhE1DBcUtTFAb1hH7i3zeCK", + "payoutAddress": "RCBjfyjG9cBNuzqfr5dr4VKz2f3Fap7p6G", + "pubKeyOperator": "9733c622760bbdaca88ee6867c52e22e8ed3a5dabf2c936978bfa183fea3a9b2a04fb0326e157ab852ce377a3240beca" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c25880bb8b0086ac523ea81558304b718a0fc691eaa3299503512a7475a02551", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 2, + "collateralAddress": "RD7tTmuF8mE8kUjoWTfv4Rt4uirbfadVbU", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.55.134:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190948, + "PoSePenalty": 0, + "PoSeRevivedHeight": 188120, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUsPj48XD5Y65HEEnz1AbbSnE2KgXVJbau", + "votingAddress": "RWi9R66ExjpJqGiV2ncHSpNqg6gNZNZekA", + "payoutAddress": "RDEQemVSJXnAeMgPTXQhyijWN43DKTLX2o", + "pubKeyOperator": "9846fa1b30eb86906d85e25e2e98712e2b6b4e055bd4a57a5fcc855382b23403ba0e8de2ad31d1023a288330fb065dac" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "85e674b1cf381bade3f7586350148f314c4ba3b4c8eac327de3103f4e74bb151", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 2, + "collateralAddress": "RDgZNx9DJ6iaSJNFGPusYw6eueZHcsKYLe", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.226.103:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190856, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RS665waWjBevP5hMvC7uRPZLKCK4Lj3oHL", + "votingAddress": "RWnJTY4E4kVWNAQ2TwxUC1Gskczy5ESv4E", + "payoutAddress": "RVMDxPhtNKdUkUTCRYcjiViG45xYSM1RER", + "pubKeyOperator": "1045dc4ba4a5555afc17522f262fe755e58dd8f00b0512b3b4844cc7159c91da8550e813c10a2b1c45efc8d32ecfcb2c" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "3f9bc22d59ea0d8f579da78c7a1ccd1e3732e5bfd628294763644ed8f2417251", + "collateralHash": "8defecae8bbbd5b4eebaea787e70b037b8eae9f1b0ea5d5dc1fefb648b4d426b", + "collateralIndex": 1, + "collateralAddress": "RJKPRSYH7w7Auv5Gzo9SRkJMKqP13UMDKj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.146.154:10226", + "registeredHeight": 179730, + "lastPaidHeight": 190697, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNvM2B61QxfAEtwr25xRMpHczC7Kq4qb7F", + "votingAddress": "RCcdM9DtGKh2AxbRp6xSDAqfh1Csooxyse", + "payoutAddress": "RNdeujySc1XWS6f6HHnvTp8bfmx6AxF7y9", + "pubKeyOperator": "8198d450459fc26acd0d704fc39819e46eeebfa30815fd08b15ad2ded89cc46fea4d29f075ba0f0d0759ae853c12b3d4" + }, + "confirmations": 11268, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "85547a354da81a39725eace630fbe10da880a9bbeabb57e2c55d5dcfea980391", + "collateralHash": "83e910df1bfe62995afde9720e4c56d344d0e3fafe764fd9ff79a5121b8a05ee", + "collateralIndex": 1, + "collateralAddress": "RJuxyb4ZPPQx43pA1gDA1S9q3V61Yaofxg", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.12:10226", + "registeredHeight": 188117, + "lastPaidHeight": 190944, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSTjrTMM9qsUtMi1Myuo3dLGM8XwB1KeHk", + "votingAddress": "R9Yn15JkUjPBZV3Avsw5RHtFdB1pVGGkJw", + "payoutAddress": "RDf4MVaFDDSxukXo6wsxKFz8k19HYygnTR", + "pubKeyOperator": "091a32083d52f4e3c73772507381af18fef2ba5331605da969e331a69f21ea2714e1efd50d5519e2e9da491772af6d15" + }, + "confirmations": 2880, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c91a0cc1e8426225bf7c848abe781ee9da28883780ab05f246770bb55d223f91", + "collateralHash": "b137fdab92bfb2c80e371e312cf2b096166563ea435594fcca29387817efb611", + "collateralIndex": 1, + "collateralAddress": "RLfCspJdWSj2CfescPtoxvhV84WjdGVdHE", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "43.231.127.199:10226", + "registeredHeight": 183538, + "lastPaidHeight": 190549, + "PoSePenalty": 115, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RL1X7xb4gsNDYtmvycFgfwbL5BQs8TH79K", + "votingAddress": "RCWkydE1vBtTjjUnFTmWD1SGse9YVRezAn", + "payoutAddress": "RMEhrWBwuBMWVD1s9tjp4Vj2Pd1f2gEkkD", + "pubKeyOperator": "040c98e501ba4ae5e575290e050392edd97e733a7b77a9f6d107c58a982def646cfd17b7e2800916e5a7881603d0cdfe" + }, + "confirmations": 7478, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4c19928ef6bfa50930027f4d31b8db89c2c93e3dd37f432b21a61f44dcfcf791", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 5, + "collateralAddress": "RRdJ8WsqpsQh1sf1HYa4usPURa2CvRjjtk", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.151:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190717, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJyN3cYhYQUzuwXAU3ehrk5An67FpLkReb", + "votingAddress": "RMSjRxdk1MUyTcnTEoCZ8Q3X1zigenR3Hq", + "payoutAddress": "RMBGqogBjbR1UYT5YctaU2h4xUcyT3gzbF", + "pubKeyOperator": "83bb6893884db9e0df03856a27d2711f6d5ef575aafc8cd1a59d52bea919c5ec6575d452c488914bcbc80dbc6ef613ad" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "58493f12b6d3ec1b4c0e3ec8039b38d76675fca04bc6f05c30d9e2fc29558812", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 1, + "collateralAddress": "RBgBpGEUDyNMytWBt6umgF5yYE1jdBg2Z2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.85:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190709, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUmhivs4AdmEuFSbGQVtopbJdhogxgGaV1", + "votingAddress": "RG4YqBg1eYGwZfwpsYQY5HLgD6CTR2napw", + "payoutAddress": "RFKcYSQb8nBJSTkjrNWV9XnQV5YpfksgnE", + "pubKeyOperator": "93341d07661d3e1ee485e0965976627a0d029e12271eb4b94df8923990f3e632cfba989d00dcc75ee9dd0fa731529e0a" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "616727d9a174515d334cade975ec1199ad6f3694fa17c56389b8c6ef81429452", + "collateralHash": "30c4c5b89c682ff98de1e916b4701b5b5d4f94ad203d2110b0f20ef4b43dc00b", + "collateralIndex": 1, + "collateralAddress": "RFgsVmausPWKJuYcVTNGDi5xuvR3X2WNBG", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.146.67:10226", + "registeredHeight": 176159, + "lastPaidHeight": 190734, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKjgtwE3f71kcXCygBXPqVAAQzV6qn8qEz", + "votingAddress": "REqyYiobYPqmUqcci4PUk8HFzwmd26Zv2w", + "payoutAddress": "RDnTJoQP5aTsuPrFH5FrJmgQHESzvS4Atw", + "pubKeyOperator": "821f85a8635428f1bc802f74175cbea662ede33c08971d2beadb3b85182f8459ebd629f1421035a5170ad269ce8bc144" + }, + "confirmations": 14844, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5f0f088fa9d61ee748d09675c72bb81094f8eed664b4c03474eb0140ecf9e4d2", + "collateralHash": "f48f37fbcf357aac376ddbfabea7d8f7f53f2e7f871297e6888882552ff8f2e3", + "collateralIndex": 1, + "collateralAddress": "RHcLW2qQnmXst9yzcbciQP4So8pPrgKZCf", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.158.187.74:10226", + "registeredHeight": 187125, + "lastPaidHeight": 190887, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSVtjgZxeJJg4dCqA7PsjDUEZiZuZu17c5", + "votingAddress": "RJEtAW7BLxftpCZgCkSZYc3Ear1T3UcRZM", + "payoutAddress": "RHyqvtLFq36ikK48Uj3zK39dEu4TXciW5e", + "pubKeyOperator": "1868152f7d4ef20d680b93fe54b9afeb120cf2116c0f3b4b612cc8b19ba200e965aafd3d41d0a93942053a0469d24db8" + }, + "confirmations": 3874, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "60145e493deb2a4ab062f574b850e7c86c7ec55326bf4b996cc6f65489726d72", + "collateralHash": "45ca2f9cc33b376a7bdbe6f8e42e482860a5070b79cd41f9660f55c23067f4c6", + "collateralIndex": 1, + "collateralAddress": "RBM9vpUTPKoqZ4i28TgRCtq1gg84HNxbFj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "185.213.25.214:10226", + "registeredHeight": 187401, + "lastPaidHeight": 190684, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRqhFtNg52AtNtGtQ12hVxeFjPgkH3DVwq", + "votingAddress": "RHuUCHWrSZm4EaefG1TsYueDHzQLMdPzAE", + "payoutAddress": "RJ8n16Vfm4gedpGxL9KBLVbPxp4VaEQ7yX", + "pubKeyOperator": "82636d37a71c13086ea967993e5420115f4eb0a49d55835ff4a0fbdf7c9128d26422690e544b8393d82096c4f7fe7970" + }, + "confirmations": 3635, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b9ed964f93c179e093e3eaab89abad9f06cba6d3ec3bd2e41efea09f0794bdd2", + "collateralHash": "d80027424ea456e367b9899f1cd617b7dc74facd38f5ffdd3113098bc2f84f0d", + "collateralIndex": 1, + "collateralAddress": "RVnVhW4maWgrUhrvbuRAsT2mFLV22cam4i", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.56.98:10226", + "registeredHeight": 176159, + "lastPaidHeight": 190750, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RU1cFxVdYVs5ZGbvypHy1czPoym3mNZ2Zn", + "votingAddress": "RGYRSFXnMnZpxtXVB9ikFY2ec1ukjhUxjK", + "payoutAddress": "RDnTJoQP5aTsuPrFH5FrJmgQHESzvS4Atw", + "pubKeyOperator": "8268c83d1347fc83952ddfde00ae910ab3198747121182627ecfad4deef433bf1c11261faf4295fab750973a16f53a19" + }, + "confirmations": 14844, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2133a86c2ff1e2184fb6e3f380f13eeede67165f0fbfd384c7a8d4ec44f36712", + "collateralHash": "1915afcc0cd9efa6e05f7c5af8790a0bf0fc31673c07b4be99af31b2a7e513ee", + "collateralIndex": 2, + "collateralAddress": "RYWMUPqgVshLQYwggu2t7kZziJoYaADQL3", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.134.59:10226", + "registeredHeight": 182909, + "lastPaidHeight": 190840, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKUXbNZeN3fogE9SH2ZMkEzkCgX9MSLNMX", + "votingAddress": "RJzkFk7naHnMCP9cjuX2WYUQurzoix69Lu", + "payoutAddress": "RLrQ1PmMm2NJCTyLhjG6QX9sBwJGaEEANr", + "pubKeyOperator": "96e2d98f2063440089cc7f8bf3dff18989faa529d75b84901554a741385198567aafedbf24eed973e0711729771914ce" + }, + "confirmations": 8094, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dbb46d5a8b9489f48f0c50806e89821206d5b8ab7fbab6f2f4dd74444892db32", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 7, + "collateralAddress": "RNpcRSbD4d8HY8nESsVQnAwFntPpX1mDXW", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.122.213:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190854, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWZ8Dup2hW2oy9zBdEpZYFoB77KLGhuXbT", + "votingAddress": "RQ4AP3a5NKH4nuTrEJ7hvJKsz5sgW7UJDp", + "payoutAddress": "RCieQH1oWSRnR7BpVNvetjsczKpp135q9H", + "pubKeyOperator": "82ee92a7ed2d140ea1503760f0163911b55d302325c9aa6349b335c0d61b586fc8e20018c3234c77175b3227e5b3547d" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ab032298544b6ac1b4e79d6fbbe319c366cada76ad8d5a5611120c994fb15372", + "collateralHash": "213117cf4fba1cc0f1247be31fa01880aa31f44d91442359f23e4915752502c9", + "collateralIndex": 1, + "collateralAddress": "RLb9PCzRcy2HjqUr8EsXJdujps66DBYLNX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "141.95.52.225:10226", + "registeredHeight": 174763, + "lastPaidHeight": 190597, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMt9uFc6TPi39VAFbWacxvyQxi2PnFu9ZY", + "votingAddress": "RMt9uFc6TPi39VAFbWacxvyQxi2PnFu9ZY", + "payoutAddress": "RN8VPsaKmegi133Z2Yn5DqL6jmH9B2Q5VP", + "pubKeyOperator": "008844abfb116359f6afc2b1653f5e05276113fa34b5428bf347a669f1e4029f2afcec28dfb27eda95bf24ab1ac196c6" + }, + "confirmations": 16235, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d9b5a89ffc2d57144e83fe00bd9c273eee89023aed8954fdd6767ef3c10c0072", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 3, + "collateralAddress": "RDwQCRqb16L4n9HfSCUTuxaEMLV1khr2pd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.49.125:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190857, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RP4fLNvYufEXNZ7b1F9VvyaABwG3MB5J1t", + "votingAddress": "RQ4R3p4oS7BgVV58oZmY27tSdQ2dPsy9Ek", + "payoutAddress": "RU9r8Y5GqQsRjCPph6tz4YXh6mxnZL98Fc", + "pubKeyOperator": "993530836e593301e4591be5349fd2adc5637d7c2871ecb68359dc3630389bd4bbeea37d28b34dae3bdbaa50e74f159d" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9b9e678432d5f40ec905c37100eb96a2cdad4ea4cb0e603b9bb02099ca1c8872", + "collateralHash": "5ce64b5f3680217292caf2d7a3dc8cba9d38cd45c9cfc062bac54a4a486c5474", + "collateralIndex": 1, + "collateralAddress": "RHSzL7yveKZ5oakKyFixYDEg6uwAduWNiE", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "54.234.65.180:10226", + "registeredHeight": 175878, + "lastPaidHeight": 190923, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWFetoMxkmXfXNa1gN4Tbs73TGssT37B33", + "votingAddress": "RSkP8pa94MrgsHEioUg3qkGDBQUKYjmRyo", + "payoutAddress": "RRad3sfsMPnjJG1VjgJpBJvFygRzcJPQKA", + "pubKeyOperator": "8ffb7aeb7aafa6cd4bcdd29414ef56aa5fe984afa3984dd4f2d9c2b00472e90ae2369285075d211503cd43e9be4992a8" + }, + "confirmations": 15118, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "89c3fda13001e6cf0982005826cc0597516abbbd88e06cff589f79d61d1a1813", + "collateralHash": "252ac960a549346226ee6fb90e3f56d6e69f4e3c3bcfa311f2f8548c0ddd0b3c", + "collateralIndex": 1, + "collateralAddress": "RXi79PktLwqwc6D9yXZ3KxjsPND4nTZKh5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "178.62.205.194:10226", + "registeredHeight": 175918, + "lastPaidHeight": 190963, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REVBocqrkvuwSeu1pJKj83gmeuourptPrQ", + "votingAddress": "RDwKp3asVoj7AWXDf81ungRaobU9SZNGem", + "payoutAddress": "RRYdmbaP31SVD4M7q7oCkFaPk5GyGvLGq5", + "pubKeyOperator": "160f073729f99f605d5c894a75bdf0919808ab022b5944d0a01ac4cf34ceb69825f9dd86ebd6fd1dcf7f548b64191d03" + }, + "confirmations": 15079, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "384d9f9bb9fbd8b50511179df12185dc11975ec1df7ae014ff9d207bea0f5c73", + "collateralHash": "5b8595047daa578201ae6f8d313592800f35be2d61157cdd188c23ce5dfd19ed", + "collateralIndex": 0, + "collateralAddress": "RMwTnr3BEkq82jVAhAwyLJpWf5AJRt3UKB", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "162.55.32.200:10226", + "registeredHeight": 176122, + "lastPaidHeight": 190665, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9TEqGRrSqWJgjFfxQCRHHTYQ4xwW38qJm", + "votingAddress": "RS4kjDo2jmQnkYoqShJdH8NXUqfDttPwxD", + "payoutAddress": "RAbDdxE5oCFJxfzCZucneqifstmYq1VUhP", + "pubKeyOperator": "895bfab01148d16df7af9c6505a644528082e74d537c9f97f39e434e2ee12837a903272a9a3331d6233c6ce2fd53d61e" + }, + "confirmations": 14883, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "fb5302c9dab428b1b16a658533596808ec0f3b784743cc804d2c1fe3fb840c93", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 6, + "collateralAddress": "RJ8fdsCCE3eDHy3hzJVj4tVYcSjJdB64H8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.122.212:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190859, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVp2NipCq1uXY9PCcgGcT2RGPDafTw5AYM", + "votingAddress": "RLxWZoRHDFebUxQe9xWecddjEL3iLYX3jh", + "payoutAddress": "RSCtH8jauyRT5vbSiGBL1VNNuKDR2SFb5H", + "pubKeyOperator": "098d3e968436e08eb6973810d26fb7fbed9fbf1a4b343ff1d1d645817d83691b1ecaeac243a1168647475d455ce56b2e" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dbe0d71ff59e51bd4305336d083e7ab1310563adbc1c284d0ff6f5cdfb1150f3", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 1, + "collateralAddress": "R9c5VdsUNnY9G6264t3MLx1d6PV2y5ViVz", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.49.175:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190914, + "PoSePenalty": 0, + "PoSeRevivedHeight": 181643, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9nTwqNWrV8fFtkb7hjL8abcnnLe1m7ohK", + "votingAddress": "RKEtad9NpTBGeGRqvuiZVstyVMKdeTDzeS", + "payoutAddress": "RCCBbkKdiyEAwbV7UtcyCTt1DChZiyyDst", + "pubKeyOperator": "8d3f89e3517a9be4b9a63ecb3df5f7806be14b74ee2f0759d50edb9e151fda3217ad68f0e7f9a55eee3a563ee708f00f" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2a2cf3cbfef8159991362ac6c196ec1c2de6ea1a684401736c4db07cbc765913", + "collateralHash": "96af7444bec17b1ca6e3ee80c4d554f7159e90bd56e481cad6349fc1c7f97463", + "collateralIndex": 1, + "collateralAddress": "RVpdJpLK1zJHDBLGydGbBfV5cJwzS1PMun", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.91.106.106:10226", + "registeredHeight": 174671, + "lastPaidHeight": 190568, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RT2J7Tu8jH8Cvjvtnw2yzG94FJ7Fk9UqQG", + "votingAddress": "RNnFFzSv1uNL4vXZS6KbDZN2ktahTQ767n", + "payoutAddress": "RBiT76mXkji1WsraeCDefEaTGPMeEDCmpq", + "pubKeyOperator": "0ec1361d38cd73c547d4b72453941d475f3e9399493e3dc2357102c437cc2fdfa9dafec8ef5f184b907e35ae37e0fc5f" + }, + "confirmations": 16328, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4dbe7efafe8783a1325c8914063185b47a76a1f9ff81cf58d1e0568721636933", + "collateralHash": "d338fb690a886cf4c0548ce57bdf278cf0d5e449cff233ac431bebaa330e7a28", + "collateralIndex": 1, + "collateralAddress": "RMtnWssGMMu5XhyBxeavWBUBMuZATgNV83", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "155.138.235.241:10226", + "registeredHeight": 176634, + "lastPaidHeight": 190791, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRwLoTbLQiDhcw1t8bjeTLZSdEZBiAdYzx", + "votingAddress": "RQhoZfP3Fcri6Giyuud5gNYY3CHbrX72Ty", + "payoutAddress": "RLzB3AmnzSgZQPJPuVGjxzSg6VRtyDsZ8s", + "pubKeyOperator": "00f8d692c220a8d31b30428eaf67388a636b649c233f01c132cde0afb8a62ef7b655a25c1c53a73697cd445424f96398" + }, + "confirmations": 14379, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ad6285148dbee6cb480d2e85f277086d3faa5c70ee6c88f780e31e437b072db3", + "collateralHash": "74cd07eb72723815d8f0bbad631895aea7b1d33fe2e6e43a6d21443d63775599", + "collateralIndex": 1, + "collateralAddress": "R9Wi2P8KggtjB4ALHNE3QpRdYhtkipU9mu", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.103:10226", + "registeredHeight": 174554, + "lastPaidHeight": 190930, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLYFsiSsBS8Zs1tbGCYTbaySQ3sPpaC5Xd", + "votingAddress": "RGNZSi3yMgG3rqw5fsDoKLTmjbbyQzyZNY", + "payoutAddress": "RTcP3aM67zhkFcmzjSwgcMNwj2e3KvuHVD", + "pubKeyOperator": "805a861f50f941ac578834e622c156ea727039d347fb20c0981acc140bdc97eb0523784e99e8d7834e76694a2d756eeb" + }, + "confirmations": 16442, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7ad0142f9fd002ca298167017faa02d33172db70d01983be1f5cdf64fc80e2d3", + "collateralHash": "376376af426e987a8434171ee5e19cd51ea2400a7327c957d9ccb2afa1541f37", + "collateralIndex": 6, + "collateralAddress": "RQFNczJjUBe5jHY16xk4Y1siNpe4vxRqUe", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.133.238:10226", + "registeredHeight": 174926, + "lastPaidHeight": 190852, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUzMpNmKvr2rrro7pu2aWMfi1uvZ9C6Hwm", + "votingAddress": "RMq7vbs8Qgd2Q5QKjzC4aY8cCvMvWU7sk1", + "payoutAddress": "RGJxvUK4i1csGoNiyDopfGYYLRPCWVGAwS", + "pubKeyOperator": "967d7db93838b1575c245f5752036e90f2c2d57c014542f1d261ead797bb9c57307d3bf8173e1cb3091d55a933604c45" + }, + "confirmations": 16070, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9349c983983ee1a473e9a4632c9b2180bddbc7ac02c9afa0f1ff7487d9ece6f3", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 4, + "collateralAddress": "RNJ5deth8vzyCRDzZ72AXGmEfNMmJNnMrr", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.238.146:10226", + "registeredHeight": 174611, + "lastPaidHeight": 190544, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDrXAQtLmYV1uGudD258YDLzPxyzFkAc6t", + "votingAddress": "RBUAcAWSnQyUkr5neSt1YnPraUNNJUnif5", + "payoutAddress": "RQ24NoYPY372HwZwx1XW8spFawkMnLWtaU", + "pubKeyOperator": "85fd15db20d76ac06792294bcea1e92ce23c2553b81decb54090a4b369eec34259709c6208e94adc28ee50ef6d674862" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ee20486ec36d9ab2320262d669fa766b3f37af1572fa889efdf2860e00b41433", + "collateralHash": "1d48c73c78047b838b4e39b8c4e551bfb5340777b9841f080e8bd86192d7e4b5", + "collateralIndex": 1, + "collateralAddress": "RXsDwKtteyA1iT564ZDkBkmgGJA8yhcqz7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.216.193.252:10226", + "registeredHeight": 176578, + "lastPaidHeight": 190694, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGaFk4SctFLS5fP8gWtQpGTMvU85FXFyEa", + "votingAddress": "R9sbdJGV3W6DQeabNtjfnr69x1wHQ7UfHU", + "payoutAddress": "RJPpbYd7He6mJtJEtMCkouygr7kLmcYd6b", + "pubKeyOperator": "8ff725ef4ec8feacc7dd7e8e888c0d8c103955606ef3a408ed30898a713c9f715c2f3a8cde058e762ea1aa89e89259ff" + }, + "confirmations": 14423, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f76187c9fc338c0e0a22b81d549323332d51fb23a4d0122c3f158aa40ff27c33", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 4, + "collateralAddress": "RMm8fyvvqdBH3mrLZQ52Mk9Z4exUmFWpgW", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.56.170:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190874, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKtuTiq5YArBWgm568N9TPLTnZCA5eJrja", + "votingAddress": "RFfRiNiyEZqjnukbcio8iaQSaz3awGUZod", + "payoutAddress": "RWv1eR8Pop9cwZfJjoHL81yaVKt313jE4m", + "pubKeyOperator": "8192930abecc173222af00d84205acd6d0b76de7972fd2ed15a3e7f632aff2459446f7267f879d5c7faf098b7e153418" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ad89a1b4aa41f43655786d0fced6fe75ed13a58ec539e7a8e71e5352b483be13", + "collateralHash": "0c31c455b8d0d9c34644678bd5912f6aa3c74b9574c33ae1f414f7b8c6c6b284", + "collateralIndex": 1, + "collateralAddress": "REfUZA4yPYaS2a2TMMS9kDtZd5ku2oSqiG", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "192.99.55.49:10226", + "registeredHeight": 176944, + "lastPaidHeight": 190718, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCuJfbMketBEbrnwEBUixCTJU31YCVUpc4", + "votingAddress": "RXD3xZdGfhpvY4vMU3omEocb6C7qW8BXwA", + "payoutAddress": "R9fdvNEcMhLCBzuGDcvoP9yrGTfoQ76eRm", + "pubKeyOperator": "00ca1a86be8391071e4d96142919551eacfd1554c03767a1d02deb90b635a595da298d288373727d3f7558446a3579b6" + }, + "confirmations": 14053, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "eff5af8147f7477c5fbcf2047dcfd115757b18ff86837cf2b3aa0d9dffba82b3", + "collateralHash": "3fb422e72e349127a1e4206e7353bb5d33bcee566b2baab78019220bbd21813f", + "collateralIndex": 1, + "collateralAddress": "RLCHdRnsi63eQjtAHvDFR9CAx2wJ77sM8V", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.1.144.37:10226", + "registeredHeight": 175949, + "lastPaidHeight": 190524, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMXweLFxk29NBQWYZ3ejHXpm5RAkFuSkbv", + "votingAddress": "RECtncAfaniz95pTiSGiKCN8J9Y2RZFbxF", + "payoutAddress": "RDjsL3MFkhkWw81XSGX5TPZDdUHRyKnCZM", + "pubKeyOperator": "0694f89e752a5358385ec3c78557bbafc11a58965c5392d1004a10a769162f6c18d4d643aca901bf2d7ddf02c16b4163" + }, + "confirmations": 15052, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9b322e15b3b95fd7a2fad918666e480031f8ca3a81e89d3afe5cafb47536a2b3", + "collateralHash": "22642e24e1a7ab39605eff382038e40b598b3b4f3712f3d1e3eb011d22efee43", + "collateralIndex": 1, + "collateralAddress": "RAzn6Dp95phsVmUMPjdFnoJtdjEVVX6DpZ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.91.186.33:10226", + "registeredHeight": 176723, + "lastPaidHeight": 190907, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBxmhHgxcATMDrw8b4SnmkxFDEgjFFGT8F", + "votingAddress": "RAiAmKC6H4dn5GjfHD9qiHLbU4nxBS4vH2", + "payoutAddress": "REdiNtnymvXCVqKqdt6GcuwprJwXWE3MrJ", + "pubKeyOperator": "0253c29fd7c662949d6eba7cf9bcca44e53763b64e6099fba179664652157d434863d351180389b07ed647f63c9612c4" + }, + "confirmations": 14273, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f55b860732f0571548721a93de79c305e4ac8aad398590ef04ad204b2447b6b3", + "collateralHash": "996c3cc30b276ee9794cd4c862debc38e908eca3b768566dc2b25e3a4112d1e2", + "collateralIndex": 1, + "collateralAddress": "RRanQEi2d6unSqUJu2C8bLM7856ZuvPwxp", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.241.219:10226", + "registeredHeight": 176761, + "lastPaidHeight": 187664, + "PoSePenalty": 0, + "PoSeRevivedHeight": 190667, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTLiiaPFToon7EXXrZTrBMiP8Qw6QegMU3", + "votingAddress": "RJvz7WgGYnCjuqvFC8sAASxcAtQrb8vnPR", + "payoutAddress": "RNABuxXVDy1Xkkew2dyk2zPm1N4uFd6tJx", + "pubKeyOperator": "970c8954a5270540749ee96c5d74d66f9269578c0a6d13d8b7fa4899410afded7fc5f7cbf38b0a449797e1e354ef0a63" + }, + "confirmations": 14268, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "30e0bcaa999c4ff3a9f350129c6d678a5aa7f9c27ba0da6692f081b22103feb3", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 4, + "collateralAddress": "RGPKUdY5Ja9YzvfQc9nRrHVBpLMu2WfwPP", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.140.71:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190632, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCJ3vded1ZHyMyCA1hWbm6i7TDi3YHnVcD", + "votingAddress": "RUmBTvrSMFgU5RBkjjuZ9ojURzrYxFHxUS", + "payoutAddress": "RKyv1yUEatfsscN4Z3SsX2rSCt3pPf94DE", + "pubKeyOperator": "977ab7fdc41030c5a00314982d632dcdb026d535dec4763f2bc03d3d0c15534f913c69e1cc5e6180184072114e32e000" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1686c30cbebbe3fe34b4e66254ed2349fc6855b7e032b8f068cf126897f3d753", + "collateralHash": "c8044a8b3112a0106c85768151d9ea95b56a279ddb8c3d0254b645d081455fb8", + "collateralIndex": 1, + "collateralAddress": "RBayHciuPkyjisCGDGoFLDNf894bCnx61d", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.146.98:10226", + "registeredHeight": 178298, + "lastPaidHeight": 190965, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMUQip8CN7Jmqj4Tii468eEUiwxUJsMosm", + "votingAddress": "RBH2YhxkaGk4GcHDmauJGAJ8mMYvno5Weg", + "payoutAddress": "RTxnoPMSxbRY5axBu2Q6anKXUSbV9N7zyP", + "pubKeyOperator": "099d5c1cf5780590ff8b320055bc950a99c2bb84f2bdc18fdb3a165659033c747dd0bcd154a743ec14641d5890201728" + }, + "confirmations": 12698, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "896920caf0bbf9600cd662bc41159f698182bca6952142fe00a653108fbd5b53", + "collateralHash": "a402c0a319cb14b6096e3467c4302b02130299a7a12b0274171488837883b568", + "collateralIndex": 1, + "collateralAddress": "RRFSSQLFdWWYq8RAfwC1yuY83BxZqYHieg", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.1:10226", + "registeredHeight": 185820, + "lastPaidHeight": 190529, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRJrut9bX3SxZvxPP5sUfdiPUnKB5wca2s", + "votingAddress": "RVDhQYCNS8HZuJbyLTre3iwPSRnkWkcLY6", + "payoutAddress": "RXaUa8bmJXLMM2DaWaDdyRbheLPravQk4z", + "pubKeyOperator": "0ca8ded164560bc7db3b43b316909c12cd36b1b3b19f0a33036a85c61de3143f6229ead79b0d1ef586c316acc254ddcb" + }, + "confirmations": 5176, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1e10c09fd34342d074f955c32dd450aedea76b684450d9f80ee392eb881a2793", + "collateralHash": "f2a691ed16ada1f152f8acdb69c73d2bb7acab82e5109f11b76ea68098a21558", + "collateralIndex": 1, + "collateralAddress": "RJHaLqjd8RkWym4vd8zR7eKj8wyAkBFGC8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.55.136:10226", + "registeredHeight": 181578, + "lastPaidHeight": 190842, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHePG6ptY5q3guHkbwDJqYoaXyh9rUMQyp", + "votingAddress": "RU4rMmm9cGAxaRfSboRsVkAvqQPN7VgY4T", + "payoutAddress": "RJyaCLeiE5PDLM2rZjvR1tZZwmNJWpxwVD", + "pubKeyOperator": "08cc5bb245baf740e194d0f903c1d53839275a976e5ff498a7d835f22c8fc12040268d39a2d047e8d94592f829536fa3" + }, + "confirmations": 9418, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2a97ee9272567a7288ed48b3c4e7d18b85ec0915c7aef43f7521469469f14b93", + "collateralHash": "8abb28943dfa288d263a879736bb7ac2f7582a3e710c33845b301555bda1fe84", + "collateralIndex": 1, + "collateralAddress": "RYcZByhrghTqzWNWi2udUcDbwyUZP6yxdM", + "collateralAmount": 1500000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.176.90:10226", + "registeredHeight": 174395, + "lastPaidHeight": 190730, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQV2dLqLmh6rb5bWKxfWc32zCnWXZTdoJH", + "votingAddress": "RBbAP7zVhY1spHFttXgXfdJhm5nBACqKFy", + "payoutAddress": "RMMnvjTh3TmkNQypZHrcwaN3t69zRfg2i5", + "pubKeyOperator": "834eb33127625aa3af3202e648091aa0a5711c2b62158c182c173070a6b64a6fa614e6910fb511fc3be106f5d2b227d3" + }, + "confirmations": 16619, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "bf3b951122d0ac8028bc5e415460853e5dae5babf8a57182476be61e3d467393", + "collateralHash": "3f5a05b4f9aea1ffdd988511324b021b0051e4d8368045aeebdd64e0fd245875", + "collateralIndex": 1, + "collateralAddress": "RXdZqqFpNXepa5L5uybLJQytc2fesx1cya", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.134.246:10226", + "registeredHeight": 183694, + "lastPaidHeight": 190703, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPCL8xQnDKFiinmrCKnvtKpsp4vKCm7KbH", + "votingAddress": "RQDxWXuRiLCvjBZJTqQZcbGRSx6rhcC12K", + "payoutAddress": "REe3WWSrxnryWiqc64NT4FjT1jUP9coSLb", + "pubKeyOperator": "16ccd17b5192ac068ff4acb5544dc3ad14a1957e243dc528551f9bb90bd451b746e7f958aa53289f794f3cc045b0c574" + }, + "confirmations": 7313, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1f4756b5163f68bf4a4793c55a0fa8f2b241c969e0240552c41f67f335be0494", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 9, + "collateralAddress": "RWzoRWcsegNdfrUJPDqQSncF5Co4qZj6LN", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.237.233:10226", + "registeredHeight": 174611, + "lastPaidHeight": 190928, + "PoSePenalty": 0, + "PoSeRevivedHeight": 189039, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRA48BNUCD95ysGqEhQ5DSQGLXg2cKPeaZ", + "votingAddress": "RRdYP6jv9v9uRUCwwqo4JdD434s3EC3ge1", + "payoutAddress": "RFBvR4NDxBrKaWGeT9Jp8aZQxi6SbP57Ms", + "pubKeyOperator": "03ddea46770ca577afa5823e19ff827d6dc33722cccfe035f677512288e5f6bf03ae06d48207a3b5005a8512fa0ab890" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6a97ea91552bdc6655d1fd5e12811c915713c23b13b811f773d11065ee6b94b4", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 9, + "collateralAddress": "RXYsXX4yogfUhuE2oJoNf6H88K8yBVXfW3", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.155.162:10226", + "registeredHeight": 174965, + "lastPaidHeight": 190916, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAg2FSwXVu5yY6HKJeabKbjXubsmkouF2B", + "votingAddress": "RAzc3bUyjn2bx9pjdhj1YwyZzWymuVDVUN", + "payoutAddress": "RHztWoWuXk7MuyLC1p4UAPCW5egVnKkBf3", + "pubKeyOperator": "0c3b0264db87adcffa03a51e43bd10ca33f5f8afced4be68cf478851497ad4715740209db70d720cc74e480bb013a4da" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c0a397e6304cc2d72b700e2e60d48c29e69212bc6da9801d8ba03a6efffc4cf4", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 3, + "collateralAddress": "RNUUP96zdSTLDCYtLqotV5JnTAawwfBrix", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.140.220:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190782, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXhfmPzdsqveKrLMZV2Gx4GzvjypYXJpeR", + "votingAddress": "RR9wYjEUKPAdEEJTLbpqmg5RZoLcUWJQmm", + "payoutAddress": "RBDwdDepCLxRwH3tftVWope9oJ3yTVjksW", + "pubKeyOperator": "163ab2efcdb0ad1c8001be0673c7f9d1572fc8e967e70969f06bab684ceabf2f9fbf5179fec536fcc8923c23ba5be5d2" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ddc263439992ee265ecfdd72e12ebe097a7b7777d10ac63c38dd846edf6a7934", + "collateralHash": "68115368cd8f81dce5e4a0131d8f93c18fa8f5ab32a545cae256f41320bfb10f", + "collateralIndex": 1, + "collateralAddress": "RBr8k5kPRfwcvLTXSt1zU1CavfnfKhwVu8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.100.215.185:10226", + "registeredHeight": 182367, + "lastPaidHeight": 190733, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCb3wdoJftHA9aToeK4ZGDimKs2xHxzGGE", + "votingAddress": "RSweekzSv34X2Td7bKK3ow3zxDg74FeYVN", + "payoutAddress": "RK45EzqVCYVWMbje6wmGp6qg6mFiXSVPUM", + "pubKeyOperator": "97e35413b0bcd96be46944e37e545fc78dcfba26310c070ecd8111b8c87b23a8d217ea120e9d7e8e5d875e9c3ee67987" + }, + "confirmations": 8632, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ac917bc1da6dcd4cef444814ad0c50f62b58534052f0e235aa1a275345ca8294", + "collateralHash": "178a10f713587fa1719a60fe79ee9ae75f7a47d0b7af03dbcbd71a95043ede70", + "collateralIndex": 1, + "collateralAddress": "RJcRRRPdjtRbiD1rw3QxkUy44t3R5rUi2M", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "172.105.174.58:10226", + "registeredHeight": 188016, + "lastPaidHeight": 190846, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMyuFiDAhu8pDShPas6PfXN4d8muLqDZBG", + "votingAddress": "RUDFvneto4XoUQYYTsAoiZPxNUE8zJNAEN", + "payoutAddress": "RUT5tiP3gakx8Gh2bDJoWi1LAhVzUiC7Q1", + "pubKeyOperator": "0ebfba884b70a24d3e6937affd361e63e5e0ff79d5b2f1f4b5d5b015efbd2776ed45f80ae30438afed4d3b3b58e4d525" + }, + "confirmations": 2998, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8a3d6d886b70a47e202fe48522ed5b4e882c88e11f1ee2b01743f6428e0246f4", + "collateralHash": "27c3bbc93356ced84684bfbd63df5ee188b64f715765de55c19b4c07b64df603", + "collateralIndex": 1, + "collateralAddress": "REjtbLFveaB4uj7HjKX7QoLpNuHRq8Mw73", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "147.189.169.15:10226", + "registeredHeight": 176661, + "lastPaidHeight": 190831, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKrVZzz5Ap9ckhJXKignYw9XrrpomJYDFU", + "votingAddress": "RKWR1Po5KqfkAj7BfCST48AbJhWtQ3gvDt", + "payoutAddress": "RWVEL6g4ooQVWLwnuwsZ53TJCci1coX8Bs", + "pubKeyOperator": "09a727f69d3fb4e60d9835de2347c297538b7bf42e16a666b8e43e40f2ac33b1e61c603c4d2d29e8c3ddee86364a279b" + }, + "confirmations": 14345, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "318b5ba0ae1569e1efb57e39a2baa2e3d33338d90c9f658a360cdb6e52c78bb4", + "collateralHash": "e87fb5c62e13b96c77fd7de9b82c9022f5394da6bf7720d591135d8cab3c31c5", + "collateralIndex": 1, + "collateralAddress": "RBqy3YPSSatvmUEMPPwc8EZeL9g32HZYLx", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "135.181.196.128:10226", + "registeredHeight": 177437, + "lastPaidHeight": 187999, + "PoSePenalty": 0, + "PoSeRevivedHeight": 190942, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPc3WSVxFKdq6REPPkcn7tGtXtduT5s5MS", + "votingAddress": "RVaXBNcGXZ13ZjeQ1zhymXnYuWV6sG74Kh", + "payoutAddress": "RDfTwhfZrfBeENLRT8ZAKgr9Ahmpv8nYmq", + "pubKeyOperator": "99b22028f5b943574dfa93d1b07afe7b6b200cef845ab210c5eee95d11142fe30d058d9c19026c52aed5bbd11bc1ebd5" + }, + "confirmations": 13562, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "57325e1a0d6a95808ea4f9f21c8e0be02f99e11c8535e5886fb494ffd5d11434", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 8, + "collateralAddress": "RW8rqTAEXeC2Tygwis8kaH17bngvhVJ2Uy", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.127:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190714, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJGsQ7EJGXLUv9iot6D86Ccia1duAtx93F", + "votingAddress": "RNfXzm33egKvqmjoR9VvRhqcYnysW8NUgB", + "payoutAddress": "RTysDQHqvKHxtydCqPZiis3cBmLmMVkpVR", + "pubKeyOperator": "168a908adefef8327a6d9d8202e63361b3d002348103a8d20542b0751459e465230d9d99e8653a4a3bed359a06e2a1c4" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4e3352ea70836a712f1be70ecd7d7ed932f1fb4bdb8f926582e070428641c034", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 9, + "collateralAddress": "RV3SnDTGvbKo4EmiEAsv758hXERqknMDMu", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.161:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190753, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBJJ4qvvyiRatPX6dqvtyNF3p4wW293nYr", + "votingAddress": "RRitDf8SmU5rwr5stW1RNkd4T9hxvjFrLi", + "payoutAddress": "RSLa6HbSZypGuJGYSWSjXzmn66eyrvARQH", + "pubKeyOperator": "037b616a2bd280ff309e1521a69df0060f6329db737fd30380c012582fbd51f7364c506569893d3c58c40ccc03c9140f" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4627671d5357b2bee009166ecf29821355317161b1f633f28572c2a517ebd434", + "collateralHash": "d9e645e4b33749e006cb0b482708b73e5b77e73d969efa896993485c475d24af", + "collateralIndex": 1, + "collateralAddress": "RQGxKNeKPNfjMjmo9axocYQAT2ik2tQRZd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "119.29.161.253:10226", + "registeredHeight": 182633, + "lastPaidHeight": 190547, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFCZ2EYgs9fjs155uV79oGp7KD7mEoE7Hc", + "votingAddress": "RLdYGUUCn2tti6A7kQDsYE8gAq2BrfxgJB", + "payoutAddress": "RHsubC2yEn7W2ed3SjfackyvxbmECXDr3y", + "pubKeyOperator": "19a907212491a37123808822e60a1e14b372142d73810e78abdb4ff7d03a5d0643ce0e0a1e2cf7f630505a23db04c4d9" + }, + "confirmations": 9477, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5750ba1da7969276b335501ec3220f3724672fa1077fdd9670122bb4c33db194", + "collateralHash": "3291f4c4298a666b3032c7934739dee3b3b1dab9c9544a9e21e6a8504bcbcd5c", + "collateralIndex": 1, + "collateralAddress": "RSuYhboe2Rtn5FQJnGB6a3ZrdBiuQYEz7x", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.50.1:10226", + "registeredHeight": 175425, + "lastPaidHeight": 190931, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9sKXMo9Co7mnTMRqNBiYgzbJ9FSwK9Ly6", + "votingAddress": "RTRs7YdbbfgNY8jCFSCgjgQRFRPvjMEakk", + "payoutAddress": "RChA4VYJYzAQ6PenxX5258YEdmNErJD7su", + "pubKeyOperator": "00ca31f678a5792ffaeecb86e5d3fb62456fbf242b23c4138665748ebc6f72509143346d565a7c0f2c922a0d11c87541" + }, + "confirmations": 15589, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7f50aeb01f58097a50d6d1600ef8d38628506821949178efc2bd13a3f59bc594", + "collateralHash": "e8dd53f35c03766fa03e06d95010fbe0f7cbb92081d0bed7c6e07b3dddd5faf2", + "collateralIndex": 1, + "collateralAddress": "RG72yGmANsZjLyTEVEW23fWhgWp7r8TvwM", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "199.247.1.34:10226", + "registeredHeight": 190734, + "lastPaidHeight": 0, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQ2VHDky2KwBYqKYwYgdRTmrDnUwPQRoaZ", + "votingAddress": "RQ2VHDky2KwBYqKYwYgdRTmrDnUwPQRoaZ", + "payoutAddress": "RWGWkPUHXi2u2idFCXNitPwdpg6Esao1tR", + "pubKeyOperator": "0374c7a8f3ad12d5871f2221c9c9857cd7b4eccef3df28ac27868fc1a608c4d172c5e736ad47f309d95d6451e6a70eb7" + }, + "confirmations": 14236, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2f85f1d453bdc72c6cbf6e95d3bf7c429f5764baa0c3b90eafc6c87ed15fd594", + "collateralHash": "6157e3706cf3252527c838e102e8c1aedf123e5874bcbb3dd11ef09805db33bb", + "collateralIndex": 1, + "collateralAddress": "RCiky8qUQs1p9H5SFkuNWg77xCmKFUhox5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.160:10226", + "registeredHeight": 175559, + "lastPaidHeight": 190578, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJbT7RjmsPJF1j5H9KBFjE2UdGxqY3MZ9L", + "votingAddress": "RUYyUqwojJUbZGFW1s5CewNM5m1pJh5U5S", + "payoutAddress": "RAQPbfvZ4a4ugbBQZc6jtsvBpyN9ikYvXf", + "pubKeyOperator": "8a19deaaa15e99440634fc65b2b047ebc7b0a1e52b23af10eea96a564cb41d30949b9428e4c559ee4a52d439010e7dc8" + }, + "confirmations": 15438, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9e8ff7e466dc1fc5e5a49ddf6979ee8ea5d0e52221808e39cd79c6578bdc06b4", + "collateralHash": "f8b6d2055f1c24d34f2c09c60ed7cdf8555ef196131d161aa527d646ece56a44", + "collateralIndex": 1, + "collateralAddress": "RRLV58CrcSTkJCsDSZ4xiqtssTTNc83NT3", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.106:10226", + "registeredHeight": 180474, + "lastPaidHeight": 190588, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLeq44vKn5J9pTkWcJmCbLeCJQJ3s21q92", + "votingAddress": "RVDQUyinpkurf2Z2ADypscAPkc6z8yYFz8", + "payoutAddress": "RAa7U674vXurmNKqoyhyZJh6PXzTmFU4Mu", + "pubKeyOperator": "8fa8b21d4cae84718d0ff8964fc87888ba7da10bacd1ce723a008d57b36ab3b0a4e779052436ca931a97368da78443cc" + }, + "confirmations": 10522, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ee9d3ca2b5216fc9bfe722b2b01295ed742ce04d3be9f078797ca0f7ad9e9ab4", + "collateralHash": "e4b3bfeed6da6b4215e49436d72a7a1f4a4153ea49e95dfa48a8e6a2aafb8785", + "collateralIndex": 1, + "collateralAddress": "RStorMieeiYLUtB5PgMubhedKNx69zjCgX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "173.249.38.187:10226", + "registeredHeight": 176008, + "lastPaidHeight": 190573, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9pbCTcdGZvV3BDbKUT9xfmBmgrLRZwwDV", + "votingAddress": "RVRFoVmQxusz2YxhHUVgaz6F4bMxjNKfnx", + "payoutAddress": "RUtSBj3Mqt4R7NJMhj8iWNWftpXLc35p58", + "pubKeyOperator": "012c7b014e962eb8d85ec0360dfc2073049118b3fd9033e6b1501ea8a1f170c3176a07d75efbf33280b941f2d1cb2b6a" + }, + "confirmations": 15074, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a5ce25aebcc80bb6f542277809b7b5fb74766478fb677d7ca9e9c7005bec6ed4", + "collateralHash": "cc4302bd6163cfd4708154f28e7ccc435fb56a83b317eadc2c3725a374299a80", + "collateralIndex": 1, + "collateralAddress": "RGngRiaRMbnjTnMXHxHgBHFumApcG2fc7E", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.134.247:10226", + "registeredHeight": 184220, + "lastPaidHeight": 190780, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAxkHhSsvoppsJcVVAe9rBXCEm7Z58CXBb", + "votingAddress": "RVipNzPPVg9mgzDPxtztJf49EmpRaPa6NB", + "payoutAddress": "RWmm1dGTLxyssJwY7EuG3trxbdxHfBKVdb", + "pubKeyOperator": "83cc9c335aac9ea632a7ad593ebb9e5e1e3df00498d5c9582859217a0d98ee61cec6b51da155d3b39d48cd7d09c7ccd4" + }, + "confirmations": 6787, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "be89d10e744e85eca0fe44d3c64e253028a1c473904de8ab56b2e8151fa352d4", + "collateralHash": "8167ea3185ca0b387607b356a0a271c561cbefecbcb8aaefdb74d654246f32a9", + "collateralIndex": 1, + "collateralAddress": "RA4MjKgyHHQwS3L84rXzjNmXFTRMMdNTo7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "66.94.124.5:10226", + "registeredHeight": 180164, + "lastPaidHeight": 190978, + "PoSePenalty": 0, + "PoSeRevivedHeight": 187677, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHNGxWak7YeRq2CuA3X1sCNYj4CeZY4VKa", + "votingAddress": "RSw8dZJKAUbrfhyEcDG3ZRXrtUgSJL8B8n", + "payoutAddress": "RSh281PnkAMViJUDF6XajBouHXZTdbofSn", + "pubKeyOperator": "8d910a540777d14ddcdeaaaca13082d34229c08360187fed81304e591c51c80f3162e06235afab15851e24e7b2b46184", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 10854, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ca910afd07a46c1b67a9b5ad87479869cb2dcb0520ef2bc96bb20d5ac61752d4", + "collateralHash": "23131df31464cc0abb4b03c7ed7bee85ddc68d17a185a4a41e0016aad75be458", + "collateralIndex": 1, + "collateralAddress": "RRRvvATu6qWQLGZont47sn5nM8PH6JPjCv", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.179.166.225:10226", + "registeredHeight": 190764, + "lastPaidHeight": 0, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRLBnDKRU3m7f1de3GEaupMtuYX29gfyhx", + "votingAddress": "RRLBnDKRU3m7f1de3GEaupMtuYX29gfyhx", + "payoutAddress": "RY2vet9Smk3eQTLG6jB2MX6G2RcATS2z1u", + "pubKeyOperator": "117ed2bd3dc5478624f9a9a822705a36348ac9323501334c856bec482e57f140597811121a2a8844339c3a3923d88036" + }, + "confirmations": 253, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "46502ce9f6ad32010ddbf3b02c5a14a8b5588d7bd8a8fbedef51e22cff403374", + "collateralHash": "5c2f011a302fc6c5bf94ea0d23c5f38b137e9d6351732a73439cff04611010e7", + "collateralIndex": 0, + "collateralAddress": "RH2VDedyCKy7KAxFjARKGq61iQGwwvfSUw", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "135.181.47.96:10226", + "registeredHeight": 176110, + "lastPaidHeight": 190649, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REELt4m1sqzuyJJ87pgBMimoqcwXqmduT2", + "votingAddress": "RARRCeFjKRZGRkSSSqkuTMHM5ernSVqfjw", + "payoutAddress": "RQbeJvM5BbB2FJAv1VgkhUgzQXLcTQTyLg", + "pubKeyOperator": "154cf31c371f53fe2d75f86feaad633e05653eb4afa9cf8e0e7021b226c9103cb60df79018f2329ae662344abd8bdcc9" + }, + "confirmations": 14893, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2f0d19b0d390b353d6dce7bf3826c63aa782878e241f873b714183969e274774", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 3, + "collateralAddress": "RKj3wuKS7L4K4sYnACmTFGczeYXW3YcTti", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.56.169:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190858, + "PoSePenalty": 0, + "PoSeRevivedHeight": 181160, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9SoDUWRjdakfs9c6FzFokh9NgBUP6V37t", + "votingAddress": "RPM81kckiAs8CTwEtdxJKDK4kviwoDFzaC", + "payoutAddress": "RGZrKYv4x2BPZHwMfcAnNebG4dbHWxRDCE", + "pubKeyOperator": "90972db62ef84ba8c124054f84155e242e76bae780d2be3a6766c589e556109f9088291caa3ab468a28fe11ef7f8393a" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "60a7226004cb8fffeeb06997cedc83604e147146a2503b7d7d76646bf6c14015", + "collateralHash": "ebf76b12e012926654fe685e7353d837ffd19da2383975b3c2b02127e662e6f7", + "collateralIndex": 1, + "collateralAddress": "RMSHfCf9hjDZdiERTvFAwhE6QvmCKndfji", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "193.188.15.248:10226", + "registeredHeight": 174334, + "lastPaidHeight": 190619, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJpz2N2n8acx5Ka5PUpvMNUZoCRHsSq3MD", + "votingAddress": "RJpz2N2n8acx5Ka5PUpvMNUZoCRHsSq3MD", + "payoutAddress": "RUoDGSZQaDaBkeTPbDKgsKLn7E2E97QHv8", + "pubKeyOperator": "1066e96b87190601de283be5de762588e868f713d09e6b13b7b9ef75f5c12c79e0a000841f198f53a61f45cd28558b43" + }, + "confirmations": 16674, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d582122874a319065e2c4ee83549e4592fdbe44d3374ad351999c7b56e463835", + "collateralHash": "869ff33b2f61538406a8fbccc0ed5b1e28d60bf93bd2df4b03736b1edb675c28", + "collateralIndex": 1, + "collateralAddress": "RTBSkXJSun4ewNJWznZY523MLmgzDZfhbT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.51.20:10226", + "registeredHeight": 178858, + "lastPaidHeight": 190651, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RK4zMFWVqgmQj9dgTaKddkmWRz9RLb1hz5", + "votingAddress": "RQMfTVRa5cvCHfp7h4pSEPNbrw9qKu9opx", + "payoutAddress": "RVUcXFMfhfqCXRCQEN5k627EG3GHcBoLsw", + "pubKeyOperator": "106ae7b2270f88eefa7bdb112584f204d05159158ab194b8abceb75406537e39adde9efaef1ee550a4b3505c4b248d46" + }, + "confirmations": 12138, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5ec8d93fc3320c0b320f95c03a85aca27b6d6ff83f255516bc867780a1099855", + "collateralHash": "b539e7311debdb2601731ea33711e98617f5c4fee84f7477590d2c74591633ac", + "collateralIndex": 0, + "collateralAddress": "RLuZKCZbK8AfRNF4fb1XpDbY89tqMrApgV", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "78.47.184.78:10226", + "registeredHeight": 176124, + "lastPaidHeight": 190679, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSktjvPXnG7YHkWz8ceJmurnMW91CNxed2", + "votingAddress": "RYYbDCuEXzGgA9qB3oxiNUF5J32GJtufHJ", + "payoutAddress": "RVx8qBxnYKf2hc1trbnTCibMPrj2Z4J3Pd", + "pubKeyOperator": "94dbd452ab013b072074467d03af704800eaecefe475c7e46387772e7fabc433e4339f0afcbd3a391f5b414a15693ab1" + }, + "confirmations": 14883, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2e602e8b23b1803bd563a7b387502468ac13a820c81375f2a30662fce58d4515", + "collateralHash": "b8ec24a8042faf00a32467cd3b0859799640b70d287a423d1b35c26ebb192836", + "collateralIndex": 1, + "collateralAddress": "RFYsQGbFxsxXHZg869gPrwrYYhaM6XC2Qb", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.135.159:10226", + "registeredHeight": 184535, + "lastPaidHeight": 190624, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMDN93WDUrYtwm4xoeTgUSCjh3YV8rKFTw", + "votingAddress": "RBEwp4Xv2wFULeTSxQzZoPb6sU1fVdJoxa", + "payoutAddress": "RHniof8KYLYE9Se1BieJnyA34VanGWwdox", + "pubKeyOperator": "908b1f749f6dcb7420e930776b9618b8d12ad41aaa2d54732d0b41d2ecb9dbf6257f639a98d9ac4d96c048c734cd08c6" + }, + "confirmations": 6473, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b24952857549e98a7ddb5bccec3a77a0defdcc0f0fd2cbc7a27a70ca7368f5b5", + "collateralHash": "d6f054ebb93c161c2712e32ac7f3e13ad81ccb318a677e46477dbf4361ebe511", + "collateralIndex": 1, + "collateralAddress": "RAj7aCRwF11JZDZFMyJYSGLtHSDazuPKpZ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.179.130.30:10226", + "registeredHeight": 176630, + "lastPaidHeight": 190728, + "PoSePenalty": 0, + "PoSeRevivedHeight": 183262, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRRnty2z7ddS5tApc7M9owQ4BsePJUnKXb", + "votingAddress": "RLeRMQvGfMNusmKzsb6QqtMpF63ezzGj2r", + "payoutAddress": "RKNbV1nKwYux2mVEHV7b4cbGTxc9eKjqo8", + "pubKeyOperator": "0db7db6f90d410cc28557e9816e81814ea2fcc3fd3b46125c62b1ab478bf0e56765c24be255626fdacb94c7fec34763e" + }, + "confirmations": 14369, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "856f55808d43dd31df78a3821155a1bde4db0b12c4bb1fbf7c928c1d7997d255", + "collateralHash": "2adeb4c2a71375cd184e994eddfe1becdd5ddcc15d747cdebbcc115f9c7fc3a0", + "collateralIndex": 1, + "collateralAddress": "RYbmsfESiHhtkUAQ5tH8V59LBxn3XVQYUd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.159:10226", + "registeredHeight": 175310, + "lastPaidHeight": 190799, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RB4Af8qBWQwaxybowGHjevG7XCqmuGoBEL", + "votingAddress": "RLmohBr8wg2eESYk3azkwcf7DhUB6oixj9", + "payoutAddress": "RBNueiGJNgXtqaeDSnTuc4zfRuUkaHF3pu", + "pubKeyOperator": "865d2b167cd7a302e5f57015702abb56e17e2e603b32d8d7bfe1df57aef043a5b6f6b5444c8243b9109204716b76f47b" + }, + "confirmations": 15687, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "13b0b2e98bf1341bb3f20d8b522c411c5710758e88cb53b0f880003ebc24ee75", + "collateralHash": "e7d8a0c2ab934c14d83462b427be3c2033e9e014df003d76f2a8a0e8a29f186a", + "collateralIndex": 1, + "collateralAddress": "RJ1mL4dEC2btsfgyv584Lg1G1n6NYDMQ3t", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "122.148.134.76:10226", + "registeredHeight": 170401, + "lastPaidHeight": 190866, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVZ2rVh8WygKN8iFLSnKqJo1jTwJjNXyUS", + "votingAddress": "RAnf2uGSg9fZwrJvAtBo2vGyxiKt1eEUai", + "payoutAddress": "R9KhNdEtJu8tJX4hLnS7ryyX8Kp1Y6Toma", + "pubKeyOperator": "0f1a3c9feb3a2bfa733b4e88c90960053107a83023f8a1bc30821e550978b52976b3d9dcd8a6113cf0a69be1c071600b" + }, + "confirmations": 20602, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "bc671e10a75df9f002cdaef43105e6e6c00add01e20fe43b6945061ebc2daa95", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 4, + "collateralAddress": "REHtDse4pVPiP869tEgAtB5De4pJCzDLpg", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.49.139:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190860, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLdN2qqVBuyKTYVQWsFcCgFZE4f9yKA364", + "votingAddress": "RUkLXc7gqQuiQWAmnKwhAP6Gp5R3AEK2Fm", + "payoutAddress": "RRJiqoWJLX9LGqEjUb1hm799tCP9cst14b", + "pubKeyOperator": "15df6c880d0daaf786438c541e790eabeec0850a750fdbb92b93f1f81d6b982c8c4a72ff282f42cdd99a7b699095fdeb" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e7742bec629c7ca3cb8f68d808e05bd2459501c022e3cb9b5012d0fd537aa2b5", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 3, + "collateralAddress": "RBKtFmY8wQrN6ukQH7vZwcoXUSNX1ueSow", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.80.4:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190633, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REZ5FVCkZAZdAKKKqGihoNTf3Z4zqfS65Y", + "votingAddress": "RRQwQzbczpzX8gr6xVPBAiYbXSt88wqjFt", + "payoutAddress": "RCDf2hBFrEsdA4UTHni1EkjA8aEQ9ibSGR", + "pubKeyOperator": "119707f8f3df492333cd581640686534780565b66d6a0227a38e2e4f1ff13fe6314c03570de6483e9c6a0ca81cf31958" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "802bf7384c4e8308f75de3163a7bf1dd93361ec1f9f7331051b400f613614b15", + "collateralHash": "745f0e0544362bf323067fd5ea6d8ba77b30b54ac6d6f9c76f2799716a153c9e", + "collateralIndex": 1, + "collateralAddress": "RLmHNxac6xXn3gxfGr423nViNRzd5wa5Bi", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "52.87.166.31:10226", + "registeredHeight": 175878, + "lastPaidHeight": 190918, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RV9UBaCMbueQnLtQCS3QJhrMD1xskG48sL", + "votingAddress": "RT8nAiHdZM6ZmHJEpCj4VhWeq67WRStzKS", + "payoutAddress": "RC6iGQ2YbUPRXz9WR7L3Zwm5DFcX82GCyY", + "pubKeyOperator": "0af029012ab7611e64d1a55e2d99dadcb8a722278593f08942f82d34daae293d0d373d8c25127f237e7f0e8e27e9c006" + }, + "confirmations": 15118, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "812f0d9b9cc547ad1ae9ff9e5ee325ecc9159b53d1b4989b4d4711a9c5eccf55", + "collateralHash": "f56a9f6b5b77d901dab624b612e76dd5577b28698eff3ed836dc37d6ef46ccb2", + "collateralIndex": 1, + "collateralAddress": "RFBn5gznrEDyLSYGGru96jmBg25BY1yPsU", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.140.172:10226", + "registeredHeight": 175214, + "lastPaidHeight": 190641, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRhPcSsRAoAKt8h2zCu6qVL2zda4XESmD1", + "votingAddress": "R9z4fCz37AgzNevexrLo3jZFHhnaPniYLn", + "payoutAddress": "RTPRftyp661ELAwVv4K47KRbFBTJeabh5S", + "pubKeyOperator": "99fe1572041fa20c9183d5fc164e69cdee8c8ccabd8d4f06a379f5ba8993a3c55cde89c186440006900c799f4f4fcdbe", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15784, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "161603f1877f5c3d5e08f04d3d1967e9561d928311220b92f5330cd2bef163f5", + "collateralHash": "8e14bb5d6e3cee9450fe2ca95b917e6ab38f6d43b62f8f239bafdcc0467b22c4", + "collateralIndex": 1, + "collateralAddress": "RKvW8TrGbYw2yKcg5oPaHR5kxmzhyrSkqA", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.91.89.209:10226", + "registeredHeight": 189341, + "lastPaidHeight": 190762, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJqoX1FM58bKDJ3WcRVVKzczSZCautvjdm", + "votingAddress": "RQJzrdRHn8ap2wq1Nhevc2Us77Y4HAwdFY", + "payoutAddress": "RQAers5y647Lut5jLQ1CHyKwea5HRkQJ4e", + "pubKeyOperator": "0c4b0b8547800d9a0af4da22fad253631347f234b4cf3f0dc4db1c7aae4a455df1a1daedb84bab735b851a3a51fc4bad" + }, + "confirmations": 16551, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ad36f7b443035d056e3b5d63f5f0e8f6be91f2fa5c8f79d5f380e9a703eb8475", + "collateralHash": "18de2ae97e28d1e2c17fe833602867371fda2dbb2b97c2f0bc353e8d1ddb3cf4", + "collateralIndex": 2, + "collateralAddress": "RMhpKt1M7DGFgNc49z4smtq7mqGszYSTJ5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.157.54:10226", + "registeredHeight": 180161, + "lastPaidHeight": 190705, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMkAtG1SD2cNhzHLhPXPXsuheXpNoLamu4", + "votingAddress": "RHb7MGiXZpM7u5NyMhRzmvhYx3fagTNKFm", + "payoutAddress": "RSh281PnkAMViJUDF6XajBouHXZTdbofSn", + "pubKeyOperator": "02b5ad0c5091611660ad4a1607770f21601066c7cc393e934804ed6d778333ea114a8a4352eaa3240fc7daa358dfd876", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 10854, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9155bf78878ecc1402fb6be8d9b6ca5f7b37079f2d8c88ac40370b5b52790c75", + "collateralHash": "c653faf8e13f639798d9942169ac804b0175d2589829e4f690496e8dd98647f5", + "collateralIndex": 1, + "collateralAddress": "RWqQZtUMVYutXT9mj3A6EKj7znk3YTYngR", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "45.76.232.55:10226", + "registeredHeight": 180853, + "lastPaidHeight": 190532, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBFKfdZYVxicn89tpyzEDG9fKFbB3DwMrU", + "votingAddress": "RD1ATZ7MSoy51wXUPAYgKxjhJNMx1Y7NQp", + "payoutAddress": "RHHkgq4LQa3MqUghZdtkaeisEYkQjWZmf9", + "pubKeyOperator": "96546a5cdec5f4d9af4ff9cf74d4951c5503c0d30f061ddd6008d197cd083607d140ca8d793bee0c0f5f3e666d3b84a5" + }, + "confirmations": 10146, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9c9492ea5bef12eeecee3c490d8d53b9d0f3ad13fe8ac8ae414a0c3381e31876", + "collateralHash": "2288e3d280e3f14d4efb5c81b4be6d2b49bbdd8e2a1279ca7dbd637f34d60a7c", + "collateralIndex": 1, + "collateralAddress": "RTDeewgnxWEfrA8Kicqfk4gyVRVa43dwp6", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "54.83.105.88:10226", + "registeredHeight": 175878, + "lastPaidHeight": 190924, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVrT8qAL7nACCpXABz7fuRyHr5VcU1XXBE", + "votingAddress": "RDKe4JM3TGBepMGPZH3XsK1PZ4qCv4bGxR", + "payoutAddress": "RPFRPNwi4UuezTtYPZMZanEtod8F8d9897", + "pubKeyOperator": "1951eafa122b45f660ad766fc337ebb3c584c71be8085cd6b41539a006dc6251aef8aed5d4379d0df8da889e5099aeda" + }, + "confirmations": 15118, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "deb0a31cb304c243378faa04a4c0cb4c4c9815d0054bc36236a1c05f73ffdc96", + "collateralHash": "816697a10eedfd4876b2d1a62470355201e13385c2d16ccce2b807cf8abd7252", + "collateralIndex": 9, + "collateralAddress": "RTQRQuHC4LWV2bpcMQ1iS12Kf4nevrDGML", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.49.132:10226", + "registeredHeight": 174930, + "lastPaidHeight": 190861, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAaGbyixFzBq3Rew9MSDFqMRVybRT24Jx8", + "votingAddress": "RLvaq5NFgdJQACYBpRs8X1HxqivLVCyJqi", + "payoutAddress": "RU8qHVqXg4U8RgeMRNCgg5nmNTvBJu91qB", + "pubKeyOperator": "0c062c7a1c93813061de93ce2ce94c4557f27f154d09a901a43a999666ae6c34ed59d58ae681d8556962d537d4d528d5" + }, + "confirmations": 16066, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7e24d833f3c76239ce1e1d0eadcb25f4374b627d0e60455b3515e52ad626bcd6", + "collateralHash": "d6002d6282695070347a02373c06436ee21ae9e90d2332e0b2796eefd6a076a4", + "collateralIndex": 0, + "collateralAddress": "RJcYvvxaev1yAi9NwyJUYuXqqBKLjs1HiF", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.2.150:10226", + "registeredHeight": 176095, + "lastPaidHeight": 190629, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RC8JVPWSwNeCRJKW6pmDc6wJKykosnj4vf", + "votingAddress": "RG6qrx38sPMTngd9sGXL6VLxj3VgsnFzF1", + "payoutAddress": "RPi8BKVnek7itsAqULUSbEhy7fFKSNKaj3", + "pubKeyOperator": "8f7a8fc2cca08ad590e5107c129bf08d4aefbbc4dac8bc30b97dac5ad2672665b0d2c9d094aca2e9e57c1ca7c4da04b3" + }, + "confirmations": 14910, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e1d832c5f7c8891331892177d46e8fb1fc42cf63272625459c04b6fe4c15cdb6", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 6, + "collateralAddress": "RMexYcLAmQKgL4WRA7LTrGud1uTv4FoCjB", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.49.51:10226", + "registeredHeight": 174605, + "lastPaidHeight": 190521, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9rbAmMoiha6V1MVgexHudc72whjUoxbZe", + "votingAddress": "RBXgjzQPYRv8CHwKCvPfufKcWQ2QepyPkY", + "payoutAddress": "RCvTdqh91QkgzeVSKv3oXzUJu3SZiNNqqk", + "pubKeyOperator": "907b8020b6c52a6abdfda8730d5c40cc269fa007c8bb49ffdc984e32450fa5cd5eea366764189e9e6934b32680348493" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8dc52cef7f59d73c29fa037416be18c1742d4056cff07edbe960fe48f5d61256", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 5, + "collateralAddress": "RMAszLeAsV7qEskyKHrvf8PXF3XzA7woty", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.157:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190760, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RN9fHZ1KKDXrjzcwFb3mjKkDEos9pXr6pe", + "votingAddress": "RPdLr8s5W5xBsvTNi1L1b5KuW9R2Ro6J8K", + "payoutAddress": "RFewAV4oHciBEDGKFU7YjdZA4rXgY1Fd7Q", + "pubKeyOperator": "834ee993d4eefc3a725b3483cf83b36b8af9251b07aa63747ed8cb07119278c1f3f565aded774d37728dd4ca1837768b" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d7d7723f13bee739a1089baf93752e9453b8f23b83559ee9a9f8d287332056d6", + "collateralHash": "aeb29b08bee665c1f9cf9f1e17a3893f05f400701774ffbc37eb5fcd37e8b698", + "collateralIndex": 1, + "collateralAddress": "RHrpWwhWsnX744Ci7WvorpGSapcoigBAjS", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "106.55.134.48:10226", + "registeredHeight": 176378, + "lastPaidHeight": 190523, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDAPbL9LA6XvRCiYXPEpaE4qk7XELCtWRc", + "votingAddress": "RBDGiTDWHeq6aqTyWhFKhQJ1QGqWEWSTia", + "payoutAddress": "RF1Rb8mZWU51SsWhCRSm1sn53ki4LgLx3j", + "pubKeyOperator": "16f40885e0f613befba63cef73280008d23b3d1571454a16af294b7a210c9b8afe74e24daa33535a78ace9eee59ca82a" + }, + "confirmations": 14619, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b5d75ee94eba09a1ec68fcfea6ab8742e8a28b0cfdf3b0b0d21037c5f444b2f6", + "collateralHash": "8a1994c1352189df8e73d20974799f97ee0685d8b6f89ae2b13ec0ae093736b1", + "collateralIndex": 1, + "collateralAddress": "RQhRRrcuJHVmFqvsyG7nRUiZkqxJi9vwHH", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.237.215:10226", + "registeredHeight": 176163, + "lastPaidHeight": 190755, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRbh2PHyvVvKVkL9AUwv2FdSagb5LGPrbz", + "votingAddress": "RCP9MBPHaEP7VanUMLqJizC4BVLaEuEkRZ", + "payoutAddress": "RPjy7HUNteh3kpr81eCTtcZo5y8bBquSdQ", + "pubKeyOperator": "03f0c2a409ea41a79eb7f04990e499bf023e8242272e8aa7fc67024ccf64ffc11e3989083c459a218a940d4d6839b59e" + }, + "confirmations": 14834, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b0232290c29edf4157ed51f3d543b1223374eed362d6f243ed557b7367ece756", + "collateralHash": "938825cc0f83dab9d40082d660c5d2001f43cc424bbb4f9084e42eb4369abf83", + "collateralIndex": 1, + "collateralAddress": "RVz5XKrZrdTXP4vjHAM8swHZ6orcW98gvJ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "167.114.97.132:10226", + "registeredHeight": 83341, + "lastPaidHeight": 190594, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSbGaXNKbY8VeSJgj2KQJRSjzrqLCnyL1p", + "votingAddress": "RRiHmpbBpMzK1Xwa8Lwz1NKzNrwh5pkizf", + "payoutAddress": "RH1veCx1R5qVvRsJ2pYXCJrWFDGSeqKwdF", + "pubKeyOperator": "0d99b212d8935690445577739e82ff8e4573305c5928bc4ac84d410cb0d14ca71db2cb79ac1826f1af315149d373847c" + }, + "confirmations": 107685, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e99401f1b9583c4e0a7b138e6606b9716a00d9d5ab33de4c385b30662d7c37b6", + "collateralHash": "89a318bc11a9ab08370061b2bbeddee3296a4523f71ef307d378133c0980c9fc", + "collateralIndex": 1, + "collateralAddress": "RTt6NWWfxCxgKG7WSbLautEWsxumoPH6SX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "207.244.249.184:10226", + "registeredHeight": 175214, + "lastPaidHeight": 190642, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGbwJgBc9Zv3DmadeyYfDHdoDnRxn6aNis", + "votingAddress": "RJeCus5fKwYwiEfDcLHNgqMD8QHCXiKChi", + "payoutAddress": "RTPRftyp661ELAwVv4K47KRbFBTJeabh5S", + "pubKeyOperator": "14e8518d90a739a3721ce3354ea9deef928332233e91ea7dd044585b6214efd153108e3e820d81d7834a05485130d0a0", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15784, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4813ee03c2b14ae9ed77bfdf490c724e6c257638dfc641763be412db87791c97", + "collateralHash": "66bf9ff3e86620c1861597704b4f9586ec62800f25af23f7ced66b3158e962f6", + "collateralIndex": 1, + "collateralAddress": "RXZKnGReS7RSLmGs2GHh4BibHJpXQVaZiR", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.144.89:10226", + "registeredHeight": 180143, + "lastPaidHeight": 190682, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDmEaRaiqSGZwBTnsRmzi1K76gnzjtqAxa", + "votingAddress": "RNvur3MBWKFQT46Cj4h4bMqYEL9NphW61L", + "payoutAddress": "RXZKnGReS7RSLmGs2GHh4BibHJpXQVaZiR", + "pubKeyOperator": "0f7392c4f929fe7ad45e88761c6392b599ef3d691a35af23a27910033d20217c8f643e276a40987ed69548fe711561e4", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 10867, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "48c76d92dd8fa55a8f1db0e0b666037157186e4fd4eccad0d7529206f1602d37", + "collateralHash": "746b62a59c5fd7d65572b36554e05ae067f83349a13646915cab7a530dfebd81", + "collateralIndex": 1, + "collateralAddress": "RTj7jvP4S2nH4bsQxVnopvPT8RN1phkXPw", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.146.99:10226", + "registeredHeight": 178681, + "lastPaidHeight": 190943, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REkJMXpUTmNGa3R7gguSFZLajaABUyHP3z", + "votingAddress": "RQ6LVDco49buefNSdCGJKKUv4HP8WaqvjU", + "payoutAddress": "RCnQA9NEVTGRVEYyxQSbgMRux9Hs1zveRh", + "pubKeyOperator": "13ef1c86141258d34e229a8cba0d641e99312340d4d0108857f4cd70b61f360dfacf780a7421f2c4abfd96d2b07034a5" + }, + "confirmations": 12316, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d47fe30e7e0ed52f075080c4a34b0bdef18b7ea5292252988c41148c421c45f7", + "collateralHash": "1eec5db5036f4b12538ae642c59100c136ae32927ceb6ecf20927b05c200b3ad", + "collateralIndex": 1, + "collateralAddress": "RMRaTLEKtqh8cNYLnSgeLembsqVkWXkofj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.179.184.144:10226", + "registeredHeight": 176637, + "lastPaidHeight": 189850, + "PoSePenalty": 0, + "PoSeRevivedHeight": 190647, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RU6Z58C3Uick6SYKSzEVh1eZsBUhk5M2LA", + "votingAddress": "RMdtLoeA81PWB3ydzyGppU7xoJ48AtXdyp", + "payoutAddress": "RTSryqJsT4hVPANBTySbAd8QrryQ7cNv54", + "pubKeyOperator": "02c26840af0cd8811b09f8478fde37a3ff8eb8c468fdd62df0fda79286cf0a25731638463b5d77b703315258e1b00bdc" + }, + "confirmations": 14368, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e4bb907366bcf6abcb6396d768857e1d23172e6cb9c6fef3776b0e602f117a37", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 6, + "collateralAddress": "RN17vsigm5xhTE739RsRRaWWTVxTVGr8Fg", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.114:10226", + "registeredHeight": 174910, + "lastPaidHeight": 190820, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RA3sa4jZUeMy97gcDHb8XqRvdgMQC9gGwd", + "votingAddress": "RNzNC5nVq3W4k37fP1W8E6qPe39EGJfysd", + "payoutAddress": "RKTfu2W6d3osiWQFwNjc85uyAMQ6UoAGYr", + "pubKeyOperator": "8003382dda27bb0a969c9f3c7238296c004b55489c058206612714b8536a64702607e188230316f882c6cd69e81f6bca" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8a7bea78c83aaabc6bcd1d28d2b52b3038b2e9da5fc56837e41bb933b44eb677", + "collateralHash": "df86ef3aa4ba8c448f5a417f000ea46297c96f9a8aaf484f00910bdcd67c6ce3", + "collateralIndex": 1, + "collateralAddress": "R9ibiSyAB5uiFS5JHCHJvVKCKghSv5XVon", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "198.244.150.42:10226", + "registeredHeight": 160925, + "lastPaidHeight": 190666, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFrTiUrp8Gtn6PJAmhKWYzyUKBEoCWvkZ4", + "votingAddress": "R9aVksrBc9YpKgNcGqLJsez7vEWRZFpzRJ", + "payoutAddress": "RE6bzeTA35tn4xjJ7x941T3KxvayJSLgPJ", + "pubKeyOperator": "80523f32de9149a83ff3867b0a60da05896422b742492c8316e4a2110f8fe532829d6e352a49a5e6a7e4ac8140a2764f" + }, + "confirmations": 30074, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1ff3e451c7821aa07b3a93d912e3f01b808eb312d45c26c0ce3cf20e856b4a97", + "collateralHash": "f99133d27de112698809bfcaa3d61a23fff674b9039c748fb823e612cc6ef0ac", + "collateralIndex": 1, + "collateralAddress": "RVqsCHWxL4G3L11Qn7tTYfXcJLQphGdpua", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "159.65.176.62:10226", + "registeredHeight": 176933, + "lastPaidHeight": 190695, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMFeXMmFF3BJizcYSFkocLGzp37aahD7wk", + "votingAddress": "RE6KevdhwAFf9Gk1jPnFH6CPo5V1kvy7U8", + "payoutAddress": "RSEdStfq3pA5BxRuFoK2SSfE2XvUH6D4v5", + "pubKeyOperator": "02a70267bec38ae3867c70cbcd68d5725d6644c380435753f123e7f7dc440adc3d82c37092da303558315458123f9c36" + }, + "confirmations": 14063, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2e417186eb2d81de118c620c14e63130c6ef9e7b98ec2a0e68eba5fc02c35ad7", + "collateralHash": "55d24bba587d96d9f4cb872d28ef64c8c88b96ec41f204f103549884416edb31", + "collateralIndex": 1, + "collateralAddress": "RStngHXvUd165EPnwtsyp2fN2XouZTJwez", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "89.149.31.157:10226", + "registeredHeight": 176409, + "lastPaidHeight": 190555, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNGYjYFyJdoVKnBJd78oginnnyEGZAUEAV", + "votingAddress": "RMk7gkqMN2o6YYJW8DwzGM2PytDhQV26RL", + "payoutAddress": "RVqWuCZdSKXCV6YHv7DEZeS93TZwvLxtnd", + "pubKeyOperator": "174ebe4eecc4fe8445816d4e1133247301d11f59a3f7e9ee9606b45defdd68dab343436a9d8f4cab9701695a55db5ff5" + }, + "confirmations": 14593, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ea0202cf8a10a0f71bb7c9c7836c5215ffe03d521abd5743f41e0a83a26f7af7", + "collateralHash": "4308366d97c124327f1881abaa6f7de6903f17a2ed3baa10d1a78fe352fe6a07", + "collateralIndex": 1, + "collateralAddress": "RV9v1z9MZBdX2ZaJMAvJDefNf6mxJN4CwT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "155.138.201.53:10226", + "registeredHeight": 176630, + "lastPaidHeight": 190783, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKuyFeQEv2LQA3oDgipaqBP8pajwiR31Z8", + "votingAddress": "RJCTHvfpRq4ij9yvSbztLBTxtZ9HbCnjEW", + "payoutAddress": "RHTUTrBdd1XrPmbjZgHkMk4oqsnopove9o", + "pubKeyOperator": "009716b828138556f2cb63c803e82269f45116cc1759a29a607081c6fc7344bb887110d48e0c10e9f329759c8ab4771a" + }, + "confirmations": 14393, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4dce70c19a71ae20cd818f1165a34f4dc031bc466a79ec04bea2f0b7148b9357", + "collateralHash": "33af4f9562709029dc73d0107a1aa467e5c47cdbfbe2ab68320d1c8337f90014", + "collateralIndex": 2, + "collateralAddress": "RMfNB8M3XaT335ccbP5xQEgr3JveuvzRDp", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.124.4:10226", + "registeredHeight": 180089, + "lastPaidHeight": 190626, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGKVbV7B1aQeG4ZHZ7yisYPRTuQqay5Sav", + "votingAddress": "RWuGYnh1U7y4gdh8TWr2H46ocmaGYdWpdT", + "payoutAddress": "RTQj6nxchSumEKoQ55Kq8Exc1DQWUWWyNz", + "pubKeyOperator": "13748a332f50c2ba55fb8ed768872d793260c1494d371cfcd3c31255d10db50ad9f78c3fb61c1a583c0bd3b5590ea37a" + }, + "confirmations": 10908, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "734f039b0ac938199bd981158c61ed944b0080962694943f305d6bd046e1e797", + "collateralHash": "d81032d082a366a6ec7e512e26420d66928319a9872f05fa04b7047352a0166b", + "collateralIndex": 1, + "collateralAddress": "RXW7yHeX6ZQEuBXTgeUdsbyUmgYdN9pik5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "5.189.181.252:10226", + "registeredHeight": 176159, + "lastPaidHeight": 190740, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPC18KresNJiZ6q6gCcRWGoDVcJzUwybAp", + "votingAddress": "RMinCuSv3rWihXy7PhUeFTa6Xt2oJo9PqN", + "payoutAddress": "RDnTJoQP5aTsuPrFH5FrJmgQHESzvS4Atw", + "pubKeyOperator": "88807f4c9d3826dab11f7005dc2ecc65dc30e510ac0df783a5c26da8d26063c90efd81b960cc65d26c0087b5b88d791d" + }, + "confirmations": 14843, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8958d4da9f61001d17b7a21692e1e9291f62579cef7ed8d2d4ce212457643517", + "collateralHash": "5de585ecb9710265d59dbc81092d275574a3ce53900edf2a05349648f7fb1141", + "collateralIndex": 1, + "collateralAddress": "RJuashgrLdH5Mikct4MjrwyrW1JXnu4y6F", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "139.59.151.120:10226", + "registeredHeight": 176765, + "lastPaidHeight": 190968, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTgAm2AtgseseBmYK7W6m12kAhpdAghTY2", + "votingAddress": "RBYdm7tE6fciKXmDBphp4dpau6rhSnZfyy", + "payoutAddress": "RTfJtrb9XuFHRdhFEV4QPuytcAYYE32io6", + "pubKeyOperator": "0e548d9874204c6912955efd9730df62b26cf5d637d704d36eee710e5df18693dcfb92649c9d1d81e62d6621aae70e0c" + }, + "confirmations": 14232, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5635002eda83a593df91b712f202469bec17c93310394f7e69f78c1b71306517", + "collateralHash": "582afa37b31299e0ad7fd75add0c88c41d5aefab4dc2fd208ff0efb2785ac003", + "collateralIndex": 1, + "collateralAddress": "RLfTbAXY57sT14YKXytP3d9SHftF2EvNWk", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.202.30.93:10226", + "registeredHeight": 176633, + "lastPaidHeight": 190784, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHFvdsoAs2vVDQHRoJUvBnE8JB3BPC1tUM", + "votingAddress": "RSqpxtpKCGeeq6oTEr2t9f2TZeGLeykbM3", + "payoutAddress": "RCGtLan8QG8DjP4zPEjKbuUHHSSeuiDAim", + "pubKeyOperator": "8a50b024f0dc1df891c5bbad781edf5f08b3a61b9842ac1c02d0f4ef3c8c16cc1046e4954d2672232b427eb009c90df5" + }, + "confirmations": 14380, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8223597d8df49138eeb7e5ecc7bd81125975c3dea91e1c9797a388d307cee917", + "collateralHash": "b8ba99b85d3569a6a9eff79fc47a06e6ee06679923f0640399ddf37bb3c53c81", + "collateralIndex": 1, + "collateralAddress": "RRnK9tEhxSntwuvXDyjPrGUjDk5PJEeUU9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.96.162:10226", + "registeredHeight": 176665, + "lastPaidHeight": 190835, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAp6SXFnUkHeqsCWKNMo8iEKSXK1DTqWS1", + "votingAddress": "RWUb7hG71da2BMyKyHFX2b2PcxgmEsuiNJ", + "payoutAddress": "RMGvRrdeGmymxZYYJf81eq5YjT9CQpYDFZ", + "pubKeyOperator": "9080721e7eeaac9baefe13f4e237c83445aad91338ec75b48032a55c2d6dcb58f96b26cbdf28f7e51632b4fa0df44cd5" + }, + "confirmations": 14337, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1f748b561493b9f7c56c39ac35e39e9196de8f880627f3e654b90527086c35b7", + "collateralHash": "ea2afddc76e75bfa64f419047857ee936c963238dd361700b315afcf0a74fed8", + "collateralIndex": 1, + "collateralAddress": "RNbfMKgzGKtut8o5ktY7mX4XXbMGe2c9oP", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "161.97.102.193:10226", + "registeredHeight": 174515, + "lastPaidHeight": 190904, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDnhEtD9dALisCku7CKrBU5SE2vdyjJaY2", + "votingAddress": "RQcj6fEyrb7NW59ibrRCGq5g2u6gnWiC7J", + "payoutAddress": "RDJbErXgGi8BrZeDP3RhmnhAzro1UHjykC", + "pubKeyOperator": "148f11ff1259f5dd7b71e85662fa3e4f20552ea6e75789371966b0b49c9129845875bddc12d31aa0a59f736f9f5cedfc" + }, + "confirmations": 16482, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2f7959fd1517a95660afd1e54652e5e5a8ba61d429b43d116d84a608eba9bdb7", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 9, + "collateralAddress": "RVEG97SxUYdrNJg79NU8NMcZyGqdLEg2Mp", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.50.167:10226", + "registeredHeight": 174605, + "lastPaidHeight": 190522, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUc6zEsCohN5toM5ecFmSyWWN87fswzTvj", + "votingAddress": "RN9ZoYhqPcgPyLAykEgEdkQaQ1BpbM9aXN", + "payoutAddress": "RNJbQXM9XGGUyg5Vjy4Bv5tM28HJ3orthk", + "pubKeyOperator": "92a17aa571bf0298bf4d4063e856478c2a8cbea4e373de523e59d74c8b2f1242a11d182c55e29573fb6f6eeceb8667c4" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1ab85ca659070da7431f4c12411782c0fd4eb4ec014a0031e7461f71d31716b7", + "collateralHash": "58eac319ef3aa0d5be783bd0885cf1da8dddad2637ff03d777a73d420c007e76", + "collateralIndex": 0, + "collateralAddress": "RK6m6qnMVG6Mg2uHbythSn6jN8d2Q1bK3L", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.145.124:10226", + "registeredHeight": 175171, + "lastPaidHeight": 190606, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGUdvrUm1VpsdCJUqm6qiRYJKJLcqK4FCd", + "votingAddress": "REKRpztfqEKW3TDShUK2JrEq7JxSpveoVs", + "payoutAddress": "RSGJ681JsxsZ8VVakSDupP4CCFDizagS6i", + "pubKeyOperator": "00d31d3560b3805826b494f0e6f299e0fd7e2f4e2c416cf62d8fcf21e453e694472aff8758d792caf867ac4e16983857", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15834, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d5e9bb9dd100b2e3dcd72aeb6614ad7ab21308473b78fc4a0586600634c77ab7", + "collateralHash": "cf9454495a0d892ae73b3bd759a511371be95ecbaf349aee168e7685f9513fc4", + "collateralIndex": 2, + "collateralAddress": "RAMW6Qebp8AbYv2JC3n3i5rvTnBFJifTQ4", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.102:10226", + "registeredHeight": 175109, + "lastPaidHeight": 190575, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLq2HqXZi9VTU1ToPxYjARoymYfQQ5v64X", + "votingAddress": "RNbj25srzGJmmab68Pb3YCsxXrahLr7n1F", + "payoutAddress": "RSw5j5tsKdQfpub6vqZhSXBbrVXZkFuq68", + "pubKeyOperator": "91e2f12c7ee183c4ad4fa5f06b007bb4420c2a85cbe5a0d86f4532b54b5f1f4f62e27f87fdd45cf445dd771670c450cb" + }, + "confirmations": 15887, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a0b2c8c114d5709b00e6ed9c72cc39b8abef61f9a38edc1aa437002fe26a0c58", + "collateralHash": "3019d4d149e6be05be0f622068ab6ce23aa911a1f740c1a10b6d0f6f8c28349d", + "collateralIndex": 1, + "collateralAddress": "RXvrfc6qiwXu9Yzghno1diibQ55CTc1R2d", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.104.107:10226", + "registeredHeight": 174442, + "lastPaidHeight": 190800, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWFHvQPa2VKhLbTixzrHm5DgMNNKaKb37f", + "votingAddress": "REhYvHmvxNVPRGiR9gvmAksMHc2sWoCUV5", + "payoutAddress": "RPXC4QaJduUKCbaVpaC6mbCbvY7y8eRfrz", + "pubKeyOperator": "96b6960c4f436f38b064c47ae567143bd05d0fecf1a61854406097abbbbb80ce3904b3f7c1b5a2f94651fa68a1213942" + }, + "confirmations": 16555, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b9d25f4bbb5bf0abfe3c65e3d490be10a609a288d76c29b4d8a5ebac26550098", + "collateralHash": "46c338b01379e0162db89823b987bb930c4ff6adbee4c99b5def41c7bcd6d7e1", + "collateralIndex": 1, + "collateralAddress": "RWyCuJaG7bgZxp1TjXsfhSJMsVqn3NvbRW", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.29:10226", + "registeredHeight": 190692, + "lastPaidHeight": 0, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDXYHRVQQQbwmyHmtorPvEYzTc3fmWoGDj", + "votingAddress": "RCW5rw6v4GAGigt9ajkFMnx5y4E1VNdUHT", + "payoutAddress": "RH8trdegSkyCXPw8BiGjVCkMJwe6sgLLG9", + "pubKeyOperator": "9418f5adcfd52edf35ccecc75538efa404c2bb7645a90756dc066cb4c27fe988b5c0ec33601b9dfeaf2753a38ed1cd76" + }, + "confirmations": 308, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "aa6e01620286be0f7102192eaf5c77896cf5e029d96c4f9e8cc1b0945ef738b8", + "collateralHash": "291c67728fd9ac4e255c4a683dbd25e73aeaec83431c2a15824a6471f1d4e425", + "collateralIndex": 2, + "collateralAddress": "RVnvdMkGzLyRVabqTUu944CgFYgcmWcYm1", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.132.30:10226", + "registeredHeight": 184840, + "lastPaidHeight": 190949, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCWQHmjGeqn2TST3fTpmjdRyPQ4RdJez4t", + "votingAddress": "RTte29rFMVoMnwvA2rPDSsNEcqC9kntDS4", + "payoutAddress": "RQzJNCWPiuvifwzkkJi6haGjfgoXRS3Lkj", + "pubKeyOperator": "84ba6463cb245cfddf458325f3245e0d3a8c5bbc6008842cab79090e6a542515500217f317d0d9b66496f14c833ad33e" + }, + "confirmations": 6157, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "294c8a4b4512cb50550d502802870c69006b3178aa4701c97aec3399977c4198", + "collateralHash": "ae3fc38c3932c3a0330cc58d82e9ccc628b3d6e85584005dba92262ce56d5ac5", + "collateralIndex": 1, + "collateralAddress": "RXTQp6x3XTU4MvBkKrPMEs6hHygCDndg4E", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.137.20:10226", + "registeredHeight": 176159, + "lastPaidHeight": 190741, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWTZEdYLzY6uBBo8zi9YRYkZafVhrMiNzg", + "votingAddress": "RMbr3vxnPD5mKH8PRhsqUkTFzHEr8VUNjP", + "payoutAddress": "RDnTJoQP5aTsuPrFH5FrJmgQHESzvS4Atw", + "pubKeyOperator": "92db939ec33cb2d7efd3c5d7dbd3c98a64f789e5f496ea5fa7d06a7e70074d6cc888c2013db0555b833f8c06f54bb9ae" + }, + "confirmations": 14844, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6d78b4056db092bb6c77188a831db5f5dcfff586c2a0fdc8e161aa8e04982258", + "collateralHash": "54d56c92eea162206fc4808ecc3c8947134a8e2b236b1de64f678b1e9cb680b2", + "collateralIndex": 1, + "collateralAddress": "RNnkgQc8yar2QNqUmk7yNf8VRT63kypuqb", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.105:10226", + "registeredHeight": 181520, + "lastPaidHeight": 190769, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMsPzf8nxfuR1RGLm92QCi6mEQjhp6VHp4", + "votingAddress": "RFocDqQPohf954KAjVccVvwFV19inrDqLb", + "payoutAddress": "RXAsewBqHTFMcM1o83LJLUjhkB6xDNPxdg", + "pubKeyOperator": "0dcadecd3b73d74c4d6e0cf987424b9ab189d6f7a139b8afd3a8cd11ff0e1d7566b274f5edf9a65fb8c14084453ab727" + }, + "confirmations": 9477, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4bce5f2fa364a121a42a10f1d2d81d904e4b7f7ec0c373cd4b374ff82c704e78", + "collateralHash": "a8d206781091ef7c38771dec731ae6a63fe439654c17248b59945c3d57df18c1", + "collateralIndex": 1, + "collateralAddress": "RHmPcqc6Sj39DDLnt5F8jDC4PoAZgbk1Jp", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "1.117.47.80:10226", + "registeredHeight": 177677, + "lastPaidHeight": 190685, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNWECwdZC4q1WcgBfgXdHckpMX6i4EovNA", + "votingAddress": "RYZQwDEmYWLFsJsQasqS4CcVzoeyEP4iCM", + "payoutAddress": "RRak5PW7p6zi2kq7FikV7nd1Y85DCfF6Nu", + "pubKeyOperator": "005afa06cc609c6136877242d47ff9d5483b5e8b5da5f6fe62dc0ada68eecc017d287e367f6a54fc35a151f1cb4b2fe9" + }, + "confirmations": 13324, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2857c5ac7caacd1b4419d7774d6ab7972e0ee1111db13d92288fe39e719c4af8", + "collateralHash": "3e54ac8b54c158b540a0d1038583d0f5ecbbfc38a3897e058a96b09d9afc04e3", + "collateralIndex": 1, + "collateralAddress": "RY7MA9UmD63LvBpJ9kTiHwrp65AxV46aRc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.1.144.39:10226", + "registeredHeight": 175375, + "lastPaidHeight": 190870, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVTPh6aHPxPCppRoqnuCnY4i2xBcFG5kBw", + "votingAddress": "RU8byHaBmw3fSc78GRqKrAhRAzwkADyWrU", + "payoutAddress": "RQhBzHEtFhomQBvgBJSHSi7Jt8dbCGMgLE", + "pubKeyOperator": "11bff6007263826956ccd4114bcc55817e0fd40a74fd7c8632d0bfc6b16ed1a2cbb6a39de9b26ed803974b5c2591f544" + }, + "confirmations": 15630, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d2cef5a61743c7c7c91aef2e6fdd8b2e3a8f1145d82e28e1db58846005f4a338", + "collateralHash": "81f8f2d64f3c64bfa066e573d5e16770860c92fcc5f99f18fefa9956e5d04781", + "collateralIndex": 1, + "collateralAddress": "RVRjUXoyNk7GoPKCyEERGrEmD4YFTj5tj8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "143.110.150.202:10226", + "registeredHeight": 187374, + "lastPaidHeight": 190655, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAxXQoZg8hTK4usTMZCddvXc1v7VkNNb1H", + "votingAddress": "RCDm4Ar7oq616brkw3RQkSnK5zY8QUTSiU", + "payoutAddress": "RAkKjf53Sq4Prpk8UjHPBymJxLtEJNadwm", + "pubKeyOperator": "93d4c41605ae02b6ae1328e30855351b872c79d33c94d5a87d0f542c28b4d096029afd6e1c18ee7ffe4ddd461ab08e09" + }, + "confirmations": 3641, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9b106235e8db8c02f93e90e119bddc7816c936676c82431464ec910e9064b398", + "collateralHash": "4f4d04f94eafac3b6da7cd22e8f01350bd50b197831645bd08027d91fe6d1677", + "collateralIndex": 0, + "collateralAddress": "RDzh4knRVHDJ8F5pyd4BcAa3KtmfNrPvKi", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.157.207:10226", + "registeredHeight": 176076, + "lastPaidHeight": 190609, + "PoSePenalty": 295, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHNYLZY1HibNNjCz2SuKA6mDbkjYXx99CQ", + "votingAddress": "RRsP9j5vZ5TcSarBLYfg3eCuxoH4h8d3Mf", + "payoutAddress": "REMmkSzyxRZwbZtDJLZLeDK5uFNT89Pdiy", + "pubKeyOperator": "85891a37e6976c5149ecfa584dfe0ddd7baf7f6ffa5318dbeed040a527603e5af718e1b474d697c7d45ebd3160be61e9" + }, + "confirmations": 14922, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5061ed231601ed6d2f426bd2b8a5c4c6a8a8907af53a304fea7ef98b00eb9bd8", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 1, + "collateralAddress": "RAeBaeGu5Yfd1bofEm1sZT4u1ZtFJwha8y", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.237.188:10226", + "registeredHeight": 174604, + "lastPaidHeight": 190988, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPVgppreECVuFGtB7kzpdFCPxxZ4DPgJ8B", + "votingAddress": "RLNEsZLtCiKJsiC5SQJKXMyhAdkeqZUBWb", + "payoutAddress": "RHP3VKiSYH4putQeSKLwr47QDdERa6H6G1", + "pubKeyOperator": "8738f8b3342538f9ce9b65584646d0145d75847e2318411f8e0405d447e168680976bd8b7aa23c56865bb4b86a96733d" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b29f6783ad466e727b3ebe387ff66f35a95ba7a792b54fca84f4bf1c584f2fd8", + "collateralHash": "2391e628b34cc53dc85807d40f9d58783d92c0198e597ed18117e3db7dd49952", + "collateralIndex": 2, + "collateralAddress": "RP4rqhecMnTPEtFKxNncDb4pACrzS2Vv6a", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.27:10226", + "registeredHeight": 189784, + "lastPaidHeight": 190731, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNyAjUWDxxEBcoQxz9mmpVSnszwonxtLFu", + "votingAddress": "RF7vWTvm94HJ6mrQd3P6b83DGJbPrGm664", + "payoutAddress": "RGNu6R7oKL5jkZcAct75b8FheM4fz68R6Z", + "pubKeyOperator": "0775bde828b41f7d243d29e4593d7f08706a67ba09fe9da09a5f2a2488011c7e24cf921a7e5237effe2259460b36fae5" + }, + "confirmations": 1217, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b88c14114cdde88857afe99c084252aaf66dba7b112f7535739c4d38f3ca8819", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 5, + "collateralAddress": "RQbgE7rW9FFpgn7TuuBQAfbTtmMnKEW88o", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.242.182:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190621, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPFyxNwWhKwN44ryHPpMyJmcVTduG6fPNc", + "votingAddress": "RP4TnVNy9fbHEzR8UtEw63GcrXSxiLLWT8", + "payoutAddress": "RCNYZNBckpTyWZcDUdGb55XqLfKNnYoqrK", + "pubKeyOperator": "90ac2782aa0ac80a4752c7c7a1e421ebf30494483077ab25a7e4431c9478158f086c9bfeae1e2ac4413447d1c879fa11" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c0a7582c39ab9ccb54c9c2968edc2176b4a360d72b27564deb418082197645b9", + "collateralHash": "fb16fdc6aa5f3abd8b037d8dcde6523cb1a68c5550347afcba7c1e1ba4419904", + "collateralIndex": 1, + "collateralAddress": "RTVnjBEEBGwj15FBZ82LYLVQ3srUZp61nf", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "159.65.21.9:10226", + "registeredHeight": 175923, + "lastPaidHeight": 190552, + "PoSePenalty": 0, + "PoSeRevivedHeight": 179584, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RG8EHRaUfJDUd6ejQJTocWciRPfyw8nVwG", + "votingAddress": "RJjykaK99GWjtZtVT47De91YYPL44kW3Ci", + "payoutAddress": "RHAxSqKz3qwuGuZB437kTkEzWs1eBqBJiM", + "pubKeyOperator": "076336c0e892e7f6e2ab13980eddbbaa0d0f8a799c1c57fc2ba16abd81c473c87adb658352704fc91aff835a38e05142" + }, + "confirmations": 15074, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5ad7cb084a4e38bea6f91c84f8ab7ab5c206a8e5790dd1978c78c962b7f40e19", + "collateralHash": "f55227e2a3800163dd7b545871839b9c093ce9f43831d1fbebe98969a0216c3e", + "collateralIndex": 1, + "collateralAddress": "RX9ZRLpFeDCTb4sqHKtKKpvvshZgeyFFVa", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.195.148.28:10226", + "registeredHeight": 160943, + "lastPaidHeight": 190727, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJa4qxqjW1sDFaHY1QixVgVSpXeTXSCcgc", + "votingAddress": "RWH6VyTmqUWA34qaFcRfNb6QxppjFx8Wti", + "payoutAddress": "R9g2JvWs6yucn3oL4o1S6M7f7YPUEa99EY", + "pubKeyOperator": "903a852855015ab75dca0b138b4b086a9382870c4349e8724edceac7181b4f7ede9325d456e50c2c9d4dc77781817ac8" + }, + "confirmations": 30054, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f0f2a18c1eb58975bc590d3241b10e2a877b001ce5f0236c6dfab1a91bcfba39", + "collateralHash": "71c735d46e991e2cbba0e70e69502692c008df022bd3cc9fd8ed5cf8736f2c35", + "collateralIndex": 1, + "collateralAddress": "REGG3y5DZdGWZN9iU7QCp1NuucmMCKgPmx", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "195.206.229.96:10226", + "registeredHeight": 174410, + "lastPaidHeight": 190956, + "PoSePenalty": 0, + "PoSeRevivedHeight": 175906, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJLFigdB31cqV1nTu1cixEX8eT5bzBSqaW", + "votingAddress": "RAbdtSuZzdiqvoK4wBMF3wDBNcybpHoLHP", + "payoutAddress": "RFP42BNABiiZfaorUVBfsFVKwPXaHeRqZh", + "pubKeyOperator": "1142ff67855967fe25d82f2475d214b6efb7cc5e7ecd7a6d6a5205ce0a4f9ecbf020249036fb9f4120f0c4719902d2c6" + }, + "confirmations": 16600, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5d21bcc1a95eb88c5afbe9a81bced63d186c3d7cdcffebb5a03e634734125b79", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 1, + "collateralAddress": "RJ9TQ2KwzSWY2PpZyUk7kgqmpmUX984Mb8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.163:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190770, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKLCA3DS7BmSmvjV48LAmjaS6k5ukmM3Kb", + "votingAddress": "RRccodGyyJzLpExpDocz67M6B3y2xoVxhS", + "payoutAddress": "RMQa9domxJwzaCcfkAzbbQuHB99yM2dHBu", + "pubKeyOperator": "08c14ced542f4544f1f0deac1558c56112af1285626b03fb1708aef79dbba213363f24da4f65ca042df0a987306e08f6" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d370bba819ac40711d8a765e6beae125b887174e6db505278cd71380f5bd4fb9", + "collateralHash": "36944a971d4f7b9d162136cd91040a8b842351fb6738f1ae34d5b161fe10530c", + "collateralIndex": 2, + "collateralAddress": "RUABUKtsW3YqXQbM8UKS1n5dYNm9KYdtJo", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.55.233:10226", + "registeredHeight": 182379, + "lastPaidHeight": 190749, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9WA96yokjYX7fJQL4fiDcsL9uEqDvjnWK", + "votingAddress": "RGEt4xQ9tccnsdYTtCeHUcTWjdaJSLTKzo", + "payoutAddress": "RWoz4HpMrcXmaRNEk1WL5YmGn9JhxvVzpV", + "pubKeyOperator": "8146aa8ca13332f934392d9414e168c3de5f6d97d6c78d63a242e9d2deb7c15cb072789a242ceddb87e006258c471caf" + }, + "confirmations": 8619, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "10e2e0ad992d56f454dbc3f252186d7d0bc6dc793cc71184eb43e11eca9fa859", + "collateralHash": "8cb8c29af7f1622cdbeea017e3c44eb2c12c95a50d927af07d13155114430cce", + "collateralIndex": 1, + "collateralAddress": "RJAVgWL9a7QiRFxm6g2oSNLQY1EsNQbc9q", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.105.82:10226", + "registeredHeight": 176099, + "lastPaidHeight": 190634, + "PoSePenalty": 295, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RBVFdfXkE4HTUti8jh8KmWue9A1ZKS65yV", + "votingAddress": "RLZc5vxSozdvg6igx4cWf4jDXLTfuWBdjN", + "payoutAddress": "RTHbC5po3wBBBVNSY2QeV4nA2DKm2neW4C", + "pubKeyOperator": "15a05c88e0e0293273f8eff730378d7cdd1e83e755ed93054a91b9f1100632ed70e4da196cec64cce0e14cec7aad6408" + }, + "confirmations": 14899, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0f5ad10dbbc1d41f0e54e92bf98f8ee594e824c4a40adf9ee64d7300b5484859", + "collateralHash": "6b945c56508e49865a3c03dc1570a457d0dc247de9ab4aaf96a28242dfad437d", + "collateralIndex": 1, + "collateralAddress": "RAFVSaZ1yLezC2jdLqnPvkAaAp4UNVeqt1", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.88:10226", + "registeredHeight": 180521, + "lastPaidHeight": 190630, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQ5tCv17bQZPTiAEMBBkFnGcRQ6MQFtABS", + "votingAddress": "REL1VcH3SspybBXYXmFeMdeufkaSwjjieu", + "payoutAddress": "RBnVu3UEGVZGAzC6by8qr36U8VJTGwiNzy", + "pubKeyOperator": "168ef34e7a4c8210f1cedf75186a996fd65bdc5a11ecd8e7c562b9b0e58ff6b73e249363054b1b32ab47b275735c1ff9" + }, + "confirmations": 10477, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e092ed2776cd9cefec959aa5d8d5baa9bc09c1f816f6f2cdf1ae067b8f3e0c79", + "collateralHash": "98d8f9080ca7206c31b34411402d1d58c470053eb553acfaa749377a6f35bb7d", + "collateralIndex": 1, + "collateralAddress": "RU1zvJyj5yrEASdh3GiGbgAsJNm4brwtbK", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "209.126.85.104:10226", + "registeredHeight": 175927, + "lastPaidHeight": 190975, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUbB7gfHYk4EemkJs6RPuDjXHRK58ZHieu", + "votingAddress": "RS8FruWMauPRQ9ihE3vTNVJbxESsfTRAQc", + "payoutAddress": "RHuVrbc76bmYsUKf331tVgP87yXDCUR9XL", + "pubKeyOperator": "04b2cf31a9f5c0b5ed939c0969cdb66a6386f91b704373d070c31bf13f601d0abc8b48fa6968a3d3529605d98cd171a4", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 16408, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5f101653cd59af6b9a3eb553dbb04fbd98566ccf491fe4cd63e2e4e6b6b05879", + "collateralHash": "4f69dc7f087b96d01a3a255d52b92fe54f0e71b103d09971b53c9c626f3db74f", + "collateralIndex": 1, + "collateralAddress": "RLX5j9SnZSkTSVjiCwdRB4vNgCmkwWSYLH", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.140.105:10226", + "registeredHeight": 175954, + "lastPaidHeight": 190977, + "PoSePenalty": 0, + "PoSeRevivedHeight": 187677, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHUW1PLFnXwQqeQ7eBaYUdXYmS88vfCjyy", + "votingAddress": "RMkauk3Cqk5fMmPfiuYP6Hv4NF72dfzGaE", + "payoutAddress": "RF7W5NmPYcQfWLNpQtZH14AtuyAmaGMCJP", + "pubKeyOperator": "11ded4cf74c2491bf995c89fe1e0c7ffae43ab3b5cda95f904038fed95051c4b45f9be52f737cc45628e807f27223a03", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15057, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "584a566ca12b55e38414fe2c237536150444afab83d1c634fcada5c6803a8519", + "collateralHash": "ee6597dff3fd143a421f84e189aedf63389696a31434f072e39d749b4f2b8f8c", + "collateralIndex": 2, + "collateralAddress": "RQh1gU8CPeR7nAAgNv1nV5CTUjJpx1Xa5M", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "66.94.123.178:10226", + "registeredHeight": 180164, + "lastPaidHeight": 190710, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RL3cTGW8mjwMcvGrDr34Ef7MdYvkRfXpMJ", + "votingAddress": "RB735txKhe6kYLjEmxSXmWFMNz5K3Rfdxt", + "payoutAddress": "RSh281PnkAMViJUDF6XajBouHXZTdbofSn", + "pubKeyOperator": "0f36f2cde693a622adb77e33f4247b539c819df02ea0b888ea1a69de877e330a85f21125e2ea25964a7ac818113ad26e", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 10854, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "06c8a90e1356757110133c603e6578344baca832beee7a27707868638ebdc519", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 4, + "collateralAddress": "RHUGACaPKcLebzXVG1XTUzbtjdAoo7xf9o", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.75:10226", + "registeredHeight": 174910, + "lastPaidHeight": 190809, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHDS2yipn1VmBiTVV5SivGDTuFHJ9JauP1", + "votingAddress": "RToCY7gH953SecXnwQ8h6yQK5HE6zULks2", + "payoutAddress": "RBFh764dQKcJCMrqZ8cKjgZJSUHf1P1c5X", + "pubKeyOperator": "161fe8f3f2b1c5c8a1220efcc55b6e1ed00559defb2a90180bfffde35138f2c8e4f278be8c4d7965be4ef6990ce83b25" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2a3fcb13badd683cd978e9d87cbb38e8787830329994447e9c4a3ba986997519", + "collateralHash": "c0336a114f15bfb6347ecf84c5a03514c5c359a6a58aa57c1ddd11a2f0102ad9", + "collateralIndex": 1, + "collateralAddress": "RBDQ7yZjWdC7QZSaWAN6vCScRqmfpDzxsn", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "135.181.206.47:10226", + "registeredHeight": 177437, + "lastPaidHeight": 190873, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RC13W4RADcV27P357paYSMNtyKGvdbEYxA", + "votingAddress": "RHRpQnKTouKp9oDSh2coa5j36WoAJqLYJW", + "payoutAddress": "RWEJsJ8DUZBmYcLaYmF5kNbeGjXGf39BmA", + "pubKeyOperator": "8fbade7ec56befb7334a03962b40cd2d0ad7d7c98f5045260bd85814091f11773d2b6c722e60331a5daf1f2929750c4e" + }, + "confirmations": 13567, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6fd0e9ddf2daa7ecdcb501640683ba817140dc7eb69863c5a2df0fdb503e19f9", + "collateralHash": "5452a84c2764731e17a4a8053eab891c85deb5de4613d64dc18f426ebb983bdf", + "collateralIndex": 1, + "collateralAddress": "R9piGeEkKiCe1vLqNszyp6ZyzRjJYAsG4K", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "79.137.17.214:10226", + "registeredHeight": 176713, + "lastPaidHeight": 190889, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXpgMRPEJhwxXfBXPg8c9zkaa9qM5jfkXq", + "votingAddress": "RRhtMN3beoSepLhGn8LCvKaA9bARyKtLdB", + "payoutAddress": "REjw7HpnQtWtUsijgQQhAr31J2LoEz338b", + "pubKeyOperator": "18ae75ccc463d7b10d4605f4cd595a9a2562e5981ae67793bd3791d93919ac6e8206d32f99a9f9db9fa94c73b0910797" + }, + "confirmations": 14285, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "41c567b6e68af91506d58664ff0bb298d4feb00143610b7479b6e63641e935f9", + "collateralHash": "8dcd58d941b350c827c08ca217a27233096dfec8bb80d4a29680fb26ddf6ef60", + "collateralIndex": 1, + "collateralAddress": "RJfQsscNeBwXzDvM9nBAsfSDY5P8jBChod", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.133.239:10226", + "registeredHeight": 182512, + "lastPaidHeight": 190888, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTKLpx7z7EUET1MFipbk5dN2UvtUbhxFDv", + "votingAddress": "RK43YZnBT82pM7U8cGDnikUNMFEMyRnwuN", + "payoutAddress": "RDb2mfzw9rE7of96wvQjXNmwgEuLQ43R15", + "pubKeyOperator": "8f239759000a2354875e94a8f0f76e120285ac0bf29750aafa4180de00bb038373937c61f818fdd5de0a8459d4750caf" + }, + "confirmations": 8485, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8c0f448af32fa91665b35109f2aeea466bed197c7d812eb8b96edb623427d279", + "collateralHash": "cbe171f7bed09c95c13f86a2d2decd9744c1c067c5fdb6732116da6fa6da539a", + "collateralIndex": 0, + "collateralAddress": "RGeeEt2Jab4PxgsF9YHapMii2pVeCL35WX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "50.116.47.142:10226", + "registeredHeight": 176996, + "lastPaidHeight": 190798, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQAnRtJzyhwKnHm9tLP6ZLFAKANk1J7Zrg", + "votingAddress": "RNFQMtapdpPQALNVy3gfkX339ghJ7ACxAR", + "payoutAddress": "RE9NbuErv2YGpokdph3DyKKVZHvpJv5jyC", + "pubKeyOperator": "037e8c0b9aa9901f8e81e692e4fa8a63a7c99acf368de21c228d32d12a5ab02d01d964f945659ee7851fb255c68732c3" + }, + "confirmations": 14764, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "169da80736916de165310cbdd02df75e613f4c5eda05159ddd8231529f05d01a", + "collateralHash": "5f75ed45ae616311a4055efd951b499f7c02ba41c586111d7c2fe68103b6e1b2", + "collateralIndex": 1, + "collateralAddress": "RRmaecoKdG5dEQyV9dtALCKs5RcLyMZ6b7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.163.190.229:10226", + "registeredHeight": 190800, + "lastPaidHeight": 0, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKMyJ6Bt8FZmnLchawYGZZJarMm1NvwtnX", + "votingAddress": "RRNDM7R2juLzko8q8ZFb8R7DfbRxN8A4Fp", + "payoutAddress": "RKt5kXM3UqdmVemDr5B8jdkNT4oYyyaJdk", + "pubKeyOperator": "96e3e7f6340e443573f9b96364bfd97cc12c244cdf1bc149b65c7fa5a49412755d3027a497cdf2eead2099e96006e72f" + }, + "confirmations": 234, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "bd153e82833b963c01bb880d9522098f6ef7b19a961969c73aea6ba2008d007a", + "collateralHash": "5a5d7ca961d05ed99ce2a21aebc915541b83f22c727add4f5b747062cf537643", + "collateralIndex": 1, + "collateralAddress": "RCTt3EPDmw4kv7NoDgm68sfqWtU62Z3D4L", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.216.203.172:10226", + "registeredHeight": 177437, + "lastPaidHeight": 187532, + "PoSePenalty": 0, + "PoSeRevivedHeight": 190942, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RW3gqZodAw9VGtnK3qwA5BJn7X7yLLwKCf", + "votingAddress": "RWiFJE9ja653zfrzYczP3AbVdG6s25w843", + "payoutAddress": "RWtHNTaNrXA4VB1RhjYUDaemaEnbrkFKSJ", + "pubKeyOperator": "07e6f83270ef5c8aa53a45bd041e8a94049982c4e53c7e049c7df700c1c3c1bfd69726c22e2a29697c54c66ed8cd1786" + }, + "confirmations": 13561, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b58da7210c29958def5f00629353d7f1f5067e9837cba70636015da48514509a", + "collateralHash": "ca745fc59954d24cf42418672107ee028cb36244e73f75378e03948e5a3f0142", + "collateralIndex": 1, + "collateralAddress": "RXKo8QQQg2hzjzKKvrkfwnwhucDgHLFrpJ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "121.5.164.98:10226", + "registeredHeight": 182633, + "lastPaidHeight": 190550, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REJj6mUCC9hfuwN82Zf6NC9rFXKLy1Cn7Y", + "votingAddress": "RKHBU18jULRwvEDakipkMCeKXMQUVbnixP", + "payoutAddress": "REo2m8XAQRC46S3c9NvbBs23NTJPgTAqgf", + "pubKeyOperator": "869936b5c030ea5133a5f2dd8cf686aa49251d86fd7d52443cca4422162d48b211c78ca776edc467329e86d1941c3c51" + }, + "confirmations": 9477, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "39d34d49634ea5407a4801e269fcefafbcb0d1533fa53ecd724f369d720d691a", + "collateralHash": "f4ffcb60f0ac157759e281496610f0c2cce509e243805f83841864a1a64e5b9d", + "collateralIndex": 1, + "collateralAddress": "RRdLhM6vGunronArZXwcVE55wB6zZGivPx", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.7:10226", + "registeredHeight": 187618, + "lastPaidHeight": 190910, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHZYifWsC2ALq3KpNXD3rxj4LY8B1vSyGu", + "votingAddress": "RUQUTMMFdSyCxAj5vZqR782LBeN8sZur85", + "payoutAddress": "RL15xXacGTJPYCt14tVKbuJYadhbeG1Dq7", + "pubKeyOperator": "987428f56efd6e25db81c2167134419260861c4e594fe3782ed124ba03524840ed4bfde7d5337dcabef12b06ce80d5a4" + }, + "confirmations": 3378, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "80fab492fd181f33628ab157cce19b846695379a05d2eef9386e88a3bde0131a", + "collateralHash": "1a9c4e05b93187588c8117da09e1b7afb78afc9e496c391cbc5ca86d5ceeca66", + "collateralIndex": 1, + "collateralAddress": "RWejgut18nHmVFV9unVw4w4hgiCho8Xu3b", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.15.247.247:10226", + "registeredHeight": 187105, + "lastPaidHeight": 190869, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYD1YPAMRaiDNmywZ6YbMBaLzmD2a5TDDB", + "votingAddress": "RUUbSJYRKQHGwtx5j5xsvRL4Go5qoeN9xM", + "payoutAddress": "RSSmULK2tFXcjgow8Ppi3G2h5aVyPcQMaH", + "pubKeyOperator": "19edf60f1d7e1fc76a6dbc88ee1e51688d95d14c27e46213929da995b053bbb334f39f7bc5e18ff4813b6068b7a767a4" + }, + "confirmations": 3898, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d7ce5f60a55f0833fd3d19dbca01ddce69cef79a9ab1b7b307a0f3b77d3e803a", + "collateralHash": "577f7b0791d5df24cf8fdc4e7f43331e55c2868486d8dc95687dbcdedca97315", + "collateralIndex": 1, + "collateralAddress": "RRsWD5ezBAUJHGY4iHCwgEeeDRbP4fzjP8", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "165.227.120.18:10226", + "registeredHeight": 173960, + "lastPaidHeight": 190785, + "PoSePenalty": 0, + "PoSeRevivedHeight": 189365, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSCRvCfMVuSKd6ResPYndFX5z7ihKtJWc7", + "votingAddress": "RQcRDcnVHBfuhPJu4h1zKqJXwMGJZhFXx6", + "payoutAddress": "RYLmbmpBNLW1EP9v42g3r3MuwkMuSfK5Rh", + "pubKeyOperator": "995ea39e89d6bfc628bcd651e38d651c8eb528133029d3fa38878685857597276faceb3f139f04b0c0f182dc72bd9e77" + }, + "confirmations": 17043, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b9cd074be1479db2c34ccd6532adca977ac1f50172dee8dd8dca31ab6f15f83a", + "collateralHash": "c82ee8713b3800ed16f31fe384e5512f7bebec008a30e3939733b8e9c48ddf39", + "collateralIndex": 1, + "collateralAddress": "RN2in2wkfKMPfZ6zCiEB2NmAnn4W2XQbMi", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.124.7:10226", + "registeredHeight": 181973, + "lastPaidHeight": 190794, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQBsLDckfnnqX5efyKbo8mDgWadmefdefN", + "votingAddress": "RAXDjKkvoL454yCTTU33ktKCx6hnKaQ7Va", + "payoutAddress": "RSqmMCMmRF715J5Pw4v8BusifVq6tCekgY", + "pubKeyOperator": "0358f18693cdc686a7f163930bb08ef0c596ce2a912220926c64ca17236a1e46925d67b458522443879fc2cb64760fc9" + }, + "confirmations": 9023, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b7d2875f9bc5a6526abd51e554ededfe9ccaa2715bca0ab329f93a7d00cb7c3a", + "collateralHash": "af6cb38891b809b5ec4fb28aa58d02f4615140ebf67598529f88d55468e05739", + "collateralIndex": 1, + "collateralAddress": "RBjMT1FPDhhbhoZQvichQHTLdaZR4GmnN4", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.10.134:10226", + "registeredHeight": 174504, + "lastPaidHeight": 190903, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKeBTLwXRzGztq54Kit4CfHYwxw1gjgVz3", + "votingAddress": "RPHLEUhTGzRArQ1oqLDWGek3MHKQko3nJp", + "payoutAddress": "R9RE4aPiWxMQ8QrgchNb6PASVf4dqzoV94", + "pubKeyOperator": "12e1fed867254c60e9142491575799eee34b3ebed0a2cd5ee5919b8bd4be146b015bf85b729141672e605d0d496087e7" + }, + "confirmations": 16496, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8117701756a9d59f2c6da3caafa0e93f42ac558a21970433c4f418e35c5280ba", + "collateralHash": "c316b0a1b275e12d2ec178312c65e7e7f41a43f9c5244419cc466593a000a2f1", + "collateralIndex": 0, + "collateralAddress": "RPsKESPtnmEmcQ37WpYYcGYekBefk1n9LJ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "78.47.58.107:10226", + "registeredHeight": 176116, + "lastPaidHeight": 190663, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFYS8gCHK2T9if6fjpCFVKqxAw9kTsDrf1", + "votingAddress": "RLhYJdSjvPWCaDMnHcvmesrtfYRYTzHFH3", + "payoutAddress": "RCSS5VBBq315mga25wFFQ8CXjFwiD5yMXD", + "pubKeyOperator": "129fb49cf21f1596d0ccf8a84929489231ddbdbf0d6c4b5de47e78cd169906e2ee04fd7b8ba1927f23ff748c80082cf1" + }, + "confirmations": 14883, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a20fb03c3559cedcd28b144f7d35df9656b0a0fda1285b1e2be5db2df47b84ba", + "collateralHash": "8ddf98228ee5be9834516c5c087ad548ddf6e68a194ae3a7cf0b93eb295b0f23", + "collateralIndex": 1, + "collateralAddress": "RCjqZ4SrkMRv1hUr792Z6UtYrotvX1qQ1o", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.157.57:10226", + "registeredHeight": 180162, + "lastPaidHeight": 190708, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVxNpCHGAY82gKZQh8khpqcsUfWF8aBZF9", + "votingAddress": "RBR7Bh1VK1uNW3tiZBCgpf7PJF2XZTvYNz", + "payoutAddress": "RSh281PnkAMViJUDF6XajBouHXZTdbofSn", + "pubKeyOperator": "8550152690ee60164c6db2876bf88b54d425aa2bdd5e18f4c1abc28e3bd116189e0f93498aefb621da3123f78ea4496d", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 10853, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4c14248e61ef7d60e66f6ce7dbfbafbe2474e186e0cbfab022b440ddae1388da", + "collateralHash": "d438bf143466b525c3028a2a21dd9feadb048af175a27c8ed3ce424d83ad8df9", + "collateralIndex": 0, + "collateralAddress": "RFphRMpM5WEAmdwNvzh9vbVJcUGQaJQH8y", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "78.47.177.173:10226", + "registeredHeight": 176122, + "lastPaidHeight": 190668, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RVsjwSiZFTk4AxdoM6J2PTXL5NWcyYPLNk", + "votingAddress": "RBtVU6VxnrQEDS4MUsbbHEZtXzqWmFw38X", + "payoutAddress": "RTPpxUGBQ9K3QbDtuVawZkrpY7LMSfeXAP", + "pubKeyOperator": "8785fd3fdb2ea6242c13b58417e426d0ca99025f856492ca4137a68795f17245fc0ac448ee4c90534216763e93eb50c6" + }, + "confirmations": 14883, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c7dc2e479f7d4e162493d89f354933d04a42cb97896d63ce8f3059fa389418da", + "collateralHash": "e14776938824929da7c57bc36809f4fa63a3b8deb8aa4cb866e3da1ab3b810bb", + "collateralIndex": 1, + "collateralAddress": "RGn3HiPQT6nfMcEtJUyGRcTV9web2zbTwf", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.154.161:10226", + "registeredHeight": 176660, + "lastPaidHeight": 190829, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDiygk537JZqHyhMkSgLBwSD3dRgk5zgxN", + "votingAddress": "RVGLqvWLfoFoFTArtXfZc36TAS4daE9Bw7", + "payoutAddress": "RLFSXUbvhqYLimtcnHcaxgrwQ811dtn5To", + "pubKeyOperator": "0ae2a343094ae868ba199cbff06cac7dbe13f4f68998395fa85b6c81d5befb08657e30846a5a1b4e21728143a03501c3" + }, + "confirmations": 14336, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "35b8d9abd793c3b626288af7d08f71e1d88f75780de7dd1e086ffb81733054da", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 6, + "collateralAddress": "RSmnR61BcEHpBEVauNdsHujEQK3bqoXTcd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.94:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190945, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RH5rKMuv3qNrDCz8JRXpFDfSHXW1rB2SC2", + "votingAddress": "RG25QbgtD53x6V7sPEvkRKNQ6nXeiwd59a", + "payoutAddress": "RP9L5qKkgkrNhSKaYUwKrfzaXDQgTrSEsy", + "pubKeyOperator": "14fa59914c53d4b2e4b7f55c6e1d7c97082679333eb13dd4c9af8e60445660799ffe42dc7207aeed2e8cbef341fa299f" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2f0ef54d193ddc54a09a95905262eeaf6a79e83292df655d07c80c30486b165a", + "collateralHash": "2c779d348593c3c646424e3861e0fd350c035e1b1dd8eb69d78e83d38913b39b", + "collateralIndex": 1, + "collateralAddress": "RBUMkEaT9mMCV4n9AMGhQUKHembtDwzbZo", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.63.1:10226", + "registeredHeight": 177437, + "lastPaidHeight": 190875, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYLCuJLRWLRYDBjTk8SQxExQHfT8v2ALp4", + "votingAddress": "RNhPphu9bGTMbQ2qqJHxYEWLJxnXWQ7YqG", + "payoutAddress": "RD8ZeSw6KUA1FDd7kScMiyRdM2SuGh7LHt", + "pubKeyOperator": "0587fd3d78ecdc74466e134e733eea7ddd336e6ee419bd95147782864f5222286d4e9f8451a55ebc6bb4eb74e9ac3021" + }, + "confirmations": 13567, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c173887a589455710b16e4a0fd3a8cc5c00a147c0cfdb3f0ae2c43c5940d4a5a", + "collateralHash": "f4d5431194f08c210d8cf088ad10e4e93976ebf8a1c23e9c8b17116b9ffec563", + "collateralIndex": 1, + "collateralAddress": "RN8rm4P6fQD8x2rMEYMaPshdKEkpC63Hsh", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "147.189.169.132:10226", + "registeredHeight": 176699, + "lastPaidHeight": 190865, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAZU2jD49Z38tHgVhimDqGq38FpQa2wSpv", + "votingAddress": "RDpv8XKWNnAXLMhhkTduv3UhBKwbZPQ8Kv", + "payoutAddress": "RMEStt3zhpSbQnXjjiG9Yw3oijyWLKPnuu", + "pubKeyOperator": "1669085aca2bcecc235909616d622c2a1f9015ac5aef6e5f6814109b8cd8d76a6ca345dcb4805d8a75eb8427f0cb3cef" + }, + "confirmations": 14333, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "25b691821899ea294d49d91fad4b9f9777012a67f2775af4fb17bcc48805fa5a", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 10, + "collateralAddress": "RYZj6MfcDgkFyqd2aCqcQkogYB7ri3khXg", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.155.163:10226", + "registeredHeight": 174965, + "lastPaidHeight": 190912, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RGr5BeWxX6M13o3ZsZuNMUxGnck8b59gnK", + "votingAddress": "REuwmAZr129u8p9XZQ5a5rPmmqSYhVXN3n", + "payoutAddress": "RD5PCBEw7WGxaGg4JUvUeJ9Sfhyd5qEX4V", + "pubKeyOperator": "9764ee59c58cb0eef6f245d68cc05f6e0befb9535c8a530c923fdcf42efde979d30e1e6ba2b87dc3b867a6671ae2c0bd" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e80b30fe5e2e96f626fc50d735f3f2f3b4d9d9574ebf26f12a6dab6e2fa9aafa", + "collateralHash": "2c05cd9161e48187a83c4d186a697feff388cf33671d87c04fb86ad559397d09", + "collateralIndex": 1, + "collateralAddress": "RLwT3Aqn1j9pbc8D1cpvWVAYDnxFNUuo2L", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "54.234.114.109:10226", + "registeredHeight": 175878, + "lastPaidHeight": 190929, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPdYSdVDf1RYo2QHgWejsb7ofa9PiioTkM", + "votingAddress": "RNYQrQcHCwruZZftVJxUU5KW4sd9ueXYNA", + "payoutAddress": "RYVdekVfxJhpGZJjDnkKGHYvorJyGU9oDt", + "pubKeyOperator": "92e7bf055e01ce80aa6c24554816bc989f8594f1dc0203bf5d896c2a75158322432994426c4f8a58f4a3b75c9b1d1fc5" + }, + "confirmations": 15118, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "eb0067f4891e02de6f9ac774803fa0fe9a40776d7d1383b607e044018fc652fa", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 5, + "collateralAddress": "RLmY6U8yKi1QtF9myqj6HUgrjMsacMB27r", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.50.58:10226", + "registeredHeight": 174605, + "lastPaidHeight": 190786, + "PoSePenalty": 0, + "PoSeRevivedHeight": 181968, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDbvC1v2o4pxBrA1chVFbvTWooA2fgGFg8", + "votingAddress": "RLft22rhjYbZYw24dSN6UwvbgxXynMCTsP", + "payoutAddress": "RM52uYoAHNsef9f9MjqGZXeWDb2Hoe7uWC", + "pubKeyOperator": "171297c912bf9995a1ffd211eeee56994dad7d1e3eaac8a9f79f50d46e2e14d46bba6ac381cbde4368e470de6581c975" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "73ccfb8c427d998c341cfdac0730e440d4977f0fa6c64c3db15494b6b90923fa", + "collateralHash": "43252e01f610df76834d27d8498eed47bf5686b5bd56896498f2a2a11221a3a5", + "collateralIndex": 1, + "collateralAddress": "RQrbCFwcJN8pUr7D9zt8yxX179tgYqXrVd", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "54.38.158.51:10226", + "registeredHeight": 184792, + "lastPaidHeight": 190897, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSNxYnvVac1MY1BPP2osR5ExiS9ytMLrS2", + "votingAddress": "RJr1geNNProYHNcmhcVwdaTPwi2h8xHpxC", + "payoutAddress": "RTv5ygsxNmg2mFYe5ETLTYahSpnjMs8p51", + "pubKeyOperator": "112e73f2b572ce39ef67389b61830ca884ff2b2ecc0468bf3234be10dc61e4af6abb71280d45df92a1806bac7238e355" + }, + "confirmations": 6214, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4c751d5f6546df29287257a5362b745bec8bfda11b162d8a0e43208f6821cbfa", + "collateralHash": "bcc379e1b9c2f4296c70eef26d91421f59e6562f296ed8a8877e2575f8bef6ec", + "collateralIndex": 1, + "collateralAddress": "RJB3LadtQa5Nz9yyQUdALFD44qmNBt4uZ2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.89.149.155:10226", + "registeredHeight": 177307, + "lastPaidHeight": 190739, + "PoSePenalty": 0, + "PoSeRevivedHeight": 189319, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9vQDNrkJYqU89ZryA96Q7Foki1zzhbtUF", + "votingAddress": "RWdVjhsq41K1ZbBFRrBKhrT7grgVKYtnxc", + "payoutAddress": "RSkL7SHZ6k5689UBxw8WA79ksNmzEY7xJC", + "pubKeyOperator": "83ff83d3f58fa557dd98e8c506206c2957a34122fa84aa75f75f5b46a5e904f2074e0559b93de886690017e66da88faa" + }, + "confirmations": 14212, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "274350b99b2b2c0c9968116916b1ba0de69807cae7373902211aab43a1e5e81b", + "collateralHash": "264eeccb19931e47935581eeb541fe5248de19ff2adeb0345e9f09cc37c3cb34", + "collateralIndex": 1, + "collateralAddress": "RFgbrH1Z5wSJxDMEESEKvNpxKyVvS6fyWs", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "207.244.237.56:10226", + "registeredHeight": 175171, + "lastPaidHeight": 190603, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REN3bSQbud1muzbFHuntLA32NCn5p6MPMj", + "votingAddress": "RY51t64gBVgQZhCAsT8pA7uJh53dUR6djW", + "payoutAddress": "RSGJ681JsxsZ8VVakSDupP4CCFDizagS6i", + "pubKeyOperator": "8ad5595a30616fa9284be8e5a3d3da7a62485d2831e66d8074dc843c3dd40c09ab3aef834cf2c269f8b5f75c4cd5a2b2", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15834, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0356a6384e5e3b31fd61647287bf9b0fd4bcf5cbc4358d308285d5c770f6b47b", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 7, + "collateralAddress": "RNhN9MVZkbC9Eh1FFN34HxpszzqeRHakVG", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.121.138:10226", + "registeredHeight": 174910, + "lastPaidHeight": 190826, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHJARzrTfEeFZirr19xW1xv6PwioCyp8p9", + "votingAddress": "RL3YknDSSFZaDJV8vjCxE86n37L3RpbV4F", + "payoutAddress": "RRVcBZGq3bTDajsw3cLCfUCSjoamGmvHEj", + "pubKeyOperator": "964bdf52ee6c4f0a3bec3e64f3867f9807d6b1877ef58b67e68477087102238cd9dea6bea0a6d46acfedc0fe6fab8334" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6af4df42f2fcc345f6f04c5855f0042284c2c76154c7f81d08c919d7b085953b", + "collateralHash": "b7f3330b5a3502311a9b0f21a2948a0b91d6b29afa16fc915e788225b679c8ed", + "collateralIndex": 8, + "collateralAddress": "RU8APYq9TX46PoXLSvp54vS4hbKvxHdjS9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.133.240:10226", + "registeredHeight": 174605, + "lastPaidHeight": 190989, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCH7VKfALNkGPAAsr4W9Q3jmteHTy5P78R", + "votingAddress": "RFchx3Hx9pDc6fXS6NpKVkGDRVvgTcyGez", + "payoutAddress": "RHBgosdjTLZk4vPdC3YMksSk4WGm487RQ3", + "pubKeyOperator": "09c717e5e8e50fd8c86e42163558a61a6770fa58dd96179c675c9b6a8380ebc615f2a76ec65a9dd26fbb75be84664274" + }, + "confirmations": 16392, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ad6827ac9a950b3bcf0da582294d41475ea5ac505653ea93b166ff8f2102119b", + "collateralHash": "4311de62e377779a6aa33298647770793708355f2d727c90602ceecb33994e28", + "collateralIndex": 1, + "collateralAddress": "RKksACcAxphtnsc46vdHjJoKMjtEEaK43b", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "54.37.235.136:10226", + "registeredHeight": 176374, + "lastPaidHeight": 190518, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLu8ea3K9o6siMXWWsu9okP76iPfHYj1Ke", + "votingAddress": "RCack82DsCV5iQvzF8bnb1tmD4jKkoPAtU", + "payoutAddress": "RHe9tEYp78M13sfcH75D37CNBfv9Qf3CqA", + "pubKeyOperator": "91c4a386030ac05b7aee5a8ec74f9d214f998580a3a70d15aa5607423a9743f021146acc16e6d5a288961c4370c4bcbd" + }, + "confirmations": 14623, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "3e3213e28363930aecf460a0b87509ec3c6d02ce3169829303b31248a5d9761b", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 8, + "collateralAddress": "RU2cgW2tpdEmguTwQzv1XtWo7hr6AYmLDP", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.82:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190766, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDK52T3nM7pzDQm7RukVci1A1FpjWj7ev1", + "votingAddress": "RQ83KTxsLhhLMyoVbMstdmtgF7nc11qT2R", + "payoutAddress": "RBAx7qhmpdQykvhey5AduPu4hAiCy8wVMj", + "pubKeyOperator": "8a93b8989fb3fde04ce7ee0d7d2b56a9c71591253102ac3c0476934a7974896fa1140c2823fbaa43f5951b9501aec417" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "139c3e161dbbfd6f68807c9b540be8a691b8c0a42a580ee41dede3efb07ae69b", + "collateralHash": "33af4f9562709029dc73d0107a1aa467e5c47cdbfbe2ab68320d1c8337f90014", + "collateralIndex": 1, + "collateralAddress": "RG9vupztUj8gey4NEimJMFNsCohjAkiMUC", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.124.3:10226", + "registeredHeight": 180089, + "lastPaidHeight": 190627, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTBQN1BjWwTaN6jDCWUDTTZzgNqdNhFF7s", + "votingAddress": "RBVMxHVADRBikC818P7WWwhSrXosn98Erx", + "payoutAddress": "RUZ3D7DGjxgk2nRdEy1in2YgtEFULDLLDp", + "pubKeyOperator": "04c7c9de224e5d7a9a659e17c58a0f10b2a89f180bc36291c01eaf6402b3aa55080695ad7fdef6a35c8448fa6280866d" + }, + "confirmations": 10908, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "02d055b4920838e2434fc8f1aa60cb186975b7224a1b0662b34ac7c270662b5b", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 7, + "collateralAddress": "RT12dSE1uKLCKZo21JGvAGV1ELZcHv1tgc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.123.103:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190886, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYXdDqwSoujqYDUzVgRevDMSvVrwUGkHyW", + "votingAddress": "RHREMnyu9NgBdwLJGMx9bJKQSzC4UZ5qQj", + "payoutAddress": "RR8EnJCURA9YNhEHgHVTrSkthmmXJaZssz", + "pubKeyOperator": "9784c587fa2bf8921122b5539c0fe62478008e80f540e550b1681d0c069e078073816c77e387318a35602d82127f9305" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "107db9a8787454cc740b50d0a6e87a8dac59c1a2413224f3ee3c7ebd2f96d37b", + "collateralHash": "5273da7384c1acf4e298c620b7a091ff6723b1e92b827a7ce6f0a3083b14ae3f", + "collateralIndex": 1, + "collateralAddress": "RBMbfwJbhF3DMpjoabpdY8w3Dgh1oGYrKy", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.146.110:10226", + "registeredHeight": 178162, + "lastPaidHeight": 190804, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTwRyjY9ZV7U13GmrViBKQaTFgD9TtVTug", + "votingAddress": "RBD3Hj9WQ9rNXSZ9kBCPpTZZ3D8Q45hUEx", + "payoutAddress": "RXMVZdGxNSokME91jZTbYriQLqr9XY9emq", + "pubKeyOperator": "13ea5eeeccc97382d1e2c8e2b213f4e0a46e7ac70fa0d039cd9202a2bd208f798f9abc6b1f25a5b1909ade25e1d0359d" + }, + "confirmations": 12834, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d42ac3bff46c9dd14d51c26763bd78fce790e135dbe619e0b2aa4de6ab1018bb", + "collateralHash": "0bb0f7dd8b22f3fd0b5379d0e05e59de1fa5fff9c18d6ccd456ec69792f12485", + "collateralIndex": 1, + "collateralAddress": "RJQXaycEv2LXaoNhJEABQvWibMjCLp3Sos", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.107.122:10226", + "registeredHeight": 176205, + "lastPaidHeight": 190818, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAyLj24ccN4USwz5qms5jidkWqhehTZwDP", + "votingAddress": "RUSwgGXqG2Z4xB1UzKh13uA8vtfpJjr3wZ", + "payoutAddress": "RFf2Kwi1SvbhgL5MeLNA7jkiQ7GVZxUSKj", + "pubKeyOperator": "09db3c34c0415cecb3f57e5ef8e562ffff04c0773f2497998285106b6c4906ed15c0df41e1398c4990f35f2bc831ea76" + }, + "confirmations": 14792, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "86647f03acd62845ee0ff0e49b8034e1aa3aa9c38ffa8602718c46ee4170ecbb", + "collateralHash": "e3c2588b95d6c1edca0b18143961a028d4c0c86ffe85422d5359c83b69fae820", + "collateralIndex": 1, + "collateralAddress": "RMzXpEhDdh65vsuNJgjnPju1aZji7tBXZG", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "155.138.163.233:10226", + "registeredHeight": 176633, + "lastPaidHeight": 190789, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHBGucBKS2G4T77bqauuXtsYMokQzMH3aa", + "votingAddress": "RLzJvkimyJfQj9AjWebJrXrytFCxLaNkYC", + "payoutAddress": "RNhmvDbdt2wU3dXQfnGxWHPdGYsfqqi3dh", + "pubKeyOperator": "19936a2f57ee25b89e8c3d40844f822204a29335813fbc95495ec3a8c88c9a88860d870d65bef9e8dee7dadbb20a819a" + }, + "confirmations": 14388, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9ea5400dc78ea0e8804383a3c87e1c6689fb7cd2955e4bb42209a899cd8e2ddb", + "collateralHash": "be58e768b5e06aa0a364c4795db2e7f11800f3bb03322c7a89a517d59c1d5167", + "collateralIndex": 4, + "collateralAddress": "RHFZ6eacniBdvQbBhqJz4ssSPYYtT9wkvS", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.156:10226", + "registeredHeight": 174881, + "lastPaidHeight": 190764, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWw3GqwNmfmbYp94tKDREpPEqM1aNvv8tY", + "votingAddress": "RXii9W18DbDzCf3xQqb33XZkeXNaEemJDQ", + "payoutAddress": "RPdN4xNYCYm9ryS9DTHgwfP6W6BQjR3eZv", + "pubKeyOperator": "80da754740c15b0cc1875d0dad1d721e1e19bd5ec8aff431c60a67ca788eaa173b36ef699fd1835d2110426710c2fa52" + }, + "confirmations": 16115, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0d3d8a3093bbdfb3c49acef519a1eb462f1d4aba78e305f1f07d4c35db60d1db", + "collateralHash": "848987362c13584fad97c78aa0a68d493a7bc2b9411ff2e7aaadf41f69446377", + "collateralIndex": 2, + "collateralAddress": "RX29n2ymW3suJbYLtrK9d9UfCbGZAt2n4V", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.176:10226", + "registeredHeight": 175320, + "lastPaidHeight": 190808, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPrpM14aBimAgLUUtZYtFisZN5JKwYRBo5", + "votingAddress": "RKjD6msM2nhSAqX9Lhb9sKTXMv3d1HhL3K", + "payoutAddress": "RQvhzfbRbSHbTdZCAWmoGn7ARVnwMw6BYb", + "pubKeyOperator": "12ef2139087a5bb8ca603043dc250794a31c61f4239c2160f85d1af3b953b70cce0740c338a8f9c940e0ce0c753b1921" + }, + "confirmations": 15677, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a647079d2759cd97b58b0077f3f9eaef64c4720eb46910118cf090d690605bdb", + "collateralHash": "e1cb6f77db14005fbdb8070917ace45528ce5609f40bbb8d945655e996161352", + "collateralIndex": 1, + "collateralAddress": "RANUHvaGxrnFLzkvEXQePYzqiaqNf1Xuzj", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "209.145.57.251:10226", + "registeredHeight": 174651, + "lastPaidHeight": 190562, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTXzbQQwMkCYoCRTEPtjZj2cXkEkHgJWka", + "votingAddress": "RY2xK3xAkAorQMrs81Pq5XhRYC4Dzu9pP6", + "payoutAddress": "RRzwtAwENKhqW8km1CeM3RUxQGWr9khs8u", + "pubKeyOperator": "12d86400118a00680f394a3baacb3b0a4ce7f1e1dd2cf2b666d6559c425d4a733a2bb32b06010e95297c96b0f367ba2e", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 16454, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9e6eafed962b011f6dc52bb6b90311261e4d26a997781be4ba9280457cf35fdb", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 7, + "collateralAddress": "RY3gdx2aaMKNyTCg6aDiF542nwjYbkL134", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.97:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190946, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWvkHJw3Qm2t8ECCoPJNbDy4gBsNV9vu6Z", + "votingAddress": "RMTTbME99hHEojkUMmQddUCpgrB5ocYgMC", + "payoutAddress": "RCAXUKSkG95XvzXNFxLasEEFkA1wbvkhkn", + "pubKeyOperator": "982e4acc55506978d10a13b1891b0797697339c1b56bcbcff4c55900911a1d60fa2120c5a80bfb9284cdfecd189c343f" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "fdfc6e286c3f85445637453c008f06ad2ee62ea04df62e13bc71e1a589e148fc", + "collateralHash": "cc4302bd6163cfd4708154f28e7ccc435fb56a83b317eadc2c3725a374299a80", + "collateralIndex": 2, + "collateralAddress": "RHLd4osCQVZepkztCV4yaVdLoPPvsh79eT", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.134.248:10226", + "registeredHeight": 184220, + "lastPaidHeight": 190781, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RHmy9mfYHPWycobJH7UxN9sVmz7XWwVPtp", + "votingAddress": "RCenrZk8z1VDeupo9sL6poAvffJVTRDcKJ", + "payoutAddress": "REisMbVFsFNr9mbR2J5Vsqq2ZF4AkHxXow", + "pubKeyOperator": "1970d52a19d9488fee737730b2a90f35ee3d12ae030688795a1f44f56da0409840910fba2a86ba494c52e3fc45baa5d1" + }, + "confirmations": 6787, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b22897c0b6647d8ce41f9b0044728e1acf15fe8e17022608ff46cb8e951b153c", + "collateralHash": "2f54dcd305831b0cf46d8ce697706a05c902c3f6f1789d6cc29ac1b6e870de34", + "collateralIndex": 1, + "collateralAddress": "RGkdrkHgEDsobr1MDwTqb1j6hA79z1trxs", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.104.74:10226", + "registeredHeight": 176467, + "lastPaidHeight": 190585, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLQQPYxj3BroTFgfqdhRPX7f78e2Tw6b9w", + "votingAddress": "RVRwouHcC8Pv45cdhzqMsSAM9YPvVdy8JB", + "payoutAddress": "R9NHtLGi8LBt3ZRurqCkUUeENujgAF1g2a", + "pubKeyOperator": "9905a2e47d6ac5f2a5e29b80dab4363a42e8802a20249c36f2321bf9b9fc76c39719422e1d031c7ffe74f01fe00808da" + }, + "confirmations": 14540, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0eb11b9889cda0001846971f09f7dd11565559d4700da36a2d40e9c52d947e1c", + "collateralHash": "0d8a155a38b912a2e557ce2e3ad3416f937612d1a2e20988e1324b132d390bd9", + "collateralIndex": 1, + "collateralAddress": "RW2WK92Jf6neNctm6CX34nQg6SPMHeoihm", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "54.224.192.197:10226", + "registeredHeight": 175878, + "lastPaidHeight": 190919, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLyx1qRE6Yp9Z5JPPvSf7Nz2E32H1mwstg", + "votingAddress": "RWXiYdXuxfFx2M14GWSkD5ChqPMjRgxTTT", + "payoutAddress": "RMrPTmeahkKXwHr99hcCU5WXYZfutbDQ7v", + "pubKeyOperator": "91cca50338d41030360898f6fc0df824350fc872d18b6c27475da9236b0f0c9f58b45b3f327e36b9999328db98351565" + }, + "confirmations": 15118, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "173266568ff1b4de912394ae984681b3445890358451b3c4d00ccd71c7a8d63c", + "collateralHash": "01ca19f79c279a8c5f18d211aca1212cff002d26c66b14dc55aa7d2f0c5396a6", + "collateralIndex": 0, + "collateralAddress": "R9mQZ8Aw7dS2YwHbzK6nGvojRQTgDBPsJz", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "157.90.127.60:10226", + "registeredHeight": 176578, + "lastPaidHeight": 190696, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYFWahpLGpPnjysMDNBDR7eB9JyrGoeEo9", + "votingAddress": "RPTFSgpswCegDE1NmXApDuX4XEeSndmpnE", + "payoutAddress": "RM1vqcfVaU7PuXt1RaHLkU2isMBhNBgiys", + "pubKeyOperator": "0cbaefa2e5a7e43256b9759c759598200493332a8523dea1c0a6f551c70aecea8b635e49ea7ed6f736c220177fd7bc7e" + }, + "confirmations": 14423, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8b70f49130a5f26ec05a97d47f9a8e7699cda7565d605cfae3c0593a065f6efc", + "collateralHash": "7fa653417cf82c51c0c7c3f87df77024f1685a636820e5f4b0fc33fa5e3966aa", + "collateralIndex": 1, + "collateralAddress": "RLetJ58AQDKu1RVKWx3fYRYooER4sK6tWK", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.58.176:10226", + "registeredHeight": 178631, + "lastPaidHeight": 190885, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUNWFb9RbzWz8nvFrZdZQbQWf63Tdr2f4j", + "votingAddress": "RYUb3phkb1qZK7n1egqYTx4NXiaMWihqd8", + "payoutAddress": "RQCoL6jh7nQkBUq9yBz3hT9H3mCS7tw4AG", + "pubKeyOperator": "96a682840de04d86369054307a302ba6369de61c8b8ff9f035d6b9afec092ceec79cb86b418240d4ca9107685e3b667a" + }, + "confirmations": 12367, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "b2d8bea03bb185955587c901b958e8e3dab49ec1bbb42abed7a736032b842f5c", + "collateralHash": "c8bc08ee8e36c6e4fec5998527e9acb9f2b174704e8702dd8f5231ccfd6b7b3d", + "collateralIndex": 1, + "collateralAddress": "REuBRas24kWXytvnrsfbUzZCDR1E4NmAJX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.161.34.137:10226", + "registeredHeight": 177372, + "lastPaidHeight": 190797, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTfpPz5aCoKagUNzZu7e2ERquPmRaBZv5X", + "votingAddress": "RX5AGKnDuQuM1o3prcK4mC4neNj9MfGXiZ", + "payoutAddress": "RMCLywrQuUGCoaeoiGfTyfxDqNYfHqN6sa", + "pubKeyOperator": "16a7277eaeb365e17c0b46499b52a29c9b01fb557cee23f11c66f98db87cd7c879ccf1b02b23d28b16d9fc597851e486" + }, + "confirmations": 13687, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "27f0ff8a9bdf7f165faebf87a3a75ead27fcdbda9403936dfd7ef4669b4788bc", + "collateralHash": "d4bf166434bcf6db9d3436e801bd4c19c2be5508f1cd1a19d49b60a782328ba2", + "collateralIndex": 1, + "collateralAddress": "RAr3TuoaU5ReKTCXWeTnDVbMG9PkL6ExuX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "185.190.143.4:10226", + "registeredHeight": 176396, + "lastPaidHeight": 190542, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RL6aStWji2mbyQnSQE8U1GBHbenkxwoFus", + "votingAddress": "RAqnbaKJDHUC5MmatpME5DLdp9g4YJZB3w", + "payoutAddress": "RBEGuQ2BatmHbsirGgCkFXyRa69koh9r5h", + "pubKeyOperator": "8850735676eaec8bd0446a274a9e83426a6626c76be5ddda54696d424faa64c7338a375fae47ff06a10ddb77564c95f8" + }, + "confirmations": 14600, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d5f2522de5380c0dbf30af0390036e11fdca61dcbc98a2f19dee9bca18c400bc", + "collateralHash": "4413e3ddf1154f2ef8479849dcf627251ba8b22cbaf3d08e42cc5512899376cf", + "collateralIndex": 0, + "collateralAddress": "RKGR9hEaiaaD94VtZwBKTYbrYxFkG9Gp9Y", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "209.126.86.3:10226", + "registeredHeight": 175168, + "lastPaidHeight": 190602, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNeLmbfjTKh3Ys4XYBmbxsBzsXWNruwimC", + "votingAddress": "RXe7BaaGJBJDZt1sUrWv5UBDaymTXLcUKf", + "payoutAddress": "RSGJ681JsxsZ8VVakSDupP4CCFDizagS6i", + "pubKeyOperator": "185085069adf19742ec8f4495374487aaec10f28fc64261f9e7d069b7279a47f275495d89cee8bc06cc543f76862e7bb", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15834, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c0576cfcee12a3606a46aa8b7e317e8e9ca44c6cb5da673e007687cb035a80bc", + "collateralHash": "c9bfbbf3e3fdf0194bcd4ef6db0e82ec6d50d687edeac11999f418eb0af82d19", + "collateralIndex": 1, + "collateralAddress": "RGgmKRTvSVH1Qxxf4ZdsjV4QLC4zvDzHTZ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.52.222:10226", + "registeredHeight": 176107, + "lastPaidHeight": 190643, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNTVnPDEcbLN5AuoZzm5WV3Ltj44M2b8oT", + "votingAddress": "RJERsqXB5EtJtYRcDLBpeWowx7Pijn8Rif", + "payoutAddress": "RNdDAjRF6F3BZBPF97Uy8p6nmxmbih15Ps", + "pubKeyOperator": "08842e121e7dec2859a3a923528c2b6be5801200b60c0344df149b2a0f708ebced2929aad0258eb8424b2b5705ef288c" + }, + "confirmations": 14893, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "57dcac8c680c4227a261a92810b799314b6915405c9eb9f7639c8088249d495c", + "collateralHash": "675b9e40c95bf7908d80d9e77e87380034bc4c7afd7062dceefac920d2a0af70", + "collateralIndex": 1, + "collateralAddress": "RKdMuRjcyMFtU6Lrqfgmtd4ZLzhy1CUx8u", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "18.116.126.53:10226", + "registeredHeight": 177331, + "lastPaidHeight": 190738, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKPsMCMDcFRybhGDTnbwVznt1JgSYFaAce", + "votingAddress": "RXVCThD3wzpvuH1wn5NkJMHCGxKdHRakeJ", + "payoutAddress": "RVyCqwjh4GxWudbvi1kaYagv3rSsddkHZQ", + "pubKeyOperator": "84b03920356c2d7e3293383803d50eaba667cad82f83902f2d7fb0c67c40c4e30f8733bf64ff35031851e07e7e7279cf" + }, + "confirmations": 13665, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7189d528a3bb817011c463614eccad214eab20cedbb2abcd2eefd7c40fe85d5c", + "collateralHash": "ed0a78889d5a35be019317d05a75cd4864bc18990e2408a4ded3886e02615ea2", + "collateralIndex": 1, + "collateralAddress": "RFghMBJ9evdNCLKczw6aRpK9A5smqDEUhm", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "212.47.233.94:10226", + "registeredHeight": 187999, + "lastPaidHeight": 190828, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RMHNEPCzXheDuziF7maxefKkcshATdJdXa", + "votingAddress": "RGKeKAWSg4wJWwEm9nLWcs7JBHuHFuG2vW", + "payoutAddress": "RFENMxftaCW3fkPRL8ReSZpADSfa7KwxA7", + "pubKeyOperator": "16d969ccd39e350fd082a33cc4b6f70b4d9ee55e5cb81a5063eaaacb4b7a3675b4c22f110861638a1296ff3f52e4a79d" + }, + "confirmations": 3035, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e749bf3ef545ca90819bcb6f4d713509465990c706cd892ceccf257d32d98e5c", + "collateralHash": "66d6826af20036230638ea3ded4686c15a965836a61f69e2434a2eced51e79ff", + "collateralIndex": 1, + "collateralAddress": "RSeiAMoWhGkFbJPUTHcxYLRfhHrFkBz4jh", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.126.208:10226", + "registeredHeight": 187391, + "lastPaidHeight": 190672, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFEHqwn1KoaAmWyNXWasnH52xuBEJiickJ", + "votingAddress": "RHbeaCx7yxFjJAaP1Tcafjacp7gqvWTFT1", + "payoutAddress": "RX8or4PqgDXGYhxTQjs2PmKgyaS5g7o1Kg", + "pubKeyOperator": "8aa58a54be944dc13306d658fe60d5fee2cf92e9815794dc1133b20fd5f2d38b15c44a4cd74a8d49f3eea3fb1b53d1f1" + }, + "confirmations": 3637, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "af75af37f8e0e8c6471b564ec225beb44e1b35894d7edce55e0cd19518d0665c", + "collateralHash": "444c74fa28e71957dbd102c54ba627b297fa60000f9ae800a4a9f5d479e86c50", + "collateralIndex": 1, + "collateralAddress": "RDGaCShy7g2NU8WjrK8YCs9UUkzV9YNu7J", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "95.217.183.70:10226", + "registeredHeight": 177439, + "lastPaidHeight": 190408, + "PoSePenalty": 0, + "PoSeRevivedHeight": 190943, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKckHCuUySTvZCoqg9njWZQcvVWND8drzn", + "votingAddress": "RKPsd4XMBqwv8PJAbRqMDoyLFhKXz8MaFD", + "payoutAddress": "RKXB7EYR2voDP5BuCSpScuge5a2t81xkHr", + "pubKeyOperator": "06ed4351fdad8d6c5981be41c57c5ab80e7f945a30b077c51d97e0ff5b1b1a2e23a33e361500b8655e89bbbff0a4aa87" + }, + "confirmations": 13561, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4132d2865b1cfc51870a1867226ea999921742f9307e3cff26005e1d17d5f79c", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 7, + "collateralAddress": "RTRcXHcNiEpnwM2n1C1TsLHsDfso7LYiCx", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.234.166:10226", + "registeredHeight": 174611, + "lastPaidHeight": 190541, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLx7eaigGnJBpJjyC3heDBTLF55U3CxG3m", + "votingAddress": "RJJHZMtKVMYFfwV8goPWeTZ4ap7pBVp4ye", + "payoutAddress": "RJQpFUtdAdwsXAGDRdFdKef4NGwVhRHjCn", + "pubKeyOperator": "87c03d75581a3b384ed3f3e25c5ff185de70a9dc2edf90c16ab5dadafc9af6cc5e53a1ae6ffc7238b07276ab64304c96" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "75155b81a7f3a112f0e49f0fb6aacbec55549f4a6008460497a64e8865ae27dc", + "collateralHash": "63ff71420a57680f476511969f7db0fcf33d4d251fbd6f285107678e0ae7a8c6", + "collateralIndex": 1, + "collateralAddress": "RXXBAaMPsTvKeGWYc1BNPCTVwsC4HTsi3y", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "213.136.70.145:10226", + "registeredHeight": 174635, + "lastPaidHeight": 190557, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSmvFYwbeM4su2amzNZrYsaZAJdxcfyNKR", + "votingAddress": "RXPWD5r7F2mj4MxrC48gYJKj9wVqiXSCF7", + "payoutAddress": "RVJPKNoNXfWHceD4RecyrUkRZUweNEMMVh", + "pubKeyOperator": "10b6159965c87b5e52a956143272d04ba739e633de69365bceaba019388e89c642ab273761f4b838e023534166c8b5c8" + }, + "confirmations": 16380, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "35c0f156f1afa7b11eff8be675f771feb1a8c6a069c50ffdb2495f4729d24bdc", + "collateralHash": "91177d461e22331a52e6a72bc5380cf7dbf031ed61470677c4a072bc46a3076e", + "collateralIndex": 0, + "collateralAddress": "RYAtvQb5RAc9hbqJAcBkjqPJKeMGyLVKPZ", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.145.170:10226", + "registeredHeight": 175174, + "lastPaidHeight": 190607, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFBhsZmEnky6iL4jas5Vyb8WWrtNckpH1n", + "votingAddress": "RApFfMjXiXueTHwQ8Z4zS8242SPAcsvd16", + "payoutAddress": "RSGJ681JsxsZ8VVakSDupP4CCFDizagS6i", + "pubKeyOperator": "8c72d5d10f9e2f1d17741f0a812513eecb606bebf9af6dba28eeef1fd1ff02d77d2b5be514868ec0632d53711d77a296", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 15834, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "557856c72ed2831c2f4faaf0a97f8fabcac3818836e02f15fc82e97ef2b3d7fc", + "collateralHash": "51287211c50dd7e5a1e3179fd86b43267ba9f5a6bbbc4d0acdf56152a356755d", + "collateralIndex": 1, + "collateralAddress": "RGkGYk3y79Xe12NV3ez11DLCsx5jbi5y5r", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.100.215.188:10226", + "registeredHeight": 181006, + "lastPaidHeight": 190677, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RN26CGAejFzB8hgsGMKXj9uiZLC7jB6j4p", + "votingAddress": "RHfTFBr8EP9B2aSxB7bw6h1qkCF4gUUQdx", + "payoutAddress": "RDLJ2WT2RPivvJ9MP2g9vdoahtmFaoRYnb", + "pubKeyOperator": "8c3d30b5f64bf3e51cab194fd164300f6099b2497730569574b7525868e21afcb737049c71f3b53c726bbd8602427af5" + }, + "confirmations": 10000, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1f2e9d7dfdeb08a2c34f4bcde06b818f288260f6b21a4562316345c044dfdbfc", + "collateralHash": "ed289b9e4e5034896094960e2c4ace8629ec68fcb6b69d456af55f6fe68017f0", + "collateralIndex": 1, + "collateralAddress": "RJEuwhGiq4HndXu3MWuk1KqacU3YB5rSqX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.56.207:10226", + "registeredHeight": 172303, + "lastPaidHeight": 190652, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYGZymYcX2tz8FSq7Vqge6PKTA3GyKCtJo", + "votingAddress": "RK4cDkReFgCnRxLkpAxkVDhz7c9uihNwAd", + "payoutAddress": "RDtHD75MLxJFpDJCjM4BAGSsQ31Yhf5dLo", + "pubKeyOperator": "8126af4bebbad1d6e45804f9e1203815ba9fb91df07203dfd66d45be69920694bcdc4abe593a12f81c6369bf3bee7763" + }, + "confirmations": 18694, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1c9ea0b152e6562740755350c595502760456bba1367790b186738415f1ad43d", + "collateralHash": "374112f1e79253914e4241c487e8d116b9b1858c613b2d9f8e078b13fbbd87bb", + "collateralIndex": 1, + "collateralAddress": "RFEg5zJY5yNx7qARrC2uQkhs1QcyPeVBq2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.79.85.2:10226", + "registeredHeight": 177362, + "lastPaidHeight": 190779, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWcamUc7sxQJ9YGenXidChAxUQDyNQmowE", + "votingAddress": "RGMshW72wrQreUf1XuLCFTgijitsXKMuhY", + "payoutAddress": "R9yhogGTfjKeRtGFmY5k4z9hKEuZVHJsXb", + "pubKeyOperator": "82319a61db9ac7893c9ffc541f57fa6faf53a0eca87c8b93d067020a041f3db1889ebc51941f6be03d2bb9be27f334f3" + }, + "confirmations": 13688, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8a0707e0fb6d1688fc8f44f449af31544f0ddb298d7d74191649eaf3a5a0307d", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 1, + "collateralAddress": "RExZtaSSxoNHRsbpRdAzVLZkDprG8pNwED", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.228.247:10226", + "registeredHeight": 174611, + "lastPaidHeight": 190582, + "PoSePenalty": 0, + "PoSeRevivedHeight": 174707, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWEPugHQyQr2wbpCsZFPoonNr7Lf79SjEy", + "votingAddress": "RKhPJdoXYzRRNwkhGfQpfFpfYGVpqvgruE", + "payoutAddress": "RSuVcSH2cajgEMxKhvSA4Y6k8oXc6mm7EL", + "pubKeyOperator": "8c4fcb83bf3ba72e7c63005f37fba11efba1c4d5b48288c703bb9d94af9731016e87d0c39df48bd88b609e1bc01949ff" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "3a4893b68f669432277d08d4eaf02bfe9c8b9caa37a051358c8b7a43b2a11c9d", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 7, + "collateralAddress": "RTLbSm1dy2jpxBVM8exQDXiqXDCD3aTT69", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.86.239:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190628, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKYKzveYyi5VYBTpj2BqZuHKBzM9ZZ6yD4", + "votingAddress": "RKtqMKrHqYJkvfnhEyNqad2Qr86xQ5pP9o", + "payoutAddress": "RG63ScpaiSyUMYF6tVTtBaGxTDeKyHc7gW", + "pubKeyOperator": "14d943cbd23e90f46a3cde928b3c295f7a568b7364d7337cf3595ff0498ac74c6bf42b6800bd3685c642e8e553c9e60d" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "579409b2751b3bdca74b38e11e10e9a7d365fb6f4bf0b51a5e487017305e951d", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 3, + "collateralAddress": "RJBUmzCcWdurmnAcmqiEXn94EY5QbA6egf", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.87:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190711, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RRPg28Y6HwQuJ9HD2mSMn3owM8rXxTZjY8", + "votingAddress": "RVLTdUprJDFYYiNfuQwHWmN2rxjCNJUZdb", + "payoutAddress": "REBkZiE1kPiGK2QYbF8AkzvPePSBU73WZC", + "pubKeyOperator": "85cb5036094ca128d518acde7aade05cfd75c3eab302a8d2908df29cb551e8fbd9922c0dd4c3e1345b9f1a5b233feacb" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "1b88afc8761e03e5a60908f55c78d056cfff1aa75ae79ed7319e2065a8e2299d", + "collateralHash": "7b246dec17297f7d557c5f1f690e657afcaeb780159275287f708af0ec36619e", + "collateralIndex": 1, + "collateralAddress": "RDTp9Uqsc9roSdCWwb8CxZF4TRCxGjCNj6", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 4, + "state": { + "service": "66.94.121.253:10226", + "registeredHeight": 175897, + "lastPaidHeight": 190935, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYTjfjnEhJHS5Qhs5iCkv9iNsTLkiR5Jo4", + "votingAddress": "RPAUbGVJjioNZip6FCPTM96ZeVG6RhBjeF", + "payoutAddress": "RN7jedE5gkpSxgM8kBjKQtEEFaj81YqiYo", + "pubKeyOperator": "92b9554717b1feb112a26c9f7b17c92a326366b98d0112d4f16d4d3e2692f83967974ee01f2eafe21604c9e3c426d639", + "operatorPayoutAddress": "RNFh6umwSVuKwPPbwrzfZYWrM74FKzr6rs" + }, + "confirmations": 15122, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "82f1b815aa456a0d1fd53d434efae1428abf08b6d66b5e44a35638414299b27d", + "collateralHash": "27a142557668b3dd2ae40cc4239c1056ad0646677d5aa9b51ce2ec95cbf4c642", + "collateralIndex": 1, + "collateralAddress": "RPSH4U13bkaYHFFd7XpHVTsq6X8zAd8ofS", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.134.249:10226", + "registeredHeight": 184407, + "lastPaidHeight": 190980, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTH3HqrVdJnZV9zMYs5bKEaaeuyPQrkxt5", + "votingAddress": "RXgV4TFDiKfTDP75WZBQbUBPZWnGCNQzF9", + "payoutAddress": "RJeQ3of5jfcjpvpimK23pPZfrQniLfxiaJ", + "pubKeyOperator": "8314e19bf07dfbaed783892c0a4547130ced272821a1da416e79957f89abfb53c5b24fcdc26947d2538b411c9291d4c7" + }, + "confirmations": 6594, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "e53a2edd6336ebf9a42fe0cd6a9f63d2a61461b9849b6c2a6e9d06d444dc669d", + "collateralHash": "c6d7a5f1c5eb9ee337e2947f933f5301b7c0d6ee12059991f5fab047557533dc", + "collateralIndex": 10, + "collateralAddress": "RWUb8aXebFKdBJUHkWyVSaMA2hKPNknFdc", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.240.199:10226", + "registeredHeight": 174952, + "lastPaidHeight": 190895, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUH3Ras6KSKWQMX24Q4R95DK3EBKbH8mmV", + "votingAddress": "RX3zZU3cERTSbs37uuF5LCe9RQS6DcZFjc", + "payoutAddress": "RTypGMYFQqjSfEdKwGQrWGSyR2MjLueW4y", + "pubKeyOperator": "12eaa469c8fad56b3e3555443c75cb8e4ff9b5736421a32465884cea9d4a17a5e55adec8bead0e3c617b4194e0c58033" + }, + "confirmations": 16050, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "a2a9f284187726266b8b075c4e01a715ce3c79bedd8164cc65fd2075f07f4b1d", + "collateralHash": "29fbbdeb4883f0dce99d852ab9359cebad7ecdcae39670afdfb45a255057ad09", + "collateralIndex": 10, + "collateralAddress": "RXkUdRguknVLRT5RpfTxQ74wK5kcPD1BFU", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.253.111:10226", + "registeredHeight": 174882, + "lastPaidHeight": 190767, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RFqz3jx8CkUs5eRChhB3HMbG7LeAF5pofW", + "votingAddress": "REr5kWgQxvkdi6i8rnHwafivEDjRbAtecw", + "payoutAddress": "RE6EsDDYC2xL1KzXewXurbev8RhPHpfQVc", + "pubKeyOperator": "80a38f2b920c7db941b0aaf085f80c318b3336ffd81b654125961d584dd5c336e38e9f9658e617b3776d5fe2afd597dc" + }, + "confirmations": 16114, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6edcbc639881b92e29a3ff2d4c84c34910f5d7aba0ace52763fd6c790c143b7d", + "collateralHash": "4fbbce6f68f70f5ac75265483b2777f325ce3d9111dfac0f15a509e8350bbe6d", + "collateralIndex": 1, + "collateralAddress": "RJJtgEM2RcwhWFUzi2wP1FdmPmgCVAv6XU", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 4, + "state": { + "service": "66.94.121.252:10226", + "registeredHeight": 175891, + "lastPaidHeight": 190932, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKJiHk67aZYUsqBK1uua3mhrH8FJRxdh1k", + "votingAddress": "RNGbkL4siC8KesijfsDDRZVLh5RDBHRM8w", + "payoutAddress": "RRfcvgfRskNXEDYFTsoeN7MiPwQuKSzHbF", + "pubKeyOperator": "83c0ecb9b1ac01a8dd41de90acd5df071aba066ad22da01dcc74ff6ff87a428d5f7706ce25724956302029a4637645df", + "operatorPayoutAddress": "RNFh6umwSVuKwPPbwrzfZYWrM74FKzr6rs" + }, + "confirmations": 15122, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "33c04a603c733a9a93b18756877798c74073c9aa26958defb065aadc40c3939d", + "collateralHash": "47c35dd1045c0111ba6a8b127143598aca54bc67b79f5168a59f33ae40daa50a", + "collateralIndex": 1, + "collateralAddress": "RJxQLuRqCecngzrwyDhN1v3tFFtgLtRss5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "159.69.10.180:10226", + "registeredHeight": 176467, + "lastPaidHeight": 190587, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXuivfkewvukbRmbETQtarmETnvAQw9HWB", + "votingAddress": "RKb3T6CHVVoZJcB8mMDcQLKYFq19gRXJ8p", + "payoutAddress": "RRoDSzY6SX3pJinrEDFhWY2iaxz5G3TTMn", + "pubKeyOperator": "0904436556b3937040824e81fd441da9e6b3824840f098407baa63673a1a70430b5ea520dbbd15c59d64726129c39764" + }, + "confirmations": 14543, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "cb63fc1d8154336085c718047207fd057fc45907473b8245c7bcc4dbe6c6c35d", + "collateralHash": "cc410be7c6c419cb62344b7baa4a9d39b0d576cb78c74969086a8582a7038704", + "collateralIndex": 1, + "collateralAddress": "RPjHzACCG2LVFuGnxeEHdFM2K6ysVpi6L6", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "65.21.249.122:10226", + "registeredHeight": 176780, + "lastPaidHeight": 190990, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSdd1pgmgRdmuLqf3kZqx2pnsWEXwawFsX", + "votingAddress": "R9fW8WFyckdY5AoamGNVLyqtbqiyd13VuM", + "payoutAddress": "RDFEJqFErNvJuDrR2htspVxvfWs5GiT4ve", + "pubKeyOperator": "178b2112d4ffd9ef8702e5c08083cf55a5058a3c394a051b70b9cf3d88483b214a1b8412c2584f2ba616e290f736ac74" + }, + "confirmations": 14224, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "0e5ff129710531b0fd6c1a36a94ce49cceec383d4b08e908d7b6b4f8b50deb5d", + "collateralHash": "99da6888ab46ce943defdd9cefcd6dfeb5ca5034b1fd45e4a5bdefb56921d93c", + "collateralIndex": 1, + "collateralAddress": "RX5Exbx9SH3RBx2yWXRLdkMVAC1ZUP5Fz1", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 6, + "state": { + "service": "144.126.144.91:10226", + "registeredHeight": 178285, + "lastPaidHeight": 190953, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUzMQekhbwokzPt7s5h9ETrML69xUgcEsf", + "votingAddress": "RMfzZTpHGcxwYGdC8CHV23porjJtTpxr4y", + "payoutAddress": "RSm3ujVPLepBapkk2E66CDeXpNX3KtvK9y", + "pubKeyOperator": "13001e9757fd5173687055709e2119b66af93093a4f8aacbef16efbec493de1590ace5560c77906c4b20db414566d8a4", + "operatorPayoutAddress": "RGiipeF3iHQdVT1xm8NXcFcjgdtdCxskWx" + }, + "confirmations": 12714, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dd94eb494b7774c1076405ac3f5593ee18b72dce513a5b72c22ad2fa379827dd", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 10, + "collateralAddress": "RYRMpUUFBMsitskkCoRwWGrPP9x2KTCxc2", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.95:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190951, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RS7zFdQYbWJ9LxUW34BQFDPsCFAvqgzg8P", + "votingAddress": "RVj91zT5bMVA7xaC8td36okgqZ7ZE3FVT1", + "payoutAddress": "RHJLC1T5H4yAJn8PEw8Haazn6wZJGhnnX3", + "pubKeyOperator": "149da894dbf11600f59ee74c07b18fde579fdff006edf2d8d472873188c84be3b6bd4b9c781c4ebf6dbb15301a7ff350" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "2844e7b672c2ee20c29de39cc491cbfc0d25e189f067b3bf1720ce3de5abafdd", + "collateralHash": "517750d3dee7d72c3c7d447f8321e13b00a5422e7e1c9a486d60557a893ec041", + "collateralIndex": 1, + "collateralAddress": "RC5YVJd5MxTszkoN67M6cKHJr9DpR8yqs7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "45.33.97.92:10226", + "registeredHeight": 178871, + "lastPaidHeight": 190880, + "PoSePenalty": 0, + "PoSeRevivedHeight": 181618, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RWZXqChHGHePZS5VMz7RdcFRJHH1FuqxNp", + "votingAddress": "RCJBJDuMd8HdUBASzdQsLDrWMYydqtH83u", + "payoutAddress": "RFkNGJEnMWmr3598kcCmVboxRDTh3rEPW3", + "pubKeyOperator": "97ee92a619f7ab7ca753706afe8262087e48f0de2aa6dff1ffbe95e402511ed6cdc4773325cc288f6fbbd98c0720b11e" + }, + "confirmations": 12213, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "bc1052e399e0bb60ba95366a798273a1ec93fa86c3474dac4a65cfe1e3336d3e", + "collateralHash": "950d1cc275eaa5fbbd3f34403c8a16c87b511378efcaa5e45576fae5389d6ffb", + "collateralIndex": 1, + "collateralAddress": "RPMa4FPPW24Cm2gdVyp2ztCP3eYS9R6Cgv", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.107.9:10226", + "registeredHeight": 187742, + "lastPaidHeight": 190570, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RH9i1Rqua7wcbdtRUnaH8eoZgj5tnHLLEb", + "votingAddress": "RJ5zQyr8V6t9RrZKqi7iiTDRBrwoYLDqac", + "payoutAddress": "RVYZQCT2gUzxjtnZP3ppagMzDz7KRhv958", + "pubKeyOperator": "0180f723f80d80840be9139b0d7df6ba9fa19792aa7517ae87aec4f822615c8b99fb6e08e64709d1767f8c3c20e916ad" + }, + "confirmations": 3255, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "dd595852fb0d9a128117f92fb8f714ac23929467e90a1a5caa5e7f486690d57e", + "collateralHash": "cf9454495a0d892ae73b3bd759a511371be95ecbaf349aee168e7685f9513fc4", + "collateralIndex": 1, + "collateralAddress": "RAKocbqtfPs9URquSjKkBLiJCU1DwzyqAz", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.101:10226", + "registeredHeight": 175109, + "lastPaidHeight": 190574, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUyeUdmCUXpKdrtPugokoLAi3Qk8kUrcGJ", + "votingAddress": "RURHoKGtsxqbdaN4cJHpJ1yR9gT8Tubwtc", + "payoutAddress": "RPRBHuCfXnFcApqHn6VioRqYPsden6pKM4", + "pubKeyOperator": "90bd748bb502e42b86730ab81916a8f6c623eb2cc5879e260b2fe234d41cb4ca81b0ca14a2b25debde8032f5ab7b7c0e" + }, + "confirmations": 15887, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "cd7be5de8e27d8716538d529303b8db79f5ec2e5bab4bf286362eecfb598f1de", + "collateralHash": "9b59841cf7d18ea2b082d99975ce6cdaba15d94387593412652a2b7d50b27304", + "collateralIndex": 3, + "collateralAddress": "RGRkG5pdrpBhC4Ys5ohxNAc1EZ81J7mkj9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.145.226:10226", + "registeredHeight": 174909, + "lastPaidHeight": 190805, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RD5BeyrRjMGvr7o2kUujvWZYDea33rYhn1", + "votingAddress": "RHxNkGJ5ZMTvtZkxDTmcVhC86xF5T5RRa1", + "payoutAddress": "RXWAQ7924PujGWL6xXHStJbJLoCvv5epzb", + "pubKeyOperator": "8eb7c9397de9c57ec9753e0ce2e4e63401b6aae2e0478b2fcf002a1c94e98058f529a21282e78abad320f28fe2a6eaac" + }, + "confirmations": 16089, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6486b549056430bd38b8bc63c65ed970eda18584317500d8886b6b17af0f0e5e", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 3, + "collateralAddress": "RFJGkDgx81dupMuDERgnToYLAaZLy9d9pC", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.169:10226", + "registeredHeight": 176332, + "lastPaidHeight": 190958, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCkPKPq7dQE5Eku7BkTgbMA6k41wctwSSC", + "votingAddress": "RU5XKu3bFFQGeyYMiudty4vZnk295kfRuq", + "payoutAddress": "RVTqJB7nZirYAvyqU4A7cebnL4s4o2koiL", + "pubKeyOperator": "823e23003b8fda5d49f1481e27ec77635f9552acd9cc0f7115818d895565e6771268df9a60c90b71da4a2cb156725f9b" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8d14eb16e688c209b7b7ad3246ec46ea3d56d501b52a07459645e59561b1067e", + "collateralHash": "3b0ceff8a20caf3c05116ed2b6c7d5d1738ec58be238f89b19acb84e8e06cc74", + "collateralIndex": 1, + "collateralAddress": "RWbETFLCN5YYpLun1jMc3YASmW5cbErmnW", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.145.60.9:10226", + "registeredHeight": 176565, + "lastPaidHeight": 190680, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "R9rbT34CPktRCisu8WWYhXMxS8sodYE7RW", + "votingAddress": "RRpBYdA9DkWEFLkd9cWAFidzKSfYpU7Fum", + "payoutAddress": "RLMJRVDJNqVnwr89mhDnMhC5PTVfvi5t32", + "pubKeyOperator": "06e32e11d1450ccc96c8b01f9e5127688562c0c4c61b00f7ca5782db64920e9ae5ab51b14305493d4abb5b5d91e44e43" + }, + "confirmations": 14446, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "5be5539b2d32d8d36bdb84e93ef6e0ec8860f46dc06aea4af8b42126dbf2db7e", + "collateralHash": "14126c486a668cb48b31c17a7d73c982e368108b8f2bf7286ae40492d719bf0e", + "collateralIndex": 1, + "collateralAddress": "RPVzSsJcPVbFQRYnm1NMnk8wzdpxZgjaku", + "collateralAmount": 1500000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "49.12.239.228:10226", + "registeredHeight": 175387, + "lastPaidHeight": 190899, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RCCqVYJkNJvCDjikptXvPVX2xXj2omHyeq", + "votingAddress": "RPeMm33AHsMVDtNAv3joVhdAvQcRnGmLJJ", + "payoutAddress": "RS2xyNR1RVLVPkPfxZ48f6eBjXHjYhvBhQ", + "pubKeyOperator": "923cc3d63220666630dbb1e666e1294e54cdd40e4370ceefa9932abf7e26a9eeb24b71c52a05c76e4a505dc82b42c1e7" + }, + "confirmations": 16123, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9cd9d9809f346bf0eb2f1bbd7ad99476050a4b10299bce8466e0eeeb8dc0e79e", + "collateralHash": "49773b2598fc3877f44b5db8e7f496035a39362da66c283d89e890faab301fc3", + "collateralIndex": 1, + "collateralAddress": "RFgcJwRSW3S1AbRPSib7TSznmbQom5y172", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.141.40:10226", + "registeredHeight": 176906, + "lastPaidHeight": 190647, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RSUeEdo9wuRSf3zWHiJKZfCi1LBYx6p31W", + "votingAddress": "RDHGHW6dfzRC8kxhtdEXZdysSmWRGbrCvd", + "payoutAddress": "RRM3JYBj89hY3jfg2sVEaKFTgygXgHT1nh", + "pubKeyOperator": "954c02505798e43254dc9e42dd97accd0b038827919981f8273fa833fb667f35f1c5e3a2b8e7fe4ffb482820586dd5eb" + }, + "confirmations": 14109, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7b4d5469c6723bb6ec71ed493b516f48ad04ea027a57c64d947f254473056fde", + "collateralHash": "6b7b4c79122fabf6d5a394d61ebf579bad37d86d986c172469c0b8f4be3f00fe", + "collateralIndex": 1, + "collateralAddress": "RR77jnEGtNouaz5XVBTkWYQpyrxJ7uRsDW", + "collateralAmount": 1500000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "37.24.91.227:10226", + "registeredHeight": 188142, + "lastPaidHeight": 190974, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RJdFFA185PKVcGQyVuFp9gYSnW4UcdLrbV", + "votingAddress": "RN2C6hQFziUiHriW43ezGLt8XiSa5AEYQs", + "payoutAddress": "RKUZ9aeoDhK9H6eh8NUqVtj7BdYiVR5JzY", + "pubKeyOperator": "01e444976da6922c5a737b9dc073db2bf4dcfdfee6752e1716bde9699761a13edb4117520e42942691fc083926a7fb63" + }, + "confirmations": 2865, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "abc6a0090d0fe9cf51833742660c23b1cbed004ecebfe5a539e466be47aec3fe", + "collateralHash": "281fb5593271aa0cf44a61ad046ca2443546998d9f07bd7b907113b551ceac0a", + "collateralIndex": 1, + "collateralAddress": "RFDZoGveLh8Y79UQcQpYgnmGB1Mbuz4gcM", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "51.38.112.28:10226", + "registeredHeight": 176381, + "lastPaidHeight": 190530, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQTekZYsbw6CALqrb3HKpsa6cr4YcoasJM", + "votingAddress": "RPTMPkeqGY3m8BYwfyCrERMYm3GYSGtJNi", + "payoutAddress": "RXnACqeTVW4VBQjWd3QHNU33XD6Pmm38Vo", + "pubKeyOperator": "102fc6d133fe7e592b52f55b38a7d4966084c187ee2b2cc24a51a0007aa9750a46babb6946fc536e3e0b6808d363b4d8" + }, + "confirmations": 14616, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "ca9544b888b23e8feea41603375659d93064ca8fcab0155ede7eca415197815e", + "collateralHash": "f1fa621ae09048adef3266f2067e9e036408490cab8485d5f5e4642d8778b1e1", + "collateralIndex": 1, + "collateralAddress": "RWtNPpDyXZc9EvmAhxp14pg2RBCQYxTev7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.131.101:10226", + "registeredHeight": 174579, + "lastPaidHeight": 190964, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RUFCDjDidMMykeCKbot3sMtGAR7HvksfGJ", + "votingAddress": "RVX5R98udSquk4azPuvMkSsB5CC5ioGBK7", + "payoutAddress": "RLkzNpeNprKBtAatKUyGMkNpfeYUmqzt69", + "pubKeyOperator": "957d5a61512cb401e8dd3838347f1b747c709453e3953a066e8264a2288800ee97e687e3f9e5db7cbd2257f13388655f" + }, + "confirmations": 16427, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "9fff37982500148b9843be5c3608dbb1cdc5de84842070d5a3fec85ddccbd55e", + "collateralHash": "ac02dd6e2b59a27f351c1b7b5b3933a92b3169f6a81d69295ede8c3673d22e54", + "collateralIndex": 1, + "collateralAddress": "RDi2z4JXa7SAMPDnJJC5UmBQA3JEv5kNXz", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.255.42:10226", + "registeredHeight": 176159, + "lastPaidHeight": 190735, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RKSJoo8xcX1wPwT2mmfdRNuTh7X6fFgwRW", + "votingAddress": "RQBbkG8ruAMQd8sj14cS3GdwKBizHkybV5", + "payoutAddress": "RDnTJoQP5aTsuPrFH5FrJmgQHESzvS4Atw", + "pubKeyOperator": "98df48a48d824dee85b2417c2fce36180d02ce9cc896b6a8703623b80d800a2a24720ccf09b86eae1c3a198147ade8e0" + }, + "confirmations": 14845, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "735bfa76278675df316a03ad2cbf40b28869aa37d514adbd45fb777926ffe69e", + "collateralHash": "4a46d618bc88e9da31cad0998b509c32e458c8395a40a15f1ade7784c885b0d8", + "collateralIndex": 8, + "collateralAddress": "RTc3iG6AqDG3uMkw1depBaLrWvMbUpcWJf", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.61:10226", + "registeredHeight": 174811, + "lastPaidHeight": 190631, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RPuwcHzHqRyz1u6KLZi39m97MNHRU9Bknn", + "votingAddress": "RX9RuSVmrSoAnoQBLdeXM2jVy8Z45jL1mU", + "payoutAddress": "RXzDXaYxnPdc5iwNkNYQG5xnzjmpQYE4KE", + "pubKeyOperator": "97aae3b6c11a6f885a891749fd9361fd7107ac2adf6a5374cc38ea1b9d407fd11661f97b01354dacb01c91b7ca8696d1" + }, + "confirmations": 16190, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f2da77fe7babbbda5d5144affa91db82bdf09dbeb0ee34c1d68f3784f45bfe9e", + "collateralHash": "1cd1e0c7b707c9cceb0f89566593ae6bb12017e103c66e68fcafd7ea06952cbd", + "collateralIndex": 1, + "collateralAddress": "RFBKUvAnbRvT7x6mKMuJYcHaxYkWTKeTRb", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.97.30:10226", + "registeredHeight": 176159, + "lastPaidHeight": 190742, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RH37LNsskN68eNTXVKXVmmfr9yUMKu2jH6", + "votingAddress": "RRM6vhnHRFGwXDhdjSyb6P7bWgDvCdpkf3", + "payoutAddress": "RDnTJoQP5aTsuPrFH5FrJmgQHESzvS4Atw", + "pubKeyOperator": "0c519adf39824cc4ed08cca7022f5984034e739d2a52439898a004b4a1e158a97c9439ddc8ae78177cfb17217ccbea0f" + }, + "confirmations": 14843, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4f7e9e1fd488cf5bd07ce150f31dfc0e95bfac5f89d9a933e5fd76803317d81f", + "collateralHash": "287d371fcecee556c44e0e65f694167cb151ec6950ba283883a2b9b847b3eca1", + "collateralIndex": 8, + "collateralAddress": "RUZikJRvPpQYtE2nAbg6GApEChjrKJmhF5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.238.102:10226", + "registeredHeight": 174611, + "lastPaidHeight": 190536, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAMrhxPfjeqcWw5Bzc4wXavhsDSz658Ngs", + "votingAddress": "RWLuwhBaEnKS7MUNwirsPdkAuBYJTUZBYB", + "payoutAddress": "RChxyhnYN7S5SA3LEF9fgqE6gLigbRWZKX", + "pubKeyOperator": "01540a291ef1fcb185b7ffc1a3c447ea412aa42f771ae65565623927ee475fa3351dde57d61bc0da1fb88a850799c152" + }, + "confirmations": 16386, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "7c62ac91a65c524127f19fd964df2a3ebce842b59af236d7a953f6acb100dc7f", + "collateralHash": "3baccf43876dbc06b859c8b7a4011edfd584fae92344f66f1e26007ffeb7cd91", + "collateralIndex": 2, + "collateralAddress": "RQSDfwUUqrRbQLWAaNydmMsNsMbraTwbeg", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.77.170:10226", + "registeredHeight": 176944, + "lastPaidHeight": 190719, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTDMD5vYPC5CEJKLsGWPu2xaNbVp5DfTt1", + "votingAddress": "RAXMFgmygFHMVZYGW2VVfeidDry5Qcoqag", + "payoutAddress": "RG1hXNugTrUjgZohxrRVQ4fWKf26DaCdbd", + "pubKeyOperator": "96a2f405018b8aec9b0486b103f856109dda8d5ac30abef8bdd1f2b3aa34b06c537126e4e3853baec77f2f5ac9e33d8e" + }, + "confirmations": 14052, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "bfc72e59aefe966d2f011a59121a1cc86fab94cf0f858f113583ee16d567a09f", + "collateralHash": "39a2f0897ba31abfa52c7019b3bf0ee19c60c5b10bd3d229ee164fb62afdc019", + "collateralIndex": 1, + "collateralAddress": "RHdyFUhXoJcHTKsixg72xjNFNgWeWVcRuB", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "23.126.185.88:10226", + "registeredHeight": 137404, + "lastPaidHeight": 190596, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNkfsXXLTWQDdxNfrwFEYCNgHUu12g6h4N", + "votingAddress": "RWVZpBZnsdhPecpohbi17i3XfLMVUpSfVW", + "payoutAddress": "RYXxd1fRyQuHV1ogxxAb51wB8SPDrJkD3V", + "pubKeyOperator": "90e2f6043624a2cf933f5f28a500d338fbb6e4b8f7923a05a6a97747e0d2dd4c6b7362260721524380cee9414eb8bf99" + }, + "confirmations": 53602, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4aff26b222cef18ff8640a69060c8e76e067ef7b4e2b3b46518c519ad3cea8bf", + "collateralHash": "0652a93f7505ecde7d4c708a822193c20287c918f409255c0d9d9f8683381d4e", + "collateralIndex": 1, + "collateralAddress": "RDToubYoB2PJKXcktPz5drswDRoHmGG8sD", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "207.244.252.111:10226", + "registeredHeight": 174965, + "lastPaidHeight": 190917, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RNLrWUvBf4QEyYwQw1f8VgdCZit9yQzM8L", + "votingAddress": "RKWyJ6io4yWickTqhEhwjqzr8jBN6vvLQN", + "payoutAddress": "RHhY3pQNdYzWUaDcqo9bASR2hD4EMn8g1a", + "pubKeyOperator": "09fd7de5bfe179b9bef258e7343ce9d6afe96d5ffebba8b5328a0ed4a5a3c7f5cc120af168fddbc4de71f1d8e68f9ccf" + }, + "confirmations": 16036, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "6fd951161d238896f6fcd0486d23fc9c7aeb0b17c18592ff944d1c0d3516dcff", + "collateralHash": "3bf9d34eb7bd82a248c51bf76acca6df4329de652b0ad1fb903412715ae683e2", + "collateralIndex": 1, + "collateralAddress": "RMAGDHs4i8vfN23QH3dvWg3S9aeupmjLAH", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "13.53.80.85:10226", + "registeredHeight": 175851, + "lastPaidHeight": 190902, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RQ6bybp7b9yoz23KCHzTfFJRktxoDWW3ac", + "votingAddress": "RSDi7UHtiJf5Z83XkhviV5jVbAiDyPJb94", + "payoutAddress": "RPq3zofBJHWhTaeYq2Bs3AtxLPM8Qa12xG", + "pubKeyOperator": "0fe11bedb6a6fa71993eef1d2b913124cb54d64f72e44d021db2df0b988d1b4235596faa13f0209966e5773a584e6996" + }, + "confirmations": 15150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "c2a07929c989008c9f9bd016f95e5c2c46cbc28261926edec3bc23ff04abc19f", + "collateralHash": "9f7ec2240b0813fe21ea8801ab26c9a8e3ed707d4b23187722c5be7f17b61e0b", + "collateralIndex": 1, + "collateralAddress": "RGdfeYSbaJiVX7rSTkiuobJdapAeAjXeMX", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "104.238.157.200:10226", + "registeredHeight": 176794, + "lastPaidHeight": 190534, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RT1A8HAGcPidTVxG3g8gUKgdHdrwFLauJp", + "votingAddress": "RMkMMDA9FKiba29Za9PPyVtDjYczhgrSFT", + "payoutAddress": "RMJDuAQvbQUUcs72dFyrsMBShSvNQLw9aH", + "pubKeyOperator": "085c925f33f104b5d27a9aa5fd0ecba9215ea4a0d902a150f8783a8c6d7bb73d4aad33750d0d536500e234a99851e4c2" + }, + "confirmations": 14203, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "8725d570c53846ab1821a192a3f4e94bd942904e822f953cfe53289dd45d5a1f", + "collateralHash": "35564f181a5fe791df7ec49191942b26817fc21379da5c1ad5cdd4461ab040bc", + "collateralIndex": 1, + "collateralAddress": "RJBqZc2ZqjXRzXJwzPKnvoPErVtzz9wzVE", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "66.94.96.108:10226", + "registeredHeight": 176666, + "lastPaidHeight": 190836, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RAByoU8Ewb53UuLt7iR3b5J1CqkxkwRLzA", + "votingAddress": "RNs3izjps7XD4cdNf4JSDsH75dEPWnDtrb", + "payoutAddress": "RWzTrAChsAtS3dyt3yvZ6iQJ4XgP4D16Ao", + "pubKeyOperator": "91a58dd4b5650811a36e32438021279ef9fbc254601fc6e68a77f439a67c7b14814b2c8685d1c1ccfd7291a0c3e1ca6c" + }, + "confirmations": 14330, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "f872641e9900892bbad59c9c21040d2f2d5a2e8b43f6bacec163d17e28af263f", + "collateralHash": "30668dab236d2e86dc54f77e6bbd785f05b389a246bf7b20e0d4aca6146f2ea4", + "collateralIndex": 1, + "collateralAddress": "RXAaHAYhxr5oERDd7J9Az1Tee3vdSwwKZF", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "141.95.53.249:10226", + "registeredHeight": 174748, + "lastPaidHeight": 190499, + "PoSePenalty": 0, + "PoSeRevivedHeight": 190837, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RT1AJjaDg8gYpm2QinuDgphWWkjoLqiKkp", + "votingAddress": "RT1AJjaDg8gYpm2QinuDgphWWkjoLqiKkp", + "payoutAddress": "RYUt4iggPT1VA54yCUN3pX5fvVbgDFKinu", + "pubKeyOperator": "8291f7cbf18ab2aa56bdea75f8a27127fbd5d290af8c2451a6044fbccc7218f71139037f1b33caee54a1197892262f14" + }, + "confirmations": 16252, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "48cb99068929b0e0caf988f14c0baab5b31932e8bc8d86da5be0fbd3bfe6ba9f", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 8, + "collateralAddress": "RYAqopSmMrjXsCLrLLg37fs4sEzBsT1Q5k", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.98:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190940, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RK2YFBdHpef8JuEQcdaSLv6a2amA6V2pUM", + "votingAddress": "RAHJZBn2m1TRdqnm9sutXHUXnbJcZBCUuG", + "payoutAddress": "RQDhASZKc87MBnG7SGyiexSogiqo7uWGK7", + "pubKeyOperator": "0c0007a85761159ee6e74922bf666c7b8b5f296a59468dcab2fe5baeaeb6ab7890c6d58fe6e2c73ea19eabbc73a412a8" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "d369f5c454558f849011822037985d9d1a140e2a9aeaf533f595b7adc718733f", + "collateralHash": "75dce4e9825984b33284ccc14c4c99d3a4b2f8ecd0332afe7044e84de15ce9d6", + "collateralIndex": 1, + "collateralAddress": "RQPGqQTXP663Q9y78s7awSXGfa2ShFX83t", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "195.206.229.94:10226", + "registeredHeight": 174369, + "lastPaidHeight": 190664, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYBKsb5g92C6W2ZS7ohqiRBxzWpE6SKZsX", + "votingAddress": "RYJ8cV3uxrPkjw2hhbWKpD5HtBjaXHLKbb", + "payoutAddress": "RBAVKXXWheu6K1ysWGxT429YNoZgEcLQyG", + "pubKeyOperator": "844d05a4ce4d31405dd59c480d9161341b26bebaa5399b10569a562d0d231ba6a6c628cb0770b2924618f7299f10ca65" + }, + "confirmations": 16642, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "06802790e4c0b684df78de7792cc3d30635a9d4554ebddf23b15f154806e28df", + "collateralHash": "df2d4f2a6190c89ced2ffffca40f9758cc92569913a381b1c8c32aba160f7d65", + "collateralIndex": 9, + "collateralAddress": "RYNZb6kkfCYFgAZ4gbUV2EAM4GYv3A4YX5", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.156.100:10226", + "registeredHeight": 174990, + "lastPaidHeight": 190954, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RYLAxxf3euXDmqgoQ7gQQPBxM1NPy9fSgH", + "votingAddress": "RANVAbE5eLrZjuPFN7877ELwr6QvDb1GRE", + "payoutAddress": "RH6KC1XKKsVxXUP5m4iWi8PQcbbp7XBGyH", + "pubKeyOperator": "136c531be6c4b3e90e3023442c0e893c9c16b80a6d65423b0865097fd3a3341fe47c0255354dfdc8e284fbda9bdda839" + }, + "confirmations": 16020, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "77fec0952f949bee5d748ff3af2287780ac75c2b69e675fba95ee869f1f148df", + "collateralHash": "1b44a4c4ed5f67fb5c16b3c6381f3fbece9fec7a58f2833c487d9e7471cb99b2", + "collateralIndex": 1, + "collateralAddress": "RTcxqV7wt6f57R4h9K5z7wcJBX3xLUvYih", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "194.233.80.168:10226", + "registeredHeight": 173900, + "lastPaidHeight": 190732, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RTRgYyybUJWDYVukXFT7Uz8uu11J2tdbzH", + "votingAddress": "RVZN5gEmmm7AQ3eAGTrfnWNsNjhgR23snW", + "payoutAddress": "RQekyPmr78zZaHDNedstF45MHto8KsJ5uM", + "pubKeyOperator": "83b0911c3d88f7c25d22f740a9a52f6b3f4c0cc5fdd159745f4471e71b8e0a2ccd00ae1a178f2a2078fbb1bf0e9fd6fb" + }, + "confirmations": 17111, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "34cdb3976561fe397639b293a97862fa8ab51eb232ee845e0ec5606293c4567f", + "collateralHash": "7ec4bbc46761fdd6f7d8860311d50b7bcf1b5e598ad35529006c53828c60d2b5", + "collateralIndex": 1, + "collateralAddress": "RYQXPfqw8LknzdkV5VHwneKAnb9C5E1zF7", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "209.126.87.31:10226", + "registeredHeight": 174647, + "lastPaidHeight": 190561, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "REhApm51yqE63r9kham6fEv26fdofxEajV", + "votingAddress": "RBRa5CqN4d9Q9x9DLJwZg9pD6qVKSfKnPG", + "payoutAddress": "RXUa3MSD4raXdP8h52FQPNiVZFUDeK7HNi", + "pubKeyOperator": "8aafec883d03b7b451e349441a2600a5c0ef5982abb2aa8da46aef22a08460948e20a56c8f8aa9b01f4ed7abaf0bd83d" + }, + "confirmations": 16351, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "52b25deb13715415bf8f0f652dcf357933d4e124a6107e1fb7ca9c3b1310727f", + "collateralHash": "d5fe53233c91e4f81a5b19cf196680c75c27f3e4fb5dc4abe1791b8faea8be18", + "collateralIndex": 0, + "collateralAddress": "RQCbVWnbieHaTWyL8HGxAQ3nwC9uybZs9n", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "135.181.158.131:10226", + "registeredHeight": 176109, + "lastPaidHeight": 190648, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RXw6MybsKnJGwAi3oTm6nVM8TdjGWS9o1s", + "votingAddress": "RBEwCUHD9TP66vu6xFPfN67FDviRByeL2i", + "payoutAddress": "RCs1Eo4nKRtKM6Xy93Sdn6AaR4G8nLwvhH", + "pubKeyOperator": "856eea15018c040449e9a7ce2b303fd03468b86eaa855bcaff4bdf426eb64961a80c97498ae30fa0a5bc61e58fa7cc58" + }, + "confirmations": 14893, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "4b3e6912ed264331b5afc64bae13f76764ccb53fc893ce2b5bb361794c4a03df", + "collateralHash": "d839f2fdf5d08cf2d8689e59b0d84af7386e226cc53041da40b433a65b003a23", + "collateralIndex": 1, + "collateralAddress": "RAKKCax6xtWG34NEPmASjhiXTPhGYATrGt", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.146.153:10226", + "registeredHeight": 179506, + "lastPaidHeight": 190939, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RDdZZGkhE7RMUCPJRNk66bDzobDUScSgPG", + "votingAddress": "RKdNyuZQkzQxfFtu1NfB8Q8nVk8fAB3XFb", + "payoutAddress": "RSgyeWvqhCZYcy3q3LHSrf1L5Nez95MPiW", + "pubKeyOperator": "17cb43b809252bbe475c4dff7337f12d322498a54c156df923f8a66fbd5a76e79bdb574b2261fa8d41fe8ccf04be06cc" + }, + "confirmations": 11490, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + }, + { + "proTxHash": "98ac915be1ca30a93f869844ca205abc53421fda705e2d86790c71fafa83c3df", + "collateralHash": "1a3c1ce68dc86e93ef71a34f03aa9205068dfbba29efdc958d980965319abee0", + "collateralIndex": 2, + "collateralAddress": "RH4PmsJKRYGjuGSFgKkAGHZXgkor6tqHp9", + "collateralAmount": 1250000, + "needToUpgrade": false, + "operatorReward": 0, + "state": { + "service": "144.126.144.86:10226", + "registeredHeight": 174855, + "lastPaidHeight": 190724, + "PoSePenalty": 0, + "PoSeRevivedHeight": -1, + "PoSeBanHeight": -1, + "revocationReason": 0, + "ownerAddress": "RLmFmUa2FQ5Kf98sPt3MzRqa4YrTvMTZfo", + "votingAddress": "RQkkpfQmaPGMMQYjeuhKF9xeKVQdavoYi4", + "payoutAddress": "RW9sqo1C1Bj8Tq6iR7r1uLKpRzBTDxAkax", + "pubKeyOperator": "8140db879778d9cd0867264b583fd5cc9b64670068e1c0ce59384e1499084672ae862ce877bffe1d26038c64bbd05b49" + }, + "confirmations": 16150, + "wallet": { + "hasOwnerKey": false, + "hasOperatorKey": false, + "hasVotingKey": false, + "ownsCollateral": false, + "ownsPayeeScript": false, + "ownsOperatorRewardScript": false + } + } +] diff --git a/contrib/testgen/base58.py b/contrib/testgen/base58.py index a11d63e2bc..3cfa356720 100644 --- a/contrib/testgen/base58.py +++ b/contrib/testgen/base58.py @@ -43,8 +43,10 @@ def b58encode(v): # leading 0-bytes in the input become leading-1s nPad = 0 for c in v: - if c == 0: nPad += 1 - else: break + if c == 0: + nPad += 1 + else: + break return (__b58chars[0]*nPad) + result @@ -98,7 +100,8 @@ def b58decode_chk(v): def get_bcaddress_version(strAddress): """ Returns None if strAddress is invalid. Otherwise returns integer version of address. """ addr = b58decode_chk(strAddress) - if addr is None or len(addr)!=21: return None + if addr is None or len(addr)!=21: + return None version = addr[0] return ord(version) diff --git a/contrib/testgen/gen_base58_test_vectors.py b/contrib/testgen/gen_base58_test_vectors.py index 0146fffc6a..81e47eb641 100755 --- a/contrib/testgen/gen_base58_test_vectors.py +++ b/contrib/testgen/gen_base58_test_vectors.py @@ -74,12 +74,11 @@ def gen_invalid_vector(template, corrupt_prefix, randomize_payload_size, corrupt prefix = os.urandom(1) else: prefix = bytearray(template[0]) - if randomize_payload_size: payload = os.urandom(max(int(random.expovariate(0.5)), 50)) else: payload = os.urandom(template[1]) - + if corrupt_suffix: suffix = os.urandom(len(template[2])) else: @@ -114,7 +113,8 @@ def gen_invalid_vectors(): yield val, if __name__ == '__main__': - import sys, json + import sys + import json iters = {'valid':gen_valid_vectors, 'invalid':gen_invalid_vectors} try: uiter = iters[sys.argv[1]] @@ -124,7 +124,7 @@ def gen_invalid_vectors(): count = int(sys.argv[2]) except IndexError: count = 0 - + data = list(islice(uiter(), count)) json.dump(data, sys.stdout, sort_keys=True, indent=4) sys.stdout.write('\n') diff --git a/contrib/tidy_datadir.sh b/contrib/tidy_datadir.sh deleted file mode 100755 index df50e80c95..0000000000 --- a/contrib/tidy_datadir.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -# Copyright (c) 2013 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -if [ -d "$1" ]; then - cd "$1" -else - echo "Usage: $0 " >&2 - echo "Removes obsolete Raptoreum database files" >&2 - exit 1 -fi - -LEVEL=0 -if [ -f wallet.dat -a -f addr.dat -a -f blkindex.dat -a -f blk0001.dat ]; then LEVEL=1; fi -if [ -f wallet.dat -a -f peers.dat -a -f blkindex.dat -a -f blk0001.dat ]; then LEVEL=2; fi -if [ -f wallet.dat -a -f peers.dat -a -f coins/CURRENT -a -f blktree/CURRENT -a -f blocks/blk00000.dat ]; then LEVEL=3; fi -if [ -f wallet.dat -a -f peers.dat -a -f chainstate/CURRENT -a -f blocks/index/CURRENT -a -f blocks/blk00000.dat ]; then LEVEL=4; fi - -case $LEVEL in - 0) - echo "Error: no Raptoreum datadir detected." - exit 1 - ;; - 1) - echo "Detected old Raptoreum datadir (before 0.7)." - echo "Nothing to do." - exit 0 - ;; - 2) - echo "Detected Raptoreum 0.7 datadir." - ;; - 3) - echo "Detected Raptoreum pre-0.8 datadir." - ;; - 4) - echo "Detected Raptoreum 0.8 datadir." - ;; -esac - -FILES="" -DIRS="" - -if [ $LEVEL -ge 3 ]; then FILES=$(echo $FILES blk????.dat blkindex.dat); fi -if [ $LEVEL -ge 2 ]; then FILES=$(echo $FILES addr.dat); fi -if [ $LEVEL -ge 4 ]; then DIRS=$(echo $DIRS coins blktree); fi - -for FILE in $FILES; do - if [ -f $FILE ]; then - echo "Deleting: $FILE" - rm -f $FILE - fi -done - -for DIR in $DIRS; do - if [ -d $DIR ]; then - echo "Deleting: $DIR/" - rm -rf $DIR - fi -done - -echo "Done." diff --git a/contrib/valgrind.supp b/contrib/valgrind.supp new file mode 100644 index 0000000000..331ef11eff --- /dev/null +++ b/contrib/valgrind.supp @@ -0,0 +1,93 @@ +# Valgrind suppressions file for Raptoreum. +# +# Includes known Valgrind warnings in our dependencies that cannot be fixed +# in-tree. +# +# Example use: +# $ valgrind --suppressions=contrib/valgrind.supp src/test/test_raptoreum +# $ valgrind --suppressions=contrib/valgrind.supp --leak-check=full \ +# --show-leak-kinds=all src/test/test_raporeum --log_level=test_suite +{ + Suppress libstdc++ warning - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65434 + Memcheck:Leak + match-leak-kinds: reachable + fun:malloc + obj:*/libstdc++.* + fun:call_init.part.0 + fun:call_init + fun:_dl_init + obj:*/ld-*.so +} +{ + Suppress libdb warning - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=662917 + Memcheck:Cond + obj:*/libdb_cxx-*.so + fun:__log_put + obj:*/libdb_cxx-*.so + fun:__log_put_record +} +{ + Suppress leveldb warning (leveldb::InitModule()) - https://github.com/google/leveldb/issues/113 + Memcheck:Leak + match-leak-kinds: reachable + fun:_Znwm + fun:_ZN7leveldbL10InitModuleEv +} +{ + Suppress leveldb warning (leveldb::Env::Default()) - https://github.com/google/leveldb/issues/113 + Memcheck:Leak + match-leak-kinds: reachable + fun:_Znwm + ... + fun:_ZN7leveldbL14InitDefaultEnvEv +} + +{ + Suppress key generation using unitialized values as part of random generation A (gen by GetStrongRandBytes) + Memcheck:Cond + fun:secp256k1_fe_normalize_var + fun:secp256k1_ec_pubkey_serialize + fun:_ZNK4CKey9GetPubKeyEv + ... + fun:main +} + +{ + Suppress key generation using unitialized values as part of random generation B (gen by GetStrongRandBytes) + Memcheck:Cond + ... + fun:_ZN4CKey10MakeNewKeyEb + fun:_Z19ECC_InitSanityCheckv + fun:_Z15InitSanityCheckv + fun:_Z19AppInitSanityChecksv + fun:_ZN10interfaces12_GLOBAL__N_18NodeImpl14baseInitializeEv + fun:main +} + +{ + Suppress key generation using unitialized values as part of random generation C (gen by GetStrongRandBytes) + Memcheck:Cond + ... + fun:_ZNK4CKey9GetPubKeyEv + fun:_Z19ECC_InitSanityCheckv + fun:_Z15InitSanityCheckv + fun:_Z19AppInitSanityChecksv + fun:_ZN10interfaces12_GLOBAL__N_18NodeImpl14baseInitializeEv + fun:main +} + +{ + Suppress key generation using unitialized values as part of random generation D (gen by GetStrongRandBytes) + Memcheck:Cond + ... + fun:_ZNK4CKey12VerifyPubKeyERK7CPubKey + ... + fun:main +} + +{ + Suppress key generation using unitialized values as part of random generation D (gen by GetStrongRandBytes) + Memcheck:Cond + fun:_Z7GetRandm + ... +} diff --git a/contrib/verify-commits/README.md b/contrib/verify-commits/README.md index e9e3f65da2..fa492fdd27 100644 --- a/contrib/verify-commits/README.md +++ b/contrib/verify-commits/README.md @@ -24,3 +24,24 @@ keys: 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. + +Key expiry/revocation +--------------------- + +When a key (or subkey) which has signed old commits expires or is revoked, +verify-commits will start failing to verify all commits which were signed by +said key. In order to avoid bumping the root-of-trust `trusted-git-root` +file, individual commits which were signed by such a key can be added to the +`allow-revsig-commits` file. That way, the PGP signatures are still verified +but no new commits can be signed by any expired/revoked key. To easily build a +list of commits which need to be added, verify-commits.sh can be edited to test +each commit with BITCOIN_VERIFY_COMMITS_ALLOW_REVSIG set to both 1 and 0, and +those which need it set to 1 printed. diff --git a/contrib/verify-commits/gpg.sh b/contrib/verify-commits/gpg.sh index abd8f5fd9f..7a10ba7d7d 100755 --- a/contrib/verify-commits/gpg.sh +++ b/contrib/verify-commits/gpg.sh @@ -3,13 +3,14 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. +export LC_ALL=C INPUT=$(cat /dev/stdin) VALID=false REVSIG=false IFS=' ' if [ "$BITCOIN_VERIFY_COMMITS_ALLOW_SHA1" = 1 ]; then - GPG_RES="$(echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null)" + GPG_RES="$(printf '%s\n' "$INPUT" | gpg --trust-model always "$@" 2>/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 @@ -24,7 +25,7 @@ else 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="$(echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null)" + 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 @@ -32,7 +33,7 @@ else # gpg will fail otherwise esac done - [ "$GPG_RES" = "" ] && GPG_RES="$(echo "$INPUT" | gpg --trust-model always --weak-digest sha1 "$@" 2>/dev/null)" + [ "$GPG_RES" = "" ] && GPG_RES="$(printf '%s\n' "$INPUT" | gpg --trust-model always --weak-digest sha1 "$@" 2>/dev/null)" fi for LINE in $(echo "$GPG_RES"); do case "$LINE" in @@ -57,8 +58,8 @@ if ! $VALID; then exit 1 fi if $VALID && $REVSIG; then - echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null | grep "\[GNUPG:\] \(NEWSIG\|SIG_ID\|VALIDSIG\)" + printf '%s\n' "$INPUT" | gpg --trust-model always "$@" 2>/dev/null | grep "^\[GNUPG:\] \(NEWSIG\|SIG_ID\|VALIDSIG\)" echo "$GOODREVSIG" else - echo "$INPUT" | gpg --trust-model always "$@" 2>/dev/null + 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 index f064b4abae..69ef76a57c 100755 --- a/contrib/verify-commits/pre-push-hook.sh +++ b/contrib/verify-commits/pre-push-hook.sh @@ -1,9 +1,10 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright (c) 2014-2015 The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. -if ! [[ "$2" =~ ^(git@)?(www.)?github.com(:|/)raptoreum/raptoreum(.git)?$ ]]; then +export LC_ALL=C +if ! [[ "$2" =~ ^(git@)?(www.)?github.com(:|/)raptor3um/raptoreum(.git)?$ ]]; then exit 0 fi diff --git a/contrib/verify-commits/verify-commits.sh b/contrib/verify-commits/verify-commits.sh index 74b7f38375..1bd1d51e42 100755 --- a/contrib/verify-commits/verify-commits.sh +++ b/contrib/verify-commits/verify-commits.sh @@ -3,6 +3,8 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. +export LC_ALL=C + DIR=$(dirname "$0") [ "/${DIR#/}" != "$DIR" ] && DIR=$(dirname "$(pwd)/$0") @@ -12,8 +14,6 @@ VERIFIED_ROOT=$(cat "${DIR}/trusted-git-root") VERIFIED_SHA512_ROOT=$(cat "${DIR}/trusted-sha512-root-commit") REVSIG_ALLOWED=$(cat "${DIR}/allow-revsig-commits") -HAVE_FAILED=false - HAVE_GNU_SHA512=1 [ ! -x "$(which sha512sum)" ] && HAVE_GNU_SHA512=0 @@ -35,11 +35,12 @@ fi NO_SHA1=1 PREV_COMMIT="" +INITIAL_COMMIT="${CURRENT_COMMIT}" while true; do if [ "$CURRENT_COMMIT" = $VERIFIED_ROOT ]; then - echo "There is a valid path from "$CURRENT_COMMIT" to $VERIFIED_ROOT where all commits are signed!" - exit 0; + echo "There is a valid path from \"$INITIAL_COMMIT\" to $VERIFIED_ROOT where all commits are signed!" + exit 0 fi if [ "$CURRENT_COMMIT" = $VERIFIED_SHA512_ROOT ]; then @@ -95,9 +96,9 @@ while true; do FILE_HASHES="" for FILE in $(git ls-tree --full-tree -r --name-only "$CURRENT_COMMIT" | LC_ALL=C sort); do if [ "$HAVE_GNU_SHA512" = 1 ]; then - HASH=$(git cat-file blob "$CURRENT_COMMIT":"$FILE" | sha512sum | { read FIRST OTHER; echo $FIRST; } ) + HASH=$(git cat-file blob "$CURRENT_COMMIT":"$FILE" | sha512sum | { read FIRST _; echo $FIRST; } ) else - HASH=$(git cat-file blob "$CURRENT_COMMIT":"$FILE" | shasum -a 512 | { read FIRST OTHER; echo $FIRST; } ) + HASH=$(git cat-file blob "$CURRENT_COMMIT":"$FILE" | shasum -a 512 | { read FIRST _; echo $FIRST; } ) fi [ "$FILE_HASHES" != "" ] && FILE_HASHES="$FILE_HASHES"' ' diff --git a/contrib/verifybinaries/verify.sh b/contrib/verifybinaries/verify.sh index 409f517c9f..fc7492ad3b 100755 --- a/contrib/verifybinaries/verify.sh +++ b/contrib/verifybinaries/verify.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Copyright (c) 2016 The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -11,6 +11,7 @@ ### 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 @@ -33,7 +34,7 @@ if [ ! -d "$WORKINGDIR" ]; then mkdir "$WORKINGDIR" fi -cd "$WORKINGDIR" +cd "$WORKINGDIR" || exit 1 #test if a version number has been passed as an argument if [ -n "$1" ]; then @@ -76,8 +77,6 @@ if [ -n "$1" ]; then BASEDIR="$BASEDIR$RCSUBDIR.$RCVERSION/" fi fi - - SIGNATUREFILE="$BASEDIR$SIGNATUREFILENAME" else echo "Error: need to specify a version on the command line" exit 2 @@ -89,7 +88,7 @@ WGETOUT=$(wget -N "$HOST1$BASEDIR$SIGNATUREFILENAME" 2>&1) #and then see if wget completed successfully if [ $? -ne 0 ]; then echo "Error: couldn't fetch signature file. Have you specified the version number in the following format?" - echo "[$VERSIONPREFIX]-[$RCVERSIONSTRING[0-9]] (example: "$VERSIONPREFIX"0.10.4-"$RCVERSIONSTRING"1)" + echo "[$VERSIONPREFIX]-[$RCVERSIONSTRING[0-9]] (example: ${VERSIONPREFIX}0.10.4-${RCVERSIONSTRING}1)" echo "wget output:" echo "$WGETOUT"|sed 's/^/\t/g' exit 2 diff --git a/contrib/windeploy/detached-sig-create.sh b/contrib/windeploy/detached-sig-create.sh index bf4978d143..0cafc8558e 100755 --- a/contrib/windeploy/detached-sig-create.sh +++ b/contrib/windeploy/detached-sig-create.sh @@ -3,11 +3,12 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. +export LC_ALL=C if [ -z "$OSSLSIGNCODE" ]; then OSSLSIGNCODE=osslsigncode fi -if [ ! -n "$1" ]; then +if [ -z "$1" ]; then echo "usage: $0 " echo "example: $0 -key codesign.key" exit 1 diff --git a/contrib/windeploy/win-codesign.cert b/contrib/windeploy/win-codesign.cert index df99179ba7..d022284b31 100644 --- a/contrib/windeploy/win-codesign.cert +++ b/contrib/windeploy/win-codesign.cert @@ -1,32 +1,32 @@ -----BEGIN CERTIFICATE----- -MIIFNzCCBB+gAwIBAgIQC/8xYSjtiyFcuq4bKws+RTANBgkqhkiG9w0BAQsFADBy +MIIFNTCCBB2gAwIBAgIQC8hE/HYFbdaSbMDoQg3bdDANBgkqhkiG9w0BAQsFADBy MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg -SUQgQ29kZSBTaWduaW5nIENBMB4XDTE5MDcxMTAwMDAwMFoXDTIwMDcxNTEyMDAw -MFowdDELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNj -b3R0c2RhbGUxHjAcBgNVBAoTFURhc2ggQ29yZSBHcm91cCwgSW5jLjEeMBwGA1UE -AxMVRGFzaCBDb3JlIEdyb3VwLCBJbmMuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsMVXODC4TqTzNRALu+Kqz57dyv1wSTWBQ4XOJlAhh0ovbKhiL9BQ -hHeYtbhlPaeMiy/zRsAU/SNBwcpKfc5MkTurh3UxGg44VV/uQk2vm0x2lu3fhye9 -R87SvLk57FKcxrQI0tWrSs9xN/el+Bb2sw04Xy7PvTYJ9fnDJQ/Fg4qfC/4F8c/+ -w17/WHAA/7zOSjwzF52LQjjDEGwtb6P8xSSdNSon2MVSP8Qxts+x0ovIsQyLTQxf -OiRBsz5VIXi9xahB/qF51dGGT9GSTrwozpiEiNEUD9R8R8EBbNyZhB0y5UD4+gJn -sD2nf8U5l6PPFmN1RmOQ9s4Qa/8TwgA4QwIDAQABo4IBxTCCAcEwHwYDVR0jBBgw -FoAUWsS5eyoKo6XqcQPAYPkt9mV1DlgwHQYDVR0OBBYEFCVaMjaUGDJeJ9P13zgU -OYhlWt9zMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzB3BgNV -HR8EcDBuMDWgM6Axhi9odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vc2hhMi1hc3N1 -cmVkLWNzLWcxLmNybDA1oDOgMYYvaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL3No -YTItYXNzdXJlZC1jcy1nMS5jcmwwTAYDVR0gBEUwQzA3BglghkgBhv1sAwEwKjAo -BggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAIBgZngQwB -BAEwgYQGCCsGAQUFBwEBBHgwdjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln -aWNlcnQuY29tME4GCCsGAQUFBzAChkJodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j -b20vRGlnaUNlcnRTSEEyQXNzdXJlZElEQ29kZVNpZ25pbmdDQS5jcnQwDAYDVR0T -AQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAQEAabFJzX4GGQySz89L1+snLTsBXUZ5 -hT4HrbEzcjIMxlIBi14dze9A5L7IHBi6iu4tsRpos18nCCz6ljrrYgQJhpqoMNDu -BZDJLnMAJQvtGWSR+2VCg18doAOB2LA696aFDvGq2fjuvvm0uf1bT1mrFxtn0e5s -9as1h5gk8wDP8T98LjBEp6r5cogBQrf4sc9Nl7iNN3rMAOConnrrX/zxUN8p08kP -FQ1qx8giYrQ0huXsx+YFCuTHEDw7HTgpVMCvywOZ8P8PXD8UEyibMaXxB44jhk27 -uHxhGny93NXwTYj6naNn02HSQuJaH64CfIiQDmWFjduhrPVjy3sogtk2lw== +SUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMDgxMzAwMDAwMFoXDTIzMDgxODEyMDAw +MFowcjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNj +b3R0c2RhbGUxHTAbBgNVBAoTFERhc2ggQ29yZSBHcm91cCBJbmMuMR0wGwYDVQQD +ExREYXNoIENvcmUgR3JvdXAgSW5jLjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAJ5yx72CIbnZYYovXBg3YctSF7NEOeWqM6SDnwpLjCMXt8HKdKyte8/r +xxNxkwAvenF34gkzyJD9wRggbrNmtgg/zaT3xa0RUC9y7uxvBRHJ9nSskbRV5Ljp +v+KTBiekJ/M95Xt0rGYLT76OE2QvWv7fS15JJ7h0F+ReFRvUFlj2HqewTCwYqu0c +OIKhHs8I4EEHzMkIfVEEKlzpIfGwndRPmMxrq/6RXpQlrTo9tIA10KiyhQx1sNRu +bkWjXEw1SBK63F4Xj8ZaIdlDj3vwEE16Ltk2Nr+eX68gDwyCe9TQ2D7O4rrFEh8f +nEp7hcY7BoLc95COYKtWhj8mnC0obBECAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaA +FFrEuXsqCqOl6nEDwGD5LfZldQ5YMB0GA1UdDgQWBBRVtnOXT2wps7EH/GWYwlg9 +XLnMxDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0f +BHAwbjA1oDOgMYYvaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJl +ZC1jcy1nMS5jcmwwNaAzoDGGL2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEy +LWFzc3VyZWQtY3MtZzEuY3JsMEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYI +KwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQB +MIGEBggrBgEFBQcBAQR4MHYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj +ZXJ0LmNvbTBOBggrBgEFBQcwAoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t +L0RpZ2lDZXJ0U0hBMkFzc3VyZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB +/wQCMAAwDQYJKoZIhvcNAQELBQADggEBAJ/3uaSW1E3Cp17UlHk6K9NrSYmq6h4x +0FQYvcPc4lYZincDZKElDkClncYAl+FHVLJ2qBBuBF1PU96/PnG5iwROC707jJEs +p8SlHfMIiiKMq/HIMAekVNBUnbnUxFZJTEX20p9kEIBBu9A1JJ6a1tYtp7fh+INr +lLi3f0P8JNGUgWog+a/n+Icd/3tJ6fsOnrG8jCa11OGjpMegpvPvSh5YzembF0CC +WS6tOu6DbMcceQ6pFniD5MTwiF6Ye6cSLBCwD2SUyzganIZgz5m7XXX/xfjBkLbL +SQw/P5F1pHZCyyY+evH9Fjm7YAqwfpkVMJDp/XMaht2dxuhyCn70wgk= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0BAQsFADBl diff --git a/contrib/zmq/zmq_sub.py b/contrib/zmq/zmq_sub.py index eabd2c0c26..2f01ffaff9 100644 --- a/contrib/zmq/zmq_sub.py +++ b/contrib/zmq/zmq_sub.py @@ -30,9 +30,9 @@ import struct import sys -if not (sys.version_info.major >= 3 and sys.version_info.minor >= 5): +if (sys.version_info.major, sys.version_info.minor) < (3, 5): print("This example only works with Python 3.5 and greater") - exit(1) + sys.exit(1) port = 28332 diff --git a/contrib/zmq/zmq_sub3.4.py b/contrib/zmq/zmq_sub3.4.py index 60fe262365..130b955a5e 100644 --- a/contrib/zmq/zmq_sub3.4.py +++ b/contrib/zmq/zmq_sub3.4.py @@ -34,9 +34,9 @@ import struct import sys -if not (sys.version_info.major >= 3 and sys.version_info.minor >= 4): +if (sys.version_info.major, sys.version_info.minor) < (3, 4): print("This example only works with Python 3.4 and greater") - exit(1) + sys.exit(1) port = 28332 diff --git a/depends/.gitignore b/depends/.gitignore index 3cb4b9ac15..72734102c5 100644 --- a/depends/.gitignore +++ b/depends/.gitignore @@ -8,3 +8,5 @@ i686* mips* arm* aarch64* +riscv32* +riscv64* diff --git a/depends/Makefile b/depends/Makefile index 6d8bd8d214..fd8bc4cc00 100644 --- a/depends/Makefile +++ b/depends/Makefile @@ -1,11 +1,43 @@ .NOTPARALLEL : +# Pattern rule to print variables, e.g. make print-top_srcdir +print-%: + @echo '$*' = '$($*)' + +# When invoking a sub-make, keep only the command line variable definitions +# matching the pattern in the filter function. +# +# e.g. invoking: +# $ make A=1 C=1 print-MAKEOVERRIDES print-MAKEFLAGS +# +# with the following in the Makefile: +# MAKEOVERRIDES := $(filter A=% B=%,$(MAKEOVERRIDES)) +# +# will print: +# MAKEOVERRIDES = A=1 +# MAKEFLAGS = -- A=1 +# +# this is because as the GNU make manual says: +# The command line variable definitions really appear in the variable +# MAKEOVERRIDES, and MAKEFLAGS contains a reference to this variable. +# +# and since the GNU make manual also says: +# variables defined on the command line are passed to the sub-make through +# MAKEFLAGS +# +# this means that sub-makes will be invoked as if: +# $(MAKE) A=1 blah blah +MAKEOVERRIDES := $(filter V=%,$(MAKEOVERRIDES)) SOURCES_PATH ?= $(BASEDIR)/sources +WORK_PATH = $(BASEDIR)/work BASE_CACHE ?= $(BASEDIR)/built SDK_PATH ?= $(BASEDIR)/SDKs NO_QT ?= +NO_QR ?= +NO_BDB ?= NO_WALLET ?= NO_UPNP ?= +NO_NATPMP ?= FALLBACK_DOWNLOAD_PATH ?= https://bitcoincore.org/depends-sources BUILD = $(shell ./config.guess) @@ -13,7 +45,7 @@ HOST ?= $(BUILD) PATCHES_PATH = $(BASEDIR)/patches BASEDIR = $(CURDIR) HASH_LENGTH:=11 -DOWNLOAD_CONNECT_TIMEOUT:=10 +DOWNLOAD_CONNECT_TIMEOUT:=30 HOST_ID_SALT ?= salt BUILD_ID_SALT ?= salt @@ -28,9 +60,9 @@ else release_type=release endif -base_build_dir=$(BASEDIR)/work/build -base_staging_dir=$(BASEDIR)/work/staging -base_download_dir=$(BASEDIR)/work/download +base_build_dir=$(WORK_PATH)/build +base_staging_dir=$(WORK_PATH)/staging +base_download_dir=$(WORK_PATH)/download canonical_host:=$(shell ./config.sub $(HOST)) build:=$(shell ./config.sub $(BUILD)) @@ -50,6 +82,11 @@ full_host_os:=$(subst $(host_arch)-$(host_vendor)-,,$(canonical_host)) host_os:=$(findstring linux,$(full_host_os)) host_os+=$(findstring darwin,$(full_host_os)) host_os+=$(findstring mingw32,$(full_host_os)) + +ifeq (android,$(findstring android,$(full_host_os))) +host_os:=android +endif + host_os:=$(strip $(host_os)) ifeq ($(host_os),) host_os=$(full_host_os) @@ -73,25 +110,20 @@ include builders/$(build_os).mk include builders/default.mk include packages/packages.mk -build_id_string:=$(BUILD_ID_SALT) -build_id_string+=$(shell $(build_CC) --version 2>/dev/null) -build_id_string+=$(shell $(build_AR) --version 2>/dev/null) -build_id_string+=$(shell $(build_CXX) --version 2>/dev/null) -build_id_string+=$(shell $(build_RANLIB) --version 2>/dev/null) -build_id_string+=$(shell $(build_STRIP) --version 2>/dev/null) - -$(host_arch)_$(host_os)_id_string:=$(HOST_ID_SALT) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_CC) --version 2>/dev/null) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_AR) --version 2>/dev/null) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_CXX) --version 2>/dev/null) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_RANLIB) --version 2>/dev/null) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_STRIP) --version 2>/dev/null) - -qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages) -wallet_packages_$(NO_WALLET) = $(wallet_packages) +build_id:=$(shell env CC='$(build_CC)' CXX='$(build_CXX)' AR='$(build_AR)' RANLIB='$(build_RANLIB)' STRIP='$(build_STRIP)' SHA256SUM='$(build_SHA256SUM)' DEBUG='$(DEBUG)' ./gen_id '$(BUILD_ID_SALT)') +$(host_arch)_$(host_os)_id:=$(shell env CC='$(host_CC)' CXX='$(host_CXX)' AR='$(host_AR)' RANLIB='$(host_RANLIB)' STRIP='$(host_STRIP)' SHA256SUM='$(build_SHA256SUM)' DEBUG='$(DEBUG)' ./gen_id '$(HOST_ID_SALT)') + +qrencode_packages_$(NO_QR) = $(qrencode_$(host_os)_packages) + +qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages) $(qrencode_packages_) + +bdb_packages_$(NO_BDB) = $(bdb_packages) +wallet_packages_$(NO_WALLET) = $(bdb_packages_) + upnp_packages_$(NO_UPNP) = $(upnp_packages) +natpmp_packages_$(NO_NATPMP) = $(natpmp_packages) -packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_) +packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_) $(natpmp_packages_) native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages) ifneq ($(qt_packages_),) @@ -102,11 +134,11 @@ all_packages = $(packages) $(native_packages) meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk +$(host_arch)_$(host_os)_native_binutils?=$($(host_os)_native_binutils) $(host_arch)_$(host_os)_native_toolchain?=$($(host_os)_native_toolchain) include funcs.mk -toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin) final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in) final_build_id+=$(shell echo -n "$(final_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)) $(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages) @@ -117,27 +149,58 @@ $(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages) $(AT)cd $(@D); $(foreach package,$^, tar xf $($(package)_cached); ) $(AT)touch $@ +# $PATH is not preserved between ./configure and make by convention. It is +# modification and overriding at ./configure time is (as I understand it) +# supposed to be captured by the AC_{PROG_{,OBJ}CXX,PATH_{PROG,TOOL}} macros, +# which will expand the program names to their full absolute paths. The notable +# exception is command line overriding: ./configure CC=clang, which skips the +# program name expansion step, and works because the user implicitly indicates +# with CC=clang that clang will be available in $PATH at all times, and is most +# likely part of the user's system. +# +# Therefore, when we "seed the autoconf cache"/"override well-known program +# vars" by setting AR= in our config.site, either one of two things needs +# to be true for the build system to work correctly: +# +# 1. If we refer to the program by name (e.g. AR=riscv64-gnu-linux-ar), the +# tool needs to be available in $PATH at all times. +# +# 2. If the tool is _**not**_ expected to be available in $PATH at all times +# (such as is the case for our native_cctools binutils tools), it needs to +# be referred to by its absolute path, such as would be output by the +# AC_PATH_{PROG,TOOL} macros. +# +# Minor note: it is also okay to refer to tools by their absolute path even if +# we expect them to be available in $PATH at all times, more specificity does +# not hurt. $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_build_id) $(AT)@mkdir -p $(@D) $(AT)sed -e 's|@HOST@|$(host)|' \ - -e 's|@CC@|$(toolchain_path)$(host_CC)|' \ - -e 's|@CXX@|$(toolchain_path)$(host_CXX)|' \ - -e 's|@AR@|$(toolchain_path)$(host_AR)|' \ - -e 's|@RANLIB@|$(toolchain_path)$(host_RANLIB)|' \ - -e 's|@NM@|$(toolchain_path)$(host_NM)|' \ - -e 's|@STRIP@|$(toolchain_path)$(host_STRIP)|' \ + -e 's|@CC@|$(host_CC)|' \ + -e 's|@CXX@|$(host_CXX)|' \ + -e 's|@AR@|$(host_AR)|' \ + -e 's|@RANLIB@|$(host_RANLIB)|' \ + -e 's|@NM@|$(host_NM)|' \ + -e 's|@STRIP@|$(host_STRIP)|' \ + -e 's|@OTOOL@|$(host_OTOOL)|' \ + -e 's|@INSTALL_NAME_TOOL@|$(host_INSTALL_NAME_TOOL)|' \ + -e 's|@DSYMUTIL@|$(host_DSYMUTIL)|' \ -e 's|@build_os@|$(build_os)|' \ -e 's|@host_os@|$(host_os)|' \ -e 's|@CFLAGS@|$(strip $(host_CFLAGS) $(host_$(release_type)_CFLAGS))|' \ -e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS) $(host_$(release_type)_CXXFLAGS))|' \ -e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \ -e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \ + -e 's|@allow_host_packages@|$(ALLOW_HOST_PACKAGES)|' \ -e 's|@no_qt@|$(NO_QT)|' \ + -e 's|@no_qr@|$(NO_QR)|' \ -e 's|@no_wallet@|$(NO_WALLET)|' \ + -e 's|@no_bdb@|$(NO_BDB)|' \ -e 's|@no_upnp@|$(NO_UPNP)|' \ + -e 's|@no_natpmp@|$(NO_NATPMP)|' \ -e 's|@debug@|$(DEBUG)|' \ $< > $@ - $(AT)touch $@ + $(AT)touch $@ define check_or_remove_cached @@ -163,17 +226,27 @@ $(host_prefix)/share/config.site: check-packages check-packages: check-sources +clean-all: clean + @rm -rf $(SOURCES_PATH) x86_64* i686* mips* arm* aarch64* riscv32* riscv64* + +clean: + @rm -rf $(WORK_PATH) $(BASE_CACHE) $(BUILD) + install: check-packages $(host_prefix)/share/config.site download-one: check-sources $(all_sources) +download-osx-arm: + @$(MAKE) -s HOST=arm64-apple-darwin download-one download-osx: - @$(MAKE) -s HOST=x86_64-apple-darwin11 download-one + @$(MAKE) -s HOST=x86_64-apple-darwin download-one download-linux: @$(MAKE) -s HOST=x86_64-unknown-linux-gnu download-one download-win: @$(MAKE) -s HOST=x86_64-w64-mingw32 download-one -download: download-osx download-linux download-win +download: download-osx-arm download-osx download-linux download-win + +$(foreach package,$(all_packages),$(eval $(call ext_add_stages,$(package)))) -.PHONY: install cached download-one download-osx download-linux download-win download check-packages check-sources +.PHONY: install cached clean clean-all download-one download-osx-arm download-osx download-linux download-win download check-packages check-sources diff --git a/depends/README.md b/depends/README.md index 789e9fa21d..edbecbdde8 100644 --- a/depends/README.md +++ b/depends/README.md @@ -16,31 +16,73 @@ A prefix will be generated that's suitable for plugging into Raptoreum's configure. In the above example, a dir named x86_64-w64-mingw32 will be created. To use it for Raptoreum: - ./configure --prefix=`pwd`/depends/x86_64-w64-mingw32 + ./configure --prefix=$PWD/depends/x86_64-w64-mingw32 Common `host-platform-triplets` for cross compilation are: -- `i686-w64-mingw32` for Win32 +- `x86_64-pc-linux-gnu` for x86 Linux - `x86_64-w64-mingw32` for Win64 -- `x86_64-apple-darwin11` for MacOSX +- `x86_64-apple-darwin` for macOS +- `arm64-apple-darwin` for ARM macOS <-> Apple Silicon M1 Family CPU's - `arm-linux-gnueabihf` for Linux ARM 32 bit - `aarch64-linux-gnu` for Linux ARM 64 bit +- `armv7a-linux-android` for Android ARM 32 bit +- `aarch64-linux-android` for Android ARM 64 bit +- `x86_64-linux-android` for Android x86 64 bit -No other options are needed, the paths are automatically configured. - -Dependency Options: -The following can be set when running make: make FOO=bar - - SOURCES_PATH: downloaded sources will be placed here - BASE_CACHE: built packages will be placed here - SDK_PATH: Path where sdk's can be found (used by OSX) - FALLBACK_DOWNLOAD_PATH: If a source file can't be fetched, try here before giving up - NO_QT: Don't download/build/cache qt and its dependencies - NO_WALLET: Don't download/build/cache libs needed to enable the wallet - NO_UPNP: Don't download/build/cache packages needed for enabling upnp - DEBUG: disable some optimizations and enable more runtime checking - HOST_ID_SALT: Optional salt to use when generating host package ids - BUILD_ID_SALT: Optional salt to use when generating build package ids +The paths are automatically configured and no other options are needed unless targeting [Android](../doc/build-android.md). + +### Install the required dependencies: Ubuntu & Debian + + +#### For macOS cross compilation: + + sudo apt-get install curl bsdmainutils cmake libz-dev libbz2-dev python3-setuptools libtinfo5 xorriso + +Note: You must obtain the macOS SDK before proceeding with a cross-compile. +Under the depends directory, create a subdirectory `SDKs`. +Then, place the extracted SDK under this new directory. +For more information, see [SDK Extraction](../contrib/macdeploy/README.md#sdk-extraction). + +#### For Win64 cross compilation: + +- see [build-windows.md](../doc/build-windows.md#cross-compilation-for-ubuntu-and-windows-subsystem-for-linux) + +#### For linux (including i386, ARM) cross compilation: + + sudo apt-get install make automake cmake curl g++-multilib libtool binutils-gold bsdmainutils pkg-config python3 patch bison + +For linux ARM cross compilation + + sudo apt-get install g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf + +For linux AARCH64 cross compilation + + sudo apt-get install g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + +### Dependency Options: + +The following can be set when running make: `make FOO=bar` + +- `SOURCES_PATH`: Downloaded sources will be placed here +- `BASE_CACHE`: Built packages will be placed here +- `SDK_PATH`: Path where sdk's can be found (used by OSX) +- `FALLBACK_DOWNLOAD_PATH`: If a source file can't be fetched, try here before giving up +- `NO_QT`: Don't download/build/cache qt and its dependencies +- `NO_QR`: Don't download/build/cache libs supporting QR Code reading +- `NO_WALLET`: Don't download/build/cache libs needed to enable the wallet +- `NO_BDB`: Don't download/build/cache BerkeleyDB +- `NO_UPNP`: Don't download/build/cache packages needed for enabling upnp +- `NO_NATPMP`: Don't download/build/cache packages needed for enabling NAT-PMP +- `ALLOW_HOST_PACKAGES`: Packages that are missed in dependencies (due to NO_* option + or build script logic) are searched for among the host system packaging + using pkg-config it allows building with packages of other (newer) versions. +- `DEBUG`: disable some optimizations and enable more runtime checking +- `HOST_ID_SALT`: Optional salt to use when generating host package ids +- `BUILD_ID_SALT`: Optional salt to use when generating build package ids +- `FORCE_USE_SYSTEM_CLANG`: (EXPERTS_ONLY!!!) When cross-compiling for macOS, + use Clang found in the system's $PATH rather than the default prebuilt + release of Clang from llvm.org. Clang 8 or later is required. If some packages are not built, for example `make NO_WALLET=1`, the appropriate options will be passed to Raptoreum Core's configure. In this case, `--disable-wallet`. diff --git a/depends/builders/darwin.mk b/depends/builders/darwin.mk index dae2aca248..50ac8932f0 100644 --- a/depends/builders/darwin.mk +++ b/depends/builders/darwin.mk @@ -1,17 +1,17 @@ -build_darwin_CC: = $(shell xcrun -f clang) -build_darwin_CXX: = $(shell xcrun -f clang++) -build_darwin_AR: = $(shell xcrun -f ar) -build_darwin_RANLIB: = $(shell xcrun -f ranlib) -build_darwin_STRIP: = $(shell xcrun -f strip) -build_darwin_OTOOL: = $(shell xcrun -f otool) -build_darwin_NM: = $(shell xcrun -f nm) +build_darwin_CC:=$(shell xcrun -f clang) -isysroot$(shell xcrun --show-sdk-path) +build_darwin_CXX:=$(shell xcrun -f clang++) -isysroot$(shell xcrun --show-sdk-path) +build_darwin_AR:=$(shell xcrun -f ar) +build_darwin_RANLIB:=$(shell xcrun -f ranlib) +build_darwin_STRIP:=$(shell xcrun -f strip) +build_darwin_OTOOL:=$(shell xcrun -f otool) +build_darwin_NM:=$(shell xcrun -f nm) build_darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) build_darwin_SHA256SUM = shasum -a 256 -build_darwin_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) -o +build_darwin_DOWNLOAD = curl --insecure --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) -o #darwin host on darwin builder. overrides darwin host preferences. -darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(shell xcrun --show-sdk-path) -darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) -stdlib=libc++ -fvisibility=hidden --sysroot $(shell xcrun --show-sdk-path) +darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) -isysroot$(shell xcrun --show-sdk-path) +darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) -stdlib=libc++ -fvisibility=hidden -isysroot$(shell xcrun --show-sdk-path) darwin_AR:=$(shell xcrun -f ar) darwin_RANLIB:=$(shell xcrun -f ranlib) darwin_STRIP:=$(shell xcrun -f strip) @@ -19,4 +19,11 @@ darwin_LIBTOOL:=$(shell xcrun -f libtool) darwin_OTOOL:=$(shell xcrun -f otool) darwin_NM:=$(shell xcrun -f nm) darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) +darwin_DSYMUTIL:=$(shell xcrun -f dsymutil) +darwin_native_binutils= darwin_native_toolchain= + +x86_64_darwin_CFLAGS += -arch x86_64 +x86_64_darwin_CXXFLAGS += -arch x86_64 +aarch64_darwin_CFLAGS += -arch arm64 +aarch64_darwin_CXXFLAGS += -arch arm64 diff --git a/depends/builders/default.mk b/depends/builders/default.mk index f097db65d6..7985e3cd19 100644 --- a/depends/builders/default.mk +++ b/depends/builders/default.mk @@ -1,20 +1,19 @@ default_build_CC = gcc default_build_CXX = g++ default_build_AR = ar +default_build_TAR = tar default_build_RANLIB = ranlib default_build_STRIP = strip default_build_NM = nm -default_build_OTOOL = otool -default_build_INSTALL_NAME_TOOL = install_name_tool define add_build_tool_func build_$(build_os)_$1 ?= $$(default_build_$1) build_$(build_arch)_$(build_os)_$1 ?= $$(build_$(build_os)_$1) build_$1=$$(build_$(build_arch)_$(build_os)_$1) endef -$(foreach var,CC CXX AR RANLIB NM STRIP SHA256SUM DOWNLOAD OTOOL INSTALL_NAME_TOOL,$(eval $(call add_build_tool_func,$(var)))) +$(foreach var,CC CXX AR TAR RANLIB NM STRIP SHA256SUM DOWNLOAD OTOOL INSTALL_NAME_TOOL DSYMUTIL,$(eval $(call add_build_tool_func,$(var)))) define add_build_flags_func build_$(build_arch)_$(build_os)_$1 += $(build_$(build_os)_$1) build_$1=$$(build_$(build_arch)_$(build_os)_$1) endef -$(foreach flags, CFLAGS CXXFLAGS LDFLAGS, $(eval $(call add_build_flags_func,$(flags)))) +$(foreach flags, CFLAGS CXXFLAGS LDFLAGS, $(eval $(call add_build_flags_func,$(flags)))) \ No newline at end of file diff --git a/depends/builders/linux.mk b/depends/builders/linux.mk index 9af0d066a0..e5cb74eb1c 100644 --- a/depends/builders/linux.mk +++ b/depends/builders/linux.mk @@ -1,2 +1,2 @@ build_linux_SHA256SUM = sha256sum -build_linux_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) -o +build_linux_DOWNLOAD = curl --insecure --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) -o diff --git a/depends/config.guess b/depends/config.guess index 69ed3e573b..dc0a6b2997 100755 --- a/depends/config.guess +++ b/depends/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2017 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. -timestamp='2017-03-05' +timestamp='2021-05-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2017-03-05' # 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 . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,19 +27,19 @@ timestamp='2017-03-05' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . -me=`echo "$0" | sed -e 's,.*/,,'` +me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2017 Free Software Foundation, Inc. +Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -84,8 +84,6 @@ if test $# != 0; then exit 1 fi -trap 'exit 1' 1 2 15 - # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a @@ -96,66 +94,89 @@ trap 'exit 1' 1 2 15 # Portable tmp directory creation inspired by the Autoconf team. -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 + +set_cc_for_build() { + # prevent multiple calls if $tmp is already set + test "$tmp" && return 0 + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + break + fi + done + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; + esac +} # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then +if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown +UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown +UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown +UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown +UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case $UNAME_SYSTEM in Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu + LIBC=unknown - eval $set_cc_for_build - cat <<-EOF > $dummy.c + set_cc_for_build + cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc - #else + #elif defined(__GLIBC__) LIBC=gnu + #else + #include + /* First heuristic to detect musl libc. */ + #ifdef __DEFINED_va_list + LIBC=musl + #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" + + # Second heuristic to detect musl libc. + if [ "$LIBC" = unknown ] && + command -v ldd >/dev/null && + ldd --version 2>&1 | grep -q ^musl; then + LIBC=musl + fi + + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + if [ "$LIBC" = unknown ]; then + LIBC=gnu + fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -167,32 +188,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - /sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || \ - echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \ + /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ + echo unknown)) + case $UNAME_MACHINE_ARCH in + aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) - arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` - machine=${arch}${endian}-unknown + arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,') + endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p') + machine="${arch}${endian}"-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. - case "${UNAME_MACHINE_ARCH}" in + case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build + set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -208,10 +229,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ;; esac # Determine ABI tags. - case "${UNAME_MACHINE_ARCH}" in + case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") ;; esac # The OS release @@ -219,61 +240,82 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in + case $UNAME_VERSION in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2) ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}${abi}" + echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:SecBSD:*:*) + UNAME_MACHINE_ARCH=$(arch | sed 's/SecBSD.//') + echo "$UNAME_MACHINE_ARCH"-unknown-secbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) - echo ${UNAME_MACHINE}-unknown-sortix + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + trap '' 0 case $UNAME_RELEASE in *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}') ;; *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}') ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in + ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1) + case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") @@ -310,28 +352,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 + echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)" exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos + echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos + echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition @@ -343,7 +373,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} + echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos @@ -353,7 +383,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then + if test "$( (/bin/universe) 2>/dev/null)" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd @@ -366,28 +396,28 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in + case $(/usr/bin/uname -p) in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} + echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build + set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null @@ -395,40 +425,40 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in + case $(/usr/bin/arch -k) in Series*|S4*) - UNAME_RELEASE=`uname -v` + UNAME_RELEASE=$(uname -v) ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')" exit ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 - case "`/bin/arch`" in + UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null) + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 + case $(/bin/arch) in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} + echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not @@ -439,44 +469,44 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} + echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} + echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} + echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} + echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} + echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} + echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} + echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} + echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { @@ -485,23 +515,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') && + SYSTEM_NAME=$("$dummy" "$dummyarg") && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} + echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax @@ -526,18 +556,18 @@ EOF exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + UNAME_PROCESSOR=$(/usr/bin/uname -p) + if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ + test "$TARGET_BINARY_INTERFACE"x = x then - echo m88k-dg-dgux${UNAME_RELEASE} + echo m88k-dg-dgux"$UNAME_RELEASE" else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else - echo i586-dg-dgux${UNAME_RELEASE} + echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) @@ -554,26 +584,26 @@ EOF echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if test -x /usr/bin/oslevel ; then + IBM_REV=$(/usr/bin/oslevel) else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include main() @@ -584,7 +614,7 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") then echo "$SYSTEM_NAME" else @@ -597,28 +627,28 @@ EOF fi exit ;; *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }') + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | - awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + if test -x /usr/bin/lslpp ; then + IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/) else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx @@ -633,28 +663,28 @@ EOF echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') + case $UNAME_MACHINE in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in + if test -x /usr/bin/getconf; then + sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null) + sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null) + case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in + case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if test "$HP_ARCH" = ""; then + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include @@ -687,13 +717,13 @@ EOF exit (0); } EOF - (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy") test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = hppa2.0w ] + if test "$HP_ARCH" = hppa2.0w then - eval $set_cc_for_build + set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -712,15 +742,15 @@ EOF HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') + echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" #include int main () @@ -745,11 +775,11 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) @@ -758,17 +788,17 @@ EOF *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + if test -x /usr/sbin/sysversion ; then + echo "$UNAME_MACHINE"-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) @@ -793,131 +823,123 @@ EOF echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz) + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/') echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///') + FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/') echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} + echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm:FreeBSD:*:*) + UNAME_PROCESSOR=$(uname -p) + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf + fi exit ;; *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + UNAME_PROCESSOR=$(/usr/bin/uname -p) + case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin + echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 + echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 + echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 + echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case $UNAME_MACHINE in x86) - echo i586-pc-interix${UNAME_RELEASE} + echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} + echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} + echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin + echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin + echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC" exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; @@ -928,140 +950,181 @@ EOF esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + arc:Linux:*:* | arceb:Linux:*:* | arc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval $set_cc_for_build + set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + set_cc_for_build + IS_GLIBC=0 + test x"${LIBC}" = xgnu && IS_GLIBC=1 + sed 's/^ //' << EOF > "$dummy.c" #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el + #undef mips + #undef mipsel + #undef mips64 + #undef mips64el + #if ${IS_GLIBC} && defined(_ABI64) + LIBCABI=gnuabi64 + #else + #if ${IS_GLIBC} && defined(_ABIN32) + LIBCABI=gnuabin32 + #else + LIBCABI=${LIBC} + #endif + #endif + + #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa64r6 + #else + #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 + CPU=mipsisa32r6 + #else + #if defined(__mips64) + CPU=mips64 + #else + CPU=mips + #endif + #endif + #endif + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el + MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} + MIPS_ENDIAN= #else - CPU= + MIPS_ENDIAN= #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" + test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} + echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} + echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} + echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; + case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} + echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} + echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} + echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} + echo powerpcle-unknown-linux-"$LIBC" exit ;; - riscv32:Linux:*:* | riscv64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + set_cc_for_build + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_X32 >/dev/null + then + LIBCABI="$LIBC"x32 + fi + fi + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1075,51 +1138,51 @@ EOF # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx + echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop + echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos + echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable + echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} + echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp + echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + i*86:*:4.*:*) + UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//') if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in + case $(/bin/uname -X | grep "^Machine") in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //')) (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 @@ -1127,9 +1190,9 @@ EOF && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv32 + echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) @@ -1149,9 +1212,9 @@ EOF exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) @@ -1169,41 +1232,41 @@ EOF 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} + echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} + echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} + echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} + echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} + echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 @@ -1213,8 +1276,8 @@ EOF exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi @@ -1234,23 +1297,23 @@ EOF exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos + echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} + echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + if test -d /usr/nec; then + echo mips-nec-sysv"$UNAME_RELEASE" else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. @@ -1269,83 +1332,97 @@ EOF echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} + echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} + echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} + echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} + echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} + echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} + echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux${UNAME_RELEASE} + echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} + echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" + exit ;; + arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" exit ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc + UNAME_PROCESSOR=$(uname -p) + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + if command -v xcode-select > /dev/null 2> /dev/null && \ + ! xcode-select --print-path > /dev/null 2> /dev/null ; then + # Avoid executing cc if there is no toolchain installed as + # cc will be a stub that puts up a graphical alert + # prompting the user to install developer tools. + CC_FOR_BUILD=no_compiler_found + else + set_cc_for_build fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi + if test "$CC_FOR_BUILD" != no_compiler_found; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 + # uname -m returns i386 or x86_64 + UNAME_PROCESSOR=$UNAME_MACHINE fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` + UNAME_PROCESSOR=$(uname -p) if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} + echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; - NSX-?:NONSTOP_KERNEL:*:*) - echo nsx-tandem-nsk${UNAME_RELEASE} + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux @@ -1354,18 +1431,18 @@ EOF echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = 386; then + if test "${cputype-}" = 386; then UNAME_MACHINE=i386 - else + elif test "x${cputype-}" != x; then UNAME_MACHINE="$cputype" fi - echo ${UNAME_MACHINE}-unknown-plan9 + echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 @@ -1386,14 +1463,14 @@ EOF echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in + UNAME_MACHINE=$( (uname -p) 2>/dev/null) + case $UNAME_MACHINE in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; @@ -1402,32 +1479,190 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')" exit ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos + echo "$UNAME_MACHINE"-pc-rdos exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros + *:AROS:*:*) + echo "$UNAME_MACHINE"-unknown-aros exit ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx + echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; + *:Unleashed:*:*) + echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE" + exit ;; +esac + +# No uname command or uname output not recognized. +set_cc_for_build +cat > "$dummy.c" < +#include +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#include +#if defined(_SIZE_T_) || defined(SIGLOST) +#include +#endif +#endif +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); +#endif + +#if defined (vax) +#if !defined (ultrix) +#include +#if defined (BSD) +#if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +#else +#if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#endif +#else + printf ("vax-dec-bsd\n"); exit (0); +#endif +#else +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname un; + uname (&un); + printf ("vax-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif +#endif +#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) +#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) +#if defined(_SIZE_T_) || defined(SIGLOST) + struct utsname *un; + uname (&un); + printf ("mips-dec-ultrix%s\n", un.release); exit (0); +#else + printf ("mips-dec-ultrix\n"); exit (0); +#endif +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. +test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } + +echo "$0: unable to guess system type" >&2 + +case $UNAME_MACHINE:$UNAME_SYSTEM in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 <&2 </dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` +uname -m = $( (uname -m) 2>/dev/null || echo unknown) +uname -r = $( (uname -r) 2>/dev/null || echo unknown) +uname -s = $( (uname -s) 2>/dev/null || echo unknown) +uname -v = $( (uname -v) 2>/dev/null || echo unknown) -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` +/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null) +/bin/uname -X = $( (/bin/uname -X) 2>/dev/null) -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` +hostinfo = $( (hostinfo) 2>/dev/null) +/bin/universe = $( (/bin/universe) 2>/dev/null) +/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null) +/bin/arch = $( (/bin/arch) 2>/dev/null) +/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null) +/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null) -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF +fi exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/depends/config.site.in b/depends/config.site.in index 370c9ee7b9..e4e29a09d1 100644 --- a/depends/config.site.in +++ b/depends/config.site.in @@ -1,83 +1,120 @@ -depends_prefix="`dirname ${ac_site_file}`/.." +# shellcheck shell=sh disable=SC2034 # Many variables set will be used in + # ./configure but shellcheck doesn't know + # that, hence: disable=SC2034 + +true # Dummy command because shellcheck treats all directives before first + # command as file-wide, and we only want to disable for one line. + # + # See: https://github.com/koalaman/shellcheck/wiki/Directive + +# shellcheck disable=SC2154 +depends_prefix="$(cd "$(dirname "$ac_site_file")/.." && pwd)" cross_compiling=maybe -host_alias=@HOST@ -ac_tool_prefix=${host_alias}- +host_alias="@HOST@" +ac_tool_prefix="${host_alias}-" -if test -z $with_boost; then - with_boost=$depends_prefix +if test -z "$with_boost"; then + with_boost="$depends_prefix" fi -if test -z $with_qt_plugindir; then - with_qt_plugindir=$depends_prefix/plugins +if test -z "$with_qt_plugindir"; then + with_qt_plugindir="${depends_prefix}/plugins" fi -if test -z $with_qt_translationdir; then - with_qt_translationdir=$depends_prefix/translations +if test -z "$with_qt_translationdir"; then + with_qt_translationdir="${depends_prefix}/translations" fi -if test -z $with_qt_bindir; then - with_qt_bindir=$depends_prefix/native/bin -fi -if test -z $with_protoc_bindir; then - with_protoc_bindir=$depends_prefix/native/bin +if test -z "$with_qt_bindir" && test -z "@no_qt@"; then + with_qt_bindir="${depends_prefix}/native/bin" fi +if test -z "$with_qrencode" && test -n "@no_qr@"; then + with_qrencode=no +fi -if test -z $enable_wallet && test -n "@no_wallet@"; then +if test -z "$enable_wallet" && test -n "@no_wallet@"; then enable_wallet=no fi -if test -z $with_miniupnpc && test -n "@no_upnp@"; then +if test -z "$with_bdb" && test -n "@no_bdb@"; then + with_bdb=no +fi + +if test -z "$with_miniupnpc" && test -n "@no_upnp@"; then with_miniupnpc=no fi -if test -z $with_gui && test -n "@no_qt@"; then +if test -z "$with_natpmp" && test -n "@no_natpmp@"; then + with_natpmp=no +fi + +if test -z "$with_gui" && test -n "@no_qt@"; then with_gui=no fi -if test x@host_os@ = xdarwin; then - BREW=no - PORT=no +if test -n "@debug@" && test -z "@no_qt@" && test "$with_gui" != "no"; then + with_gui=qt5_debug fi -if test x@host_os@ = xmingw32; then - if test -z $with_qt_incdir; then - with_qt_incdir=$depends_prefix/include - fi - if test -z $with_qt_libdir; then - with_qt_libdir=$depends_prefix/lib - fi +if test "@host_os@" = darwin; then + BREW=no fi -PATH=$depends_prefix/native/bin:$PATH -PKG_CONFIG="`which pkg-config` --static" +PKG_CONFIG="$(which pkg-config) --static" # These two need to remain exported because pkg-config does not see them # otherwise. That means they must be unexported at the end of configure.ac to # avoid ruining the cache. Sigh. +export PKG_CONFIG_PATH="${depends_prefix}/share/pkgconfig:${depends_prefix}/lib/pkgconfig" +if test -z "@allow_host_packages@"; then + export PKG_CONFIG_LIBDIR="${depends_prefix}/lib/pkgconfig" +fi -export PKG_CONFIG_LIBDIR=$depends_prefix/lib/pkgconfig -export PKG_CONFIG_PATH=$depends_prefix/share/pkgconfig - -CPPFLAGS="-I$depends_prefix/include/ $CPPFLAGS" -LDFLAGS="-L$depends_prefix/lib $LDFLAGS" +CPPFLAGS="-I${depends_prefix}/include/ ${CPPFLAGS}" +LDFLAGS="-L${depends_prefix}/lib ${LDFLAGS}" -CC="@CC@" -CXX="@CXX@" -OBJC="${CC}" -PYTHONPATH=$depends_prefix/native/lib/python/dist-packages:$PYTHONPATH +if test -n "@CC@" -a -z "${CC}"; then + CC="@CC@" +fi +if test -n "@CXX@" -a -z "${CXX}"; then + CXX="@CXX@" +fi +PYTHONPATH="${depends_prefix}/native/lib/python3/dist-packages${PYTHONPATH:+${PATH_SEPARATOR}}${PYTHONPATH}" if test -n "@AR@"; then - AR=@AR@ - ac_cv_path_ac_pt_AR=${AR} + AR="@AR@" + ac_cv_path_ac_pt_AR="${AR}" fi if test -n "@RANLIB@"; then - RANLIB=@RANLIB@ - ac_cv_path_ac_pt_RANLIB=${RANLIB} + RANLIB="@RANLIB@" + ac_cv_path_ac_pt_RANLIB="${RANLIB}" fi if test -n "@NM@"; then - NM=@NM@ - ac_cv_path_ac_pt_NM=${NM} + NM="@NM@" + ac_cv_path_ac_pt_NM="${NM}" +fi + +if test -n "@STRIP@"; then + STRIP="@STRIP@" + ac_cv_path_ac_pt_STRIP="${STRIP}" +fi + +if test "@host_os@" = darwin; then + if test -n "@OTOOL@"; then + OTOOL="@OTOOL@" + ac_cv_path_ac_pt_OTOOL="${OTOOL}" + fi + + if test -n "@INSTALL_NAME_TOOL@"; then + INSTALL_NAME_TOOL="@INSTALL_NAME_TOOL@" + ac_cv_path_ac_pt_INSTALL_NAME_TOOL="${INSTALL_NAME_TOOL}" + fi + + if test -n "@DSYMUTIL@"; then + DSYMUTIL="@DSYMUTIL@" + ac_cv_path_ac_pt_DSYMUTIL="${DSYMUTIL}" + fi fi if test -n "@debug@"; then @@ -85,14 +122,14 @@ if test -n "@debug@"; then fi if test -n "@CFLAGS@"; then - CFLAGS="@CFLAGS@ $CFLAGS" + CFLAGS="@CFLAGS@ ${CFLAGS}" fi if test -n "@CXXFLAGS@"; then - CXXFLAGS="@CXXFLAGS@ $CXXFLAGS" + CXXFLAGS="@CXXFLAGS@ ${CXXFLAGS}" fi if test -n "@CPPFLAGS@"; then - CPPFLAGS="@CPPFLAGS@ $CPPFLAGS" + CPPFLAGS="@CPPFLAGS@ ${CPPFLAGS}" fi if test -n "@LDFLAGS@"; then - LDFLAGS="@LDFLAGS@ $LDFLAGS" + LDFLAGS="@LDFLAGS@ ${LDFLAGS}" fi diff --git a/depends/config.sub b/depends/config.sub index 40ea5dfe11..7384e9198b 100755 --- a/depends/config.sub +++ b/depends/config.sub @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2017 Free Software Foundation, Inc. +# Copyright 1992-2021 Free Software Foundation, Inc. -timestamp='2017-04-02' +timestamp='2021-04-30' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2017-04-02' # 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 . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -33,7 +33,7 @@ timestamp='2017-04-02' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -50,14 +50,14 @@ timestamp='2017-04-02' # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. -me=`echo "$0" | sed -e 's,.*/,,'` +me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -67,7 +67,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2017 Free Software Foundation, Inc. +Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -89,12 +89,12 @@ while test $# -gt 0 ; do - ) # Use stdin as input. break ;; -* ) - echo "$me: invalid option $1$help" + echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) @@ -110,1252 +110,1173 @@ case $# in exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; -esac +# Split fields of configuration type +# shellcheck disable=SC2162 +IFS="-" read field1 field2 field3 field4 <&2 + exit 1 ;; - -ptx*) - basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + *-*-*-*) + basic_machine=$field1-$field2 + basic_os=$field3-$field4 ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + basic_os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + basic_os=linux-android + ;; + *) + basic_machine=$field1-$field2 + basic_os=$field3 + ;; + esac ;; - -psos*) - os=-psos + *-*) + # A lone config we happen to match not fitting any pattern + case $field1-$field2 in + decstation-3100) + basic_machine=mips-dec + basic_os= + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + basic_os=$field2 + ;; + # Manufacturers + dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ + | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ + | unicom* | ibm* | next | hp | isi* | apollo | altos* \ + | convergent* | ncr* | news | 32* | 3600* | 3100* \ + | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ + | ultra | tti* | harris | dolphin | highlevel | gould \ + | cbm | ns | masscomp | apple | axis | knuth | cray \ + | microblaze* | sim | cisco \ + | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + basic_os= + ;; + *) + basic_machine=$field1 + basic_os=$field2 + ;; + esac + ;; + esac ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + basic_os=bsd + ;; + a29khif) + basic_machine=a29k-amd + basic_os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + basic_os=scout + ;; + alliant) + basic_machine=fx80-alliant + basic_os= + ;; + altos | altos3068) + basic_machine=m68k-altos + basic_os= + ;; + am29k) + basic_machine=a29k-none + basic_os=bsd + ;; + amdahl) + basic_machine=580-amdahl + basic_os=sysv + ;; + amiga) + basic_machine=m68k-unknown + basic_os= + ;; + amigaos | amigados) + basic_machine=m68k-unknown + basic_os=amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + basic_os=sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + basic_os=sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + basic_os=bsd + ;; + aros) + basic_machine=i386-pc + basic_os=aros + ;; + aux) + basic_machine=m68k-apple + basic_os=aux + ;; + balance) + basic_machine=ns32k-sequent + basic_os=dynix + ;; + blackfin) + basic_machine=bfin-unknown + basic_os=linux + ;; + cegcc) + basic_machine=arm-unknown + basic_os=cegcc + ;; + convex-c1) + basic_machine=c1-convex + basic_os=bsd + ;; + convex-c2) + basic_machine=c2-convex + basic_os=bsd + ;; + convex-c32) + basic_machine=c32-convex + basic_os=bsd + ;; + convex-c34) + basic_machine=c34-convex + basic_os=bsd + ;; + convex-c38) + basic_machine=c38-convex + basic_os=bsd + ;; + cray) + basic_machine=j90-cray + basic_os=unicos + ;; + crds | unos) + basic_machine=m68k-crds + basic_os= + ;; + da30) + basic_machine=m68k-da30 + basic_os= + ;; + decstation | pmax | pmin | dec3100 | decstatn) + basic_machine=mips-dec + basic_os= + ;; + delta88) + basic_machine=m88k-motorola + basic_os=sysv3 + ;; + dicos) + basic_machine=i686-pc + basic_os=dicos + ;; + djgpp) + basic_machine=i586-pc + basic_os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + basic_os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + basic_os=ose + ;; + gmicro) + basic_machine=tron-gmicro + basic_os=sysv + ;; + go32) + basic_machine=i386-pc + basic_os=go32 + ;; + h8300hms) + basic_machine=h8300-hitachi + basic_os=hms + ;; + h8300xray) + basic_machine=h8300-hitachi + basic_os=xray + ;; + h8500hms) + basic_machine=h8500-hitachi + basic_os=hms + ;; + harris) + basic_machine=m88k-harris + basic_os=sysv3 + ;; + hp300 | hp300hpux) + basic_machine=m68k-hp + basic_os=hpux + ;; + hp300bsd) + basic_machine=m68k-hp + basic_os=bsd + ;; + hppaosf) + basic_machine=hppa1.1-hp + basic_os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + basic_os=proelf + ;; + i386mach) + basic_machine=i386-mach + basic_os=mach + ;; + isi68 | isi) + basic_machine=m68k-isi + basic_os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + basic_os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + basic_os=sysv + ;; + merlin) + basic_machine=ns32k-utek + basic_os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + basic_os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + basic_os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + basic_os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + basic_os=coff + ;; + morphos) + basic_machine=powerpc-unknown + basic_os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + basic_os=moxiebox + ;; + msdos) + basic_machine=i386-pc + basic_os=msdos + ;; + msys) + basic_machine=i686-pc + basic_os=msys + ;; + mvs) + basic_machine=i370-ibm + basic_os=mvs + ;; + nacl) + basic_machine=le32-unknown + basic_os=nacl + ;; + ncr3000) + basic_machine=i486-ncr + basic_os=sysv4 + ;; + netbsd386) + basic_machine=i386-pc + basic_os=netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + basic_os=linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + basic_os=newsos + ;; + news1000) + basic_machine=m68030-sony + basic_os=newsos + ;; + necv70) + basic_machine=v70-nec + basic_os=sysv + ;; + nh3000) + basic_machine=m68k-harris + basic_os=cxux + ;; + nh[45]000) + basic_machine=m88k-harris + basic_os=cxux + ;; + nindy960) + basic_machine=i960-intel + basic_os=nindy + ;; + mon960) + basic_machine=i960-intel + basic_os=mon960 + ;; + nonstopux) + basic_machine=mips-compaq + basic_os=nonstopux + ;; + os400) + basic_machine=powerpc-ibm + basic_os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + basic_os=ose + ;; + os68k) + basic_machine=m68k-none + basic_os=os68k + ;; + paragon) + basic_machine=i860-intel + basic_os=osf + ;; + parisc) + basic_machine=hppa-unknown + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp + ;; + pw32) + basic_machine=i586-unknown + basic_os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + basic_os=rdos + ;; + rdos32) + basic_machine=i386-pc + basic_os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + basic_os=coff + ;; + sa29200) + basic_machine=a29k-amd + basic_os=udi + ;; + sei) + basic_machine=mips-sei + basic_os=seiux + ;; + sequent) + basic_machine=i386-sequent + basic_os= + ;; + sps7) + basic_machine=m68k-bull + basic_os=sysv2 + ;; + st2000) + basic_machine=m68k-tandem + basic_os= + ;; + stratus) + basic_machine=i860-stratus + basic_os=sysv4 + ;; + sun2) + basic_machine=m68000-sun + basic_os= + ;; + sun2os3) + basic_machine=m68000-sun + basic_os=sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + basic_os=sunos4 + ;; + sun3) + basic_machine=m68k-sun + basic_os= + ;; + sun3os3) + basic_machine=m68k-sun + basic_os=sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + basic_os=sunos4 + ;; + sun4) + basic_machine=sparc-sun + basic_os= + ;; + sun4os3) + basic_machine=sparc-sun + basic_os=sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + basic_os=sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + basic_os=solaris2 + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + basic_os= + ;; + sv1) + basic_machine=sv1-cray + basic_os=unicos + ;; + symmetry) + basic_machine=i386-sequent + basic_os=dynix + ;; + t3e) + basic_machine=alphaev5-cray + basic_os=unicos + ;; + t90) + basic_machine=t90-cray + basic_os=unicos + ;; + toad1) + basic_machine=pdp10-xkl + basic_os=tops20 + ;; + tpf) + basic_machine=s390x-ibm + basic_os=tpf + ;; + udi29k) + basic_machine=a29k-amd + basic_os=udi + ;; + ultra3) + basic_machine=a29k-nyu + basic_os=sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + basic_os=none + ;; + vaxv) + basic_machine=vax-dec + basic_os=sysv + ;; + vms) + basic_machine=vax-dec + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta + ;; + vxworks960) + basic_machine=i960-wrs + basic_os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + basic_os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + basic_os=vxworks + ;; + xbox) + basic_machine=i686-pc + basic_os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + basic_os=unicos + ;; + *) + basic_machine=$1 + basic_os= + ;; + esac ;; esac -# Decode aliases for certain CPU-COMPANY combinations. +# Decode 1-component or ad-hoc basic machines case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia16 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | wasm32 \ - | we32k \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none + # Here we handle the default manufacturer of certain CPU types. It is in + # some cases the only manufacturer, in others, it is the most popular. + w89k) + cpu=hppa1.1 + vendor=winbond ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + op50n) + cpu=hppa1.1 + vendor=oki ;; - ms1) - basic_machine=mt-unknown + op60c) + cpu=hppa1.1 + vendor=oki ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown + ibm*) + cpu=i370 + vendor=ibm ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none + orion105) + cpu=clipper + vendor=highlevel ;; - xscaleeb) - basic_machine=armeb-unknown + mac | mpw | mac-mpw) + cpu=m68k + vendor=apple ;; - - xscaleel) - basic_machine=armel-unknown + pmac | pmac-mpw) + cpu=powerpc + vendor=apple ;; - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pru-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | wasm32-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-unknown - os=-bsd - ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att + cpu=m68000 + vendor=att ;; 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux + cpu=we32k + vendor=att ;; bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec + cpu=powerpc + vendor=ibm + basic_os=cnk ;; decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 + cpu=pdp10 + vendor=dec + basic_os=tops10 ;; decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 + cpu=pdp10 + vendor=dec + basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2* | dpx2*-bull) - basic_machine=m68k-bull - os=-sysv3 - ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" + cpu=m68k + vendor=motorola ;; - e500v[12]-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - os=$os"spe" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd + dpx2*) + cpu=m68k + vendor=bull + basic_os=sysv3 ;; encore | umax | mmax) - basic_machine=ns32k-encore + cpu=ns32k + vendor=encore ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose + elxsi) + cpu=elxsi + vendor=elxsi + basic_os=${basic_os:-bsd} ;; fx2800) - basic_machine=i860-alliant + cpu=i860 + vendor=alliant ;; genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 + cpu=ns32k + vendor=ns ;; h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp + cpu=m68000 + vendor=hp ;; hp9k3[2-9][0-9]) - basic_machine=m68k-hp + cpu=m68k + vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp + cpu=hppa1.0 + vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp + cpu=hppa1.1 + vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppa-next) - os=-nextstep3 - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm + cpu=hppa1.0 + vendor=hp ;; i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv32 + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=sysv32 ;; i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv4 + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=sysv4 ;; i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-sysv + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=sysv ;; i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach + cpu=$(echo "$1" | sed -e 's/86.*/86/') + vendor=pc + basic_os=solaris2 ;; - i386-vsta | vsta) - basic_machine=i386-unknown - os=-vsta + j90 | j90-cray) + cpu=j90 + vendor=cray + basic_os=${basic_os:-unicos} ;; iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) + cpu=mips + vendor=sgi + case $basic_os in + irix*) ;; *) - os=-irix4 + basic_os=irix4 ;; esac ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux - ;; - m88k-omron*) - basic_machine=m88k-omron - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + cpu=m68000 + vendor=convergent ;; - mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos + *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) + cpu=m68k + vendor=atari + basic_os=mint ;; news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next ) - basic_machine=m68k-next - case $os in - -nextstep* ) + cpu=mips + vendor=sony + basic_os=newsos + ;; + next | m*-next) + cpu=m68k + vendor=next + case $basic_os in + openstep*) + ;; + nextstep*) ;; - -ns2*) - os=-nextstep2 + ns2*) + basic_os=nextstep2 ;; *) - os=-nextstep3 + basic_os=nextstep3 ;; esac ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - nsx-tandem) - basic_machine=nsx-tandem + cpu=np1 + vendor=gould ;; op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k + cpu=hppa1.1 + vendor=oki + basic_os=proelf ;; pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` - os=-linux + cpu=hppa1.1 + vendor=hitachi + basic_os=hiuxwe2 ;; pbd) - basic_machine=sparc-tti + cpu=sparc + vendor=tti ;; pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc + cpu=m68k + vendor=tti ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + pc532) + cpu=ns32k + vendor=pc532 ;; pn) - basic_machine=pn-gould + cpu=pn + vendor=gould ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + power) + cpu=power + vendor=ibm ;; ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff + cpu=i386 + vendor=ibm ;; rm[46]00) - basic_machine=mips-siemens + cpu=mips + vendor=siemens ;; rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown + cpu=romp + vendor=ibm ;; sde) - basic_machine=mipsisa32-sde - os=-elf + cpu=mipsisa32 + vendor=sde + basic_os=${basic_os:-elf} ;; - sei) - basic_machine=mips-sei - os=-seiux + simso-wrs) + cpu=sparclite + vendor=wrs + basic_os=vxworks ;; - sequent) - basic_machine=i386-sequent + tower | tower-32) + cpu=m68k + vendor=ncr ;; - sh) - basic_machine=sh-hitachi - os=-hms + vpp*|vx|vx-*) + cpu=f301 + vendor=fujitsu ;; - sh5el) - basic_machine=sh5le-unknown + w65) + cpu=w65 + vendor=wdc ;; - sh64) - basic_machine=sh64-unknown + w89k-*) + cpu=hppa1.1 + vendor=winbond + basic_os=proelf ;; - sparclite-wrs | simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks + none) + cpu=none + vendor=none ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 + leon|leon[3-9]) + cpu=sparc + vendor=$basic_machine ;; - spur) - basic_machine=spur-unknown + leon-*|leon[3-9]-*) + cpu=sparc + vendor=$(echo "$basic_machine" | sed 's/-.*//') ;; - st2000) - basic_machine=m68k-tandem + + *-*) + # shellcheck disable=SC2162 + IFS="-" read cpu vendor <&2 - exit 1 + # Recognize the canonical CPU types that are allowed with any + # company name. + case $cpu in + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | abacus \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ + | alphapca5[67] | alpha64pca5[67] \ + | am33_2.0 \ + | amdgcn \ + | arc | arceb | arc64 \ + | arm | arm[lb]e | arme[lb] | armv* \ + | avr | avr32 \ + | asmjs \ + | ba \ + | be32 | be64 \ + | bfin | bpf | bs2000 \ + | c[123]* | c30 | [cjt]90 | c4x \ + | c8051 | clipper | craynv | csky | cydra \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | elxsi | epiphany \ + | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | h8300 | h8500 \ + | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i*86 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | loongarch32 | loongarch64 | loongarchx32 \ + | m32c | m32r | m32rle \ + | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ + | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ + | m88110 | m88k | maxq | mb | mcore | mep | metag \ + | microblaze | microblazeel \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64eb | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r3 | mipsisa32r3el \ + | mipsisa32r5 | mipsisa32r5el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r3 | mipsisa64r3el \ + | mipsisa64r5 | mipsisa64r5el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mmix \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | none | np1 | ns16k | ns32k | nvptx \ + | open8 \ + | or1k* \ + | or32 \ + | orion \ + | picochip \ + | pdp10 | pdp11 | pj | pjl | pn | power \ + | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ + | rl78 | romp | rs6000 | rx \ + | s390 | s390x \ + | score \ + | sh | shl \ + | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ + | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ + | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ + | spu \ + | tahoe \ + | thumbv7* \ + | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ + | tron \ + | ubicom32 \ + | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ + | vax \ + | visium \ + | w65 \ + | wasm32 | wasm64 \ + | we32k \ + | x86 | x86_64 | xc16x | xgate | xps100 \ + | xstormy16 | xtensa* \ + | ymp \ + | z8k | z80) + ;; + + *) + echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + exit 1 + ;; + esac ;; esac # Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` +case $vendor in + digital*) + vendor=dec ;; - *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + commodore*) + vendor=cbm ;; *) ;; @@ -1363,203 +1284,213 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if test x$basic_os != x then -case $os in - # First match some system type aliases - # that might get confused with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux + +# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just +# set os. +case $basic_os in + gnu/linux*) + kernel=linux + os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|') + ;; + os2-emx) + kernel=os2 + os=$(echo $basic_os | sed -e 's|os2-emx|emx|') + ;; + nto-qnx*) + kernel=nto + os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|') + ;; + *-*) + # shellcheck disable=SC2162 + IFS="-" read kernel os <&2 - exit 1 + # No normalization, but not necessarily accepted, that comes below. ;; esac + else # Here we handle the default operating systems that come with various machines. @@ -1572,264 +1503,361 @@ else # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. -case $basic_machine in +kernel= +case $cpu-$vendor in score-*) - os=-elf + os=elf ;; spu-*) - os=-elf + os=elf ;; *-acorn) - os=-riscix1.2 + os=riscix1.2 ;; arm*-rebel) - os=-linux + kernel=linux + os=gnu ;; arm*-semi) - os=-aout + os=aout ;; c4x-* | tic4x-*) - os=-coff + os=coff ;; c8051-*) - os=-elf + os=elf + ;; + clipper-intergraph) + os=clix ;; hexagon-*) - os=-elf + os=elf ;; tic54x-*) - os=-coff + os=coff ;; tic55x-*) - os=-coff + os=coff ;; tic6x-*) - os=-coff + os=coff ;; # This must come before the *-dec entry. pdp10-*) - os=-tops20 + os=tops20 ;; pdp11-*) - os=-none + os=none ;; *-dec | vax-*) - os=-ultrix4.2 + os=ultrix4.2 ;; m68*-apollo) - os=-domain + os=domain ;; i386-sun) - os=-sunos4.0.2 + os=sunos4.0.2 ;; m68000-sun) - os=-sunos3 + os=sunos3 ;; m68*-cisco) - os=-aout + os=aout ;; mep-*) - os=-elf + os=elf ;; mips*-cisco) - os=-elf + os=elf ;; mips*-*) - os=-elf + os=elf ;; or32-*) - os=-coff + os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 + os=sysv3 ;; sparc-* | *-sun) - os=-sunos4.1.1 + os=sunos4.1.1 ;; pru-*) - os=-elf + os=elf ;; *-be) - os=-beos - ;; - *-haiku) - os=-haiku + os=beos ;; *-ibm) - os=-aix + os=aix ;; *-knuth) - os=-mmixware + os=mmixware ;; *-wec) - os=-proelf + os=proelf ;; *-winbond) - os=-proelf + os=proelf ;; *-oki) - os=-proelf + os=proelf ;; *-hp) - os=-hpux + os=hpux ;; *-hitachi) - os=-hiux + os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv + os=sysv ;; *-cbm) - os=-amigaos + os=amigaos ;; *-dg) - os=-dgux + os=dgux ;; *-dolphin) - os=-sysv3 + os=sysv3 ;; m68k-ccur) - os=-rtu + os=rtu ;; m88k-omron*) - os=-luna + os=luna ;; - *-next ) - os=-nextstep + *-next) + os=nextstep ;; *-sequent) - os=-ptx + os=ptx ;; *-crds) - os=-unos + os=unos ;; *-ns) - os=-genix + os=genix ;; i370-*) - os=-mvs - ;; - *-next) - os=-nextstep3 + os=mvs ;; *-gould) - os=-sysv + os=sysv ;; *-highlevel) - os=-bsd + os=bsd ;; *-encore) - os=-bsd + os=bsd ;; *-sgi) - os=-irix + os=irix ;; *-siemens) - os=-sysv4 + os=sysv4 ;; *-masscomp) - os=-rtu + os=rtu ;; f30[01]-fujitsu | f700-fujitsu) - os=-uxpv + os=uxpv ;; *-rom68k) - os=-coff + os=coff ;; *-*bug) - os=-coff + os=coff ;; *-apple) - os=-macos + os=macos ;; *-atari*) - os=-mint + os=mint + ;; + *-wrs) + os=vxworks ;; *) - os=-none + os=none ;; esac + fi +# Now, validate our (potentially fixed-up) OS. +case $os in + # Sometimes we do "kernel-libc", so those need to count as OSes. + musl* | newlib* | uclibc*) + ;; + # Likewise for "kernel-abi" + eabi* | gnueabi*) + ;; + # VxWorks passes extra cpu info in the 4th filed. + simlinux | simwindows | spe) + ;; + # Now accept the basic system types. + # The portable systems comes first. + # Each alternative MUST end in a * to match a version number. + gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ + | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ + | hiux* | abug | nacl* | netware* | windows* \ + | os9* | macos* | osx* | ios* \ + | mpw* | magic* | mmixware* | mon960* | lnews* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* | twizzler* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ + | mirbsd* | netbsd* | dicos* | openedition* | ose* \ + | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ + | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* | serenity* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | mint* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ + | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ + | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*) + ;; + # This one is extra strict with allowed versions + sco3.2v2 | sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + none) + ;; + *) + echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 + exit 1 + ;; +esac + +# As a final step for OS-related things, validate the OS-kernel combination +# (given a valid OS), if there is a kernel. +case $kernel-$os in + linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* ) + ;; + uclinux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -uclibc* ) + # These are just libc implementations, not actual OSes, and thus + # require a kernel. + echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + exit 1 + ;; + kfreebsd*-gnu* | kopensolaris*-gnu*) + ;; + vxworks-simlinux | vxworks-simwindows | vxworks-spe) + ;; + nto-qnx*) + ;; + os2-emx) + ;; + *-eabi* | *-gnueabi*) + ;; + -*) + # Blank kernel with real OS is always fine. + ;; + *-*) + echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + exit 1 + ;; +esac + # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) +case $vendor in + unknown) + case $cpu-$os in + *-riscix*) vendor=acorn ;; - -sunos*) + *-sunos*) vendor=sun ;; - -cnk*|-aix*) + *-cnk* | *-aix*) vendor=ibm ;; - -beos*) + *-beos*) vendor=be ;; - -hpux*) + *-hpux*) vendor=hp ;; - -mpeix*) + *-mpeix*) vendor=hp ;; - -hiux*) + *-hiux*) vendor=hitachi ;; - -unos*) + *-unos*) vendor=crds ;; - -dgux*) + *-dgux*) vendor=dg ;; - -luna*) + *-luna*) vendor=omron ;; - -genix*) + *-genix*) vendor=ns ;; - -mvs* | -opened*) + *-clix*) + vendor=intergraph + ;; + *-mvs* | *-opened*) + vendor=ibm + ;; + *-os400*) vendor=ibm ;; - -os400*) + s390-* | s390x-*) vendor=ibm ;; - -ptx*) + *-ptx*) vendor=sequent ;; - -tpf*) + *-tpf*) vendor=ibm ;; - -vxsim* | -vxworks* | -windiss*) + *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; - -aux*) + *-aux*) vendor=apple ;; - -hms*) + *-hms*) vendor=hitachi ;; - -mpw* | -macos*) + *-mpw* | *-macos*) vendor=apple ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; - -vos*) + *-vos*) vendor=stratus ;; esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff --git a/depends/funcs.mk b/depends/funcs.mk index 5c05a4e7c2..447205dc66 100644 --- a/depends/funcs.mk +++ b/depends/funcs.mk @@ -1,17 +1,23 @@ define int_vars #Set defaults for vars which may be overridden per-package -$(1)_cc=$($($(1)_type)_CC) -$(1)_cxx=$($($(1)_type)_CXX) -$(1)_objc=$($($(1)_type)_OBJC) -$(1)_objcxx=$($($(1)_type)_OBJCXX) -$(1)_ar=$($($(1)_type)_AR) -$(1)_ranlib=$($($(1)_type)_RANLIB) -$(1)_libtool=$($($(1)_type)_LIBTOOL) -$(1)_nm=$($($(1)_type)_NM) -$(1)_cflags=$($($(1)_type)_CFLAGS) $($($(1)_type)_$(release_type)_CFLAGS) -$(1)_cxxflags=$($($(1)_type)_CXXFLAGS) $($($(1)_type)_$(release_type)_CXXFLAGS) -$(1)_ldflags=$($($(1)_type)_LDFLAGS) $($($(1)_type)_$(release_type)_LDFLAGS) -L$($($(1)_type)_prefix)/lib -$(1)_cppflags=$($($(1)_type)_CPPFLAGS) $($($(1)_type)_$(release_type)_CPPFLAGS) -I$($($(1)_type)_prefix)/include +$(1)_cc=$$($$($(1)_type)_CC) +$(1)_cxx=$$($$($(1)_type)_CXX) +$(1)_objc=$$($$($(1)_type)_OBJC) +$(1)_objcxx=$$($$($(1)_type)_OBJCXX) +$(1)_ar=$$($$($(1)_type)_AR) +$(1)_ranlib=$$($$($(1)_type)_RANLIB) +$(1)_libtool=$$($$($(1)_type)_LIBTOOL) +$(1)_nm=$$($$($(1)_type)_NM) +$(1)_cflags=$$($$($(1)_type)_CFLAGS) \ + $$($$($(1)_type)_$$(release_type)_CFLAGS) +$(1)_cxxflags=$$($$($(1)_type)_CXXFLAGS) \ + $$($$($(1)_type)_$$(release_type)_CXXFLAGS) +$(1)_ldflags=$$($$($(1)_type)_LDFLAGS) \ + $$($$($(1)_type)_$$(release_type)_LDFLAGS) \ + -L$$($$($(1)_type)_prefix)/lib +$(1)_cppflags=$$($$($(1)_type)_CPPFLAGS) \ + $$($$($(1)_type)_$$(release_type)_CPPFLAGS) \ + -I$$($$($(1)_type)_prefix)/include $(1)_recipe_hash:= endef @@ -31,8 +37,6 @@ endef define fetch_file ( test -f $$($(1)_source_dir)/$(4) || \ ( $(call fetch_file_inner,$(1),$(2),$(3),$(4),$(5)) || \ - (sleep 5 && $(call fetch_file_inner,$(1),$(2),$(3),$(4),$(5))) || \ - (sleep 10 && $(call fetch_file_inner,$(1),$(2),$(3),$(4),$(5))) || \ $(call fetch_file_inner,$(1),$(FALLBACK_DOWNLOAD_PATH),$(3),$(4),$(5)))) endef @@ -43,9 +47,9 @@ endef define int_get_build_id $(eval $(1)_dependencies += $($(1)_$(host_arch)_$(host_os)_dependencies) $($(1)_$(host_os)_dependencies)) -$(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($($(1)_type)_native_toolchain) $($(1)_dependencies))) +$(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($($(1)_type)_native_toolchain) $($($(1)_type)_native_binutils) $($(1)_dependencies))) $(foreach dep,$($(1)_all_dependencies),$(eval $(1)_build_id_deps+=$(dep)-$($(dep)_version)-$($(dep)_recipe_hash))) -$(eval $(1)_build_id_long:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps) $($($(1)_type)_id_string)) +$(eval $(1)_build_id_long:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps) $($($(1)_type)_id)) $(eval $(1)_build_id:=$(shell echo -n "$($(1)_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH))) final_build_id_long+=$($(package)_build_id_long) @@ -63,6 +67,7 @@ $(1)_cached_checksum:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_bui $(1)_patch_dir:=$(base_build_dir)/$(host)/$(1)/$($(1)_version)-$($(1)_build_id)/.patches-$($(1)_build_id) $(1)_prefixbin:=$($($(1)_type)_prefix)/bin/ $(1)_cached:=$(BASE_CACHE)/$(host)/$(1)/$(1)-$($(1)_version)-$($(1)_build_id).tar.gz +$(1)_build_log:=$(BASEDIR)/$(1)-$($(1)_version)-$($(1)_build_id).log $(1)_all_sources=$($(1)_file_name) $($(1)_extra_sources) #stamps @@ -71,19 +76,20 @@ $(1)_extracted=$$($(1)_extract_dir)/.stamp_extracted $(1)_preprocessed=$$($(1)_extract_dir)/.stamp_preprocessed $(1)_cleaned=$$($(1)_extract_dir)/.stamp_cleaned $(1)_built=$$($(1)_build_dir)/.stamp_built -$(1)_configured=$$($(1)_build_dir)/.stamp_configured +$(1)_configured=$(host_prefix)/.$(1)_stamp_configured $(1)_staged=$$($(1)_staging_dir)/.stamp_staged $(1)_postprocessed=$$($(1)_staging_prefix_dir)/.stamp_postprocessed $(1)_download_path_fixed=$(subst :,\:,$$($(1)_download_path)) #default commands +# The default behavior for tar will try to set ownership when running as uid 0 and may not succeed, --no-same-owner disables this behavior $(1)_fetch_cmds ?= $(call fetch_file,$(1),$(subst \:,:,$$($(1)_download_path_fixed)),$$($(1)_download_file),$($(1)_file_name),$($(1)_sha256_hash)) -$(1)_extract_cmds ?= mkdir -p $$($(1)_extract_dir) && echo "$$($(1)_sha256_hash) $$($(1)_source)" > $$($(1)_extract_dir)/.$$($(1)_file_name).hash && $(build_SHA256SUM) -c $$($(1)_extract_dir)/.$$($(1)_file_name).hash && tar --strip-components=1 -xf $$($(1)_source) -$(1)_preprocess_cmds ?= -$(1)_build_cmds ?= -$(1)_config_cmds ?= -$(1)_stage_cmds ?= +$(1)_extract_cmds ?= mkdir -p $$($(1)_extract_dir) && echo "$$($(1)_sha256_hash) $$($(1)_source)" > $$($(1)_extract_dir)/.$$($(1)_file_name).hash && $(build_SHA256SUM) -c $$($(1)_extract_dir)/.$$($(1)_file_name).hash && $(build_TAR) --no-same-owner --strip-components=1 -xf $$($(1)_source) +$(1)_preprocess_cmds ?= true +$(1)_build_cmds ?= true +$(1)_config_cmds ?= true +$(1)_stage_cmds ?= true $(1)_set_vars ?= @@ -131,11 +137,18 @@ $(1)_config_env+=$($(1)_config_env_$(host_arch)_$(host_os)) $($(1)_config_env_$( $(1)_config_env+=PKG_CONFIG_LIBDIR=$($($(1)_type)_prefix)/lib/pkgconfig $(1)_config_env+=PKG_CONFIG_PATH=$($($(1)_type)_prefix)/share/pkgconfig +$(1)_config_env+=PKG_CONFIG_SYSROOT_DIR=/ +$(1)_config_env+=CMAKE_MODULE_PATH=$($($(1)_type)_prefix)/lib/cmake $(1)_config_env+=PATH=$(build_prefix)/bin:$(PATH) $(1)_build_env+=PATH=$(build_prefix)/bin:$(PATH) $(1)_stage_env+=PATH=$(build_prefix)/bin:$(PATH) -$(1)_autoconf=./configure --host=$($($(1)_type)_host) --disable-dependency-tracking --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)" +# Setting a --build type that differs from --host will explicitly enable +# cross-compilation mode. Note that --build defaults to the output of +# config.guess, which is what we set it too here. This also quells autoconf +# warnings, "If you wanted to set the --build type, don't use --host.", +# when using versions older than 2.70. +$(1)_autoconf=./configure --build=$(BUILD) --host=$($($(1)_type)_host) --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)" ifneq ($($(1)_nm),) $(1)_autoconf += NM="$$($(1)_nm)" endif @@ -157,57 +170,80 @@ endif ifneq ($($(1)_ldflags),) $(1)_autoconf += LDFLAGS="$$($(1)_ldflags)" endif + +$(1)_cmake=env CC="$$($(1)_cc)" \ + CFLAGS="$$($(1)_cppflags) $$($(1)_cflags)" \ + CXX="$$($(1)_cxx)" \ + CXXFLAGS="$$($(1)_cppflags) $$($(1)_cxxflags)" \ + LDFLAGS="$$($(1)_ldflags)" \ + cmake -DCMAKE_INSTALL_PREFIX:PATH="$$($($(1)_type)_prefix)" $$($(1)_config_opts) +ifeq ($($(1)_type),build) +$(1)_cmake += -DCMAKE_INSTALL_RPATH:PATH="$$($($(1)_type)_prefix)/lib" +else +ifneq ($(host),$(build)) +$(1)_cmake += -DCMAKE_SYSTEM_NAME=$($(host_os)_cmake_system) +$(1)_cmake += -DCMAKE_C_COMPILER_TARGET=$(host) +$(1)_cmake += -DCMAKE_CXX_COMPILER_TARGET=$(host) +endif +endif endef define int_add_cmds +ifneq ($(LOG),) +$(1)_logging = >>$$($(1)_build_log) 2>&1 || { if test -f $$($(1)_build_log); then cat $$($(1)_build_log); fi; exit 1; } +endif + $($(1)_fetched): - $(AT)mkdir -p $$(@D) $(SOURCES_PATH) - $(AT)rm -f $$@ - $(AT)touch $$@ - $(AT)cd $$(@D); $(call $(1)_fetch_cmds,$(1)) - $(AT)cd $($(1)_source_dir); $(foreach source,$($(1)_all_sources),$(build_SHA256SUM) $(source) >> $$(@);) - $(AT)touch $$@ + mkdir -p $$(@D) $(SOURCES_PATH) + rm -f $$@ + touch $$@ + cd $$(@D); $($(1)_fetch_cmds) + cd $($(1)_source_dir); $(foreach source,$($(1)_all_sources),$(build_SHA256SUM) $(source) >> $$(@);) + touch $$@ $($(1)_extracted): | $($(1)_fetched) - $(AT)echo Extracting $(1)... - $(AT)mkdir -p $$(@D) - $(AT)cd $$(@D); $(call $(1)_extract_cmds,$(1)) - $(AT)touch $$@ -$($(1)_preprocessed): | $($(1)_dependencies) $($(1)_extracted) - $(AT)echo Preprocessing $(1)... - $(AT)mkdir -p $$(@D) $($(1)_patch_dir) - $(AT)$(foreach patch,$($(1)_patches),cd $(PATCHES_PATH)/$(1); cp $(patch) $($(1)_patch_dir) ;) - $(AT)cd $$(@D); $(call $(1)_preprocess_cmds, $(1)) - $(AT)touch $$@ -$($(1)_configured): | $($(1)_preprocessed) - $(AT)echo Configuring $(1)... - $(AT)rm -rf $(host_prefix); mkdir -p $(host_prefix)/lib; cd $(host_prefix); $(foreach package,$($(1)_all_dependencies), tar xf $($(package)_cached); ) - $(AT)mkdir -p $$(@D) - $(AT)+cd $$(@D); $($(1)_config_env) $(call $(1)_config_cmds, $(1)) - $(AT)touch $$@ + echo Extracting $(1)... + mkdir -p $$(@D) + cd $$(@D); $($(1)_extract_cmds) + touch $$@ +$($(1)_preprocessed): | $($(1)_extracted) + echo Preprocessing $(1)... + mkdir -p $$(@D) $($(1)_patch_dir) + $(foreach patch,$($(1)_patches),cd $(PATCHES_PATH)/$(1); cp $(patch) $($(1)_patch_dir) ;) + { cd $$(@D); $($(1)_preprocess_cmds); } $$($(1)_logging) + touch $$@ +$($(1)_configured): | $($(1)_dependencies) $($(1)_preprocessed) + echo Configuring $(1)... + rm -rf $(host_prefix); mkdir -p $(host_prefix)/lib; cd $(host_prefix); $(foreach package,$($(1)_all_dependencies), $(build_TAR) --no-same-owner -xf $($(package)_cached); ) + mkdir -p $$($(1)_build_dir) + +{ cd $$($(1)_build_dir); export $($(1)_config_env); $($(1)_config_cmds); } $$($(1)_logging) + touch $$@ $($(1)_built): | $($(1)_configured) - $(AT)echo Building $(1)... - $(AT)mkdir -p $$(@D) - $(AT)+cd $$(@D); $($(1)_build_env) $(call $(1)_build_cmds, $(1)) - $(AT)touch $$@ + echo Building $(1)... + mkdir -p $$(@D) + +{ cd $$(@D); export $($(1)_build_env); $($(1)_build_cmds); } $$($(1)_logging) + touch $$@ $($(1)_staged): | $($(1)_built) - $(AT)echo Staging $(1)... - $(AT)mkdir -p $($(1)_staging_dir)/$(host_prefix) - $(AT)cd $($(1)_build_dir); $($(1)_stage_env) $(call $(1)_stage_cmds, $(1)) - $(AT)rm -rf $($(1)_extract_dir) - $(AT)touch $$@ + echo Staging $(1)... + mkdir -p $($(1)_staging_dir)/$(host_prefix) + +{ cd $($(1)_build_dir); export $($(1)_stage_env); $($(1)_stage_cmds); } $$($(1)_logging) + rm -rf $($(1)_extract_dir) + touch $$@ $($(1)_postprocessed): | $($(1)_staged) - $(AT)echo Postprocessing $(1)... - $(AT)cd $($(1)_staging_prefix_dir); $(call $(1)_postprocess_cmds) - $(AT)touch $$@ + echo Postprocessing $(1)... + cd $($(1)_staging_prefix_dir); $($(1)_postprocess_cmds) + touch $$@ $($(1)_cached): | $($(1)_dependencies) $($(1)_postprocessed) - $(AT)echo Caching $(1)... - $(AT)cd $$($(1)_staging_dir)/$(host_prefix); find . | sort | tar --no-recursion -czf $$($(1)_staging_dir)/$$(@F) -T - - $(AT)mkdir -p $$(@D) - $(AT)rm -rf $$(@D) && mkdir -p $$(@D) - $(AT)mv $$($(1)_staging_dir)/$$(@F) $$(@) - $(AT)rm -rf $($(1)_staging_dir) + echo Caching $(1)... + cd $$($(1)_staging_dir)/$(host_prefix); \ + find . ! -name '.stamp_postprocessed' -print0 | TZ=UTC xargs -0r touch -h -m -t 200001011200; \ + find . ! -name '.stamp_postprocessed' | LC_ALL=C sort | $(build_TAR) --numeric-owner --no-recursion -czf $$($(1)_staging_dir)/$$(@F) -T - + mkdir -p $$(@D) + rm -rf $$(@D) && mkdir -p $$(@D) + mv $$($(1)_staging_dir)/$$(@F) $$(@) + rm -rf $($(1)_staging_dir) + if test -f $($(1)_build_log); then mv $($(1)_build_log) $$(@D); fi $($(1)_cached_checksum): $($(1)_cached) - $(AT)cd $$(@D); $(build_SHA256SUM) $$( $$(@) + cd $$(@D); $(build_SHA256SUM) $$( $$(@) .PHONY: $(1) $(1): | $($(1)_cached_checksum) @@ -215,6 +251,14 @@ $(1): | $($(1)_cached_checksum) endef +stages = fetched extracted preprocessed configured built staged postprocessed cached cached_checksum + +define ext_add_stages +$(foreach stage,$(stages), + $(1)_$(stage): $($(1)_$(stage)) + .PHONY: $(1)_$(stage)) +endef + # These functions create the build targets for each package. They must be # broken down into small steps so that each part is done for all packages # before moving on to the next step. Otherwise, a package's info @@ -229,7 +273,8 @@ $(foreach package,$(packages),$(eval $(package)_type=$(host_arch)_$(host_os))) $(foreach package,$(all_packages),$(eval $(call int_vars,$(package)))) #include package files -$(foreach package,$(all_packages),$(eval include packages/$(package).mk)) +$(foreach native_package,$(native_packages),$(eval include packages/$(native_package).mk)) +$(foreach package,$(packages),$(eval include packages/$(package).mk)) #compute a hash of all files that comprise this package's build recipe $(foreach package,$(all_packages),$(eval $(call int_get_build_recipe_hash,$(package)))) @@ -244,4 +289,4 @@ $(foreach package,$(all_packages),$(eval $(call int_config_attach_build_config,$ $(foreach package,$(all_packages),$(eval $(call int_add_cmds,$(package)))) #special exception: if a toolchain package exists, all non-native packages depend on it -$(foreach package,$(packages),$(eval $($(package)_unpacked): |$($($(host_arch)_$(host_os)_native_toolchain)_cached) )) +$(foreach package,$(packages),$(eval $($(package)_extracted): |$($($(host_arch)_$(host_os)_native_toolchain)_cached) $($($(host_arch)_$(host_os)_native_binutils)_cached) )) diff --git a/depends/gen_id b/depends/gen_id new file mode 100755 index 0000000000..ac69ca7ee1 --- /dev/null +++ b/depends/gen_id @@ -0,0 +1,74 @@ +#!/usr/bin/env bash + +# Usage: env [ CC=... ] [ CXX=... ] [ AR=... ] [ RANLIB=... ] [ STRIP=... ] \ +# [ DEBUG=... ] ./build-id [ID_SALT]... +# +# Prints to stdout a SHA256 hash representing the current toolset, used by +# depends/Makefile as a build id for caching purposes (detecting when the +# toolset has changed and the cache needs to be invalidated). +# +# If the DEBUG environment variable is non-empty and the system has `tee` +# available in its $PATH, the pre-image to the SHA256 hash will be printed to +# stderr. This is to help developers debug caching issues in depends. + +# This script explicitly does not `set -e` because id determination is mostly +# opportunistic: it is fine that things fail, as long as they fail consistently. + +# Command variables (CC/CXX/AR) which can be blank are invoked with `bash -c`, +# because the "command not found" error message printed by shells often include +# the line number, like so: +# +# ./depends/gen_id: line 43: --version: command not found +# +# By invoking with `bash -c`, we ensure that the line number is always 1 + +( + # Redirect stderr to stdout + exec 2>&1 + + echo "BEGIN ALL" + + # Include any ID salts supplied via command line + echo "BEGIN ID SALT" + echo "$@" + echo "END ID SALT" + + # GCC only prints COLLECT_LTO_WRAPPER when invoked with just "-v", but we want + # the information from "-v -E -" as well, so just include both. + echo "BEGIN CC" + bash -c "${CC} -v" + bash -c "${CC} -v -E -xc -o /dev/null - < /dev/null" + bash -c "${CC} -v -E -xobjective-c -o /dev/null - < /dev/null" + echo "END CC" + + echo "BEGIN CXX" + bash -c "${CXX} -v" + bash -c "${CXX} -v -E -xc++ -o /dev/null - < /dev/null" + bash -c "${CXX} -v -E -xobjective-c++ -o /dev/null - < /dev/null" + echo "END CXX" + + echo "BEGIN AR" + bash -c "${AR} --version" + env | grep '^AR_' + echo "ZERO_AR_DATE=${ZERO_AR_DATE}" + echo "END AR" + + echo "BEGIN RANLIB" + bash -c "${RANLIB} --version" + env | grep '^RANLIB_' + echo "END RANLIB" + + echo "BEGIN STRIP" + bash -c "${STRIP} --version" + env | grep '^STRIP_' + echo "END STRIP" + + echo "END ALL" +) | if [ -n "$DEBUG" ] && command -v tee > /dev/null 2>&1; then + # When debugging and `tee` is available, output the preimage to stderr + # in addition to passing through stdin to stdout + tee >(cat 1>&2) + else + # Otherwise, passthrough stdin to stdout + cat + fi | ${SHA256SUM} - | cut -d' ' -f1 diff --git a/depends/hosts/android.mk b/depends/hosts/android.mk new file mode 100644 index 0000000000..6fc1318974 --- /dev/null +++ b/depends/hosts/android.mk @@ -0,0 +1,15 @@ + +ifeq ($(HOST),armv7a-linux-android) +android_CXX=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)eabi$(ANDROID_API_LEVEL)-clang++ +android_CC=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)eabi$(ANDROID_API_LEVEL)-clang +else +android_CXX=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)$(ANDROID_API_LEVEL)-clang++ +android_CC=$(ANDROID_TOOLCHAIN_BIN)/$(HOST)$(ANDROID_API_LEVEL)-clang +endif +android_AR=$(ANDROID_TOOLCHAIN_BIN)/llvm-ar +android_RANLIB=$(ANDROID_TOOLCHAIN_BIN)/llvm-ranlib +android_NM=$(ANDROID_TOOLCHAIN_BIN)/llvm-nm +android_STRIP=$(ANDROID_TOOLCHAIN_BIN)/llvm-strip +android_OBJDUMP=$(ANDROID_TOOLCHAIN_BIN)/llvm-objdump + +android_cmake_system=Android \ No newline at end of file diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk index 4e58bec74e..e539654056 100644 --- a/depends/hosts/darwin.mk +++ b/depends/hosts/darwin.mk @@ -1,9 +1,113 @@ -OSX_MIN_VERSION=10.8 -OSX_SDK_VERSION=10.11 -OSX_SDK=$(SDK_PATH)/MacOSX$(OSX_SDK_VERSION).sdk -LD64_VERSION=253.9 -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++ +OSX_MIN_VERSION=11.0 +OSX_SDK_VERSION=12.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 + +darwin_native_binutils=native_cctools + +ifeq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) +# FORCE_USE_SYSTEM_CLANG is empty, so we use our depends-managed, pinned clang +# from llvm.org + +# Clang is a dependency of native_cctools when FORCE_USE_SYSTEM_CLANG is empty +darwin_native_toolchain=native_cctools + +clang_prog=$(build_prefix)/bin/clang +clangxx_prog=$(clang_prog)++ + +clang_resource_dir=$(build_prefix)/lib/clang/$(native_clang_version) +else +# FORCE_USE_SYSTEM_CLANG is non-empty, so we use the clang from the user's +# system + +darwin_native_toolchain= + +# We can't just use $(shell command -v clang) because GNU Make handles builtins +# in a special way and doesn't know that `command` is a POSIX-standard builtin +# prior to 1af314465e5dfe3e8baa839a32a72e83c04f26ef, first released in v4.2.90. +# At the time of writing, GNU Make v4.2.1 is still being used in supported +# distro releases. +# +# Source: https://lists.gnu.org/archive/html/bug-make/2017-11/msg00017.html +clang_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang") +clangxx_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang++") + +clang_resource_dir=$(shell clang -print-resource-dir) +endif + +cctools_TOOLS=AR RANLIB STRIP NM LIBTOOL OTOOL INSTALL_NAME_TOOL DSYMUTIL + +# Make-only lowercase function +lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1)))))))))))))))))))))))))) + +# For well-known tools provided by cctools, make sure that their well-known +# variable is set to the full path of the tool, just like how AC_PATH_{TOO,PROG} +# would. +$(foreach TOOL,$(cctools_TOOLS),$(eval darwin_$(TOOL) = $$(build_prefix)/bin/$$(host)-$(call lc,$(TOOL)))) + +# Flag explanations: +# +# -mlinker-version +# +# Ensures that modern linker features are enabled. See here for more +# details: https://github.com/bitcoin/bitcoin/pull/19407. +# +# -B$(build_prefix)/bin +# +# Explicitly point to our binaries (e.g. cctools) so that they are +# ensured to be found and preferred over other possibilities. +# +# -stdlib=libc++ -stdlib++-isystem$(OSX_SDK)/usr/include/c++/v1 +# +# Forces clang to use the libc++ headers from our SDK and completely +# forget about the libc++ headers from the standard directories +# +# -Xclang -*system \ +# -Xclang -*system \ +# -Xclang -*system ... +# +# Adds path_a, path_b, and path_c to the bottom of clang's list of +# include search paths. This is used to explicitly specify the list of +# system include search paths and its ordering, rather than rely on +# clang's autodetection routine. This routine has been shown to: +# 1. Fail to pickup libc++ headers in $SYSROOT/usr/include/c++/v1 +# when clang was built manually (see: https://github.com/bitcoin/bitcoin/pull/17919#issuecomment-656785034) +# 2. Fail to pickup C headers in $SYSROOT/usr/include when +# C_INCLUDE_DIRS was specified at configure time (see: https://gist.github.com/dongcarl/5cdc6990b7599e8a5bf6d2a9c70e82f9) +# +# Talking directly to cc1 with -Xclang here grants us access to specify +# more granular categories for these system include search paths, and we +# can use the correct categories that these search paths would have been +# placed in if the autodetection routine had worked correctly. (see: +# https://gist.github.com/dongcarl/5cdc6990b7599e8a5bf6d2a9c70e82f9#the-treatment) +# +# Furthermore, it places these search paths after any "non-Xclang" +# specified search paths. This prevents any additional clang options or +# environment variables from coming after or in between these system +# include search paths, as that would be wrong in general but would also +# break #include_next's. +# +darwin_CC=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \ + -u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \ + -u LIBRARY_PATH \ + $(clang_prog) --target=$(host) -mmacosx-version-min=$(OSX_MIN_VERSION) \ + -B$(build_prefix)/bin -mlinker-version=$(LD64_VERSION) \ + -isysroot$(OSX_SDK) \ + -Xclang -internal-externc-isystem$(clang_resource_dir)/include \ + -Xclang -internal-externc-isystem$(OSX_SDK)/usr/include +darwin_CXX=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \ + -u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \ + -u LIBRARY_PATH \ + $(clangxx_prog) --target=$(host) -mmacosx-version-min=$(OSX_MIN_VERSION) \ + -B$(build_prefix)/bin -mlinker-version=$(LD64_VERSION) \ + -isysroot$(OSX_SDK) \ + -stdlib=libc++ \ + -stdlib++-isystem$(OSX_SDK)/usr/include/c++/v1 \ + -Xclang -internal-externc-isystem$(clang_resource_dir)/include \ + -Xclang -internal-externc-isystem$(OSX_SDK)/usr/include darwin_CFLAGS=-pipe darwin_CXXFLAGS=$(darwin_CFLAGS) @@ -14,4 +118,4 @@ darwin_release_CXXFLAGS=$(darwin_release_CFLAGS) darwin_debug_CFLAGS=-O1 darwin_debug_CXXFLAGS=$(darwin_debug_CFLAGS) -darwin_native_toolchain=native_cctools +darwin_cmake_system=Darwin \ No newline at end of file diff --git a/depends/hosts/default.mk b/depends/hosts/default.mk index 144e5f88b7..f0b6d2115a 100644 --- a/depends/hosts/default.mk +++ b/depends/hosts/default.mk @@ -8,14 +8,21 @@ default_host_AR = $(host_toolchain)ar default_host_RANLIB = $(host_toolchain)ranlib default_host_STRIP = $(host_toolchain)strip default_host_LIBTOOL = $(host_toolchain)libtool -default_host_INSTALL_NAME_TOOL = $(host_toolchain)install_name_tool -default_host_OTOOL = $(host_toolchain)otool default_host_NM = $(host_toolchain)nm define add_host_tool_func +ifneq ($(filter $(origin $1),undefined default),) +# Do noit consider the well-known var $1 if it is undefined or is taking a value +# that is predefined by "make" (e.g. the make variable "CC" has a predefined +# value of "cc") $(host_os)_$1?=$$(default_host_$1) $(host_arch)_$(host_os)_$1?=$$($(host_os)_$1) $(host_arch)_$(host_os)_$(release_type)_$1?=$$($(host_os)_$1) +else +$(host_os)_$1=$(or $($1),$($(host_os)_$1),$(default_host_$1)) +$(host_arch)_$(host_os)_$1=$(or $($1),$($(host_arch)_$(host_os)_$1),$$($(host_os)_$1)) +$(host_arch)_$(host_os)_$(release_type)_$1=$(or $($1),$($(host_arch)_$(host_os)_$(release_type)_$1),$$($(host_os)_$1)) +endif host_$1=$$($(host_arch)_$(host_os)_$1) endef @@ -26,5 +33,5 @@ host_$1 = $$($(host_arch)_$(host_os)_$1) host_$(release_type)_$1 = $$($(host_arch)_$(host_os)_$(release_type)_$1) endef -$(foreach tool,CC CXX AR RANLIB STRIP NM LIBTOOL OTOOL INSTALL_NAME_TOOL,$(eval $(call add_host_tool_func,$(tool)))) -$(foreach flags,CFLAGS CXXFLAGS CPPFLAGS LDFLAGS, $(eval $(call add_host_flags_func,$(flags)))) +$(foreach tool,CC CXX AR RANLIB STRIP NM LIBTOOL OTOOL INSTALL_NAME_TOOL DSYMUTIL,$(eval $(call add_host_tool_func,$(tool)))) +$(foreach flags,CFLAGS CXXFLAGS CPPFLAGS LDFLAGS, $(eval $(call add_host_flags_func,$(flags)))) \ No newline at end of file diff --git a/depends/hosts/linux.mk b/depends/hosts/linux.mk index 602206d634..76a2e4f2d9 100644 --- a/depends/hosts/linux.mk +++ b/depends/hosts/linux.mk @@ -7,7 +7,7 @@ linux_release_CXXFLAGS=$(linux_release_CFLAGS) linux_debug_CFLAGS=-O1 linux_debug_CXXFLAGS=$(linux_debug_CFLAGS) -linux_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC +linux_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -D_LIBCPP_DEBUG=1 ifeq (86,$(findstring 86,$(build_arch))) i686_linux_CC=gcc -m32 @@ -29,3 +29,4 @@ i686_linux_CXX=$(default_host_CXX) -m32 x86_64_linux_CC=$(default_host_CC) -m64 x86_64_linux_CXX=$(default_host_CXX) -m64 endif +linux_cmake_system=Linux \ No newline at end of file diff --git a/depends/hosts/mingw32.mk b/depends/hosts/mingw32.mk index 83fc501a19..b5fa1cf2b4 100644 --- a/depends/hosts/mingw32.mk +++ b/depends/hosts/mingw32.mk @@ -1,3 +1,10 @@ +ifneq ($(shell $(SHELL) $(.SHELLFLAGS) "command -v $(host)-g++-posix"),) +mingw32_CXX := $(host)-g++-posix +endif +ifneq ($(shell $(SHELL) $(.SHELLFLAGS) "command -v $(host)-gcc-posix"),) +mingw32_CC := $(host)-gcc-posix +endif + mingw32_CFLAGS=-pipe mingw32_CXXFLAGS=$(mingw32_CFLAGS) -static-libstdc++ @@ -8,3 +15,5 @@ mingw32_debug_CFLAGS=-O1 mingw32_debug_CXXFLAGS=$(mingw32_debug_CFLAGS) mingw32_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC + +mingw32_cmake_system=Windows \ No newline at end of file diff --git a/depends/packages/backtrace.mk b/depends/packages/backtrace.mk index c7e47c788d..9ece589afa 100644 --- a/depends/packages/backtrace.mk +++ b/depends/packages/backtrace.mk @@ -9,6 +9,7 @@ $(package)_config_opts=--disable-shared --enable-host-shared --prefix=$(host_pre endef define $(package)_config_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . && \ $($(package)_autoconf) endef @@ -19,3 +20,7 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef \ No newline at end of file diff --git a/depends/packages/bdb.mk b/depends/packages/bdb.mk index 6c9876c2c7..dc536fd399 100644 --- a/depends/packages/bdb.mk +++ b/depends/packages/bdb.mk @@ -1,20 +1,26 @@ package=bdb $(package)_version=4.8.30 -$(package)_download_path=http://download.oracle.com/berkeley-db +$(package)_download_path=https://download.oracle.com/berkeley-db $(package)_file_name=db-$($(package)_version).NC.tar.gz $(package)_sha256_hash=12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef $(package)_build_subdir=build_unix +$(package)_patches=clang_cxx_11.patch define $(package)_set_vars -$(package)_config_opts=--disable-shared --enable-cxx --disable-replication +$(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)_cxxflags=-std=c++11 +$(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 +$(package)_cxxflags+=-std=c++17 +$(package)_cppflags_mingw32=-DUNICODE -D_UNICODE endef define $(package)_preprocess_cmds - sed -i.old 's/__atomic_compare_exchange/__atomic_compare_exchange_db/' dbinc/atomic.h && \ - sed -i.old 's/atomic_init/atomic_init_db/' dbinc/atomic.h mp/mp_region.c mp/mp_mvcc.c mp/mp_fget.c mutex/mut_method.c mutex/mut_tas.c && \ + patch -p1 < $($(package)_patch_dir)/clang_cxx_11.patch && \ cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub dist endef diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index 92220afd7a..6da9ece8e7 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -1,41 +1,50 @@ package=boost -$(package)_version=1_64_0 -$(package)_download_path=https://boostorg.jfrog.io/artifactory/main/release/1.64.0/source/ -$(package)_file_name=$(package)_$($(package)_version).tar.bz2 -$(package)_sha256_hash=7bcc5caace97baa948931d712ea5f37038dbb1c5d89b43ad4def4ed7cb683332 +$(package)_version=1.77.0 +$(package)_download_path=https://boostorg.jfrog.io/artifactory/main/release/$($(package)_version)/source/ +$(package)_file_name=boost_$(subst .,_,$($(package)_version)).tar.bz2 +$(package)_sha256_hash=fc9f85fc030e233142908241af7a846e60630aa7388de9a5fafb1f3a26840854 +$(package)_dependencies=native_b2 +# $(package)_patches=boost_gcc11.patch define $(package)_set_vars $(package)_config_opts_release=variant=release $(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_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 -$(package)_config_opts_i686_linux=address-model=32 architecture=x86 +$(package)_config_opts+=threading=multi link=static -sNO_COMPRESSION=1 +$(package)_config_opts_linux=target-os=linux threadapi=pthread runtime-link=static +$(package)_config_opts_darwin=target-os=darwin runtime-link=static +$(package)_config_opts_mingw32=target-os=windows binary-format=pe threadapi=win32 runtime-link=static +$(package)_config_opts_x86_64=architecture=x86 address-model=64 +$(package)_config_opts_i686=architecture=x86 address-model=32 +$(package)_config_opts_aarch64=address-model=64 +$(package)_config_opts_armv7a=address-model=32 +$(package)_config_opts_i686_android=address-model=32 +$(package)_config_opts_aarch64_android=address-model=64 +$(package)_config_opts_x86_64_android=address-model=64 +$(package)_config_opts_armv7a_android=address-model=32 +ifneq (,$(findstring clang,$($(package)_cxx))) +$(package)_toolset_$(host_os)=clang +else $(package)_toolset_$(host_os)=gcc -$(package)_archiver_$(host_os)=$($(package)_ar) -$(package)_toolset_darwin=darwin -$(package)_archiver_darwin=$($(package)_libtool) -$(package)_config_libraries=chrono,filesystem,program_options,system,thread,test -$(package)_cxxflags=-std=c++11 -fvisibility=hidden +endif +$(package)_config_libraries=filesystem,system,thread,test +$(package)_cxxflags+=-std=c++17 -fvisibility=hidden $(package)_cxxflags_linux=-fPIC +$(package)_cxxflags_android=-fPIC endef define $(package)_preprocess_cmds - echo "using $(boost_toolset_$(host_os)) : : $($(package)_cxx) : \"$($(package)_cxxflags) $($(package)_cppflags)\" \"$($(package)_ldflags)\" \"$(boost_archiver_$(host_os))\" \"$(host_STRIP)\" \"$(host_RANLIB)\" \"$(host_WINDRES)\" : ;" > user-config.jam + echo "using $($(package)_toolset_$(host_os)) : : $($(package)_cxx) : \"$($(package)_cflags)\" \"$($(package)_cxxflags)\" \"$($(package)_cppflags)\" \"$($(package)_ldflags)\" \"$($(package)_ar)\" \"$(host_STRIP)\" \"$(host_RANLIB)\" \"$(host_WINDRES)\" : ;" > user-config.jam endef define $(package)_config_cmds - ./bootstrap.sh --without-icu --with-libraries=$(boost_config_libraries) + ./bootstrap.sh --without-icu --with-libraries=$($(package)_config_libraries) --with-toolset=$($(package)_toolset_$(host_os)) --with-bjam=b2 endef define $(package)_build_cmds - ./b2 -d2 -j2 -d1 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) stage + b2 -d2 -j2 -d1 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) toolset=$($(package)_toolset_$(host_os)) stage endef define $(package)_stage_cmds - ./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install + b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) toolset=$($(package)_toolset_$(host_os)) install endef diff --git a/depends/packages/chia_bls.mk b/depends/packages/chia_bls.mk deleted file mode 100644 index 36ed585fb9..0000000000 --- a/depends/packages/chia_bls.mk +++ /dev/null @@ -1,51 +0,0 @@ -package=chia_bls -$(package)_version=v20181101 -# It's actually from https://github.com/Chia-Network/bls-signatures, but we have so many patches atm that it's forked -$(package)_download_path=https://github.com/dashpay/bls-signatures/archive -$(package)_file_name=$($(package)_version).tar.gz -$(package)_sha256_hash=b3ec74a77a7b6795f84b05e051a0824ef8d9e05b04b2993f01040f35689aa87c -$(package)_dependencies=gmp -#$(package)_patches=...TODO (when we switch back to https://github.com/Chia-Network/bls-signatures) - -#define $(package)_preprocess_cmds -# for i in $($(package)_patches); do patch -N -p1 < $($(package)_patch_dir)/$$$$i; done -#endef - -define $(package)_set_vars - $(package)_config_opts=-DCMAKE_INSTALL_PREFIX=$($(package)_staging_dir)/$(host_prefix) - $(package)_config_opts+= -DCMAKE_PREFIX_PATH=$($(package)_staging_dir)/$(host_prefix) - $(package)_config_opts+= -DSTLIB=ON -DSHLIB=OFF -DSTBIN=ON - $(package)_config_opts_linux=-DOPSYS=LINUX -DCMAKE_SYSTEM_NAME=Linux - $(package)_config_opts_darwin=-DOPSYS=MACOSX -DCMAKE_SYSTEM_NAME=Darwin - $(package)_config_opts_mingw32=-DOPSYS=WINDOWS -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_SHARED_LIBRARY_LINK_C_FLAGS="" -DCMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS="" - $(package)_config_opts_i686+= -DWSIZE=32 - $(package)_config_opts_x86_64+= -DWSIZE=64 - $(package)_config_opts_arm+= -DWSIZE=32 - $(package)_config_opts_armv7l+= -DWSIZE=32 - $(package)_config_opts_debug=-DDEBUG=ON -DCMAKE_BUILD_TYPE=Debug - - ifneq ($(darwin_native_toolchain),) - $(package)_config_opts_darwin+= -DCMAKE_AR="$(host_prefix)/native/bin/$($(package)_ar)" - $(package)_config_opts_darwin+= -DCMAKE_RANLIB="$(host_prefix)/native/bin/$($(package)_ranlib)" - endif -endef - -define $(package)_config_cmds - export CC="$($(package)_cc)" && \ - export CXX="$($(package)_cxx)" && \ - export CFLAGS="$($(package)_cflags) $($(package)_cppflags)" && \ - export CXXFLAGS="$($(package)_cxxflags) $($(package)_cppflags)" && \ - export LDFLAGS="$($(package)_ldflags)" && \ - mkdir -p build && cd build && \ - cmake ../ $($(package)_config_opts) -endef - -define $(package)_build_cmds - cd build && \ - $(MAKE) $($(package)_build_opts) -endef - -define $(package)_stage_cmds - cd build && \ - $(MAKE) install -endef diff --git a/depends/packages/cmake.mk b/depends/packages/cmake.mk new file mode 100644 index 0000000000..cc895de79a --- /dev/null +++ b/depends/packages/cmake.mk @@ -0,0 +1,19 @@ +package=cmake +$(package)_version=3.22.2 +$(package)_download_path=https://cmake.org/files/v3.22/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=3c1c478b9650b107d452c5bd545c72e2fad4e37c09b89a1984b9a2f46df6aced + +define $(package)_config_cmds + export CC="" && \ + export CXX="" && \ + ./bootstrap --prefix=$(host_prefix) -- -DCMAKE_USE_OPENSSL=OFF +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef diff --git a/depends/packages/dbus.mk b/depends/packages/dbus.mk index bbe0375409..b1ec6caa5c 100644 --- a/depends/packages/dbus.mk +++ b/depends/packages/dbus.mk @@ -1,12 +1,12 @@ package=dbus -$(package)_version=1.10.18 +$(package)_version=1.14.0 $(package)_download_path=https://dbus.freedesktop.org/releases/dbus -$(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=6049ddd5f3f3e2618f615f1faeda0a115104423a7996b7aa73e2f36e38cc514a +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=ccd7cce37596e0a19558fd6648d1272ab43f011d80c8635aea8fd0bad58aebd4 $(package)_dependencies=expat define $(package)_set_vars - $(package)_config_opts=--disable-tests --disable-doxygen-docs --disable-xml-docs --disable-static --without-x + $(package)_config_opts=--disable-tests --disable-doxygen-docs --disable-xml-docs --enable-static --disable-shared --without-x --prefix=$(host_prefix) endef define $(package)_config_cmds @@ -20,4 +20,4 @@ endef define $(package)_stage_cmds $(MAKE) -C dbus DESTDIR=$($(package)_staging_dir) install-libLTLIBRARIES install-dbusincludeHEADERS install-nodist_dbusarchincludeHEADERS && \ $(MAKE) DESTDIR=$($(package)_staging_dir) install-pkgconfigDATA -endef +endef \ No newline at end of file diff --git a/depends/packages/expat.mk b/depends/packages/expat.mk index 7f484724a4..e92c886f10 100644 --- a/depends/packages/expat.mk +++ b/depends/packages/expat.mk @@ -1,11 +1,13 @@ package=expat -$(package)_version=2.2.1 -$(package)_download_path=https://downloads.sourceforge.net/project/expat/expat/$($(package)_version) -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=1868cadae4c82a018e361e2b2091de103cd820aaacb0d6cfa49bd2cd83978885 +$(package)_version=2.4.1 +$(package)_download_path=https://github.com/libexpat/libexpat/releases/download/R_$(subst .,_,$($(package)_version))/ +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=cf032d0dba9b928636548e32b327a2d66b1aab63c4f4a13dd132c2d1d2f2fb6a define $(package)_set_vars -$(package)_config_opts=--disable-static +$(package)_config_opts=--disable-shared --without-docbook --without-tests --without-examples +$(package)_config_opts += --disable-dependancy-tracking --enable-option-checking --without-xmlwf +$(package)_config_opts_linux=--with-pic endef define $(package)_config_cmds @@ -19,3 +21,7 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install endef + +define $(package)_postprocess_cmds + rm -rf share lib/cmake lib/*.la +endef \ No newline at end of file diff --git a/depends/packages/fontconfig.mk b/depends/packages/fontconfig.mk index 12695db4b9..b7a4d65347 100644 --- a/depends/packages/fontconfig.mk +++ b/depends/packages/fontconfig.mk @@ -1,28 +1,32 @@ package=fontconfig -$(package)_version=2.12.1 -$(package)_download_path=http://www.freedesktop.org/software/fontconfig/release/ +$(package)_version=2.12.6 +$(package)_download_path=https://www.freedesktop.org/software/fontconfig/release/ $(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=b449a3e10c47e1d1c7a6ec6e2016cca73d3bd68fbbd4f0ae5cc6b573f7d6c7f3 +$(package)_sha256_hash=cf0c30807d08f6a28ab46c61b8dbd55c97d2f292cf88f3a07d3384687f31f017 $(package)_dependencies=freetype expat +$(package)_patches=gperf_header_regen.patch define $(package)_set_vars - $(package)_config_opts=--disable-docs --disable-static + $(package)_config_opts=--disable-docs --disable-static --disable-libxml2 --disable-iconv + $(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/gperf_header_regen.patch endef define $(package)_config_cmds $($(package)_autoconf) endef -# 2.12.1 uses CHAR_WIDTH which is reserved and clashes with some glibc versions, but newer versions of fontconfig -# have broken makefiles which needlessly attempt to re-generate headers with gperf. -# Instead, change all uses of CHAR_WIDTH, and disable the rule that forces header re-generation. -# This can be removed once the upstream build is fixed. define $(package)_build_cmds - sed -i 's/CHAR_WIDTH/CHARWIDTH/g' fontconfig/fontconfig.h src/fcobjshash.gperf src/fcobjs.h src/fcobjshash.h && \ - sed -i 's/fcobjshash.h: fcobjshash.gperf/fcobjshash.h:/' src/Makefile && \ $(MAKE) endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install endef + +define $(package)_postprocess_cmds + rm -rf var lib/*.la +endef \ No newline at end of file diff --git a/depends/packages/freetype.mk b/depends/packages/freetype.mk index 41e02e2030..c0c6d17f57 100644 --- a/depends/packages/freetype.mk +++ b/depends/packages/freetype.mk @@ -1,11 +1,11 @@ package=freetype -$(package)_version=2.7.1 -$(package)_download_path=http://download.savannah.gnu.org/releases/$(package) -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=3a3bb2c4e15ffb433f2032f50a5b5a92558206822e22bfe8cbe339af4aa82f88 +$(package)_version=2.11.0 +$(package)_download_path=https://download.savannah.gnu.org/releases/$(package) +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=8bee39bd3968c4804b70614a0a3ad597299ad0e824bc8aad5ce8aaf48067bde7 define $(package)_set_vars - $(package)_config_opts=--without-zlib --without-png --without-harfbuzz --without-bzip2 --disable-static + $(package)_config_opts=--without-zlib --without-png --without-harfbuzz --without-bzip2 --disable-static --enable-options-tracking --without-brotli $(package)_config_opts_linux=--with-pic endef @@ -20,3 +20,7 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install endef + +define $(package)_postprocess_cmds + rm -rf share/man lib/*.la +endef \ No newline at end of file diff --git a/depends/packages/gmp.mk b/depends/packages/gmp.mk index ac685d7679..210d21d0d5 100644 --- a/depends/packages/gmp.mk +++ b/depends/packages/gmp.mk @@ -1,12 +1,13 @@ package=gmp -$(package)_version=6.1.2 +$(package)_version=6.2.1 $(package)_download_path=https://gmplib.org/download/gmp $(package)_file_name=gmp-$($(package)_version).tar.bz2 -$(package)_sha256_hash=5275bb04f4863a13516b2f39392ac5e272f5e1bb8057b18aec1c9b79d73d8fb2 +$(package)_sha256_hash=eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c define $(package)_set_vars $(package)_config_opts+=--enable-cxx --enable-fat --with-pic --disable-shared $(package)_cflags_armv7l_linux+=-march=armv7-a +$(package)_cflags_aarch64_darwin+=-march=armv8-a endef define $(package)_config_cmds @@ -21,3 +22,6 @@ define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install endef +define $(package)_postprocess_cmds + rm lib/*.la +endef \ No newline at end of file diff --git a/depends/packages/immer.mk b/depends/packages/immer.mk new file mode 100644 index 0000000000..8c4075777f --- /dev/null +++ b/depends/packages/immer.mk @@ -0,0 +1,35 @@ +package=immer +$(package)_version=v0.7.0 +$(package)_download_path=https://github.com/arximboldi/immer/archive +$(package)_download_file=$($(package)_version).tar.gz +$(package)_file_name=$(package)-$($(package)_download_file) +$(package)_sha256_hash=cf67ab428aa3610eb0f72d0ea936c15cce3f91df26ee143ab783acd053507fe4 +$(package)_build_subdir=build_tmp +$(package)_dependencies=cmake boost + +define $(package)_fetch_cmds +$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) +endef + +define $(package)_set_vars + $(package)_config_opts=-DCMAKE_INSTALL_INCLUDEDIR=$(host_prefix)/include + $(package)_config_opts+=-DCMAKE_INSTALL_LIBDIR=$(host_prefix)/lib + $(package)_config_opts_mingw32=-DCMAKE_SHARED_LIBRARY_LINK_C_FLAGS="" +endef + +define $(package)_config_cmds + export CC="$($(package)_cc)" && \ + export CXX="$($(package)_cxx)" && \ + export CFLAGS="$($(package)_cflags) $($(package)_cppflags)" && \ + export CXXFLAGS="$($(package)_cxxflags) $($(package)_cppflags)" && \ + export LDFLAGS="$($(package)_ldflags)" && \ + $(host_prefix)/bin/cmake ../ $($(package)_config_opts) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef diff --git a/depends/packages/libICE.mk b/depends/packages/libICE.mk deleted file mode 100644 index fc60323b1c..0000000000 --- a/depends/packages/libICE.mk +++ /dev/null @@ -1,23 +0,0 @@ -package=libICE -$(package)_version=1.0.9 -$(package)_download_path=http://xorg.freedesktop.org/releases/individual/lib/ -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=8f7032f2c1c64352b5423f6b48a8ebdc339cc63064af34d66a6c9aa79759e202 -$(package)_dependencies=xtrans xproto - -define $(package)_set_vars - $(package)_config_opts=--disable-static --disable-docs --disable-specs --without-xsltproc - $(package)_config_opts_linux=--with-pic -endef - -define $(package)_config_cmds - $($(package)_autoconf) -endef - -define $(package)_build_cmds - $(MAKE) -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install -endef diff --git a/depends/packages/libSM.mk b/depends/packages/libSM.mk deleted file mode 100644 index 0f9307ca76..0000000000 --- a/depends/packages/libSM.mk +++ /dev/null @@ -1,23 +0,0 @@ -package=libSM -$(package)_version=1.2.2 -$(package)_download_path=http://xorg.freedesktop.org/releases/individual/lib/ -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=0baca8c9f5d934450a70896c4ad38d06475521255ca63b717a6510fdb6e287bd -$(package)_dependencies=xtrans xproto libICE - -define $(package)_set_vars - $(package)_config_opts=--without-libuuid --without-xsltproc --disable-docs --disable-static - $(package)_config_opts_linux=--with-pic -endef - -define $(package)_config_cmds - $($(package)_autoconf) -endef - -define $(package)_build_cmds - $(MAKE) -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install -endef diff --git a/depends/packages/libX11.mk b/depends/packages/libX11.mk deleted file mode 100644 index 178d592ee6..0000000000 --- a/depends/packages/libX11.mk +++ /dev/null @@ -1,23 +0,0 @@ -package=libX11 -$(package)_version=1.6.2 -$(package)_download_path=http://xorg.freedesktop.org/releases/individual/lib/ -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=2aa027e837231d2eeea90f3a4afe19948a6eb4c8b2bec0241eba7dbc8106bd16 -$(package)_dependencies=libxcb xtrans xextproto xproto - -define $(package)_set_vars -$(package)_config_opts=--disable-xkb --disable-static -$(package)_config_opts_linux=--with-pic -endef - -define $(package)_config_cmds - $($(package)_autoconf) -endef - -define $(package)_build_cmds - $(MAKE) -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install -endef diff --git a/depends/packages/libXau.mk b/depends/packages/libXau.mk index e87df2e4de..1788b5504f 100644 --- a/depends/packages/libXau.mk +++ b/depends/packages/libXau.mk @@ -1,15 +1,21 @@ package=libXau -$(package)_version=1.0.8 -$(package)_download_path=http://xorg.freedesktop.org/releases/individual/lib/ +$(package)_version=1.0.9 +$(package)_download_path=https://xorg.freedesktop.org/releases/individual/lib/ $(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=fdd477320aeb5cdd67272838722d6b7d544887dfe7de46e1e7cc0c27c2bea4f2 +$(package)_sha256_hash=ccf8cbf0dbf676faa2ea0a6d64bcc3b6746064722b606c8c52917ed00dcb73ec $(package)_dependencies=xproto +# When updating this package, check the default value of +# --disable-xthreads. It is currently enabled. define $(package)_set_vars - $(package)_config_opts=--disable-shared + $(package)_config_opts=--disable-shared --disable-lint-library --without-lint --disable-dependency-tracking --enable-option-checking $(package)_config_opts_linux=--with-pic endef +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + define $(package)_config_cmds $($(package)_autoconf) endef @@ -21,3 +27,7 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install endef + +define $(package)_postprocess_cmds + rm -rf share lib/*.la +endef \ No newline at end of file diff --git a/depends/packages/libXext.mk b/depends/packages/libXext.mk deleted file mode 100644 index 4db836066f..0000000000 --- a/depends/packages/libXext.mk +++ /dev/null @@ -1,22 +0,0 @@ -package=libXext -$(package)_version=1.3.2 -$(package)_download_path=http://xorg.freedesktop.org/releases/individual/lib/ -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=f829075bc646cdc085fa25d98d5885d83b1759ceb355933127c257e8e50432e0 -$(package)_dependencies=xproto xextproto libX11 libXau - -define $(package)_set_vars - $(package)_config_opts=--disable-static -endef - -define $(package)_config_cmds - $($(package)_autoconf) -endef - -define $(package)_build_cmds - $(MAKE) -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install -endef diff --git a/depends/packages/libevent.mk b/depends/packages/libevent.mk index ed143830c5..a27986709b 100644 --- a/depends/packages/libevent.mk +++ b/depends/packages/libevent.mk @@ -1,17 +1,22 @@ package=libevent -$(package)_version=2.1.8 -$(package)_download_path=https://github.com/libevent/libevent/releases/download/release-$($(package)_version)-stable -$(package)_file_name=$(package)-$($(package)_version)-stable.tar.gz -$(package)_sha256_hash=965cc5a8bb46ce4199a47e9b2c9e1cae3b137e8356ffdad6d94d3b9069b71dc2 - -define $(package)_preprocess_cmds - ./autogen.sh -endef +$(package)_version=2.1.12-stable +$(package)_download_path=https://github.com/libevent/libevent/releases/download/release-$($(package)_version)/ +$(package)_file_name=$(package)-$($(package)_version).tar.gz +$(package)_sha256_hash=92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb +# When building for Windows, we set _WIN32_WINNT to target the same Windows +# version as we do in configure. Due to quirks in libevents build system, this +# is also required to enable support for IPv6. See [#19375](https://github.com/bitcoin/bitcoin/pull/19375) define $(package)_set_vars - $(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress + $(package)_config_opts=--disable-shared --disable-openssl --disable-libevent-regress --disable-samples --disable-dependency-tracking --enable-option-checking $(package)_config_opts_release=--disable-debug-mode $(package)_config_opts_linux=--with-pic + $(package)_config_opts_android=--with-pic + $(package)_cppflags_mingw32=-D_WIN32_WINNT=0x0601 +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux endef define $(package)_config_cmds @@ -27,4 +32,7 @@ define $(package)_stage_cmds endef define $(package)_postprocess_cmds + rm lib/*.la && \ + rm include/ev*.h && \ + rm include/event2/*_compat.h endef diff --git a/depends/packages/libnatpmp.mk b/depends/packages/libnatpmp.mk new file mode 100644 index 0000000000..e0ab54670d --- /dev/null +++ b/depends/packages/libnatpmp.mk @@ -0,0 +1,22 @@ +package=libnatpmp +$(package)_version=4536032ae32268a45c073a4d5e91bbab4534773a +$(package)_download_path=https://github.com/miniupnp/libnatpmp/archive +$(package)_file_name=$($(package)_version).tar.gz +$(package)_sha256_hash=543b460aab26acf91e11d15e17d8798f845304199eea2d76c2f444ec749c5383 + +define $(package)_set_vars + $(package)_build_opts=CC="$($(package)_cc)" + $(package)_build_opts_mingw32=CPPFLAGS=-DNATPMP_STATICLIB + $(package)_build_opts_darwin=LIBTOOL="$($(package)_libtool)" + $(package)_build_env+=CFLAGS="$($(package)_cflags) $($(package)_cppflags)" AR="$($(package)_ar)" +endef + +define $(package)_build_cmds + $(MAKE) libnatpmp.a $($(package)_build_opts) +endef + +define $(package)_stage_cmds + mkdir -p $($(package)_staging_prefix_dir)/include $($(package)_staging_prefix_dir)/lib &&\ + install *.h $($(package)_staging_prefix_dir)/include &&\ + install libnatpmp.a $($(package)_staging_prefix_dir)/lib +endef \ No newline at end of file diff --git a/depends/packages/libxcb.mk b/depends/packages/libxcb.mk index 28f2bd6f25..8f4ea2b1d3 100644 --- a/depends/packages/libxcb.mk +++ b/depends/packages/libxcb.mk @@ -1,25 +1,30 @@ package=libxcb -$(package)_version=1.10 -$(package)_download_path=http://xcb.freedesktop.org/dist -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=98d9ab05b636dd088603b64229dd1ab2d2cc02ab807892e107d674f9c3f2d5b5 -$(package)_dependencies=xcb_proto libXau xproto +$(package)_version=1.14 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=a55ed6db98d43469801262d81dc2572ed124edc3db31059d4e9916eb9f844c34 +$(package)_dependencies=xcb_proto libXau define $(package)_set_vars -$(package)_config_opts=--disable-static +$(package)_config_opts=--disable-static --disable-build-docs --without-doxygen --without-launchd +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +# Disable unneeded extensions. +# More info is available from: https://doc.qt.io/qt-5.15/linux-requirements.html +$(package)_config_opts += --disable-composite --disable-damage --disable-dpms +$(package)_config_opts += --disable-dri2 --disable-dri3 --disable-glx +$(package)_config_opts += --disable-present --disable-record --disable-resource +$(package)_config_opts += --disable-xevie --disable-screensaver --disable-xfree86-dri +$(package)_config_opts += --disable-xinput --disable-xprint --disable-selinux +$(package)_config_opts += --disable-xv --disable-xvmc --disable-xtest endef define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux &&\ sed "s/pthread-stubs//" -i configure endef -# Don't install xcb headers to the default path in order to work around a qt -# build issue: https://bugreports.qt.io/browse/QTBUG-34748 -# When using qt's internal libxcb, it may end up finding the real headers in -# depends staging. Use a non-default path to avoid that. - define $(package)_config_cmds - $($(package)_autoconf) --includedir=$(host_prefix)/include/xcb-shared + $($(package)_autoconf) endef define $(package)_build_cmds @@ -31,5 +36,5 @@ define $(package)_stage_cmds endef define $(package)_postprocess_cmds - rm -rf share/man share/doc -endef + rm -rf share lib/*.la +endef \ No newline at end of file diff --git a/depends/packages/libxcb_util.mk b/depends/packages/libxcb_util.mk new file mode 100644 index 0000000000..6f1b9cd7c6 --- /dev/null +++ b/depends/packages/libxcb_util.mk @@ -0,0 +1,32 @@ +package=libxcb_util +$(package)_version=0.4.0 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-$($(package)_version).tar.bz2 +$(package)_sha256_hash=46e49469cb3b594af1d33176cd7565def2be3fa8be4371d62271fabb5eae50e9 +$(package)_dependencies=libxcb + +define $(package)_set_vars +$(package)_config_opts = --disable-shared --disable-devel-docs --without-doxygen +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +$(package)_config_opts += --with-pic +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxcb_util_image.mk b/depends/packages/libxcb_util_image.mk new file mode 100644 index 0000000000..d12d67e8e8 --- /dev/null +++ b/depends/packages/libxcb_util_image.mk @@ -0,0 +1,31 @@ +package=libxcb_util_image +$(package)_version=0.4.0 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-image-$($(package)_version).tar.bz2 +$(package)_sha256_hash=2db96a37d78831d643538dd1b595d7d712e04bdccf8896a5e18ce0f398ea2ffc +$(package)_dependencies=libxcb libxcb_util + +define $(package)_set_vars +$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts+= --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxcb_util_keysyms.mk b/depends/packages/libxcb_util_keysyms.mk new file mode 100644 index 0000000000..d4f72dedbe --- /dev/null +++ b/depends/packages/libxcb_util_keysyms.mk @@ -0,0 +1,31 @@ +package=libxcb_util_keysyms +$(package)_version=0.4.0 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-keysyms-$($(package)_version).tar.bz2 +$(package)_sha256_hash=0ef8490ff1dede52b7de533158547f8b454b241aa3e4dcca369507f66f216dd9 +$(package)_dependencies=libxcb xproto + +define $(package)_set_vars +$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxcb_util_render.mk b/depends/packages/libxcb_util_render.mk new file mode 100644 index 0000000000..28f1fb073c --- /dev/null +++ b/depends/packages/libxcb_util_render.mk @@ -0,0 +1,31 @@ +package=libxcb_util_render +$(package)_version=0.3.9 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-renderutil-$($(package)_version).tar.bz2 +$(package)_sha256_hash=c6e97e48fb1286d6394dddb1c1732f00227c70bd1bedb7d1acabefdd340bea5b +$(package)_dependencies=libxcb + +define $(package)_set_vars +$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxcb_util_wm.mk b/depends/packages/libxcb_util_wm.mk new file mode 100644 index 0000000000..3b905ba4ec --- /dev/null +++ b/depends/packages/libxcb_util_wm.mk @@ -0,0 +1,31 @@ +package=libxcb_util_wm +$(package)_version=0.4.1 +$(package)_download_path=https://xcb.freedesktop.org/dist +$(package)_file_name=xcb-util-wm-$($(package)_version).tar.bz2 +$(package)_sha256_hash=28bf8179640eaa89276d2b0f1ce4285103d136be6c98262b6151aaee1d3c2a3f +$(package)_dependencies=libxcb + +define $(package)_set_vars +$(package)_config_opts=--disable-static --disable-devel-docs --without-doxygen +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share/man share/doc lib/*.la +endef diff --git a/depends/packages/libxkbcommon.mk b/depends/packages/libxkbcommon.mk new file mode 100644 index 0000000000..8c6c56545f --- /dev/null +++ b/depends/packages/libxkbcommon.mk @@ -0,0 +1,32 @@ +package=libxkbcommon +$(package)_version=0.8.4 +$(package)_download_path=https://xkbcommon.org/download/ +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=60ddcff932b7fd352752d51a5c4f04f3d0403230a584df9a2e0d5ed87c486c8b +$(package)_dependencies=libxcb + +define $(package)_set_vars +$(package)_config_opts = --enable-option-checking --disable-dependency-tracking +$(package)_config_opts += --disable-static --disable-docs +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef + diff --git a/depends/packages/miniupnpc.mk b/depends/packages/miniupnpc.mk index 1bb8cb5d26..c00c2f51af 100644 --- a/depends/packages/miniupnpc.mk +++ b/depends/packages/miniupnpc.mk @@ -1,20 +1,19 @@ package=miniupnpc -$(package)_version=2.0.20170509 -$(package)_download_path=http://miniupnp.free.fr/files +$(package)_version=2.2.2 +$(package)_download_path=https://miniupnp.tuxfamily.org/files $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=d3c368627f5cdfb66d3ebd64ca39ba54d6ff14a61966dbecb8dd296b7039f16a +$(package)_sha256_hash=888fb0976ba61518276fe1eda988589c700a3f2a69d71089260d75562afd3687 +$(package)_patches=dont_leak_info.patch define $(package)_set_vars $(package)_build_opts=CC="$($(package)_cc)" -$(package)_build_opts_darwin=OS=Darwin LIBTOOL="$($(package)_libtool)" +$(package)_build_opts_darwin=LIBTOOL="$($(package)_libtool)" $(package)_build_opts_mingw32=-f Makefile.mingw $(package)_build_env+=CFLAGS="$($(package)_cflags) $($(package)_cppflags)" AR="$($(package)_ar)" endef define $(package)_preprocess_cmds - mkdir dll && \ - sed -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"$($(package)_version)\"|' -e 's|OS/version|$(host)|' miniupnpcstrings.h.in > miniupnpcstrings.h && \ - sed -i.old "s|miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings|miniupnpcstrings.h: miniupnpcstrings.h.in|" Makefile.mingw + patch -p1 < $($(package)_patch_dir)/dont_leak_info.patch endef define $(package)_build_cmds @@ -25,4 +24,4 @@ define $(package)_stage_cmds mkdir -p $($(package)_staging_prefix_dir)/include/miniupnpc $($(package)_staging_prefix_dir)/lib &&\ install *.h $($(package)_staging_prefix_dir)/include/miniupnpc &&\ install libminiupnpc.a $($(package)_staging_prefix_dir)/lib -endef +endef \ No newline at end of file diff --git a/depends/packages/native_b2.mk b/depends/packages/native_b2.mk new file mode 100644 index 0000000000..d7ebb60c5c --- /dev/null +++ b/depends/packages/native_b2.mk @@ -0,0 +1,20 @@ +package=native_b2 +$(package)_version=$(boost_version) +$(package)_download_path=$(boost_download_path) +$(package)_file_name=$(boost_file_name) +$(package)_sha256_hash=$(boost_sha256_hash) +$(package)_build_subdir=tools/build/src/engine +ifneq (,$(findstring clang,$($(package)_cxx))) +$(package)_toolset_$(host_os)=clang +else +$(package)_toolset_$(host_os)=gcc +endif + +define $(package)_build_cmds + CXX="$($(package)_cxx)" CXXFLAGS="$($(package)_cxxflags)" ./build.sh "$($(package)_toolset_$(host_os))" +endef + +define $(package)_stage_cmds + mkdir -p "$($(package)_staging_prefix_dir)"/bin/ && \ + cp b2 "$($(package)_staging_prefix_dir)"/bin/ +endef \ No newline at end of file diff --git a/depends/packages/native_biplist.mk b/depends/packages/native_biplist.mk index 373490aedc..c3054cbd1a 100644 --- a/depends/packages/native_biplist.mk +++ b/depends/packages/native_biplist.mk @@ -1,14 +1,9 @@ package=native_biplist -$(package)_version=0.9 -$(package)_download_path=https://pypi.python.org/packages/source/b/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=b57cadfd26e4754efdf89e9e37de87885f9b5c847b2615688ca04adfaf6ca604 -$(package)_install_libdir=$(build_prefix)/lib/python/dist-packages -$(package)_patches=sorted_list.patch - -define $(package)_preprocess_cmds - patch -p1 < $($(package)_patch_dir)/sorted_list.patch -endef +$(package)_sha256_hash=4c0549764c5fe50b28042ec21aa2e14fe1a2224e239a1dae77d9e7f3932aa4c6 +$(package)_install_libdir=$(build_prefix)/lib/python3/dist-packages define $(package)_build_cmds python3 setup.py build diff --git a/depends/packages/native_boost.mk b/depends/packages/native_boost.mk new file mode 100644 index 0000000000..6c7d1bc28a --- /dev/null +++ b/depends/packages/native_boost.mk @@ -0,0 +1,13 @@ +package=native_boost +$(package)_version=$(boost_version) +$(package)_download_path=$(boost_download_path) +$(package)_file_name=$(boost_file_name) +$(package)_sha256_hash=$(boost_sha256_hash) + +define $(package)_config_cmds + ./bootstrap.sh --prefix=$($($(package)_type)_prefix) --with-libraries=headers +endef + +define $(package)_stage_cmds + ./b2 -d0 --prefix=$($(package)_staging_prefix_dir) install +endef \ No newline at end of file diff --git a/depends/packages/native_cctools.mk b/depends/packages/native_cctools.mk index 44d238cc4c..d169eb6723 100644 --- a/depends/packages/native_cctools.mk +++ b/depends/packages/native_cctools.mk @@ -1,45 +1,23 @@ package=native_cctools -$(package)_version=807d6fd1be5d2224872e381870c0a75387fe05e6 -$(package)_download_path=https://github.com/theuni/cctools-port/archive +$(package)_version=2ef2e931cf641547eb8a68cfebde61003587c9fd +$(package)_download_path=https://github.com/tpoechtrager/cctools-port/archive $(package)_file_name=$($(package)_version).tar.gz -$(package)_sha256_hash=a09c9ba4684670a0375e42d9d67e7f12c1f62581a27f28f7c825d6d7032ccc6a +$(package)_sha256_hash=6b73269efdf5c58a070e7357b66ee760501388549d6a12b423723f45888b074b $(package)_build_subdir=cctools -$(package)_clang_version=3.7.1 -$(package)_clang_download_path=http://llvm.org/releases/$($(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=99b28a6b48e793705228a390471991386daa33a9717cd9ca007fcdde69608fd9 -$(package)_extra_sources=$($(package)_clang_file_name) - -define $(package)_fetch_cmds -$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \ -$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash)) -endef - -define $(package)_extract_cmds - mkdir -p $($(package)_extract_dir) && \ - echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \ - echo "$($(package)_clang_sha256_hash) $($(package)_source_dir)/$($(package)_clang_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ - $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ - mkdir -p toolchain/bin toolchain/lib/clang/3.5/include && \ - tar --strip-components=1 -C toolchain -xf $($(package)_source_dir)/$($(package)_clang_file_name) && \ - rm -f toolchain/lib/libc++abi.so* && \ - echo "#!/bin/sh" > toolchain/bin/$(host)-dsymutil && \ - echo "exit 0" >> toolchain/bin/$(host)-dsymutil && \ - chmod +x toolchain/bin/$(host)-dsymutil && \ - tar --strip-components=1 -xf $($(package)_source) -endef +$(package)_dependencies=native_libtapi define $(package)_set_vars -$(package)_config_opts=--target=$(host) --disable-lto-support -$(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib -$(package)_cc=$($(package)_extract_dir)/toolchain/bin/clang -$(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++ + $(package)_config_opts=--target=$(host) + $(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib + ifeq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) + $(package)_config_opts+=--enable-lto-support --with-llvm-config=$(build_prefix)/bin/llvm-config + endif + $(package)_cc=$(clang_prog) + $(package)_cxx=$(clangxx_prog) endef define $(package)_preprocess_cmds - cd $($(package)_build_subdir); ./autogen.sh && \ - sed -i.old "/define HAVE_PTHREADS/d" ld64/src/ld/InputFiles.h + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub cctools endef define $(package)_config_cmds @@ -51,15 +29,9 @@ define $(package)_build_cmds endef define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install && \ - 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 && \ - cp bin/clang $($(package)_staging_prefix_dir)/bin/ &&\ - cp -P bin/clang++ $($(package)_staging_prefix_dir)/bin/ &&\ - cp lib/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \ - cp -rf lib/clang/$($(package)_clang_version)/include/* $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include/ && \ - cp bin/llvm-dsymutil $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \ - if `test -d include/c++/`; then cp -rf include/c++/ $($(package)_staging_prefix_dir)/include/; fi && \ - if `test -d lib/c++/`; then cp -rf lib/c++/ $($(package)_staging_prefix_dir)/lib/; fi + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm -rf share endef diff --git a/depends/packages/native_cdrkit.mk b/depends/packages/native_cdrkit.mk index cf694edb30..65bc820c42 100644 --- a/depends/packages/native_cdrkit.mk +++ b/depends/packages/native_cdrkit.mk @@ -9,8 +9,10 @@ define $(package)_preprocess_cmds patch -p1 < $($(package)_patch_dir)/cdrkit-deterministic.patch endef +# Starting with 10.1, GCC defaults to -fno-common, resulting in linking errors. +# Pass -fcommon to retain legacy behaviour. define $(package)_config_cmds - cmake -DCMAKE_INSTALL_PREFIX=$(build_prefix) + $($(package)_cmake) -DCMAKE_C_FLAGS="$$($(1)_cmake) -fcommon" endef define $(package)_build_cmds diff --git a/depends/packages/native_clang.mk b/depends/packages/native_clang.mk new file mode 100644 index 0000000000..23c8139262 --- /dev/null +++ b/depends/packages/native_clang.mk @@ -0,0 +1,30 @@ +package=native_clang +$(package)_version=10.0.1 +$(package)_download_path=https://github.com/llvm/llvm-project/releases/download/llvmorg-$($(package)_version) +ifneq (,$(findstring aarch64,$(BUILD))) +$(package)_file_name=clang+llvm-$($(package)_version)-aarch64-linux-gnu.tar.xz +$(package)_sha256_hash=90dc69a4758ca15cd0ffa45d07fbf5bf4309d47d2c7745a9f0735ecffde9c31f +else +$(package)_file_name=clang+llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-16.04.tar.xz +$(package)_sha256_hash=48b83ef827ac2c213d5b64f5ad7ed082c8bcb712b46644e0dc5045c6f462c231 +endif + +define $(package)_preprocess_cmds + rm -f $($(package)_extract_dir)/lib/libc++abi.so* +endef + +define $(package)_stage_cmds + mkdir -p $($(package)_staging_prefix_dir)/lib/clang/$($(package)_version)/include && \ + mkdir -p $($(package)_staging_prefix_dir)/bin && \ + mkdir -p $($(package)_staging_prefix_dir)/include && \ + cp bin/clang $($(package)_staging_prefix_dir)/bin/ && \ + cp -P bin/clang++ $($(package)_staging_prefix_dir)/bin/ && \ + cp bin/dsymutil $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \ + cp bin/llvm-config $($(package)_staging_prefix_dir)/bin/ && \ + cp lib/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \ + cp -rf lib/clang/$($(package)_version)/include/* $($(package)_staging_prefix_dir)/lib/clang/$($(package)_version)/include/ +endef + +define $(package)_postprocess_cmds + rmdir include +endef diff --git a/depends/packages/native_ds_store.mk b/depends/packages/native_ds_store.mk index 9ce440b313..44108925a4 100644 --- a/depends/packages/native_ds_store.mk +++ b/depends/packages/native_ds_store.mk @@ -1,10 +1,9 @@ package=native_ds_store -$(package)_version=1.1.2 +$(package)_version=1.3.0 $(package)_download_path=https://github.com/al45tair/ds_store/archive/ $(package)_file_name=v$($(package)_version).tar.gz -$(package)_sha256_hash=3b3ecb7bf0a5157f5b6010bc3af7c141fb0ad3527084e63336220d22744bc20c +$(package)_sha256_hash=76b3280cd4e19e5179defa23fb594a9dd32643b0c80d774bd3108361d94fb46d $(package)_install_libdir=$(build_prefix)/lib/python3/dist-packages -$(package)_dependencies=native_biplist define $(package)_build_cmds python3 setup.py build @@ -13,4 +12,4 @@ 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 \ No newline at end of file +endef diff --git a/depends/packages/native_libdmg-hfsplus.mk b/depends/packages/native_libdmg-hfsplus.mk index a4ffb6046c..eb2ede9cb4 100644 --- a/depends/packages/native_libdmg-hfsplus.mk +++ b/depends/packages/native_libdmg-hfsplus.mk @@ -1,16 +1,19 @@ 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)_version=7ac55ec64c96f7800d9818ce64c79670e7f02b67 +$(package)_download_path=https://github.com/planetbeing/libdmg-hfsplus/archive +$(package)_file_name=$($(package)_version).tar.gz +$(package)_sha256_hash=56fbdc48ec110966342f0ecddd6f8f89202f4143ed2a3336e42bbf88f940850c $(package)_build_subdir=build +$(package)_dependencies=cmake +$(package)_patches=remove-libcrypto-dependency.patch define $(package)_preprocess_cmds + patch -p1 < $($(package)_patch_dir)/remove-libcrypto-dependency.patch && \ mkdir build endef define $(package)_config_cmds - cmake -DCMAKE_INSTALL_PREFIX:PATH=$(build_prefix)/bin .. + $($(package)_cmake) -DCMAKE_C_FLAGS="$$($(1)_cflags) -Wl,--build-id=none" .. endef define $(package)_build_cmds diff --git a/depends/packages/native_libtapi.mk b/depends/packages/native_libtapi.mk new file mode 100644 index 0000000000..1633213a42 --- /dev/null +++ b/depends/packages/native_libtapi.mk @@ -0,0 +1,19 @@ +package=native_libtapi +$(package)_version=664b8414f89612f2dfd35a9b679c345aa5389026 +$(package)_download_path=https://github.com/tpoechtrager/apple-libtapi/archive +$(package)_file_name=$($(package)_version).tar.gz +$(package)_sha256_hash=62e419c12d1c9fad67cc1cd523132bc00db050998337c734c15bc8d73cc02b61 + +ifeq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) +$(package)_dependencies=native_clang +endif + +define $(package)_build_cmds + CC=$(clang_prog) CXX=$(clangxx_prog) INSTALLPREFIX=$($(package)_staging_prefix_dir) ./build.sh +endef + +define $(package)_stage_cmds + ./install.sh && \ + mkdir -p $($(package)_staging_prefix_dir)/include/llvm-c && \ + cp src/llvm/include/llvm-c/lto.h $($(package)_staging_prefix_dir)/include/llvm-c +endef diff --git a/depends/packages/native_mac_alias.mk b/depends/packages/native_mac_alias.mk index bb658bf02e..783f87ca7c 100644 --- a/depends/packages/native_mac_alias.mk +++ b/depends/packages/native_mac_alias.mk @@ -1,8 +1,8 @@ package=native_mac_alias -$(package)_version=2.0.7 +$(package)_version=2.2.0 $(package)_download_path=https://github.com/al45tair/mac_alias/archive/ $(package)_file_name=v$($(package)_version).tar.gz -$(package)_sha256_hash=6f606d3b6bccd2112aeabf1a063f5b5ece87005a5d7e97c8faca23b916e88838 +$(package)_sha256_hash=421e6d7586d1f155c7db3e7da01ca0dacc9649a509a253ad7077b70174426499 $(package)_install_libdir=$(build_prefix)/lib/python3/dist-packages define $(package)_build_cmds @@ -12,4 +12,4 @@ 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 \ No newline at end of file +endef diff --git a/depends/packages/native_protobuf.mk b/depends/packages/native_protobuf.mk index ce50b366fa..2cd44fdd3a 100644 --- a/depends/packages/native_protobuf.mk +++ b/depends/packages/native_protobuf.mk @@ -1,11 +1,14 @@ package=native_protobuf -$(package)_version=2.6.1 +$(package)_version=3.17.3 $(package)_download_path=https://github.com/google/protobuf/releases/download/v$($(package)_version) -$(package)_file_name=protobuf-$($(package)_version).tar.bz2 -$(package)_sha256_hash=ee445612d544d885ae240ffbcbf9267faa9f593b7b101f21d58beceb92661910 +$(package)_file_name=protobuf-cpp-$($(package)_version).tar.gz +$(package)_sha256_hash=51cec99f108b83422b7af1170afd7aeb2dd77d2bcbb7b6bad1f92509e9ccf8cb define $(package)_set_vars -$(package)_config_opts=--disable-shared + $(package)_config_opts=--disable-shared --without-zlib + $(package)_config_opts_darwin=--host=aarch64-apple-darwin + $(package)_config_opts_linux=--with-pic + $(package)_cxxflags=-std=c++17 endef define $(package)_config_cmds @@ -22,4 +25,4 @@ endef define $(package)_postprocess_cmds rm -rf lib include -endef +endef \ No newline at end of file diff --git a/depends/packages/openssl.mk b/depends/packages/openssl.mk index 99108dcaeb..3aa3e440cb 100644 --- a/depends/packages/openssl.mk +++ b/depends/packages/openssl.mk @@ -1,49 +1,61 @@ package=openssl -$(package)_version=1.0.1k +$(package)_version=1.1.1w $(package)_download_path=https://www.openssl.org/source $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=8f9faeaebad088e772f4ef5e38252d472be4d878c6b3a2718c10a4fcebe7a41c -$(package)_patches=0001-Add-OpenSSL-termios-fix-for-musl-libc.patch +$(package)_sha256_hash=cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8 define $(package)_set_vars $(package)_config_env=AR="$($(package)_ar)" RANLIB="$($(package)_ranlib)" CC="$($(package)_cc)" $(package)_config_opts=--prefix=$(host_prefix) --openssldir=$(host_prefix)/etc/openssl +$(package)_config_opts+=no-afalgeng +$(package)_config_opts+=no-asm +$(package)_config_opts+=no-bf +$(package)_config_opts+=no-blake2 $(package)_config_opts+=no-camellia $(package)_config_opts+=no-capieng -$(package)_config_opts+=no-cast -$(package)_config_opts+=no-comp +$(package)_config_opts+=no-cmac +$(package)_config_opts+=no-cms +$(package)_config_opts+=no-crypto-mdebug +$(package)_config_opts+=no-crypto-mdebug-backtrace +$(package)_config_opts+=no-deprecated $(package)_config_opts+=no-dso -$(package)_config_opts+=no-dtls1 -$(package)_config_opts+=no-ec_nistp_64_gcc_128 +$(package)_config_opts+=no-egd +$(package)_config_opts+=no-engine $(package)_config_opts+=no-gost -$(package)_config_opts+=no-gmp $(package)_config_opts+=no-heartbeats -$(package)_config_opts+=no-idea -$(package)_config_opts+=no-jpake -$(package)_config_opts+=no-krb5 -$(package)_config_opts+=no-libunbound -$(package)_config_opts+=no-md2 -$(package)_config_opts+=no-mdc2 -$(package)_config_opts+=no-rc4 -$(package)_config_opts+=no-rc5 -$(package)_config_opts+=no-rdrand -$(package)_config_opts+=no-rfc3779 -$(package)_config_opts+=no-rsax -$(package)_config_opts+=no-sctp +$(package)_config_opts+=no-multiblock +$(package)_config_opts+=no-scrypt $(package)_config_opts+=no-seed -$(package)_config_opts+=no-sha0 -$(package)_config_opts+=no-shared -$(package)_config_opts+=no-ssl-trace -$(package)_config_opts+=no-ssl2 +$(package)_config_opts+=no-srp +$(package)_config_opts+=no-srtp +$(package)_config_opts+=no-sse2 $(package)_config_opts+=no-ssl3 -$(package)_config_opts+=no-static_engine -$(package)_config_opts+=no-store +$(package)_config_opts+=no-ssl3-method +$(package)_config_opts+=no-ssl-trace +$(package)_config_opts+=no-tls1 +$(package)_config_opts+=no-tls1_1 +$(package)_config_opts+=no-ts +$(package)_config_opts+=no-tests +$(package)_config_opts+=no-threads $(package)_config_opts+=no-unit-test $(package)_config_opts+=no-weak-ssl-ciphers -$(package)_config_opts+=no-whirlpool -$(package)_config_opts+=no-zlib -$(package)_config_opts+=no-zlib-dynamic -$(package)_config_opts+=$($(package)_cflags) $($(package)_cppflags) +$(package)_config_opts+=-static --static + +# Options below are needed to be switched ON +# due to Qt requirements. More info at: +# https://doc.qt.io/qt-5/ssl.html#enabling-and-disabling-ssl-support + +$(package)_config_opts+=no-shared +$(package)_config_opts+=no-static-engine +$(package)_config_opts+=--with-rand-seed=os +$(package)_config_opts+=no-dtls1 +$(package)_config_opts+=enable-dh +$(package)_config_opts+=enable-ecdh +$(package)_config_opts+=enable-ecdsa + +$(package)_config_opts_android += $($(package)_cflags) $($(package)_cppflags) +$(package)_config_opts_linux += $($(package)_cflags) $($(package)_cppflags) +$(package)_config_opts_mingw32 += $($(package)_cflags) $($(package)_cppflags) $(package)_config_opts_linux=-fPIC -Wa,--noexecstack $(package)_config_opts_x86_64_linux=linux-x86_64 $(package)_config_opts_i686_linux=linux-generic32 @@ -53,15 +65,20 @@ $(package)_config_opts_aarch64_linux=linux-generic64 $(package)_config_opts_mipsel_linux=linux-generic32 $(package)_config_opts_mips_linux=linux-generic32 $(package)_config_opts_powerpc_linux=linux-generic32 +$(package)_config_opts_riscv32_linux=linux-generic32 +$(package)_config_opts_riscv64_linux=linux-generic64 $(package)_config_opts_x86_64_darwin=darwin64-x86_64-cc +$(package)_config_opts_arm64_darwin=darwin64-arm64-cc +$(package)_config_opts_aarch64_darwin=darwin64-arm64-cc $(package)_config_opts_x86_64_mingw32=mingw64 -$(package)_config_opts_i686_mingw32=mingw +$(package)_config_opts_android=-fPIC +$(package)_config_opts_aarch64_android=linux-generic64 -D__ANDROID_API=29 +$(package)_config_opts_x86_64_android=linux-generic64 -D__ANDROID_API=29 +$(package)_config_opts_armv7a_android=linux-generic32 -D__ANDROID_API=29 endef define $(package)_preprocess_cmds - patch -p1 < $($(package)_patch_dir)/0001-Add-OpenSSL-termios-fix-for-musl-libc.patch && \ - sed -i.old "/define DATE/d" util/mkbuildinf.pl && \ - sed -i.old "s|engines apps test|engines|" Makefile.org + sed -i.old 's|"engines", "apps", "test", "util", "tools", "fuzz"|"engines", "tools"|' Configure endef define $(package)_config_cmds @@ -69,13 +86,13 @@ define $(package)_config_cmds endef define $(package)_build_cmds - $(MAKE) -j1 build_libs libcrypto.pc libssl.pc openssl.pc + $(MAKE) -j4 endef define $(package)_stage_cmds - $(MAKE) INSTALL_PREFIX=$($(package)_staging_dir) -j1 install_sw + $(MAKE) DESTDIR=$($(package)_staging_dir) -j1 install_sw endef define $(package)_postprocess_cmds rm -rf share bin etc -endef +endef \ No newline at end of file diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 01e72b7d4a..710ef9981b 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -1,20 +1,30 @@ -packages:=boost openssl libevent zeromq gmp chia_bls backtrace +packages:=boost libevent gmp backtrace cmake immer zeromq openssl -qt_native_packages = native_protobuf -qt_packages = qrencode protobuf zlib +qrencode_linux_packages = qrencode +qrencode_android_packages = qrencode +qrencode_darwin_packages = qrencode +qrencode_mingw32_packages = qrencode -qt_x86_64_linux_packages:=qt expat dbus libxcb xcb_proto libXau xproto freetype fontconfig libX11 xextproto libXext xtrans -qt_i686_linux_packages:=$(qt_x86_64_linux_packages) +qt_linux_packages:=qt expat dbus libxcb xcb_proto libXau xproto freetype fontconfig libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm +qt_android_packages=qt qt_darwin_packages=qt qt_mingw32_packages=qt -wallet_packages=bdb +bdb_packages=bdb upnp_packages=miniupnpc +natpmp_packages=libnatpmp -darwin_native_packages = native_biplist native_ds_store native_mac_alias +darwin_native_packages = native_ds_store native_mac_alias + +$(host_arch)_$(host_os)_native_packages += native_b2 ifneq ($(build_os),darwin) -darwin_native_packages += native_cctools native_cdrkit native_libdmg-hfsplus +darwin_native_packages += native_cctools native_libtapi + +ifeq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) +darwin_native_packages += native_clang +endif + endif diff --git a/depends/packages/protobuf.mk b/depends/packages/protobuf.mk index 54d3fd9245..8733b61959 100644 --- a/depends/packages/protobuf.mk +++ b/depends/packages/protobuf.mk @@ -4,10 +4,11 @@ $(package)_download_path=$(native_$(package)_download_path) $(package)_file_name=$(native_$(package)_file_name) $(package)_sha256_hash=$(native_$(package)_sha256_hash) $(package)_dependencies=native_$(package) -$(package)_cxxflags=-std=c++11 +$(package)_cxxflags+=-std=c++17 define $(package)_set_vars - $(package)_config_opts=--disable-shared --with-protoc=$(build_prefix)/bin/protoc + $(package)_config_opts=--disable-shared --with-protoc=$(host_prefix)/native//bin/protoc + $(package)_config_opts_darwin=--host=aarch64-apple-darwin $(package)_config_opts_linux=--with-pic endef @@ -26,4 +27,4 @@ endef define $(package)_postprocess_cmds rm lib/libprotoc.a -endef +endef \ No newline at end of file diff --git a/depends/packages/qrencode.mk b/depends/packages/qrencode.mk index 44fdf1c295..d71e510ee5 100644 --- a/depends/packages/qrencode.mk +++ b/depends/packages/qrencode.mk @@ -5,8 +5,18 @@ $(package)_file_name=$(package)-$($(package)_version).tar.bz2 $(package)_sha256_hash=efe5188b1ddbcbf98763b819b146be6a90481aac30cfc8d858ab78a19cde1fa5 define $(package)_set_vars -$(package)_config_opts=--disable-shared -without-tools --disable-sdltest +$(package)_config_opts=--disable-shared -without-tools --without-tests --disable-sdltest +$(package)_config_opts += --disable-gprof --disable-gcov --disable-mudflap --disable-dependency-tracking --enable-option-checking $(package)_config_opts_linux=--with-pic +$(package)_config_opts_android=--with-pic +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub use +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub use endef define $(package)_config_cmds @@ -20,3 +30,7 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef \ No newline at end of file diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index bcfe88463d..cdec3d42e5 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -1,58 +1,70 @@ -PACKAGE=qt -$(package)_version=5.7.1 -$(package)_download_path=https://download.qt.io/archive/qt/5.7/$($(package)_version)/submodules -$(package)_suffix=opensource-src-$($(package)_version).tar.gz +package=qt +$(package)_version=5.15.5 +$(package)_download_path=https://download.qt.io/official_releases/qt/5.15/$($(package)_version)/submodules +$(package)_suffix=everywhere-opensource-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) -$(package)_sha256_hash=95f83e532d23b3ddbde7973f380ecae1bac13230340557276f75f2e37984e410 -$(package)_dependencies=openssl zlib -$(package)_linux_dependencies=freetype fontconfig libxcb libX11 xproto libXext -$(package)_build_subdir=qtbase +$(package)_sha256_hash=0c42c799aa7c89e479a07c451bf5a301e291266ba789e81afc18f95049524edc +$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon libxcb_util libxcb_util_render libxcb_util_keysyms libxcb_util_image libxcb_util_wm $(package)_qt_libs=corelib network widgets gui plugins testlib -$(package)_patches=mac-qmake.conf mingw-uuidof.patch pidlist_absolute.patch fix-xcb-include-order.patch -$(package)_patches+=fix_qt_configure.patch fix_qt_pkgconfig.patch fix-cocoahelpers-macos.patch qfixed-coretext.patch -# NOTE: fix_qt_configure.patch is only needed for Qt 5.7, newer versions don't have this issue. -# Remove it after bumping $(package)_version to 5.8+. +$(package)_linguist_tools = lrelease lupdate lconvert +$(package)_patches = qt.pro +$(package)_patches += qttools_src.pro +$(package)_patches += mac-qmake.conf +$(package)_patches += fix_qt_pkgconfig.patch +$(package)_patches += no-xlib.patch +$(package)_patches += dont_hardcode_x86_64.patch +$(package)_patches += fix_montery_include.patch +$(package)_patches += fix_android_jni_static.patch +$(package)_patches += dont_hardcode_pwd.patch +$(package)_patches += qtbase-moc-ignore-gcc-macro.patch +$(package)_patches += use_android_ndk23.patch +$(package)_patches += rcc_hardcode_timestamp.patch +$(package)_patches += duplicate_lcqpafonts.patch +$(package)_patches += fast_fixed_dtoa_no_optimize.patch +$(package)_patches += guix_cross_lib_path.patch $(package)_qttranslations_file_name=qttranslations-$($(package)_suffix) -$(package)_qttranslations_sha256_hash=3a15aebd523c6d89fb97b2d3df866c94149653a26d27a00aac9b6d3020bc5a1d - +$(package)_qttranslations_sha256_hash=c92af4171397a0ed272330b4fa0669790fcac8d050b07c8b8cc565ebeba6735e $(package)_qttools_file_name=qttools-$($(package)_suffix) -$(package)_qttools_sha256_hash=22d67de915cb8cd93e16fdd38fa006224ad9170bd217c2be1e53045a8dd02f0f +$(package)_qttools_sha256_hash=6d0778b71b2742cb527561791d1d3d255366163d54a10f78c683a398f09ffc6c $(package)_extra_sources = $($(package)_qttranslations_file_name) $(package)_extra_sources += $($(package)_qttools_file_name) define $(package)_set_vars +$(package)_config_env = QT_MAC_SDK_NO_VERSION_CHECK=1 $(package)_config_opts_release = -release +$(package)_config_opts_release += -silent $(package)_config_opts_debug = -debug +$(package)_config_opts_debug += -optimized-tools $(package)_config_opts += -bindir $(build_prefix)/bin -$(package)_config_opts += -c++std c++11 +$(package)_config_opts += -c++std c++17 $(package)_config_opts += -confirm-license -$(package)_config_opts += -dbus-runtime $(package)_config_opts += -hostprefix $(build_prefix) -$(package)_config_opts += -no-alsa -$(package)_config_opts += -no-audio-backend +$(package)_config_opts += -no-compile-examples $(package)_config_opts += -no-cups $(package)_config_opts += -no-egl $(package)_config_opts += -no-eglfs -$(package)_config_opts += -no-feature-style-windowsmobile -$(package)_config_opts += -no-feature-style-windowsce -$(package)_config_opts += -no-freetype +$(package)_config_opts += -no-evdev $(package)_config_opts += -no-gif $(package)_config_opts += -no-glib -$(package)_config_opts += -no-gstreamer $(package)_config_opts += -no-icu +$(package)_config_opts += -no-ico $(package)_config_opts += -no-iconv $(package)_config_opts += -no-kms $(package)_config_opts += -no-linuxfb +$(package)_config_opts += -no-libjpeg +$(package)_config_opts += -no-libproxy $(package)_config_opts += -no-libudev -$(package)_config_opts += -no-mitshm +$(package)_config_opts += -no-mimetype-database $(package)_config_opts += -no-mtdev -$(package)_config_opts += -no-pulseaudio +$(package)_config_opts += -no-openssl $(package)_config_opts += -no-openvg $(package)_config_opts += -no-reduce-relocations -$(package)_config_opts += -no-qml-debug +$(package)_config_opts += -no-schannel +$(package)_config_opts += -no-sctp +$(package)_config_opts += -no-securetransport $(package)_config_opts += -no-sql-db2 $(package)_config_opts += -no-sql-ibase $(package)_config_opts += -no-sql-oci @@ -62,49 +74,133 @@ $(package)_config_opts += -no-sql-odbc $(package)_config_opts += -no-sql-psql $(package)_config_opts += -no-sql-sqlite $(package)_config_opts += -no-sql-sqlite2 +$(package)_config_opts += -no-system-proxies $(package)_config_opts += -no-use-gold-linker -$(package)_config_opts += -no-xinput2 -$(package)_config_opts += -no-xrender +$(package)_config_opts += -no-zstd $(package)_config_opts += -nomake examples $(package)_config_opts += -nomake tests +$(package)_config_opts += -nomake tools $(package)_config_opts += -opensource -$(package)_config_opts += -openssl-linked -$(package)_config_opts += -optimized-qmake -$(package)_config_opts += -pch $(package)_config_opts += -pkg-config $(package)_config_opts += -prefix $(host_prefix) $(package)_config_opts += -qt-libpng -$(package)_config_opts += -qt-libjpeg $(package)_config_opts += -qt-pcre $(package)_config_opts += -qt-harfbuzz -$(package)_config_opts += -system-zlib -$(package)_config_opts += -reduce-exports +$(package)_config_opts += -qt-zlib $(package)_config_opts += -static -$(package)_config_opts += -silent $(package)_config_opts += -v -$(package)_config_opts += -no-feature-printer +$(package)_config_opts += -no-feature-bearermanagement +$(package)_config_opts += -no-feature-colordialog +$(package)_config_opts += -no-feature-commandlineparser +$(package)_config_opts += -no-feature-concurrent +$(package)_config_opts += -no-feature-dial +$(package)_config_opts += -no-feature-fontcombobox +$(package)_config_opts += -no-feature-ftp +$(package)_config_opts += -no-feature-http +$(package)_config_opts += -no-feature-image_heuristic_mask +$(package)_config_opts += -no-feature-keysequenceedit +$(package)_config_opts += -no-feature-lcdnumber +$(package)_config_opts += -no-feature-networkdiskcache +$(package)_config_opts += -no-feature-networkproxy +$(package)_config_opts += -no-feature-pdf $(package)_config_opts += -no-feature-printdialog +$(package)_config_opts += -no-feature-printer +$(package)_config_opts += -no-feature-printpreviewdialog +$(package)_config_opts += -no-feature-printpreviewwidget +$(package)_config_opts += -no-feature-sessionmanager +$(package)_config_opts += -no-feature-socks5 +$(package)_config_opts += -no-feature-sql +$(package)_config_opts += -no-feature-sqlmodel +$(package)_config_opts += -no-feature-statemachine +$(package)_config_opts += -no-feature-syntaxhighlighter +$(package)_config_opts += -no-feature-textbrowser +$(package)_config_opts += -no-feature-textmarkdownwriter +$(package)_config_opts += -no-feature-textodfwriter +$(package)_config_opts += -no-feature-topleveldomain +$(package)_config_opts += -no-feature-udpsocket +$(package)_config_opts += -no-feature-undocommand +$(package)_config_opts += -no-feature-undogroup +$(package)_config_opts += -no-feature-undostack +$(package)_config_opts += -no-feature-undoview +$(package)_config_opts += -no-feature-vnc +$(package)_config_opts += -no-feature-wizard +$(package)_config_opts += -no-feature-xml + +$(package)_config_opts_darwin = -no-dbus +$(package)_config_opts_darwin += -no-opengl +$(package)_config_opts_darwin += -pch +$(package)_config_opts_darwin += -no-feature-corewlan +$(package)_config_opts_darwin += -no-freetype +$(package)_config_opts_darwin += QMAKE_MACOSX_DEPLOYMENT_TARGET=$(OSX_MIN_VERSION) + +# Optimizing using > -O1 causes non-determinism when building across arches. +$(package)_config_opts_aarch64_darwin += "QMAKE_CFLAGS_OPTIMIZE_FULL = -O1" ifneq ($(build_os),darwin) -$(package)_config_opts_darwin = -xplatform macx-clang-linux +$(package)_config_opts_darwin += -xplatform macx-clang-linux $(package)_config_opts_darwin += -device-option MAC_SDK_PATH=$(OSX_SDK) $(package)_config_opts_darwin += -device-option MAC_SDK_VERSION=$(OSX_SDK_VERSION) $(package)_config_opts_darwin += -device-option CROSS_COMPILE="$(host)-" -$(package)_config_opts_darwin += -device-option MAC_MIN_VERSION=$(OSX_MIN_VERSION) $(package)_config_opts_darwin += -device-option MAC_TARGET=$(host) -$(package)_config_opts_darwin += -device-option MAC_LD64_VERSION=$(LD64_VERSION) +$(package)_config_opts_darwin += -device-option XCODE_VERSION=$(XCODE_VERSION) +endif + +ifneq ($(build_arch),$(host_arch)) +$(package)_config_opts_aarch64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=arm64 +$(package)_config_opts_x86_64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=x86_64 endif -$(package)_config_opts_linux = -qt-xkbcommon -$(package)_config_opts_linux += -qt-xcb +$(package)_config_opts_linux = -xcb +$(package)_config_opts_linux += -no-xcb-xlib +$(package)_config_opts_linux += -no-feature-xlib $(package)_config_opts_linux += -system-freetype -$(package)_config_opts_linux += -no-sm $(package)_config_opts_linux += -fontconfig $(package)_config_opts_linux += -no-opengl -$(package)_config_opts_arm_linux = -platform linux-g++ -xplatform $(host) -$(package)_config_opts_i686_linux = -xplatform linux-g++-32 -$(package)_config_opts_mingw32 = -no-opengl -xplatform win32-g++ -device-option CROSS_COMPILE="$(host)-" -$(package)_build_env = QT_RCC_TEST=1 +$(package)_config_opts_linux += -no-feature-vulkan +$(package)_config_opts_linux += -dbus-runtime +ifneq ($(LTO),) +$(package)_config_opts_linux += -ltcg +endif + +ifneq (,$(findstring clang,$($(package)_cxx))) + ifneq (,$(findstring -stdlib=libc++,$($(package)_cxx))) + $(package)_config_opts_linux += -platform linux-clang-libc++ -xplatform linux-clang-libc++ + else + $(package)_config_opts_linux += -platform linux-clang -xplatform linux-clang + endif +else + $(package)_config_opts_linux += -platform linux-g++ -xplatform bitcoin-linux-g++ +endif + +$(package)_config_opts_mingw32 = -no-opengl +$(package)_config_opts_mingw32 += -no-dbus +$(package)_config_opts_mingw32 += -no-freetype +$(package)_config_opts_mingw32 += -xplatform win32-g++ +$(package)_config_opts_mingw32 += "QMAKE_CFLAGS = '$($(package)_cflags) $($(package)_cppflags)'" +$(package)_config_opts_mingw32 += "QMAKE_CXX = '$($(package)_cxx)'" +$(package)_config_opts_mingw32 += "QMAKE_CXXFLAGS = '$($(package)_cxxflags) $($(package)_cppflags)'" +$(package)_config_opts_mingw32 += "QMAKE_LFLAGS = '$($(package)_ldflags)'" +$(package)_config_opts_mingw32 += "QMAKE_LIB = '$($(package)_ar) rc'" +$(package)_config_opts_mingw32 += -device-option CROSS_COMPILE="$(host)-" +$(package)_config_opts_mingw32 += -pch + +$(package)_config_opts_android = -xplatform android-clang +$(package)_config_opts_android += -android-sdk $(ANDROID_SDK) +$(package)_config_opts_android += -android-ndk $(ANDROID_NDK) +$(package)_config_opts_android += -android-ndk-platform android-$(ANDROID_API_LEVEL) +$(package)_config_opts_android += -egl +$(package)_config_opts_android += -no-dbus +$(package)_config_opts_android += -opengl es2 +$(package)_config_opts_android += -qt-freetype +$(package)_config_opts_android += -no-fontconfig +$(package)_config_opts_android += -L $(host_prefix)/lib +$(package)_config_opts_android += -I $(host_prefix)/include +$(package)_config_opts_android += -pch +$(package)_config_opts_android += -no-feature-vulkan + +$(package)_config_opts_aarch64_android += -android-arch arm64-v8a +$(package)_config_opts_armv7a_android += -android-arch armeabi-v7a +$(package)_config_opts_x86_64_android += -android-arch x86_64 endef define $(package)_fetch_cmds @@ -120,73 +216,73 @@ define $(package)_extract_cmds echo "$($(package)_qttools_sha256_hash) $($(package)_source_dir)/$($(package)_qttools_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ mkdir qtbase && \ - tar --strip-components=1 -xf $($(package)_source) -C qtbase && \ + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source) -C qtbase && \ mkdir qttranslations && \ - tar --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttranslations_file_name) -C qttranslations && \ + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttranslations_file_name) -C qttranslations && \ mkdir qttools && \ - tar --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools + $(build_TAR) --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools endef - +# Preprocessing steps work as follows: +# +# 1. Apply our patches to the extracted source. See each patch for more info. +# +# 2. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf. +# +# 3. After making a copy of the mkspec for the linux-arm-gnueabi host, named +# bitcoin-linux-g++, replace tool names with $($($(package)_type)_TOOL). +# +# 4. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds. +# +# 5. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466. define $(package)_preprocess_cmds - sed -i.old "s|updateqm.commands = \$$$$\$$$$LRELEASE|updateqm.commands = $($(package)_extract_dir)/qttools/bin/lrelease|" qttranslations/translations/translations.pro && \ - sed -i.old "/updateqm.depends =/d" qttranslations/translations/translations.pro && \ - sed -i.old "s/src_plugins.depends = src_sql src_xml src_network/src_plugins.depends = src_xml src_network/" qtbase/src/src.pro && \ - sed -i.old "s|X11/extensions/XIproto.h|X11/X.h|" qtbase/src/plugins/platforms/xcb/qxcbxsettings.cpp && \ - sed -i.old 's/if \[ "$$$$XPLATFORM_MAC" = "yes" \]; then xspecvals=$$$$(macSDKify/if \[ "$$$$BUILD_ON_MAC" = "yes" \]; then xspecvals=$$$$(macSDKify/' qtbase/configure && \ - sed -i.old 's/CGEventCreateMouseEvent(0, kCGEventMouseMoved, pos, 0)/CGEventCreateMouseEvent(0, kCGEventMouseMoved, pos, kCGMouseButtonLeft)/' qtbase/src/plugins/platforms/cocoa/qcocoacursor.mm && \ + cp $($(package)_patch_dir)/qt.pro qt.pro && \ + cp $($(package)_patch_dir)/qttools_src.pro qttools/src/src.pro && \ + patch -p1 -i $($(package)_patch_dir)/dont_hardcode_pwd.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_qt_pkgconfig.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch && \ + patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \ + patch -p1 -i $($(package)_patch_dir)/dont_hardcode_x86_64.patch && \ + patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_montery_include.patch && \ + patch -p1 -i $($(package)_patch_dir)/use_android_ndk23.patch && \ + patch -p1 -i $($(package)_patch_dir)/rcc_hardcode_timestamp.patch && \ + patch -p1 -i $($(package)_patch_dir)/duplicate_lcqpafonts.patch && \ + patch -p1 -i $($(package)_patch_dir)/fast_fixed_dtoa_no_optimize.patch && \ + patch -p1 -i $($(package)_patch_dir)/guix_cross_lib_path.patch && \ mkdir -p qtbase/mkspecs/macx-clang-linux &&\ - cp -f qtbase/mkspecs/macx-clang/Info.plist.lib qtbase/mkspecs/macx-clang-linux/ &&\ - cp -f qtbase/mkspecs/macx-clang/Info.plist.app qtbase/mkspecs/macx-clang-linux/ &&\ cp -f qtbase/mkspecs/macx-clang/qplatformdefs.h qtbase/mkspecs/macx-clang-linux/ &&\ cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \ - patch -p1 < $($(package)_patch_dir)/mingw-uuidof.patch && \ - patch -p1 < $($(package)_patch_dir)/pidlist_absolute.patch && \ - patch -p1 < $($(package)_patch_dir)/fix-xcb-include-order.patch && \ - patch -p1 < $($(package)_patch_dir)/fix_qt_configure.patch && \ - patch -p1 < $($(package)_patch_dir)/fix_qt_pkgconfig.patch && \ - patch -p1 < $($(package)_patch_dir)/fix-cocoahelpers-macos.patch && \ - patch -p1 < $($(package)_patch_dir)/qfixed-coretext.patch && \ + cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/bitcoin-linux-g++ && \ + sed -i.old "s|arm-linux-gnueabi-gcc|$($($(package)_type)_CC)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-g++|$($($(package)_type)_CXX)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-ar|$($($(package)_type)_AR)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-objcopy|$($($(package)_type)_OBJCOPY)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-nm|$($($(package)_type)_NM)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ + sed -i.old "s|arm-linux-gnueabi-strip|$($($(package)_type)_STRIP)|" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ - sed -i.old "s|QMAKE_CFLAGS = |!host_build: QMAKE_CFLAGS = $($(package)_cflags) $($(package)_cppflags) |" qtbase/mkspecs/win32-g++/qmake.conf && \ - sed -i.old "s|QMAKE_LFLAGS = |!host_build: QMAKE_LFLAGS = $($(package)_ldflags) |" qtbase/mkspecs/win32-g++/qmake.conf && \ - sed -i.old "s|QMAKE_CXXFLAGS = |!host_build: QMAKE_CXXFLAGS = $($(package)_cxxflags) $($(package)_cppflags) |" qtbase/mkspecs/win32-g++/qmake.conf - + sed -i.old "s|QMAKE_CC = \$$$$\$$$${CROSS_COMPILE}clang|QMAKE_CC = $($(package)_cc)|" qtbase/mkspecs/common/clang.conf && \ + sed -i.old "s|QMAKE_CXX = \$$$$\$$$${CROSS_COMPILE}clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf endef define $(package)_config_cmds - export PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig && \ - export PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig && \ - ./configure $($(package)_config_opts) && \ - echo "host_build: QT_CONFIG ~= s/system-zlib/zlib" >> mkspecs/qconfig.pri && \ - echo "CONFIG += force_bootstrap" >> mkspecs/qconfig.pri && \ - $(MAKE) sub-src-clean && \ - cd ../qttranslations && ../qtbase/bin/qmake qttranslations.pro -o Makefile && \ - cd translations && ../../qtbase/bin/qmake translations.pro -o Makefile && cd ../.. &&\ - cd qttools/src/linguist/lrelease/ && ../../../../qtbase/bin/qmake lrelease.pro -o Makefile && \ - cd ../lupdate/ && ../../../../qtbase/bin/qmake lupdate.pro -o Makefile && cd ../../../.. + cd qtbase && \ + ./configure -top-level $($(package)_config_opts) endef define $(package)_build_cmds - $(MAKE) -C src $(addprefix sub-,$($(package)_qt_libs)) && \ - $(MAKE) -C ../qttools/src/linguist/lrelease && \ - $(MAKE) -C ../qttools/src/linguist/lupdate && \ - $(MAKE) -C ../qttranslations + $(MAKE) endef define $(package)_stage_cmds - $(MAKE) -C src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && cd .. &&\ - $(MAKE) -C qttools/src/linguist/lrelease INSTALL_ROOT=$($(package)_staging_dir) install_target && \ - $(MAKE) -C qttools/src/linguist/lupdate INSTALL_ROOT=$($(package)_staging_dir) install_target && \ - $(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets && \ - if `test -f qtbase/src/plugins/platforms/xcb/xcb-static/libxcb-static.a`; then \ - cp qtbase/src/plugins/platforms/xcb/xcb-static/libxcb-static.a $($(package)_staging_prefix_dir)/lib; \ - fi + $(MAKE) -C qtbase/src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && \ + $(MAKE) -C qttools/src/linguist INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_linguist_tools))) && \ + $(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets endef define $(package)_postprocess_cmds rm -rf native/mkspecs/ native/lib/ lib/cmake/ && \ - rm -f lib/lib*.la lib/*.prl plugins/*/*.prl -endef + rm -f lib/lib*.la +endef \ No newline at end of file diff --git a/depends/packages/sodium.mk b/depends/packages/sodium.mk new file mode 100644 index 0000000000..355924ec86 --- /dev/null +++ b/depends/packages/sodium.mk @@ -0,0 +1,27 @@ +package=sodium +lib_name=libsodium +$(package)_version_full=1.0.18-RELEASE +$(package)_version_short=1.0.18 +$(package)_download_path=https://github.com/jedisct1/libsodium/releases/download/$($(package)_version_full)/ +$(package)_file_name=$(lib_name)-$($(package)_version_short).tar.gz +$(package)_sha256_hash=6f504490b342a4f8a4c4a02fc9b866cbef8622d5df4e5452b46be121e46636c1 +$(package)_patches=fix-whitespace.patch + +define $(package)_set_vars +$(package)_config_opts=--enable-static --disable-shared --disable-pie +$(package)_config_opts+=--prefix=$(host_prefix) +endef + +define $(package)_config_cmds + ./autogen.sh &&\ + patch -p1 < $($(package)_patch_dir)/fix-whitespace.patch &&\ + $($(package)_autoconf) $($(package)_config_opts) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef \ No newline at end of file diff --git a/depends/packages/xcb_proto.mk b/depends/packages/xcb_proto.mk index 0c7c958d62..9be822506d 100644 --- a/depends/packages/xcb_proto.mk +++ b/depends/packages/xcb_proto.mk @@ -1,13 +1,8 @@ package=xcb_proto -$(package)_version=1.10 -$(package)_download_path=http://xcb.freedesktop.org/dist -$(package)_file_name=xcb-proto-$($(package)_version).tar.bz2 -$(package)_sha256_hash=7ef40ddd855b750bc597d2a435da21e55e502a0fefa85b274f2c922800baaf05 - -define $(package)_set_vars - $(package)_config_opts=--disable-shared - $(package)_config_opts_linux=--with-pic -endef +$(package)_version=1.14.1 +$(package)_download_path=https://xorg.freedesktop.org/archive/individual/proto +$(package)_file_name=xcb-proto-$($(package)_version).tar.xz +$(package)_sha256_hash=f04add9a972ac334ea11d9d7eb4fc7f8883835da3e4859c9afa971efdf57fcc3 define $(package)_config_cmds $($(package)_autoconf) @@ -22,6 +17,5 @@ define $(package)_stage_cmds endef define $(package)_postprocess_cmds - find -name "*.pyc" -delete && \ - find -name "*.pyo" -delete + rm -rf lib/python*/site-packages/xcbgen/__pycache__ endef diff --git a/depends/packages/xextproto.mk b/depends/packages/xextproto.mk deleted file mode 100644 index 98a11eb497..0000000000 --- a/depends/packages/xextproto.mk +++ /dev/null @@ -1,21 +0,0 @@ -package=xextproto -$(package)_version=7.3.0 -$(package)_download_path=http://xorg.freedesktop.org/releases/individual/proto -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=f3f4b23ac8db9c3a9e0d8edb591713f3d70ef9c3b175970dd8823dfc92aa5bb0 - -define $(package)_set_vars -$(package)_config_opts=--disable-shared -endef - -define $(package)_config_cmds - $($(package)_autoconf) -endef - -define $(package)_build_cmds - $(MAKE) -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install -endef diff --git a/depends/packages/xproto.mk b/depends/packages/xproto.mk index 50a90b2685..63c6c472b8 100644 --- a/depends/packages/xproto.mk +++ b/depends/packages/xproto.mk @@ -1,11 +1,16 @@ package=xproto -$(package)_version=7.0.26 -$(package)_download_path=http://xorg.freedesktop.org/releases/individual/proto +$(package)_version=7.0.31 +$(package)_download_path=https://xorg.freedesktop.org/releases/individual/proto $(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=636162c1759805a5a0114a369dffdeccb8af8c859ef6e1445f26a4e6e046514f +$(package)_sha256_hash=c6f9747da0bd3a95f86b17fb8dd5e717c8f3ab7f0ece3ba1b247899ec1ef7747 define $(package)_set_vars -$(package)_config_opts=--disable-shared +$(package)_config_opts=--without-fop --without-xmlto --without-xsltproc --disable-specs +$(package)_config_opts += --disable-dependency-tracking --enable-option-checking +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . endef define $(package)_config_cmds @@ -18,4 +23,4 @@ endef define $(package)_stage_cmds $(MAKE) DESTDIR=$($(package)_staging_dir) install -endef +endef \ No newline at end of file diff --git a/depends/packages/xtrans.mk b/depends/packages/xtrans.mk deleted file mode 100644 index 99eefa6d5e..0000000000 --- a/depends/packages/xtrans.mk +++ /dev/null @@ -1,22 +0,0 @@ -package=xtrans -$(package)_version=1.3.4 -$(package)_download_path=http://xorg.freedesktop.org/releases/individual/lib/ -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=054d4ee3efd52508c753e9f7bc655ef185a29bd2850dd9e2fc2ccc33544f583a -$(package)_dependencies= - -define $(package)_set_vars -$(package)_config_opts_linux=--with-pic --disable-static -endef - -define $(package)_config_cmds - $($(package)_autoconf) -endef - -define $(package)_build_cmds - $(MAKE) -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install -endef diff --git a/depends/packages/zeromq.mk b/depends/packages/zeromq.mk index 01146c26f6..11a9ef0b8c 100644 --- a/depends/packages/zeromq.mk +++ b/depends/packages/zeromq.mk @@ -1,20 +1,21 @@ package=zeromq -$(package)_version=4.1.5 -$(package)_download_path=https://github.com/zeromq/zeromq4-1/releases/download/v$($(package)_version)/ +$(package)_version=4.2.3 +$(package)_download_path=https://github.com/zeromq/libzmq/releases/download/v$($(package)_version)/ $(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=04aac57f081ffa3a2ee5ed04887be9e205df3a7ddade0027460b8042432bdbcf -$(package)_patches=9114d3957725acd34aa8b8d011585812f3369411.patch 9e6745c12e0b100cd38acecc16ce7db02905e27c.patch +$(package)_sha256_hash=8f1e2b2aade4dbfde98d82366d61baef2f62e812530160d2e6d0a5bb24e40bc0 +$(package)_patches=0001-fix-build-with-older-mingw64.patch 0002-disable-pthread_set_name_np.patch define $(package)_set_vars - $(package)_config_opts=--without-documentation --disable-shared --without-libsodium --disable-curve + $(package)_config_opts=--without-docs --disable-shared --without-libsodium --disable-curve --disable-curve-keygen --disable-perf --disable-Werror $(package)_config_opts_linux=--with-pic - $(package)_cxxflags=-std=c++11 + $(package)_config_opts_android=--with-pic + $(package)_cxxflags+=-std=c++17 endef define $(package)_preprocess_cmds - patch -p1 < $($(package)_patch_dir)/9114d3957725acd34aa8b8d011585812f3369411.patch && \ - patch -p1 < $($(package)_patch_dir)/9e6745c12e0b100cd38acecc16ce7db02905e27c.patch && \ - ./autogen.sh + 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 define $(package)_config_cmds @@ -22,7 +23,7 @@ define $(package)_config_cmds endef define $(package)_build_cmds - $(MAKE) libzmq.la + $(MAKE) src/libzmq.la endef define $(package)_stage_cmds @@ -30,5 +31,6 @@ define $(package)_stage_cmds endef define $(package)_postprocess_cmds + sed -i.old "s/ -lstdc++//" lib/pkgconfig/libzmq.pc && \ rm -rf bin share endef diff --git a/depends/packages/zlib.mk b/depends/packages/zlib.mk deleted file mode 100644 index 589490800f..0000000000 --- a/depends/packages/zlib.mk +++ /dev/null @@ -1,27 +0,0 @@ -package=zlib -$(package)_version=1.2.11 -$(package)_download_path=http://www.zlib.net -$(package)_file_name=$(package)-$($(package)_version).tar.gz -$(package)_sha256_hash=c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1 - -define $(package)_set_vars -$(package)_build_opts= CC="$($(package)_cc)" -$(package)_build_opts+=CFLAGS="$($(package)_cflags) $($(package)_cppflags) -fPIC" -$(package)_build_opts+=RANLIB="$($(package)_ranlib)" -$(package)_build_opts+=AR="$($(package)_ar)" -$(package)_build_opts_darwin+=AR="$($(package)_libtool)" -$(package)_build_opts_darwin+=ARFLAGS="-o" -endef - -define $(package)_config_cmds - ./configure --static --prefix=$(host_prefix) -endef - -define $(package)_build_cmds - $(MAKE) $($(package)_build_opts) libz.a -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install $($(package)_build_opts) -endef - diff --git a/depends/patches/bdb/clang_cxx_11.patch b/depends/patches/bdb/clang_cxx_11.patch new file mode 100644 index 0000000000..58f7ddc7d5 --- /dev/null +++ b/depends/patches/bdb/clang_cxx_11.patch @@ -0,0 +1,147 @@ +commit 3311d68f11d1697565401eee6efc85c34f022ea7 +Author: fanquake +Date: Mon Aug 17 20:03:56 2020 +0800 + + Fix C++11 compatibility + +diff --git a/dbinc/atomic.h b/dbinc/atomic.h +index 0034dcc..7c11d4a 100644 +--- a/dbinc/atomic.h ++++ b/dbinc/atomic.h +@@ -70,7 +70,7 @@ typedef struct { + * These have no memory barriers; the caller must include them when necessary. + */ + #define atomic_read(p) ((p)->value) +-#define atomic_init(p, val) ((p)->value = (val)) ++#define atomic_init_db(p, val) ((p)->value = (val)) + + #ifdef HAVE_ATOMIC_SUPPORT + +@@ -144,7 +144,7 @@ typedef LONG volatile *interlocked_val; + #define atomic_inc(env, p) __atomic_inc(p) + #define atomic_dec(env, p) __atomic_dec(p) + #define atomic_compare_exchange(env, p, o, n) \ +- __atomic_compare_exchange((p), (o), (n)) ++ __atomic_compare_exchange_db((p), (o), (n)) + static inline int __atomic_inc(db_atomic_t *p) + { + int temp; +@@ -176,7 +176,7 @@ static inline int __atomic_dec(db_atomic_t *p) + * http://gcc.gnu.org/onlinedocs/gcc-4.1.0/gcc/Atomic-Builtins.html + * which configure could be changed to use. + */ +-static inline int __atomic_compare_exchange( ++static inline int __atomic_compare_exchange_db( + db_atomic_t *p, atomic_value_t oldval, atomic_value_t newval) + { + atomic_value_t was; +@@ -206,7 +206,7 @@ static inline int __atomic_compare_exchange( + #define atomic_dec(env, p) (--(p)->value) + #define atomic_compare_exchange(env, p, oldval, newval) \ + (DB_ASSERT(env, atomic_read(p) == (oldval)), \ +- atomic_init(p, (newval)), 1) ++ atomic_init_db(p, (newval)), 1) + #else + #define atomic_inc(env, p) __atomic_inc(env, p) + #define atomic_dec(env, p) __atomic_dec(env, p) +diff --git a/mp/mp_fget.c b/mp/mp_fget.c +index 5fdee5a..0b75f57 100644 +--- a/mp/mp_fget.c ++++ b/mp/mp_fget.c +@@ -617,7 +617,7 @@ alloc: /* Allocate a new buffer header and data space. */ + + /* Initialize enough so we can call __memp_bhfree. */ + alloc_bhp->flags = 0; +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + #ifdef DIAGNOSTIC + if ((uintptr_t)alloc_bhp->buf & (sizeof(size_t) - 1)) { + __db_errx(env, +@@ -911,7 +911,7 @@ alloc: /* Allocate a new buffer header and data space. */ + MVCC_MPROTECT(bhp->buf, mfp->stat.st_pagesize, + PROT_READ); + +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + MUTEX_LOCK(env, alloc_bhp->mtx_buf); + alloc_bhp->priority = bhp->priority; + alloc_bhp->pgno = bhp->pgno; +diff --git a/mp/mp_mvcc.c b/mp/mp_mvcc.c +index 34467d2..f05aa0c 100644 +--- a/mp/mp_mvcc.c ++++ b/mp/mp_mvcc.c +@@ -276,7 +276,7 @@ __memp_bh_freeze(dbmp, infop, hp, bhp, need_frozenp) + #else + memcpy(frozen_bhp, bhp, SSZA(BH, buf)); + #endif +- atomic_init(&frozen_bhp->ref, 0); ++ atomic_init_db(&frozen_bhp->ref, 0); + if (mutex != MUTEX_INVALID) + frozen_bhp->mtx_buf = mutex; + else if ((ret = __mutex_alloc(env, MTX_MPOOL_BH, +@@ -428,7 +428,7 @@ __memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_bhp) + #endif + alloc_bhp->mtx_buf = mutex; + MUTEX_LOCK(env, alloc_bhp->mtx_buf); +- atomic_init(&alloc_bhp->ref, 1); ++ atomic_init_db(&alloc_bhp->ref, 1); + F_CLR(alloc_bhp, BH_FROZEN); + } + +diff --git a/mp/mp_region.c b/mp/mp_region.c +index e6cece9..ddbe906 100644 +--- a/mp/mp_region.c ++++ b/mp/mp_region.c +@@ -224,7 +224,7 @@ __memp_init(env, dbmp, reginfo_off, htab_buckets, max_nreg) + MTX_MPOOL_FILE_BUCKET, 0, &htab[i].mtx_hash)) != 0) + return (ret); + SH_TAILQ_INIT(&htab[i].hash_bucket); +- atomic_init(&htab[i].hash_page_dirty, 0); ++ atomic_init_db(&htab[i].hash_page_dirty, 0); + } + + /* +@@ -269,7 +269,7 @@ __memp_init(env, dbmp, reginfo_off, htab_buckets, max_nreg) + hp->mtx_hash = (mtx_base == MUTEX_INVALID) ? MUTEX_INVALID : + mtx_base + i; + SH_TAILQ_INIT(&hp->hash_bucket); +- atomic_init(&hp->hash_page_dirty, 0); ++ atomic_init_db(&hp->hash_page_dirty, 0); + #ifdef HAVE_STATISTICS + hp->hash_io_wait = 0; + hp->hash_frozen = hp->hash_thawed = hp->hash_frozen_freed = 0; +diff --git a/mutex/mut_method.c b/mutex/mut_method.c +index 2588763..5c6d516 100644 +--- a/mutex/mut_method.c ++++ b/mutex/mut_method.c +@@ -426,7 +426,7 @@ atomic_compare_exchange(env, v, oldval, newval) + MUTEX_LOCK(env, mtx); + ret = atomic_read(v) == oldval; + if (ret) +- atomic_init(v, newval); ++ atomic_init_db(v, newval); + MUTEX_UNLOCK(env, mtx); + + return (ret); +diff --git a/mutex/mut_tas.c b/mutex/mut_tas.c +index f3922e0..e40fcdf 100644 +--- a/mutex/mut_tas.c ++++ b/mutex/mut_tas.c +@@ -46,7 +46,7 @@ __db_tas_mutex_init(env, mutex, flags) + + #ifdef HAVE_SHARED_LATCHES + if (F_ISSET(mutexp, DB_MUTEX_SHARED)) +- atomic_init(&mutexp->sharecount, 0); ++ atomic_init_db(&mutexp->sharecount, 0); + else + #endif + if (MUTEX_INIT(&mutexp->tas)) { +@@ -486,7 +486,7 @@ __db_tas_mutex_unlock(env, mutex) + F_CLR(mutexp, DB_MUTEX_LOCKED); + /* Flush flag update before zeroing count */ + MEMBAR_EXIT(); +- atomic_init(&mutexp->sharecount, 0); ++ atomic_init_db(&mutexp->sharecount, 0); + } else { + DB_ASSERT(env, sharecount > 0); + MEMBAR_EXIT(); diff --git a/depends/patches/bls-dash/bls-dash_dynamic_libs.patch b/depends/patches/bls-dash/bls-dash_dynamic_libs.patch new file mode 100644 index 0000000000..00f3c1e97b --- /dev/null +++ b/depends/patches/bls-dash/bls-dash_dynamic_libs.patch @@ -0,0 +1,37 @@ +--- a/src/CMakeLists.txt 2022-09-12 23:43:19.861781722 +0200 ++++ b/src/CMakeLists.txt 2022-09-12 23:50:52.213040305 +0200 +@@ -49,18 +49,18 @@ + ) + + set(OPREFIX object_) +-find_library(GMP_NAME NAMES libgmp.a gmp) +-find_library(SODIUM_NAME NAMES libsodium.a sodium) ++find_library(GMP_NAME NAMES libgmp.a) ++find_library(SODIUM_NAME NAMES libsodium.a) + + set(LIBRARIES_TO_COMBINE + COMMAND mkdir ${OPREFIX}$ || true && cd ${OPREFIX}$ && ${CMAKE_AR} -x $ + COMMAND mkdir ${OPREFIX}$ || true && cd ${OPREFIX}$ && ${CMAKE_AR} -x $ + ) + +-if (GMP_FOUND) ++if (NOT ${GMP_NAME} STREQUAL "GMP_NAME-NOTFOUND") + list(APPEND LIBRARIES_TO_COMBINE COMMAND mkdir ${OPREFIX}gmp || true && cd ${OPREFIX}gmp && ${CMAKE_AR} -x ${GMP_NAME}) + endif() +-if (SODIUM_FOUND) ++if (NOT ${SODIUM_NAME} STREQUAL "SODIUM_NAME-NOTFOUND") + message("SODIUM_FOUND in src/CMakeLists.txt") + list(APPEND LIBRARIES_TO_COMBINE COMMAND mkdir ${OPREFIX}sodium || true && cd ${OPREFIX}sodium && ${CMAKE_AR} -x ${SODIUM_NAME}) + target_compile_definitions(blstmp PRIVATE BLSALLOC_SODIUM=1) + + +--- a/CMakeLists.txt 2022-09-12 23:54:22.215218919 +0200 ++++ b/CMakeLists.txt 2022-09-12 23:54:29.998632664 +0200 +@@ -1,5 +1,7 @@ + CMAKE_MINIMUM_REQUIRED(VERSION 3.14.0 FATAL_ERROR) + set(CMAKE_CXX_STANDARD 17) ++set(CMAKE_CXX_STANDARD_REQUIRED ON) ++set(CMAKE_C_STANDARD 99) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + + IF(NOT CMAKE_BUILD_TYPE) diff --git a/depends/patches/bls-dash/bls-dash_gcc11.patch b/depends/patches/bls-dash/bls-dash_gcc11.patch new file mode 100644 index 0000000000..61b054453c --- /dev/null +++ b/depends/patches/bls-dash/bls-dash_gcc11.patch @@ -0,0 +1,10 @@ +--- a/src/threshold.cpp ++++ b/src/threshold.cpp +@@ -5,6 +5,7 @@ + #include "threshold.hpp" + + #include "schemes.hpp" ++#include + + static std::unique_ptr pThresholdScheme(new bls::LegacySchemeMPL); + diff --git a/depends/patches/bls-dash/bn_init.patch b/depends/patches/bls-dash/bn_init.patch new file mode 100644 index 0000000000..b94e4dca9c --- /dev/null +++ b/depends/patches/bls-dash/bn_init.patch @@ -0,0 +1,39 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e7b1927..ceceebe 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -77,7 +77,7 @@ ENDIF() + set(STBIN "OFF" CACHE STRING "") + + set(FP_METHD "INTEG;INTEG;INTEG;MONTY;LOWER;SLIDE" CACHE STRING "") +-set(COMP "-O3 -funroll-loops -fomit-frame-pointer" CACHE STRING "") ++set(CFLAGS "-O3 -funroll-loops -fomit-frame-pointer" CACHE STRING "") + set(FP_PMERS "off" CACHE STRING "") + set(FPX_METHD "INTEG;INTEG;LAZYR" CACHE STRING "") + set(EP_PLAIN "off" CACHE STRING "") +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 2779a2e..188ea4e 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -7,7 +7,7 @@ include(FetchContent) + if (DEFINED ENV{RELIC_MAIN}) + set(RELIC_GIT_TAG "origin/main") + else () +- set(RELIC_GIT_TAG "3a23142be0a5510a3aa93cd6c76fc59d3fc732a5") ++ set(RELIC_GIT_TAG "03f86cb53c8bb75d96ce9e353b7dc8324dbf3e8b") + endif () + + message(STATUS "Relic will be built from: ${RELIC_GIT_TAG}") +diff --git a/src/privatekey.cpp b/src/privatekey.cpp +index 3a9c8d6..e8e51aa 100644 +--- a/src/privatekey.cpp ++++ b/src/privatekey.cpp +@@ -258,7 +258,7 @@ void PrivateKey::AllocateKeyData() + { + assert(!keydata); + keydata = Util::SecAlloc(1); +- bn_init(keydata, RLC_BN_SIZE); ++ keydata->alloc = RLC_BN_SIZE; + bn_zero(keydata); + } + diff --git a/depends/patches/bls-dash/gcc_alignment_cast.patch b/depends/patches/bls-dash/gcc_alignment_cast.patch new file mode 100644 index 0000000000..063b7dd71b --- /dev/null +++ b/depends/patches/bls-dash/gcc_alignment_cast.patch @@ -0,0 +1,21 @@ +From: Kittywhiskers Van Gogh <63189531+kittywhiskers@users.noreply.github.com> +Date: Thu, 2 Sep 2021 00:18:25 +0530 +Subject: [PATCH] Resolve "not a multiple of its alignment" build error + +--- + src/md/blake2.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/src/md/blake2.h ++++ b/src/md/blake2.h +@@ -137,8 +137,8 @@ extern "C" { + + /* Padded structs result in a compile-time error */ + enum { ++ BLAKE2_DUMMY_1 = 1/(int)(sizeof(blake2s_param) == BLAKE2S_OUTBYTES), ++ BLAKE2_DUMMY_2 = 1/(int)(sizeof(blake2b_param) == BLAKE2B_OUTBYTES) +- BLAKE2_DUMMY_1 = 1/(sizeof(blake2s_param) == BLAKE2S_OUTBYTES), +- BLAKE2_DUMMY_2 = 1/(sizeof(blake2b_param) == BLAKE2B_OUTBYTES) + }; + + /* Streaming API */ diff --git a/depends/patches/boost/boost_gcc11.patch b/depends/patches/boost/boost_gcc11.patch new file mode 100644 index 0000000000..c8ba3df8ba --- /dev/null +++ b/depends/patches/boost/boost_gcc11.patch @@ -0,0 +1,11 @@ +--- a/boost/thread/pthread/thread_data.hpp ++++ b/boost/thread/pthread/thread_data.hpp +@@ -57,7 +57,7 @@ + #else + std::size_t page_size = ::sysconf( _SC_PAGESIZE); + #endif +-#if PTHREAD_STACK_MIN > 0 ++#ifdef PTHREAD_STACK_MIN + if (size +Date: Tue Aug 25 14:34:53 2020 +0800 + + Remove rule that causes inadvertent header regeneration + + Otherwise the makefile will needlessly attempt to re-generate the + headers with gperf. This can be dropped once the upstream build is fixed. + + See #10851. + +diff --git a/src/Makefile.in b/src/Makefile.in +index f4626ad..4ae1b00 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -912,7 +912,7 @@ + ' - > $@.tmp && \ + mv -f $@.tmp fcobjshash.gperf && touch $@ || ( $(RM) $@.tmp && false ) + +-fcobjshash.h: Makefile fcobjshash.gperf ++fcobjshash.h: + $(AM_V_GEN) $(GPERF) --pic -m 100 fcobjshash.gperf > $@.tmp && \ + mv -f $@.tmp $@ || ( $(RM) $@.tmp && false ) + diff --git a/depends/patches/libevent/0001-fix-windows-getaddrinfo.patch b/depends/patches/libevent/0001-fix-windows-getaddrinfo.patch new file mode 100644 index 0000000000..a98cd90bd5 --- /dev/null +++ b/depends/patches/libevent/0001-fix-windows-getaddrinfo.patch @@ -0,0 +1,15 @@ +diff -ur libevent-2.1.8-stable.orig/configure.ac libevent-2.1.8-stable/configure.ac +--- libevent-2.1.8-stable.orig/configure.ac 2017-01-29 17:51:00.000000000 +0000 ++++ libevent-2.1.8-stable/configure.ac 2020-03-07 01:11:16.311335005 +0000 +@@ -389,6 +389,10 @@ + #ifdef HAVE_NETDB_H + #include + #endif ++#ifdef _WIN32 ++#include ++#include ++#endif + ]], + [[ + getaddrinfo; +Only in libevent-2.1.8-stable: configure.ac~ diff --git a/depends/patches/miniupnpc/dont_leak_info.patch b/depends/patches/miniupnpc/dont_leak_info.patch new file mode 100644 index 0000000000..512f9c50ea --- /dev/null +++ b/depends/patches/miniupnpc/dont_leak_info.patch @@ -0,0 +1,32 @@ +commit 8815452257437ba36607d0e2381c01142d1c7bb0 +Author: fanquake +Date: Thu Nov 19 10:51:19 2020 +0800 + + Don't leak OS and miniupnpc version info in User-Agent + +diff --git a//minisoap.c b/minisoap.c +index 7860667..775580b 100644 +--- a/minisoap.c ++++ b/minisoap.c +@@ -90,7 +90,7 @@ int soapPostSubmit(SOCKET fd, + headerssize = snprintf(headerbuf, sizeof(headerbuf), + "POST %s HTTP/%s\r\n" + "Host: %s%s\r\n" +- "User-Agent: " OS_STRING ", " UPNP_VERSION_STRING ", MiniUPnPc/" MINIUPNPC_VERSION_STRING "\r\n" ++ "User-Agent: " UPNP_VERSION_STRING "\r\n" + "Content-Length: %d\r\n" + "Content-Type: text/xml\r\n" + "SOAPAction: \"%s\"\r\n" +diff --git a/miniwget.c b/miniwget.c +index d5b7970..05aeb9c 100644 +--- a/miniwget.c ++++ b/miniwget.c +@@ -444,7 +444,7 @@ miniwget3(const char * host, + "GET %s HTTP/%s\r\n" + "Host: %s:%d\r\n" + "Connection: Close\r\n" +- "User-Agent: " OS_STRING ", " UPNP_VERSION_STRING ", MiniUPnPc/" MINIUPNPC_VERSION_STRING "\r\n" ++ "User-Agent: " UPNP_VERSION_STRING "\r\n" + + "\r\n", + path, httpversion, host, port); diff --git a/depends/patches/native_biplist/sorted_list.patch b/depends/patches/native_biplist/sorted_list.patch deleted file mode 100644 index 89abdb1b71..0000000000 --- a/depends/patches/native_biplist/sorted_list.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- a/biplist/__init__.py 2014-10-26 19:03:11.000000000 +0000 -+++ b/biplist/__init__.py 2016-07-19 19:30:17.663521999 +0000 -@@ -541,7 +541,7 @@ - return HashableWrapper(n) - elif isinstance(root, dict): - n = {} -- for key, value in iteritems(root): -+ for key, value in sorted(iteritems(root)): - n[self.wrapRoot(key)] = self.wrapRoot(value) - return HashableWrapper(n) - elif isinstance(root, list): -@@ -616,7 +616,7 @@ - elif isinstance(obj, dict): - size = proc_size(len(obj)) - self.incrementByteCount('dictBytes', incr=1+size) -- for key, value in iteritems(obj): -+ for key, value in sorted(iteritems(obj)): - check_key(key) - self.computeOffsets(key, asReference=True) - self.computeOffsets(value, asReference=True) -@@ -714,7 +714,7 @@ - keys = [] - values = [] - objectsToWrite = [] -- for key, value in iteritems(obj): -+ for key, value in sorted(iteritems(obj)): - keys.append(key) - values.append(value) - for key in keys: diff --git a/depends/patches/native_libdmg-hfsplus/remove-libcrypto-dependency.patch b/depends/patches/native_libdmg-hfsplus/remove-libcrypto-dependency.patch new file mode 100644 index 0000000000..f346c8f2cf --- /dev/null +++ b/depends/patches/native_libdmg-hfsplus/remove-libcrypto-dependency.patch @@ -0,0 +1,45 @@ +From 3e5fd3fb56bc9ff03beb535979e33dcf83fe1f70 Mon Sep 17 00:00:00 2001 +From: Cory Fields +Date: Thu, 8 May 2014 12:39:42 -0400 +Subject: [PATCH] dmg: remove libcrypto dependency + +--- + dmg/CMakeLists.txt | 16 ---------------- + 1 file changed, 16 deletions(-) + +diff --git a/dmg/CMakeLists.txt b/dmg/CMakeLists.txt +index eec62d6..3969f64 100644 +--- a/dmg/CMakeLists.txt ++++ b/dmg/CMakeLists.txt +@@ -1,12 +1,5 @@ +-INCLUDE(FindOpenSSL) + INCLUDE(FindZLIB) + +-FIND_LIBRARY(CRYPTO_LIBRARIES crypto +- PATHS +- /usr/lib +- /usr/local/lib +- ) +- + IF(NOT ZLIB_FOUND) + message(FATAL_ERROR "zlib is required for dmg!") + ENDIF(NOT ZLIB_FOUND) +@@ -18,15 +11,6 @@ link_directories(${PROJECT_BINARY_DIR}/common ${PROJECT_BINARY_DIR}/hfs) + + add_library(dmg adc.c base64.c checksum.c dmgfile.c dmglib.c filevault.c io.c partition.c resources.c udif.c) + +-IF(OPENSSL_FOUND) +- add_definitions(-DHAVE_CRYPT) +- include_directories(${OPENSSL_INCLUDE_DIR}) +- target_link_libraries(dmg ${CRYPTO_LIBRARIES}) +- IF(WIN32) +- TARGET_LINK_LIBRARIES(dmg gdi32) +- ENDIF(WIN32) +-ENDIF(OPENSSL_FOUND) +- + target_link_libraries(dmg common hfs z) + + add_executable(dmg-bin dmg.c) +-- +2.22.0 + diff --git a/depends/patches/native_mac_alias/python3.patch b/depends/patches/native_mac_alias/python3.patch deleted file mode 100644 index 1a32340be5..0000000000 --- a/depends/patches/native_mac_alias/python3.patch +++ /dev/null @@ -1,72 +0,0 @@ -diff -dur a/mac_alias/alias.py b/mac_alias/alias.py ---- a/mac_alias/alias.py 2015-10-19 12:12:48.000000000 +0200 -+++ b/mac_alias/alias.py 2016-04-03 12:13:12.037159417 +0200 -@@ -243,10 +243,10 @@ - alias = Alias() - alias.appinfo = appinfo - -- alias.volume = VolumeInfo (volname.replace('/',':'), -+ alias.volume = VolumeInfo (volname.decode().replace('/',':'), - voldate, fstype, disktype, - volattrs, volfsid) -- alias.target = TargetInfo (kind, filename.replace('/',':'), -+ alias.target = TargetInfo (kind, filename.decode().replace('/',':'), - folder_cnid, cnid, - crdate, creator_code, type_code) - alias.target.levels_from = levels_from -@@ -261,9 +261,9 @@ - b.read(1) - - if tag == TAG_CARBON_FOLDER_NAME: -- alias.target.folder_name = value.replace('/',':') -+ alias.target.folder_name = value.decode().replace('/',':') - elif tag == TAG_CNID_PATH: -- alias.target.cnid_path = struct.unpack(b'>%uI' % (length // 4), -+ alias.target.cnid_path = struct.unpack('>%uI' % (length // 4), - value) - elif tag == TAG_CARBON_PATH: - alias.target.carbon_path = value -@@ -298,9 +298,9 @@ - alias.target.creation_date \ - = mac_epoch + datetime.timedelta(seconds=seconds) - elif tag == TAG_POSIX_PATH: -- alias.target.posix_path = value -+ alias.target.posix_path = value.decode() - elif tag == TAG_POSIX_PATH_TO_MOUNTPOINT: -- alias.volume.posix_path = value -+ alias.volume.posix_path = value.decode() - elif tag == TAG_RECURSIVE_ALIAS_OF_DISK_IMAGE: - alias.volume.disk_image_alias = Alias.from_bytes(value) - elif tag == TAG_USER_HOME_LENGTH_PREFIX: -@@ -422,13 +422,13 @@ - # (so doing so is ridiculous, and nothing could rely on it). - b.write(struct.pack(b'>h28pI2shI64pII4s4shhI2s10s', - self.target.kind, -- carbon_volname, voldate, -+ carbon_volname, int(voldate), - self.volume.fs_type, - self.volume.disk_type, - self.target.folder_cnid, - carbon_filename, - self.target.cnid, -- crdate, -+ int(crdate), - self.target.creator_code, - self.target.type_code, - self.target.levels_from, -@@ -449,12 +449,12 @@ - - b.write(struct.pack(b'>hhQhhQ', - TAG_HIGH_RES_VOLUME_CREATION_DATE, -- 8, long(voldate * 65536), -+ 8, int(voldate * 65536), - TAG_HIGH_RES_CREATION_DATE, -- 8, long(crdate * 65536))) -+ 8, int(crdate * 65536))) - - if self.target.cnid_path: -- cnid_path = struct.pack(b'>%uI' % len(self.target.cnid_path), -+ cnid_path = struct.pack('>%uI' % len(self.target.cnid_path), - *self.target.cnid_path) - b.write(struct.pack(b'>hh', TAG_CNID_PATH, - len(cnid_path))) diff --git a/depends/patches/openssl/0001-Add-OpenSSL-termios-fix-for-musl-libc.patch b/depends/patches/openssl/0001-Add-OpenSSL-termios-fix-for-musl-libc.patch deleted file mode 100644 index 003099bdc2..0000000000 --- a/depends/patches/openssl/0001-Add-OpenSSL-termios-fix-for-musl-libc.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/crypto/ui/ui_openssl.c b/crypto/ui/ui_openssl.c -index a38c758..d99edc2 100644 ---- a/crypto/ui/ui_openssl.c -+++ b/crypto/ui/ui_openssl.c -@@ -190,9 +190,9 @@ - # undef SGTTY - #endif - --#if defined(linux) && !defined(TERMIO) --# undef TERMIOS --# define TERMIO -+#if defined(linux) -+# define TERMIOS -+# undef TERMIO - # undef SGTTY - #endif - diff --git a/depends/patches/qt/dont_hardcode_pwd.patch b/depends/patches/qt/dont_hardcode_pwd.patch new file mode 100644 index 0000000000..a74e9cb098 --- /dev/null +++ b/depends/patches/qt/dont_hardcode_pwd.patch @@ -0,0 +1,27 @@ +commit 0e953866fc4672486e29e1ba6d83b4207e7b2f0b +Author: fanquake +Date: Tue Aug 18 15:09:06 2020 +0800 + + Don't hardcode pwd path + + Let a man use his builtins if he wants to! Also, removes the unnecessary + assumption that pwd lives under /bin/pwd. + + See #15581. + +diff --git a/qtbase/configure b/qtbase/configure +index 08b49a8d..faea5b55 100755 +--- a/qtbase/configure ++++ b/qtbase/configure +@@ -36,9 +36,9 @@ + relconf=`basename $0` + # the directory of this script is the "source tree" + relpath=`dirname $0` +-relpath=`(cd "$relpath"; /bin/pwd)` ++relpath=`(cd "$relpath"; pwd)` + # the current directory is the "build tree" or "object tree" +-outpath=`/bin/pwd` ++outpath=`pwd` + + WHICH="which" + diff --git a/depends/patches/qt/dont_hardcode_x86_64.patch b/depends/patches/qt/dont_hardcode_x86_64.patch new file mode 100644 index 0000000000..a66426877a --- /dev/null +++ b/depends/patches/qt/dont_hardcode_x86_64.patch @@ -0,0 +1,119 @@ +macOS: Don't hard-code x86_64 as the architecture when using qmake + +Upstream commit: + - Qt 6.1: 9082cc8e8d5a6441dabe5e7a95bc0cd9085b95fe + +For other Qt branches see +https://codereview.qt-project.org/q/I70db7e4c27f0d3da5d0af33cb491d72c312d3fa8 + + +--- old/qtbase/configure.json ++++ new/qtbase/configure.json +@@ -244,11 +244,18 @@ + + "testTypeDependencies": { + "linkerSupportsFlag": [ "use_bfd_linker", "use_gold_linker", "use_lld_linker" ], +- "verifySpec": [ "shared", "use_bfd_linker", "use_gold_linker", "use_lld_linker", "compiler-flags", "qmakeargs", "commit" ], ++ "verifySpec": [ ++ "shared", ++ "use_bfd_linker", "use_gold_linker", "use_lld_linker", ++ "compiler-flags", "qmakeargs", ++ "simulator_and_device", ++ "thread", ++ "commit" ], + "compile": [ "verifyspec" ], + "detectPkgConfig": [ "cross_compile", "machineTuple" ], + "library": [ "pkg-config", "compiler-flags" ], +- "getPkgConfigVariable": [ "pkg-config" ] ++ "getPkgConfigVariable": [ "pkg-config" ], ++ "architecture" : [ "verifyspec" ] + }, + + "testTypeAliases": { +@@ -762,7 +769,7 @@ + }, + "architecture": { + "label": "Architecture", +- "output": [ "architecture" ] ++ "output": [ "architecture", "commitConfig" ] + }, + "pkg-config": { + "label": "Using pkg-config", +diff --git a/configure.pri b/configure.pri +index 49755f7abfd..8be9b10d7d4 100644 +--- old/qtbase/configure.pri ++++ new/qtbase/configure.pri +@@ -662,6 +662,13 @@ defineTest(qtConfOutput_commitOptions) { + write_file($$QT_BUILD_TREE/mkspecs/qdevice.pri, $${currentConfig}.output.devicePro)|error() + } + ++# Output is written after configuring each Qt module, ++# but some tests within a module might depend on the ++# configuration output of previous tests. ++defineTest(qtConfOutput_commitConfig) { ++ qtConfProcessOutput() ++} ++ + # type (empty or 'host'), option name, default value + defineTest(processQtPath) { + out_var = config.rel_input.$${2} +diff --git a/mkspecs/common/macx.conf b/mkspecs/common/macx.conf +index d16b77acb8e..4ba0a8eaa36 100644 +--- old/qtbase/mkspecs/common/macx.conf ++++ new/qtbase/mkspecs/common/macx.conf +@@ -6,7 +6,6 @@ QMAKE_PLATFORM += macos osx macx + QMAKE_MAC_SDK = macosx + + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.13 +-QMAKE_APPLE_DEVICE_ARCHS = x86_64 + + # Should be 10.15, but as long as the CI builds with + # older SDKs we have to keep this. +diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf +index 92a9112bca6..d888731ec8d 100644 +--- old/qtbase/mkspecs/features/mac/default_post.prf ++++ new/qtbase/mkspecs/features/mac/default_post.prf +@@ -95,6 +95,11 @@ app_extension_api_only { + QMAKE_LFLAGS += $$QMAKE_CFLAGS_APPLICATION_EXTENSION + } + ++# Non-universal builds do not set QMAKE_APPLE_DEVICE_ARCHS, ++# so we pick it up from what the arch test resolved instead. ++isEmpty(QMAKE_APPLE_DEVICE_ARCHS): \ ++ QMAKE_APPLE_DEVICE_ARCHS = $$QT_ARCH ++ + macx-xcode { + qmake_pkginfo_typeinfo.name = QMAKE_PKGINFO_TYPEINFO + !isEmpty(QMAKE_PKGINFO_TYPEINFO): \ +@@ -150,9 +155,6 @@ macx-xcode { + simulator: VALID_SIMULATOR_ARCHS = $$QMAKE_APPLE_SIMULATOR_ARCHS + VALID_ARCHS = $$VALID_DEVICE_ARCHS $$VALID_SIMULATOR_ARCHS + +- isEmpty(VALID_ARCHS): \ +- error("QMAKE_APPLE_DEVICE_ARCHS or QMAKE_APPLE_SIMULATOR_ARCHS must contain at least one architecture") +- + single_arch: VALID_ARCHS = $$first(VALID_ARCHS) + + ACTIVE_ARCHS = $(filter $(EXPORT_VALID_ARCHS), $(ARCHS)) +diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf +index efbe7c1e55b..8add6dc8043 100644 +--- old/qtbase/mkspecs/features/toolchain.prf ++++ new/qtbase/mkspecs/features/toolchain.prf +@@ -182,9 +182,14 @@ isEmpty($${target_prefix}.INCDIRS) { + # UIKit simulator platforms will see the device SDK's sysroot in + # QMAKE_DEFAULT_*DIRS, because they're handled in a single build pass. + darwin { +- # Clang doesn't pick up the architecture from the sysroot, and will +- # default to the host architecture, so we need to manually set it. +- cxx_flags += -arch $$QMAKE_APPLE_DEVICE_ARCHS ++ uikit { ++ # Clang doesn't automatically pick up the architecture, just because ++ # we're passing the iOS sysroot below, and we will end up building the ++ # test for the host architecture, resulting in linker errors when ++ # linking against the iOS libraries. We work around this by passing ++ # the architecture explicitly. ++ cxx_flags += -arch $$first(QMAKE_APPLE_DEVICE_ARCHS) ++ } + + uikit:macx-xcode: \ + cxx_flags += -isysroot $$sdk_path_device.value diff --git a/depends/patches/qt/duplicate_lcqpafonts.patch b/depends/patches/qt/duplicate_lcqpafonts.patch new file mode 100644 index 0000000000..c460b51dcf --- /dev/null +++ b/depends/patches/qt/duplicate_lcqpafonts.patch @@ -0,0 +1,104 @@ +QtGui: Fix duplication of logging category lcQpaFonts + +Move it to qplatformfontdatabase.h. + +Upstream commit: + - Qt 6.0: ab01885e48873fb2ad71841a3f1627fe4d9cd835 + +--- a/qtbase/src/gui/text/qplatformfontdatabase.cpp ++++ b/qtbase/src/gui/text/qplatformfontdatabase.cpp +@@ -52,6 +52,8 @@ + + QT_BEGIN_NAMESPACE + ++Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") ++ + void qt_registerFont(const QString &familyname, const QString &stylename, + const QString &foundryname, int weight, + QFont::Style style, int stretch, bool antialiased, + +--- a/qtbase/src/gui/text/qplatformfontdatabase.h ++++ b/qtbase/src/gui/text/qplatformfontdatabase.h +@@ -50,6 +50,7 @@ + // + + #include ++#include + #include + #include + #include +@@ -62,6 +63,7 @@ + + QT_BEGIN_NAMESPACE + ++Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) + + class QWritingSystemsPrivate; + + +--- a/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm ++++ b/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm +@@ -86,8 +86,6 @@ + + QT_BEGIN_NAMESPACE + +-Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") +- + static float SYNTHETIC_ITALIC_SKEW = std::tan(14.f * std::acos(0.f) / 90.f); + + bool QCoreTextFontEngine::ct_getSfntTable(void *user_data, uint tag, uchar *buffer, uint *length) + +--- a/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h ++++ b/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h +@@ -64,8 +64,6 @@ + + QT_BEGIN_NAMESPACE + +-Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) +- + class QCoreTextFontEngine : public QFontEngine + { + Q_GADGET + +--- a/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp ++++ b/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase.cpp +@@ -68,8 +68,6 @@ + + QT_BEGIN_NAMESPACE + +-Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") +- + #ifndef QT_NO_DIRECTWRITE + // ### fixme: Consider direct linking of dwrite.dll once Windows Vista pre SP2 is dropped (QTBUG-49711) + + +--- a/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h ++++ b/qtbase/src/platformsupport/fontdatabases/windows/qwindowsfontdatabase_p.h +@@ -63,8 +63,6 @@ + + QT_BEGIN_NAMESPACE + +-Q_DECLARE_LOGGING_CATEGORY(lcQpaFonts) +- + class QWindowsFontEngineData + { + Q_DISABLE_COPY_MOVE(QWindowsFontEngineData) + +--- a/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp ++++ b/qtbase/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +@@ -40,6 +40,7 @@ + #include "qgenericunixthemes_p.h" + + #include "qpa/qplatformtheme_p.h" ++#include "qpa/qplatformfontdatabase.h" + + #include + #include +@@ -76,7 +77,6 @@ + QT_BEGIN_NAMESPACE + + Q_DECLARE_LOGGING_CATEGORY(qLcTray) +-Q_LOGGING_CATEGORY(lcQpaFonts, "qt.qpa.fonts") + + ResourceHelper::ResourceHelper() + { diff --git a/depends/patches/qt/fast_fixed_dtoa_no_optimize.patch b/depends/patches/qt/fast_fixed_dtoa_no_optimize.patch new file mode 100644 index 0000000000..d4d6539f56 --- /dev/null +++ b/depends/patches/qt/fast_fixed_dtoa_no_optimize.patch @@ -0,0 +1,20 @@ +Modify the optimisation flags for FastFixedDtoa. +This fixes a non-determinism issue in the asm produced for +this function when cross-compiling on x86_64 and aarch64 for +the arm-linux-gnueabihf HOST. + +--- a/qtbase/src/3rdparty/double-conversion/fixed-dtoa.h ++++ b/qtbase/src/3rdparty/double-conversion/fixed-dtoa.h +@@ -48,9 +48,12 @@ namespace double_conversion { + // + // This method only works for some parameters. If it can't handle the input it + // returns false. The output is null-terminated when the function succeeds. ++#pragma GCC push_options ++#pragma GCC optimize ("-O1") + bool FastFixedDtoa(double v, int fractional_count, + Vector buffer, int* length, int* decimal_point); + ++#pragma GCC pop_options + } // namespace double_conversion + + #endif // DOUBLE_CONVERSION_FIXED_DTOA_H_ diff --git a/depends/patches/qt/fix-cocoahelpers-macos.patch b/depends/patches/qt/fix-cocoahelpers-macos.patch deleted file mode 100644 index 1b43a9eff8..0000000000 --- a/depends/patches/qt/fix-cocoahelpers-macos.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 0707260a4f8e64dfadf1df5f935e74cabb7c7d27 Mon Sep 17 00:00:00 2001 -From: Jake Petroules -Date: Sun, 1 Oct 2017 21:48:17 -0700 -Subject: [PATCH] Fix build error with macOS 10.13 SDK -MIME-Version: 1.0 -Content-Type: text/plain; charset=utf8 -Content-Transfer-Encoding: 8bit - -Several of these variables/macros are no longer defined. We didn't -validate the preconditions on iOS, tvOS, or watchOS, so no -need to bother validating them on macOS either. Nor did we check the -OSStatus result on any platform anyways. - -Task-number: QTBUG-63401 -Change-Id: Ife64dff767cf6d3f4b839fc53ec486181c176bf3 -(cherry-picked from 861544583511d4e6f7745d2339b26ff1cd44132b) -Reviewed-by: Timur Pocheptsov -Reviewed-by: Tor Arne Vestbø ---- - src/plugins/platforms/cocoa/qcocoahelpers.h | 2 +- - src/plugins/platforms/cocoa/qcocoahelpers.mm | 13 +------------ - 2 files changed, 2 insertions(+), 13 deletions(-) - -diff --git old/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.h new/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.h -index bbb3793..74371d5 100644 ---- old/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.h -+++ new/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.h -@@ -80,7 +80,7 @@ QColor qt_mac_toQColor(CGColorRef color); - // Creates a mutable shape, it's the caller's responsibility to release. - HIMutableShapeRef qt_mac_QRegionToHIMutableShape(const QRegion ®ion); - --OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage); -+void qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage); - - NSDragOperation qt_mac_mapDropAction(Qt::DropAction action); - NSDragOperation qt_mac_mapDropActions(Qt::DropActions actions); -diff --git old/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.mm new/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.mm -index cd73148..3f8429e 100644 ---- old/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.mm -+++ new/qtbase/src/plugins/platforms/cocoa/qcocoahelpers.mm -@@ -544,15 +544,8 @@ NSRect qt_mac_flipRect(const QRect &rect) - return NSMakeRect(rect.x(), flippedY, rect.width(), rect.height()); - } - --OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage) -+void qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGImageRef inImage) - { -- // Verbatim copy if HIViewDrawCGImage (as shown on Carbon-Dev) -- OSStatus err = noErr; -- -- require_action(inContext != NULL, InvalidContext, err = paramErr); -- require_action(inBounds != NULL, InvalidBounds, err = paramErr); -- require_action(inImage != NULL, InvalidImage, err = paramErr); -- - CGContextSaveGState( inContext ); - CGContextTranslateCTM (inContext, 0, inBounds->origin.y + CGRectGetMaxY(*inBounds)); - CGContextScaleCTM(inContext, 1, -1); -@@ -560,10 +553,6 @@ OSStatus qt_mac_drawCGImage(CGContextRef inContext, const CGRect *inBounds, CGIm - CGContextDrawImage(inContext, *inBounds, inImage); - - CGContextRestoreGState(inContext); --InvalidImage: --InvalidBounds: --InvalidContext: -- return err; - } - - Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum) --- -2.7.4 diff --git a/depends/patches/qt/fix-xcb-include-order.patch b/depends/patches/qt/fix-xcb-include-order.patch deleted file mode 100644 index ec2bc17d9b..0000000000 --- a/depends/patches/qt/fix-xcb-include-order.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- old/qtbase/src/plugins/platforms/xcb/xcb_qpa_lib.pro 2015-03-17 -+++ new/qtbase/src/plugins/platforms/xcb/xcb_qpa_lib.pro 2015-03-17 -@@ -76,8 +76,6 @@ - - DEFINES += $$QMAKE_DEFINES_XCB - LIBS += $$QMAKE_LIBS_XCB --QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XCB --QMAKE_CFLAGS += $$QMAKE_CFLAGS_XCB - - CONFIG += qpa/genericunixfontdatabase - -@@ -89,7 +87,8 @@ - contains(QT_CONFIG, xcb-qt) { - DEFINES += XCB_USE_RENDER - XCB_DIR = ../../../3rdparty/xcb -- INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude -+ QMAKE_CFLAGS += -I$$XCB_DIR/include -I$$XCB_DIR/sysinclude $$QMAKE_CFLAGS_XCB -+ QMAKE_CXXFLAGS += -I$$XCB_DIR/include -I$$XCB_DIR/sysinclude $$QMAKE_CFLAGS_XCB - LIBS += -lxcb -L$$MODULE_BASE_OUTDIR/lib -lxcb-static$$qtPlatformTargetSuffix() - } else { - LIBS += -lxcb -lxcb-image -lxcb-icccm -lxcb-sync -lxcb-xfixes -lxcb-shm -lxcb-randr -lxcb-shape -lxcb-keysyms -lxcb-xinerama ---- old/qtbase/src/plugins/platforms/xcb/xcb-static/xcb-static.pro -+++ new/qtbase/src/plugins/platforms/xcb/xcb-static/xcb-static.pro -@@ -9,7 +9,8 @@ - - XCB_DIR = ../../../../3rdparty/xcb - --INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/include/xcb $$XCB_DIR/sysinclude -+QMAKE_CFLAGS += -I$$XCB_DIR/include -I$$XCB_DIR/include/xcb -I$$XCB_DIR/sysinclude -+QMAKE_CXXFLAGS += -I$$XCB_DIR/include -I$$XCB_DIR/include/xcb -I$$XCB_DIR/sysinclude - - QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XCB - QMAKE_CFLAGS += $$QMAKE_CFLAGS_XCB ---- old/qtbase/src/plugins/platforms/xcb/xcb-plugin.pro -+++ new/qtbase/src/plugins/platforms/xcb/xcb-plugin.pro -@@ -6,6 +6,13 @@ - qxcbmain.cpp - OTHER_FILES += xcb.json README - -+contains(QT_CONFIG, xcb-qt) { -+ DEFINES += XCB_USE_RENDER -+ XCB_DIR = ../../../3rdparty/xcb -+ QMAKE_CFLAGS += -I$$XCB_DIR/include -I$$XCB_DIR/sysinclude $$QMAKE_CFLAGS_XCB -+ QMAKE_CXXFLAGS += -I$$XCB_DIR/include -I$$XCB_DIR/sysinclude $$QMAKE_CFLAGS_XCB -+} -+ - PLUGIN_TYPE = platforms - PLUGIN_CLASS_NAME = QXcbIntegrationPlugin - !equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = - diff --git a/depends/patches/qt/fix_android_jni_static.patch b/depends/patches/qt/fix_android_jni_static.patch new file mode 100644 index 0000000000..936b82e152 --- /dev/null +++ b/depends/patches/qt/fix_android_jni_static.patch @@ -0,0 +1,18 @@ +--- old/qtbase/src/plugins/platforms/android/androidjnimain.cpp ++++ new/qtbase/src/plugins/platforms/android/androidjnimain.cpp +@@ -943,6 +943,14 @@ Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void */*reserved*/) + __android_log_print(ANDROID_LOG_FATAL, "Qt", "registerNatives failed"); + return -1; + } ++ ++ const jint ret = QT_PREPEND_NAMESPACE(QtAndroidPrivate::initJNI(vm, env)); ++ if (ret != 0) ++ { ++ __android_log_print(ANDROID_LOG_FATAL, "Qt", "initJNI failed"); ++ return ret; ++ } ++ + QWindowSystemInterfacePrivate::TabletEvent::setPlatformSynthesizesMouse(false); + + m_javaVM = vm; + diff --git a/depends/patches/qt/fix_limits_header.patch b/depends/patches/qt/fix_limits_header.patch new file mode 100644 index 0000000000..258128c0ca --- /dev/null +++ b/depends/patches/qt/fix_limits_header.patch @@ -0,0 +1,33 @@ +Fix compiling with GCC 11 + +Upstream: + - bug report: https://bugreports.qt.io/browse/QTBUG-89977 + - fix in Qt 6.1: 813a928c7c3cf98670b6043149880ed5c955efb9 + +--- old/qtbase/src/corelib/text/qbytearraymatcher.h ++++ new/qtbase/src/corelib/text/qbytearraymatcher.h +@@ -42,6 +42,8 @@ + + #include + ++#include ++ + QT_BEGIN_NAMESPACE + + + +Upstream fix and backports: + - Qt 6.1: 3eab20ad382569cb2c9e6ccec2322c3d08c0f716 + - Qt 6.2: 380294a5971da85010a708dc23b0edec192cbf27 + - Qt 6.3: 2b2b3155d9f6ba1e4f859741468fbc47db09292b + +--- old/qtbase/src/corelib/tools/qoffsetstringarray_p.h ++++ new/qtbase/src/corelib/tools/qoffsetstringarray_p.h +@@ -55,6 +55,7 @@ + + #include + #include ++#include + + QT_BEGIN_NAMESPACE + diff --git a/depends/patches/qt/fix_montery_include.patch b/depends/patches/qt/fix_montery_include.patch new file mode 100644 index 0000000000..38b700addf --- /dev/null +++ b/depends/patches/qt/fix_montery_include.patch @@ -0,0 +1,21 @@ +From dece6f5840463ae2ddf927d65eb1b3680e34a547 +From: Øystein Heskestad +Date: Wed, 27 Oct 2021 13:07:46 +0200 +Subject: [PATCH] Add missing macOS header file that was indirectly included before + +See: https://bugreports.qt.io/browse/QTBUG-97855 + +Upstream Commits: + - Qt 6.2: c884bf138a21dd7320e35cef34d24e22e74d7ce0 + +diff --git a/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h b/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h +index e070ba97..07c75b04 100644 +--- a/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h ++++ b/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h +@@ -40,6 +40,7 @@ + #ifndef QIOSURFACEGRAPHICSBUFFER_H + #define QIOSURFACEGRAPHICSBUFFER_H + ++#include + #include + #include diff --git a/depends/patches/qt/fix_qt_configure.patch b/depends/patches/qt/fix_qt_configure.patch deleted file mode 100644 index 3466a6c24d..0000000000 --- a/depends/patches/qt/fix_qt_configure.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- old/qtbase/configure -+++ new/qtbase/configure -@@ -2846,7 +2846,7 @@ - # with the system. We use 'xcrun' to check the clang version that's part of - # the Xcode installation. - XCRUN=`/usr/bin/xcrun -sdk macosx clang -v 2>&1` -- CLANGVERSION=`echo "$XCRUN" | sed -n 's/.*version \([0-9]\).*/\1/p'` -+ CLANGVERSION=`echo "$XCRUN" | sed -n 's/.*version \([0-9]*\).*/\1/p'` - expr "$CLANGVERSION" : '[0-9]' > /dev/null || { echo "Unable to determine CLANG version from output of xcrun: $XCRUN" ; exit 2 ; } - if [ "$CLANGVERSION" -ge 3 ]; then - PLATFORM=macx-clang diff --git a/depends/patches/qt/fix_qt_pkgconfig.patch b/depends/patches/qt/fix_qt_pkgconfig.patch index 34302a9f2d..73f4d89f73 100644 --- a/depends/patches/qt/fix_qt_pkgconfig.patch +++ b/depends/patches/qt/fix_qt_pkgconfig.patch @@ -1,11 +1,11 @@ --- old/qtbase/mkspecs/features/qt_module.prf +++ new/qtbase/mkspecs/features/qt_module.prf -@@ -245,7 +245,7 @@ +@@ -269,7 +269,7 @@ load(qt_installs) load(qt_targets) # this builds on top of qt_common --!internal_module:!lib_bundle:if(unix|mingw) { -+unix|mingw { +-!internal_module:if(unix|mingw):!if(darwin:debug_and_release:CONFIG(debug, debug|release)) { ++if(unix|mingw):!if(darwin:debug_and_release:CONFIG(debug, debug|release)) { CONFIG += create_pc QMAKE_PKGCONFIG_DESTDIR = pkgconfig host_build: \ diff --git a/depends/patches/qt/fix_qt_win32_qmake.patch b/depends/patches/qt/fix_qt_win32_qmake.patch new file mode 100644 index 0000000000..a9ded5e1cb --- /dev/null +++ b/depends/patches/qt/fix_qt_win32_qmake.patch @@ -0,0 +1,12 @@ +--- old/qtbase/mkspecs/features/default_post.prf ++++ new/qtbase/mkspecs/features/default_post.prf +@@ -89,6 +89,7 @@ stack_protector_strong { + + dll:win32: QMAKE_LFLAGS += $$QMAKE_LFLAGS_DLL + static:mac: QMAKE_LFLAGS += $$QMAKE_LFLAGS_STATIC_LIB ++static:win32: QMAKE_LFLAGS += $$QMAKE_LFLAGS_STATIC_LIB + staticlib:unix { + QMAKE_CFLAGS += $$QMAKE_CFLAGS_STATIC_LIB + QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_STATIC_LIB + + \ No newline at end of file diff --git a/depends/patches/qt/g++-win32_conf.patch b/depends/patches/qt/g++-win32_conf.patch new file mode 100644 index 0000000000..4cb8149404 --- /dev/null +++ b/depends/patches/qt/g++-win32_conf.patch @@ -0,0 +1,22 @@ +diff --git a/qtbase/mkspecs/common/g++-win32.conf b/qtbase/mkspecs/common/g++-win32.conf +index c3a1f3a..f6e9211 100644 +--- a/qtbase/mkspecs/common/g++-win32.conf ++++ b/qtbase/mkspecs/common/g++-win32.conf +@@ -31,7 +31,7 @@ QMAKE_YACCFLAGS = -d + + QMAKE_CFLAGS_SSE2 += -mstackrealign + +-QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads ++QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads -pthread + + QMAKE_INCDIR = + +@@ -40,7 +40,7 @@ QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< + QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src + QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< + +-QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads ++QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -pthread + QMAKE_LFLAGS_RELEASE = -Wl,-s + QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console + QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows diff --git a/depends/patches/qt/guix_cross_lib_path.patch b/depends/patches/qt/guix_cross_lib_path.patch new file mode 100644 index 0000000000..7911dc21d7 --- /dev/null +++ b/depends/patches/qt/guix_cross_lib_path.patch @@ -0,0 +1,17 @@ +Facilitate guix building with CROSS_LIBRARY_PATH + +See discussion in https://github.com/bitcoin/bitcoin/pull/15277. + +--- a/qtbase/mkspecs/features/toolchain.prf ++++ b/qtbase/mkspecs/features/toolchain.prf +@@ -236,8 +236,8 @@ isEmpty($${target_prefix}.INCDIRS) { + add_libraries = false + for (line, output) { + line ~= s/^[ \\t]*// # remove leading spaces +- contains(line, "LIBRARY_PATH=.*") { +- line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH= ++ contains(line, "(CROSS_)?LIBRARY_PATH=.*") { ++ line ~= s/^(CROSS_)?LIBRARY_PATH=// # remove leading (CROSS_)?LIBRARY_PATH= + equals(QMAKE_HOST.os, Windows): \ + paths = $$split(line, ;) + else: \ diff --git a/depends/patches/qt/mac-qmake.conf b/depends/patches/qt/mac-qmake.conf index ca70d30b15..cb94bf07b4 100644 --- a/depends/patches/qt/mac-qmake.conf +++ b/depends/patches/qt/mac-qmake.conf @@ -1,14 +1,13 @@ MAKEFILE_GENERATOR = UNIX -CONFIG += app_bundle incremental global_init_link_order lib_version_first plugin_no_soname absolute_library_soname +CONFIG += app_bundle incremental lib_version_first absolute_library_soname QMAKE_INCREMENTAL_STYLE = sublib include(../common/macx.conf) include(../common/gcc-base-mac.conf) include(../common/clang.conf) include(../common/clang-mac.conf) QMAKE_MAC_SDK_PATH=$${MAC_SDK_PATH} -QMAKE_XCODE_VERSION=4.3 +QMAKE_XCODE_VERSION = $${XCODE_VERSION} QMAKE_XCODE_DEVELOPER_PATH=/Developer -QMAKE_MACOSX_DEPLOYMENT_TARGET = $${MAC_MIN_VERSION} QMAKE_MAC_SDK=macosx QMAKE_MAC_SDK.macosx.Path = $${MAC_SDK_PATH} QMAKE_MAC_SDK.macosx.platform_name = macosx @@ -16,10 +15,8 @@ QMAKE_MAC_SDK.macosx.SDKVersion = $${MAC_SDK_VERSION} QMAKE_MAC_SDK.macosx.PlatformPath = /phony !host_build: QMAKE_CFLAGS += -target $${MAC_TARGET} !host_build: QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_CFLAGS -!host_build: QMAKE_CXXFLAGS += $$QMAKE_CFLAGS -!host_build: QMAKE_LFLAGS += -target $${MAC_TARGET} -mlinker-version=$${MAC_LD64_VERSION} +!host_build: QMAKE_CXXFLAGS += -target $${MAC_TARGET} +!host_build: QMAKE_LFLAGS += -target $${MAC_TARGET} QMAKE_AR = $${CROSS_COMPILE}ar cq QMAKE_RANLIB=$${CROSS_COMPILE}ranlib -QMAKE_LIBTOOL=$${CROSS_COMPILE}libtool -QMAKE_INSTALL_NAME_TOOL=$${CROSS_COMPILE}install_name_tool load(qt_config) diff --git a/depends/patches/qt/mingw-uuidof.patch b/depends/patches/qt/mingw-uuidof.patch deleted file mode 100644 index fb21923c8c..0000000000 --- a/depends/patches/qt/mingw-uuidof.patch +++ /dev/null @@ -1,44 +0,0 @@ ---- old/qtbase/src/plugins/platforms/windows/qwindowscontext.cpp -+++ new/qtbase/src/plugins/platforms/windows/qwindowscontext.cpp -@@ -77,7 +77,7 @@ - #include - #include - #include --#ifndef Q_OS_WINCE -+#if !defined(Q_OS_WINCE) && (!defined(USE___UUIDOF) || (defined(USE___UUIDOF) && USE___UUIDOF == 1)) - # include - #endif - -@@ -814,7 +814,7 @@ - HWND_MESSAGE, NULL, static_cast(GetModuleHandle(0)), NULL); - } - --#ifndef Q_OS_WINCE -+#if !defined(Q_OS_WINCE) && (!defined(USE___UUIDOF) || (defined(USE___UUIDOF) && USE___UUIDOF == 1)) - // Re-engineered from the inline function _com_error::ErrorMessage(). - // We cannot use it directly since it uses swprintf_s(), which is not - // present in the MSVCRT.DLL found on Windows XP (QTBUG-35617). -@@ -833,7 +833,7 @@ - return QString::asprintf("IDispatch error #%u", uint(wCode)); - return QString::asprintf("Unknown error 0x0%x", uint(comError.Error())); - } --#endif // !Q_OS_WINCE -+#endif // !defined(Q_OS_WINCE) && (!defined(USE___UUIDOF) || (defined(USE___UUIDOF) && USE___UUIDOF == 1)) - - /*! - \brief Common COM error strings. -@@ -901,12 +901,12 @@ - default: - break; - } --#ifndef Q_OS_WINCE -+#if !defined(Q_OS_WINCE) && (!defined(USE___UUIDOF) || (defined(USE___UUIDOF) && USE___UUIDOF == 1)) - _com_error error(hr); - result += QByteArrayLiteral(" ("); - result += errorMessageFromComError(error); - result += ')'; --#endif // !Q_OS_WINCE -+#endif // !defined(Q_OS_WINCE) && (!defined(USE___UUIDOF) || (defined(USE___UUIDOF) && USE___UUIDOF == 1)) - return result; - } - diff --git a/depends/patches/qt/no-xlib.patch b/depends/patches/qt/no-xlib.patch new file mode 100644 index 0000000000..d6846aaca2 --- /dev/null +++ b/depends/patches/qt/no-xlib.patch @@ -0,0 +1,69 @@ +From 9563cef873ae82e06f60708d706d054717e801ce Mon Sep 17 00:00:00 2001 +From: Carl Dong +Date: Thu, 18 Jul 2019 17:22:05 -0400 +Subject: [PATCH] Wrap xlib related code blocks in #if's + +They are not necessary to compile QT. +--- + qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp +index 7c62c2e2b3..c05c6c0a07 100644 +--- a/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp ++++ b/qtbase/src/plugins/platforms/xcb/qxcbcursor.cpp +@@ -49,7 +49,9 @@ + #include + #include + #include ++#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) + #include ++#endif + #include + #include + +@@ -391,6 +391,7 @@ void QXcbCursor::changeCursor(QCursor *cursor, QWindow *window) + xcb_flush(xcb_connection()); + } + ++#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) + static int cursorIdForShape(int cshape) + { + int cursorId = 0; +@@ -444,6 +445,7 @@ static int cursorIdForShape(int cshape) + } + return cursorId; + } ++#endif + + xcb_cursor_t QXcbCursor::createNonStandardCursor(int cshape) + { +@@ -556,7 +558,9 @@ static xcb_cursor_t loadCursor(void *dpy, int cshape) + xcb_cursor_t QXcbCursor::createFontCursor(int cshape) + { + xcb_connection_t *conn = xcb_connection(); ++#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) + int cursorId = cursorIdForShape(cshape); ++#endif + xcb_cursor_t cursor = XCB_NONE; + + // Try Xcursor first +@@ -586,6 +590,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) + // Non-standard X11 cursors are created from bitmaps + cursor = createNonStandardCursor(cshape); + ++#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) + // Create a glpyh cursor if everything else failed + if (!cursor && cursorId) { + cursor = xcb_generate_id(conn); +@@ -593,6 +598,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) + cursorId, cursorId + 1, + 0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0); + } ++#endif + + if (cursor && cshape >= 0 && cshape < Qt::LastCursor && connection()->hasXFixes()) { + const char *name = cursorNames[cshape].front(); +-- +2.22.0 + diff --git a/depends/patches/qt/pidlist_absolute.patch b/depends/patches/qt/pidlist_absolute.patch deleted file mode 100644 index c792824179..0000000000 --- a/depends/patches/qt/pidlist_absolute.patch +++ /dev/null @@ -1,37 +0,0 @@ -diff -dur old/qtbase/src/plugins/platforms/windows/qwindowscontext.h new/qtbase/src/plugins/platforms/windows/qwindowscontext.h ---- old/qtbase/src/plugins/platforms/windows/qwindowscontext.h -+++ new/qtbase/src/plugins/platforms/windows/qwindowscontext.h -@@ -136,10 +136,18 @@ - inline void init(); - - typedef HRESULT (WINAPI *SHCreateItemFromParsingName)(PCWSTR, IBindCtx *, const GUID&, void **); -+#if defined(Q_CC_MINGW) && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 3) -+ typedef HRESULT (WINAPI *SHGetKnownFolderIDList)(const GUID &, DWORD, HANDLE, ITEMIDLIST **); -+#else - typedef HRESULT (WINAPI *SHGetKnownFolderIDList)(const GUID &, DWORD, HANDLE, PIDLIST_ABSOLUTE *); -+#endif - typedef HRESULT (WINAPI *SHGetStockIconInfo)(int , int , _SHSTOCKICONINFO *); - typedef HRESULT (WINAPI *SHGetImageList)(int, REFIID , void **); -+#if defined(Q_CC_MINGW) && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 3) -+ typedef HRESULT (WINAPI *SHCreateItemFromIDList)(const ITEMIDLIST *, REFIID, void **); -+#else - typedef HRESULT (WINAPI *SHCreateItemFromIDList)(PCIDLIST_ABSOLUTE, REFIID, void **); -+#endif - - SHCreateItemFromParsingName sHCreateItemFromParsingName; - SHGetKnownFolderIDList sHGetKnownFolderIDList; -diff -dur old/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp new/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp ---- old/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp -+++ new/qtbase/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp -@@ -1016,7 +1016,11 @@ - qWarning() << __FUNCTION__ << ": Invalid CLSID: " << url.path(); - return Q_NULLPTR; - } -+#if defined(Q_CC_MINGW) && (!defined(__MINGW64_VERSION_MAJOR) || __MINGW64_VERSION_MAJOR < 3) -+ ITEMIDLIST *idList; -+#else - PIDLIST_ABSOLUTE idList; -+#endif - HRESULT hr = QWindowsContext::shell32dll.sHGetKnownFolderIDList(uuid, 0, 0, &idList); - if (FAILED(hr)) { - qErrnoWarning("%s: SHGetKnownFolderIDList(%s)) failed", __FUNCTION__, qPrintable(url.toString())); diff --git a/depends/patches/qt/qfixed-coretext.patch b/depends/patches/qt/qfixed-coretext.patch deleted file mode 100644 index c5ad7d0632..0000000000 --- a/depends/patches/qt/qfixed-coretext.patch +++ /dev/null @@ -1,34 +0,0 @@ -From dbdd5f0ffbce52c8b789ed09f1aa3f1da6c02e23 Mon Sep 17 00:00:00 2001 -From: Gabriel de Dietrich -Date: Fri, 30 Mar 2018 11:58:16 -0700 -Subject: [PATCH] QCoreTextFontEngine: Fix build with Xcode 9.3 - -Apple LLVM version 9.1.0 (clang-902.0.39.1) - -Error message: - -.../qfontengine_coretext.mm:827:20: error: qualified reference to - 'QFixed' is a constructor name rather than a type in this context - return QFixed::QFixed(int(CTFontGetUnitsPerEm(ctfont))); - -Change-Id: Iebe26b3b087a16b10664208fc8851cbddb47f043 -Reviewed-by: Konstantin Ritt ---- - src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git old/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm new/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm -index 25ff69d877d..98b753eff96 100644 ---- old/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm -+++ new/qtbase/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm -@@ -824,7 +824,7 @@ void QCoreTextFontEngine::getUnscaledGlyph(glyph_t glyph, QPainterPath *path, gl - - QFixed QCoreTextFontEngine::emSquareSize() const - { -- return QFixed::QFixed(int(CTFontGetUnitsPerEm(ctfont))); -+ return QFixed(int(CTFontGetUnitsPerEm(ctfont))); - } - - QFontEngine *QCoreTextFontEngine::cloneWithSize(qreal pixelSize) const --- -2.16.3 diff --git a/depends/patches/qt/qt.pro b/depends/patches/qt/qt.pro new file mode 100644 index 0000000000..8f2e900a84 --- /dev/null +++ b/depends/patches/qt/qt.pro @@ -0,0 +1,16 @@ +# Create the super cache so modules will add themselves to it. +cache(, super) + +!QTDIR_build: cache(CONFIG, add, $$list(QTDIR_build)) + +prl = no_install_prl +CONFIG += $$prl +cache(CONFIG, add stash, prl) + +TEMPLATE = subdirs +SUBDIRS = qtbase qttools qttranslations + +qttools.depends = qtbase +qttranslations.depends = qttools + +load(qt_configure) diff --git a/depends/patches/qt/qt_gcc11.patch b/depends/patches/qt/qt_gcc11.patch new file mode 100644 index 0000000000..b32a3a57ea --- /dev/null +++ b/depends/patches/qt/qt_gcc11.patch @@ -0,0 +1,10 @@ +--- a/qtbase/src/corelib/tools/qbytearraymatcher.h ++++ b/qtbase/src/corelib/tools/qbytearraymatcher.h +@@ -41,6 +41,7 @@ + #define QBYTEARRAYMATCHER_H + + #include ++#include + + QT_BEGIN_NAMESPACE + diff --git a/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch b/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch new file mode 100644 index 0000000000..f0c14a9400 --- /dev/null +++ b/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch @@ -0,0 +1,17 @@ +The moc executable loops through headers on CPLUS_INCLUDE_PATH and stumbles +on the GCC internal _GLIBCXX_VISIBILITY macro. Tell it to ignore it as it is +not supposed to be looking there to begin with. + +Upstream report: https://bugreports.qt.io/browse/QTBUG-83160 + +diff --git a/qtbase/src/tools/moc/main.cpp b/qtbase/src/tools/moc/main.cpp +--- a/qtbase/src/tools/moc/main.cpp ++++ b/qtbase/src/tools/moc/main.cpp +@@ -238,6 +238,7 @@ int runMoc(int argc, char **argv) + dummyVariadicFunctionMacro.arguments += Symbol(0, PP_IDENTIFIER, "__VA_ARGS__"); + pp.macros["__attribute__"] = dummyVariadicFunctionMacro; + pp.macros["__declspec"] = dummyVariadicFunctionMacro; ++ pp.macros["_GLIBCXX_VISIBILITY"] = dummyVariadicFunctionMacro; + + QString filename; + QString output; diff --git a/depends/patches/qt/qttools_src.pro b/depends/patches/qt/qttools_src.pro new file mode 100644 index 0000000000..6ef71a0942 --- /dev/null +++ b/depends/patches/qt/qttools_src.pro @@ -0,0 +1,6 @@ +TEMPLATE = subdirs +SUBDIRS = linguist + +fb = force_bootstrap +CONFIG += $$fb +cache(CONFIG, add, fb) diff --git a/depends/patches/qt/rcc_hardcode_timestamp.patch b/depends/patches/qt/rcc_hardcode_timestamp.patch new file mode 100644 index 0000000000..03f3897975 --- /dev/null +++ b/depends/patches/qt/rcc_hardcode_timestamp.patch @@ -0,0 +1,24 @@ +Hardcode last modified timestamp in Qt RCC + +This change allows the already built qt package to be reused even with +the SOURCE_DATE_EPOCH variable set, e.g., for Guix builds. + + +--- old/qtbase/src/tools/rcc/rcc.cpp ++++ new/qtbase/src/tools/rcc/rcc.cpp +@@ -227,14 +227,7 @@ void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib) + + if (lib.formatVersion() >= 2) { + // last modified time stamp +- const QDateTime lastModified = m_fileInfo.lastModified(); +- quint64 lastmod = quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0); +- static const quint64 sourceDate = 1000 * qgetenv("QT_RCC_SOURCE_DATE_OVERRIDE").toULongLong(); +- if (sourceDate != 0) +- lastmod = sourceDate; +- static const quint64 sourceDate2 = 1000 * qgetenv("SOURCE_DATE_EPOCH").toULongLong(); +- if (sourceDate2 != 0) +- lastmod = sourceDate2; ++ quint64 lastmod = quint64(1); + lib.writeNumber8(lastmod); + if (text || pass1) + lib.writeChar('\n'); diff --git a/depends/patches/qt/use_android_ndk23.patch b/depends/patches/qt/use_android_ndk23.patch new file mode 100644 index 0000000000..f22367d527 --- /dev/null +++ b/depends/patches/qt/use_android_ndk23.patch @@ -0,0 +1,13 @@ +Use Android NDK r23 LTS + +--- old/qtbase/mkspecs/features/android/default_pre.prf ++++ new/qtbase/mkspecs/features/android/default_pre.prf +@@ -76,7 +76,7 @@ else: equals(QT_ARCH, x86_64): CROSS_COMPILE = $$NDK_LLVM_PATH/bin/x86_64-linux- + else: equals(QT_ARCH, arm64-v8a): CROSS_COMPILE = $$NDK_LLVM_PATH/bin/aarch64-linux-android- + else: CROSS_COMPILE = $$NDK_LLVM_PATH/bin/arm-linux-androideabi- + +-QMAKE_RANLIB = $${CROSS_COMPILE}ranlib ++QMAKE_RANLIB = $$NDK_LLVM_PATH/bin/llvm-ranlib + QMAKE_LINK_SHLIB = $$QMAKE_LINK + QMAKE_LFLAGS = + diff --git a/depends/patches/qt/win32_qmake_conf.patch b/depends/patches/qt/win32_qmake_conf.patch new file mode 100644 index 0000000000..509d597533 --- /dev/null +++ b/depends/patches/qt/win32_qmake_conf.patch @@ -0,0 +1,14 @@ +--- a/qtbase/mkspecs/win32-g++/qmake.conf ++++ b/qtbase/mkspecs/win32-g++/qmake.conf +@@ -27,4 +27,10 @@ QMAKE_CFLAGS_LTCG = -flto + QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG + QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG + ++# [QT-STATIC-PATCH] ++QMAKE_LFLAGS += -static -static-libgcc ++QMAKE_CFLAGS_RELEASE -= -O2 ++QMAKE_CFLAGS_RELEASE += -Os -momit-leaf-frame-pointer ++DEFINES += QT_STATIC_BUILD ++ + load(qt_config) + diff --git a/depends/patches/sodium/fix-whitespace.patch b/depends/patches/sodium/fix-whitespace.patch new file mode 100644 index 0000000000..a7cb638f64 --- /dev/null +++ b/depends/patches/sodium/fix-whitespace.patch @@ -0,0 +1,12 @@ +diff --git a/configure b/configure +index b29f769..ca008ae 100755 +--- a/configure ++++ b/configure +@@ -591,7 +591,7 @@ MAKEFLAGS= + PACKAGE_NAME='libsodium' + PACKAGE_TARNAME='libsodium' + PACKAGE_VERSION='1.0.18' +-PACKAGE_STRING='libsodium 1.0.18' ++PACKAGE_STRING='libsodium' + PACKAGE_BUGREPORT='https://github.com/jedisct1/libsodium/issues' + PACKAGE_URL='https://github.com/jedisct1/libsodium' \ No newline at end of file diff --git a/depends/patches/zeromq/0001-fix-build-with-older-mingw64.patch b/depends/patches/zeromq/0001-fix-build-with-older-mingw64.patch new file mode 100644 index 0000000000..a6c508fb8a --- /dev/null +++ b/depends/patches/zeromq/0001-fix-build-with-older-mingw64.patch @@ -0,0 +1,30 @@ +From 1a159c128c69a42d90819375c06a39994f3fbfc1 Mon Sep 17 00:00:00 2001 +From: Cory Fields +Date: Tue, 28 Nov 2017 20:33:25 -0500 +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 99e889d..e69038e 100644 +--- a/src/windows.hpp ++++ b/src/windows.hpp +@@ -55,6 +55,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.7.4 + diff --git a/depends/patches/zeromq/0002-disable-pthread_set_name_np.patch b/depends/patches/zeromq/0002-disable-pthread_set_name_np.patch new file mode 100644 index 0000000000..7098bedb79 --- /dev/null +++ b/depends/patches/zeromq/0002-disable-pthread_set_name_np.patch @@ -0,0 +1,35 @@ +From 6e6b47d5ab381c3df3b30bb0b0a6cf210dfb1eba Mon Sep 17 00:00:00 2001 +From: Cory Fields +Date: Mon, 5 Mar 2018 14:22:05 -0500 +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 4fc59c3e..c3fdfd46 100644 +--- a/src/thread.cpp ++++ b/src/thread.cpp +@@ -220,7 +220,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) return; +@@ -233,6 +233,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.11.1 + diff --git a/depends/patches/zeromq/9114d3957725acd34aa8b8d011585812f3369411.patch b/depends/patches/zeromq/9114d3957725acd34aa8b8d011585812f3369411.patch deleted file mode 100644 index d94c15ed9f..0000000000 --- a/depends/patches/zeromq/9114d3957725acd34aa8b8d011585812f3369411.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 9114d3957725acd34aa8b8d011585812f3369411 Mon Sep 17 00:00:00 2001 -From: Jeroen Ooms -Date: Tue, 20 Oct 2015 13:10:38 +0200 -Subject: [PATCH] enable static libraries on mingw - ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index d702461..da24aa5 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -261,7 +261,7 @@ case "${host_os}" in - libzmq_dso_visibility="no" - - if test "x$enable_static" = "xyes"; then -- AC_MSG_ERROR([Building static libraries is not supported under MinGW32]) -+ CPPFLAGS="-DZMQ_STATIC" - fi - ;; - *cygwin*) diff --git a/depends/patches/zeromq/9e6745c12e0b100cd38acecc16ce7db02905e27c.patch b/depends/patches/zeromq/9e6745c12e0b100cd38acecc16ce7db02905e27c.patch deleted file mode 100644 index ddc119c9ec..0000000000 --- a/depends/patches/zeromq/9e6745c12e0b100cd38acecc16ce7db02905e27c.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 9e6745c12e0b100cd38acecc16ce7db02905e27c Mon Sep 17 00:00:00 2001 -From: David Millard -Date: Tue, 10 May 2016 13:53:53 -0700 -Subject: [PATCH] Fix autotools for static MinGW builds - ---- - configure.ac | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index da24aa5..abfd88b 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -261,7 +261,7 @@ case "${host_os}" in - libzmq_dso_visibility="no" - - if test "x$enable_static" = "xyes"; then -- CPPFLAGS="-DZMQ_STATIC" -+ CPPFLAGS="-DZMQ_STATIC $CPPFLAGS" - fi - ;; - *cygwin*) diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 747ed1e90d..83197bc4f0 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -876,7 +876,11 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = src/leveldb src/json src/test src/qt/test +EXCLUDE = src/crc32c \ + src/leveldb \ + src/json \ + src/test \ + src/qt/test # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded diff --git a/doc/README.md b/doc/README.md index 11d53a635b..94abe63009 100644 --- a/doc/README.md +++ b/doc/README.md @@ -39,6 +39,7 @@ The following are developer notes on how to build Raptoreum Core on your native - [Unix Build Notes](build-unix.md) - [Windows Build Notes](build-windows.md) - [OpenBSD Build Notes](build-openbsd.md) +- [Android Build Notes](build-android.md) - [Gitian Building Guide](gitian-building.md) Development diff --git a/doc/README_osx.md b/doc/README_osx.md index 2a4460478c..975be4be9e 100644 --- a/doc/README_osx.md +++ b/doc/README_osx.md @@ -1,4 +1,4 @@ -Deterministic OS X Dmg Notes. +Deterministic OS X DMG Notes. Working OS X DMGs are created in Linux by combining a recent clang, the Apple binutils (ld, ar, etc) and DMG authoring tools. diff --git a/doc/README_windows.txt b/doc/README_windows.txt index 7a722320c0..c5d058aeb1 100644 --- a/doc/README_windows.txt +++ b/doc/README_windows.txt @@ -19,5 +19,5 @@ depending on the speed of your computer and network connection, the synchronizat process can take anywhere from a few hours to a day or more. See the Raptoreum documentation at: - https://docs.raptoreum.org + https://docs.raptoreum.com for more help and information. diff --git a/doc/REST-interface.md b/doc/REST-interface.md index 9e6e136f1d..39bab2f7cc 100644 --- a/doc/REST-interface.md +++ b/doc/REST-interface.md @@ -20,6 +20,7 @@ For full TX query capability, one must enable the transaction index via "txindex `GET /rest/block/notxdetails/.` Given a block hash: returns a block, in binary, hex-encoded binary or JSON formats. +Responds with 404 if the block does not exist. The HTTP request and response are both handled entirely in-memory, thus making maximum memory usage at least 2.66MB (1 MB max block, plus hex encoding) per request. @@ -29,6 +30,12 @@ With the /notxdetails/ option JSON response will only contain the transaction ha `GET /rest/headers//.` Given a block hash: returns amount of blockheaders in upward direction. +Returns empty if the block does not exist or it is not in the active chain. + +#### Blockhash by height +`GET /rest/blockhashbyheight/.` + +Given a height: returns hash of the block in best-block-chain at height provided. #### Chaininfos `GET /rest/chaininfo.json` @@ -44,7 +51,7 @@ Only supports JSON as output format. * verificationprogress : (numeric) estimate of verification progress [0..1] * chainwork : (string) total amount of work in active chain, in hexadecimal * pruned : (boolean) if the blocks are subject to pruning -* pruneheight : (numeric) heighest block available +* pruneheight : (numeric) highest block available * softforks : (array) status of softforks in progress * bip9_softforks : (object) status of BIP9 softforks in progress diff --git a/doc/benchmarking.md b/doc/benchmarking.md index 5a2b8cd65a..ee394b8e1b 100644 --- a/doc/benchmarking.md +++ b/doc/benchmarking.md @@ -4,24 +4,28 @@ Benchmarking Raptoreum Core has an internal benchmarking framework, with benchmarks for cryptographic algorithms such as SHA1, SHA256, SHA512 and RIPEMD160. As well as the rolling bloom filter. +Running +--------------------- After compiling Raptoreum Core, the benchmarks can be run with: -`src/bench/bench_raptoreum` + + src/bench/bench_raptoreum The output will look similar to: ``` -#Benchmark,count,min,max,average -RIPEMD160,448,0.001245033173334,0.002638196945190,0.002461894814457 -RollingBloom-refresh,1,0.000635000000000,0.000635000000000,0.000635000000000 -RollingBloom-refresh,1,0.000108000000000,0.000108000000000,0.000108000000000 -RollingBloom-refresh,1,0.000107000000000,0.000107000000000,0.000107000000000 -RollingBloom-refresh,1,0.000204000000000,0.000204000000000,0.000204000000000 -SHA1,640,0.000909024336207,0.001938136418660,0.001843086257577 -SHA256,256,0.002209486499909,0.008500099182129,0.004300644621253 -SHA512,384,0.001319904176016,0.002813005447388,0.002615700786312 -Sleep100ms,10,0.205592155456543,0.210056066513062,0.104166316986084 -Trig,67108864,0.000000014997003,0.000000015448112,0.000000015188842 +| ns/byte | byte/s | error % | benchmark +|---------------:|------------------:|--------:|:----------------------------- +| 64.13 | 15,592,356.01 | 0.1% | `Base58CheckEncode` +| 24.56 | 40,722,672.68 | 0.2% | `Base58Decode` +... ``` +Help +--------------------- +`-?` will print a list of options and exit: + + src/bench/bench_raptoreum -? +Notes +--------------------- More benchmarks are needed for, in no particular order: - Script Validation - CCoinDBView caching diff --git a/doc/bips.md b/doc/bips.md index 87a33b0f84..5cd0dc33fc 100644 --- a/doc/bips.md +++ b/doc/bips.md @@ -15,7 +15,7 @@ BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.13.0**): * [`BIP 35`](https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki): The 'mempool' protocol message (and the protocol version bump to 60002) has been implemented since **v0.7.0** ([PR #1641](https://github.com/bitcoin/bitcoin/pull/1641)). * [`BIP 37`](https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki): The bloom filtering for transaction relaying, partial merkle trees for blocks, and the protocol version bump to 70001 (enabling low-bandwidth SPV clients) has been implemented since **v0.8.0** ([PR #1795](https://github.com/bitcoin/bitcoin/pull/1795)). * [`BIP 42`](https://github.com/bitcoin/bips/blob/master/bip-0042.mediawiki): The bug that would have caused the subsidy schedule to resume after block 13440000 was fixed in **v0.9.2** ([PR #3842](https://github.com/bitcoin/bitcoin/pull/3842)). -* [`BIP 61`](https://github.com/bitcoin/bips/blob/master/bip-0061.mediawiki): The 'reject' protocol message (and the protocol version bump to 70002) was added in **v0.9.0** ([PR #3185](https://github.com/bitcoin/bitcoin/pull/3185)). +* [`BIP 61`](https://github.com/bitcoin/bips/blob/master/bip-0061.mediawiki): The 'reject' protocol message (and the protocol version bump to 70002) was added in **v0.9.0** ([PR #3185](https://github.com/bitcoin/bitcoin/pull/3185)). Starting *v0.16.0*, whether to send reject messages can be configured with the `-enablebip61` option. * [`BIP 65`](https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki): The CHECKLOCKTIMEVERIFY softfork was merged in **v0.12.0** ([PR #6351](https://github.com/bitcoin/bitcoin/pull/6351)), and backported to **v0.11.2** and **v0.10.4**. Mempool-only CLTV was added in [PR #6124](https://github.com/bitcoin/bitcoin/pull/6124). * [`BIP 66`](https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki): The strict DER rules and associated version 3 blocks have been implemented since **v0.10.0** ([PR #5713](https://github.com/bitcoin/bitcoin/pull/5713)). * [`BIP 68`](https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki): Sequence locks have been implemented as of **v0.12.1** ([PR #7184](https://github.com/bitcoin/bitcoin/pull/7184)), and have been activated since *block 419328*. @@ -28,3 +28,4 @@ BIPs that are implemented by Bitcoin Core (up-to-date up to **v0.13.0**): * [`BIP 130`](https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki): direct headers announcement is negotiated with peer versions `>=70012` as of **v0.12.0** ([PR 6494](https://github.com/bitcoin/bitcoin/pull/6494)). * [`BIP 147`](https://github.com/bitcoin/bips/blob/master/bip-0147.mediawiki): NULLDUMMY softfork as of **v0.13.1** ([PR 8636](https://github.com/bitcoin/bitcoin/pull/8636) and [PR 8937](https://github.com/bitcoin/bitcoin/pull/8937)). * [`BIP 152`](https://github.com/bitcoin/bips/blob/master/bip-0152.mediawiki): Compact block transfer and related optimizations are used as of **v0.13.0** ([PR 8068](https://github.com/bitcoin/bitcoin/pull/8068)). +* [`BIP 159`](https://github.com/bitcoin/bips/blob/master/bip-0159.mediawiki): The NODE_NETWORK_LIMITED service bit is signalled as of **v0.16.0** ([PR 11740](https://github.com/bitcoin/bitcoin/pull/11740)), and such nodes are connected to as of v0.17.0 ([PR 10387](https://github.com/bitcoin/bitcoin/pull/10387)). diff --git a/doc/build-android.md b/doc/build-android.md new file mode 100644 index 0000000000..a6a59b17bf --- /dev/null +++ b/doc/build-android.md @@ -0,0 +1,25 @@ +ANDROID BUILD NOTES +====================== + +This guide describes how to build and package the `raptoreum-qt` GUI for Android on Linux and macOS. + + +## Dependencies + +Before proceeding with an Android build one needs to get the [Android SDK](https://developer.android.com/studio) and use the "SDK Manager" tool to download the NDK and one or more "Platform packages" (these are Android versions and have a corresponding API level). + +The minimum supported Android NDK version is [r23](https://github.com/android/ndk/wiki/Changelog-r23). + +In order to build `ANDROID_API_LEVEL` (API level corresponding to the Android version targeted, e.g. Android 9.0 Pie is 28 and its "Platform package" needs to be available) and `ANDROID_TOOLCHAIN_BIN` (path to toolchain binaries depending on the platform the build is being performed on) need to be set. + +API levels from 24 to 29 have been tested to work. + +If the build includes Qt, environment variables `ANDROID_SDK` and `ANDROID_NDK` need to be set as well but can otherwise be omitted. +This is an example command for a default build with no disabled dependencies: + + ANDROID_SDK=/home/user/Android/Sdk ANDROID_NDK=/home/user/Android/Sdk/ndk-bundle make HOST=aarch64-linux-android ANDROID_API_LEVEL=28 ANDROID_TOOLCHAIN_BIN=/home/user/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin + + +## Building and packaging + +After the depends are built configure with one of the resulting prefixes and run `make && make apk` in `src/qt`. \ No newline at end of file diff --git a/doc/build-cross.md b/doc/build-cross.md index 5a3d12cdd6..1c43626e6d 100644 --- a/doc/build-cross.md +++ b/doc/build-cross.md @@ -26,68 +26,70 @@ $ tar -C depends/SDKs -xf depends/sdk-sources/MacOSX10.11.sdk.tar.gz When building the dependencies, as described in [build-generic](build-generic.md), use ```bash -$ make HOST=x86_64-apple-darwin11 -j4 +$ make HOST=x86_64-apple-darwin14 -j4 ``` When building Raptoreum Core, use ```bash -$ ./configure --prefix=`pwd`/depends/x86_64-apple-darwin11 +$ ./configure --prefix=`pwd`/depends/x86_64-apple-darwin14 ``` -Windows 64bit/32bit Cross-compilation +Windows 64bit Cross-compilation ------------------------------- -Cross-compiling to Windows requires a few additional packages to be installed: +The steps below can be performed on Ubuntu (including in a VM) or WSL. The depends system +will also work on other Linux distributions, however the commands for +installing the toolchain will be different. -```bash -$ sudo apt-get install nsis wine-stable wine64 bc -``` +First, install the general dependencies: -For Windows 64bit, install : -```bash -$ sudo apt-get install g++-mingw-w64-x86-64 -``` + sudo apt update + sudo apt upgrade + sudo apt install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl git python3 cmake -If you're building on Ubuntu 17.04 or later, run these two commands, selecting the 'posix' variant for both, -to work around issues with mingw-w64. See issue [8732](https://github.com/bitcoin/bitcoin/issues/8732) for more information. -This also fixes linker issues related to std::thread and other threading related standard C++ libraries. -``` -sudo update-alternatives --config x86_64-w64-mingw32-g++ -sudo update-alternatives --config x86_64-w64-mingw32-gcc -``` +A host toolchain (`build-essential`) is necessary because some dependency +packages need to build host utilities that are used in the build process. -For Windows 32bit, install: -```bash -$ sudo apt-get install g++-mingw-w64-i686 -``` +See [dependencies.md](dependencies.md) for a complete overview. -If you're building on Ubuntu 17.04 or later, run these two commands, selecting the 'posix' variant for both, -to fix linker issues related to std::thread and other threading related standard C++ libraries. -``` -sudo update-alternatives --config x86_64-w64-mingw32-g++ -sudo update-alternatives --config x86_64-w64-mingw32-gcc -``` +If you want to build the windows installer with `make deploy` you need [NSIS](https://nsis.sourceforge.io/Main_Page): -Before building for Windows 32bit or 64bit, run + sudo apt install nsis -``` -$ PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var -``` +Acquire the source in the usual way: -When building the dependencies, as described in [build-generic](build-generic.md), use + git clone https://github.com/Raptor3um/raptoreum + cd raptoreum -```bash -$ make HOST=x86_64-w64-mingw32 -j4 -``` +### Building for 64-bit Windows -When building Raptoreum Core, use +The first step is to install the mingw-w64 cross-compilation tool chain: -```bash -$ ./configure --prefix=`pwd`/depends/x86_64-w64-mingw32 -``` + sudo apt install g++-mingw-w64-x86-64 + +Ubuntu Bionic 18.04 [1](#footnote1): + + sudo update-alternatives --config x86_64-w64-mingw32-g++ # Set the default mingw32 g++ compiler option to posix. + +Once the toolchain is installed the build steps are common: -These commands will build for Windows 64bit. If you want to compile for 32bit, -replace `x86_64-w64-mingw32` with `i686-w64-mingw32`. +Note that for WSL the Raptoreum Core source path MUST be somewhere in the default mount file system, for +example /usr/src/raptoreum, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail. +This means you cannot use a directory that is located directly on the host Windows file system to perform the build. + +Build using: + + PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var + cd depends + make HOST=x86_64-w64-mingw32 + cd .. + ./autogen.sh # not required when building from tarball + CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure --prefix=/ + make + +### Depends system + +For further documentation on the depends system see [README.md](../depends/README.md) in the depends directory. ARM-Linux Cross-compilation ------------------- @@ -108,3 +110,13 @@ When building Raptoreum Core, use ```bash $ ./configure --prefix=`pwd`/depends/arm-linux-gnueabihf ``` + +Footnotes +--------- + +1: Starting from Ubuntu Xenial 16.04, both the 32 and 64 bit Mingw-w64 packages install two different +compiler options to allow a choice between either posix or win32 threads. The default option is win32 threads which is the more +efficient since it will result in binary code that links directly with the Windows kernel32.lib. Unfortunately, the headers +required to support win32 threads conflict with some of the classes in the C++11 standard library, in particular std::mutex. +It's not possible to build the Raptoreum Core code using the win32 version of the Mingw-w64 cross compilers (at least not without +modifying headers in the Raptoreum Core source code). diff --git a/doc/build-generic.md b/doc/build-generic.md index bc3cb19e08..193f6ca81b 100644 --- a/doc/build-generic.md +++ b/doc/build-generic.md @@ -49,7 +49,7 @@ Please replace `` with your local system's `host-platform-triplet`. The fo - `x86_64-pc-linux-gnu` for Linux64 - `i686-w64-mingw32` for Win32 - `x86_64-w64-mingw32` for Win64 -- `x86_64-apple-darwin11` for MacOSX +- `x86_64-apple-darwin14` for MacOSX - `arm-linux-gnueabihf` for Linux ARM 32 bit - `aarch64-linux-gnu` for Linux ARM 64 bit diff --git a/doc/build-osx.md b/doc/build-osx.md index 83fac5fa70..7a3374c457 100644 --- a/doc/build-osx.md +++ b/doc/build-osx.md @@ -28,7 +28,12 @@ brew install librsvg Building -------- -Follow the instructions in [build-generic](build-generic.md) +It's possible that your `PATH` environment variable contains some problematic strings, run +```bash +export PATH=$(echo "$PATH" | sed -e '/\\/!s/ /\\ /g') # fix whitespaces +``` + +Next, follow the instructions in [build-generic](build-generic.md) Running ------- @@ -53,20 +58,3 @@ Other commands: ./src/raptoreumd -daemon # Starts the raptoreum daemon. ./src/raptoreum-cli --help # Outputs a list of command-line options. ./src/raptoreum-cli help # Outputs a list of RPC commands when the daemon is running. - -Using Qt Creator as IDE ------------------------- -You can use Qt Creator as an IDE, for raptoreum development. -Download and install the community edition of [Qt Creator](https://www.qt.io/download/). -Uncheck everything except Qt Creator during the installation process. - -1. Make sure you installed everything through Homebrew mentioned above -2. Do a proper ./configure --enable-debug -3. In Qt Creator do "New Project" -> Import Project -> Import Existing Project -4. Enter "raptoreum-qt" as project name, enter src/qt as location -5. Leave the file selection as it is -6. Confirm the "summary page" -7. In the "Projects" tab select "Manage Kits..." -8. Select the default "Desktop" kit and select "Clang (x86 64bit in /usr/bin)" as compiler -9. Select LLDB as debugger (you might need to set the path to your installation) -10. Start debugging with Qt Creator diff --git a/doc/build-unix.md b/doc/build-unix.md index e77ff0e72e..e8f80c2e7f 100644 --- a/doc/build-unix.md +++ b/doc/build-unix.md @@ -12,27 +12,27 @@ Run the following commands to install required packages: ##### Debian/Ubuntu: ```bash -$ sudo apt-get install curl build-essential libtool autotools-dev automake pkg-config python3 bsdmainutils cmake +$ sudo apt-get install curl build-essential libtool autotools-dev automake pkg-config python3 bsdmainutils bison ``` ##### Fedora: ```bash -$ sudo dnf install gcc-c++ libtool make autoconf automake python3 cmake libstdc++-static patch +$ sudo dnf install gcc-c++ libtool make autoconf automake python3 libstdc++-static patch ``` ##### Arch Linux: ```bash -$ pacman -S base-devel python3 cmake +$ pacman -S base-devel python3 ``` ##### Alpine Linux: ```sh -$ sudo apk --update --no-cache add autoconf automake cmake curl g++ gcc libexecinfo-dev libexecinfo-static libtool make perl pkgconfig python3 patch linux-headers +$ sudo apk --update --no-cache add autoconf automake curl g++ gcc libexecinfo-dev libexecinfo-static libtool make perl pkgconfig python3 patch linux-headers ``` ##### FreeBSD/OpenBSD: ```bash -pkg_add gmake cmake libtool +pkg_add gmake libtool pkg_add autoconf # (select highest version, e.g. 2.69) pkg_add automake # (select highest version, e.g. 1.15) pkg_add python # (select highest version, e.g. 3.5) @@ -69,11 +69,11 @@ Hardening enables the following features: To test that you have built PIE executable, install scanelf, part of paxutils, and use: - scanelf -e ./raptoreumd + scanelf -e ./raptoreumd The output should contain: - TYPE + TYPE ET_DYN * Non-executable Stack @@ -87,8 +87,8 @@ Hardening enables the following features: `scanelf -e ./raptoreumd` the output should contain: - STK/REL/PTL - RW- R-- RW- + STK/REL/PTL + RW- R-- RW- The STK RW- means that the stack is readable and writeable but not executable. diff --git a/doc/build-windows.md b/doc/build-windows.md index a51e2d66ba..4cc31a449b 100644 --- a/doc/build-windows.md +++ b/doc/build-windows.md @@ -3,62 +3,102 @@ WINDOWS BUILD NOTES Below are some notes on how to build Raptoreum Core for Windows. -Most developers use cross-compilation from Ubuntu to build executables for -Windows. Cross-compilation is also used to build the release binaries. - -Currently only building on Ubuntu Trusty 14.04 or Ubuntu Zesty 17.04 or later is supported. -Building on Ubuntu Xenial 16.04 is known to be broken, see extensive discussion in issue [8732](https://github.com/bitcoin/bitcoin/issues/8732). -While it may be possible to do so with work arounds, it's potentially dangerous and not recommended. - -While there are potentially a number of ways to build on Windows (for example using msys / mingw-w64), -using the Windows Subsystem For Linux is the most straightforward. If you are building with -another method, please contribute the instructions here for others who are running versions -of Windows that are not compatible with the Windows Subsystem for Linux. - -Compiling with Windows Subsystem For Linux -------------------------------------------- - -With Windows 10, Microsoft has released a new feature named the [Windows -Subsystem for Linux](https://msdn.microsoft.com/commandline/wsl/about). This -feature allows you to run a bash shell directly on Windows in an Ubuntu-based -environment. Within this environment you can cross compile for Windows without -the need for a separate Linux VM or server. - -This feature is not supported in versions of Windows prior to Windows 10 or on -Windows Server SKUs. In addition, it is available [only for 64-bit versions of -Windows](https://msdn.microsoft.com/en-us/commandline/wsl/install_guide). - -To get the bash shell, you must first activate the feature in Windows. - -1. Turn on Developer Mode - * Open Settings -> Update and Security -> For developers - * Select the Developer Mode radio button - * Restart if necessary -2. Enable the Windows Subsystem for Linux feature - * From Start, search for "Turn Windows features on or off" (type 'turn') - * Select Windows Subsystem for Linux (beta) - * Click OK - * Restart if necessary -3. Complete Installation - * Open a cmd prompt and type "bash" - * Accept the license - * Create a new UNIX user account (this is a separate account from your Windows account) - -After the bash shell is active, you can follow the instructions below, starting -with the "Cross-compilation" section. Compiling the 64-bit version is -recommended but it is possible to compile the 32-bit version. - -Cross-compilation -------------------- - -Follow the instructions for Windows in [build-cross](build-cross.md) +The options known to work for building Raptoreum Core on Windows are: + +* On Linux, using the [Mingw-w64](https://www.mingw-w64.org/) cross compiler tool chain. +and is the platform used to build the Raptoreum Core Windows release binaries. +* On Windows, using [Windows +Subsystem for Linux (WSL)](https://docs.microsoft.com/windows/wsl/about) and the Mingw-w64 cross compiler tool chain. + +Other options which may work, but which have not been extensively tested are (please contribute instructions): + +* On Windows, using a POSIX compatibility layer application such as [cygwin](https://www.cygwin.com/) or [msys2](https://www.msys2.org/). + +Installing Windows Subsystem for Linux +--------------------------------------- + +* Follow the upstream installation instructions, available [here](https://docs.microsoft.com/windows/wsl/install-win10). + +Cross-compilation for Ubuntu and Windows Subsystem for Linux +------------------------------------------------------------ + +The steps below can be performed on Ubuntu or WSL. The depends system +will also work on other Linux distributions, however the commands for +installing the toolchain will be different. + +First, install the general dependencies: + + sudo apt update + sudo apt upgrade + sudo apt install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl git + +A host toolchain (`build-essential`) is necessary because some dependency +packages need to build host utilities that are used in the build process. + +See [dependencies.md](dependencies.md) for a complete overview. + +If you want to build the windows installer with `make deploy` you need [NSIS](https://nsis.sourceforge.io/Main_Page): + + sudo apt install nsis + +Acquire the source in the usual way: + + git clone https://github.com/raptor3um/raptoreum.git + cd raptoreum + +## Building for 64-bit Windows + +The first step is to oinstall the mingw-w64 cross-compilation tool chain: + - on modern systems (Ubuntu 21.04 Hirsute Hippo or newer, Debian 11 Bullseye or newer): + +```sh +sudo apt install g++-mingw-w64-x86-64-posix +``` + + - on older systems: + +```sh +sudo apt install g++-mingw-w64-x86-64 +``` + +Once the toolchain is installed the build steps are common: + +Note that for WSL the Raptoreum Core source path MUST be somewhere in the default mount file system, for +example /usr/src/raptoreum, AND not under /mnt/d/. If this is not the case the dependency autoconf scripts will fail. +This means you cannot use a directory that is located directly on the host Windows file system to perform the build. + +Additional WSL Note: +WSL support for [launching Win32 applications](https://docs.microsoft.com/en-us/archive/blogs/wsl/windows-and-ubuntu-interoperability#launching-win32-applications-from-within-wsl) +results in `Autoconf` configure scripts being able to execute Windows Portable Executable files. This can cause +unexpected behaviour during the build, such as Win32 error dialogs for missing libraries. The recommended approach +is to temporarily disable WSL support for Win32 applications. + +Build using: + + PATH=$(echo "$PATH" | sed -e 's/:\/mnt.*//g') # strip out problematic Windows %PATH% imported var + sudo bash -c "echo 0 > /proc/sys/fs/binfmt_misc/status" # Disable WSL support for Win32 applications. + cd depends + make HOST=x86_64-w64-mingw32 + cd .. + ./autogen.sh + CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure --prefix=/ + make # use "-j N" for N parallel jobs + sudo bash -c "echo 1 > /proc/sys/fs/binfmt_misc/status" # Enable WSL support for Win32 applications. + +## Depends system + +For further documentation on the depends system see [README.md](../depends/README.md) in the depends directory. Installation ------------- After building using the Windows subsystem it can be useful to copy the compiled -executables to a directory on the windows drive in the same directory structure +executables to a directory on the Windows drive in the same directory structure as they appear in the release `.zip` archive. This can be done in the following way. This will install to `c:\workspace\raptoreum`, for example: make install DESTDIR=/mnt/c/workspace/raptoreum + +You can also create an installer using: + + make deploy diff --git a/doc/descriptors.md b/doc/descriptors.md new file mode 100644 index 0000000000..92bed6c230 --- /dev/null +++ b/doc/descriptors.md @@ -0,0 +1,158 @@ +# Support for Output Descriptors in Raptoreum Core + +Since Raptoreum Core v0.17 with Future Lock Transactions, +there is support for Output Descriptors in the +`scantxoutset` RPC call. This is simple language used to +describe this collection of output scripts. + +This document describes the language. For the specifics on usage for scanning +the UTXO set, see the `scantxoutset` RPC help. + +## Features + +Output descriptors currently support: +- Pay-to-pubkey scripts (P2PK), through the `pk` function. +- Pay-to-pubkey-hash scripts (P2PKH), through the `pkh` function. +- Pay-to-script-hash scripts (P2SH), through the `sh` function. +- Multisig scripts, through the `multi` function. +- Any type of supported address through the `addr` function. +- Raw hex scripts through the `raw` function. +- Public keys (compressed and uncompressed) in hex notation, or BIP32 extended pubkeys with derivation paths. + +## Examples + +- `pk(0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798)` represents a P2PK output. +- `multi(1,022f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4,025cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc)` represents a bare *1-of-2* multisig. +- `pkh(xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw/1'/2)` refers to a single P2PKH output, using child key *1'/2* of the specified xpub. +- `pkh([d34db33f/44'/0'/0']xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL/1/*)` describes a set of P2PKH outputs, but additionally specifies that the specified xpub is a child of a master with fingerprint `d34db33f`, and derived using path `44'/0'/0'`. + +## Reference + +Descriptors consist of several types of expressions. The top level expression is either a `SCRIPT`, or `SCRIPT#CHECKSUM` where `CHECKSUM` is an 8-character alphanumeric descriptor checksum. + +`SCRIPT` expressions: +- `pk(KEY)` (anywhere): P2PK output for the given public key. +- `pkh(KEY)` (anywhere): P2PKH output for the given public key (use `addr` if you only know the pubkey hash). +- `sh(SCRIPT)` (top level only): P2SH embed the argument. +- `combo(KEY)` (top level only): an alias for the collection of `pk(KEY)` and `pkh(KEY)`. +- `multi(k,KEY_1,KEY_2,...,KEY_n)` (anywhere): k-of-n multisig script. +- `addr(ADDR)` (top level only): the script which ADDR expands to. +- `raw(HEX)` (top level only): the script whose hex encoding is HEX. + +`KEY` expressions: +- Optionally, key origin information, consisting of: + - An open bracket `[` + - Exactly 8 hex characters for the fingerprint of the key where the derivation starts (see BIP32 for details) + - Followed by zero or more `/NUM` or `/NUM'` path elements to indicate unhardened or hardened derivation steps between the fingerprint and the key or xpub/xprv root that follows + - A closing bracket `]` +- Followed by the actual key, which is either: + - Hex encoded public keys (66 characters starting with `02` or `03`, or 130 characters starting with `04`). + - [WIF](https://en.bitcoin.it/wiki/Wallet_import_format) encoded private keys may be specified instead of the corresponding public key, with the same meaning. + -`xpub` encoded extended public key or `xprv` encoded private key (as defined in [BIP 32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)). + - Followed by zero or more `/NUM` unhardened and `/NUM'` hardened BIP32 derivation steps. + - Optionally followed by a single `/*` or `/*'` final step to denote all (direct) unhardened or hardened children. + - The usage of hardened derivation steps requires providing the private key. +- Anywhere a `'` suffix is permitted to denote hardened derivation, the suffix `h` can be used instead. + +`ADDR` expressions are any type of supported address: +- P2PKH addresses (base58, of the form `X...`). Note that P2PKH addresses in descriptors cannot be used for P2PK outputs (use the `pk` function instead). +- P2SH addresses (base58, of the form `7...`, defined in [BIP 13](https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki)). + +## Explanation + +### Single-key scripts + +Many single-key constructions are used in practice, generally including +P2PK and P2PKH. More combinations are +imaginable, though they may not be optimal: P2SH-P2PK and P2SH-P2PKH. + +To describe these, we model these as functions. The functions `pk` +(P2PK) and `pkh` (P2PKH) take as input a public key in +hexadecimal notation (which will be extended later), and return the +corresponding *scriptPubKey*. The `sh` (P2SH) function +takes as input a script, and returns the script describing P2SH +outputs with the input as embedded script. The name of the function does +not contain "p2" for brevity. + +### Multisig + +Several pieces of software use multi-signature (multisig) scripts based +on Bitcoin's OP_CHECKMULTISIG opcode. To support these, we introduce the +`multi(k,key_1,key_2,...,key_n)` function. It represents a *k-of-n* +multisig policy, where any *k* out of the *n* provided public keys must +sign. + +### BIP32 derived keys and chains + +Most modern wallet software and hardware uses keys that are derived using +BIP32 ("HD keys"). We support these directly by permitting strings +consisting of an extended public key (commonly referred to as an *xpub*) +plus derivation path anywhere a public key is expected. The derivation +path consists of a sequence of 0 or more integers (in the range +*0..231-1*) each optionally followed by `'` or `h`, and +separated by `/` characters. The string may optionally end with the +literal `/*` or `/*'` (or `/*h`) to refer to all unhardened or hardened +child keys instead. + +Whenever a public key is described using a hardened derivation step, the +script cannot be computed without access to the corresponding private +key. + +### Key origin identification + +In order to describe scripts whose signing keys reside on another device, +it may be necessary to identify the master key and derivation path an +xpub was derived with. + +For example, when following BIP44, it would be useful to describe a +change chain directly as `xpub.../44'/0'/0'/1/*` where `xpub...` +corresponds with the master key `m`. Unfortunately, since there are +hardened derivation steps that follow the xpub, this descriptor does not +let you compute scripts without access to the corresponding private keys. +Instead, it should be written as `xpub.../1/*`, where xpub corresponds to +`m/44'/0'/0'`. + +When interacting with a hardware device, it may be necessary to include +the entire path from the master down. BIP174 standardizes this by +providing the master key *fingerprint* (first 32 bit of the Hash160 of +the master pubkey), plus all derivation steps. To support constructing +these, we permit providing this key origin information inside the +descriptor language, even though it does not affect the actual +scriptPubKeys it refers to. + +Every public key can be prefixed by an 8-character hexadecimal +fingerprint plus optional derivation steps (hardened and unhardened) +surrounded by brackets, identifying the master and derivation path the key or xpub +that follows was derived with. + +### Including private keys + +Often it is useful to communicate a description of scripts along with the +necessary private keys. For this reason, anywhere a public key or xpub is +supported, a private key in WIF format or xprv may be provided instead. +This is useful when private keys are necessary for hardened derivation +steps, or for dumping wallet descriptors including private key material. + +### Compatibility with old wallets + +In order to easily represent the sets of scripts currently supported by +existing Raptoreum Core wallets, a convenience function `combo` is +provided, which takes as input a public key, and constructs the P2PK and +P2PKH scripts for that key. + +### Checksums + +Descriptors can optionally be suffixed with a checksum to protect against +typos or copy-paste errors. + +These checksums consist of 8 alphanumeric characters. As long as errors are +restricted to substituting characters in `0123456789()[],'/*abcdefgh@:$%{}` +for others in that set and changes in letter case, up to 4 errors will always +be detected in descriptors up to 501 characters, and up to 3 errors in longer +ones. For larger numbers of errors, or other types of errors, there is a +roughly 1 in a trillion chance of not detecting the errors. + +All RPCs in Raptoreum Core will include the checksum in their output. Only +certain RPCs require checksums on input, including `deriveaddress` and +`importmulti`. The checksum for a descriptor without one can be computed +using the `getdescriptorinfo` RPC. diff --git a/doc/developer-notes.md b/doc/developer-notes.md index 5ad2b6c85f..f7eaa746a2 100644 --- a/doc/developer-notes.md +++ b/doc/developer-notes.md @@ -1,44 +1,114 @@ Developer Notes =============== + +**Table of Contents** + +- [Developer Notes](#developer-notes) + - [Coding Style (General)](#coding-style-general) + - [Coding Style (C++)](#coding-style-c) + - [Coding Style (Python)](#coding-style-python) + - [Coding Style (Doxygen-compatible comments)](#coding-style-doxygen-compatible-comments) + - [Development tips and tricks](#development-tips-and-tricks) + - [Compiling for debugging](#compiling-for-debugging) + - [Compiling for gprof profiling](#compiling-for-gprof-profiling) + - [debug.log](#debuglog) + - [Testnet and Regtest modes](#testnet-and-regtest-modes) + - [DEBUG_LOCKORDER](#debug_lockorder) + - [Valgrind suppressions file](#valgrind-suppressions-file) + - [Compiling for test coverage](#compiling-for-test-coverage) + - [Locking/mutex usage notes](#lockingmutex-usage-notes) + - [Threads](#threads) + - [Ignoring IDE/editor files](#ignoring-ideeditor-files) +- [Development guidelines](#development-guidelines) + - [General Raptoreum Core](#general-raptoreum-core) + - [Wallet](#wallet) + - [General C++](#general-c) + - [C++ data structures](#c-data-structures) + - [Strings and formatting](#strings-and-formatting) + - [Variable names](#variable-names) + - [Threads and synchronization](#threads-and-synchronization) + - [Source code organization](#source-code-organization) + - [GUI](#gui) + - [Subtrees](#subtrees) + - [Git and GitHub tips](#git-and-github-tips) + - [Scripted diffs](#scripted-diffs) + - [RPC interface guidelines](#rpc-interface-guidelines) + + + +Coding Style (General) +---------------------- + Various coding styles have been used during the history of the codebase, and the result is not very consistent. However, we're now trying to converge to -a single style, so please use it in new code. Old code will be converted -gradually and you are encouraged to use the provided -[clang-format-diff script](/contrib/devtools/README.md#clang-format-diffpy) -to clean up the patch automatically before submitting a pull request. +a single style, which is specified below. When writing patches, favor the new +style over attempting to mimic the surrounding style, except for move-only +commits. + +Do not submit patches solely to modify the style of existing code. -- Basic rules specified in [src/.clang-format](/src/.clang-format). - - Braces on new lines for namespaces, classes, functions, methods. +Coding Style (C++) +------------------ + +- **Indentation and whitespace rules** as specified in +[src/.clang-format](/src/.clang-format). You can use the provided +[clang-format-diff script](/contrib/devtools/README.md#clang-format-diffpy) +tool to clean up patches automatically before submission. + - Braces on new lines for classes, functions, methods. - Braces on the same line for everything else. - 4 space indentation (no tabs) for every block except namespaces. - No indentation for `public`/`protected`/`private` or for `namespace`. - No extra spaces inside parenthesis; don't do ( this ) - No space after function names; one space after `if`, `for` and `while`. - - If an `if` only has a single-statement then-clause, it can appear - on the same line as the if, without braces. In every other case, - braces are required, and the then and else clauses must appear + - If an `if` only has a single-statement `then`-clause, it can appear + on the same line as the `if`, without braces. In every other case, + braces are required, and the `then` and `else` clauses must appear correctly indented on a new line. + +- **Symbol naming conventions**. These are preferred in new code, but are not +required when doing so would need changes to significant pieces of existing +code. + - Variable and namespace names are all lowercase, and may use `_` to + separate words (snake_case). + - Class member variables have a `m_` prefix. + - Global variables have a `g_` prefix. + - Constant names are all uppercase, and use `_` to separate words. + - Class names, function names and method names are UpperCamelCase + (PascalCase). Do not prefix class names with `C`. + - Test suite naming convention: The Boost test suite in file + `src/test/foo_tests.cpp` should be named `foo_tests`. Test suite names + must be unique. + +- **Miscellaneous** - `++i` is preferred over `i++`. + - `nullptr` is preferred over `NULL` or `(void*)0`. + - `static_assert` is preferred over `assert` where possible. Generally; compile-time checking is preferred over run-time checking. - Align pointers and references to the left i.e. use `type& var` and not `type &var`. + - `enum class` is preferred over `enum` where possible. Scoped enumerations avoid two potential pitfalls/problems with traditional C++ enumerations: implicit conversions to int, and name clashes due to enumerators being exported to the surrounding scope. Block style example: ```c++ -namespace foo -{ +int g_count = 0; + +namespace foo { class Class { + std::string m_name; + +public: bool Function(const std::string& s, int n) { // Comment summarising what this section of code does for (int i = 0; i < n; ++i) { + int total_sum = 0; // When something fails, return early if (!Something()) return false; ... - if (SomethingElse()) { - DoMore(); + if (SomethingElse(i)) { + total_sum += ComputeSomething(g_count); } else { - DoLess(); + DoSomething(m_name, total_sum); } } @@ -49,10 +119,17 @@ class Class } // namespace foo ``` -Doxygen comments ------------------ +Coding Style (Python) +--------------------- + +Refer to [/test/functional/README.md#style-guidelines](/test/functional/README.md#style-guidelines). + +Coding Style (Doxygen-compatible comments) +------------------------------------------ -To facilitate the generation of documentation, use doxygen-compatible comment blocks for functions, methods and fields. +The Raptoreum uses [Doxygen](https://www.doxygen.nl/) to generate its official documentation. + +Use Doxygen-compatible comment blocks for functions, methods and fields. For example, to describe a function use: ```c++ @@ -108,57 +185,151 @@ Not OK (used plenty in the current source, but not picked up): A full list of comment syntaxes picked up by doxygen can be found at http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html, but if possible use one of the above styles. +Documentation can be generated with `make docs` and cleaned up with `make clean-docs`. + +Coding Style (Python) +--------------------- + +Refer to [/test/functional/README.md#style-guidelines](/test/functional/README.md#style-guidelines). + Development tips and tricks --------------------------- -**compiling for debugging** +### Compiling for debugging + +Run configure with `--enable-debug` to add additional compiler flags that +produce better debugging builds. + +### Compiling for gprof profiling -Run configure with the --enable-debug option, then make. Or run configure with -CXXFLAGS="-g -ggdb -O0" or whatever debug flags you need. +Run configure with the `--enable-gprof` option, then make. -**debug.log** +### debug.log If the code is behaving strangely, take a look in the debug.log file in the data directory; error and debugging messages are written there. -The -debug=... command-line option controls debugging; running with just -debug or -debug=1 will turn +The `-debug=...` command-line option controls debugging; running with just `-debug` or `-debug=1` will turn on all categories (and give you a very large debug.log file). -The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt +The Qt code routes `qDebug()` output to debug.log under category "qt": run with `-debug=qt` to see it. -**testnet and regtest modes** +### Testnet and Regtest modes -Run with the -testnet option to run with "play coins" on the test network, if you +Run with the `-testnet` option to run with "play coins" on the test network, if you are testing multi-machine code that needs to operate across the internet. -If you are testing something that can run on one machine, run with the -regtest option. -In regression test mode, blocks can be created on-demand; see test/functional/ for tests -that run in -regtest mode. +If you are testing something that can run on one machine, run with the `-regtest` option. +In regression test mode, blocks can be created on-demand; see [test/functional/](/test/functional) for tests +that run in `-regtest` mode. + +### DEBUG_LOCKORDER + +Raptoreum Core is a multi-threaded application, and deadlocks or other +multi-threading bugs can be very difficult to track down. The `--enable-debug` +configure option adds `-DDEBUG_LOCKORDER` to the compiler flags. This inserts +run-time checks to keep track of which locks are held, and adds warnings to the +debug.log file if inconsistencies are detected. + +### Valgrind suppressions file + +Valgrind is a programming tool for memory debugging, memory leak detection, and +profiling. The repo contains a Valgrind suppressions file +([`valgrind.supp`](https://github.com/Raptor3um/raptoreum/blob/master/contrib/valgrind.supp)) +which includes known Valgrind warnings in our dependencies that cannot be fixed +in-tree. Example use: + +```shell +$ valgrind --suppressions=contrib/valgrind.supp src/test/test_raptoreum +$ valgrind --suppressions=contrib/valgrind.supp --leak-check=full \ + --show-leak-kinds=all src/test/test_raptoreu --log_level=test_suite +$ valgrind -v --leak-check=full src/raptoreumd -printtoconsole +``` -**DEBUG_LOCKORDER** +### Compiling for test coverage -Raptoreum Core is a multithreaded application, and deadlocks or other multithreading bugs -can be very difficult to track down. Compiling with -DDEBUG_LOCKORDER (configure -CXXFLAGS="-DDEBUG_LOCKORDER -g") inserts run-time checks to keep track of which locks -are held, and adds warnings to the debug.log file if inconsistencies are detected. +LCOV can be used to generate a test coverage report based upon `make check` +execution. LCOV must be installed on your system (e.g. the `lcov` package +on Debian/Ubuntu). + +To enable LCOV report generation during test runs: + +```shell +./configure --enable-lcov +make +make cov + +# A coverage report will now be accessible at `./test_raptoreum.coverage/index.html`. +``` + +**Sanitizers** + +Raptoreum Core can be compiled with various "sanitizers" enabled, which add +instrumentation for issues regarding things like memory safety, thread race +conditions, or undefined behavior. This is controlled with the +`--with-sanitizers` configure flag, which should be a comma separated list of +sanitizers to enable. The sanitizer list should correspond to supported +`-fsanitize=` options in your compiler. These sanitizers have runtime overhead, +so they are most useful when testing changes or producing debugging builds. + +Some examples: + +```bash +# Enable both the address sanitizer and the undefined behavior sanitizer +./configure --with-sanitizers=address,undefined + +# Enable the thread sanitizer +./configure --with-sanitizers=thread +``` + +**Valgrind suppressions file** + +Valgrind is a programming tool for memory debugging, memory leak detection, and +profiling. The repo contains a Valgrind suppressions file +([`valgrind.supp`](https://github.com/Raptor3um/raptoreum/blob/master/contrib/valgrind.supp)) +which includes known Valgrind warnings in our dependencies that cannot be fixed +in-tree. Example use: + +```shell +$ valgrind --suppressions=contrib/valgrind.supp src/test/test_raptoreum +$ valgrind --suppressions=contrib/valgrind.supp --leak-check=full \ + --show-leak-kinds=all src/test/test_raptoreum --log_level=test_suite +$ valgrind -v --leak-check=full src/raptoreumd -printtoconsole +``` + +**compiling for test coverage** + +LCOV can be used to generate a test coverage report based upon `make check` +execution. LCOV must be installed on your system (e.g. the `lcov` package +on Debian/Ubuntu). + +To enable LCOV report generation during test runs: + +```shell +./configure --enable-lcov +make +make cov + +# A coverage report will now be accessible at `./test_raptoreum.coverage/index.html`. +``` Locking/mutex usage notes ------------------------- The code is multi-threaded, and uses mutexes and the -LOCK/TRY_LOCK macros to protect data structures. +`LOCK` and `TRY_LOCK` macros to protect data structures. -Deadlocks due to inconsistent lock ordering (thread 1 locks cs_main -and then cs_wallet, while thread 2 locks them in the opposite order: -result, deadlock as each waits for the other to release its lock) are -a problem. Compile with -DDEBUG_LOCKORDER to get lock order -inconsistencies reported in the debug.log file. +Deadlocks due to inconsistent lock ordering (thread 1 locks `cs_main` and then +`cs_wallet`, while thread 2 locks them in the opposite order: result, deadlock +as each waits for the other to release its lock) are a problem. Compile with +`-DDEBUG_LOCKORDER` (or use `--enable-debug`) to get lock order inconsistencies +reported in the debug.log file. Re-architecting the core code so there are better-defined interfaces between the various components is a goal, with any necessary locking -done by the components (e.g. see the self-contained CKeyStore class -and its cs_KeyStore lock for example). +done by the components (e.g. see the self-contained `CBasicKeyStore` class +and its `cs_KeyStore` lock for example). Threads ------- @@ -185,8 +356,6 @@ Threads - DumpAddresses : Dumps IP addresses of nodes to peers.dat. -- ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms. - - ThreadRPCServer : Remote procedure call handler, listens on port 9998 for connections and services them. - Shutdown : Does an orderly shutdown of everything. @@ -264,7 +433,7 @@ Wallet - *Rationale*: In RPC code that conditionally uses the wallet (such as `validateaddress`) it is easy to forget that global pointer `pwalletMain` - can be NULL. See `test/functional/disablewallet.py` for functional tests + can be nullptr. See `test/functional/disablewallet.py` for functional tests exercising the API with `-disablewallet` - Include `db_cxx.h` (BerkeleyDB header) only when `ENABLE_WALLET` is set @@ -290,6 +459,10 @@ General C++ `unique_ptr` for allocations in a function. - *Rationale*: This avoids memory and resource leaks, and ensures exception safety +- Use `MakeUnique()` to construct objects owned by `unique_ptr`s + + - *Rationale*: `MakeUnique` is concise and ensures exceoption safety in complex exopressions. + `MakeUnique` is a temporary project local implementation of `std::make_unique` (C++14). C++ data structures -------------------- @@ -312,12 +485,33 @@ C++ data structures - Vector bounds checking is only enabled in debug mode. Do not rely on it -- Make sure that constructors initialize all fields. If this is skipped for a - good reason (i.e., optimization on the critical path), add an explicit - comment about this +- Initialize all non-static class members where they are defined. + If this is skipped for a good reason (i.e., optimization on the critical + path), add an explicit comment about this - *Rationale*: Ensure determinism by avoiding accidental use of uninitialized values. Also, static analyzers balk about this. + Initializing the members in the declaration makes it easy to + spot uninitialized ones. + +```cpp +class A +{ + uint32_t m_count{0}; +} +``` + +- By default, declare single-argument constructors `explicit`. + + - *Rationale*: This is a precaution to avoid unintended conversions that might + arise when single-argument constructors are used as implicit conversion + functions. + +- By default, declare single-argument constructors `explicit`. + + - *Rationale*: This is a precaution to avoid unintended conversions that might + arise when single-argument constructors are used as implicit conversion + functions. - Use explicitly signed or unsigned `char`s, or even better `uint8_t` and `int8_t`. Do not use bare `char` unless it is to pass to a third-party API. @@ -329,6 +523,13 @@ C++ data structures - *Rationale*: Easier to understand what is happening, thus easier to spot mistakes, even for those that are not language lawyers + - Prefer signed ints and do not mix signed and unsigned integers. If an unsigned int is used, it should have a good + reason. The fact a value will never be negative is not a good reason. The most common reason will be that mod two + arithmetic is needed, such as in cryptographic primitives. If you need to make sure that some value is always + a non-negative one, use an assertion or exception instead. + - *Rationale*: When signed ints are mixed with unsigned ints, the signed int is converted to a unsigned + int. If the signed int is some negative `N`, it'll become `INT_MAX - N` which might cause unexpected consequences. + Strings and formatting ------------------------ @@ -346,7 +547,35 @@ Strings and formatting - Use `ParseInt32`, `ParseInt64`, `ParseUInt32`, `ParseUInt64`, `ParseDouble` from `utilstrencodings.h` for number parsing - - *Rationale*: These functions do overflow checking, and avoid pesky locale issues + - *Rationale*: These functions do overflow checking, and avoid pesky locale issues. + +- Avoid using locale dependent functions if possible. You can use the provided + [`lint-locale-dependence.sh`](/contrib/devtools/lint-locale-dependence.sh) + to check for accidental use of locale dependent functions. + + - *Rationale*: Unnecessary locale dependence can cause bugs that are very tricky to isolate and fix. + + - These functions are known to be locale dependent: + `alphasort`, `asctime`, `asprintf`, `atof`, `atoi`, `atol`, `atoll`, `atoq`, + `btowc`, `ctime`, `dprintf`, `fgetwc`, `fgetws`, `fprintf`, `fputwc`, + `fputws`, `fscanf`, `fwprintf`, `getdate`, `getwc`, `getwchar`, `isalnum`, + `isalpha`, `isblank`, `iscntrl`, `isdigit`, `isgraph`, `islower`, `isprint`, + `ispunct`, `isspace`, `isupper`, `iswalnum`, `iswalpha`, `iswblank`, + `iswcntrl`, `iswctype`, `iswdigit`, `iswgraph`, `iswlower`, `iswprint`, + `iswpunct`, `iswspace`, `iswupper`, `iswxdigit`, `isxdigit`, `mblen`, + `mbrlen`, `mbrtowc`, `mbsinit`, `mbsnrtowcs`, `mbsrtowcs`, `mbstowcs`, + `mbtowc`, `mktime`, `putwc`, `putwchar`, `scanf`, `snprintf`, `sprintf`, + `sscanf`, `stoi`, `stol`, `stoll`, `strcasecmp`, `strcasestr`, `strcoll`, + `strfmon`, `strftime`, `strncasecmp`, `strptime`, `strtod`, `strtof`, + `strtoimax`, `strtol`, `strtold`, `strtoll`, `strtoq`, `strtoul`, + `strtoull`, `strtoumax`, `strtouq`, `strxfrm`, `swprintf`, `tolower`, + `toupper`, `towctrans`, `towlower`, `towupper`, `ungetwc`, `vasprintf`, + `vdprintf`, `versionsort`, `vfprintf`, `vfscanf`, `vfwprintf`, `vprintf`, + `vscanf`, `vsnprintf`, `vsprintf`, `vsscanf`, `vswprintf`, `vwprintf`, + `wcrtomb`, `wcscasecmp`, `wcscoll`, `wcsftime`, `wcsncasecmp`, `wcsnrtombs`, + `wcsrtombs`, `wcstod`, `wcstof`, `wcstoimax`, `wcstol`, `wcstold`, + `wcstoll`, `wcstombs`, `wcstoul`, `wcstoull`, `wcstoumax`, `wcswidth`, + `wcsxfrm`, `wctob`, `wctomb`, `wctrans`, `wctype`, `wcwidth`, `wprintf` - For `strprintf`, `LogPrint`, `LogPrintf` formatting characters don't need size specifiers @@ -365,11 +594,11 @@ member name: ```c++ class AddressBookPage { - Mode mode; + Mode m_mode; } AddressBookPage::AddressBookPage(Mode _mode) : - mode(_mode) + m_mode(_mode) ... ``` @@ -413,9 +642,14 @@ Source code organization - *Rationale*: Shorter and simpler header files are easier to read, and reduce compile time +- Use only the lowercase alphanumerics (`a-z0-9`), underscore (`_`) and hyphen (`-`) in source code filenames. + + - *Rationale*: `grep`:ing and auto-completing filenames is easier when using a consistent + naming pattern. Potential problems when building on case-insensitive filesystems are + avoided when using only lowercase characters in source code filenames. + - Every `.cpp` and `.h` file should `#include` every header file it directly uses classes, functions or other - definitions from, even if those headers are already included indirectly through other headers. One exception - is that a `.cpp` file does not need to re-include the includes already included in its corresponding `.h` file. + definitions from, even if those headers are already included indirectly through other headers. - *Rationale*: Excluding headers because they are already indirectly included results in compilation failures when those indirect dependencies change. Furthermore, it obscures what the real code @@ -431,16 +665,34 @@ Source code organization ```c++ namespace mynamespace { - ... +... } // namespace mynamespace namespace { - ... +... } // namespace ``` - *Rationale*: Avoids confusion about the namespace context +- Use `#include ` bracket syntax instead of + `#include "primitives/transactions.h"` quote syntax. + + - *Rationale*: Bracket syntax is less ambiguous because the preprocessor + searches a fixed list of include directories without taking location of the + source file into account. This allows quoted includes to stand out more when + the location of the source file actually is relevant. + +- Use include guards to avoid the problem of double inclusion. The header file + `foo/bar.h` should use the include guard identifier `BITCOIN_FOO_BAR_H`, e.g. + +```c++ +#ifndef BITCOIN_FOO_BAR_H +#define BITCOIN_FOO_BAR_H +... +#endif // BITCOIN_FOO_BAR_H +``` + GUI ----- @@ -450,6 +702,19 @@ GUI should not interact with the user. That's where View classes come in. The converse also holds: try to not directly access core data structures from Views. +- Avoid adding slow or blocking code in the GUI thread. In particular do not + add new `interfaces::Node` and `interfaces::Wallet` method calls, even if they + may be fast now, in case they are changed to lock or communicate across + processes in the future. + + Prefer to offload work from the GUI thread to worker threads (see + `RPCExecutor` in console code as an example) or take other steps (see + https://doc.qt.io/archives/qq/qq27-responsive-guis.html) to keep the GUI + responsive. + + - *Rationale*: Blocking the GUI thread can increase latency, and lead to + hangs and deadlocks. + Subtrees ---------- @@ -463,16 +728,23 @@ Others are external projects without a tight relationship with our project. Cha be sent upstream but bugfixes may also be prudent to PR against Raptoreum Core so that they can be integrated quickly. Cosmetic changes should be purely taken upstream. -There is a tool in contrib/devtools/git-subtree-check.sh to check a subtree directory for consistency with +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 + - 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 maintaned by Core contributors. +- src/crc32c + - Used by leveldb for hardware acceleration of CRC32C checksums for data integrity. + - Upstream at https://github.com/google/crc32c ; Maintained by Google. + +- src/secp256k1 + - 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. @@ -480,6 +752,52 @@ Current subtrees include: - src/univalue - Upstream at https://github.com/jgarzik/univalue ; report important PRs to Core to avoid delay. +Upgrading LevelDB +--------------------- + +Extra care must be taken when upgrading LevelDB. This section explains issues +you must be aware of. + +### File Descriptor Counts + +In most configurations we use the default LevelDB value for `max_open_files`, +which is 1000 at the time of this writing. If LevelDB actually uses this many +file descriptors it will cause problems with Bitcoin's `select()` loop, because +it may cause new sockets to be created where the fd value is >= 1024. For this +reason, on 64-bit Unix systems we rely on an internal LevelDB optimization that +uses `mmap()` + `close()` to open table files without actually retaining +references to the table file descriptors. If you are upgrading LevelDB, you must +sanity check the changes to make sure that this assumption remains valid. + +In addition to reviewing the upstream changes in `env_posix.cc`, you can use `lsof` to +check this. For example, on Linux this command will show open `.ldb` file counts: + +```bash +$ lsof -p $(pidof raptoreumd) |\ + awk 'BEGIN { fd=0; mem=0; } /ldb$/ { if ($4 == "mem") mem++; else fd++ } END { printf "mem = %s, fd = %s\n", mem, fd}' +mem = 119, fd = 0 +``` + +The `mem` value shows how many files are mmap'ed, and the `fd` value shows you +many file descriptors these files are using. You should check that `fd` is a +small number (usually 0 on 64-bit hosts). + +See the notes in the `SetMaxOpenFiles()` function in `dbwrapper.cc` for more +details. + +### Consensus Compatibility + +It is possible for LevelDB changes to inadvertently change consensus +compatibility between nodes. This happened in Bitcoin 0.8 (when LevelDB was +first introduced). When upgrading LevelDB you should review the upstream changes +to check for issues affecting consensus compatibility. + +For example, if LevelDB had a bug that accidentally prevented a key from being +returned in an edge case, and that bug was fixed upstream, the bug "fix" would +be an incompatible consensus change. In this situation the correct behavior +would be to revert the upstream fix before applying the updates to Bitcoin's +copy of LevelDB. In general you should be wary of any upstream changes affecting +what data is returned from LevelDB queries. Git and GitHub tips --------------------- @@ -529,6 +847,26 @@ Git and GitHub tips or `git fetch upstream-pull`. Afterwards, you can use `upstream-pull/NUMBER/head` in arguments to `git show`, `git checkout` and anywhere a commit id would be acceptable to see the changes from pull request NUMBER. +Scripted diffs +-------------- + +For reformatting and refactoring commits where the changes can be easily automated using a bash script, we use +scripted-diff commits. The bash script is included in the commit message and our Travis CI job checks that +the result of the script is identical to the commit. This aids reviewers since they can verify that the script +does exactly what it's supposed to do. It is also helpful for rebasing (since the same script can just be re-run +on the new master commit). + +To create a scripted-diff: + +- start the commit message with `scripted-diff:` (and then a description of the diff on the same line) +- in the commit message include the bash script between lines containing just the following text: + - `-BEGIN VERIFY SCRIPT-` + - `-END VERIFY SCRIPT-` + +The scripted-diff is verified by the tool `test/lint/commit-script-check.sh` + +Commit [`bb81e173`](https://github.com/bitcoin/bitcoin/commit/bb81e173) is an example of a scripted-diff. + RPC interface guidelines -------------------------- @@ -558,20 +896,18 @@ A few guidelines for introducing and reviewing new RPC interfaces: is specified as-is in BIP22. - Missing arguments and 'null' should be treated the same: as default values. If there is no - default value, both cases should fail in the same way. + default value, both cases should fail in the same way. The easiest way to follow this + guideline is detect unspecified arguments with `params[x].isNull()` instead of + `params.size() <= x`. The former returns true if the argument is either null or missing, + while the latter returns true if is missing, and false if it is null. - *Rationale*: Avoids surprises when switching to name-based arguments. Missing name-based arguments are passed as 'null'. - - *Exception*: Many legacy exceptions to this exist, one of the worst ones is - `getbalance` which follows a completely different code path based on the - number of arguments. We are still in the process of cleaning these up. Do not introduce - new ones. - - Try not to overload methods on argument type. E.g. don't make `getblock(true)` and `getblock("hash")` do different things. - - *Rationale*: This is impossible to use with `bitcoin-cli`, and can be surprising to users. + - *Rationale*: This is impossible to use with `raptoreum-cli`, and can be surprising to users. - *Exception*: Some RPC calls can take both an `int` and `bool`, most notably when a bool was switched to a multi-value, or due to other historical reasons. **Always** have false map to 0 and @@ -590,14 +926,43 @@ A few guidelines for introducing and reviewing new RPC interfaces: - Add every non-string RPC argument `(method, idx, name)` to the table `vRPCConvertParams` in `rpc/client.cpp`. - - *Rationale*: `bitcoin-cli` and the GUI debug console use this table to determine how to + - *Rationale*: `raptoreum-cli` and the GUI debug console use this table to determine how to convert a plaintext command line to JSON. If the types don't match, the method can be unusable from there. - A RPC method must either be a wallet method or a non-wallet method. Do not - introduce new methods such as `getinfo` and `signrawtransaction` that differ - in behavior based on presence of a wallet. + introduce new methods such as `signrawtransaction` that differ in behavior + based on presence of a wallet. - *Rationale*: as well as complicating the implementation and interfering with the introduction of multi-wallet, wallet and non-wallet code should be separated to avoid introducing circular dependencies between code units. + +- Try to make the RPC response a JSON object. + + - *Rationale*: If a RPC response is not a JSON object then it is harder to avoid API breakage if + new data in the response is needed. + +- Wallet RPCs call BlockUntilSyncedToCurrentChain to maintain consistency with + `getblockchaininfo`'s state immediately prior to the call's execution. Wallet + RPCs whose behavior does *not* depend on the current chainstate may omit this + call. + + - *Rationale*: In previous versions of Raptoreum Core, the wallet was always + in-sync with the chainstate (by virtue of them all being updated in the + same cs_main lock). In order to maintain the behavior that wallet RPCs + return results as of at least the highest best-known block an RPC + client may be aware of prior to entering a wallet RPC call, we must block + until the wallet is caught up to the chainstate as of the RPC call's entry. + This also makes the API much easier for RPC clients to reason about. + +- Be aware of RPC method aliases and generally avoid registering the same + callback function pointer for different RPCs. + + - *Rationale*: RPC methods registered with the same function pointer will be + considered aliases and only the first method name will show up in the + `help` rpc command list. + + - *Exception*: Using RPC method aliases may be appropriate in cases where a + new RPC is replacing a deprecated RPC, to avoid both RPCs confusingly + showing up in the command list. diff --git a/doc/files.md b/doc/files.md index 3a8a2b643a..487bd1c2eb 100644 --- a/doc/files.md +++ b/doc/files.md @@ -12,12 +12,16 @@ * evodb/*: special txes and quorums database * fee_estimates.dat: stores statistics used to estimate minimum transaction fees and priorities required for confirmation * governance.dat: stores data for governance obgects +* indexes/txindex/*: optional transaction index database (LevelDB); since 0.17.0 * llmq/*: quorum signatures database * mempool.dat: dump of the mempool's transactions * mncache.dat: stores data for smartnode list * netfulfilled.dat: stores data about recently made network requests * peers.dat: peer IP address database (custom format) -* wallet.dat: personal wallet (BDB) with keys and transactions +* wallet.dat: personal wallet (BDB) with keys and transactions; moved to wallets/ directory on new installs since 0.16.0 +* wallets/database/*: BDB database environment; used for wallets since 0.16.0 +* wallets/db.log: wallet database log file; since 0.16.0 +* wallets/wallet.dat: personal wallet (BDB) with keys and transactions; since 0.16.0 * .cookie: session RPC authentication cookie (written at start when cookie authentication is used, deleted on shutdown) * onion_private_key: cached Tor hidden service private key for `-listenonion` * guisettings.ini.bak: backup of former GUI settings after `-resetguisettings` is used diff --git a/doc/gitian-building.md b/doc/gitian-building.md index fc2902a04f..71ed40759b 100644 --- a/doc/gitian-building.md +++ b/doc/gitian-building.md @@ -314,8 +314,8 @@ Clone the git repositories for Raptoreum Core and Gitian. ```bash git clone https://github.com/devrandom/gitian-builder.git -git clone https://github.com/raptoreum/raptoreum -git clone https://github.com/raptoreum/gitian.sigs.git +git clone https://github.com/raptor3um/raptoreum +git clone https://github.com/raptor3um/gitian.sigs.git ``` Setting up the Gitian image @@ -381,7 +381,7 @@ Output from `gbuild` will look something like remote: Total 57959 (delta 0), reused 0 (delta 0), pack-reused 57958 Receiving objects: 100% (57959/57959), 53.76 MiB | 484.00 KiB/s, done. Resolving deltas: 100% (41590/41590), done. - From https://github.com/raptoreum/raptoreum + From https://github.com/raptor3um/raptoreum ... (new tags, new branch etc) --- Building for bionic amd64 --- Stopping target if it is up @@ -457,7 +457,7 @@ Then when building, override the remote URLs that gbuild would otherwise pull fr ```bash cd /some/root/path/ -git clone https://github.com/raptoreum/raptoreum-detached-sigs.git +git clone https://github.com/raptor3um/raptoreum-detached-sigs.git BTCPATH=/some/root/path/raptoreum SIGPATH=/some/root/path/raptoreum-detached-sigs @@ -489,6 +489,6 @@ Uploading signatures (not yet implemented) --------------------- In the future it will be possible to push your signatures (both the `.assert` and `.assert.sig` files) to the -[raptoreum/gitian.sigs](https://github.com/raptoreum/gitian.sigs/) repository, or if that's not possible to create a pull +[raptoreum/gitian.sigs](https://github.com/raptor3um/gitian.sigs/) repository, or if that's not possible to create a pull request. There will be an official announcement when this repository is online. diff --git a/doc/init.md b/doc/init.md index 33f4a75a03..b5f5080a1d 100644 --- a/doc/init.md +++ b/doc/init.md @@ -10,14 +10,14 @@ can be found in the contrib/init folder. contrib/init/raptoreumd.conf: Upstart service configuration file contrib/init/raptoreumd.init: CentOS compatible SysV style init script -1. Service User +Service User --------------------------------- All three Linux startup configurations assume the existence of a "raptoreumcore" user and group. They must be created before attempting to use these scripts. The OS X configuration assumes raptoreumd will be set up for the current user. -2. Configuration +Configuration --------------------------------- At a bare minimum, raptoreumd requires that the rpcpassword setting be set @@ -46,10 +46,10 @@ relative to the data directory. `wallet` *only* supports relative paths. For an example configuration file that describes the configuration settings, see `contrib/debian/examples/raptoreum.conf`. -3. Paths +Paths --------------------------------- -3a) Linux +### Linux All three configurations assume several paths that might need to be adjusted. @@ -65,17 +65,17 @@ reasons to make the configuration file and data directory only readable by the raptoreumcore user and group. Access to raptoreum-cli and other raptoreumd rpc clients can then be controlled by group membership. -3b) Mac OS X +### Mac OS X Binary: `/usr/local/bin/raptoreumd` Configuration file: `~/Library/Application Support/RaptoreumCore/raptoreum.conf` Data directory: `~/Library/Application Support/RaptoreumCore` Lock file: `~/Library/Application Support/RaptoreumCore/.lock` -4. Installing Service Configuration +Installing Service Configuration ----------------------------------- -4a) systemd +### systemd Installing this .service file consists of just copying it to /usr/lib/systemd/system directory, followed by the command @@ -84,14 +84,14 @@ Installing this .service file consists of just copying it to To test, run `systemctl start raptoreumd` and to enable for system startup run `systemctl enable raptoreumd` -4b) OpenRC +### OpenRC Rename raptoreumd.openrc to raptoreumd and drop it in /etc/init.d. Double check ownership and permissions and make it executable. Test it with `/etc/init.d/raptoreumd start` and configure it to run on startup with `rc-update add raptoreumd` -4c) Upstart (for Debian/Ubuntu based distributions) +### Upstart (for Debian/Ubuntu based distributions) Drop raptoreumd.conf in /etc/init. Test by running `service raptoreumd start` it will automatically start on reboot. @@ -99,7 +99,7 @@ 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. -4d) CentOS +### CentOS Copy raptoreumd.init to /etc/init.d/raptoreumd. Test by running `service raptoreumd start`. @@ -107,7 +107,7 @@ Using this script, you can adjust the path and flags to the raptoreumd program b setting the RAPTOREUMD and FLAGS environment variables in the file /etc/sysconfig/raptoreumd. You can also use the DAEMONOPTS environment variable here. -4e) Mac OS X +### Mac OS X Copy org.raptoreum.raptoreumd.plist into ~/Library/LaunchAgents. Load the launch agent by running `launchctl load ~/Library/LaunchAgents/org.raptoreum.raptoreumd.plist`. @@ -118,7 +118,7 @@ NOTE: This approach is intended for those wanting to run raptoreumd as the curre You will need to modify org.raptoreum.raptoreumd.plist if you intend to use it as a Launch Daemon with a dedicated raptoreumcore user. -5. Auto-respawn +Auto-respawn ----------------------------------- Auto respawning is currently only configured for Upstart and systemd. diff --git a/doc/instantsend.md b/doc/instantsend.md index dfd5501431..963405a878 100644 --- a/doc/instantsend.md +++ b/doc/instantsend.md @@ -12,8 +12,8 @@ When a "Transaction Lock" occurs the hash of the related transaction is broadcas * `zmqpubhashtxlock`: publishes the transaction hash when locked via InstantSend This mechanism has been integrated into Bitcore-Node-Raptoreum which allows for notification to be broadcast through Insight API in one of two ways: -* WebSocket: [https://github.com/raptoreum/insight-api-raptoreum#web-socket-api](https://github.com/raptoreum/insight-api-raptoreum#web-socket-api) -* API: [https://github.com/raptoreum/insight-api-raptoreum#instantsend-transactions](https://github.com/raptoreum/insight-api-raptoreum#instantsend-transactions) +* WebSocket: [https://github.com/raptor3um/insight-api-raptoreum#web-socket-api](https://github.com/raptor3um/insight-api-raptoreum#web-socket-api) +* API: [https://github.com/raptor3um/insight-api-raptoreum#instantsend-transactions](https://github.com/raptor3um/insight-api-raptoreum#instantsend-transactions) #### Command line option diff --git a/doc/keepass.md b/doc/keepass.md deleted file mode 100644 index 515df70567..0000000000 --- a/doc/keepass.md +++ /dev/null @@ -1,58 +0,0 @@ -### What is it about - -More info regarding KeePass: http://keepass.info/ - -KeePass integration use KeePassHttp (https://github.com/pfn/keepasshttp/) to facilitate communications between the client and KeePass. KeePassHttp is a plugin for KeePass 2.x and provides a secure means of exposing KeePass entries via HTTP for clients to consume. - -The implementation is dependent on the following: - - crypter.h for AES encryption helper functions. - - rpcprotocol.h for handling RPC communications. Could only be used partially however due some static values in the code. - - OpenSSL for base64 encoding. regular util.h libraries were not used for base64 encoding/decoding since they do not use secure allocation. - - JSON Spirit for reading / writing RPC communications - -### A note about security - -Every connection to KeePassHTTP server is done via plain HTTP and even though protocol uses some internal encryption it should not be considered to be a highly secure one. This protocol has certain flaw which allow an attacker to decrypt your passwords when they manage to intercept communication between a KeePassHTTP server over a network connection (see [here](https://github.com/pfn/keepasshttp/issues/258) and [here](https://github.com/keepassxreboot/keepassxc/issues/147)). Raptoreum Core therefore strictly limits communication between itself and KeePassHttp to your local computer. As long as your computer is not compromised, your wallet passphrase is as safe as if you would enter it directly. - -### What's new - -The following new options are available for raptoreumd and raptoreum-qt: - - _-keepass_ Use KeePass 2 integration using KeePassHttp plugin (default: 0) - - _-keepassport=_ Connect to KeePassHttp on port (default: 19455) - - _-keepasskey=_ KeePassHttp key for AES encrypted communication with KeePass - - _-keepassid=_ KeePassHttp id for the established association - - _-keepassname=_ Name to construct url for KeePass entry that stores the wallet passphrase - -The following rpc commands are available: - - - _keepass genkey_: generates a base64 encoded 256 bit AES key that can be used for the communication with KeePassHttp. Only necessary for manual configuration. Use init for automatic configuration. - - _keepass init_: sets up the association between raptoreumd and keepass by generating an AES key and sending an association message to KeePassHttp. This will trigger KeePass to ask for an Id for the association. Returns the association and the base64 encoded string for the AES key. - - _keepass setpassphrase_: updates the passphrase in KeePassHttp to a new value. This should match the passphrase you intend to use for the wallet. Please note that the standard RPC commands _walletpassphrasechange_ and the wallet encrption from the QT GUI already send the updates to KeePassHttp, so this is only necessary for manual manipulation of the password. - -### How to setup - -Sample initialization flow from _raptoreum-qt_ console (this needs to be done only once to set up the association): - - - Have KeePass running with an open database - - Start _raptoreum-qt_ - - Open console - - Type "_keepass init_" in raptoreum-qt console - - Keepass pops up and asks for an association id, fill that in, for example, "_mydrkwallet_" - - You should get a response like this "_Association successful. Id: mydrkwalletraptoreum - Key: AgQkcs6cI7v9tlSYKjG/+s8wJrGALHl3jLosJpPLzUE=_" - - Edit _raptoreum.conf_ and fill in these values -``` -keepass=1 -keepasskey=AgQkcs6cI7v9tlSYKjG/+s8wJrGALHl3jLosJpPLzUE= -keepassid=mydrkwallet -keepassname=testwallet -``` - - Restart _raptoreum-qt_ - -At this point, the association is made. The next action depends on your particular situation: - - - current wallet is not yet encrypted. Encrypting the wallet will trigger the integration and stores the password in KeePass (Under the '_KeePassHttp Passwords_' group, named after _keepassname_. - - current wallet is already encrypted: use "_keepass setpassphrase_" to store the passphrase in KeePass. - -At this point, the passphrase is stored in KeePassHttp. When Unlocking the wallet, one can use _keepass_ as the passphrase to trigger retrieval of the password. This works from the RPC commands as well as the GUI. - -Extended guide with screenshots is also available: https://www.raptoreum.org/forum/threads/keepass-integration.3620/ diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am index e05f813665..556c0ace1c 100644 --- a/doc/man/Makefile.am +++ b/doc/man/Makefile.am @@ -8,6 +8,6 @@ if ENABLE_QT dist_man1_MANS+=raptoreum-qt.1 endif -if BUILD_BITCOIN_UTILS - dist_man1_MANS+=raptoreum-cli.1 raptoreum-tx.1 +if BUILD_BITCOIN_CLI + dist_man1_MANS+=raptoreum-cli.1 endif diff --git a/doc/man/raptoreum-cli.1 b/doc/man/raptoreum-cli.1 index b02545bf0f..befa830e9f 100644 --- a/doc/man/raptoreum-cli.1 +++ b/doc/man/raptoreum-cli.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.11. -.TH RAPTOREUM-CLI "1" "November 2019" "raptoreum-cli v0.15.0.0" "User Commands" +.TH RAPTOREUM-CLI "1" "December 2021" "raptoreum-cli v0.17.0.0" "User Commands" .SH NAME -raptoreum-cli \- manual page for raptoreum-cli v0.15.0.0 +raptoreum-cli \- manual page for raptoreum-cli v0.17.0.0 .SH DESCRIPTION -Raptoreum Core RPC client version v0.15.0.0 +Raptoreum Core RPC client version v0.17.0.0 .SS "Usage:" .TP raptoreum\-cli [options] [params] @@ -20,74 +20,86 @@ This help message .HP \fB\-conf=\fR .IP -Specify configuration file (default: raptoreum.conf) +Specify configuration file. Relative paths will be prefixed by datadir +location. (default: raptoreum.conf) .HP \fB\-datadir=\fR .IP Specify data directory -.PP -Chain selection options: .HP -\fB\-testnet\fR +\fB\-getinfo\fR .IP -Use the test chain -.HP -\fB\-devnet=\fR -.IP -Use devnet chain with provided name -.HP -\fB\-regtest\fR -.IP -Enter regression test mode, which uses a special chain in which blocks -can be solved instantly. This is intended for regression testing -tools and app development. +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\-rpcport=\fR +\fB\-rpcpassword=\fR .IP -Connect to JSON\-RPC on (default: 9998 or testnet: 19998) +Password for JSON\-RPC connections .HP -\fB\-rpcwait\fR +\fB\-rpcport=\fR .IP -Wait for RPC server to start +Connect to JSON\-RPC on (default: 9998 or testnet: 19998) .HP \fB\-rpcuser=\fR .IP Username for JSON\-RPC connections .HP -\fB\-rpcpassword=\fR +\fB\-rpcwait\fR .IP -Password for JSON\-RPC connections +Wait for RPC server to start .HP -\fB\-rpcclienttimeout=\fR +\fB\-rpcwallet=\fR .IP -Timeout in seconds during HTTP requests, or 0 for no timeout. (default: -900) +Send RPC for non\-default wallet on RPC server (needs to exactly match +corresponding \fB\-wallet\fR option passed to bitcoind) .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) +(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\-rpcwallet=\fR +\fB\-stdinrpcpass\fR +.TP +Read RPC password from standard input as a single line. +When combined .IP -Send RPC for non\-default wallet on RPC server (argument is wallet -filename in raptoreumd directory, required if raptoreumd/\-Qt runs -with multiple wallets) +with \fB\-stdin\fR, the first line from standard input is used for the +RPC password. +.PP +Chain selection options: +.HP +\fB\-devnet=\fR +.IP +Use devnet chain with provided name +.HP +\fB\-testnet\fR +.IP +Use the test chain .SH COPYRIGHT -Copyright (C) 2014-2020 The Dash Core developers -Copyright (C) 2009-2020 The Bitcoin Core developers +Copyright (C) 2014-2021 The Dash Core developers +Copyright (C) 2009-2021 The Bitcoin Core developers Please contribute if you find Raptoreum Core useful. Visit for further information about the software. -The source code is available from . +The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING diff --git a/doc/man/raptoreum-qt.1 b/doc/man/raptoreum-qt.1 index 0eb312bca2..75d4c2e833 100644 --- a/doc/man/raptoreum-qt.1 +++ b/doc/man/raptoreum-qt.1 @@ -1,9 +1,9 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.11. -.TH RAPTOREUM-QT "1" "November 2019" "raptoreum-qt v0.15.0.0" "User Commands" +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.48.3. +.TH RAPTOREUM-QT "1" "December 2021" "raptoreum-qt v0.17.0.0" "User Commands" .SH NAME -raptoreum-qt \- manual page for raptoreum-qt v0.15.0.0 +raptoreum-qt \- manual page for raptoreum-qt v0.17.0.0 .SH DESCRIPTION -Raptoreum Core version v0.15.0.0 (64\-bit) +Raptoreum Core version v0.17.0.0 (64\-bit) Usage: .IP raptoreum\-qt [command\-line options] @@ -13,32 +13,38 @@ raptoreum\-qt [command\-line options] .IP Print this help message and exit .HP -\fB\-version\fR -.IP -Print version 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\-blocknotify=\fR -.IP -Execute command when the best block changes (%s in cmd is replaced by -block hash) -.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: -000000000000000fb7b1e9b81700283dff0f7d87cf458e5edfdae00c669de661, +00000000000000105cfae44a995332d8ec256850ea33a1f7b700474e3dad82bc, testnet: -000000001015eb5ef86a8fe2b3074d947bc972c5befe32b28dd5ce915dc0d029) +0000009303aeadf8cf3812f5c869691dbd4cb118ad20e9bf553be434bafe6a52) +.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 (default: raptoreum.conf) +Specify configuration file. Relative paths will be prefixed by datadir +location. (default: raptoreum.conf) .HP \fB\-datadir=\fR .IP @@ -48,44 +54,45 @@ Specify data directory .IP Set database cache size in megabytes (4 to 16384, default: 300) .HP +\fB\-debuglogfile=\fR +.IP +Specify location of debug log file. Relative paths will be prefixed by a +net\-specific datadir location. (0 to disable; default: debug.log) +.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\-maxorphantxsize=\fR .IP Maximum total size of all orphan transactions in megabytes (default: 10) .HP -\fB\-maxmempool=\fR +\fB\-maxrecsigsage=\fR .IP -Keep the transaction memory pool below megabytes (default: 300) +Number of seconds to keep LLMQ recovery sigs (default: 604800) .HP \fB\-mempoolexpiry=\fR .IP Do not keep transactions in the mempool longer than hours (default: 336) .HP -\fB\-persistmempool\fR -.IP -Whether to save the mempool on shutdown and load on restart (default: 1) -.HP -\fB\-syncmempool\fR -.IP -Sync mempool from other nodes on start (default: 1) -.HP -\fB\-blockreconstructionextratxn=\fR -.IP -Extra transactions to keep in memory for compact block reconstructions -(default: 100) -.HP \fB\-par=\fR .IP -Set the number of script verification threads (\fB\-2\fR to 16, 0 = auto, <0 = +Set the number of script verification threads (\fB\-4\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 (default: raptoreumd.pid) +Specify pid file. Relative paths will be prefixed by a net\-specific +datadir location. (default: raptoreumd.pid) .HP \fB\-prune=\fR .IP @@ -93,51 +100,32 @@ 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, ->945 = automatically prune block files to stay under the -specified target size in MiB) +incompatible with \fB\-txindex\fR, \fB\-rescan\fR and \fB\-disablegovernance\fR=\fI\,false\/\fR. +Warning: Reverting this setting requires re\-downloading the +entire blockchain. (default: 0 = disable pruning blocks, 1 = +allow manual pruning via RPC, >945 = automatically prune block +files to stay under the specified target size in MiB) .HP -\fB\-reindex\-chainstate\fR -.IP -Rebuild chain state from the currently indexed blocks -.HP -\fB\-reindex\fR +\fB\-syncmempool\fR .IP -Rebuild chain state and block index from the blk*.dat files on disk +Sync mempool from other nodes on start (default: 1) .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: 1) -.HP -\fB\-addressindex\fR -.IP -Maintain a full address index, used to query for the balance, txids and -unspent outputs for addresses (default: 0) -.HP -\fB\-timestampindex\fR -.IP -Maintain a timestamp index for block hashes, used to query blocks hashes -by a range of timestamps (default: 0) -.HP -\fB\-spentindex\fR +\fB\-version\fR .IP -Maintain a full spent index, used to query the spending txid and input -index for an outpoint (default: 0) +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) +the `addnode` RPC command help for more info). This option can be +specified multiple times to add multiple nodes. .HP \fB\-allowprivatenet\fR .IP @@ -159,9 +147,10 @@ for IPv6 .HP \fB\-connect=\fR .IP -Connect only to the specified node(s); \fB\-connect\fR=\fI\,0\/\fR disables automatic +Connect only to the specified node; \fB\-connect\fR=\fI\,0\/\fR disables automatic connections (the rules for this peer are the same as for -\fB\-addnode\fR) +\fB\-addnode\fR). This option can be specified multiple times to connect +to multiple nodes. .HP \fB\-discover\fR .IP @@ -177,6 +166,10 @@ Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (def 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: 1) +.HP \fB\-externalip=\fR .IP Specify your own public address @@ -212,6 +205,11 @@ 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 @@ -219,17 +217,26 @@ Use separate SOCKS5 proxy to reach peers via Tor hidden services .HP \fB\-onlynet=\fR .IP -Only connect to nodes in network (ipv4, ipv6 or onion) -.HP -\fB\-permitbaremultisig\fR -.IP -Relay non\-P2SH multisig (default: 1) +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\-peertimeout=\fR +.IP +Specify p2p connection timeout in seconds. This option determines the +amount of time a peer may be inactive before the connection to it +is dropped. (minimum: 1, default: 60) +.HP +\fB\-permitbaremultisig\fR +.IP +Relay non\-P2SH multisig (default: 1) +.HP \fB\-port=\fR .IP Listen for connections on (default: 9999 or testnet: 19999) @@ -245,7 +252,19 @@ stream isolation (default: 1) .HP \fB\-seednode=\fR .IP -Connect to a node to retrieve peer addresses, and disconnect +Connect to a node to retrieve peer addresses, and disconnect. This +option can be specified multiple times to connect to multiple +nodes. +.HP +\fB\-socketevents=\fR +.IP +Socket events mode, which must be one of 'select', 'poll', 'epoll' or +\&'kqueue', depending on your system (default: Linux \- 'epoll', +FreeBSD/Apple \- 'kqueue', Windows \- 'select') +.HP +\fB\-socketevents=\fR +.IP +Socket events mode, which must be one of: 'select' (default: select) .HP \fB\-timeout=\fR .IP @@ -276,26 +295,157 @@ 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 +Indexing options: .HP -\fB\-maxuploadtarget=\fR +\fB\-addressindex\fR .IP -Tries to keep outbound traffic under the given target (in MiB per 24h), -0 = no limit (default: 0) +Maintain a full address index, used to query for the balance, txids and +unspent outputs for addresses (default: 0) +.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 +.HP +\fB\-spentindex\fR +.IP +Maintain a full spent index, used to query the spending txid and input +index for an outpoint (default: 0) +.HP +\fB\-timestampindex\fR +.IP +Maintain a timestamp index for block hashes, used to query blocks hashes +by a range of timestamps (default: 0) +.HP +\fB\-txindex\fR +.IP +Maintain a full transaction index, used by the getrawtransaction rpc +call (default: 1) +.PP +Masternode options: +.HP +\fB\-llmq\-data\-recovery=\fR +.IP +Enable automated quorum data recovery (default: 1) +.HP +\fB\-llmq\-qvvec\-sync=\fR: +.IP +Defines from which LLMQ type the masternode should sync quorum +verification vectors. Can be used multiple times with different +LLMQ types. : 0 (sync always from all quorums of the type +defined by ), 1 (sync from all quorums of the type +defined by if a member of any of the quorums) +.HP +\fB\-masternodeblsprivkey=\fR +.IP +Set the masternode BLS private key and enable the client to act as a +masternode +.HP +\fB\-platform\-user=\fR +.IP +Set the username for the "platform user", a restricted user intended to +be used by Dash Platform, to the specified username. +.PP +Statsd options: +.HP +\fB\-statsenabled\fR +.IP +Publish internal stats to statsd (default: 0) +.HP +\fB\-statshost=\fR +.IP +Specify statsd host (default: 127.0.0.1) +.HP +\fB\-statshostname=\fR +.IP +Specify statsd host name (default: ) +.HP +\fB\-statsns=\fR +.IP +Specify additional namespace prefix (default: ) +.HP +\fB\-statsperiod=\fR +.IP +Specify the number of seconds between periodic measurements (default: +60) +.HP +\fB\-statsport=\fR +.IP +Specify statsd port (default: 8125) .PP Wallet options: .HP +\fB\-createwalletbackups=\fR +.IP +Number of automatic wallet backups (default: 10) +.HP \fB\-disablewallet\fR .IP Do not load the wallet and disable wallet RPC calls .HP +\fB\-instantsendnotify=\fR +.IP +Execute command when a wallet InstantSend transaction is successfully +locked (%s in cmd is replaced by TxID) +.HP \fB\-keypool=\fR .IP Set key pool size to (default: 1000) .HP -\fB\-fallbackfee=\fR +\fB\-rescan=\fR .IP -A fee rate (in RAPTOREUM/kB) that will be used when fee estimation has -insufficient data (default: 0.00001) +Rescan the block chain for missing wallet transactions on startup (1 = +start from wallet creation time, 2 = start from genesis block) +.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\-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\-walletbackupsdir=\fR +.IP +Specify full path to directory for automatic wallet backups (must exist) +.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\-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. +account owner and payment request information, 2 = drop tx meta +data) .HP \fB\-discardfee=\fR .IP @@ -305,6 +455,11 @@ 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 DASH/kB) that will be used when fee estimation has +insufficient data (default: 0.00001) +.HP \fB\-mintxfee=\fR .IP Fees (in RAPTOREUM/kB) smaller than this are considered zero fee for @@ -314,27 +469,15 @@ transaction creation (default: 0.00001) .IP Fee (in RAPTOREUM/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\-usehd\fR +\fB\-hdseed=\fR .IP -Use hierarchical deterministic key generation (HD) after BIP39/BIP44. -Only has effect during wallet creation/first start (default: 0) +User defined seed for HD wallet (should be in hex). Only has effect +during wallet creation/first start (default: randomly generated) .HP \fB\-mnemonic=\fR .IP @@ -346,67 +489,67 @@ wallet creation/first start (default: randomly generated) User defined mnemonic passphrase for HD wallet (BIP39). Only has effect during wallet creation/first start (default: empty string) .HP -\fB\-hdseed=\fR +\fB\-usehd\fR .IP -User defined seed for HD wallet (should be in hex). Only has effect -during wallet creation/first start (default: randomly generated) +Use hierarchical deterministic key generation (HD) after BIP39/BIP44. +Only has effect during wallet creation/first start (default: 0) .HP -\fB\-upgradewallet\fR +\fB\-keepass\fR .IP -Upgrade wallet to latest format on startup +Use KeePass 2 integration using KeePassHttp plugin (default: 0) .HP -\fB\-wallet=\fR +\fB\-keepassid=\fR .IP -Specify wallet file (within data directory) (default: wallet.dat) +KeePassHttp id for the established association .HP -\fB\-walletbroadcast\fR +\fB\-keepasskey=\fR .IP -Make the wallet broadcast transactions (default: 1) +KeePassHttp key for AES encrypted communication with KeePass .HP -\fB\-walletnotify=\fR +\fB\-keepassname=\fR .IP -Execute command when a wallet transaction changes (%s in cmd is replaced -by TxID) +Name to construct url for KeePass entry that stores the wallet +passphrase .HP -\fB\-zapwallettxes=\fR +\fB\-keepassport=\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. -account owner and payment request information, 2 = drop tx meta -data) +Connect to KeePassHttp on port (default: 19455) .HP -\fB\-createwalletbackups=\fR +\fB\-coinjoinamount=\fR .IP -Number of automatic wallet backups (default: 10) +Target CoinJoin balance (2\-21000000, default: 1000) .HP -\fB\-walletbackupsdir=\fR +\fB\-coinjoinautostart\fR .IP -Specify full path to directory for automatic wallet backups (must exist) +Start CoinJoin automatically (0\-1, default: 0) .HP -\fB\-keepass\fR +\fB\-coinjoindenomsgoal=\fR .IP -Use KeePass 2 integration using KeePassHttp plugin (default: 0) +Try to create at least N inputs of each denominated amount (10\-100000, +default: 50) .HP -\fB\-keepassport=\fR +\fB\-coinjoindenomshardcap=\fR .IP -Connect to KeePassHttp on port (default: 19455) +Create up to N inputs of each denominated amount (10\-100000, default: +300) .HP -\fB\-keepasskey=\fR +\fB\-coinjoinmultisession\fR .IP -KeePassHttp key for AES encrypted communication with KeePass +Enable multiple CoinJoin mixing sessions per block, experimental (0\-1, +default: 0) .HP -\fB\-keepassid=\fR +\fB\-coinjoinrounds=\fR .IP -KeePassHttp id for the established association +Use N separate masternodes for each denominated input to mix funds +(2\-16, default: 4) .HP -\fB\-keepassname=\fR +\fB\-coinjoinsessions=\fR .IP -Name to construct url for KeePass entry that stores the wallet -passphrase +Use N separate smartnodes in parallel to mix funds (1\-10, default: 4) .HP -\fB\-windowtitle=\fR +\fB\-enablecoinjoin\fR .IP -Wallet window title +Enable use of CoinJoin for funds stored in this wallet (0\-1, default: 0) .PP ZeroMQ notification options: .HP @@ -414,31 +557,46 @@ ZeroMQ notification options: .IP Enable publish hash block in
.HP -\fB\-zmqpubhashtx=\fR
-.IP -Enable publish hash transaction in
-.HP -\fB\-zmqpubhashtxlock=\fR
+\fB\-zmqpubhashgovernanceobject=\fR
.IP -Enable publish hash transaction (locked via InstantSend) in
+Enable publish hash of governance objects (like proposals) in
.HP \fB\-zmqpubhashgovernancevote=\fR
.IP Enable publish hash of governance votes in
.HP -\fB\-zmqpubhashgovernanceobject=\fR
-.IP -Enable publish hash of governance objects (like proposals) in
-.HP \fB\-zmqpubhashinstantsenddoublespend=\fR
.IP Enable publish transaction hashes of attempted InstantSend double spend in
.HP +\fB\-zmqpubhashrecoveredsig=\fR
+.IP +Enable publish message hash of recovered signatures (recovered by LLMQs) +in
+.HP +\fB\-zmqpubhashtx=\fR
+.IP +Enable publish hash transaction in
+.HP +\fB\-zmqpubhashtxlock=\fR
+.IP +Enable publish hash transaction (locked via InstantSend) in
+.HP \fB\-zmqpubrawblock=\fR
.IP Enable publish raw block in
.HP +\fB\-zmqpubrawinstantsenddoublespend=\fR
+.IP +Enable publish raw transactions of attempted InstantSend double spend in +
+.HP +\fB\-zmqpubrawrecoveredsig=\fR
+.IP +Enable publish raw recovered signatures (recovered by LLMQs) in +
+.HP \fB\-zmqpubrawtx=\fR
.IP Enable publish raw transaction in
@@ -446,18 +604,9 @@ Enable publish raw transaction in
\fB\-zmqpubrawtxlock=\fR
.IP Enable publish raw transaction (locked via InstantSend) in
-.HP -\fB\-zmqpubrawinstantsenddoublespend=\fR
-.IP -Enable publish raw transactions of attempted InstantSend double spend in -
.PP Debugging/Testing options: .HP -\fB\-uacomment=\fR -.IP -Append comment to the user agent string -.HP \fB\-debug=\fR .IP Output debugging information (default: 0, supplying is @@ -466,8 +615,8 @@ 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, chainlocks, gobject, instantsend, -keepass, llmq, llmq\-dkg, llmq\-sigs, mnpayments, mnsync, -privatesend, spork. +keepass, llmq, llmq\-dkg, llmq\-sigs, mnpayments, mnsync, coinjoin, +spork, netconn. .HP \fB\-debugexclude=\fR .IP @@ -475,109 +624,98 @@ 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\-disablegovernance\fR +.IP +Disable governance validation (0\-1, default: 0) +.HP \fB\-help\-debug\fR .IP Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR) .HP -\fB\-logips\fR +\fB\-highsubsidyblocks=\fR .IP -Include IP addresses in debug output (default: 0) +The number of blocks with a higher than normal subsidy to mine at the +start of a devnet (default: 0) .HP -\fB\-logtimestamps\fR +\fB\-highsubsidyfactor=\fR .IP -Prepend debug output with timestamp (default: 1) +The factor to multiply the normal block subsidy by while in the +highsubsidyblocks window of a devnet (default: 1) .HP -\fB\-maxtxfee=\fR +\fB\-llmqchainlocks=\fR .IP -Maximum total fees (in RAPTOREUM) to use in a single wallet transaction or -raw transaction; setting this too low may abort large -transactions (default: 0.10) +Override the default LLMQ type used for ChainLocks on a devnet. Allows +using ChainLocks with smaller LLMQs. (default: llmq_50_60) .HP -\fB\-printtoconsole\fR +\fB\-llmqdevnetparams=\fR .IP -Send trace/debug info to console instead of debug.log file +Override the default LLMQ size for the LLMQ_DEVNET quorum (default: +10:6) .HP -\fB\-printtodebuglog\fR +\fB\-llmqinstantsend=\fR .IP -Send trace/debug info to debug.log file (default: 1) +Override the default LLMQ type used for InstantSend on a devnet. Allows +using InstantSend with smaller LLMQs. (default: llmq_50_60) .HP -\fB\-shrinkdebugfile\fR +\fB\-llmqtestparams=\fR .IP -Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR) -.PP -Chain selection options: +Override the default LLMQ size for the LLMQ_TEST quorum (default: 3:2) .HP -\fB\-testnet\fR +\fB\-logips\fR .IP -Use the test chain +Include IP addresses in debug output (default: 0) .HP -\fB\-devnet=\fR +\fB\-logtimestamps\fR .IP -Use devnet chain with provided name +Prepend debug output with timestamp (default: 1) .HP -\fB\-litemode\fR +\fB\-maxtxfee=\fR .IP -Disable all Raptoreum specific functionality (Masternodes, PrivateSend, -InstantSend, Governance) (0\-1, default: 0) +Maximum total fees (in DASH) to use in a single wallet transaction or +raw transaction; setting this too low may abort large +transactions (default: 0.10) .HP -\fB\-sporkaddr=\fR +\fB\-minimumdifficultyblocks=\fR .IP -Override spork address. Only useful for regtest and devnet. Using this -on mainnet or testnet will ban you. +The number of blocks that can be mined with the minimum difficulty at +the start of a devnet (default: 0) .HP \fB\-minsporkkeys=\fR .IP Overrides minimum spork signers to change spork value. Only useful for regtest and devnet. Using this on mainnet or testnet will ban you. -.PP -Masternode options: -.HP -\fB\-smartnodeblsprivkey=\fR -.IP -Set the smartnode BLS private key and enable the client to act as a -smartnode -.PP -PrivateSend options: .HP -\fB\-enableprivatesend\fR -.IP -Enable use of PrivateSend for funds stored in this wallet (0\-1, default: -0) -.HP -\fB\-privatesendautostart\fR +\fB\-printtoconsole\fR .IP -Start PrivateSend automatically (0\-1, default: 0) +Send trace/debug info to console instead of debug.log file .HP -\fB\-privatesendmultisession\fR +\fB\-shrinkdebugfile\fR .IP -Enable multiple PrivateSend mixing sessions per block, experimental -(0\-1, default: 0) +Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR) .HP -\fB\-privatesendsessions=\fR +\fB\-sporkaddr=\fR .IP -Use N separate smartnodes in parallel to mix funds (1\-10, default: 4) +Override spork address. Only useful for regtest and devnet. Using this +on mainnet or testnet will ban you. .HP -\fB\-privatesendrounds=\fR +\fB\-sporkkey=\fR .IP -Use N separate smartnodes for each denominated input to mix funds -(2\-16, default: 4) +Set the private key to be used for signing spork messages. .HP -\fB\-privatesendamount=\fR +\fB\-uacomment=\fR .IP -Target PrivateSend balance (2\-21000000, default: 1000) +Append comment to the user agent string +.PP +Chain selection options: .HP -\fB\-privatesenddenoms=\fR +\fB\-devnet=\fR .IP -Create up to N inputs of each denominated amount (10\-100000, default: -300) -.PP -InstantSend options: +Use devnet chain with provided name .HP -\fB\-instantsendnotify=\fR +\fB\-testnet\fR .IP -Execute command when a wallet InstantSend transaction is successfully -locked (%s in cmd is replaced by TxID) +Use the test chain .PP Node relay options: .HP @@ -599,15 +737,15 @@ Maximum size of data in data carrier transactions we relay and mine Fees (in RAPTOREUM/kB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: 0.00001) .HP -\fB\-whitelistrelay\fR -.IP -Accept relayed transactions received from whitelisted peers even when -not relaying transactions (default: 1) -.HP \fB\-whitelistforcerelay\fR .IP Force relay of transactions from whitelisted peers even if they violate local relay policy (default: 1) +.HP +\fB\-whitelistrelay\fR +.IP +Accept relayed transactions received from whitelisted peers even when +not relaying transactions (default: 1) .PP Block creation options: .HP @@ -622,34 +760,16 @@ block creation. (default: 0.00001) .PP RPC server options: .HP -\fB\-server\fR -.IP -Accept command line and JSON\-RPC commands -.HP \fB\-rest\fR .IP Accept public REST requests (default: 0) .HP -\fB\-rpcbind=\fR[:port] -.IP -Bind to given address to listen for JSON\-RPC connections. 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, or if \fB\-rpcallowip\fR has been specified, -0.0.0.0 and :: i.e., all addresses) -.HP -\fB\-rpccookiefile=\fR -.IP -Location of the auth cookie (default: data dir) -.HP -\fB\-rpcuser=\fR -.IP -Username for JSON\-RPC connections -.HP -\fB\-rpcpassword=\fR +\fB\-rpcallowip=\fR .IP -Password for JSON\-RPC connections +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 @@ -660,21 +780,41 @@ 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, or if \fB\-rpcallowip\fR has been +specified, 0.0.0.0 and :: i.e., all addresses) +.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: 9998 or testnet: 19998) .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\-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 @@ -682,6 +822,29 @@ UI Options: .IP Choose data directory on startup (default: 0) .HP +\fB\-custom\-css\-dir\fR +.IP +Set a directory which contains custom css files. Those will be used as +stylesheets for the UI. +.HP +\fB\-font\-family\fR +.IP +Set the font family. Possible values: SystemDefault, Montserrat. +(default: SystemDefault) +.HP +\fB\-font\-scale\fR +.IP +Set a scale factor which gets applied to the base font size. Possible +range \fB\-100\fR (smallest fonts) to 100 (largest fonts). (default: 0) +.HP +\fB\-font\-weight\-bold\fR +.IP +Set the font weight for bold texts. Possible range 0 to 8 (default: 4) +.HP +\fB\-font\-weight\-normal\fR +.IP +Set the font weight for normal texts. Possible range 0 to 8 (default: 1) +.HP \fB\-lang=\fR .IP Set language, for example "de_DE" (default: system locale) @@ -690,6 +853,10 @@ Set language, for example "de_DE" (default: system locale) .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) @@ -698,16 +865,16 @@ Set SSL root certificates for payment request (default: \fB\-system\-\fR) .IP Show splash screen on startup (default: 1) .HP -\fB\-resetguisettings\fR +\fB\-windowtitle=\fR .IP -Reset all settings changed in the GUI +Sets a window title which is appended to "Dash Core \- " .SH COPYRIGHT -Copyright (C) 2014-2020 The Dash Core developers -Copyright (C) 2009-2020 The Bitcoin Core developers +Copyright (C) 2014-2021 The Dash Core developers +Copyright (C) 2009-2021 The Bitcoin Core developers Please contribute if you find Raptoreum Core useful. Visit for further information about the software. -The source code is available from . +The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING diff --git a/doc/man/raptoreum-tx.1 b/doc/man/raptoreum-tx.1 deleted file mode 100644 index eb155bd874..0000000000 --- a/doc/man/raptoreum-tx.1 +++ /dev/null @@ -1,124 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.11. -.TH RAPTOREUM-TX "1" "November 2019" "raptoreum-tx v0.15.0.0" "User Commands" -.SH NAME -raptoreum-tx \- manual page for raptoreum-tx v0.15.0.0 -.SH DESCRIPTION -Raptoreum Core raptoreum\-tx utility version v0.15.0.0 -.SS "Usage:" -.TP -raptoreum\-tx [options] [commands] -Update hex\-encoded raptoreum transaction -.TP -raptoreum\-tx [options] \fB\-create\fR [commands] -Create hex\-encoded raptoreum transaction -.SH OPTIONS -.HP -\-? -.IP -This help message -.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 -.HP -\fB\-devnet=\fR -.IP -Use devnet chain with provided name -.HP -\fB\-regtest\fR -.IP -Enter regression test mode, which uses a special chain in which blocks -can be solved instantly. This is intended for regression testing -tools and app development. -.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 -outpubkey=VALUE:PUBKEY[:FLAGS] -.IP -Add pay\-to\-pubkey output to TX. Optionally add the "S" flag to wrap the -output in a pay\-to\-script\-hash. -.IP -outdata=[VALUE:]DATA -.IP -Add data\-based output to TX -.IP -outscript=VALUE:SCRIPT[:FLAGS] -.IP -Add raw script output to TX. Optionally add the "S" flag to wrap the -output in a pay\-to\-script\-hash. -.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 "S" flag to wrap the output in a -pay\-to\-script\-hash. -.IP -sign=SIGHASH\-FLAGS -.IP -Add zero or more signatures to transaction. This command requires JSON -registers:prevtxs=JSON object, privatekeys=JSON object. See -signrawtransaction 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) 2014-2020 The Dash Core developers -Copyright (C) 2009-2020 The Bitcoin Core developers - -Please contribute if you find Raptoreum Core 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 COPYING -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/raptoreumd.1 b/doc/man/raptoreumd.1 index a9d69b8750..a14a5b0bed 100644 --- a/doc/man/raptoreumd.1 +++ b/doc/man/raptoreumd.1 @@ -1,9 +1,9 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.11. -.TH RAPTOREUMD "1" "November 2019" "raptoreumd v0.15.0.0" "User Commands" +.TH RAPTOREUMD "1" December 2021" "raptoreumd v0.17.0.0" "User Commands" .SH NAME -raptoreumd \- manual page for raptoreumd v0.15.0.0 +raptoreumd \- manual page for raptoreumd v0.17.0.0 .SH DESCRIPTION -Raptoreum Core Daemon version v0.15.0.0 +Raptoreum Core Daemon version v0.17.0.0 .SS "Usage:" .TP raptoreumd [options] @@ -14,32 +14,38 @@ Start Raptoreum Core Daemon .IP Print this help message and exit .HP -\fB\-version\fR -.IP -Print version 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\-blocknotify=\fR -.IP -Execute command when the best block changes (%s in cmd is replaced by -block hash) -.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: -000000000000000fb7b1e9b81700283dff0f7d87cf458e5edfdae00c669de661, +00000000000000105cfae44a995332d8ec256850ea33a1f7b700474e3dad82bc, testnet: -000000001015eb5ef86a8fe2b3074d947bc972c5befe32b28dd5ce915dc0d029) +0000009303aeadf8cf3812f5c869691dbd4cb118ad20e9bf553be434bafe6a52) +.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 (default: raptoreum.conf) +Specify configuration file. Relative paths will be prefixed by datadir +location. (default: raptoreum.conf) .HP \fB\-daemon\fR .IP @@ -53,44 +59,45 @@ Specify data directory .IP Set database cache size in megabytes (4 to 16384, default: 300) .HP +\fB\-debuglogfile=\fR +.IP +Specify location of debug log file. Relative paths will be prefixed by a +net\-specific datadir location. (0 to disable; default: debug.log) +.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\-maxorphantxsize=\fR .IP Maximum total size of all orphan transactions in megabytes (default: 10) .HP -\fB\-maxmempool=\fR +\fB\-maxrecsigsage=\fR .IP -Keep the transaction memory pool below megabytes (default: 300) +Number of seconds to keep LLMQ recovery sigs (default: 604800) .HP \fB\-mempoolexpiry=\fR .IP Do not keep transactions in the mempool longer than hours (default: 336) .HP -\fB\-persistmempool\fR -.IP -Whether to save the mempool on shutdown and load on restart (default: 1) -.HP -\fB\-syncmempool\fR -.IP -Sync mempool from other nodes on start (default: 1) -.HP -\fB\-blockreconstructionextratxn=\fR -.IP -Extra transactions to keep in memory for compact block reconstructions -(default: 100) -.HP \fB\-par=\fR .IP -Set the number of script verification threads (\fB\-2\fR to 16, 0 = auto, <0 = +Set the number of script verification threads (\fB\-4\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 (default: raptoreumd.pid) +Specify pid file. Relative paths will be prefixed by a net\-specific +datadir location. (default: raptoireumd.pid) .HP \fB\-prune=\fR .IP @@ -98,51 +105,32 @@ 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, ->945 = automatically prune block files to stay under the -specified target size in MiB) +incompatible with \fB\-txindex\fR, \fB\-rescan\fR and \fB\-disablegovernance\fR=\fI\,false\/\fR. +Warning: Reverting this setting requires re\-downloading the +entire blockchain. (default: 0 = disable pruning blocks, 1 = +allow manual pruning via RPC, >945 = automatically prune block +files to stay under the specified target size in MiB) .HP -\fB\-reindex\-chainstate\fR -.IP -Rebuild chain state from the currently indexed blocks -.HP -\fB\-reindex\fR +\fB\-syncmempool\fR .IP -Rebuild chain state and block index from the blk*.dat files on disk +Sync mempool from other nodes on start (default: 1) .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: 1) -.HP -\fB\-addressindex\fR -.IP -Maintain a full address index, used to query for the balance, txids and -unspent outputs for addresses (default: 0) -.HP -\fB\-timestampindex\fR -.IP -Maintain a timestamp index for block hashes, used to query blocks hashes -by a range of timestamps (default: 0) -.HP -\fB\-spentindex\fR +\fB\-version\fR .IP -Maintain a full spent index, used to query the spending txid and input -index for an outpoint (default: 0) +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) +the `addnode` RPC command help for more info). This option can be +specified multiple times to add multiple nodes. .HP \fB\-allowprivatenet\fR .IP @@ -164,9 +152,10 @@ for IPv6 .HP \fB\-connect=\fR .IP -Connect only to the specified node(s); \fB\-connect\fR=\fI\,0\/\fR disables automatic +Connect only to the specified node; \fB\-connect\fR=\fI\,0\/\fR disables automatic connections (the rules for this peer are the same as for -\fB\-addnode\fR) +\fB\-addnode\fR). This option can be specified multiple times to connect +to multiple nodes. .HP \fB\-discover\fR .IP @@ -182,6 +171,10 @@ Allow DNS lookups for \fB\-addnode\fR, \fB\-seednode\fR and \fB\-connect\fR (def 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: 1) +.HP \fB\-externalip=\fR .IP Specify your own public address @@ -217,6 +210,11 @@ 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 @@ -224,17 +222,26 @@ Use separate SOCKS5 proxy to reach peers via Tor hidden services .HP \fB\-onlynet=\fR .IP -Only connect to nodes in network (ipv4, ipv6 or onion) -.HP -\fB\-permitbaremultisig\fR -.IP -Relay non\-P2SH multisig (default: 1) +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\-peertimeout=\fR +.IP +Specify p2p connection timeout in seconds. This option determines the +amount of time a peer may be inactive before the connection to it +is dropped. (minimum: 1, default: 60) +.HP +\fB\-permitbaremultisig\fR +.IP +Relay non\-P2SH multisig (default: 1) +.HP \fB\-port=\fR .IP Listen for connections on (default: 9999 or testnet: 19999) @@ -250,7 +257,19 @@ stream isolation (default: 1) .HP \fB\-seednode=\fR .IP -Connect to a node to retrieve peer addresses, and disconnect +Connect to a node to retrieve peer addresses, and disconnect. This +option can be specified multiple times to connect to multiple +nodes. +.HP +\fB\-socketevents=\fR +.IP +Socket events mode, which must be one of 'select', 'poll', 'epoll' or +\&'kqueue', depending on your system (default: Linux \- 'epoll', +FreeBSD/Apple \- 'kqueue', Windows \- 'select') +.HP +\fB\-socketevents=\fR +.IP +Socket events mode, which must be one of: 'select' (default: select) .HP \fB\-timeout=\fR .IP @@ -281,26 +300,157 @@ 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 +Indexing options: .HP -\fB\-maxuploadtarget=\fR +\fB\-addressindex\fR .IP -Tries to keep outbound traffic under the given target (in MiB per 24h), -0 = no limit (default: 0) +Maintain a full address index, used to query for the balance, txids and +unspent outputs for addresses (default: 0) +.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 +.HP +\fB\-spentindex\fR +.IP +Maintain a full spent index, used to query the spending txid and input +index for an outpoint (default: 0) +.HP +\fB\-timestampindex\fR +.IP +Maintain a timestamp index for block hashes, used to query blocks hashes +by a range of timestamps (default: 0) +.HP +\fB\-txindex\fR +.IP +Maintain a full transaction index, used by the getrawtransaction rpc +call (default: 1) +.PP +Masternode options: +.HP +\fB\-llmq\-data\-recovery=\fR +.IP +Enable automated quorum data recovery (default: 1) +.HP +\fB\-llmq\-qvvec\-sync=\fR: +.IP +Defines from which LLMQ type the masternode should sync quorum +verification vectors. Can be used multiple times with different +LLMQ types. : 0 (sync always from all quorums of the type +defined by ), 1 (sync from all quorums of the type +defined by if a member of any of the quorums) +.HP +\fB\-masternodeblsprivkey=\fR +.IP +Set the masternode BLS private key and enable the client to act as a +masternode +.HP +\fB\-platform\-user=\fR +.IP +Set the username for the "platform user", a restricted user intended to +be used by Dash Platform, to the specified username. +.PP +Statsd options: +.HP +\fB\-statsenabled\fR +.IP +Publish internal stats to statsd (default: 0) +.HP +\fB\-statshost=\fR +.IP +Specify statsd host (default: 127.0.0.1) +.HP +\fB\-statshostname=\fR +.IP +Specify statsd host name (default: ) +.HP +\fB\-statsns=\fR +.IP +Specify additional namespace prefix (default: ) +.HP +\fB\-statsperiod=\fR +.IP +Specify the number of seconds between periodic measurements (default: +60) +.HP +\fB\-statsport=\fR +.IP +Specify statsd port (default: 8125) .PP Wallet options: .HP +\fB\-createwalletbackups=\fR +.IP +Number of automatic wallet backups (default: 10) +.HP \fB\-disablewallet\fR .IP Do not load the wallet and disable wallet RPC calls .HP +\fB\-instantsendnotify=\fR +.IP +Execute command when a wallet InstantSend transaction is successfully +locked (%s in cmd is replaced by TxID) +.HP \fB\-keypool=\fR .IP Set key pool size to (default: 1000) .HP -\fB\-fallbackfee=\fR +\fB\-rescan=\fR .IP -A fee rate (in RAPTOREUM/kB) that will be used when fee estimation has -insufficient data (default: 0.00001) +Rescan the block chain for missing wallet transactions on startup (1 = +start from wallet creation time, 2 = start from genesis block) +.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\-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\-walletbackupsdir=\fR +.IP +Specify full path to directory for automatic wallet backups (must exist) +.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\-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. +account owner and payment request information, 2 = drop tx meta +data) .HP \fB\-discardfee=\fR .IP @@ -310,6 +460,11 @@ 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 DASH/kB) that will be used when fee estimation has +insufficient data (default: 0.00001) +.HP \fB\-mintxfee=\fR .IP Fees (in RAPTOREUM/kB) smaller than this are considered zero fee for @@ -319,27 +474,15 @@ transaction creation (default: 0.00001) .IP Fee (in RAPTOREUM/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\-usehd\fR +\fB\-hdseed=\fR .IP -Use hierarchical deterministic key generation (HD) after BIP39/BIP44. -Only has effect during wallet creation/first start (default: 0) +User defined seed for HD wallet (should be in hex). Only has effect +during wallet creation/first start (default: randomly generated) .HP \fB\-mnemonic=\fR .IP @@ -351,95 +494,153 @@ wallet creation/first start (default: randomly generated) User defined mnemonic passphrase for HD wallet (BIP39). Only has effect during wallet creation/first start (default: empty string) .HP -\fB\-hdseed=\fR +\fB\-usehd\fR .IP -User defined seed for HD wallet (should be in hex). Only has effect -during wallet creation/first start (default: randomly generated) +Use hierarchical deterministic key generation (HD) after BIP39/BIP44. +Only has effect during wallet creation/first start (default: 0) .HP -\fB\-upgradewallet\fR +\fB\-keepass\fR .IP -Upgrade wallet to latest format on startup +Use KeePass 2 integration using KeePassHttp plugin (default: 0) .HP -\fB\-wallet=\fR +\fB\-keepassid=\fR .IP -Specify wallet file (within data directory) (default: wallet.dat) +KeePassHttp id for the established association .HP -\fB\-walletbroadcast\fR +\fB\-keepasskey=\fR .IP -Make the wallet broadcast transactions (default: 1) +KeePassHttp key for AES encrypted communication with KeePass .HP -\fB\-walletnotify=\fR +\fB\-keepassname=\fR .IP -Execute command when a wallet transaction changes (%s in cmd is replaced -by TxID) +Name to construct url for KeePass entry that stores the wallet +passphrase .HP -\fB\-zapwallettxes=\fR +\fB\-keepassport=\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. -account owner and payment request information, 2 = drop tx meta -data) +Connect to KeePassHttp on port (default: 19455) .HP -\fB\-createwalletbackups=\fR +\fB\-coinjoinamount=\fR .IP -Number of automatic wallet backups (default: 10) +Target CoinJoin balance (2\-21000000, default: 1000) .HP -\fB\-walletbackupsdir=\fR +\fB\-coinjoinautostart\fR .IP -Specify full path to directory for automatic wallet backups (must exist) +Start CoinJoin automatically (0\-1, default: 0) .HP -\fB\-keepass\fR +\fB\-coinjoindenomsgoal=\fR .IP -Use KeePass 2 integration using KeePassHttp plugin (default: 0) +Try to create at least N inputs of each denominated amount (10\-100000, +default: 50) .HP -\fB\-keepassport=\fR +\fB\-coinjoindenomshardcap=\fR .IP -Connect to KeePassHttp on port (default: 19455) +Create up to N inputs of each denominated amount (10\-100000, default: +300) .HP -\fB\-keepasskey=\fR +\fB\-coinjoinmultisession\fR .IP -KeePassHttp key for AES encrypted communication with KeePass +Enable multiple CoinJoin mixing sessions per block, experimental (0\-1, +default: 0) .HP -\fB\-keepassid=\fR +\fB\-coinjoinrounds=\fR .IP -KeePassHttp id for the established association +Use N separate masternodes for each denominated input to mix funds +(2\-16, default: 4) .HP -\fB\-keepassname=\fR +\fB\-coinjoinsessions=\fR .IP -Name to construct url for KeePass entry that stores the wallet -passphrase +Use N separate masternodes in parallel to mix funds (1\-10, default: 4) +.HP +\fB\-enablecoinjoin\fR +.IP +Enable use of CoinJoin for funds stored in this wallet (0\-1, default: 0) .PP -ZeroMQ notification options: +PrivateSend options: .HP -\fB\-zmqpubhashblock=\fR
+\fB\-enableprivatesend\fR .IP -Enable publish hash block in
+Enable use of PrivateSend for funds stored in this wallet (0\-1, default: +0) .HP -\fB\-zmqpubhashtx=\fR
+\fB\-privatesendautostart\fR .IP -Enable publish hash transaction in
+Start PrivateSend automatically (0\-1, default: 0) .HP -\fB\-zmqpubhashtxlock=\fR
+\fB\-privatesendmultisession\fR .IP -Enable publish hash transaction (locked via InstantSend) in
+Enable multiple PrivateSend mixing sessions per block, experimental +(0\-1, default: 0) .HP -\fB\-zmqpubhashgovernancevote=\fR
+\fB\-privatesendsessions=\fR .IP -Enable publish hash of governance votes in
+Use N separate masternodes in parallel to mix funds (1\-10, default: 4) +.HP +\fB\-privatesendrounds=\fR +.IP +Use N separate masternodes for each denominated input to mix funds +(2\-16, default: 4) +.HP +\fB\-privatesendamount=\fR +.IP +Target PrivateSend balance (2\-21000000, default: 1000) +.HP +\fB\-privatesenddenomsgoal=\fR +.IP +Try to create at least N inputs of each denominated amount (10\-100000, +default: 50) +.HP +\fB\-privatesenddenomshardcap=\fR +.IP +Create up to N inputs of each denominated amount (10\-100000, default: +300) +.PP +ZeroMQ notification options: +.HP +\fB\-zmqpubhashblock=\fR
+.IP +Enable publish hash block in
.HP \fB\-zmqpubhashgovernanceobject=\fR
.IP Enable publish hash of governance objects (like proposals) in
.HP +\fB\-zmqpubhashgovernancevote=\fR
+.IP +Enable publish hash of governance votes in
+.HP \fB\-zmqpubhashinstantsenddoublespend=\fR
.IP Enable publish transaction hashes of attempted InstantSend double spend in
.HP +\fB\-zmqpubhashrecoveredsig=\fR
+.IP +Enable publish message hash of recovered signatures (recovered by LLMQs) +in
+.HP +\fB\-zmqpubhashtx=\fR
+.IP +Enable publish hash transaction in
+.HP +\fB\-zmqpubhashtxlock=\fR
+.IP +Enable publish hash transaction (locked via InstantSend) in
+.HP \fB\-zmqpubrawblock=\fR
.IP Enable publish raw block in
.HP +\fB\-zmqpubrawinstantsenddoublespend=\fR
+.IP +Enable publish raw transactions of attempted InstantSend double spend in +
+.HP +\fB\-zmqpubrawrecoveredsig=\fR
+.IP +Enable publish raw recovered signatures (recovered by LLMQs) in +
+.HP \fB\-zmqpubrawtx=\fR
.IP Enable publish raw transaction in
@@ -447,18 +648,9 @@ Enable publish raw transaction in
\fB\-zmqpubrawtxlock=\fR
.IP Enable publish raw transaction (locked via InstantSend) in
-.HP -\fB\-zmqpubrawinstantsenddoublespend=\fR
-.IP -Enable publish raw transactions of attempted InstantSend double spend in -
.PP Debugging/Testing options: .HP -\fB\-uacomment=\fR -.IP -Append comment to the user agent string -.HP \fB\-debug=\fR .IP Output debugging information (default: 0, supplying is @@ -467,8 +659,8 @@ 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, chainlocks, gobject, instantsend, -keepass, llmq, llmq\-dkg, llmq\-sigs, mnpayments, mnsync, -privatesend, spork. +keepass, llmq, llmq\-dkg, llmq\-sigs, mnpayments, mnsync, coinjoin, +spork, netconn. .HP \fB\-debugexclude=\fR .IP @@ -476,109 +668,98 @@ 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\-disablegovernance\fR +.IP +Disable governance validation (0\-1, default: 0) +.HP \fB\-help\-debug\fR .IP Show all debugging options (usage: \fB\-\-help\fR \fB\-help\-debug\fR) .HP -\fB\-logips\fR +\fB\-highsubsidyblocks=\fR .IP -Include IP addresses in debug output (default: 0) +The number of blocks with a higher than normal subsidy to mine at the +start of a devnet (default: 0) .HP -\fB\-logtimestamps\fR +\fB\-highsubsidyfactor=\fR .IP -Prepend debug output with timestamp (default: 1) +The factor to multiply the normal block subsidy by while in the +highsubsidyblocks window of a devnet (default: 1) .HP -\fB\-maxtxfee=\fR +\fB\-llmqchainlocks=\fR .IP -Maximum total fees (in RAPTOREUM) to use in a single wallet transaction or -raw transaction; setting this too low may abort large -transactions (default: 0.10) +Override the default LLMQ type used for ChainLocks on a devnet. Allows +using ChainLocks with smaller LLMQs. (default: llmq_50_60) .HP -\fB\-printtoconsole\fR +\fB\-llmqdevnetparams=\fR .IP -Send trace/debug info to console instead of debug.log file +Override the default LLMQ size for the LLMQ_DEVNET quorum (default: +10:6) .HP -\fB\-printtodebuglog\fR +\fB\-llmqinstantsend=\fR .IP -Send trace/debug info to debug.log file (default: 1) +Override the default LLMQ type used for InstantSend on a devnet. Allows +using InstantSend with smaller LLMQs. (default: llmq_50_60) .HP -\fB\-shrinkdebugfile\fR +\fB\-llmqtestparams=\fR .IP -Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR) -.PP -Chain selection options: +Override the default LLMQ size for the LLMQ_TEST quorum (default: 3:2) .HP -\fB\-testnet\fR +\fB\-logips\fR .IP -Use the test chain +Include IP addresses in debug output (default: 0) .HP -\fB\-devnet=\fR +\fB\-logtimestamps\fR .IP -Use devnet chain with provided name +Prepend debug output with timestamp (default: 1) .HP -\fB\-litemode\fR +\fB\-maxtxfee=\fR .IP -Disable all Raptoreum specific functionality (Masternodes, PrivateSend, -InstantSend, Governance) (0\-1, default: 0) +Maximum total fees (in RAPTOREUM) to use in a single wallet transaction or +raw transaction; setting this too low may abort large +transactions (default: 0.10) .HP -\fB\-sporkaddr=\fR +\fB\-minimumdifficultyblocks=\fR .IP -Override spork address. Only useful for regtest and devnet. Using this -on mainnet or testnet will ban you. +The number of blocks that can be mined with the minimum difficulty at +the start of a devnet (default: 0) .HP \fB\-minsporkkeys=\fR .IP Overrides minimum spork signers to change spork value. Only useful for regtest and devnet. Using this on mainnet or testnet will ban you. -.PP -Masternode options: -.HP -\fB\-smartnodeblsprivkey=\fR -.IP -Set the smartnode BLS private key and enable the client to act as a -smartnode -.PP -PrivateSend options: -.HP -\fB\-enableprivatesend\fR -.IP -Enable use of PrivateSend for funds stored in this wallet (0\-1, default: -0) .HP -\fB\-privatesendautostart\fR +\fB\-printtoconsole\fR .IP -Start PrivateSend automatically (0\-1, default: 0) +Send trace/debug info to console instead of debug.log file .HP -\fB\-privatesendmultisession\fR +\fB\-shrinkdebugfile\fR .IP -Enable multiple PrivateSend mixing sessions per block, experimental -(0\-1, default: 0) +Shrink debug.log file on client startup (default: 1 when no \fB\-debug\fR) .HP -\fB\-privatesendsessions=\fR +\fB\-sporkaddr=\fR .IP -Use N separate smartnodes in parallel to mix funds (1\-10, default: 4) +Override spork address. Only useful for regtest and devnet. Using this +on mainnet or testnet will ban you. .HP -\fB\-privatesendrounds=\fR +\fB\-sporkkey=\fR .IP -Use N separate smartnodes for each denominated input to mix funds -(2\-16, default: 4) +Set the private key to be used for signing spork messages. .HP -\fB\-privatesendamount=\fR +\fB\-uacomment=\fR .IP -Target PrivateSend balance (2\-21000000, default: 1000) +Append comment to the user agent string +.PP +Chain selection options: .HP -\fB\-privatesenddenoms=\fR +\fB\-devnet=\fR .IP -Create up to N inputs of each denominated amount (10\-100000, default: -300) -.PP -InstantSend options: +Use devnet chain with provided name .HP -\fB\-instantsendnotify=\fR +\fB\-testnet\fR .IP -Execute command when a wallet InstantSend transaction is successfully -locked (%s in cmd is replaced by TxID) +Use the test chain .PP Node relay options: .HP @@ -600,15 +781,15 @@ Maximum size of data in data carrier transactions we relay and mine Fees (in RAPTOREUM/kB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: 0.00001) .HP -\fB\-whitelistrelay\fR -.IP -Accept relayed transactions received from whitelisted peers even when -not relaying transactions (default: 1) -.HP \fB\-whitelistforcerelay\fR .IP Force relay of transactions from whitelisted peers even if they violate local relay policy (default: 1) +.HP +\fB\-whitelistrelay\fR +.IP +Accept relayed transactions received from whitelisted peers even when +not relaying transactions (default: 1) .PP Block creation options: .HP @@ -623,34 +804,16 @@ block creation. (default: 0.00001) .PP RPC server options: .HP -\fB\-server\fR -.IP -Accept command line and JSON\-RPC commands -.HP \fB\-rest\fR .IP Accept public REST requests (default: 0) .HP -\fB\-rpcbind=\fR[:port] -.IP -Bind to given address to listen for JSON\-RPC connections. 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, or if \fB\-rpcallowip\fR has been specified, -0.0.0.0 and :: i.e., all addresses) -.HP -\fB\-rpccookiefile=\fR -.IP -Location of the auth cookie (default: data dir) -.HP -\fB\-rpcuser=\fR -.IP -Username for JSON\-RPC connections -.HP -\fB\-rpcpassword=\fR +\fB\-rpcallowip=\fR .IP -Password for JSON\-RPC connections +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 @@ -661,28 +824,48 @@ 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, or if \fB\-rpcallowip\fR has been +specified, 0.0.0.0 and :: i.e., all addresses) +.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: 9998 or testnet: 19998) .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\-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) 2014-2020 The Dash Core developers -Copyright (C) 2009-2020 The Bitcoin Core developers +Copyright (C) 2014-2021 The Dash Core developers +Copyright (C) 2009-2021 The Bitcoin Core developers Please contribute if you find Raptoreum Core useful. Visit for further information about the software. -The source code is available from . +The source code is available from . This is experimental software. Distributed under the MIT software license, see the accompanying file COPYING diff --git a/doc/release-notes-17410.md b/doc/release-notes-17410.md new file mode 100644 index 0000000000..08ed353889 --- /dev/null +++ b/doc/release-notes-17410.md @@ -0,0 +1,5 @@ +Command-line options +-------------------- + +- The `-debug=db` logging category has been renamed to `-debug=walletdb`, to distinguish it from `coindb`. + `-debug=db` has been deprecated and will be removed in the next major release. diff --git a/doc/release-notes.md b/doc/release-notes.md index d3704e2b1f..f97b31a690 100644 --- a/doc/release-notes.md +++ b/doc/release-notes.md @@ -1,15 +1,15 @@ -Raptoreum Core version 0.15 -====================== +Dash Core version 0.17.0.3 +========================== Release is now available from: - + -This is a new major version release, bringing new features, various bugfixes and other improvements. +This is a new hotfix release. Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -20,466 +20,60 @@ 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/Raptoreum-Qt (on Mac) or -raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation and you were +installer (on Windows) or just copy over /Applications/Dash-Qt (on Mac) or +dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were using version < 0.13 you will have to reindex (start with -reindex-chainstate -or -reindex) to make sure your wallet has all the new data synced. Upgrading from -version 0.13 should not require any additional actions. +or -reindex) to make sure your wallet has all the new data synced. Upgrading +from version 0.13 should not require any additional actions. When upgrading from a version prior to 0.14.0.3, the -first startup of Raptoreum Core will run a migration process which can take a few minutes -to finish. After the migration, a downgrade to an older version is only possible with -a reindex (or reindex-chainstate). +first startup of Dash Core will run a migration process which can take a few +minutes to finish. After the migration, a downgrade to an older version is only +possible with a reindex (or reindex-chainstate). Downgrade warning ----------------- ### Downgrade to a version < 0.14.0.3 -Downgrading to a version smaller than 0.14.0.3 is not supported anymore due to changes -in the "evodb" database format. If you need to use an older version, you have to perform -a reindex or re-sync the whole chain. +Downgrading to a version older than 0.14.0.3 is no longer supported due to +changes in the "evodb" database format. If you need to use an older version, +you must either reindex or re-sync the whole chain. + +### Downgrade of masternodes to < 0.17.0.2 + +Starting with the 0.16 release, masternodes verify the protocol version of other +masternodes. This results in PoSe punishment/banning for outdated masternodes, +so downgrading even prior to the activation of the introduced hard-fork changes +is not recommended. Notable changes =============== -Removal of the p2p alert system -------------------------------- -The p2p alert system was designed to send messages to all nodes supporting it by someone who holds -so called alert keys to notify such nodes in case of severe network issues. This version removes -the `alert` p2p message and `--alert` option. Internal alerts, partition detection warnings and the -`--alertnotify` option features remain. - -Removal of the legacy InstantSend system ----------------------------------------- -Version 0.14 introduced the new LLMQ-based InstantSend system which is designed to be much more scalable -than the legacy one without sacrificing security. The new system also allows all transactions to be treated as -InstantSend transactions. The legacy system was disabled together with the successful deployment of ChainLocks, -but we had to keep supporting the legacy system for a while to ensure a smooth transition period. This version finally drops -the legacy system completely. - -Read more about ChainLocks: https://github.com/raptoreum/dips/blob/master/dip-0008.md -Read more about LLMQ-based InstantSend: https://github.com/raptoreum/dips/blob/master/dip-0010.md - -Sporks ------- -The security level of ChainLocks and LLMQ-based InstantSend made sporks `SPORK_5_INSTANTSEND_MAX_VALUE` and -`SPORK_12_RECONSIDER_BLOCKS` obsolete, so they are removed now. Sporks `SPORK_15_DETERMINISTIC_MNS_ENABLED`, -`SPORK_16_INSTANTSEND_AUTOLOCKS` and `SPORK_20_INSTANTSEND_LLMQ_BASED` have no code logic behind them anymore -because they were used as part of the DIP0003, DIP0008 and DIP0010 activation process which is finished now. -They are still kept and relayed only to ensure smooth operation of v0.14 clients and will be removed in some -future version. - -Mempool sync improvements -------------------------- -Nodes joining the network will now try to sync their mempool from other v0.15+ peers via the `mempool` p2p message. -This behaviour can be disabled via the new `--syncmempool` option. Nodes serving such requests will now also push -`inv` p2p messages for InstandSend locks which are held for transactions in their mempool. These two changes -should help new nodes to quickly catchup on start and detect any potential double-spend as soon as possible. -This should also help wallets to slightly improve UX by showing the correct status of unconfirmed transactions -locked via InstandSend, if they were sent while the receiving wallet was offline. Note that bloom-filters -still apply to such `inv` messages, just like they do for transactions and locks that are relayed on a -regular basis. - -PrivateSend improvements ------------------------- -This version decouples the so called "Lite Mode" and client-side PrivateSend mixing, which allows client-side mixing -on pruned nodes running with `--litemode` option. Such nodes will have to also specify the newly redefined -`--enableprivatesend` option. Non-prunned nodes do not have to do this but they can use `--enableprivatesend` -option to disable mixing completely instead. Please note that specifying this option does not start mixing -automatically anymore (which was the case in previous versions). To automatically start mixing, use the new -`--privatesendautostart` option in addition to `--enableprivatesend`. Additionally, PrivateSend can always be -controlled with the `privatesend` RPC. - -Thanks to LLMQ-based InstantSend and its ability to lock chains of unconfirmed transactions (and not only a single -one like in the legacy system), PrivateSend mixing speed has improved significantly. In such an environment -Liquidity Provider Mode, which was introduced a long time ago to support mixing volume, is no longer needed and -is removed now. As such the `--liquidityprovider` option is not available anymore. - -Some other improvements were also introduced to speed up mixing, e.g. by joining more queues or dropping potential -malicious mixing participants faster by checking some rules earlier etc. Lots of related code was refactored to -further improve its readability, which should make it easier for someone to re-implement PrivateSend -correctly in other wallets if there is a desire to do so. - -Wallet changes --------------- -Wallet internals were optimized to significantly improve performance which should be especially notable for huge -wallets with tens of thousands of transactions or more. The GUI for such wallets should be much more responsive too now. - -Running Smartnodes from local wallets was deprecated a long time ago and starting from this version we disable -wallet functionality on Smartnodes completely. - -GUI changes ------------ -The Qt GUI went through a refresh to follow branding color guides and to make it feel lighter. All old themes besides -the Traditional one (the one with a minimal styling) were removed and instead a new Dark theme was added. - -In this version we made a lot of optimizations to remove various lags and lockups, the GUI in general should feel -much more smoother now, especially for huge wallets or when navigating through the smartnode list. The latter has -a few new columns (collateral, owner and voting addresses) which give more options to filter and/or sort the list. -All issues with hi-dpi monitors should also be fixed now. - -The "Send" popup dialog was slightly tweaked to improve the language and provide a bit more information about inputs -included in the transaction, its size and the actual resulting fee rate. It will also show the number of inputs -a PrivateSend transaction is going to consume and display a warning regarding sender privacy if this number is 10 -or higher. - -Changes in regtest and devnet p2p/rpc ports -------------------------------------------- -Default p2p and rpc ports for devnets and regtest were changed to ensure their consistency and to avoid -any potential interference with bitcoin's regtests. New default p2p/rpc ports for devnet are 19799/19798, -for regtest - 19899/19898 respectively. - -ZMQ changes ------------ -Added two new messages `rawchainlocksig` and `rawtxlocksig` which return the raw data of the block/transaction -concatenated with the corresponding `clsig`/`islock` message respectively. - -Crash reports and stack traces ------------------------------- -Binaries built with Gitian (including all official releases) will from now on always have crash reports and -crash hooks enabled. This means, that all binaries will print some information about the stack trace at the -time of a crash. If no debug information is present at crash time (which is usually the case), the binaries -will print a line that looks like this: -``` -2020-01-06 14:41:08 Windows Exception: EXCEPTION_ACCESS_VIOLATION -No debug information available for stacktrace. You should add debug information and then run: -raptoreumd.exe -printcrashinfo=bvcgc43iinzgc43ijfxgm3yba.... -``` -If you encounter such a crash, include these lines when you report the crash and we will be able to debug it -further. Anyone interested in running the specified `-printcrashinfo` command can do so after copying the debug info -file from the Gitian build to the same place where the binary is located. This will then print a detailed stack -trace. - -RPC changes ------------ -There are a few changes in existing RPC interfaces in this release: -- no more `instantsend` field in various RPC commands -- `use-IS`, `use_is` and `instantsend` options are deprecated in various RPC commands and have no effect anymore -- added new `merkleRootQuorums` field in `getblock` RPC results -- individual Raptoreum-specific fields which were used to display soft-fork progress in `getblockchaininfo` are replaced - with the backported `statistics` object -- `privatesend_balance` field is shown in all related RPC results regardless of the Lite Mode or PrivateSend state -- added `pubKeyOperator` field for each smartnode in `quorum info` RPC response - -There are also new RPC commands: -- `getbestchainlock` -- `getmerkleblocks` -- `getprivatesendinfo` - -`getpoolinfo` was deprecated in favor of `getprivatesendinfo` and no longer returns any data. - -There are also new RPC commands backported from Bitcoin Core 0.15: -- `abortrescan` -- `combinerawtransaction` -- `getblockstats` -- `getchaintxstats` -- `listwallets` -- `logging` -- `uptime` - -Make sure to check Bitcoin Core 0.15 release notes in a [section](#backports-from-bitcoin-core-015) below -for more RPC changes. - -See `help command` in rpc for more info. - -Command-line options --------------------- -Changes in existing cmd-line options: -- `--enableprivatesend` option has a new meaning now, see [PrivateSend](#privatesend) section for more info - -New cmd-line options: -- `--printcrashinfo` -- `--syncmempool` -- `--privatesendautostart` - -Few cmd-line options are no longer supported: -- `--alerts` -- `--smartnode`, deprecated, specifying `--smartnodeblsprivkey` option alone is enough to enable smartnode mode now -- `--liquidityprovider` -- `--enableinstantsend`, dropped due to removal of the Legacy InstantSend - -Make sure to check Bitcoin Core 0.15 release notes in a [section](#backports-from-bitcoin-core-015) below -for more changes in command-line options. - -See `Help -> Command-line options` in Qt wallet or `raptoreumd --help` for more info. - -Build system ------------- -This version always includes stacktraces in binaries now, `--enable-stacktraces` option is no longer available. -Instead you can choose if you want to hook crash reporting into various types of crashes by using `--enable-crash-hooks` -option (default is `no`). When using this option on macOS make sure to build binaries with `make -C src osx_debug`. - -Backports from Bitcoin Core 0.15 --------------------------------- - -Most of the changes between Bitcoin Core 0.14 and Bitcoin Core 0.15 have been backported into Raptoreum Core 0.15. -We only excluded backports which do not align with Raptoreum, like SegWit or RBF related changes. - -You can read about changes brought by backporting from Bitcoin Core 0.15 in following docs: -- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.15.0.md -- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.15.1.md - -Some other individual PRs were backported from versions 0.16+, you can find the full list of backported PRs -and additional fixes in https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.15-backports.md - -Miscellaneous -------------- -A lot of refactoring, backports, code cleanups and other small fixes were done in this release. Raptoreum-specific -modules were reorganized in separate folders to make navigation through code a bit easier. - -0.15 Change log -=============== +This release adds some missing translations and help strings. It also fixes +a couple of build issues and a rare crash on some linux systems. + +0.17.0.3 Change log +=================== + +See detailed [set of changes](https://github.com/dashpay/dash/compare/v0.17.0.2...dashpay:v0.17.0.3). -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.14.0.5...raptoreum:v0.15.0.0). - -- [`3c055bf79`](https://github.com/raptoreum/raptoreum/commit/3c055bf79) Bump nMinimumChainWork and defaultAssumeValid (#3336) -- [`818e7a6f7`](https://github.com/raptoreum/raptoreum/commit/818e7a6f7) Update release notes -- [`9d5c3d12e`](https://github.com/raptoreum/raptoreum/commit/9d5c3d12e) Try to actually accept newly created dstx-es into smartnode's mempool (#3332) -- [`f23e722da`](https://github.com/raptoreum/raptoreum/commit/f23e722da) Switch CLIENT_VERSION_IS_RELEASE to `true` for v0.15 (#3306) -- [`b57f1dac8`](https://github.com/raptoreum/raptoreum/commit/b57f1dac8) Update release notes -- [`15c6df583`](https://github.com/raptoreum/raptoreum/commit/15c6df583) Bring back "about" menu icon (#3329) -- [`2c30818f7`](https://github.com/raptoreum/raptoreum/commit/2c30818f7) Add pubKeyOperator to `quorum info` rpc response (#3327) -- [`2bbf78c1b`](https://github.com/raptoreum/raptoreum/commit/2bbf78c1b) Update release-notes.md -- [`2c305d02d`](https://github.com/raptoreum/raptoreum/commit/2c305d02d) Update translations 2020-02-03 (#3322) -- [`672e18e48`](https://github.com/raptoreum/raptoreum/commit/672e18e48) Only sync mempool from v0.15+ (proto 70216+) nodes (#3321) -- [`829bde81e`](https://github.com/raptoreum/raptoreum/commit/829bde81e) Fix dark text on dark background in combobox dropdowns on windows (#3315) -- [`c0a671e84`](https://github.com/raptoreum/raptoreum/commit/c0a671e84) Fix node protection logic false positives (#3314) -- [`8d5fc6e0a`](https://github.com/raptoreum/raptoreum/commit/8d5fc6e0a) Merge #13162: [net] Don't incorrectly log that REJECT messages are unknown. -- [`9e711befd`](https://github.com/raptoreum/raptoreum/commit/9e711befd) More of 13946 -- [`e5e3572e9`](https://github.com/raptoreum/raptoreum/commit/e5e3572e9) Merge #13946: p2p: Clarify control flow in ProcessMessage -- [`dbbc51121`](https://github.com/raptoreum/raptoreum/commit/dbbc51121) Add `automake` package to raptoreum-win-signer's packages list (#3307) -- [`fd0f24335`](https://github.com/raptoreum/raptoreum/commit/fd0f24335) [Trivial] Release note update (#3308) -- [`058872d4f`](https://github.com/raptoreum/raptoreum/commit/058872d4f) Update release-notes.md -- [`546e69f1a`](https://github.com/raptoreum/raptoreum/commit/546e69f1a) Fix CActiveSmartnodeManager::GetLocalAddress to prefer IPv4 if multiple local addresses are known (#3304) -- [`e4ef7e8d0`](https://github.com/raptoreum/raptoreum/commit/e4ef7e8d0) Drop unused `invSet` in `CDKGSession` (#3303) -- [`da7686c93`](https://github.com/raptoreum/raptoreum/commit/da7686c93) Update translations 2020-01-23 (#3302) -- [`6b5d3edae`](https://github.com/raptoreum/raptoreum/commit/6b5d3edae) Fix dip4-coinbasemerkleroots.py race condition (#3297) -- [`a8213cadb`](https://github.com/raptoreum/raptoreum/commit/a8213cadb) Various fixes for DSTX-es (#3295) -- [`2c26bdf2d`](https://github.com/raptoreum/raptoreum/commit/2c26bdf2d) Update release-notes.md -- [`1d9adbe63`](https://github.com/raptoreum/raptoreum/commit/1d9adbe63) Replace generic CScopedDBTransaction with specialized CEvoDBScopedCommitter (#3292) -- [`8fd486c6b`](https://github.com/raptoreum/raptoreum/commit/8fd486c6b) Translations 2020-01 (#3192) -- [`3c54f6527`](https://github.com/raptoreum/raptoreum/commit/3c54f6527) Bump copyright year to 2020 (#3290) -- [`35d28c748`](https://github.com/raptoreum/raptoreum/commit/35d28c748) Update man pages (#3291) -- [`203cc9077`](https://github.com/raptoreum/raptoreum/commit/203cc9077) trivial: adding SVG and high contrast icons (#3209) -- [`e875d4925`](https://github.com/raptoreum/raptoreum/commit/e875d4925) Define defaultTheme and darkThemePrefix as constants and use them instead of plain strings (#3288) -- [`1d203b422`](https://github.com/raptoreum/raptoreum/commit/1d203b422) Bump PROTOCOL_VERSION to 70216 (#3287) -- [`b84482ac5`](https://github.com/raptoreum/raptoreum/commit/b84482ac5) Let regtest have its own qt settings (#3286) -- [`1c885bbed`](https://github.com/raptoreum/raptoreum/commit/1c885bbed) Only load valid themes, fallback to "Light" theme otherwise (#3285) -- [`ce924278d`](https://github.com/raptoreum/raptoreum/commit/ce924278d) Don't load caches when blocks/chainstate was deleted and also delete old caches (#3280) -- [`ebf529e8a`](https://github.com/raptoreum/raptoreum/commit/ebf529e8a) Drop new connection instead of old one when duplicate MNAUTH is received (#3272) -- [`817cd9a17`](https://github.com/raptoreum/raptoreum/commit/817cd9a17) AppInitMain should quit early and return `false` if shutdown was requested at some point (#3267) -- [`42e104932`](https://github.com/raptoreum/raptoreum/commit/42e104932) Tweak few more strings re mixing and balances (#3265) -- [`d30eeb6f8`](https://github.com/raptoreum/raptoreum/commit/d30eeb6f8) Use -Wno-psabi for arm builds on Travis/Gitlab (#3264) -- [`1df3c67a8`](https://github.com/raptoreum/raptoreum/commit/1df3c67a8) A few fixes for integration tests (#3263) -- [`6e50a7b2a`](https://github.com/raptoreum/raptoreum/commit/6e50a7b2a) Fix params.size() check in "protx list wallet" RPC (#3259) -- [`1a1cec224`](https://github.com/raptoreum/raptoreum/commit/1a1cec224) Fix pull request detection in .gitlab-ci.yml (#3256) -- [`31afa9c0f`](https://github.com/raptoreum/raptoreum/commit/31afa9c0f) Don't disconnect smartnode connections when we have less then the desired amount of outbound nodes (#3255) -- [`cecbbab3c`](https://github.com/raptoreum/raptoreum/commit/cecbbab3c) move privatesend rpc methods from rpc/smartnode.cpp to new rpc/privatesend.cpp (#3253) -- [`8e054f374`](https://github.com/raptoreum/raptoreum/commit/8e054f374) Sync mempool from other nodes on start (#3251) -- [`474f25b8d`](https://github.com/raptoreum/raptoreum/commit/474f25b8d) Push islock invs when syncing mempool (#3250) -- [`3b0f8ff8b`](https://github.com/raptoreum/raptoreum/commit/3b0f8ff8b) Skip mnsync restrictions for whitelisted and manually added nodes (#3249) -- [`fd94e9c38`](https://github.com/raptoreum/raptoreum/commit/fd94e9c38) Streamline, refactor and unify PS checks for mixing entries and final txes (#3246) -- [`c42b20097`](https://github.com/raptoreum/raptoreum/commit/c42b20097) Try to avoid being marked as a bad quorum member when we sleep for too long in SleepBeforePhase (#3245) -- [`db6ea1de8`](https://github.com/raptoreum/raptoreum/commit/db6ea1de8) Fix log output in CDKGPendingMessages::PushPendingMessage (#3244) -- [`416d85b29`](https://github.com/raptoreum/raptoreum/commit/416d85b29) Tolerate parent cache with empty cache-artifact directory (#3240) -- [`0c9c27c6f`](https://github.com/raptoreum/raptoreum/commit/0c9c27c6f) Add ccache to gitian packages lists (#3237) -- [`65206833e`](https://github.com/raptoreum/raptoreum/commit/65206833e) Fix menu bar text color in Dark theme (#3236) -- [`7331d4edd`](https://github.com/raptoreum/raptoreum/commit/7331d4edd) Bump wait_for_chainlocked_block_all_nodes timeout in llmq-is-retroactive.py to 30 sec when mining lots of blocks at once (#3238) -- [`dad102669`](https://github.com/raptoreum/raptoreum/commit/dad102669) Update static and dns seeds for mainnet and testnet (#3234) -- [`9378c271b`](https://github.com/raptoreum/raptoreum/commit/9378c271b) Modify makesseeds.py to work with "protx list valid 1" instead of "smartnode list (#3235) -- [`91a996e32`](https://github.com/raptoreum/raptoreum/commit/91a996e32) Make sure mempool txes are properly processed by CChainLocksHandler despite node restarts (#3226) -- [`2b587f0eb`](https://github.com/raptoreum/raptoreum/commit/2b587f0eb) Slightly refactor CDKGSessionHandler::SleepBeforePhase (#3224) -- [`fdb05860e`](https://github.com/raptoreum/raptoreum/commit/fdb05860e) Don't join thread in CQuorum::~CQuorum when called from within the thread (#3223) -- [`4c00d98ea`](https://github.com/raptoreum/raptoreum/commit/4c00d98ea) Allow re-signing of IS locks when performing retroactive signing (#3219) -- [`b4b9d3467`](https://github.com/raptoreum/raptoreum/commit/b4b9d3467) Tests: Fix the way nodes are connected to each other in setup_network/start_smartnodes (#3221) -- [`dfe99c950`](https://github.com/raptoreum/raptoreum/commit/dfe99c950) Decouple cs_mnauth/cs_main (#3220) -- [`08f447af9`](https://github.com/raptoreum/raptoreum/commit/08f447af9) Tests: Allow specifying different cmd-line params for each smartnode (#3222) -- [`9dad60386`](https://github.com/raptoreum/raptoreum/commit/9dad60386) Tweak "Send" popup and refactor related code a bit (#3218) -- [`bb7a32d2e`](https://github.com/raptoreum/raptoreum/commit/bb7a32d2e) Add Dark theme (#3216) -- [`05ac4dbb4`](https://github.com/raptoreum/raptoreum/commit/05ac4dbb4) Raptoreumify few strings (#3214) -- [`482a549a2`](https://github.com/raptoreum/raptoreum/commit/482a549a2) Add collateral, owner and voting addresses to smartnode list table (#3207) -- [`37f96f5a3`](https://github.com/raptoreum/raptoreum/commit/37f96f5a3) Bump version to 0.15 and update few const-s/chainparams (#3204) -- [`9de994988`](https://github.com/raptoreum/raptoreum/commit/9de994988) Compliance changes to terminology (#3211) -- [`d475f17bc`](https://github.com/raptoreum/raptoreum/commit/d475f17bc) Fix styles for progress dialogs, shutdown window and text selection (#3212) -- [`df372ec5f`](https://github.com/raptoreum/raptoreum/commit/df372ec5f) Fix off-by-one error for coinbase txes confirmation icons (#3206) -- [`1e94e3333`](https://github.com/raptoreum/raptoreum/commit/1e94e3333) Fix styling for disabled buttons (#3205) -- [`7677b5578`](https://github.com/raptoreum/raptoreum/commit/7677b5578) Actually apply CSS styling to RPC console (#3201) -- [`63cc22d5e`](https://github.com/raptoreum/raptoreum/commit/63cc22d5e) More Qt tweaks (#3200) -- [`7aa9c43f8`](https://github.com/raptoreum/raptoreum/commit/7aa9c43f8) Few Qt tweaks (#3199) -- [`fd50c1c71`](https://github.com/raptoreum/raptoreum/commit/fd50c1c71) Hold cs_main/cs_wallet in main MakeCollateralAmounts (#3197) -- [`460e0f475`](https://github.com/raptoreum/raptoreum/commit/460e0f475) Fix locking of funds for mixing (#3194) -- [`415b81e41`](https://github.com/raptoreum/raptoreum/commit/415b81e41) Refactor some pow functions (#3198) -- [`b2fed3862`](https://github.com/raptoreum/raptoreum/commit/b2fed3862) A few trivial fixes for RPCs (#3196) -- [`f8296364a`](https://github.com/raptoreum/raptoreum/commit/f8296364a) Two trivial fixes for logs (#3195) -- [`d5cc88f00`](https://github.com/raptoreum/raptoreum/commit/d5cc88f00) Should mark tx as a PS one regardless of change calculations in CreateTransaction (#3193) -- [`e9235b9bb`](https://github.com/raptoreum/raptoreum/commit/e9235b9bb) trivial: Rename txid paramater for gobject voteraw (#3191) -- [`70b320bab`](https://github.com/raptoreum/raptoreum/commit/70b320bab) Detect smartnode mode from smartnodeblsprivkey arg (#3188) -- [`1091ab3c6`](https://github.com/raptoreum/raptoreum/commit/1091ab3c6) Translations201909 (#3107) -- [`251fb5e69`](https://github.com/raptoreum/raptoreum/commit/251fb5e69) Slightly optimize ApproximateBestSubset and its usage for PS txes (#3184) -- [`a55624b25`](https://github.com/raptoreum/raptoreum/commit/a55624b25) Fix 3182: Append scrollbar styles (#3186) -- [`1bbe1adb4`](https://github.com/raptoreum/raptoreum/commit/1bbe1adb4) Add a simple test for payoutAddress reuse in `protx update_registrar` (#3183) -- [`372389d23`](https://github.com/raptoreum/raptoreum/commit/372389d23) Disable styling for scrollbars on macos (#3182) -- [`e0781095f`](https://github.com/raptoreum/raptoreum/commit/e0781095f) A couple of fixes for additional indexes (#3181) -- [`d3ce0964b`](https://github.com/raptoreum/raptoreum/commit/d3ce0964b) Add Qt GUI refresh w/branding updates (#3000) -- [`9bc699ff2`](https://github.com/raptoreum/raptoreum/commit/9bc699ff2) Update activemn if protx info changed (#3176) -- [`bbd9b10d4`](https://github.com/raptoreum/raptoreum/commit/bbd9b10d4) Refactor nonLockedTxsByInputs (#3178) -- [`64a913d6f`](https://github.com/raptoreum/raptoreum/commit/64a913d6f) Allow empty strings in `protx update_registrar` as an option to re-use current values (#3177) -- [`3c21d2577`](https://github.com/raptoreum/raptoreum/commit/3c21d2577) Slightly adjust some README.md files (#3175) -- [`883fcbe8b`](https://github.com/raptoreum/raptoreum/commit/883fcbe8b) Always run extended tests in Gitlab CI (#3173) -- [`a7492c1d3`](https://github.com/raptoreum/raptoreum/commit/a7492c1d3) Handle coin type via CCoinControl (#3172) -- [`0d1a04905`](https://github.com/raptoreum/raptoreum/commit/0d1a04905) Don't show individual messages for each TX when too many come in at once (#3170) -- [`589c89250`](https://github.com/raptoreum/raptoreum/commit/589c89250) Fix 2 more bottlenecks causing GUI lockups (#3169) -- [`dfd6ee472`](https://github.com/raptoreum/raptoreum/commit/dfd6ee472) Actually update spent index on DisconnectBlock (#3167) -- [`3c818e95b`](https://github.com/raptoreum/raptoreum/commit/3c818e95b) Only track last seen time instead of first and last seen time (#3165) -- [`df3dbe85b`](https://github.com/raptoreum/raptoreum/commit/df3dbe85b) Wait for sporks to propagate in llmq-chainlocks.py before mining new blocks (#3168) -- [`8cbd63d9e`](https://github.com/raptoreum/raptoreum/commit/8cbd63d9e) Make HD wallet warning a bit more natural (#3164) -- [`001c4338b`](https://github.com/raptoreum/raptoreum/commit/001c4338b) Improved messaging for ip address errors (#3163) -- [`33d04ebf2`](https://github.com/raptoreum/raptoreum/commit/33d04ebf2) Disable move ctor/operator for CKeyHolder (#3162) -- [`da2f503a4`](https://github.com/raptoreum/raptoreum/commit/da2f503a4) Fix largest part of GUI lockups with large wallets (#3155) -- [`3c6b5f98e`](https://github.com/raptoreum/raptoreum/commit/3c6b5f98e) Use wallet UTXOs whenever possible to avoid looping through all wallet txes (#3156) -- [`4db91c605`](https://github.com/raptoreum/raptoreum/commit/4db91c605) Fix Gitlab cache issues (#3160) -- [`e9ed35482`](https://github.com/raptoreum/raptoreum/commit/e9ed35482) Partially revert 3061 (#3150) -- [`4b6af8f2c`](https://github.com/raptoreum/raptoreum/commit/4b6af8f2c) Few fixes related to SelectCoinsGroupedByAddresses (#3144) -- [`859d60f81`](https://github.com/raptoreum/raptoreum/commit/859d60f81) Don't use $CACHE_DIR in after_script (#3159) -- [`be127bc2e`](https://github.com/raptoreum/raptoreum/commit/be127bc2e) Replace vecAskFor with a priority queue (#3147) -- [`a13a9182d`](https://github.com/raptoreum/raptoreum/commit/a13a9182d) Add missing "notfound" and "getsporks" to messagemap (#3146) -- [`efd8d2c82`](https://github.com/raptoreum/raptoreum/commit/efd8d2c82) Avoid propagating InstantSend related old recovered sigs (#3145) -- [`24fee3051`](https://github.com/raptoreum/raptoreum/commit/24fee3051) Add support for Gitlab CI (#3149) -- [`1cbe280ad`](https://github.com/raptoreum/raptoreum/commit/1cbe280ad) Qt: Remove old themes (#3141) -- [`dcdf1f3a6`](https://github.com/raptoreum/raptoreum/commit/dcdf1f3a6) Some refactoring for spork related functionality in tests (#3137) -- [`411241471`](https://github.com/raptoreum/raptoreum/commit/411241471) Introduce getprivatesendinfo and deprecate getpoolinfo (#3140) -- [`152c10bc4`](https://github.com/raptoreum/raptoreum/commit/152c10bc4) Various fixes for mixing queues (#3138) -- [`e0c56246f`](https://github.com/raptoreum/raptoreum/commit/e0c56246f) Fixes and refactorings related to using mnsync in tests (#3136) -- [`f8e238c5b`](https://github.com/raptoreum/raptoreum/commit/f8e238c5b) [Trivial] RPC help updates (#3134) -- [`d49ee618f`](https://github.com/raptoreum/raptoreum/commit/d49ee618f) Add more logging to RaptoreumTestFramework (#3130) -- [`cd6c5b4b4`](https://github.com/raptoreum/raptoreum/commit/cd6c5b4b4) Multiple fixes for ChainLock tests (#3129) -- [`e06c116d2`](https://github.com/raptoreum/raptoreum/commit/e06c116d2) Actually pass extra_args to nodes in assumevalid.py (#3131) -- [`737ac967f`](https://github.com/raptoreum/raptoreum/commit/737ac967f) Refactor some Raptoreum-specific `wait_for*` functions in tests (#3122) -- [`b4aefb513`](https://github.com/raptoreum/raptoreum/commit/b4aefb513) Also consider txindex for transactions in AlreadyHave() (#3126) -- [`d9e98e31e`](https://github.com/raptoreum/raptoreum/commit/d9e98e31e) Fix scripted diff check condition (#3128) -- [`bad3243b8`](https://github.com/raptoreum/raptoreum/commit/bad3243b8) Bump mocktime before generating new blocks and generate a few blocks at the end of `test_mempool_doublespend` in `p2p-instantsend.py` (#3125) -- [`82ebba18f`](https://github.com/raptoreum/raptoreum/commit/82ebba18f) Few fixes for `wait_for_instantlock` (#3123) -- [`a2fa9bb7e`](https://github.com/raptoreum/raptoreum/commit/a2fa9bb7e) Ignore recent rejects filter for locked txes (#3124) -- [`2ca2138fc`](https://github.com/raptoreum/raptoreum/commit/2ca2138fc) Whitelist nodes in llmq-dkgerrors.py (#3112) -- [`a8fa5cff9`](https://github.com/raptoreum/raptoreum/commit/a8fa5cff9) Make orphan TX map limiting dependent on total TX size instead of TX count (#3121) -- [`746b5f8cd`](https://github.com/raptoreum/raptoreum/commit/746b5f8cd) Remove commented out code (#3117) -- [`3ac583cce`](https://github.com/raptoreum/raptoreum/commit/3ac583cce) docs: Add packages for building in Alpine Linux (#3115) -- [`c5da93851`](https://github.com/raptoreum/raptoreum/commit/c5da93851) A couple of minor improvements in IS code (#3114) -- [`43b7c31d9`](https://github.com/raptoreum/raptoreum/commit/43b7c31d9) Wait for the actual best block chainlock in llmq-chainlocks.py (#3109) -- [`22ac6ba4e`](https://github.com/raptoreum/raptoreum/commit/22ac6ba4e) Make sure chainlocks and blocks are propagated in llmq-is-cl-conflicts.py before moving to next steps (#3108) -- [`9f1ee8c70`](https://github.com/raptoreum/raptoreum/commit/9f1ee8c70) scripted-diff: Refactor llmq type consensus param names (#3093) -- [`1c74b668b`](https://github.com/raptoreum/raptoreum/commit/1c74b668b) Introduce getbestchainlock rpc and fix llmq-is-cl-conflicts.py (#3094) -- [`ac0270871`](https://github.com/raptoreum/raptoreum/commit/ac0270871) Respect `logips` config option in few more log outputs (#3078) -- [`d26b6a84c`](https://github.com/raptoreum/raptoreum/commit/d26b6a84c) Fix a couple of issues with PS fee calculations (#3077) -- [`40399fd97`](https://github.com/raptoreum/raptoreum/commit/40399fd97) Circumvent BIP69 sorting in fundrawtransaction.py test (#3100) -- [`e2d651f60`](https://github.com/raptoreum/raptoreum/commit/e2d651f60) Add OpenSSL termios fix for musl libc (#3099) -- [`783653f6a`](https://github.com/raptoreum/raptoreum/commit/783653f6a) Ensure execinfo.h and linker flags set in autoconf (#3098) -- [`7320c3da2`](https://github.com/raptoreum/raptoreum/commit/7320c3da2) Refresh zmq 4.1.5 patches (#3092) -- [`822e617be`](https://github.com/raptoreum/raptoreum/commit/822e617be) Fix chia_bls include prefix (#3091) -- [`35f079cbf`](https://github.com/raptoreum/raptoreum/commit/35f079cbf) Remove unused code (#3097) -- [`1acde17e8`](https://github.com/raptoreum/raptoreum/commit/1acde17e8) Don't care about governance cache while the blockchain isn't synced yet (#3089) -- [`0d126c2ae`](https://github.com/raptoreum/raptoreum/commit/0d126c2ae) Use chainparams factory for devnet (#3087) -- [`ac90abe89`](https://github.com/raptoreum/raptoreum/commit/ac90abe89) When mixing, always try to join an exsisting queue, only fall back to starting a new queue (#3085) -- [`68d575dc0`](https://github.com/raptoreum/raptoreum/commit/68d575dc0) Smartnodes should have no wallet enabled (#3084) -- [`6b5b70fab`](https://github.com/raptoreum/raptoreum/commit/6b5b70fab) Remove liquidity provider privatesend (#3082) -- [`0b2221ed6`](https://github.com/raptoreum/raptoreum/commit/0b2221ed6) Clarify default max peer connections (#3081) -- [`c22169d57`](https://github.com/raptoreum/raptoreum/commit/c22169d57) Reduce non-debug PS log output (#3076) -- [`41ae1c7e2`](https://github.com/raptoreum/raptoreum/commit/41ae1c7e2) Add LDFLAGS_WRAP_EXCEPTIONS to raptoreum_fuzzy linking (#3075) -- [`77b88558e`](https://github.com/raptoreum/raptoreum/commit/77b88558e) Update/modernize macOS plist (#3074) -- [`f1ff14818`](https://github.com/raptoreum/raptoreum/commit/f1ff14818) Fix bip69 vs change position issue (#3063) -- [`9abc39383`](https://github.com/raptoreum/raptoreum/commit/9abc39383) Refactor few things here and there (#3066) -- [`3d5eabcfb`](https://github.com/raptoreum/raptoreum/commit/3d5eabcfb) Update/unify `debug` and `logging` rpc descriptions (#3071) -- [`0e94e97cc`](https://github.com/raptoreum/raptoreum/commit/0e94e97cc) Add missing tx `type` to `TxToUniv` (#3069) -- [`becca24fc`](https://github.com/raptoreum/raptoreum/commit/becca24fc) Few fixes in docs/comments (#3068) -- [`9d109d6a3`](https://github.com/raptoreum/raptoreum/commit/9d109d6a3) Add missing `instantlock`/`instantlock_internal` to `getblock`'s `verbosity=2` mode (#3067) -- [`0f088d03a`](https://github.com/raptoreum/raptoreum/commit/0f088d03a) Change regtest and devnet p2p/rpc ports (#3064) -- [`190542256`](https://github.com/raptoreum/raptoreum/commit/190542256) Rework govobject/trigger cleanup a bit (#3070) -- [`386de78bc`](https://github.com/raptoreum/raptoreum/commit/386de78bc) Fix SelectCoinsMinConf to allow instant respends (#3061) -- [`cbbeec689`](https://github.com/raptoreum/raptoreum/commit/cbbeec689) RPC Getrawtransaction fix (#3065) -- [`1e3496799`](https://github.com/raptoreum/raptoreum/commit/1e3496799) Added getmemoryinfo parameter string update (#3062) -- [`9d2d8cced`](https://github.com/raptoreum/raptoreum/commit/9d2d8cced) Add a few malleability tests for DIP2/3 transactions (#3060) -- [`4983f7abb`](https://github.com/raptoreum/raptoreum/commit/4983f7abb) RPC Fix typo in getmerkleblocks help (#3056) -- [`a78dcfdec`](https://github.com/raptoreum/raptoreum/commit/a78dcfdec) Add the public GPG key for Pasta for Gitian building (#3057) -- [`929c892c0`](https://github.com/raptoreum/raptoreum/commit/929c892c0) Remove p2p alert leftovers (#3050) -- [`dd7873857`](https://github.com/raptoreum/raptoreum/commit/dd7873857) Re-verify invalid IS sigs when the active quorum set rotated (#3052) -- [`13e023510`](https://github.com/raptoreum/raptoreum/commit/13e023510) Remove recovered sigs from the LLMQ db when corresponding IS locks get confirmed (#3048) -- [`4a7525da3`](https://github.com/raptoreum/raptoreum/commit/4a7525da3) Add "instantsendlocks" to getmempoolinfo RPC (#3047) -- [`fbb49f92d`](https://github.com/raptoreum/raptoreum/commit/fbb49f92d) Bail out properly on Evo DB consistency check failures in ConnectBlock/DisconnectBlock (#3044) -- [`8d89350b8`](https://github.com/raptoreum/raptoreum/commit/8d89350b8) Use less alarming fee warning note (#3038) -- [`02f6188e8`](https://github.com/raptoreum/raptoreum/commit/02f6188e8) Do not count 0-fee txes for fee estimation (#3037) -- [`f0c73f5ce`](https://github.com/raptoreum/raptoreum/commit/f0c73f5ce) Revert "Skip mempool.dat when wallet is starting in "zap" mode (#2782)" -- [`be3bc48c9`](https://github.com/raptoreum/raptoreum/commit/be3bc48c9) Fix broken link in PrivateSend info dialog (#3031) -- [`acab8c552`](https://github.com/raptoreum/raptoreum/commit/acab8c552) Add Raptoreum Core Group codesign certificate (#3027) -- [`a1c4321e9`](https://github.com/raptoreum/raptoreum/commit/a1c4321e9) Fix osslsigncode compile issue in gitian-build (#3026) -- [`2f21e5551`](https://github.com/raptoreum/raptoreum/commit/2f21e5551) Remove legacy InstantSend code (#3020) -- [`7a440d626`](https://github.com/raptoreum/raptoreum/commit/7a440d626) Optimize on-disk deterministic smartnode storage to reduce size of evodb (#3017) -- [`85fcf32c9`](https://github.com/raptoreum/raptoreum/commit/85fcf32c9) Remove support for InstantSend locked gobject collaterals (#3019) -- [`bdec34c94`](https://github.com/raptoreum/raptoreum/commit/bdec34c94) remove DS mixes once they have been included in a chainlocked block (#3015) -- [`ee9adb948`](https://github.com/raptoreum/raptoreum/commit/ee9adb948) Use std::unique_ptr for mnList in CSimplifiedMNList (#3014) -- [`b401a3baa`](https://github.com/raptoreum/raptoreum/commit/b401a3baa) Fix compilation on Ubuntu 16.04 (#3013) -- [`c6eededca`](https://github.com/raptoreum/raptoreum/commit/c6eededca) Add "isValidMember" and "memberIndex" to "quorum memberof" and allow to specify quorum scan count (#3009) -- [`b9aadc071`](https://github.com/raptoreum/raptoreum/commit/b9aadc071) Fix excessive memory use when flushing chainstate and EvoDB (#3008) -- [`780bffeb7`](https://github.com/raptoreum/raptoreum/commit/780bffeb7) Enable stacktrace support in gitian builds (#3006) -- [`5809c5c3d`](https://github.com/raptoreum/raptoreum/commit/5809c5c3d) Implement "quorum memberof" (#3004) -- [`63424fb26`](https://github.com/raptoreum/raptoreum/commit/63424fb26) Fix 2 common Travis failures which happen when Travis has network issues (#3003) -- [`09b017fc5`](https://github.com/raptoreum/raptoreum/commit/09b017fc5) Only load signingActiveQuorumCount + 1 quorums into cache (#3002) -- [`b75e1cebd`](https://github.com/raptoreum/raptoreum/commit/b75e1cebd) Decouple lite mode and client-side PrivateSend (#2893) -- [`b9a738528`](https://github.com/raptoreum/raptoreum/commit/b9a738528) Remove skipped denom from the list on tx commit (#2997) -- [`5bdb2c0ce`](https://github.com/raptoreum/raptoreum/commit/5bdb2c0ce) Revert "Show BIP9 progress in getblockchaininfo (#2435)" -- [`b62db7618`](https://github.com/raptoreum/raptoreum/commit/b62db7618) Revert " Add real timestamp to log output when mock time is enabled (#2604)" -- [`1f6e0435b`](https://github.com/raptoreum/raptoreum/commit/1f6e0435b) [Trivial] Fix a typo in a comment in mnauth.h (#2988) -- [`f84d5d46d`](https://github.com/raptoreum/raptoreum/commit/f84d5d46d) QT: Revert "Force TLS1.0+ for SSL connections" (#2985) -- [`2e13d1305`](https://github.com/raptoreum/raptoreum/commit/2e13d1305) Add some comments to make quorum merkle root calculation more clear+ (#2984) -- [`6677a614a`](https://github.com/raptoreum/raptoreum/commit/6677a614a) Run extended tests when Travis is started through cron (#2983) -- [`d63202bdc`](https://github.com/raptoreum/raptoreum/commit/d63202bdc) Should send "reject" when mixing queue is full (#2981) -- [`8d5781f40`](https://github.com/raptoreum/raptoreum/commit/8d5781f40) Stop reporting/processing the number of mixing participants in DSSTATUSUPDATE (#2980) -- [`7334aa553`](https://github.com/raptoreum/raptoreum/commit/7334aa553) adjust privatesend formatting and follow some best practices (#2979) -- [`f14179ca0`](https://github.com/raptoreum/raptoreum/commit/f14179ca0) [Tests] Remove unused variable and inline another variable in evo_deterministicmns_tests.cpp (#2978) -- [`2756cb795`](https://github.com/raptoreum/raptoreum/commit/2756cb795) remove spork 12 (#2754) -- [`633231092`](https://github.com/raptoreum/raptoreum/commit/633231092) Provide correct params to AcceptToMemoryPoolWithTime() in LoadMempool() (#2976) -- [`e03538778`](https://github.com/raptoreum/raptoreum/commit/e03538778) Back off for 1m when connecting to quorum smartnodes (#2975) -- [`bfcfb70d8`](https://github.com/raptoreum/raptoreum/commit/bfcfb70d8) Ignore blocks that do not match the filter in getmerkleblocks rpc (#2973) -- [`4739daddc`](https://github.com/raptoreum/raptoreum/commit/4739daddc) Process/keep messages/connections from PoSe-banned MNs (#2967) -- [`864856688`](https://github.com/raptoreum/raptoreum/commit/864856688) Multiple speed optimizations for deterministic MN list handling (#2972) -- [`d931cb723`](https://github.com/raptoreum/raptoreum/commit/d931cb723) Update copyright date (2019) (#2970) -- [`a83b63186`](https://github.com/raptoreum/raptoreum/commit/a83b63186) Fix UI smartnode list (#2966) -- [`85c9ea400`](https://github.com/raptoreum/raptoreum/commit/85c9ea400) Throw a bit more descriptive error message on UpgradeDB failure on pruned nodes (#2962) -- [`2c5e2bc6c`](https://github.com/raptoreum/raptoreum/commit/2c5e2bc6c) Inject custom specialization of std::hash for SporkId enum into std (#2960) -- [`809aae73a`](https://github.com/raptoreum/raptoreum/commit/809aae73a) RPC docs helper updates (#2949) -- [`09d66c776`](https://github.com/raptoreum/raptoreum/commit/09d66c776) Fix compiler warning (#2956) -- [`26bd0d278`](https://github.com/raptoreum/raptoreum/commit/26bd0d278) Fix bls and bls_dkg bench (#2955) -- [`d28d318aa`](https://github.com/raptoreum/raptoreum/commit/d28d318aa) Remove logic for handling objects and votes orphaned by not-yet-known MNs (#2954) -- [`e02c562aa`](https://github.com/raptoreum/raptoreum/commit/e02c562aa) [RPC] Remove check for deprecated `smartnode start-many` command (#2950) -- [`fc73b4d6e`](https://github.com/raptoreum/raptoreum/commit/fc73b4d6e) Refactor sporks to get rid of repeated if/else blocks (#2946) -- [`a149ca747`](https://github.com/raptoreum/raptoreum/commit/a149ca747) Remove references to instantx and darksend in sendcoinsdialog.cpp (#2936) -- [`b74cd3e10`](https://github.com/raptoreum/raptoreum/commit/b74cd3e10) Only require valid collaterals for votes and triggers (#2947) -- [`66b336c93`](https://github.com/raptoreum/raptoreum/commit/66b336c93) Use Travis stages instead of custom timeouts (#2948) -- [`5780fa670`](https://github.com/raptoreum/raptoreum/commit/5780fa670) Remove duplicate code from src/Makefile.am (#2944) -- [`428f30450`](https://github.com/raptoreum/raptoreum/commit/428f30450) Implement `rawchainlocksig` and `rawtxlocksig` (#2930) -- [`c08e76101`](https://github.com/raptoreum/raptoreum/commit/c08e76101) Tighten rules for DSVIN/DSTX (#2897) -- [`f1fe24b67`](https://github.com/raptoreum/raptoreum/commit/f1fe24b67) Only gracefully timeout Travis when integration tests need to be run (#2933) -- [`7c05aa821`](https://github.com/raptoreum/raptoreum/commit/7c05aa821) Also gracefully timeout Travis builds when building source takes >30min (#2932) -- [`5652ea023`](https://github.com/raptoreum/raptoreum/commit/5652ea023) Show number of InstantSend locks in Debug Console (#2919) -- [`a3f030609`](https://github.com/raptoreum/raptoreum/commit/a3f030609) Implement getmerkleblocks rpc (#2894) -- [`32aa229c7`](https://github.com/raptoreum/raptoreum/commit/32aa229c7) Reorganize Raptoreum Specific code into folders (#2753) -- [`acbf0a221`](https://github.com/raptoreum/raptoreum/commit/acbf0a221) Bump version to 0.14.1 (#2928) +- [`6a54af0df7`](https://github.com/dashpay/dash/commit/6a54af0df7) Bump to v0.17.0.3 +- [`97e8461234`](https://github.com/dashpay/dash/commit/97e8461234) doc: Archive v0.17.0.2 release notes +- [`96c041896b`](https://github.com/dashpay/dash/commit/96c041896b) feat: add tor entrypoint script for use in dashmate (#4182) +- [`3661f36bbd`](https://github.com/dashpay/dash/commit/3661f36bbd) Merge #14416: Fix OSX dmg issue (10.12 to 10.14) (#4177) +- [`4f4bda0557`](https://github.com/dashpay/dash/commit/4f4bda0557) depends: Undefine `BLSALLOC_SODIUM` in `bls-dash.mk` (#4176) +- [`575e0a3070`](https://github.com/dashpay/dash/commit/575e0a3070) qt: Add `QFont::Normal` as a supported font weight when no other font weights were found (#4175) +- [`ce4a73b790`](https://github.com/dashpay/dash/commit/ce4a73b790) rpc: Fix `upgradetohd` help text (#4170) +- [`2fa8ddf160`](https://github.com/dashpay/dash/commit/2fa8ddf160) Translations 202105 (add missing) (#4169) Credits ======= Thanks to everyone who directly contributed to this release: -- Alexander Block (codablock) -- Amir Abrams (AmirAbrams) -- -k (charlesrocket) -- Cofresi -- Nathan Marley (nmarley) -- PastaPastaPasta -- Riku (rikublock) +- dustinface (xdustinface) - strophy -- taw00 -- thephez - UdjinM6 As well as everyone that submitted issues and reviewed pull requests. @@ -487,47 +81,52 @@ As well as everyone that submitted issues and reviewed pull requests. Older releases ============== -Raptoreum was previously known as Darkcoin. +Dash was previously known as Darkcoin. Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin which was first released on Jan/18/2014. -Darkcoin tree 0.9.x was the open source implementation of smartnodes based on +Darkcoin tree 0.9.x was the open source implementation of masternodes based on the 0.8.x tree and was first released on Mar/13/2014. Darkcoin tree 0.10.x used to be the closed source implementation of Darksend which was released open source on Sep/25/2014. -Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, -Darkcoin was rebranded to Raptoreum. +Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Dash. -Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. +Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. -Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. +Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v0.14.0.5](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.5.md) released December/08/2019 -- [v0.14.0.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.4.md) released November/22/2019 -- [v0.14.0.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.3.md) released August/15/2019 -- [v0.14.0.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.2.md) released July/4/2019 -- [v0.14.0.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.1.md) released May/31/2019 -- [v0.14.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 -- [v0.13.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 -- [v0.13.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 -- [v0.13.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 +- [v0.17.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.17.0.2.md) released May/19/2021 +- [v0.16.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.1.1.md) released November/17/2020 +- [v0.16.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.1.0.md) released November/14/2020 +- [v0.16.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.0.1.md) released September/30/2020 +- [v0.15.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15.0.0.md) released Febrary/18/2020 +- [v0.14.0.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md) released December/08/2019 +- [v0.14.0.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md) released November/22/2019 +- [v0.14.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/raptoreum/release-notes-0.10.0.md b/doc/release-notes/dash/release-notes-0.10.0.md similarity index 100% rename from doc/release-notes/raptoreum/release-notes-0.10.0.md rename to doc/release-notes/dash/release-notes-0.10.0.md diff --git a/doc/release-notes/raptoreum/release-notes-0.11.0.md b/doc/release-notes/dash/release-notes-0.11.0.md similarity index 99% rename from doc/release-notes/raptoreum/release-notes-0.11.0.md rename to doc/release-notes/dash/release-notes-0.11.0.md index 2efddd6c74..ce7f4a2f08 100644 --- a/doc/release-notes/raptoreum/release-notes-0.11.0.md +++ b/doc/release-notes/dash/release-notes-0.11.0.md @@ -146,7 +146,7 @@ Protocol and network code: - 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 +- Split MIN_PROTO_VERSION into INIT_PROTO_VERSION and OLD_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 diff --git a/doc/release-notes/raptoreum/release-notes-0.11.1.md b/doc/release-notes/dash/release-notes-0.11.1.md similarity index 100% rename from doc/release-notes/raptoreum/release-notes-0.11.1.md rename to doc/release-notes/dash/release-notes-0.11.1.md diff --git a/doc/release-notes/raptoreum/release-notes-0.11.2.md b/doc/release-notes/dash/release-notes-0.11.2.md similarity index 100% rename from doc/release-notes/raptoreum/release-notes-0.11.2.md rename to doc/release-notes/dash/release-notes-0.11.2.md diff --git a/doc/release-notes/raptoreum/release-notes-0.12.0.md b/doc/release-notes/dash/release-notes-0.12.0.md similarity index 98% rename from doc/release-notes/raptoreum/release-notes-0.12.0.md rename to doc/release-notes/dash/release-notes-0.12.0.md index 8d7aa7b9f0..2f1adfe6f6 100644 --- a/doc/release-notes/raptoreum/release-notes-0.12.0.md +++ b/doc/release-notes/dash/release-notes-0.12.0.md @@ -8,7 +8,7 @@ Raptoreum Core version 0.12.0 is now available from: Please report bugs using the issue tracker at github: - https://github.com/raptoreum/raptoreum/issues + https://github.com/raptor3um/raptoreum/issues How to Upgrade diff --git a/doc/release-notes/dash/release-notes-0.12.2.2.md b/doc/release-notes/dash/release-notes-0.12.2.2.md new file mode 100644 index 0000000000..cba902c101 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.12.2.2.md @@ -0,0 +1,260 @@ +Raptoreum Core version 0.12.2.2 +========================== + +Release is now available from: + + + +This is a new minor version release, bringing various bugfixes 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/Raptoreum-Qt (on Mac) or +raptoreumd/raptoreum-qt (on Linux). Because of the per-UTXO fix (see below) there is a +one-time database upgrade operation, so expect a slightly longer startup time on +the first run. + +Downgrade warning +----------------- + +### Downgrade to a version < 0.12.2.2 + +Because release 0.12.2.2 includes the per-UTXO fix (see below) which changes the +structure of the internal database, this release is not fully backwards +compatible. You will have to reindex the database if you decide to use any +previous version. + +This does not affect wallet forward or backward compatibility. + + +Notable changes +=============== + +Per-UTXO fix +------------ + +This fixes a potential vulnerability, so called 'Corebleed', which was +demonstrated this summer at the Вrеаkіng Віtсоіn Соnfеrеnсе іn Раrіs. The DoS +can cause nodes to allocate excessive amounts of memory, which leads them to a +halt. You can read more about the fix in the original Bitcoin Core pull request +https://github.com/bitcoin/bitcoin/pull/10195 + +To fix this issue in Raptoreum Core however, we had to backport a lot of other +improvements from Bitcoin Core, see full list of backports in the detailed +change log below. + +Additional indexes fix +---------------------- + +If you were using additional indexes like `addressindex`, `spentindex` or +`timestampindex` it's possible that they are not accurate. Please consider +reindexing the database by starting your node with `-reindex` command line +option. This is a one-time operation, the issue should be fixed now. + +InstantSend fix +--------------- + +InstantSend should work with multisig addresses now. + +PrivateSend fix +--------------- + +Some internal data structures were not cleared properly, which could lead +to a slightly higher memory consumption over a long period of time. This was +a minor issue which was not affecting mixing speed or user privacy in any way. + +Removal of support for local smartnodes +---------------------------------------- + +Keeping a wallet with 1000 RAPTOREUM unlocked for 24/7 is definitely not a good idea +anymore. Because of this fact, it's also no longer reasonable to update and test +this feature, so it's completely removed now. If for some reason you were still +using it, please follow one of the guides and setup a remote smartnode instead. + +Dropping old (pre-12.2) peers +----------------------------- + +Connections from peers with protocol lower than 70208 are no longer accepted. + +Other improvements and bug fixes +-------------------------------- + +As a result of previous intensive refactoring and some additional fixes, +it should be possible to compile Raptoreum Core with `--disable-wallet` option now. + +This release also improves sync process and significantly lowers the time after +which `getblocktemplate` rpc becomes available on node start. + +And as usual, various small bugs and typos were fixed and more refactoring was +done too. + + +0.12.2.2 Change log +=================== + +See detailed [change log](https://github.com/raptor3um/raptoreum/compare/v0.12.2.1...raptoreum:v0.12.2.2) below. + +### Backports: +- [`996f5103a`](https://github.com/raptor3um/raptoreum/commit/996f5103a) Backport #7056: Save last db read +- [`23fe35a18`](https://github.com/raptor3um/raptoreum/commit/23fe35a18) Backport #7756: Add cursor to iterate over utxo set, use this in `gettxoutsetinfo` +- [`17f2ea5d7`](https://github.com/raptor3um/raptoreum/commit/17f2ea5d7) Backport #7904: txdb: Fix assert crash in new UTXO set cursor +- [`2e54bd2e8`](https://github.com/raptor3um/raptoreum/commit/2e54bd2e8) Backport #7927: Minor changes to dbwrapper to simplify support for other databases +- [`abaf524f0`](https://github.com/raptor3um/raptoreum/commit/abaf524f0) Backport #7815: Break circular dependency main ↔ txdb +- [`02a6cef94`](https://github.com/raptor3um/raptoreum/commit/02a6cef94) Move index structures into spentindex.h +- [`d92b454a2`](https://github.com/raptor3um/raptoreum/commit/d92b454a2) Add SipHash-2-4 primitives to hash +- [`44526af95`](https://github.com/raptor3um/raptoreum/commit/44526af95) Use SipHash-2-4 for CCoinsCache index +- [`60e6a602e`](https://github.com/raptor3um/raptoreum/commit/60e6a602e) Use C++11 thread-safe static initializers in coins.h/coins.cpp +- [`753cb1563`](https://github.com/raptor3um/raptoreum/commit/753cb1563) Backport #7874: Improve AlreadyHave +- [`952383e16`](https://github.com/raptor3um/raptoreum/commit/952383e16) Backport #7933: Fix OOM when deserializing UTXO entries with invalid length +- [`e3b7ed449`](https://github.com/raptor3um/raptoreum/commit/e3b7ed449) Backport #8273: Bump `-dbcache` default to 300MiB +- [`94e01eb66`](https://github.com/raptor3um/raptoreum/commit/94e01eb66) Backport #8467: [Trivial] Do not shadow members in dbwrapper +- [`105fd1815`](https://github.com/raptor3um/raptoreum/commit/105fd1815) Use fixed preallocation instead of costly GetSerializeSize +- [`6fbe93aa7`](https://github.com/raptor3um/raptoreum/commit/6fbe93aa7) Backport #9307: Remove undefined FetchCoins method declaration +- [`6974f1723`](https://github.com/raptor3um/raptoreum/commit/6974f1723) Backport #9346: Batch construct batches +- [`4b4d22293`](https://github.com/raptor3um/raptoreum/commit/4b4d22293) Backport #9308: [test] Add CCoinsViewCache Access/Modify/Write tests +- [`a589c94a9`](https://github.com/raptor3um/raptoreum/commit/a589c94a9) Backport #9107: Safer modify new coins +- [`09b3e042f`](https://github.com/raptor3um/raptoreum/commit/09b3e042f) Backport #9310: Assert FRESH validity in CCoinsViewCache::BatchWrite +- [`ceb64fcd4`](https://github.com/raptor3um/raptoreum/commit/ceb64fcd4) Backport #8610: Share unused mempool memory with coincache +- [`817ecc03d`](https://github.com/raptor3um/raptoreum/commit/817ecc03d) Backport #9353: Add data() method to CDataStream (and use it) +- [`249db2776`](https://github.com/raptor3um/raptoreum/commit/249db2776) Backport #9999: [LevelDB] Plug leveldb logs to bitcoin logs +- [`cfefd34f4`](https://github.com/raptor3um/raptoreum/commit/cfefd34f4) Backport #10126: Compensate for memory peak at flush time +- [`ff9b2967a`](https://github.com/raptor3um/raptoreum/commit/ff9b2967a) Backport #10133: Clean up calculations of pcoinsTip memory usage +- [`567043d36`](https://github.com/raptor3um/raptoreum/commit/567043d36) Make DisconnectBlock and ConnectBlock static in validation.cpp +- [`9a266e68d`](https://github.com/raptor3um/raptoreum/commit/9a266e68d) Backport #10297: Simplify DisconnectBlock arguments/return value +- [`fc5ced317`](https://github.com/raptor3um/raptoreum/commit/fc5ced317) Backport #10445: Add test for empty chain and reorg consistency for gettxoutsetinfo. +- [`6f1997182`](https://github.com/raptor3um/raptoreum/commit/6f1997182) Add COMPACTSIZE wrapper similar to VARINT for serialization +- [`b06a6a2e7`](https://github.com/raptor3um/raptoreum/commit/b06a6a2e7) Fix use of missing self.log in blockchain.py +- [`8ed672219`](https://github.com/raptor3um/raptoreum/commit/8ed672219) Backport #10250: Fix some empty vector references +- [`afa96b7c1`](https://github.com/raptor3um/raptoreum/commit/afa96b7c1) Backport #10249: Switch CCoinsMap from boost to std unordered_map +- [`c81394b97`](https://github.com/raptor3um/raptoreum/commit/c81394b97) Backport #10195: Switch chainstate db and cache to per-txout model +- [`d4562b5e5`](https://github.com/raptor3um/raptoreum/commit/d4562b5e5) Fix CCoinsViewCache::GetPriority to use new per-utxo +- [`92bb65894`](https://github.com/raptor3um/raptoreum/commit/92bb65894) Fix address index to use new per-utxo DB +- [`9ad56fe18`](https://github.com/raptor3um/raptoreum/commit/9ad56fe18) Raptoreum related fixes for per-utxo DB +- [`4f807422f`](https://github.com/raptor3um/raptoreum/commit/4f807422f) Backport #10550: Don't return stale data from CCoinsViewCache::Cursor() +- [`151c552c7`](https://github.com/raptor3um/raptoreum/commit/151c552c7) Backport #10537: Few Minor per-utxo assert-semantics re-adds and tweak +- [`06aa02ff6`](https://github.com/raptor3um/raptoreum/commit/06aa02ff6) Backport #10559: Change semantics of HaveCoinInCache to match HaveCoin +- [`549839a50`](https://github.com/raptor3um/raptoreum/commit/549839a50) Backport #10581: Simplify return values of GetCoin/HaveCoin(InCache) +- [`5b232161a`](https://github.com/raptor3um/raptoreum/commit/5b232161a) Backport #10558: Address nits from per-utxo change +- [`1a9add78c`](https://github.com/raptor3um/raptoreum/commit/1a9add78c) Backport #10660: Allow to cancel the txdb upgrade via splashscreen keypress 'q' +- [`4102211a3`](https://github.com/raptor3um/raptoreum/commit/4102211a3) Backport #10526: Force on-the-fly compaction during pertxout upgrade +- [`8780c762e`](https://github.com/raptor3um/raptoreum/commit/8780c762e) Backport #10985: Add undocumented -forcecompactdb to force LevelDB compactions +- [`4cd19913d`](https://github.com/raptor3um/raptoreum/commit/4cd19913d) Backport #10998: Fix upgrade cancel warnings +- [`371feda4c`](https://github.com/raptor3um/raptoreum/commit/371feda4c) Backport #11529: Avoid slow transaction search with txindex enabled +- [`cdb2b1944`](https://github.com/raptor3um/raptoreum/commit/cdb2b1944) build: quiet annoying warnings without adding new ones +- [`fee05dab9`](https://github.com/raptor3um/raptoreum/commit/fee05dab9) build: silence gcc7's implicit fallthrough warning + +### Smartnodes: +- [`312663b4b`](https://github.com/raptor3um/raptoreum/commit/312663b4b) Remove support for local smartnodes (#1706) + +### PrivateSend: +- [`7e96af4e6`](https://github.com/raptor3um/raptoreum/commit/7e96af4e6) Refactor PrivateSend (#1735) +- [`f4502099a`](https://github.com/raptor3um/raptoreum/commit/f4502099a) make CheckDSTXes() private, execute it on both client and server (#1736) + +### InstantSend: +- [`4802a1fb7`](https://github.com/raptor3um/raptoreum/commit/4802a1fb7) Allow IS for all txes, not only for txes with p2pkh and data outputs (#1760) +- [`f37a64208`](https://github.com/raptor3um/raptoreum/commit/f37a64208) InstantSend txes should never qualify to be a 0-fee txes (#1777) + +### DIP0001: +- [`3028af19f`](https://github.com/raptor3um/raptoreum/commit/3028af19f) post-DIP0001 cleanup (#1763) +- [`51b2c7501`](https://github.com/raptor3um/raptoreum/commit/51b2c7501) Fix WarningBitsConditionChecker (#1765) + +### Network/Sync: +- [`5d58dd90c`](https://github.com/raptor3um/raptoreum/commit/5d58dd90c) Make sure to clear setAskFor in Raptoreum submodules (#1730) +- [`328009749`](https://github.com/raptor3um/raptoreum/commit/328009749) fine-tune sync conditions in getblocktemplate (#1739) +- [`362becbcc`](https://github.com/raptor3um/raptoreum/commit/362becbcc) Bump OLD_MIN_PEER_PROTO_VERSION to 70208 (#1772) +- [`930afd7df`](https://github.com/raptor3um/raptoreum/commit/930afd7df) Fix mnp and mnv invs (#1775) +- [`63e306148`](https://github.com/raptor3um/raptoreum/commit/63e306148) Improve sync (#1779) +- [`a79c97248`](https://github.com/raptor3um/raptoreum/commit/a79c97248) Fix ProcessVerifyBroadcast (#1780) + +### Build: +- [`c166ed39b`](https://github.com/raptor3um/raptoreum/commit/c166ed39b) Allow compilation with `--disable-wallet` (#1733) +- [`31bc9d4ee`](https://github.com/raptor3um/raptoreum/commit/31bc9d4ee) Show test progress for tests running in wine to avoid Travis timeout (#1740) +- [`32f21698e`](https://github.com/raptor3um/raptoreum/commit/32f21698e) Adjust tests to avoid Travis timeouts (#1745) +- [`837c4fc5d`](https://github.com/raptor3um/raptoreum/commit/837c4fc5d) Force rcc to use resource format version 1. (#1784) + +### GUI: +- [`70cb2a4af`](https://github.com/raptor3um/raptoreum/commit/70cb2a4af) Fix traditional UI theme (#1741) +- [`e975f891c`](https://github.com/raptor3um/raptoreum/commit/e975f891c) Fix ru typo (#1742) + +### Docs: +- [`bc8342558`](https://github.com/raptor3um/raptoreum/commit/bc8342558) Two small fixes in docs (#1746) +- [`9e7cc56cb`](https://github.com/raptor3um/raptoreum/commit/9e7cc56cb) Fix typo in release-notes.md (#1759) +- [`3f3705c47`](https://github.com/raptor3um/raptoreum/commit/3f3705c47) [Trivial] Typo/doc updates and RPC help formatting (#1758) +- [`e96da9f19`](https://github.com/raptor3um/raptoreum/commit/e96da9f19) move 0.12.2 release notes +- [`6915ee45e`](https://github.com/raptor3um/raptoreum/commit/6915ee45e) Bump version in README.md to 0.12.2 (#1774) +- [`0291604ad`](https://github.com/raptor3um/raptoreum/commit/0291604ad) Clarify usage of pointers and references in code (#1778) + +### Other: +- [`ccbd5273e`](https://github.com/raptor3um/raptoreum/commit/ccbd5273e) bump to 0.12.3.0 (#1726) +- [`865b61b50`](https://github.com/raptor3um/raptoreum/commit/865b61b50) Unify GetNextWorkRequired (#1737) +- [`d1aeac1b2`](https://github.com/raptor3um/raptoreum/commit/d1aeac1b2) Spelling mistake in validation.cpp (#1752) +- [`442325b07`](https://github.com/raptor3um/raptoreum/commit/442325b07) add `maxgovobjdatasize` field to the output of `getgovernanceinfo` (#1757) +- [`c5ec2f82a`](https://github.com/raptor3um/raptoreum/commit/c5ec2f82a) Drop `IsNormalPaymentScript`, use `IsPayToPublicKeyHash` (#1761) +- [`f9f28e7c7`](https://github.com/raptor3um/raptoreum/commit/f9f28e7c7) De-bump to 0.12.2.2 (#1768) +- [`54186a159`](https://github.com/raptor3um/raptoreum/commit/54186a159) Make sure additional indexes are recalculated correctly in VerifyDB (#1773) +- [`86e6f0dd2`](https://github.com/raptor3um/raptoreum/commit/86e6f0dd2) Fix CSmartnodeMan::ProcessVerify* logs (#1782) + + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alexander Block +- shade +- sidhujag +- thephez +- turbanoff +- Ilya Savinov +- UdjinM6 +- Will Wray + +As well as Bitcoin Core Developers and everyone that submitted issues, +reviewed pull requests or helped translating on +[Transifex](https://www.transifex.com/projects/p/raptoreum/). + + +Older releases +============== + +Raptoreum was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of smartnodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Raptoreum. + +Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.12.2](release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](release-notes/raptoreum/release-notes-0.12.1.md) released ???/??/2016 +- [v0.12.0](release-notes/raptoreum/release-notes-0.12.0.md) released ???/??/2015 +- [v0.11.2](release-notes/raptoreum/release-notes-0.11.2.md) released Mar/25/2015 +- [v0.11.1](release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 + diff --git a/doc/release-notes/raptoreum/release-notes-0.12.2.3.md b/doc/release-notes/dash/release-notes-0.12.2.3.md similarity index 87% rename from doc/release-notes/raptoreum/release-notes-0.12.2.3.md rename to doc/release-notes/dash/release-notes-0.12.2.3.md index 897c7e224c..0ba6f0b896 100644 --- a/doc/release-notes/raptoreum/release-notes-0.12.2.3.md +++ b/doc/release-notes/dash/release-notes-0.12.2.3.md @@ -10,7 +10,7 @@ improvements. Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -76,25 +76,25 @@ This release also fixes a few crashes and compatibility issues. 0.12.2.3 Change log =================== -See detailed [change log](https://github.com/raptoreum/raptoreum/compare/v0.12.2.2...raptoreum:v0.12.2.3) below. +See detailed [change log](https://github.com/raptor3um/raptoreum/compare/v0.12.2.2...raptoreum:v0.12.2.3) below. ### Backports: -- [`068b20bc7`](https://github.com/raptoreum/raptoreum/commit/068b20bc7) Merge #8256: BUG: bitcoin-qt crash -- [`f71ab1daf`](https://github.com/raptoreum/raptoreum/commit/f71ab1daf) Merge #11847: Fixes compatibility with boost 1.66 (#1836) +- [`068b20bc7`](https://github.com/raptor3um/raptoreum/commit/068b20bc7) Merge #8256: BUG: bitcoin-qt crash +- [`f71ab1daf`](https://github.com/raptor3um/raptoreum/commit/f71ab1daf) Merge #11847: Fixes compatibility with boost 1.66 (#1836) ### PrivateSend: -- [`fa5fc418a`](https://github.com/raptoreum/raptoreum/commit/fa5fc418a) Fix -liquidityprovider option (#1829) -- [`d261575b4`](https://github.com/raptoreum/raptoreum/commit/d261575b4) Skip existing smartnode conections on mixing (#1833) -- [`21a10057d`](https://github.com/raptoreum/raptoreum/commit/21a10057d) Protect CKeyHolderStorage via mutex (#1834) -- [`476888683`](https://github.com/raptoreum/raptoreum/commit/476888683) Avoid reference leakage in CKeyHolderStorage::AddKey (#1840) +- [`fa5fc418a`](https://github.com/raptor3um/raptoreum/commit/fa5fc418a) Fix -liquidityprovider option (#1829) +- [`d261575b4`](https://github.com/raptor3um/raptoreum/commit/d261575b4) Skip existing smartnode conections on mixing (#1833) +- [`21a10057d`](https://github.com/raptor3um/raptoreum/commit/21a10057d) Protect CKeyHolderStorage via mutex (#1834) +- [`476888683`](https://github.com/raptor3um/raptoreum/commit/476888683) Avoid reference leakage in CKeyHolderStorage::AddKey (#1840) ### InstantSend: -- [`d6e2aa843`](https://github.com/raptoreum/raptoreum/commit/d6e2aa843) Swap iterations and fUseInstantSend parameters in ApproximateBestSubset (#1819) -- [`c9bafe154`](https://github.com/raptoreum/raptoreum/commit/c9bafe154) Vote on IS only if it was accepted to mempool (#1826) +- [`d6e2aa843`](https://github.com/raptor3um/raptoreum/commit/d6e2aa843) Swap iterations and fUseInstantSend parameters in ApproximateBestSubset (#1819) +- [`c9bafe154`](https://github.com/raptor3um/raptoreum/commit/c9bafe154) Vote on IS only if it was accepted to mempool (#1826) ### Other: -- [`ada41c3af`](https://github.com/raptoreum/raptoreum/commit/ada41c3af) Fix crash on exit when -createwalletbackups=0 (#1810) -- [`63e0e30e3`](https://github.com/raptoreum/raptoreum/commit/63e0e30e3) bump version to 0.12.2.3 (#1827) +- [`ada41c3af`](https://github.com/raptor3um/raptoreum/commit/ada41c3af) Fix crash on exit when -createwalletbackups=0 (#1810) +- [`63e0e30e3`](https://github.com/raptor3um/raptoreum/commit/63e0e30e3) bump version to 0.12.2.3 (#1827) Credits ======= diff --git a/doc/release-notes/dash/release-notes-0.12.2.md b/doc/release-notes/dash/release-notes-0.12.2.md new file mode 100644 index 0000000000..3f9fb73903 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.12.2.md @@ -0,0 +1,410 @@ +Raptoreum Core version 0.12.2 +======================== + +Release 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/Raptoreum-Qt (on Mac) or +raptoreumd/raptoreum-qt (on Linux). + +Downgrade warning +----------------- +### Downgrade to a version < 0.12.2 + +Because release 0.12.2 includes DIP0001 (2 MB block size hardfork) plus +a transaction fee reduction and a fix for smartnode rank calculation algo +(which activation also depends on DIP0001) this release will not be +backwards compatible after DIP0001 lock in/activation happens. + +This does not affect wallet forward or backward compatibility. + +Notable changes +=============== + +DIP0001 +------- + +We outline an initial scaling mechanism for Raptoreum. After deployment and activation, Raptoreum will be able to handle double the transactions it can currently handle. Together with the faster block times, Raptoreum we will be prepared to handle eight times the traffic of Bitcoin. + +https://github.com/raptor3um/dips/blob/master/dip-0001.md + + +Fee reduction +------------- + +All transaction fees are reduced 10x (from 10K per Kb to 1K per Kb), including fees for InstantSend (from 0.001 RAPTOREUM per input to 0.0001 per input) + +InstantSend fix +--------------- + +The potential vulnerability found by Matt Robertson and Alexander Block was fixed in d7a8489f3 (#1620). + +RPC changes +----------- + +There are few changes in existing RPC in this release: +- There is no more `bcconfirmations` field in RPC output and `confirmations` shows blockchain only confirmations by default now. You can change this behaviour by switching new `addlockconf` param to `true`. There is a new rpc field `instantlock` which indicates whether a given transaction is locked via InstantSend. For more info and examples please see https://github.com/raptor3um/raptoreum/blob/v0.12.2.x/doc/instantsend.md; +- `gobject list` and `gobject diff` accept `funding`, `delete` and `endorsed` filtering options now, in addition to `valid` and `all` currently available; +- `vin` field in `smartnode` commands is renamed to `outpoint` and shows data in short format now; +- `getblocktemplate` output is extended with versionbits-related information; +- Output of wallet-related commands `validateaddress` is extended with optional `hdkeypath` and `hdchainid` fields. + +There are few new RPC commands also: +- `smartnodelist info` shows additional information about sentinel for each smartnode in the list; +- `smartnodelist pubkey` shows pubkey corresponding to smartnodeprivkey for each smartnode in the list; +- `gobject check` allows to check proposal data for correctness before preparing/submitting the proposal, `gobject prepare` and `gobject submit` should also perform additional validation now though; +- `setnetworkactive` allows to turn all network activity on and off; +- `dumphdinfo` displays some information about HD wallet (if available). + +Command-line options +-------------------- + +New: `assumevalid`, `blocksonly`, `reindex-chainstate` + +Experimental: `usehd`, `mnemonic`, `mnemonicpassphrase`, `hdseed` + +See `Help -> Command-line options` in Qt wallet or `raptoreumd --help` for more info. + +PrivateSend improvements +------------------------ + +Algorithm for selecting inputs was slightly changed in [`6067896ae`](https://github.com/raptor3um/raptoreum/commit/6067896ae) ([#1248](https://github.com/raptor3um/raptoreum/pull/1248)). This should allow user to get some mixed funds much faster. + +Lots of backports, refactoring and bug fixes +-------------------------------------------- + +We backported some performance improvements from Bitcoin Core and aligned our codebase with their source a little bit better. We still do not have all the improvements so this work is going to be continued in next releases. + +A lot of refactoring and other fixes should make code more reliable and easier to review now. + +Experimental HD wallet +---------------------- + +This release includes experimental implementation of BIP39/BIP44 compatible HD wallet. Wallet type (HD or non-HD) is selected when wallet is created via `usehd` command-line option, default is `0` which means that a regular non-deterministic wallet is going to be used. If you decide to use HD wallet, you can also specify BIP39 mnemonic and mnemonic passphrase (see `mnemonic` and `mnemonicpassphrase` command-line options) but you can do so only on initial wallet creation and can't change these afterwards. If you don't specify them, mnemonic is going to be generated randomly and mnemonic passphrase is going to be just a blank string. + +**WARNING:** The way it's currently implemented is NOT safe and is NOT recommended to use on mainnet. Wallet is created unencrypted with mnemonic stored inside, so even if you encrypt it later there will be a short period of time when mnemonic is stored in plain text. This issue will be addressed in future releases. + +0.12.2 Change log +================= + +Detailed [change log](https://github.com/raptor3um/raptoreum/compare/v0.12.1.x...raptoreum:v0.12.2.x) below. + +### Backports: +- [`ff30aed68`](https://github.com/raptor3um/raptoreum/commit/ff30aed68) Align with btc 0.12 (#1409) +- [`9901cf433`](https://github.com/raptor3um/raptoreum/commit/9901cf433) Fix for raptoreum-qt issue with startup and multiple monitors. (#1461) +- [`39750439b`](https://github.com/raptor3um/raptoreum/commit/39750439b) Force to use C++11 mode for compilation (#1463) +- [`e30faab6f`](https://github.com/raptor3um/raptoreum/commit/e30faab6f) Make strWalletFile const (#1459) +- [`c4fe22900`](https://github.com/raptor3um/raptoreum/commit/c4fe22900) Access WorkQueue::running only within the cs lock. (#1460) +- [`8572d54a9`](https://github.com/raptor3um/raptoreum/commit/8572d54a9) trivial: fix bloom filter init to isEmpty = true (#1458) +- [`b272ae56a`](https://github.com/raptor3um/raptoreum/commit/b272ae56a) Avoid ugly exception in log on unknown inv type (#1457) +- [`e99dbe620`](https://github.com/raptor3um/raptoreum/commit/e99dbe620) Don't return the address of a P2SH of a P2SH (#1455) +- [`f24efd483`](https://github.com/raptor3um/raptoreum/commit/f24efd483) Generate auth cookie in hex instead of base64 (#1454) +- [`3efcb755e`](https://github.com/raptor3um/raptoreum/commit/3efcb755e) Do not shadow LOCK's criticalblock variable for LOCK inside LOCK (#1453) +- [`b7822464f`](https://github.com/raptor3um/raptoreum/commit/b7822464f) Remove unnecessary LOCK(cs_main) in getrawpmempool (#1452) +- [`72176e501`](https://github.com/raptor3um/raptoreum/commit/72176e501) Remove duplicate bantablemodel.h include (#1446) +- [`634ef6c06`](https://github.com/raptor3um/raptoreum/commit/634ef6c06) Fix for build on Ubuntu 14.04 with system libraries (#1467) +- [`c0450f609`](https://github.com/raptor3um/raptoreum/commit/c0450f609) Improve EncodeBase58/DecodeBase58 performance (#1456) +- [`258ed119a`](https://github.com/raptor3um/raptoreum/commit/258ed119a) auto_ptr → unique_ptr +- [`be968206b`](https://github.com/raptor3um/raptoreum/commit/be968206b) Boost 1.61.0 +- [`7f8775409`](https://github.com/raptor3um/raptoreum/commit/7f8775409) Boost 1.63.0 +- [`11afc8f4b`](https://github.com/raptor3um/raptoreum/commit/11afc8f4b) Minimal fix to slow prevector tests as stopgap measure +- [`11121747b`](https://github.com/raptor3um/raptoreum/commit/11121747b) build: fix qt5.7 build under macOS (#1469) +- [`5988e1e7f`](https://github.com/raptor3um/raptoreum/commit/5988e1e7f) Increase minimum debug.log size to 10MB after shrink. (#1480) +- [`a443d4e2d`](https://github.com/raptor3um/raptoreum/commit/a443d4e2d) Backport Bitcoin PRs #6589, #7180 and remaining part of #7181: enable per-command byte counters in `CNode` (#1496) +- [`f9730cb2e`](https://github.com/raptor3um/raptoreum/commit/f9730cb2e) Increase test coverage for addrman and addrinfo (#1497) +- [`a12491448`](https://github.com/raptor3um/raptoreum/commit/a12491448) Eliminate unnecessary call to CheckBlock (#1498) +- [`b0843c397`](https://github.com/raptor3um/raptoreum/commit/b0843c397) Backport Bincoin PR#7348: MOVE ONLY: move rpc* to rpc/ + same for Raptoreum-specific rpc (#1502) +- [`f65017cfe`](https://github.com/raptor3um/raptoreum/commit/f65017cfe) Backport Bitcoin PR#7349: Build against system UniValue when available (#1503) +- [`ac6c3c900`](https://github.com/raptor3um/raptoreum/commit/ac6c3c900) Backport Bitcoin PR#7350: Banlist updates (#1505) +- [`d787fe4ab`](https://github.com/raptor3um/raptoreum/commit/d787fe4ab) Backport Bitcoin PR#7458: [Net] peers.dat, banlist.dat recreated when missing (#1506) +- [`6af9955fa`](https://github.com/raptor3um/raptoreum/commit/6af9955fa) Backport Bitcoin PR#7696: Fix de-serialization bug where AddrMan is corrupted after exception (#1507) +- [`b39c518d5`](https://github.com/raptor3um/raptoreum/commit/b39c518d5) Backport Bitcoin PR#7749: Enforce expected outbound services (#1508) +- [`9268a336d`](https://github.com/raptor3um/raptoreum/commit/9268a336d) Backport Bitcoin PR#7917: Optimize reindex (#1515) +- [`b47984f30`](https://github.com/raptor3um/raptoreum/commit/b47984f30) Remove non-determinism which is breaking net_tests #8069 (#1517) +- [`9a8a290b8`](https://github.com/raptor3um/raptoreum/commit/9a8a290b8) fix race that could fail to persist a ban (#1518) +- [`5a1961e5e`](https://github.com/raptor3um/raptoreum/commit/5a1961e5e) Backport Bitcoin PR#7906: net: prerequisites for p2p encapsulation changes (#1521) +- [`7b5556a29`](https://github.com/raptor3um/raptoreum/commit/7b5556a29) Backport Bitcoin PR#8084: Add recently accepted blocks and txn to AttemptToEvictConnection (#1522) +- [`9ce2b966c`](https://github.com/raptor3um/raptoreum/commit/9ce2b966c) Backport Bitcoin PR#8113: Rework addnode behaviour (#1525) +- [`aa32f1dc9`](https://github.com/raptor3um/raptoreum/commit/aa32f1dc9) Remove bad chain alert partition check (#1529) +- [`d934ffb2f`](https://github.com/raptor3um/raptoreum/commit/d934ffb2f) Added feeler connections increasing good addrs in the tried table. (#1530) +- [`290fb3b57`](https://github.com/raptor3um/raptoreum/commit/290fb3b57) Backport Bitcoin PR#7942: locking for Misbehave() and other cs_main locking fixes (#1535) +- [`a9d771e49`](https://github.com/raptor3um/raptoreum/commit/a9d771e49) Backport Bitcoin PR#8085: p2p: Begin encapsulation (#1537) +- [`82851b439`](https://github.com/raptor3um/raptoreum/commit/82851b439) Backport Bitcoin PR#8049: Expose information on whether transaction relay is enabled in `getnetwork` (#1545) +- [`7707c0789`](https://github.com/raptor3um/raptoreum/commit/7707c0789) backport 9008: Remove assert(nMaxInbound > 0) (#1548) +- [`b621cfb5f`](https://github.com/raptor3um/raptoreum/commit/b621cfb5f) Backport Bitcoin PR#8708: net: have CConnman handle message sending (#1553) +- [`cc4db34f4`](https://github.com/raptor3um/raptoreum/commit/cc4db34f4) net: only delete CConnman if it's been created (#1555) +- [`a3c8cb20d`](https://github.com/raptor3um/raptoreum/commit/a3c8cb20d) Backport Bitcoin PR#8865: Decouple peer-processing-logic from block-connection-logic (#1556) +- [`e7e106e22`](https://github.com/raptor3um/raptoreum/commit/e7e106e22) Backport Bitcoin PR#8969: Decouple peer-processing-logic from block-connection-logic (#2) (#1558) +- [`b4b343145`](https://github.com/raptor3um/raptoreum/commit/b4b343145) Backport Bitcoin PR#9075: Decouple peer-processing-logic from block-connection-logic (#3) (#1560) +- [`415085c73`](https://github.com/raptor3um/raptoreum/commit/415085c73) Backport Bitcoin PR#9183: Final Preparation for main.cpp Split (#1561) +- [`bcf5455bf`](https://github.com/raptor3um/raptoreum/commit/bcf5455bf) Backport Bitcoin PR#8822: net: Consistent checksum handling (#1565) +- [`df6d458b8`](https://github.com/raptor3um/raptoreum/commit/df6d458b8) Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) +- [`42c784dc7`](https://github.com/raptor3um/raptoreum/commit/42c784dc7) Backport Bitcoin PR#9289: net: drop boost::thread_group (#1568) +- [`b9c67258b`](https://github.com/raptor3um/raptoreum/commit/b9c67258b) Backport Bitcoin PR#9609: net: fix remaining net assertions (#1575) + Raptoreumify +- [`2472999da`](https://github.com/raptor3um/raptoreum/commit/2472999da) Backport Bitcoin PR#9441: Net: Massive speedup. Net locks overhaul (#1586) +- [`ccee103a0`](https://github.com/raptor3um/raptoreum/commit/ccee103a0) Backport "assumed valid blocks" feature from Bitcoin 0.13 (#1582) +- [`105122181`](https://github.com/raptor3um/raptoreum/commit/105122181) Partially backport Bitcoin PR#9626: Clean up a few CConnman cs_vNodes/CNode things (#1591) +- [`76181f575`](https://github.com/raptor3um/raptoreum/commit/76181f575) Do not add random inbound peers to addrman. (#1593) +- [`589d22f2c`](https://github.com/raptor3um/raptoreum/commit/589d22f2c) net: No longer send local address in addrMe (#1600) +- [`b41d9eac2`](https://github.com/raptor3um/raptoreum/commit/b41d9eac2) Backport Bitcoin PR#7868: net: Split DNS resolving functionality out of net structures (#1601) +- [`b82b9787d`](https://github.com/raptor3um/raptoreum/commit/b82b9787d) Backport Bitcoin PR#8128: Net: Turn net structures into dumb storage classes (#1604) +- [`690cb58f8`](https://github.com/raptor3um/raptoreum/commit/690cb58f8) Backport Bitcoin Qt/Gui changes up to 0.14.x part 1 (#1614) +- [`9707ca5ce`](https://github.com/raptor3um/raptoreum/commit/9707ca5ce) Backport Bitcoin Qt/Gui changes up to 0.14.x part 2 (#1615) +- [`91d99fcd3`](https://github.com/raptor3um/raptoreum/commit/91d99fcd3) Backport Bitcoin Qt/Gui changes up to 0.14.x part 3 (#1617) +- [`4cac044d9`](https://github.com/raptor3um/raptoreum/commit/4cac044d9) Merge #8944: Remove bogus assert on number of oubound connections. (#1685) +- [`d23adcc0f`](https://github.com/raptor3um/raptoreum/commit/d23adcc0f) Merge #10231: [Qt] Reduce a significant cs_main lock freeze (#1704) + +### PrivateSend: +- [`6067896ae`](https://github.com/raptor3um/raptoreum/commit/6067896ae) mix inputs with highest number of rounds first (#1248) +- [`559f8421b`](https://github.com/raptor3um/raptoreum/commit/559f8421b) Few fixes for PrivateSend (#1408) +- [`7242e2922`](https://github.com/raptor3um/raptoreum/commit/7242e2922) Refactor PS (#1437) +- [`68e858f8d`](https://github.com/raptor3um/raptoreum/commit/68e858f8d) PrivateSend: dont waste keys from keypool on failure in CreateDenominated (#1473) +- [`2daea77a5`](https://github.com/raptor3um/raptoreum/commit/2daea77a5) fix calculation of (unconfirmed) anonymizable balance (#1477) +- [`029ee6494`](https://github.com/raptor3um/raptoreum/commit/029ee6494) split CPrivateSend (#1492) +- [`739ef9a68`](https://github.com/raptor3um/raptoreum/commit/739ef9a68) Expire confirmed DSTXes after ~1h since confirmation (#1499) +- [`7abac068b`](https://github.com/raptor3um/raptoreum/commit/7abac068b) fix MakeCollateralAmounts (#1500) +- [`0f05e25c7`](https://github.com/raptor3um/raptoreum/commit/0f05e25c7) fix a bug in CommitFinalTransaction (#1540) +- [`82595b1b9`](https://github.com/raptor3um/raptoreum/commit/82595b1b9) fix number of blocks to wait after successful mixing tx (#1597) +- [`33e460f30`](https://github.com/raptor3um/raptoreum/commit/33e460f30) Fix losing keys on PrivateSend (#1616) +- [`ea793a71f`](https://github.com/raptor3um/raptoreum/commit/ea793a71f) Make sure mixing smartnode follows bip69 before signing final mixing tx (#1510) +- [`8c15f5f87`](https://github.com/raptor3um/raptoreum/commit/8c15f5f87) speedup MakeCollateralAmounts by skiping denominated inputs early (#1631) +- [`8e9289e12`](https://github.com/raptor3um/raptoreum/commit/8e9289e12) Keep track of wallet UTXOs and use them for PS balances and rounds calculations (#1655) +- [`f77efcf24`](https://github.com/raptor3um/raptoreum/commit/f77efcf24) do not calculate stuff that are not going to be visible in simple PS UI anyway (#1656) + +### InstantSend: +- [`68e1a8c79`](https://github.com/raptor3um/raptoreum/commit/68e1a8c79) Safety check in CInstantSend::SyncTransaction (#1412) +- [`4a9fbca08`](https://github.com/raptor3um/raptoreum/commit/4a9fbca08) Fix potential deadlock in CInstantSend::UpdateLockedTransaction (#1571) +- [`f786ce6ab`](https://github.com/raptor3um/raptoreum/commit/f786ce6ab) fix instantsendtoaddress param convertion (#1585) +- [`ae909d0a0`](https://github.com/raptor3um/raptoreum/commit/ae909d0a0) Fix: Reject invalid instantsend transaction (#1583) +- [`84ecccefc`](https://github.com/raptor3um/raptoreum/commit/84ecccefc) InstandSend overhaul (#1592) +- [`5f4362cb8`](https://github.com/raptor3um/raptoreum/commit/5f4362cb8) fix SPORK_5_INSTANTSEND_MAX_VALUE validation in CWallet::CreateTransaction (#1619) +- [`d7a8489f3`](https://github.com/raptor3um/raptoreum/commit/d7a8489f3) Fix smartnode score/rank calculations (#1620) +- [`b41f8d3dd`](https://github.com/raptor3um/raptoreum/commit/b41f8d3dd) fix instantsend-related RPC output (#1628) +- [`502748487`](https://github.com/raptor3um/raptoreum/commit/502748487) bump MIN_INSTANTSEND_PROTO_VERSION to 70208 (#1650) +- [`788ae63ac`](https://github.com/raptor3um/raptoreum/commit/788ae63ac) Fix edge case for IS (skip inputs that are too large) (#1695) +- [`470e5435c`](https://github.com/raptor3um/raptoreum/commit/470e5435c) remove InstantSend votes for failed lock attemts after some timeout (#1705) +- [`a9293ad03`](https://github.com/raptor3um/raptoreum/commit/a9293ad03) update setAskFor on TXLOCKVOTE (#1713) +- [`859144809`](https://github.com/raptor3um/raptoreum/commit/859144809) fix bug introduced in #1695 (#1714) + +### Governance: +- [`4595db0ce`](https://github.com/raptor3um/raptoreum/commit/4595db0ce) Few changes for governance rpc: (#1351) +- [`411332f94`](https://github.com/raptor3um/raptoreum/commit/411332f94) sentinel uses status of funding votes (#1440) +- [`a109a611f`](https://github.com/raptor3um/raptoreum/commit/a109a611f) Validate proposals on prepare and submit (#1488) +- [`a439e9840`](https://github.com/raptor3um/raptoreum/commit/a439e9840) Replace watchdogs with ping (#1491) +- [`109c5fd1d`](https://github.com/raptor3um/raptoreum/commit/109c5fd1d) Fixed issues with propagation of governance objects (#1489) +- [`f7aa81586`](https://github.com/raptor3um/raptoreum/commit/f7aa81586) Fix issues with mapSeenGovernanceObjects (#1511) +- [`8075370d1`](https://github.com/raptor3um/raptoreum/commit/8075370d1) change invalid version string constant (#1532) +- [`916af52c0`](https://github.com/raptor3um/raptoreum/commit/916af52c0) Fix vulnerability with mapSmartnodeOrphanObjects (#1512) +- [`70eb83a5c`](https://github.com/raptor3um/raptoreum/commit/70eb83a5c) New rpc call "smartnodelist info" (#1513) +- [`f47f0daf9`](https://github.com/raptor3um/raptoreum/commit/f47f0daf9) add 6 to strAllowedChars (#1542) +- [`6cb3fddcc`](https://github.com/raptor3um/raptoreum/commit/6cb3fddcc) fixed potential deadlock in CSuperblockManager::IsSuperblockTriggered (#1536) +- [`15958c594`](https://github.com/raptor3um/raptoreum/commit/15958c594) fix potential deadlock (PR#1536 fix) (#1538) +- [`1c4e2946a`](https://github.com/raptor3um/raptoreum/commit/1c4e2946a) fix potential deadlock in CGovernanceManager::ProcessVote (#1541) +- [`4942884c7`](https://github.com/raptor3um/raptoreum/commit/4942884c7) fix potential deadlock in CSmartnodeMan::CheckMnbAndUpdateSmartnodeList (#1543) +- [`4ed838cb5`](https://github.com/raptor3um/raptoreum/commit/4ed838cb5) Fix SmartnodeRateCheck (#1490) +- [`6496fc9da`](https://github.com/raptor3um/raptoreum/commit/6496fc9da) fix off-by-1 in CSuperblock::GetPaymentsLimit (#1598) +- [`48d63ab29`](https://github.com/raptor3um/raptoreum/commit/48d63ab29) Relay govobj and govvote to every compatible peer, not only to the one with the same version (#1662) +- [`6f57519c6`](https://github.com/raptor3um/raptoreum/commit/6f57519c6) allow up to 40 chars in proposal name (#1693) +- [`ceda3abe6`](https://github.com/raptor3um/raptoreum/commit/ceda3abe6) start_epoch, end_epoch and payment_amount should be numbers, not strings (#1707) + +### Network/Sync: +- [`62963e911`](https://github.com/raptor3um/raptoreum/commit/62963e911) fix sync reset which is triggered erroneously during reindex (#1478) +- [`fc406f2d8`](https://github.com/raptor3um/raptoreum/commit/fc406f2d8) track asset sync time (#1479) +- [`9e9df2820`](https://github.com/raptor3um/raptoreum/commit/9e9df2820) do not use smartnode connections in feeler logic (#1533) +- [`9694658cd`](https://github.com/raptor3um/raptoreum/commit/9694658cd) Make sure mixing messages are relayed/accepted properly (#1547) +- [`87707c012`](https://github.com/raptor3um/raptoreum/commit/87707c012) fix CDSNotificationInterface::UpdatedBlockTip signature (#1562) +- [`105713c10`](https://github.com/raptor3um/raptoreum/commit/105713c10) Sync overhaul (#1564) +- [`0fc13434b`](https://github.com/raptor3um/raptoreum/commit/0fc13434b) limit UpdatedBlockTip in IBD (#1570) +- [`510c0a06d`](https://github.com/raptor3um/raptoreum/commit/510c0a06d) Relay tx in sendrawtransaction according to its inv.type (#1584) +- [`c56ba56e7`](https://github.com/raptor3um/raptoreum/commit/c56ba56e7) net: Consistently use GetTimeMicros() for inactivity checks (#1588) +- [`4f5455000`](https://github.com/raptor3um/raptoreum/commit/4f5455000) Use GetAdjustedTime instead of GetTime when dealing with network-wide timestamps (#1590) +- [`4f0618ae8`](https://github.com/raptor3um/raptoreum/commit/4f0618ae8) Fix sync issues (#1599) +- [`169afafd5`](https://github.com/raptor3um/raptoreum/commit/169afafd5) Fix duplicate headers download in initial sync (#1589) +- [`91ae0b712`](https://github.com/raptor3um/raptoreum/commit/91ae0b712) Use connman passed to ThreadSendAlert() instead of g_connman global. (#1610) +- [`8da26da71`](https://github.com/raptor3um/raptoreum/commit/8da26da71) Eliminate g_connman use in spork module. (#1613) +- [`4956ba7a7`](https://github.com/raptor3um/raptoreum/commit/4956ba7a7) Eliminate g_connman use in instantx module. (#1626) +- [`10eddb52d`](https://github.com/raptor3um/raptoreum/commit/10eddb52d) Move some (spamy) CSmartnodeSync log messages to new `mnsync` log category (#1630) +- [`753b1e486`](https://github.com/raptor3um/raptoreum/commit/753b1e486) Eliminate remaining uses of g_connman in Raptoreum-specific code. (#1635) +- [`8949f4345`](https://github.com/raptor3um/raptoreum/commit/8949f4345) Wait for full sync in functional tests that use getblocktemplate. (#1642) +- [`5f0da8aa7`](https://github.com/raptor3um/raptoreum/commit/5f0da8aa7) fix sync (#1643) +- [`7a8910443`](https://github.com/raptor3um/raptoreum/commit/7a8910443) Fix unlocked access to vNodes.size() (#1654) +- [`278cf144b`](https://github.com/raptor3um/raptoreum/commit/278cf144b) Remove cs_main from ThreadMnbRequestConnections (#1658) +- [`52cd4d40d`](https://github.com/raptor3um/raptoreum/commit/52cd4d40d) Fix bug: nCachedBlockHeight was not updated on start (#1673) +- [`1df889e23`](https://github.com/raptor3um/raptoreum/commit/1df889e23) Add more logging for MN votes and MNs missing votes (#1683) +- [`28c8d1729`](https://github.com/raptor3um/raptoreum/commit/28c8d1729) Fix sync reset on lack of activity (#1686) +- [`dfb8dbbf6`](https://github.com/raptor3um/raptoreum/commit/dfb8dbbf6) Fix mnp relay bug (#1700) + +### GUI: +- [`5758ae1bf`](https://github.com/raptor3um/raptoreum/commit/5758ae1bf) Full path in "failed to load cache" warnings (#1411) +- [`18c83f58e`](https://github.com/raptor3um/raptoreum/commit/18c83f58e) Qt: bug fixes and enhancement to traffic graph widget (#1429) +- [`72fbfe93d`](https://github.com/raptor3um/raptoreum/commit/72fbfe93d) Icon Cutoff Fix (#1485) +- [`4df8a20f9`](https://github.com/raptor3um/raptoreum/commit/4df8a20f9) Fix windows installer script, should handle `raptoreum:` uri correctly now (#1550) +- [`8b7dffbb6`](https://github.com/raptor3um/raptoreum/commit/8b7dffbb6) Update startup shortcuts (#1551) +- [`6ff7b7aa5`](https://github.com/raptor3um/raptoreum/commit/6ff7b7aa5) fix TrafficGraphData bandwidth calculation (#1618) +- [`026ad8421`](https://github.com/raptor3um/raptoreum/commit/026ad8421) Fix empty tooltip during sync under specific conditions (#1637) +- [`08e503da2`](https://github.com/raptor3um/raptoreum/commit/08e503da2) [GUI] Change look of modaloverlay (#1653) +- [`296cfd2ef`](https://github.com/raptor3um/raptoreum/commit/296cfd2ef) Fix compilation with qt < 5.2 (#1672) +- [`11afd7cfd`](https://github.com/raptor3um/raptoreum/commit/11afd7cfd) Translations201710 - en, de, fi, fr, ru, vi (#1659) +- [`14d11e4a8`](https://github.com/raptor3um/raptoreum/commit/14d11e4a8) Translations 201710 part2 (#1676) +- [`2144dae91`](https://github.com/raptor3um/raptoreum/commit/2144dae91) Add hires version of `light` theme for Hi-DPI screens (#1712) + +### DIP0001: +- [`cd262bf64`](https://github.com/raptor3um/raptoreum/commit/cd262bf64) DIP0001 implementation (#1594) +- [`6a6b31b74`](https://github.com/raptor3um/raptoreum/commit/6a6b31b74) Dip0001-related adjustments (inc. constants) (#1621) +- [`e22453c90`](https://github.com/raptor3um/raptoreum/commit/e22453c90) fix fDIP0001* flags initialization (#1625) +- [`25fa44d5a`](https://github.com/raptor3um/raptoreum/commit/25fa44d5a) fix DIP0001 implementation (#1639) +- [`d07ac4fbd`](https://github.com/raptor3um/raptoreum/commit/d07ac4fbd) fix: update DIP0001 related stuff even in IBD (#1652) +- [`d28619872`](https://github.com/raptor3um/raptoreum/commit/d28619872) fix: The idea behind fDIP0001LockedInAtTip was to indicate that it WAS locked in, not that it IS locked in (#1666) + +### Wallet: +- [`27f3218de`](https://github.com/raptor3um/raptoreum/commit/27f3218de) HD wallet (#1405) +- [`b6804678f`](https://github.com/raptor3um/raptoreum/commit/b6804678f) Minor Warning Fixed (#1482) +- [`cd76f2a15`](https://github.com/raptor3um/raptoreum/commit/cd76f2a15) Disable HD wallet by default (#1629) +- [`8f850c60f`](https://github.com/raptor3um/raptoreum/commit/8f850c60f) Lower tx fees 10x (#1632) +- [`7ab175a8e`](https://github.com/raptor3um/raptoreum/commit/7ab175a8e) Ensure Raptoreum wallets < 0.12.2 can't open HD wallets (#1638) +- [`7efa5e79d`](https://github.com/raptor3um/raptoreum/commit/7efa5e79d) fix fallback fee (#1649) + +### RPC: +- [`a0851494d`](https://github.com/raptor3um/raptoreum/commit/a0851494d) add `smartnodelist pubkey` to rpc (#1549) +- [`825b3ccc9`](https://github.com/raptor3um/raptoreum/commit/825b3ccc9) more "vin" -> "outpoint" in smartnode rpc output (#1633) +- [`0c1679e58`](https://github.com/raptor3um/raptoreum/commit/0c1679e58) fix `smartnode current` rpc (#1640) +- [`8c1e5e838`](https://github.com/raptor3um/raptoreum/commit/8c1e5e838) remove send addresses from listreceivedbyaddress output (#1664) +- [`c3bc06bbf`](https://github.com/raptor3um/raptoreum/commit/c3bc06bbf) fix Examples section of the RPC output for listreceivedbyaccount, listreceivedbyaccount and sendfrom commands (#1665) +- [`ece884994`](https://github.com/raptor3um/raptoreum/commit/ece884994) RPC help formatting updates (#1670) +- [`32ad53e77`](https://github.com/raptor3um/raptoreum/commit/32ad53e77) Revert "fix `smartnode current` rpc (#1640)" (#1681) +- [`a5f99ef2f`](https://github.com/raptor3um/raptoreum/commit/a5f99ef2f) partially revert "[Trivial] RPC help formatting updates #1670" (#1711) + +### Docs: +- [`82a464313`](https://github.com/raptor3um/raptoreum/commit/82a464313) Doc: fix broken formatting in markdown #headers (#1462) +- [`ee4daed83`](https://github.com/raptor3um/raptoreum/commit/ee4daed83) Added clarifications in INSTALL readme for newcomers (#1481) +- [`5d2795029`](https://github.com/raptor3um/raptoreum/commit/5d2795029) Documentation: Add spork message / details to protocol-documentation.md (#1493) +- [`5617aef07`](https://github.com/raptor3um/raptoreum/commit/5617aef07) Documentation: Update undocumented messages in protocol-documentation.md (#1596) +- [`72ef788c5`](https://github.com/raptor3um/raptoreum/commit/72ef788c5) Update `instantsend.md` according to PR#1628 changes (#1663) +- [`304b886d0`](https://github.com/raptor3um/raptoreum/commit/304b886d0) Update build-osx.md formatting (#1690) +- [`578d55979`](https://github.com/raptor3um/raptoreum/commit/578d55979) 12.2 release notes (#1675) + +### Other (noticeable) refactoring and fixes: +- [`98990b683`](https://github.com/raptor3um/raptoreum/commit/98990b683) Refactor: CDarkSendSigner (#1410) +- [`397ea95db`](https://github.com/raptor3um/raptoreum/commit/397ea95db) Implement BIP69 outside of CTxIn/CTxOut (#1514) +- [`27b6f3633`](https://github.com/raptor3um/raptoreum/commit/27b6f3633) fix deadlock (#1531) +- [`e0d6c5b5a`](https://github.com/raptor3um/raptoreum/commit/e0d6c5b5a) fixed potential deadlock in CSmartnodePing::SimpleCheck (#1534) +- [`8b5f47e68`](https://github.com/raptor3um/raptoreum/commit/8b5f47e68) Smartnode classes: Remove repeated/un-needed code and data (#1572) +- [`23582aea4`](https://github.com/raptor3um/raptoreum/commit/23582aea4) add/use GetUTXO\[Coins/Confirmations\] helpers instead of GetInputAge\[IX\] (#1578) +- [`fe81d641d`](https://github.com/raptor3um/raptoreum/commit/fe81d641d) drop pCurrentBlockIndex and use cached block height instead (nCachedBlockHeight) (#1579) +- [`8012f2ca7`](https://github.com/raptor3um/raptoreum/commit/8012f2ca7) drop smartnode index (#1580) +- [`b5f7be649`](https://github.com/raptor3um/raptoreum/commit/b5f7be649) slightly refactor CDSNotificationInterface (#1581) +- [`9028a22b8`](https://github.com/raptor3um/raptoreum/commit/9028a22b8) safe version of GetSmartnodeByRank (#1595) +- [`05da4557d`](https://github.com/raptor3um/raptoreum/commit/05da4557d) Refactor smartnode management (#1611) +- [`adc7c6cb1`](https://github.com/raptor3um/raptoreum/commit/adc7c6cb1) Remove some recursive locks (#1624) + +### Other (technical) commits: +- [`1a528d945`](https://github.com/raptor3um/raptoreum/commit/1a528d945) bump to 0.12.2.0 (#1407) +- [`b815a7b6a`](https://github.com/raptor3um/raptoreum/commit/b815a7b6a) Merge remote-tracking branch 'remotes/origin/master' into v0.12.2.x +- [`7a5943c3a`](https://github.com/raptor3um/raptoreum/commit/7a5943c3a) Merge pull request #1431 from raptoreum/v0.12.2.x-merge_upstream +- [`8bbcf6200`](https://github.com/raptor3um/raptoreum/commit/8bbcf6200) Fixed pow (test and algo) (#1415) +- [`f3b92a95d`](https://github.com/raptor3um/raptoreum/commit/f3b92a95d) c++11: don't throw from the reverselock destructor (#1421) +- [`b40f8f333`](https://github.com/raptor3um/raptoreum/commit/b40f8f333) Rename bitcoinconsensus library to raptoreumconsensus. (#1432) +- [`28a1d0ecc`](https://github.com/raptor3um/raptoreum/commit/28a1d0ecc) Fix the same header included twice. (#1474) +- [`adf97e12a`](https://github.com/raptor3um/raptoreum/commit/adf97e12a) fix travis ci mac build (#1483) +- [`a28fa724c`](https://github.com/raptor3um/raptoreum/commit/a28fa724c) fix BIP34 starting blocks for mainnet/testnet (#1476) +- [`bea548c61`](https://github.com/raptor3um/raptoreum/commit/bea548c61) adjust/fix some log and error messages (#1484) +- [`715504357`](https://github.com/raptor3um/raptoreum/commit/715504357) Raptoreumify bitcoin unix executables (#1486) +- [`1d67d5212`](https://github.com/raptor3um/raptoreum/commit/1d67d5212) Don't try to create empty datadir before the real path is known (#1494) +- [`549b659e8`](https://github.com/raptor3um/raptoreum/commit/549b659e8) Force self-recheck on CActiveSmartnode::ManageStateRemote() (#1441) +- [`96f0d6ec2`](https://github.com/raptor3um/raptoreum/commit/96f0d6ec2) various trivial cleanup fixes (#1501) +- [`f9dd40888`](https://github.com/raptor3um/raptoreum/commit/f9dd40888) include atomic (#1523) +- [`eea78d45e`](https://github.com/raptor3um/raptoreum/commit/eea78d45e) Revert "fixed regtest+ds issues" (#1524) +- [`1b1d52ac3`](https://github.com/raptor3um/raptoreum/commit/1b1d52ac3) workaround for travis (#1526) +- [`c608bbec1`](https://github.com/raptor3um/raptoreum/commit/c608bbec1) Pass reference when calling HasPayeeWithVotes (#1569) +- [`b22cda4df`](https://github.com/raptor3um/raptoreum/commit/b22cda4df) typo: "Writting" -> "Writing" (#1605) +- [`ace00175c`](https://github.com/raptor3um/raptoreum/commit/ace00175c) build: silence gcc7's implicit fallthrough warning (#1622) +- [`02e882c3d`](https://github.com/raptor3um/raptoreum/commit/02e882c3d) bump MIN_SMARTNODE_PAYMENT_PROTO_VERSION_2 and PROTOCOL_VERSION to 70208 (#1636) +- [`d3829e55b`](https://github.com/raptor3um/raptoreum/commit/d3829e55b) fix BIP68 granularity and mask (#1641) +- [`72b221f74`](https://github.com/raptor3um/raptoreum/commit/72b221f74) Revert "fix BIP68 granularity and mask (#1641)" (#1647) +- [`381ffdc4b`](https://github.com/raptor3um/raptoreum/commit/381ffdc4b) Fork testnet to test 12.2 migration (#1660) +- [`33dbafbba`](https://github.com/raptor3um/raptoreum/commit/33dbafbba) fork testnet again to re-test dip0001 because of 2 bugs found in 1st attempt (#1667) +- [`0b6955a7b`](https://github.com/raptor3um/raptoreum/commit/0b6955a7b) update nMinimumChainWork and defaultAssumeValid for testnet (#1668) +- [`4ecbedbe7`](https://github.com/raptor3um/raptoreum/commit/4ecbedbe7) fix `setnetworkactive` (typo) (#1682) +- [`46342b2e8`](https://github.com/raptor3um/raptoreum/commit/46342b2e8) update nCollateralMinConfBlockHash for local (hot) smartnode on mn start (#1689) +- [`f5286b179`](https://github.com/raptor3um/raptoreum/commit/f5286b179) Fix/optimize images (#1688) +- [`673e161d5`](https://github.com/raptor3um/raptoreum/commit/673e161d5) fix trafficgraphdatatests for qt4 (#1699) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alex Werner +- Alexander Block +- Allan Doensen +- Bob Feldbauer +- chaeplin +- crowning- +- diego-ab +- Gavin Westwood +- gladcow +- Holger Schinzel +- Ilya Savinov +- Kamuela Franco +- krychlicki +- Nathan Marley +- Oleg Girko +- QuantumExplorer +- sorin-postelnicu +- Spencer Lievens +- taw00 +- TheLazieR Yip +- thephez +- Tim Flynn +- UdjinM6 +- Will Wray + +As well as Bitcoin Core Developers and everyone that submitted issues or helped translating on [Transifex](https://www.transifex.com/projects/p/raptoreum/). + + +Older releases +============== + +Raptoreum was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of smartnodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, Darkcoin was rebranded +to Raptoreum. + +Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old changelogs can be found here: + +- [v0.12.1](release-notes/raptoreum/release-notes-0.12.1.md) released ???/??/2016 +- [v0.12.0](release-notes/raptoreum/release-notes-0.12.0.md) released ???/??/2015 +- [v0.11.2](release-notes/raptoreum/release-notes-0.11.2.md) released Mar/25/2015 +- [v0.11.1](release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 + diff --git a/doc/release-notes/dash/release-notes-0.12.3-backports.md b/doc/release-notes/dash/release-notes-0.12.3-backports.md new file mode 100644 index 0000000000..49f535d348 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.12.3-backports.md @@ -0,0 +1,993 @@ +### 12.3 backports and related fixes: +- [`bc45a2f87`](https://github.com/raptor3um/raptoreum/commit/bc45a2f87) Backport compact blocks functionality from bitcoin (#1966) +- [`8b4c419ed`](https://github.com/raptor3um/raptoreum/commit/8b4c419ed) Revert "Merge #7542: Implement "feefilter" P2P message" (#2025) +- [`a4b313fd3`](https://github.com/raptor3um/raptoreum/commit/a4b313fd3) Fix std in DBG macro +- [`6a6e4cdc1`](https://github.com/raptor3um/raptoreum/commit/6a6e4cdc1) Remove remaining `using namespace std` +- [`08b5c69ef`](https://github.com/raptor3um/raptoreum/commit/08b5c69ef) Merge #9643: [refactor] Remove using namespace from wallet/ & util* +- [`ccca7af09`](https://github.com/raptor3um/raptoreum/commit/ccca7af09) Merge #9476: [refactor] Remove using namespace from rpc/ & script/ sources +- [`4ac4e96e8`](https://github.com/raptor3um/raptoreum/commit/4ac4e96e8) Merge #9765: Harden against mistakes handling invalid blocks +- [`662ec024a`](https://github.com/raptor3um/raptoreum/commit/662ec024a) Make peer id logging consistent ("peer=%d" instead of "peer %d") +- [`592d8f073`](https://github.com/raptor3um/raptoreum/commit/592d8f073) Use a temp pindex to avoid a const_cast in ProcessNewBlockHeaders +- [`15a8fcf99`](https://github.com/raptor3um/raptoreum/commit/15a8fcf99) Add a CValidationInterface::NewPoWValidBlock callback +- [`d28172f57`](https://github.com/raptor3um/raptoreum/commit/d28172f57) Call AcceptBlock with the block's shared_ptr instead of CBlock& +- [`c99dd9733`](https://github.com/raptor3um/raptoreum/commit/c99dd9733) [qa] Avoid race in preciousblock test. +- [`807ae74c2`](https://github.com/raptor3um/raptoreum/commit/807ae74c2) Make CBlockIndex*es in net_processing const +- [`1d1c31052`](https://github.com/raptor3um/raptoreum/commit/1d1c31052) Fix cmd args handling for -bip9params +- [`64817fe1d`](https://github.com/raptor3um/raptoreum/commit/64817fe1d) [qa] Fix race condition in sendheaders.py +- [`b2bc78099`](https://github.com/raptor3um/raptoreum/commit/b2bc78099) Fix argument to wait_until +- [`026f2e2a8`](https://github.com/raptor3um/raptoreum/commit/026f2e2a8) Merge #8446: [Trivial] BIP9 parameters on regtest cleanup +- [`e326bda69`](https://github.com/raptor3um/raptoreum/commit/e326bda69) Tests: refactor compact size serialization in mininode +- [`2c810d2c3`](https://github.com/raptor3um/raptoreum/commit/2c810d2c3) Allow changing BIP9 parameters on regtest +- [`45151bd13`](https://github.com/raptor3um/raptoreum/commit/45151bd13) Move context-required checks from CheckBlockHeader to Contextual... +- [`cef919f18`](https://github.com/raptor3um/raptoreum/commit/cef919f18) Merge #9486: Make peer=%d log prints consistent +- [`55ef4d0a9`](https://github.com/raptor3um/raptoreum/commit/55ef4d0a9) [wallet] Add include_unsafe argument to listunspent RPC +- [`e1e03f42c`](https://github.com/raptor3um/raptoreum/commit/e1e03f42c) [wallet] Add IsAllFromMe: true if all inputs are from wallet +- [`611b31ece`](https://github.com/raptor3um/raptoreum/commit/611b31ece) Merge #9650: Better handle invalid parameters to signrawtransaction +- [`ff335e47f`](https://github.com/raptor3um/raptoreum/commit/ff335e47f) [qa] test_framework: Add wrapper for stop_node +- [`64e1bfacd`](https://github.com/raptor3um/raptoreum/commit/64e1bfacd) Add BIP32 to bips.md +- [`4bb2af8d1`](https://github.com/raptor3um/raptoreum/commit/4bb2af8d1) Merge #9114: [depends] Set OSX_MIN_VERSION to 10.8 +- [`61af31531`](https://github.com/raptor3um/raptoreum/commit/61af31531) Merge #8976: libconsensus: Add input validation of flags (#1891) +- [`00a0bc710`](https://github.com/raptor3um/raptoreum/commit/00a0bc710) Remove "TODO: fix off-by-one" +- [`625252fb4`](https://github.com/raptor3um/raptoreum/commit/625252fb4) Allow to pass redirect_stderr=True to initialize_chain and use in wallet-dump.py +- [`d56ac5a74`](https://github.com/raptor3um/raptoreum/commit/d56ac5a74) Fix import-rescan.py and add workaround for pruning mode +- [`1ba125621`](https://github.com/raptor3um/raptoreum/commit/1ba125621) Merge #9761: Use 2 hour grace period for key timestamps in importmulti rescans +- [`75421c37b`](https://github.com/raptor3um/raptoreum/commit/75421c37b) Merge #9764: wallet: Prevent "overrides a member function but is not marked 'override'" warnings +- [`43f697866`](https://github.com/raptor3um/raptoreum/commit/43f697866) Merge #9108: Use importmulti timestamp when importing watch only keys (on top of #9682) +- [`6f86725d0`](https://github.com/raptor3um/raptoreum/commit/6f86725d0) Merge #9682: Require timestamps for importmulti keys +- [`9c5032c54`](https://github.com/raptor3um/raptoreum/commit/9c5032c54) Explicitly start nodes with -usehd=1 in wallet-dump.py +- [`a92b7b2ed`](https://github.com/raptor3um/raptoreum/commit/a92b7b2ed) Add missed change from previous backport to wallet-dump.py +- [`9bb9e9ea7`](https://github.com/raptor3um/raptoreum/commit/9bb9e9ea7) Merge #9077: [qa] Increase wallet-dump RPC timeout +- [`8d90f295e`](https://github.com/raptor3um/raptoreum/commit/8d90f295e) Merge #8442: [qa] Rework hd wallet dump test +- [`9a37add21`](https://github.com/raptor3um/raptoreum/commit/9a37add21) Merge #8417: [QA] Add walletdump RPC test (including HD- & encryption-tests) +- [`27b52a7f8`](https://github.com/raptor3um/raptoreum/commit/27b52a7f8) Add BIP147 to bips.md +- [`12102e4e9`](https://github.com/raptor3um/raptoreum/commit/12102e4e9) Merge #8848: Add NULLDUMMY verify flag in bitcoinconsensus.h +- [`c017353a9`](https://github.com/raptor3um/raptoreum/commit/c017353a9) Add softfork deployment for BIP147 +- [`a42baec5e`](https://github.com/raptor3um/raptoreum/commit/a42baec5e) Remove SegWit related tests/code from nulldummy.py +- [`4bb0cdf40`](https://github.com/raptor3um/raptoreum/commit/4bb0cdf40) Merge #8841: [qa] fix nulldummy test +- [`4a585b2f2`](https://github.com/raptor3um/raptoreum/commit/4a585b2f2) Merge #8835: [qa] nulldummy.py: Don't run unused code +- [`075b4d320`](https://github.com/raptor3um/raptoreum/commit/075b4d320) Merge #8636: Implement NULLDUMMY softfork (BIP147) +- [`8ee652f4c`](https://github.com/raptor3um/raptoreum/commit/8ee652f4c) Merge #10851: depends: fix fontconfig with newer glibc +- [`9a26b427f`](https://github.com/raptor3um/raptoreum/commit/9a26b427f) Don't set PKG_CONFIG_SYSROOT_DIR env variable to build Qt. +- [`0e6672bf7`](https://github.com/raptor3um/raptoreum/commit/0e6672bf7) Merge pull request #1879 from codablock/pr_backport_bitcoin_0.14-11 +- [`c8e5c40ec`](https://github.com/raptor3um/raptoreum/commit/c8e5c40ec) Replace more example Raptoreum addresses with invalid addresses +- [`7e4e4ea27`](https://github.com/raptor3um/raptoreum/commit/7e4e4ea27) Give 1000 bytes instead of 4000 bytes before the block is full +- [`873bd6c80`](https://github.com/raptor3um/raptoreum/commit/873bd6c80) Fix new raptoreum-tx tests +- [`4959ff201`](https://github.com/raptor3um/raptoreum/commit/4959ff201) Fix formatting of help in sendfrom +- [`a4430b624`](https://github.com/raptor3um/raptoreum/commit/a4430b624) Fix rpc tests +- [`5901531bc`](https://github.com/raptor3um/raptoreum/commit/5901531bc) Use constant 7200 instead of TIMESTAMP_WINDOW for now +- [`4d3856b5a`](https://github.com/raptor3um/raptoreum/commit/4d3856b5a) Include test_raptoreum.h instead of test_bitcoin.h +- [`d500d77c4`](https://github.com/raptor3um/raptoreum/commit/d500d77c4) Use nBlockSize/nBlockMaxSize instead of nBlockWeight/nBlockMaxWeight +- [`12770beb6`](https://github.com/raptor3um/raptoreum/commit/12770beb6) Merge #10310: [doc] Add hint about getmempoolentry to getrawmempool help. +- [`e9976d20f`](https://github.com/raptor3um/raptoreum/commit/e9976d20f) Merge #10495: contrib: Update location of seeds.txt +- [`631d9f92e`](https://github.com/raptor3um/raptoreum/commit/631d9f92e) Merge #10309: Trivial: remove extra character from comment +- [`ed898f179`](https://github.com/raptor3um/raptoreum/commit/ed898f179) Merge #10258: Fixed typo in documentation for merkleblock.h +- [`294228afc`](https://github.com/raptor3um/raptoreum/commit/294228afc) Merge #10451: contrib/init/bitcoind.openrcconf: Don't disable wallet by default +- [`b0a817214`](https://github.com/raptor3um/raptoreum/commit/b0a817214) Merge #10260: [doc] Minor corrections to osx dependencies +- [`f7174fb65`](https://github.com/raptor3um/raptoreum/commit/f7174fb65) Merge #10308: [wallet] Securely erase potentially sensitive keys/values +- [`e2225f37c`](https://github.com/raptor3um/raptoreum/commit/e2225f37c) Merge #10265: [wallet] [moveonly] Check non-null pindex before potentially referencing +- [`24be65e87`](https://github.com/raptor3um/raptoreum/commit/24be65e87) Merge #10328: Update contrib/debian to latest Ubuntu PPA upload. +- [`7b7924d47`](https://github.com/raptor3um/raptoreum/commit/7b7924d47) Merge #9497: CCheckQueue Unit Tests +- [`f1ec8c9fa`](https://github.com/raptor3um/raptoreum/commit/f1ec8c9fa) Merge #10008: [trivial] Fix a typo (introduced two days ago) in the default fee warning +- [`539cf5c17`](https://github.com/raptor3um/raptoreum/commit/539cf5c17) Merge #9481: [Qt] Show more significant warning if we fall back to the default fee +- [`bcef7260d`](https://github.com/raptor3um/raptoreum/commit/bcef7260d) Merge #10196: Bugfix: PrioritiseTransaction updates the mempool tx counter +- [`c716ee03f`](https://github.com/raptor3um/raptoreum/commit/c716ee03f) Merge #10441: net: only enforce expected services for half of outgoing connections +- [`785d4d0ee`](https://github.com/raptor3um/raptoreum/commit/785d4d0ee) Merge #8949: Be more agressive in getting connections to peers with relevant services. +- [`67196dc81`](https://github.com/raptor3um/raptoreum/commit/67196dc81) Only consider nodes missing relevant services after 40 failed attemps +- [`c45c767f8`](https://github.com/raptor3um/raptoreum/commit/c45c767f8) Merge #10294: [Wallet] unset change position when there is no change +- [`562332601`](https://github.com/raptor3um/raptoreum/commit/562332601) Merge #10228: build: regenerate bitcoin-config.h as necessary +- [`ee3ff3552`](https://github.com/raptor3um/raptoreum/commit/ee3ff3552) Merge #10215: Check interruptNet during dnsseed lookups +- [`69058b83f`](https://github.com/raptor3um/raptoreum/commit/69058b83f) Merge #10245: Minor fix in build documentation for FreeBSD 11 +- [`a601206d3`](https://github.com/raptor3um/raptoreum/commit/a601206d3) Merge #10410: Fix importwallet edge case rescan bug +- [`955939f77`](https://github.com/raptor3um/raptoreum/commit/955939f77) Merge #10424: Populate services in GetLocalAddress +- [`12099e52d`](https://github.com/raptor3um/raptoreum/commit/12099e52d) Merge #10414: [depends] miniupnpc 2.0.20170509 +- [`b67fdbee9`](https://github.com/raptor3um/raptoreum/commit/b67fdbee9) Merge #10207: Clarify importprivkey help text ... example of blank label without rescan +- [`fb6992de5`](https://github.com/raptor3um/raptoreum/commit/fb6992de5) Merge #10176: net: gracefully handle NodeId wrapping +- [`720325f23`](https://github.com/raptor3um/raptoreum/commit/720325f23) Merge #10204: [rpc] rename disconnectnode argument +- [`2e45791c9`](https://github.com/raptor3um/raptoreum/commit/2e45791c9) Merge #10157: [0.14] Fix the mempool_packages.py test +- [`96b457d47`](https://github.com/raptor3um/raptoreum/commit/96b457d47) Merge #10144: Prioritisetransaction wasn't always updating ancestor fee +- [`ec563a0f1`](https://github.com/raptor3um/raptoreum/commit/ec563a0f1) Merge #10146: Better error handling for submitblock +- [`0fc9b2bd8`](https://github.com/raptor3um/raptoreum/commit/0fc9b2bd8) Merge #10139: [rpc] Remove auth cookie on shutdown +- [`06c871457`](https://github.com/raptor3um/raptoreum/commit/06c871457) Merge #9959: Mining: Prevent slowdown in CreateNewBlock on large mempools +- [`42d306056`](https://github.com/raptor3um/raptoreum/commit/42d306056) Merge #10120: util: Work around (virtual) memory exhaustion on 32-bit w/ glibc +- [`a14912965`](https://github.com/raptor3um/raptoreum/commit/a14912965) Merge #10130: bitcoin-tx input verification (awemany, jnewbery) +- [`8aa00505f`](https://github.com/raptor3um/raptoreum/commit/8aa00505f) Merge #10084: rpc: Rename first named arg of createrawtransaction +- [`a81f44543`](https://github.com/raptor3um/raptoreum/commit/a81f44543) Merge #9973: depends: fix zlib build on osx +- [`b01875185`](https://github.com/raptor3um/raptoreum/commit/b01875185) Merge #10060: [Qt] Ensure an item exists on the rpcconsole stack before adding +- [`edd514c43`](https://github.com/raptor3um/raptoreum/commit/edd514c43) Merge #10037: Trivial: Fix typo in help getrawtransaction RPC +- [`4321788cc`](https://github.com/raptor3um/raptoreum/commit/4321788cc) Merge #9953: Fix shutdown hang with >= 8 -addnodes set +- [`bd0b0daaa`](https://github.com/raptor3um/raptoreum/commit/bd0b0daaa) Merge #9892: Bugfix: Only install manpages for built programs +- [`818fc1eaf`](https://github.com/raptor3um/raptoreum/commit/818fc1eaf) Merge #9891: depends: make osx output deterministic +- [`a16d3b005`](https://github.com/raptor3um/raptoreum/commit/a16d3b005) Merge #9829: Fix importmulti returning rescan errors for wrong keys +- [`16b2a1d1b`](https://github.com/raptor3um/raptoreum/commit/16b2a1d1b) Merge #9791: Avoid VLA in hash.h +- [`39f08b6e6`](https://github.com/raptor3um/raptoreum/commit/39f08b6e6) Merge #9865: Change bitcoin address in RPC help message +- [`3693eb157`](https://github.com/raptor3um/raptoreum/commit/3693eb157) Merge #9879: [doc] Update doc/bips.md for BIP90 implementation +- [`7c3b8ec4b`](https://github.com/raptor3um/raptoreum/commit/7c3b8ec4b) Merge #9840: Update sendfrom RPC help to correct coin selection misconception +- [`5c7c3b3a0`](https://github.com/raptor3um/raptoreum/commit/5c7c3b3a0) Merge #9856: Terminate immediately when allocation fails +- [`397c27ff9`](https://github.com/raptor3um/raptoreum/commit/397c27ff9) Merge #9875: tests: Fix dangling pwalletMain pointer in wallet tests +- [`af006a36e`](https://github.com/raptor3um/raptoreum/commit/af006a36e) Merge #9789: build: add --enable-werror and warn on vla's +- [`d88030845`](https://github.com/raptor3um/raptoreum/commit/d88030845) Merge #9824: qa: Check return code when stopping nodes +- [`f09ae21c3`](https://github.com/raptor3um/raptoreum/commit/f09ae21c3) Merge #9820: Fix pruning test broken by 2 hour manual prune window +- [`0e8be439c`](https://github.com/raptor3um/raptoreum/commit/0e8be439c) Merge #9711: [Trivial] Remove incorrect help message from gettxoutproof() +- [`ac981ec3c`](https://github.com/raptor3um/raptoreum/commit/ac981ec3c) Merge #9773: Return errors from importmulti if complete rescans are not successful +- [`0a6f63bb2`](https://github.com/raptor3um/raptoreum/commit/0a6f63bb2) Merge #9817: Fix segfault crash when shutdown the GUI in disablewallet mode +- [`15a035b9c`](https://github.com/raptor3um/raptoreum/commit/15a035b9c) Merge #9798: Fix Issue #9775 (Check returned value of fopen) +- [`8d2edc469`](https://github.com/raptor3um/raptoreum/commit/8d2edc469) Merge #9813: Read/write mempool.dat as a binary. +- [`199b07a89`](https://github.com/raptor3um/raptoreum/commit/199b07a89) Merge #9760: [wallet] Remove importmulti always-true check +- [`3ab5fab7f`](https://github.com/raptor3um/raptoreum/commit/3ab5fab7f) Merge #9786: boost: remove iostreams includes +- [`5e596423a`](https://github.com/raptor3um/raptoreum/commit/5e596423a) Merge #9785: Avoid variable length arrays +- [`11a5f2e6a`](https://github.com/raptor3um/raptoreum/commit/11a5f2e6a) Rename and Raptoreumify .manpages files +- [`6c2fe3d05`](https://github.com/raptor3um/raptoreum/commit/6c2fe3d05) Remove onlyMaybeDeadlock condition around printing of deadlock info +- [`9b45c2f65`](https://github.com/raptor3um/raptoreum/commit/9b45c2f65) Add missing lines about ARM in depends/README.md +- [`1c8b7b466`](https://github.com/raptor3um/raptoreum/commit/1c8b7b466) Sync release-notes.md with Bitcoin 0.14 +- [`c5fdd27d4`](https://github.com/raptor3um/raptoreum/commit/c5fdd27d4) Merge #8743: Remove old manpages from contrib/debian in favour of doc/man +- [`0080fde36`](https://github.com/raptor3um/raptoreum/commit/0080fde36) Merge #9778: Add two hour buffer to manual pruning +- [`86fd57b8c`](https://github.com/raptor3um/raptoreum/commit/86fd57b8c) Merge #9777: Handle unusual maxsigcachesize gracefully +- [`5f88c6451`](https://github.com/raptor3um/raptoreum/commit/5f88c6451) Merge #9675: Fix typo and spelling inconsistency in CONTRIBUTING.md +- [`52819ca9b`](https://github.com/raptor3um/raptoreum/commit/52819ca9b) Merge #9763: [Trivial] Update comments referencing main.cpp +- [`bb2c1624c`](https://github.com/raptor3um/raptoreum/commit/bb2c1624c) Merge #9771: Add missing cs_wallet lock that triggers new lock held assertion +- [`da8808fba`](https://github.com/raptor3um/raptoreum/commit/da8808fba) Merge #9756: Return error when importmulti called with invalid address. +- [`136d8606c`](https://github.com/raptor3um/raptoreum/commit/136d8606c) Merge #9758: Selectively suppress deprecation warnings +- [`f2b556008`](https://github.com/raptor3um/raptoreum/commit/f2b556008) Merge #9553: Use z = std::max(x - y, 0) instead of z = x - y; if (z < 0) z = 0; +- [`132edbda8`](https://github.com/raptor3um/raptoreum/commit/132edbda8) Merge #9755: Bugfix: Qt/Options: Restore persistent "restart required" notice +- [`fe0ef87cd`](https://github.com/raptor3um/raptoreum/commit/fe0ef87cd) Merge #9720: net: fix banning and disallow sending messages before receiving verack +- [`588b8e5ca`](https://github.com/raptor3um/raptoreum/commit/588b8e5ca) Merge #9715: Disconnect peers which we do not receive VERACKs from within 60 sec +- [`b183a1f2a`](https://github.com/raptor3um/raptoreum/commit/b183a1f2a) Merge #9735: devtools: Handle Qt formatting characters edge-case in update-translations.py +- [`7cc218dd7`](https://github.com/raptor3um/raptoreum/commit/7cc218dd7) Merge #9736: Pre-0.14.0 hardcoded seeds update +- [`b50b8196f`](https://github.com/raptor3um/raptoreum/commit/b50b8196f) Merge #9708: Clean up all known races/platform-specific UB at the time PR was opened +- [`8043468b3`](https://github.com/raptor3um/raptoreum/commit/8043468b3) Merge #9707: Fix RPC failure testing +- [`3b543952d`](https://github.com/raptor3um/raptoreum/commit/3b543952d) Merge #9698: net: fix socket close race +- [`f1f4e25d6`](https://github.com/raptor3um/raptoreum/commit/f1f4e25d6) Merge #9718: Qt/Intro: Various fixes +- [`7d4e34029`](https://github.com/raptor3um/raptoreum/commit/7d4e34029) Merge #9674: Always enforce strict lock ordering (try or not) +- [`e4ddb3a35`](https://github.com/raptor3um/raptoreum/commit/e4ddb3a35) Merge #9705: build: Add options to override BDB cflags/libs +- [`f1cbc40b3`](https://github.com/raptor3um/raptoreum/commit/f1cbc40b3) Merge #9712: bench: Fix initialization order in registration +- [`767f5e436`](https://github.com/raptor3um/raptoreum/commit/767f5e436) Merge #9532: Remove unused variables +- [`eb4c5bac6`](https://github.com/raptor3um/raptoreum/commit/eb4c5bac6) Merge #9227: Make nWalletDBUpdated atomic to avoid a potential race. +- [`72a0d05d6`](https://github.com/raptor3um/raptoreum/commit/72a0d05d6) Merge #9378: [trivial] Add documentation for CWalletTx::fFromMe member. +- [`3f1929fb0`](https://github.com/raptor3um/raptoreum/commit/3f1929fb0) Merge #9659: Net: Turn some methods and params/variables const +- [`81eeb0dee`](https://github.com/raptor3um/raptoreum/commit/81eeb0dee) Merge #9651: Fix typos +- [`ea414f307`](https://github.com/raptor3um/raptoreum/commit/ea414f307) Merge #9578: Add missing mempool lock for CalculateMemPoolAncestors +- [`e86c52f69`](https://github.com/raptor3um/raptoreum/commit/e86c52f69) Merge #9556: Remove redundant semicolons +- [`3dcbfc744`](https://github.com/raptor3um/raptoreum/commit/3dcbfc744) Merge #9580: Fix various minor linearization script issues +- [`dcc251e2b`](https://github.com/raptor3um/raptoreum/commit/dcc251e2b) Merge #9663: [RPC] clarify listunspent amount description +- [`d45a7ae73`](https://github.com/raptor3um/raptoreum/commit/d45a7ae73) Merge #9647: Skip RAII event tests if libevent is built without event_set_mem_functions +- [`e24b8ae50`](https://github.com/raptor3um/raptoreum/commit/e24b8ae50) Merge #9649: [doc] Remove unused clang format dev script +- [`8ad57c31f`](https://github.com/raptor3um/raptoreum/commit/8ad57c31f) Remove "using namespace std" from wallet.cpp +- [`25074aeb4`](https://github.com/raptor3um/raptoreum/commit/25074aeb4) Merge #9644: [refactor] Remove using namespace from src/ +- [`daa8582b1`](https://github.com/raptor3um/raptoreum/commit/daa8582b1) Merge #9615: Wallet incremental fee +- [`b97eecc05`](https://github.com/raptor3um/raptoreum/commit/b97eecc05) Fix review nits +- [`ec8176960`](https://github.com/raptor3um/raptoreum/commit/ec8176960) Remove segwit related raptoreum-tx tests +- [`4d651621e`](https://github.com/raptor3um/raptoreum/commit/4d651621e) Update mainnet chainparams to use correct heights for BIP34/BIP65/BIP66 +- [`3824192e4`](https://github.com/raptor3um/raptoreum/commit/3824192e4) Update testnet chainparams to use correct heights for BIP34/BIP65/BIP66 +- [`715be73c6`](https://github.com/raptor3um/raptoreum/commit/715be73c6) Fix listsinceblock.py +- [`9bc404a8c`](https://github.com/raptor3um/raptoreum/commit/9bc404a8c) Add "setbip69enabled" RPC usable by tests only +- [`6bee150e8`](https://github.com/raptor3um/raptoreum/commit/6bee150e8) Require timestamps for importmulti keys +- [`611cb6f27`](https://github.com/raptor3um/raptoreum/commit/611cb6f27) Fix new raptoreum-tx tests +- [`86753a890`](https://github.com/raptor3um/raptoreum/commit/86753a890) Add spaces around + in updateGlobalFeeVariables +- [`228d774a6`](https://github.com/raptor3um/raptoreum/commit/228d774a6) Fix use of distdir and docker build dir +- [`771c56a79`](https://github.com/raptor3um/raptoreum/commit/771c56a79) Fix new bitcoin-util-tests +- [`9e13bb393`](https://github.com/raptor3um/raptoreum/commit/9e13bb393) Fix transaction_tests.cpp +- [`cd0c910a8`](https://github.com/raptor3um/raptoreum/commit/cd0c910a8) Use new data structures for devnet checkpointData/chainTxData +- [`2cdafa0ca`](https://github.com/raptor3um/raptoreum/commit/2cdafa0ca) Merge #9671: Fix super-unlikely race introduced in 236618061a445d2cb11e72 +- [`4f6de1697`](https://github.com/raptor3um/raptoreum/commit/4f6de1697) Merge #9525: test: Include tx data in EXTRA_DIST +- [`dd5ccf1cb`](https://github.com/raptor3um/raptoreum/commit/dd5ccf1cb) Merge #9406: Re-enable a blank v1 Tx JSON test +- [`a757261e8`](https://github.com/raptor3um/raptoreum/commit/a757261e8) Merge #9646: depends: Fix cross build for qt5.7 +- [`660c027cd`](https://github.com/raptor3um/raptoreum/commit/660c027cd) Merge #9510: [trivial] Fix typos in comments +- [`edf3a00a2`](https://github.com/raptor3um/raptoreum/commit/edf3a00a2) Merge #9638: qa: Actually test assertions in pruning.py +- [`007dc5976`](https://github.com/raptor3um/raptoreum/commit/007dc5976) Merge #9637: [Qt] fix transaction details output-index to reflect vout index +- [`6070cf111`](https://github.com/raptor3um/raptoreum/commit/6070cf111) Merge #9519: Exclude RBF replacement txs from fee estimation +- [`e09d5db45`](https://github.com/raptor3um/raptoreum/commit/e09d5db45) Merge #9574: [depends] Fix QT build on OSX +- [`5a84b27dc`](https://github.com/raptor3um/raptoreum/commit/5a84b27dc) Merge #9628: qa: Increase a sync_blocks timeout in pruning.py +- [`ccd81a00f`](https://github.com/raptor3um/raptoreum/commit/ccd81a00f) Merge #9624: [Trivial] fix logging typo in FlushStateToDisk() +- [`ef6297cdd`](https://github.com/raptor3um/raptoreum/commit/ef6297cdd) Merge #9617: [Trivial] Update license year range to 2017 +- [`dc523a164`](https://github.com/raptor3um/raptoreum/commit/dc523a164) Merge #9371: Notify on removal +- [`3b2a26c4e`](https://github.com/raptor3um/raptoreum/commit/3b2a26c4e) Merge #9596: [bugfix] save feeDelta instead of priorityDelta in DumpMempool +- [`119c3fe62`](https://github.com/raptor3um/raptoreum/commit/119c3fe62) Merge #9516: Bug-fix: listsinceblock: use fork point as reference for blocks in reorg'd chains +- [`96b4910fb`](https://github.com/raptor3um/raptoreum/commit/96b4910fb) Merge #9607: Remove redundant semicolons in Python code +- [`9ba8a31d0`](https://github.com/raptor3um/raptoreum/commit/9ba8a31d0) Merge #9583: Move wallet callbacks into cs_main (this effectively reverts #7946) +- [`6bc16a66f`](https://github.com/raptor3um/raptoreum/commit/6bc16a66f) Merge #9610: [Trivial] Grammar and typo correction (laudaa) +- [`cd04ccd2d`](https://github.com/raptor3um/raptoreum/commit/cd04ccd2d) Merge #9554: [test] Avoid potential NULL pointer dereference in addrman_tests.cpp +- [`c431a7f07`](https://github.com/raptor3um/raptoreum/commit/c431a7f07) trivial: squash missing field 'argNames' initializer warning in qt tests +- [`36109e058`](https://github.com/raptor3um/raptoreum/commit/36109e058) Merge #9377: fundrawtransaction: Keep change-output keys by default, make it optional +- [`f8b880f4d`](https://github.com/raptor3um/raptoreum/commit/f8b880f4d) Merge #9535: Split CNode::cs_vSend: message processing and message sending +- [`a84f8da13`](https://github.com/raptor3um/raptoreum/commit/a84f8da13) Merge #9498: Basic CCheckQueue Benchmarks +- [`3f360d3e2`](https://github.com/raptor3um/raptoreum/commit/3f360d3e2) Merge #9542: Docs: Update CONTRIBUTING.md +- [`78a7a9f30`](https://github.com/raptor3um/raptoreum/commit/78a7a9f30) Merge #9552: Add IPv6 support to qos.sh +- [`197fbea84`](https://github.com/raptor3um/raptoreum/commit/197fbea84) Merge #9512: Fix various things -fsanitize complains about +- [`be63fb795`](https://github.com/raptor3um/raptoreum/commit/be63fb795) Merge #9508: Remove unused Python imports +- [`3bd155bd5`](https://github.com/raptor3um/raptoreum/commit/3bd155bd5) Merge #9561: Wake message handling thread when we receive a new block +- [`2adb35533`](https://github.com/raptor3um/raptoreum/commit/2adb35533) Add assumevalid testcase +- [`40dff103d`](https://github.com/raptor3um/raptoreum/commit/40dff103d) Merge #9380: Separate different uses of minimum fees +- [`87229e06c`](https://github.com/raptor3um/raptoreum/commit/87229e06c) Merge #9469: [depends] Qt 5.7.1 +- [`ad9b9251a`](https://github.com/raptor3um/raptoreum/commit/ad9b9251a) Merge #9490: Replace FindLatestBefore used by importmuti with FindEarliestAtLeast. +- [`4408b2d14`](https://github.com/raptor3um/raptoreum/commit/4408b2d14) Merge #9222: Add 'subtractFeeFromAmount' option to 'fundrawtransaction'. +- [`5b763faba`](https://github.com/raptor3um/raptoreum/commit/5b763faba) Merge #9468: [Depends] Dependency updates for 0.14.0 +- [`74bfe0b22`](https://github.com/raptor3um/raptoreum/commit/74bfe0b22) Merge #9261: Add unstored orphans with rejected parents to recentRejects +- [`53820de3e`](https://github.com/raptor3um/raptoreum/commit/53820de3e) Remove SegWit related code in raptoreum-tx +- [`a0d089eda`](https://github.com/raptor3um/raptoreum/commit/a0d089eda) Merge #8883: Add all standard TXO types to bitcoin-tx +- [`658479355`](https://github.com/raptor3um/raptoreum/commit/658479355) Merge #9472: Disentangle progress estimation from checkpoints and update it +- [`cee8cf1be`](https://github.com/raptor3um/raptoreum/commit/cee8cf1be) Merge #9518: Return height of last block pruned by pruneblockchain RPC +- [`294b8f70e`](https://github.com/raptor3um/raptoreum/commit/294b8f70e) Merge #9520: Deprecate non-txindex getrawtransaction and better warning +- [`7dfcb15e6`](https://github.com/raptor3um/raptoreum/commit/7dfcb15e6) Merge #9416: travis: make distdir before make +- [`a0438d534`](https://github.com/raptor3um/raptoreum/commit/a0438d534) Merge #9297: Various RPC help outputs updated +- [`819ea7484`](https://github.com/raptor3um/raptoreum/commit/819ea7484) Merge #9507: Fix use-after-free in CTxMemPool::removeConflicts() +- [`88b9aa45d`](https://github.com/raptor3um/raptoreum/commit/88b9aa45d) Merge #7871: Manual block file pruning. +- [`6132bfbe2`](https://github.com/raptor3um/raptoreum/commit/6132bfbe2) Use version 2 blocks for miner_tests +- [`56ff71fce`](https://github.com/raptor3um/raptoreum/commit/56ff71fce) Update devnet to activate BIP34/BIP65/BIP66 immediately +- [`7321bfdd6`](https://github.com/raptor3um/raptoreum/commit/7321bfdd6) Merge #8391: Consensus: Remove ISM +- [`17d375e71`](https://github.com/raptor3um/raptoreum/commit/17d375e71) Merge #9436: test: Include tx data in EXTRA_DIST +- [`b72f9249d`](https://github.com/raptor3um/raptoreum/commit/b72f9249d) Merge #9376: Remove unused test files and references +- [`0fc37e8c5`](https://github.com/raptor3um/raptoreum/commit/0fc37e8c5) Merge #7562: Bump transaction version default to 2 +- [`71e3e37d9`](https://github.com/raptor3um/raptoreum/commit/71e3e37d9) Merge #8837: allow bitcoin-tx to parse partial transactions +- [`3235aad49`](https://github.com/raptor3um/raptoreum/commit/3235aad49) Implement SipHash in Python +- [`8e9bae954`](https://github.com/raptor3um/raptoreum/commit/8e9bae954) Merge pull request #1858 from codablock/pr_backport_bitcoin_0.14-8 +- [`e5daae291`](https://github.com/raptor3um/raptoreum/commit/e5daae291) Raptoreumify "linearize" README.md and switch the tool to mainnet +- [`2e02b167e`](https://github.com/raptor3um/raptoreum/commit/2e02b167e) Move wallet backup dir check to wallet.cpp +- [`ec8a9e0a6`](https://github.com/raptor3um/raptoreum/commit/ec8a9e0a6) Add missing Raptoreum specific parameters back in help strings +- [`b3ee3fc35`](https://github.com/raptor3um/raptoreum/commit/b3ee3fc35) Raptoreumify example config and help strings +- [`6ab9e6b90`](https://github.com/raptor3um/raptoreum/commit/6ab9e6b90) Add missing colons to Result/Example help strings +- [`5371ff4ef`](https://github.com/raptor3um/raptoreum/commit/5371ff4ef) Disable contrib/rpm dist +- [`df3159986`](https://github.com/raptor3um/raptoreum/commit/df3159986) Use OpenSmartnodeConnection in ThreadMnbRequestConnections +- [`29d5bdb55`](https://github.com/raptor3um/raptoreum/commit/29d5bdb55) Fix import-rescan.py test +- [`4f39a090b`](https://github.com/raptor3um/raptoreum/commit/4f39a090b) Fix remaining direct uses of mapArgs +- [`8763d30d5`](https://github.com/raptor3um/raptoreum/commit/8763d30d5) Merge #9506: RFC: Improve style for if indentation +- [`e3e3267b4`](https://github.com/raptor3um/raptoreum/commit/e3e3267b4) Merge #9513: build: fix qt distdir builds (retry) +- [`eb7a6b08f`](https://github.com/raptor3um/raptoreum/commit/eb7a6b08f) Merge #8811: rpc: Add support for JSON-RPC named arguments +- [`0dabb80ab`](https://github.com/raptor3um/raptoreum/commit/0dabb80ab) Merge #9496: Rename lambda argument name to prevent shadowing +- [`7c5de865d`](https://github.com/raptor3um/raptoreum/commit/7c5de865d) Merge #9404: Smarter coordination of change and fee in CreateTransaction. +- [`17e51db71`](https://github.com/raptor3um/raptoreum/commit/17e51db71) Merge #9408: Allow shutdown during LoadMempool, dump only when necessary +- [`de21f9261`](https://github.com/raptor3um/raptoreum/commit/de21f9261) Merge #9319: Break addnode out from the outbound connection limits. +- [`0bd905689`](https://github.com/raptor3um/raptoreum/commit/0bd905689) Merge #9138: Improve fee estimation +- [`2dd62abe3`](https://github.com/raptor3um/raptoreum/commit/2dd62abe3) Merge #9465: [Wallet] Do not perform ECDSA signing in the fee calculation inner loop. +- [`9e62719cc`](https://github.com/raptor3um/raptoreum/commit/9e62719cc) Merge #9413: [CoinControl] Allow non-wallet owned change addresses +- [`5d3401c7e`](https://github.com/raptor3um/raptoreum/commit/5d3401c7e) Merge #9312: Increase mempool expiry time to 2 weeks +- [`8c4c6063a`](https://github.com/raptor3um/raptoreum/commit/8c4c6063a) Merge #9281: Refactor: Remove using namespace from bench/ & test/ sources +- [`882e2cdb9`](https://github.com/raptor3um/raptoreum/commit/882e2cdb9) Merge #9373: Linearize script update (hash byte reversal and Python 3 support) +- [`718e6223b`](https://github.com/raptor3um/raptoreum/commit/718e6223b) Merge #9387: [Refactor] RAII of libevent stuff using unique ptrs with deleters +- [`a1478e586`](https://github.com/raptor3um/raptoreum/commit/a1478e586) Merge #9417: Do not evaluate hidden LogPrint arguments +- [`e48bc13a2`](https://github.com/raptor3um/raptoreum/commit/e48bc13a2) Merge #9474: Mark the minconf parameter to move as ignored +- [`35f3f7aad`](https://github.com/raptor3um/raptoreum/commit/35f3f7aad) Merge #9475: Let autoconf detect presence of EVP_MD_CTX_new +- [`d2a8ecc8d`](https://github.com/raptor3um/raptoreum/commit/d2a8ecc8d) Merge #9395: Add test for -walletrejectlongchains +- [`e5873a564`](https://github.com/raptor3um/raptoreum/commit/e5873a564) Merge #9457: [qt] Select more files for translation +- [`f89a5c78d`](https://github.com/raptor3um/raptoreum/commit/f89a5c78d) Merge #9470: qt: Set (count) placeholder in sendcoinsdialog to notranslate +- [`d513c77af`](https://github.com/raptor3um/raptoreum/commit/d513c77af) Merge #9467: [Trivial] [Doc] Install Protobuf v3 on OS X +- [`125adda41`](https://github.com/raptor3um/raptoreum/commit/125adda41) Merge #9401: Make rpcauth help message clearer, add example in example .conf +- [`a81b2750f`](https://github.com/raptor3um/raptoreum/commit/a81b2750f) Merge #9396: Updated listsinceblock rpc documentation +- [`bdd151f59`](https://github.com/raptor3um/raptoreum/commit/bdd151f59) Merge #9288: Fix a bug if the min fee is 0 for FeeFilterRounder +- [`8f423499d`](https://github.com/raptor3um/raptoreum/commit/8f423499d) Merge #9283: A few more CTransactionRef optimizations +- [`71a490e0f`](https://github.com/raptor3um/raptoreum/commit/71a490e0f) Merge #9462: [qt] Do not translate tilde character +- [`da209546d`](https://github.com/raptor3um/raptoreum/commit/da209546d) Merge #8776: Wallet refactoring leading up to multiwallet +- [`1d83352da`](https://github.com/raptor3um/raptoreum/commit/1d83352da) Merge #8877: Qt RPC console: history sensitive-data filter, and saving input line when browsing history +- [`5961c622d`](https://github.com/raptor3um/raptoreum/commit/5961c622d) doc: Add historical release notes for 0.13.2 +- [`7b7ce8997`](https://github.com/raptor3um/raptoreum/commit/7b7ce8997) Merge #9446: SetMerkleBranch: remove unused code, remove cs_main lock requirement +- [`a590da317`](https://github.com/raptor3um/raptoreum/commit/a590da317) Merge #9412: build: Fix 'make deploy' for OSX +- [`b584f5630`](https://github.com/raptor3um/raptoreum/commit/b584f5630) Merge #9433: Update the Windows build notes +- [`e3fbe1520`](https://github.com/raptor3um/raptoreum/commit/e3fbe1520) Merge #9420: Fix linker error when configured with --enable-lcov +- [`cbbab00c5`](https://github.com/raptor3um/raptoreum/commit/cbbab00c5) Merge #9349: Make CScript (and prevector) c++11 movable. +- [`465ceff3b`](https://github.com/raptor3um/raptoreum/commit/465ceff3b) Use ForceSetArg/ForceSetMultiArgs in debug rpc command +- [`aff4b6d2c`](https://github.com/raptor3um/raptoreum/commit/aff4b6d2c) Merge #9243: Clean up mapArgs and mapMultiArgs Usage +- [`b9b358335`](https://github.com/raptor3um/raptoreum/commit/b9b358335) Merge #9435: Removed unused variable in test, fixing warning. +- [`7417a5b24`](https://github.com/raptor3um/raptoreum/commit/7417a5b24) Merge #9407: [Trivial] Added missing colons in when running help command +- [`199170e5d`](https://github.com/raptor3um/raptoreum/commit/199170e5d) Merge #9390: travis: make distdir +- [`d8b07b96a`](https://github.com/raptor3um/raptoreum/commit/d8b07b96a) Merge #9393: build: Include cuckoocache header in Makefile +- [`dc1df137e`](https://github.com/raptor3um/raptoreum/commit/dc1df137e) Merge #9262: Prefer coins that have fewer ancestors, sanity check txn before ATMP +- [`851febd88`](https://github.com/raptor3um/raptoreum/commit/851febd88) Merge #9316: [wallet] Disable free transactions when relay is disabled +- [`504fecfe6`](https://github.com/raptor3um/raptoreum/commit/504fecfe6) Remove call to SetMiscWarning in util.cpp +- [`dcc9dffae`](https://github.com/raptor3um/raptoreum/commit/dcc9dffae) Merge #9236: Fix races for strMiscWarning and fLargeWork*Found, make QT runawayException use GetWarnings +- [`b42c722b6`](https://github.com/raptor3um/raptoreum/commit/b42c722b6) Merge #9311: Flush wallet after abandontransaction +- [`6e11b1491`](https://github.com/raptor3um/raptoreum/commit/6e11b1491) Merge #9329: [Qt] Console: allow empty arguments +- [`8fa6680c5`](https://github.com/raptor3um/raptoreum/commit/8fa6680c5) Merge #9367: If we don't allow free txs, always send a fee filter (take 2) +- [`bf3cc9ff9`](https://github.com/raptor3um/raptoreum/commit/bf3cc9ff9) Merge #9331: [qa] Add test for rescan feature of wallet key import RPCs +- [`c1811e566`](https://github.com/raptor3um/raptoreum/commit/c1811e566) Merge #8895: Better SigCache Implementation +- [`e34afa106`](https://github.com/raptor3um/raptoreum/commit/e34afa106) Merge #9273: Remove unused CDiskBlockPos* argument from ProcessNewBlock +- [`e6d05d71d`](https://github.com/raptor3um/raptoreum/commit/e6d05d71d) Merge #9290: Make RelayWalletTransaction attempt to AcceptToMemoryPool. +- [`e8a710c32`](https://github.com/raptor3um/raptoreum/commit/e8a710c32) Merge pull request #1856 from codablock/pr_backport_bitcoin_0.14-7 +- [`87e9b5988`](https://github.com/raptor3um/raptoreum/commit/87e9b5988) Remove AddRef call in CNode constructor and do AddRef in AcceptConnection +- [`41ef1f98e`](https://github.com/raptor3um/raptoreum/commit/41ef1f98e) Remove comment about smartnode connections +- [`4ee0657f8`](https://github.com/raptor3um/raptoreum/commit/4ee0657f8) Do not add to vNodes until fOneShot/fFeeler/fAddNode have been set +- [`ea7361499`](https://github.com/raptor3um/raptoreum/commit/ea7361499) Use EXIT_FAILURE when calling exit() +- [`997f9f795`](https://github.com/raptor3um/raptoreum/commit/997f9f795) Raptoreumify build-windows.md +- [`c0607af9d`](https://github.com/raptor3um/raptoreum/commit/c0607af9d) Raptoreumify part of developer-notes.md +- [`5c860b347`](https://github.com/raptor3um/raptoreum/commit/5c860b347) Merge #9330: [Qt] Console: add security warning +- [`91dc00515`](https://github.com/raptor3um/raptoreum/commit/91dc00515) Merge #9344: Do not run functions with necessary side-effects in assert() +- [`11e27d7af`](https://github.com/raptor3um/raptoreum/commit/11e27d7af) Add missing null checks in wallet/crypto_tests.cpp +- [`0982d6d3c`](https://github.com/raptor3um/raptoreum/commit/0982d6d3c) Merge #9305: Refactor: Removed begin/end_ptr functions. +- [`3aee86d6f`](https://github.com/raptor3um/raptoreum/commit/3aee86d6f) Merge #9334: Update to latest libsecp256k1 +- [`d0db70b01`](https://github.com/raptor3um/raptoreum/commit/d0db70b01) Merge #9302: Return txid even if ATMP fails for new transaction +- [`c0b0ae8be`](https://github.com/raptor3um/raptoreum/commit/c0b0ae8be) Merge #9309: [qa] Wallet needs to stay unlocked for whole test +- [`04f6a7367`](https://github.com/raptor3um/raptoreum/commit/04f6a7367) Merge #9240: Remove txConflicted +- [`45727e797`](https://github.com/raptor3um/raptoreum/commit/45727e797) Merge #9303: Update comments in ctaes +- [`b0c0046ef`](https://github.com/raptor3um/raptoreum/commit/b0c0046ef) Merge #9291: Remove mapOrphanTransactionsByPrev from DoS_tests +- [`470b526d9`](https://github.com/raptor3um/raptoreum/commit/470b526d9) Merge #9299: Remove no longer needed check for premature v2 txs +- [`7322489ca`](https://github.com/raptor3um/raptoreum/commit/7322489ca) Merge #9276: Some minor testing cleanups +- [`63d610d13`](https://github.com/raptor3um/raptoreum/commit/63d610d13) Merge #9296: Fix missed change to WalletTx structure +- [`19958fecf`](https://github.com/raptor3um/raptoreum/commit/19958fecf) Merge #9274: [qa] Use cached utxo set to fix performance regression +- [`7d887dafb`](https://github.com/raptor3um/raptoreum/commit/7d887dafb) Merge #9282: CMutableTransaction is defined as struct +- [`386026e57`](https://github.com/raptor3um/raptoreum/commit/386026e57) Merge #9165: SendMoney: use already-calculated balance +- [`9782c1831`](https://github.com/raptor3um/raptoreum/commit/9782c1831) Merge #9269: Align struct COrphan definition +- [`2feda90d5`](https://github.com/raptor3um/raptoreum/commit/2feda90d5) Merge #8613: LevelDB 1.19 +- [`b5389c09b`](https://github.com/raptor3um/raptoreum/commit/b5389c09b) Merge #9014: Fix block-connection performance regression +- [`45ea6ba4d`](https://github.com/raptor3um/raptoreum/commit/45ea6ba4d) Fix invalid cast to CTransaction* in WalletModelTransaction +- [`525c04931`](https://github.com/raptor3um/raptoreum/commit/525c04931) Merge #8580: Make CTransaction actually immutable +- [`1e62969fa`](https://github.com/raptor3um/raptoreum/commit/1e62969fa) Preparations for upcoming backport of Bitcoin #8580 +- [`cb61441e2`](https://github.com/raptor3um/raptoreum/commit/cb61441e2) Merge #9251: Improvement of documentation of command line parameter 'whitelist' +- [`5d1f05aff`](https://github.com/raptor3um/raptoreum/commit/5d1f05aff) Merge #9221: [qa] Get rid of duplicate code +- [`5e09f275e`](https://github.com/raptor3um/raptoreum/commit/5e09f275e) Merge #9257: [qa] Dump debug logs on travis failures. +- [`b390e8ee5`](https://github.com/raptor3um/raptoreum/commit/b390e8ee5) Merge #9246: Developer docs about existing subtrees. +- [`b8a81d435`](https://github.com/raptor3um/raptoreum/commit/b8a81d435) Merge #9223: unification of Bloom filter representation +- [`5a6131a86`](https://github.com/raptor3um/raptoreum/commit/5a6131a86) Merge #9265: bitcoin-cli: Make error message less confusing +- [`a95622c0b`](https://github.com/raptor3um/raptoreum/commit/a95622c0b) Merge #9239: Disable fee estimates for 1 block target +- [`62ae4e644`](https://github.com/raptor3um/raptoreum/commit/62ae4e644) Merge #9229: Remove calls to getaddrinfo_a +- [`b2fb586de`](https://github.com/raptor3um/raptoreum/commit/b2fb586de) Add missing comments to ProcessNewBlock and ProcessNewBlockHeaders +- [`180e379e2`](https://github.com/raptor3um/raptoreum/commit/180e379e2) Merge #9253: Fix calculation of number of bound sockets to use +- [`3b2fd85b5`](https://github.com/raptor3um/raptoreum/commit/3b2fd85b5) Merge #9230: Fix some benign races in timestamp logging +- [`d54ef6d7e`](https://github.com/raptor3um/raptoreum/commit/d54ef6d7e) Merge #9226: Remove fNetworkNode and pnodeLocalHost. +- [`a78e0e36c`](https://github.com/raptor3um/raptoreum/commit/a78e0e36c) Merge #9244: Trivial refactor: Remove extern keyword from function declarations +- [`b07393709`](https://github.com/raptor3um/raptoreum/commit/b07393709) Merge #9010: Split up AppInit2 into multiple phases, daemonize after datadir lock errors +- [`27fcec08f`](https://github.com/raptor3um/raptoreum/commit/27fcec08f) Merge #9202: bench: Add support for measuring CPU cycles +- [`ab9bce2c3`](https://github.com/raptor3um/raptoreum/commit/ab9bce2c3) Merge #9225: Fix some benign races +- [`b27c4b8e9`](https://github.com/raptor3um/raptoreum/commit/b27c4b8e9) Merge #9224: Prevent FD_SETSIZE error building on OpenBSD +- [`df24dfd4b`](https://github.com/raptor3um/raptoreum/commit/df24dfd4b) Merge #9233: Fix some typos +- [`f8948de02`](https://github.com/raptor3um/raptoreum/commit/f8948de02) Merge #9219: doc: Improve windows build instructions using Linux subsystem +- [`dadfc45b1`](https://github.com/raptor3um/raptoreum/commit/dadfc45b1) Add size() method to CVectorWriter +- [`5c0b55a7c`](https://github.com/raptor3um/raptoreum/commit/5c0b55a7c) Merge #9128: net: Decouple CConnman and message serialization +- [`c87c15142`](https://github.com/raptor3um/raptoreum/commit/c87c15142) Merge #9220: Refactor: Stop using namespace std (bitcoin-cli/-tx). +- [`2c8fe4686`](https://github.com/raptor3um/raptoreum/commit/2c8fe4686) Merge #9100: tx_valid: re-order inputs to how they are encoded +- [`d5f2f0796`](https://github.com/raptor3um/raptoreum/commit/d5f2f0796) Merge #9216: Doc: Fix copypasted comment +- [`a71702e3e`](https://github.com/raptor3um/raptoreum/commit/a71702e3e) Merge #9144: [Trivial] Correct waitforblockheight example help text +- [`3a48d2b83`](https://github.com/raptor3um/raptoreum/commit/3a48d2b83) Merge #8930: Move orphan processing to ActivateBestChain +- [`f831710f4`](https://github.com/raptor3um/raptoreum/commit/f831710f4) Merge #9139: Change sync_blocks to pick smarter maxheight (on top of #9196) +- [`b6ea01e07`](https://github.com/raptor3um/raptoreum/commit/b6ea01e07) Remove namespace alert_tests when including alert test data +- [`7939a23e3`](https://github.com/raptor3um/raptoreum/commit/7939a23e3) Use std::move when calling MakeTransactionRef +- [`d0a39fbcf`](https://github.com/raptor3um/raptoreum/commit/d0a39fbcf) Use "Raptoreum Core" instead of "raptoreum-core" in some places and Raptoreumify +- [`9170c0e9c`](https://github.com/raptor3um/raptoreum/commit/9170c0e9c) Fix rpc tests +- [`76d7730a5`](https://github.com/raptor3um/raptoreum/commit/76d7730a5) Raptoreumify ISSUE_TEMPLATE.md +- [`07cd44c0e`](https://github.com/raptor3um/raptoreum/commit/07cd44c0e) Use MakeTransactionRef in CreateDevNetGenesisBlock +- [`e02f31347`](https://github.com/raptor3um/raptoreum/commit/e02f31347) Mogrify and optimize network_disabled.png and copy it to all themes +- [`796bed124`](https://github.com/raptor3um/raptoreum/commit/796bed124) Merge #9207: [Doc] Move comments above bash command in build-unix +- [`898bd4395`](https://github.com/raptor3um/raptoreum/commit/898bd4395) Merge #9204: Clarify CreateTransaction error messages +- [`2d87a0fdd`](https://github.com/raptor3um/raptoreum/commit/2d87a0fdd) Merge #8690: Do not fully sort all nodes for addr relay +- [`d757c895b`](https://github.com/raptor3um/raptoreum/commit/d757c895b) Merge #9141: Remove unnecessary calls to CheckFinalTx +- [`4e1c1923b`](https://github.com/raptor3um/raptoreum/commit/4e1c1923b) Merge #9142: Move -salvagewallet, -zap(wtx) to where they belong +- [`ce3f38d6c`](https://github.com/raptor3um/raptoreum/commit/ce3f38d6c) Merge #9025: getrawtransaction should take a bool for verbose +- [`481bab745`](https://github.com/raptor3um/raptoreum/commit/481bab745) Merge #9200: bench: Fix subtle counting issue when rescaling iteration count +- [`507c4e524`](https://github.com/raptor3um/raptoreum/commit/507c4e524) Merge #9185: [Qt] fix coincontrol sort issue +- [`e5cc7d0eb`](https://github.com/raptor3um/raptoreum/commit/e5cc7d0eb) Merge #8872: Remove block-request logic from INV message processing +- [`726dd1f8a`](https://github.com/raptor3um/raptoreum/commit/726dd1f8a) Merge #9179: Set DEFAULT_LIMITFREERELAY = 0 kB/minute +- [`afa99c41f`](https://github.com/raptor3um/raptoreum/commit/afa99c41f) Merge #9117: net: don't send feefilter messages before the version handshake is complete +- [`f12610c03`](https://github.com/raptor3um/raptoreum/commit/f12610c03) Merge #9125: Make CBlock a vector of shared_ptr of CTransactions +- [`c937a0bfb`](https://github.com/raptor3um/raptoreum/commit/c937a0bfb) Merge #9186: test: Fix use-after-free in scheduler tests +- [`2f9528486`](https://github.com/raptor3um/raptoreum/commit/2f9528486) Merge #9156: Add compile and link options echo to configure +- [`a9a2db9a5`](https://github.com/raptor3um/raptoreum/commit/a9a2db9a5) Merge #9168: [qa] add assert_raises_message to check specific error message +- [`9b9d3d1da`](https://github.com/raptor3um/raptoreum/commit/9b9d3d1da) Merge #9133: Unset fImporting for loading mempool +- [`0932079ea`](https://github.com/raptor3um/raptoreum/commit/0932079ea) Merge #9131: fNetworkActive is not protected by a lock, use an atomic +- [`e711f4ae2`](https://github.com/raptor3um/raptoreum/commit/e711f4ae2) Merge #9151: [qa] proxy_test: Calculate hardcoded port numbers +- [`dc4fdd9ff`](https://github.com/raptor3um/raptoreum/commit/dc4fdd9ff) Merge #9164: [trivial] credit values are CAmount +- [`c12eb7f31`](https://github.com/raptor3um/raptoreum/commit/c12eb7f31) Put namespace{} around alertTests.raw.h include +- [`a9c354472`](https://github.com/raptor3um/raptoreum/commit/a9c354472) Merge #9140: Bugfix: Correctly replace generated headers and fail cleanly +- [`12883cfe4`](https://github.com/raptor3um/raptoreum/commit/12883cfe4) Merge #9136: sync_blocks cleanup +- [`2b99a4b4e`](https://github.com/raptor3um/raptoreum/commit/2b99a4b4e) Merge #9145: [qt] Make network disabled icon 50% opaque +- [`db516cfb8`](https://github.com/raptor3um/raptoreum/commit/db516cfb8) Merge #9124: Use better name for local variable to prevent -Wshadow compiler warning +- [`8b7eeb610`](https://github.com/raptor3um/raptoreum/commit/8b7eeb610) Merge #9115: Mention reporting security issues responsibly +- [`a9aa477da`](https://github.com/raptor3um/raptoreum/commit/a9aa477da) Merge #9049: Remove duplicatable duplicate-input check from CheckTransaction +- [`3a388d9c0`](https://github.com/raptor3um/raptoreum/commit/3a388d9c0) Merge #9097: [qa] Rework sync_* and preciousblock.py +- [`ec08f5b75`](https://github.com/raptor3um/raptoreum/commit/ec08f5b75) Merge #9122: fix getnettotals RPC description about timemillis. +- [`5f6908619`](https://github.com/raptor3um/raptoreum/commit/5f6908619) Merge #9121: Initialize variable to prevent compiler warning +- [`56ed80084`](https://github.com/raptor3um/raptoreum/commit/56ed80084) Merge #8894: [Testing] Include fRelay in mininode version messages +- [`161fa919c`](https://github.com/raptor3um/raptoreum/commit/161fa919c) Merge #9111: Remove unused variable UNLIKELY_PCT from fees.h +- [`b64452a7a`](https://github.com/raptor3um/raptoreum/commit/b64452a7a) Revert "Check and enable -Wshadow by default." +- [`591729051`](https://github.com/raptor3um/raptoreum/commit/591729051) Merge #8794: Enable -Wshadow by default +- [`7765c87e7`](https://github.com/raptor3um/raptoreum/commit/7765c87e7) Remove nType and nVersion from Raptoreum related serialization code +- [`19a2d668c`](https://github.com/raptor3um/raptoreum/commit/19a2d668c) Merge #9039: Various serialization simplifcations and optimizations +- [`1121f2f95`](https://github.com/raptor3um/raptoreum/commit/1121f2f95) Merge #9098: [qa] Handle zombies and cluttered tmpdirs +- [`705057f0d`](https://github.com/raptor3um/raptoreum/commit/705057f0d) Merge #9095: test: Fix test_random includes +- [`9b8cc0b1c`](https://github.com/raptor3um/raptoreum/commit/9b8cc0b1c) Merge #9045: Hash P2P messages as they are received instead of at process-time +- [`3d7bb9cf5`](https://github.com/raptor3um/raptoreum/commit/3d7bb9cf5) Merge #9077: [qa] Increase wallet-dump RPC timeout +- [`2342b2ac0`](https://github.com/raptor3um/raptoreum/commit/2342b2ac0) Merge #9094: qt: Use correct conversion function for boost::path datadir +- [`293333481`](https://github.com/raptor3um/raptoreum/commit/293333481) Merge #8981: Wshadow: Do not shadow argument with a local variable +- [`a3325fc06`](https://github.com/raptor3um/raptoreum/commit/a3325fc06) Merge pull request #1851 from codablock/pr_backport_bitcoin_0.14-5 +- [`4a19af7bd`](https://github.com/raptor3um/raptoreum/commit/4a19af7bd) Use correct version for fee estimates db +- [`fc95cbb49`](https://github.com/raptor3um/raptoreum/commit/fc95cbb49) Use nPowTargetSpacing in SendCoinsDialog::updateGlobalFeeVariables +- [`c5bfd2157`](https://github.com/raptor3um/raptoreum/commit/c5bfd2157) Fix version check in CBlockPolicyEstimator::Read +- [`12d8ed437`](https://github.com/raptor3um/raptoreum/commit/12d8ed437) Raptoreumify DIST_CONTRIB in Makefile.am +- [`d45201896`](https://github.com/raptor3um/raptoreum/commit/d45201896) Raptoreumify generatetoaddress help string +- [`6eaafa86b`](https://github.com/raptor3um/raptoreum/commit/6eaafa86b) Merge #7730: Remove priority estimation +- [`9be592806`](https://github.com/raptor3um/raptoreum/commit/9be592806) Merge #8709: Allow filterclear messages for enabling TX relay only. +- [`84559c056`](https://github.com/raptor3um/raptoreum/commit/84559c056) Merge #9052: Use RelevantServices instead of node_network in AttemptToEvict. +- [`29a59e518`](https://github.com/raptor3um/raptoreum/commit/29a59e518) Remove NodeEvictionCandidate constructor and revert to struct initializion +- [`05b34f49b`](https://github.com/raptor3um/raptoreum/commit/05b34f49b) Merge #8568: new var DIST_CONTRIB adds useful things for packagers from contrib +- [`1188dd28a`](https://github.com/raptor3um/raptoreum/commit/1188dd28a) Merge #9093: [doc] release-process: Mention GitHub release and archived release notes +- [`47a7ec79f`](https://github.com/raptor3um/raptoreum/commit/47a7ec79f) Merge #9083: Enforcing consistency, 'gitian' to 'Gitian' +- [`9d661f433`](https://github.com/raptor3um/raptoreum/commit/9d661f433) Merge #8675: Make copyright header lines uniform +- [`921730d97`](https://github.com/raptor3um/raptoreum/commit/921730d97) Merge #9070: Lockedpool fixes +- [`188a2d98f`](https://github.com/raptor3um/raptoreum/commit/188a2d98f) Merge #9085: Remove unused CTxOut::GetHash() +- [`92f0f67c0`](https://github.com/raptor3um/raptoreum/commit/92f0f67c0) Merge #9069: Clean up bctest.py and bitcoin-util-test.py +- [`5adb5b8e8`](https://github.com/raptor3um/raptoreum/commit/5adb5b8e8) Merge #9073: Trivial: Add common failure cases for rpc server connection failure +- [`dd7669bc7`](https://github.com/raptor3um/raptoreum/commit/dd7669bc7) Merge #9050: net: make a few values immutable, and use deterministic randomness for the localnonce +- [`6f8720b7f`](https://github.com/raptor3um/raptoreum/commit/6f8720b7f) Merge #9071: Declare wallet.h functions inline +- [`cd7c5bd75`](https://github.com/raptor3um/raptoreum/commit/cd7c5bd75) Merge #9036: wallet: Change default confirm target from 2 to 6 +- [`70c86db4e`](https://github.com/raptor3um/raptoreum/commit/70c86db4e) Merge #9065: Merge `doc/unit-tests.md` into `src/test/README.md` +- [`9b9f86a59`](https://github.com/raptor3um/raptoreum/commit/9b9f86a59) Merge #8977: [Wallet] Refactor wallet/init interaction (Reaccept wtx, flush thread) +- [`2999d097f`](https://github.com/raptor3um/raptoreum/commit/2999d097f) Merge #9013: Trivial: Explicitly pass const CChainParams& to LoadBlockIndexDB() +- [`42fa46f85`](https://github.com/raptor3um/raptoreum/commit/42fa46f85) Merge #9042: [rpc] ParseHash: Fail when length is not 64 +- [`0a6bf096d`](https://github.com/raptor3um/raptoreum/commit/0a6bf096d) Merge #9066: tests: Remove variable unused after refactoring +- [`07f406fd6`](https://github.com/raptor3um/raptoreum/commit/07f406fd6) Merge #9023: Add logging to bitcoin-util-test.py +- [`b72041518`](https://github.com/raptor3um/raptoreum/commit/b72041518) Merge #8828: Move CWalletDB::ReorderTransactions to CWallet +- [`0b93a5894`](https://github.com/raptor3um/raptoreum/commit/0b93a5894) Merge #8674: tools for analyzing, updating and adding copyright headers in source files +- [`85c5aea08`](https://github.com/raptor3um/raptoreum/commit/85c5aea08) Merge #9063: Do not shadow variable, use deprecated MAP_ANON if MAP_ANONYMOUS is not defined +- [`bc3b9294e`](https://github.com/raptor3um/raptoreum/commit/bc3b9294e) Merge #8753: Locked memory manager +- [`88f9dc2f1`](https://github.com/raptor3um/raptoreum/commit/88f9dc2f1) Merge #9032: test: Add format-dependent comparison to bctest +- [`0a0e60c1f`](https://github.com/raptor3um/raptoreum/commit/0a0e60c1f) Merge #8448: Store mempool and prioritization data to disk +- [`b2229356b`](https://github.com/raptor3um/raptoreum/commit/b2229356b) Merge #9043: [qt] Return useful error message on ATMP failure +- [`ade67c91e`](https://github.com/raptor3um/raptoreum/commit/ade67c91e) Merge #9041: keypoololdest denote Unix epoch, not GMT +- [`77b888a06`](https://github.com/raptor3um/raptoreum/commit/77b888a06) Merge #8989: [Qt] overhaul smart-fee slider, adjust default confirmation target +- [`8d62e3f80`](https://github.com/raptor3um/raptoreum/commit/8d62e3f80) Throw exception in gobject prepare when CommitTransaction fails +- [`848f3389b`](https://github.com/raptor3um/raptoreum/commit/848f3389b) Merge #9016: Return useful error message on ATMP failure +- [`01389bc33`](https://github.com/raptor3um/raptoreum/commit/01389bc33) Merge #9029: instance of 'mem pool' to 'mempool' +- [`55208b759`](https://github.com/raptor3um/raptoreum/commit/55208b759) Merge #9033: Update build notes for dropping osx 10.7 support (fanquake) +- [`2d72e91b5`](https://github.com/raptor3um/raptoreum/commit/2d72e91b5) doc: Add release notes for 0.13.1 release +- [`d38c7f1d4`](https://github.com/raptor3um/raptoreum/commit/d38c7f1d4) Merge #9020: rpc: Remove invalid explanation from wallet fee message +- [`fd364841a`](https://github.com/raptor3um/raptoreum/commit/fd364841a) Merge #9015: release: bump required osx version to 10.8. (jonasschnelli) +- [`5bcd438b1`](https://github.com/raptor3um/raptoreum/commit/5bcd438b1) Merge #8515: A few mempool removal optimizations +- [`4d0f28545`](https://github.com/raptor3um/raptoreum/commit/4d0f28545) Merge #8948: [TRIVIAL] reorder Windows gitian build order to match Linux +- [`00f4d887a`](https://github.com/raptor3um/raptoreum/commit/00f4d887a) Merge #9002: Make connect=0 disable automatic outbound connections. +- [`55cabaa21`](https://github.com/raptor3um/raptoreum/commit/55cabaa21) Merge #9004: Clarify `listenonion` +- [`e9f250d68`](https://github.com/raptor3um/raptoreum/commit/e9f250d68) Merge #8993: Trivial: Fix doxygen comment: the transaction is returned in txOut +- [`9be4217df`](https://github.com/raptor3um/raptoreum/commit/9be4217df) Merge #8982: Eliminating Inconsistencies in Textual Output +- [`beef6e784`](https://github.com/raptor3um/raptoreum/commit/beef6e784) Merge #8990: moveonly: move `coincontrol` to `src/wallet` +- [`6cacb79c0`](https://github.com/raptor3um/raptoreum/commit/6cacb79c0) Merge #8980: RPC: importmulti: Avoid using boost::variant::operator!=, which is only in newer boost versions +- [`efded3ca9`](https://github.com/raptor3um/raptoreum/commit/efded3ca9) Merge #7551: Add importmulti RPC call +- [`bd8e9fbba`](https://github.com/raptor3um/raptoreum/commit/bd8e9fbba) Merge #8774: Qt refactors to better abstract wallet access +- [`dc9556a89`](https://github.com/raptor3um/raptoreum/commit/dc9556a89) Merge #7948: RPC: augment getblockchaininfo bip9_softforks data +- [`3b084b25b`](https://github.com/raptor3um/raptoreum/commit/3b084b25b) Remove unnecessary function prototypes +- [`dd6b9ad20`](https://github.com/raptor3um/raptoreum/commit/dd6b9ad20) Merge #8788: [RPC] Give RPC commands more information about the RPC request +- [`b5b7cd7b7`](https://github.com/raptor3um/raptoreum/commit/b5b7cd7b7) Merge #8951: RPC/Mining: getblocktemplate: Update and fix formatting of help +- [`c2e007538`](https://github.com/raptor3um/raptoreum/commit/c2e007538) Merge pull request #1849 from codablock/pr_backport_bitcoin_0.14-4 +- [`8f13e2537`](https://github.com/raptor3um/raptoreum/commit/8f13e2537) Remove doubled "./" from bitcoin-util-test.json +- [`6989f94d6`](https://github.com/raptor3um/raptoreum/commit/6989f94d6) Get rid of InsecureRand and use equivalent FastRandomContext +- [`5b8946cad`](https://github.com/raptor3um/raptoreum/commit/5b8946cad) Add Raptoreum Copyright to Makefiles modified by Raptoreum developers +- [`7604a3a0e`](https://github.com/raptor3um/raptoreum/commit/7604a3a0e) Raptoreumify INSTALL.md and build-unix.md +- [`89e959d30`](https://github.com/raptor3um/raptoreum/commit/89e959d30) Merge #8936: Report NodeId in misbehaving debug +- [`b84ea46ed`](https://github.com/raptor3um/raptoreum/commit/b84ea46ed) Merge #8965: Mention that PPA doesn't support Debian +- [`c8584293a`](https://github.com/raptor3um/raptoreum/commit/c8584293a) Backport changes to ccoins_caching.cpp which were skipped +- [`2f8677391`](https://github.com/raptor3um/raptoreum/commit/2f8677391) Merge #8873: Add microbenchmarks to profile more code paths. +- [`6e871c0c2`](https://github.com/raptor3um/raptoreum/commit/6e871c0c2) Merge #6996: Add preciousblock RPC +- [`b02e461fa`](https://github.com/raptor3um/raptoreum/commit/b02e461fa) Merge #8908: Update bitcoin-qt.desktop +- [`85706a0ae`](https://github.com/raptor3um/raptoreum/commit/85706a0ae) Merge #8223: [c++11] Use std::unique_ptr for block creation. +- [`0dcca9b99`](https://github.com/raptor3um/raptoreum/commit/0dcca9b99) Merge #8287: [wallet] Set fLimitFree = true +- [`4fc77cc3a`](https://github.com/raptor3um/raptoreum/commit/4fc77cc3a) Merge #8954: contrib: Add README for pgp keys +- [`0fd7c4e6d`](https://github.com/raptor3um/raptoreum/commit/0fd7c4e6d) Merge #8955: doc: update 0.13.0 release note info on linux arm builds +- [`3edeea3dd`](https://github.com/raptor3um/raptoreum/commit/3edeea3dd) Merge #8929: add software-properties-common +- [`239ce534c`](https://github.com/raptor3um/raptoreum/commit/239ce534c) Merge #8914: Kill insecure_random and associated global state +- [`5fc2e197d`](https://github.com/raptor3um/raptoreum/commit/5fc2e197d) Merge #8935: Documentation: Building on Windows with WSL +- [`c4faa3218`](https://github.com/raptor3um/raptoreum/commit/c4faa3218) Merge #8921: RPC: Chainparams: Remove Chainparams::fTestnetToBeDeprecatedFieldRPC +- [`ffc967369`](https://github.com/raptor3um/raptoreum/commit/ffc967369) Merge #8932: Allow bitcoin-tx to create v2 transactions +- [`19316b7a6`](https://github.com/raptor3um/raptoreum/commit/19316b7a6) Merge #8920: Set minimum required Boost to 1.47.0 +- [`0f021e55f`](https://github.com/raptor3um/raptoreum/commit/0f021e55f) Merge #8880: protocol.h: Move MESSAGE_START_SIZE into CMessageHeader +- [`005ae79cf`](https://github.com/raptor3um/raptoreum/commit/005ae79cf) Refactor MSG_XXX enum values to align with Bitcoin core +- [`552fafdae`](https://github.com/raptor3um/raptoreum/commit/552fafdae) Merge #8915: Add copyright/patent issues to possible NACK reasons +- [`dcc63e6e9`](https://github.com/raptor3um/raptoreum/commit/dcc63e6e9) Merge #8911: qt: Translate all files, even if wallet disabled +- [`75668f3fe`](https://github.com/raptor3um/raptoreum/commit/75668f3fe) Merge #8892: doc: Add build instructions for FreeBSD +- [`76641e68a`](https://github.com/raptor3um/raptoreum/commit/76641e68a) Merge #8881: Add some verbose logging to bitcoin-util-test.py +- [`43a377a96`](https://github.com/raptor3um/raptoreum/commit/43a377a96) Merge #8896: Update INSTALL landing redirection notice for build instructions. +- [`d31c2d6c4`](https://github.com/raptor3um/raptoreum/commit/d31c2d6c4) Merge #8887: [Doc] Improve GitHub issue template +- [`1c1554f7c`](https://github.com/raptor3um/raptoreum/commit/1c1554f7c) Merge #8884: Bugfix: Trivial: RPC: getblockchaininfo help: pruneheight is the lowest, not highest, block +- [`fb8d46d44`](https://github.com/raptor3um/raptoreum/commit/fb8d46d44) Merge #8879: [doc] Rework docs +- [`f45adb561`](https://github.com/raptor3um/raptoreum/commit/f45adb561) Merge #8862: Fix a few cases where messages were sent after requested disconnect +- [`6e4dad98a`](https://github.com/raptor3um/raptoreum/commit/6e4dad98a) Merge #8850: Implement (begin|end)_ptr in C++11 and add deprecation comment +- [`14483e46f`](https://github.com/raptor3um/raptoreum/commit/14483e46f) Merge #8856: Globals: Decouple GetConfigFile and ReadConfigFile from global mapArgs +- [`23ac00000`](https://github.com/raptor3um/raptoreum/commit/23ac00000) Merge #8860: [qa] util: Move wait_bitcoinds() into stop_nodes() +- [`10127ae80`](https://github.com/raptor3um/raptoreum/commit/10127ae80) Merge #8863: univalue: Pull subtree +- [`16532f8ee`](https://github.com/raptor3um/raptoreum/commit/16532f8ee) Merge #8857: [qa] mininode: Only allow named args in wait_until +- [`ba02e9d18`](https://github.com/raptor3um/raptoreum/commit/ba02e9d18) Merge #8852: Mention Gitian building script in doc (Laudaa) +- [`210242e5c`](https://github.com/raptor3um/raptoreum/commit/210242e5c) Merge #8813: bitcoind: Daemonize using daemon(3) +- [`2f3abc62e`](https://github.com/raptor3um/raptoreum/commit/2f3abc62e) Merge #8830: [test] Add option to run bitcoin-util-test.py manually +- [`972a44b70`](https://github.com/raptor3um/raptoreum/commit/972a44b70) Merge #8836: bitcoin-util-test.py should fail if the output file is empty +- [`963f6a6f3`](https://github.com/raptor3um/raptoreum/commit/963f6a6f3) Merge #8829: Add bitcoin-tx JSON tests +- [`6b1842af8`](https://github.com/raptor3um/raptoreum/commit/6b1842af8) Merge #8839: test: Avoid ConnectionResetErrors during RPC tests +- [`942fe0ed4`](https://github.com/raptor3um/raptoreum/commit/942fe0ed4) Merge #8840: test: Explicitly set encoding to utf8 when opening text files +- [`272fddce2`](https://github.com/raptor3um/raptoreum/commit/272fddce2) Merge #8826: Do not include env_win.cc on non-Windows systems +- [`e6af21865`](https://github.com/raptor3um/raptoreum/commit/e6af21865) Merge #8834: [qa] blockstore: Switch to dumb dbm +- [`575f625f4`](https://github.com/raptor3um/raptoreum/commit/575f625f4) Merge #8658: Remove unused statements in serialization +- [`cf4bdab3b`](https://github.com/raptor3um/raptoreum/commit/cf4bdab3b) Merge #8827: [qa] Split up slow RPC calls to avoid pruning test timeouts +- [`79f6d3d30`](https://github.com/raptor3um/raptoreum/commit/79f6d3d30) Merge #8832: [rpc] throw JSONRPCError when utxo set can not be read +- [`a26bad09b`](https://github.com/raptor3um/raptoreum/commit/a26bad09b) Merge #8784: Copyright headers for build scripts +- [`3a503b99f`](https://github.com/raptor3um/raptoreum/commit/3a503b99f) Merge #8820: [depends] Fix Qt compilation with Xcode 8 +- [`f9431a1d9`](https://github.com/raptor3um/raptoreum/commit/f9431a1d9) Merge #8823: doc: Add privacy recommendation when running hidden service +- [`8b8362ff1`](https://github.com/raptor3um/raptoreum/commit/8b8362ff1) Merge #8814: [wallet, policy] ParameterInteraction: Don't allow 0 fee +- [`a75d6110e`](https://github.com/raptor3um/raptoreum/commit/a75d6110e) Merge #8634: Add policy: null signature for failed CHECK(MULTI)SIG +- [`b224c0209`](https://github.com/raptor3um/raptoreum/commit/b224c0209) Merge #8357: [mempool] Fix relaypriority calculation error +- [`0adb4b714`](https://github.com/raptor3um/raptoreum/commit/0adb4b714) Merge pull request #1848 from codablock/pr_backport_bitcoin_0.14-3 +- [`9b1d1c61b`](https://github.com/raptor3um/raptoreum/commit/9b1d1c61b) Move AutoBackup initialization into CWallet::InitAutoBackup +- [`205ff3519`](https://github.com/raptor3um/raptoreum/commit/205ff3519) Fix wallet.py test by redirecting stderr to stdout +- [`faf52c590`](https://github.com/raptor3um/raptoreum/commit/faf52c590) Fix rpcnestedtests +- [`acf029501`](https://github.com/raptor3um/raptoreum/commit/acf029501) Merge #8810: tests: Add exception error message for JSONRPCException +- [`ec9de93ae`](https://github.com/raptor3um/raptoreum/commit/ec9de93ae) Merge #8655: Do not shadow variables (trivials) +- [`4a917b1b3`](https://github.com/raptor3um/raptoreum/commit/4a917b1b3) Merge #8796: [trivial] fix mempool comment (outdated by BIP125) +- [`0028dbfbf`](https://github.com/raptor3um/raptoreum/commit/0028dbfbf) Merge #8780: [rpc] Deprecate getinfo +- [`8e610c0ac`](https://github.com/raptor3um/raptoreum/commit/8e610c0ac) Merge #8722: bitcoin-cli: More detailed error reporting +- [`d87c156f1`](https://github.com/raptor3um/raptoreum/commit/d87c156f1) Merge #8486: [wallet] Add high transaction fee warnings +- [`8edc2a78c`](https://github.com/raptor3um/raptoreum/commit/8edc2a78c) Merge #8249: Enable (and check for) 64-bit ASLR on Windows +- [`6262f79f0`](https://github.com/raptor3um/raptoreum/commit/6262f79f0) Merge #8807: [univalue] Pull subtree from upstream +- [`18218aa3c`](https://github.com/raptor3um/raptoreum/commit/18218aa3c) Merge #8802: Fix future copyright year +- [`fdc87cecc`](https://github.com/raptor3um/raptoreum/commit/fdc87cecc) Merge #8771: CONTRIBUTING: Mention not to open several pulls +- [`24c4116b5`](https://github.com/raptor3um/raptoreum/commit/24c4116b5) Merge #8787: [Doc] Add missing autogen to example builds +- [`ce73b8300`](https://github.com/raptor3um/raptoreum/commit/ce73b8300) Merge #8786: Mandatory copyright agreement +- [`54703891e`](https://github.com/raptor3um/raptoreum/commit/54703891e) Merge #8790: [test] Remove redundant debug print in addrman_tests +- [`7f4439fa6`](https://github.com/raptor3um/raptoreum/commit/7f4439fa6) Merge #8789: [qa] pull-tester: Only print output when failed +- [`39d213114`](https://github.com/raptor3um/raptoreum/commit/39d213114) Merge #8661: Do not set an addr time penalty when a peer advertises itself. +- [`c7a0b91d3`](https://github.com/raptor3um/raptoreum/commit/c7a0b91d3) Merge #8793: Do not shadow in src/qt +- [`17e110f47`](https://github.com/raptor3um/raptoreum/commit/17e110f47) Merge #8785: Comment on CNode::nLocalServices meaning +- [`9ad1f3ffb`](https://github.com/raptor3um/raptoreum/commit/9ad1f3ffb) Merge #8779: [contrib] Delete spendfrom +- [`801c9e259`](https://github.com/raptor3um/raptoreum/commit/801c9e259) Merge #8423: [depends] expat 2.2.0, ccache 3.3.1, fontconfig 2.12.1 +- [`0dfb93450`](https://github.com/raptor3um/raptoreum/commit/0dfb93450) Merge #8783: [share] remove qt/protobuf.pri +- [`24c69691c`](https://github.com/raptor3um/raptoreum/commit/24c69691c) Merge #8781: [contrib] delete qt_translations.py +- [`97b63420d`](https://github.com/raptor3um/raptoreum/commit/97b63420d) Merge #8656: Trivial: Do not shadow global variable fileout +- [`bfa539a1d`](https://github.com/raptor3um/raptoreum/commit/bfa539a1d) Merge #8777: [qt] WalletModel: Expose disablewallet +- [`bd9449c00`](https://github.com/raptor3um/raptoreum/commit/bd9449c00) Merge #8773: Trivial Bugfix: doc/gitian-building.md: Link to release-process needs to be updated +- [`06f41f358`](https://github.com/raptor3um/raptoreum/commit/06f41f358) Merge #8768: init: Get rid of fDisableWallet +- [`ac3fdd3d2`](https://github.com/raptor3um/raptoreum/commit/ac3fdd3d2) Merge #8769: Trivial: Fix ISO URL, capitalization +- [`e02b48cad`](https://github.com/raptor3um/raptoreum/commit/e02b48cad) Merge #8765: [Wallet] remove "unused" ThreadFlushWalletDB from removeprunedfunds +- [`36fcd5c41`](https://github.com/raptor3um/raptoreum/commit/36fcd5c41) Merge #8762: Trivial: Fix typo +- [`387201712`](https://github.com/raptor3um/raptoreum/commit/387201712) Merge #7783: [Qt] RPC-Console: support nested commands and simple value queries +- [`630c699f0`](https://github.com/raptor3um/raptoreum/commit/630c699f0) Merge #8696: [Wallet] Remove last external reference to CWalletDB +- [`fbbddf810`](https://github.com/raptor3um/raptoreum/commit/fbbddf810) Merge #8760: [init] Get rid of some ENABLE_WALLET +- [`a5a9e4604`](https://github.com/raptor3um/raptoreum/commit/a5a9e4604) Merge #8700: [copyright] add MIT license headers to .sh scripts where missing +- [`d95a9728b`](https://github.com/raptor3um/raptoreum/commit/d95a9728b) Merge #8676: Add missing copyright headers +- [`b04e32c43`](https://github.com/raptor3um/raptoreum/commit/b04e32c43) Merge #8688: Move static global randomizer seeds into CConnman +- [`473ffa064`](https://github.com/raptor3um/raptoreum/commit/473ffa064) Merge #8702: [copyright] add MIT License copyright header to remaining Python files +- [`45fe44ed2`](https://github.com/raptor3um/raptoreum/commit/45fe44ed2) Merge #8701: [copyright] add MIT License copyright header to zmq_sub.py +- [`412f79083`](https://github.com/raptor3um/raptoreum/commit/412f79083) Merge #8737: Trivial: UndoReadFromDisk works on undo files (rev), not on block files. +- [`af5d18ad5`](https://github.com/raptor3um/raptoreum/commit/af5d18ad5) Merge #8707: net: fix maxuploadtarget setting +- [`699db9932`](https://github.com/raptor3um/raptoreum/commit/699db9932) Merge #8716: [qa] wallet: Check legacy wallet as well +- [`2a13321ff`](https://github.com/raptor3um/raptoreum/commit/2a13321ff) Merge #8742: Specify Protobuf version 2 in paymentrequest.proto +- [`e031570c4`](https://github.com/raptor3um/raptoreum/commit/e031570c4) Merge #8720: Minor change in section name +- [`81a8e05d1`](https://github.com/raptor3um/raptoreum/commit/81a8e05d1) Merge #8754: [Doc] Target protobuf 2.6 in OS X build notes. +- [`9432e1904`](https://github.com/raptor3um/raptoreum/commit/9432e1904) Merge #8494: [init, wallet] ParameterInteraction() iff wallet enabled +- [`9e0976ee0`](https://github.com/raptor3um/raptoreum/commit/9e0976ee0) Merge #8724: [qa] walletbackup: Sync blocks inside the loop +- [`9d8648735`](https://github.com/raptor3um/raptoreum/commit/9d8648735) Merge #8713: [qa] create_cache: Delete temp dir when done +- [`c46c48057`](https://github.com/raptor3um/raptoreum/commit/c46c48057) Merge #8714: [qa] gitignore: Remove unused lines +- [`eae44bd3d`](https://github.com/raptor3um/raptoreum/commit/eae44bd3d) Merge #8712: Remove maxuploadtargets recommended minimum +- [`93e857ed9`](https://github.com/raptor3um/raptoreum/commit/93e857ed9) Merge #8652: [qa]: remove root test directory for RPC tests +- [`85ce0ef28`](https://github.com/raptor3um/raptoreum/commit/85ce0ef28) Merge #8697: fix op order to append first alert +- [`8efec7b06`](https://github.com/raptor3um/raptoreum/commit/8efec7b06) Fix wallet-accounts.py tests +- [`fdd063816`](https://github.com/raptor3um/raptoreum/commit/fdd063816) Merge #8928: Fix init segfault where InitLoadWallet() calls ATMP before genesis +- [`610470c73`](https://github.com/raptor3um/raptoreum/commit/610470c73) Remove bitcoin man pages and call gen-manpages.sh for Raptoreum +- [`f9694badb`](https://github.com/raptor3um/raptoreum/commit/f9694badb) Raptoreumify gen-manpages.sh +- [`5691cee8d`](https://github.com/raptor3um/raptoreum/commit/5691cee8d) Merge #8608: Install manpages via make install, also add some autogenerated manpages +- [`85c0aabc1`](https://github.com/raptor3um/raptoreum/commit/85c0aabc1) Merge #8667: Fix SIGHASH_SINGLE bug in test_framework SignatureHash +- [`3baee7ba2`](https://github.com/raptor3um/raptoreum/commit/3baee7ba2) Merge #8681: Performance Regression Fix: Pre-Allocate txChanged vector +- [`0324fa012`](https://github.com/raptor3um/raptoreum/commit/0324fa012) Merge #8677: Do not shadow upper local variable 'send', prevent -Wshadow compiler warning. +- [`b90d7611a`](https://github.com/raptor3um/raptoreum/commit/b90d7611a) Merge #8563: Add configure check for -latomic +- [`c2a601f50`](https://github.com/raptor3um/raptoreum/commit/c2a601f50) Merge #8680: Address Travis spurious failures +- [`6924212f0`](https://github.com/raptor3um/raptoreum/commit/6924212f0) Merge #8683: fix incorrect file name bitcoin.qrc +- [`3d26438be`](https://github.com/raptor3um/raptoreum/commit/3d26438be) Merge #8673: Trivial: Fix obvious assignment/equality error in test +- [`f7e9bc613`](https://github.com/raptor3um/raptoreum/commit/f7e9bc613) Merge #8606: Fix some locks +- [`218957091`](https://github.com/raptor3um/raptoreum/commit/218957091) Merge #8645: Remove unused Qt 4.6 patch. +- [`75f920e89`](https://github.com/raptor3um/raptoreum/commit/75f920e89) Merge #8663: trivial: remove unnecessary variable fDaemon +- [`313cfb09d`](https://github.com/raptor3um/raptoreum/commit/313cfb09d) Merge #8466: [Trivial] Do not shadow variables in networking code +- [`414272af9`](https://github.com/raptor3um/raptoreum/commit/414272af9) Merge #8629: C++11: s/boost::scoped_ptr/std::unique_ptr/ +- [`4d0be42c6`](https://github.com/raptor3um/raptoreum/commit/4d0be42c6) Merge #8272: Make the dummy argument to getaddednodeinfo optional +- [`bc91f34da`](https://github.com/raptor3um/raptoreum/commit/bc91f34da) Merge #8638: rest.cpp: change HTTP_INTERNAL_SERVER_ERROR to HTTP_BAD_REQUEST +- [`79d550d56`](https://github.com/raptor3um/raptoreum/commit/79d550d56) Merge #8557: [contrib] Rework verifybinaries +- [`ae0aca909`](https://github.com/raptor3um/raptoreum/commit/ae0aca909) [contrib] Remove reference to sf and add doc to verify.sh +- [`aed0b0413`](https://github.com/raptor3um/raptoreum/commit/aed0b0413) contrib: remove hardcoded version from verify.sh +- [`a2d18b475`](https://github.com/raptor3um/raptoreum/commit/a2d18b475) Merge #8640: [depends] Remove Qt46 package +- [`88fcf3fbd`](https://github.com/raptor3um/raptoreum/commit/88fcf3fbd) Merge #8191: Do not shadow variables in src/wallet +- [`5ce7ba611`](https://github.com/raptor3um/raptoreum/commit/5ce7ba611) Merge #8291: [util] CopyrightHolders: Check for untranslated substitution +- [`9d061a273`](https://github.com/raptor3um/raptoreum/commit/9d061a273) Merge #8163: Do not shadow global RPC table variable (tableRPC) +- [`75f65e9f1`](https://github.com/raptor3um/raptoreum/commit/75f65e9f1) Merge #8604: build,doc: Update for 0.13.0+ and OpenBSD 5.9 +- [`d16b2e5ec`](https://github.com/raptor3um/raptoreum/commit/d16b2e5ec) Merge #8621: [contrib] python: Don't use shell=True +- [`3b45caeeb`](https://github.com/raptor3um/raptoreum/commit/3b45caeeb) Merge #8626: Berkeley DB v6 compatibility fix +- [`f6658c07f`](https://github.com/raptor3um/raptoreum/commit/f6658c07f) Merge #8611: Reduce default number of blocks to check at startup +- [`40202ef81`](https://github.com/raptor3um/raptoreum/commit/40202ef81) Raptoreumify gitian-build.sh +- [`fc34ec4b3`](https://github.com/raptor3um/raptoreum/commit/fc34ec4b3) Merge #8566: Easy to use gitian building script +- [`e8e95994b`](https://github.com/raptor3um/raptoreum/commit/e8e95994b) Merge #8625: [doc] - clarify statement about parallel jobs in rpc-tests.py +- [`2da811bec`](https://github.com/raptor3um/raptoreum/commit/2da811bec) Merge #8624: [doc] build: Mention curl +- [`e7da91584`](https://github.com/raptor3um/raptoreum/commit/e7da91584) Merge #8617: Include instructions to extract Mac OS X SDK on Linux using 7zip and SleuthKit +- [`707e2945a`](https://github.com/raptor3um/raptoreum/commit/707e2945a) Merge #8564: [Wallet] remove unused code/conditions in ReadAtCursor +- [`22604cbbc`](https://github.com/raptor3um/raptoreum/commit/22604cbbc) Merge #8607: [doc] Fix doxygen off-by-one comments, fix typos +- [`f81e4f5fa`](https://github.com/raptor3um/raptoreum/commit/f81e4f5fa) Merge #8545: [doc] Update git-subtree-check.sh README +- [`30066a600`](https://github.com/raptor3um/raptoreum/commit/30066a600) Merge #8109: Do not shadow member variables +- [`87c81ba6f`](https://github.com/raptor3um/raptoreum/commit/87c81ba6f) Merge #8602: [trivial][doc] Mention ++i as preferred over i++ in dev notes +- [`59f4df1d8`](https://github.com/raptor3um/raptoreum/commit/59f4df1d8) Merge #8603: [trivial][doc] Mention gpg --refresh-keys in release-process.md +- [`95c61637d`](https://github.com/raptor3um/raptoreum/commit/95c61637d) Merge #8590: Remove unused variables +- [`15b9e43ab`](https://github.com/raptor3um/raptoreum/commit/15b9e43ab) Merge #8581: [wallet] rpc: Drop misleading option +- [`b00f025dd`](https://github.com/raptor3um/raptoreum/commit/b00f025dd) Merge #8583: Show XTHIN in GUI +- [`df07a3174`](https://github.com/raptor3um/raptoreum/commit/df07a3174) Merge #8561: Show "end" instead of many zeros when getheaders request received with a hashStop of Null +- [`3a497a6b5`](https://github.com/raptor3um/raptoreum/commit/3a497a6b5) Merge #8462: Move AdvertiseLocal debug output to net category +- [`3fca7e204`](https://github.com/raptor3um/raptoreum/commit/3fca7e204) Merge #7579: [Qt] show network/chain errors in the GUI +- [`909945d34`](https://github.com/raptor3um/raptoreum/commit/909945d34) Merge #8226: contributing.md: Fix formatting (line lengths and smart quotes) +- [`249e72025`](https://github.com/raptor3um/raptoreum/commit/249e72025) Merge #8578: [test] Remove unused code +- [`7269e4a90`](https://github.com/raptor3um/raptoreum/commit/7269e4a90) Merge #8567: Add default port numbers to REST doc +- [`e61556e20`](https://github.com/raptor3um/raptoreum/commit/e61556e20) Merge #8450: [Test] Replace rpc_wallet_tests.cpp with python RPC unit tests +- [`c9ebd9516`](https://github.com/raptor3um/raptoreum/commit/c9ebd9516) Merge #8560: Trivial: Fix two VarInt examples in serialize.h +- [`d97fa0402`](https://github.com/raptor3um/raptoreum/commit/d97fa0402) Merge #8445: Move CWallet::setKeyPool to private section of CWallet. +- [`bb93f8235`](https://github.com/raptor3um/raptoreum/commit/bb93f8235) doc: Add historical release notes for 0.12.1 0.13.0 +- [`61a3d9aeb`](https://github.com/raptor3um/raptoreum/commit/61a3d9aeb) Merge #8554: trivial: remove unused variable +- [`39909d373`](https://github.com/raptor3um/raptoreum/commit/39909d373) Merge #8558: Add copyright header to wallet_text_fixture.cpp +- [`e2a795fd8`](https://github.com/raptor3um/raptoreum/commit/e2a795fd8) Return EXIT_SUCCESS instead of 0 in main() +- [`e3da73ebf`](https://github.com/raptor3um/raptoreum/commit/e3da73ebf) Update Raptoreum related code to use new SyncTransaction notifications interface +- [`ebc466dbd`](https://github.com/raptor3um/raptoreum/commit/ebc466dbd) Revert test_bitcoin.info to test_raptoreum.info in Makefile.am +- [`f8ffc55af`](https://github.com/raptor3um/raptoreum/commit/f8ffc55af) Partially cherry-pick tests refactorings found in Bitcoin SegWit PRs +- [`8460a9b97`](https://github.com/raptor3um/raptoreum/commit/8460a9b97) Raptoreumify translation_process.md +- [`5b62ad34a`](https://github.com/raptor3um/raptoreum/commit/5b62ad34a) Merge #8551: [qa] Remove unused code +- [`b47cc1331`](https://github.com/raptor3um/raptoreum/commit/b47cc1331) Merge #8548: [wallet] Use __func__ to get function name for output printing +- [`ae90d0f09`](https://github.com/raptor3um/raptoreum/commit/ae90d0f09) Align HD wallet status icon code with Bitcoin code +- [`5bf3dadcb`](https://github.com/raptor3um/raptoreum/commit/5bf3dadcb) Merge #8461: document return value of networkhashps for getmininginfo RPC endpoint +- [`80573f2bf`](https://github.com/raptor3um/raptoreum/commit/80573f2bf) Merge #8540: qt: Fix random segfault when closing "Choose data directory" dialog +- [`55ccc56a8`](https://github.com/raptor3um/raptoreum/commit/55ccc56a8) Merge #8453: Bring secp256k1 subtree up to date with master +- [`7231c6690`](https://github.com/raptor3um/raptoreum/commit/7231c6690) Revert "[qa] Adjust timeouts for micro-optimization of run time" +- [`6ac01da71`](https://github.com/raptor3um/raptoreum/commit/6ac01da71) Merge #8531: [qa] abandonconflict: Use assert_equal +- [`e6dca369e`](https://github.com/raptor3um/raptoreum/commit/e6dca369e) Merge #8504: test: Remove java comparison tool +- [`10aaf04b7`](https://github.com/raptor3um/raptoreum/commit/10aaf04b7) Merge #8505: Trivial: Fix typos in various files +- [`6b8160ba2`](https://github.com/raptor3um/raptoreum/commit/6b8160ba2) Merge #8513: Fix a type error that would not compile on OSX. +- [`7bba7375d`](https://github.com/raptor3um/raptoreum/commit/7bba7375d) Merge #8482: [qa] Use single cache dir for chains +- [`5c928f005`](https://github.com/raptor3um/raptoreum/commit/5c928f005) Merge #8512: Trivial: Corrected JSON typo on setban of net.cpp +- [`bdddabb3c`](https://github.com/raptor3um/raptoreum/commit/bdddabb3c) Merge #8521: qa: Remove duplicate `hash160` implementation +- [`9ecef8313`](https://github.com/raptor3um/raptoreum/commit/9ecef8313) Merge #8520: build: Remove check for `openssl/ec.h` +- [`599df5172`](https://github.com/raptor3um/raptoreum/commit/599df5172) Merge #8516: [trivial] remove no-longer-used InitError logic +- [`a953997b2`](https://github.com/raptor3um/raptoreum/commit/a953997b2) Merge #8058: [Doc] Add issue template +- [`bc659c3e6`](https://github.com/raptor3um/raptoreum/commit/bc659c3e6) Merge #8270: Tests: Use portable #! in python scripts (/usr/bin/env) +- [`a377499c1`](https://github.com/raptor3um/raptoreum/commit/a377499c1) Merge #8192: [trivial] Remove URLs from About dialog translations +- [`f4af44676`](https://github.com/raptor3um/raptoreum/commit/f4af44676) Add SYNC_TRANSACTION_NOT_IN_BLOCK constant and fix callers of SyncTransaction +- [`256b9b77a`](https://github.com/raptor3um/raptoreum/commit/256b9b77a) Merge #7946: Reduce cs_main locks during ConnectTip/SyncWithWallets +- [`6ba688b1c`](https://github.com/raptor3um/raptoreum/commit/6ba688b1c) Merge #8353: Trivial: tiny c++11 refactors +- [`cca05694c`](https://github.com/raptor3um/raptoreum/commit/cca05694c) Merge #8293: Bugfix: Allow building libbitcoinconsensus without any univalue +- [`7dafb5303`](https://github.com/raptor3um/raptoreum/commit/7dafb5303) Merge #8492: configure: Allow building bench_bitcoin by itself +- [`82336d818`](https://github.com/raptor3um/raptoreum/commit/82336d818) Merge #8503: [doc] typos, text errors +- [`d5b5aeefe`](https://github.com/raptor3um/raptoreum/commit/d5b5aeefe) Merge #8481: Qt: Fix minimize and close bugs +- [`549894bac`](https://github.com/raptor3um/raptoreum/commit/549894bac) Merge #8444: Fix p2p-feefilter.py for changed tx relay behavior +- [`5e54cf907`](https://github.com/raptor3um/raptoreum/commit/5e54cf907) Merge #8392: Fix several node initialization issues +- [`35202920f`](https://github.com/raptor3um/raptoreum/commit/35202920f) Merge #8439: [doc] Increase recommended memory in gitian build guide +- [`2c3a218b3`](https://github.com/raptor3um/raptoreum/commit/2c3a218b3) Merge #8189: rename mapAddrCount to mapNetGroupNodes +- [`7c62457e6`](https://github.com/raptor3um/raptoreum/commit/7c62457e6) Merge #8428: Update README.md inside of src/test/ +- [`e34e2bbcc`](https://github.com/raptor3um/raptoreum/commit/e34e2bbcc) Merge #8432: Make CWallet::fFileBacked private. +- [`9589e2448`](https://github.com/raptor3um/raptoreum/commit/9589e2448) Merge #8152: [Wallet] Remove CWalletDB* parameter from CWallet::AddToWallet +- [`aa6c37919`](https://github.com/raptor3um/raptoreum/commit/aa6c37919) Merge #8413: Trivial: pass Consensus::Params& instead of CChainParams& in ContextualCheckBlock +- [`60668fb93`](https://github.com/raptor3um/raptoreum/commit/60668fb93) Merge #8346: Mempool: Use Consensus::CheckTxInputs direclty over main::CheckInputs +- [`8c76eb739`](https://github.com/raptor3um/raptoreum/commit/8c76eb739) Merge #8400: [qa]: enable rpcbind_test +- [`eb54680c3`](https://github.com/raptor3um/raptoreum/commit/eb54680c3) Merge #8238: [WIP][depends] ZeroMQ 4.1.5 && ZMQ on Windows +- [`7c1c9d0ea`](https://github.com/raptor3um/raptoreum/commit/7c1c9d0ea) Merge #8427: net: Ignore `notfound` P2P messages +- [`13b4e659b`](https://github.com/raptor3um/raptoreum/commit/13b4e659b) Merge #8274: util: Update tinyformat +- [`c03c42116`](https://github.com/raptor3um/raptoreum/commit/c03c42116) Merge #8421: httpserver: drop boost (#8023 dependency) +- [`2e4e12f4a`](https://github.com/raptor3um/raptoreum/commit/2e4e12f4a) Merge #8412: libconsensus: Expose a flag for BIP112 +- [`b673b7bf6`](https://github.com/raptor3um/raptoreum/commit/b673b7bf6) Merge #8321: [trivial] Switched constants to sizeof() +- [`e7da254c5`](https://github.com/raptor3um/raptoreum/commit/e7da254c5) Merge #8407: [Qt] Add dbcache migration path +- [`150d63f09`](https://github.com/raptor3um/raptoreum/commit/150d63f09) Merge #8414: prepend license statement to indirectmap.h +- [`04525b435`](https://github.com/raptor3um/raptoreum/commit/04525b435) Merge #8358: [doc] gbuild: Set memory explicitly (default is too low) +- [`47c726e1d`](https://github.com/raptor3um/raptoreum/commit/47c726e1d) Merge #8396: remove outdated legacy code from key.h +- [`9a91ddb41`](https://github.com/raptor3um/raptoreum/commit/9a91ddb41) Merge #8347: Trivial: Make CBlockIndex param const in ContextualCheckBlockHeader and ContextualCheckBlock +- [`0bea37d7b`](https://github.com/raptor3um/raptoreum/commit/0bea37d7b) Merge #8342: Consensus: Trivial transform BOOST_FOREACH into for loop +- [`8cfc25739`](https://github.com/raptor3um/raptoreum/commit/8cfc25739) Merge #11847: Make boost::multi_index comparators const +- [`9c2e97085`](https://github.com/raptor3um/raptoreum/commit/9c2e97085) Fix review nits +- [`f61a75402`](https://github.com/raptor3um/raptoreum/commit/f61a75402) Disable free transactions in TestPackageSelection +- [`f8a7a2c88`](https://github.com/raptor3um/raptoreum/commit/f8a7a2c88) Move bitcoin.ico/png and bitcoin_testnet.ico/png one dir up +- [`a9f0aedb3`](https://github.com/raptor3um/raptoreum/commit/a9f0aedb3) Merge #8320: Fix 0.12 release notes on block relaying +- [`6a993236b`](https://github.com/raptor3um/raptoreum/commit/6a993236b) Remove SegWit related checks added by backporting of Bitcoin #8295 +- [`f9f3b8d93`](https://github.com/raptor3um/raptoreum/commit/f9f3b8d93) Merge #8295: Mining-related fixups for 0.13.0 +- [`bc257c1a0`](https://github.com/raptor3um/raptoreum/commit/bc257c1a0) Merge #8305: Improve handling of unconnecting headers +- [`26540aa5d`](https://github.com/raptor3um/raptoreum/commit/26540aa5d) Merge #8289: bash-completion: Adapt for 0.12 and 0.13 +- [`167047297`](https://github.com/raptor3um/raptoreum/commit/167047297) Merge #8314: Fix pkg-config issues for 0.13 +- [`e6b071ab0`](https://github.com/raptor3um/raptoreum/commit/e6b071ab0) Merge #8315: gitian: Don't require sudo for Linux. +- [`237ba56d9`](https://github.com/raptor3um/raptoreum/commit/237ba56d9) Merge #8303: [Doc] Update bips.md for CSV softfork. +- [`7a6febfaa`](https://github.com/raptor3um/raptoreum/commit/7a6febfaa) Merge #8310: build: require boost for bench +- [`5ff5474e4`](https://github.com/raptor3um/raptoreum/commit/5ff5474e4) Merge #8304: [travis] Update SDK_URL +- [`25627e31d`](https://github.com/raptor3um/raptoreum/commit/25627e31d) Merge #8288: qt: Network-specific example address +- [`355f3724d`](https://github.com/raptor3um/raptoreum/commit/355f3724d) Merge #8298: wallet: Revert input selection post-pruning +- [`2c914e8ba`](https://github.com/raptor3um/raptoreum/commit/2c914e8ba) Merge #8280: Tests: Increase sync_blocks() timeouts in pruning.py +- [`dcf36df67`](https://github.com/raptor3um/raptoreum/commit/dcf36df67) Merge #8285: windows: Add testnet link to installer +- [`ba6b36978`](https://github.com/raptor3um/raptoreum/commit/ba6b36978) Merge #8281: qt: Remove client name from debug window +- [`17aa23c88`](https://github.com/raptor3um/raptoreum/commit/17aa23c88) Merge #8261: The bit field is shown only when status is "started" +- [`7f5b8f1e1`](https://github.com/raptor3um/raptoreum/commit/7f5b8f1e1) Merge #8258: RPC: Hide softfork if timeout is 0 +- [`f1f139033`](https://github.com/raptor3um/raptoreum/commit/f1f139033) Merge #8252: [trivial] Add aarch64 to depends .gitignore +- [`3f7273d00`](https://github.com/raptor3um/raptoreum/commit/3f7273d00) Merge #8256: BUG: bitcoin-qt crash +- [`5a844dcc4`](https://github.com/raptor3um/raptoreum/commit/5a844dcc4) Merge #8254: [doc] Add OSX ZMQ requirement to QA readme +- [`b7b5d6ea7`](https://github.com/raptor3um/raptoreum/commit/b7b5d6ea7) Merge #8246: trivial: capitalize BIP32 in option help +- [`e51f50544`](https://github.com/raptor3um/raptoreum/commit/e51f50544) Merge #8222: Enable mempool consistency checks in unit tests +- [`381629c75`](https://github.com/raptor3um/raptoreum/commit/381629c75) Merge #8229: [Doc] Update OS X build notes for 10.11 SDK +- [`e2bcf8ae0`](https://github.com/raptor3um/raptoreum/commit/e2bcf8ae0) Merge #8216: [qa] assert 'changePosition out of bounds' +- [`c2dabf8bd`](https://github.com/raptor3um/raptoreum/commit/c2dabf8bd) Merge #8220: Stop trimming when mapTx is empty +- [`36aa55458`](https://github.com/raptor3um/raptoreum/commit/36aa55458) Temporarily fix build error cased by out-of-order backporting +- [`808936cc3`](https://github.com/raptor3um/raptoreum/commit/808936cc3) Merge #8179: Evict orphans which are included or precluded by accepted blocks. +- [`573d9314e`](https://github.com/raptor3um/raptoreum/commit/573d9314e) Merge #7713: Fixes for verify-commits script +- [`d2c3b7efe`](https://github.com/raptor3um/raptoreum/commit/d2c3b7efe) Merge #7687: Stop treating importaddress'ed scripts as change +- [`782745b05`](https://github.com/raptor3um/raptoreum/commit/782745b05) Merge #8066: [qa] test_framework: Use different rpc_auth_pair for each node +- [`68757db68`](https://github.com/raptor3um/raptoreum/commit/68757db68) Merge #8210: [Qt] Bump to Qt5.6.1 +- [`05684db6e`](https://github.com/raptor3um/raptoreum/commit/05684db6e) Merge #8203: Clarify documentation for running a tor node +- [`b6d8206c2`](https://github.com/raptor3um/raptoreum/commit/b6d8206c2) Merge #8224: readme: Omit phrasing; 'new' +- [`46473757e`](https://github.com/raptor3um/raptoreum/commit/46473757e) Merge #8215: [wallet] tests: Don't use floating point +- [`6227cfdad`](https://github.com/raptor3um/raptoreum/commit/6227cfdad) Merge #8214: [qa] mininode: fail on send_message instead of silent return +- [`f362c610e`](https://github.com/raptor3um/raptoreum/commit/f362c610e) Merge #7600: Mining: Select transactions using feerate-with-ancestors +- [`79ad5f768`](https://github.com/raptor3um/raptoreum/commit/79ad5f768) Bump univalue version +- [`c783b39ce`](https://github.com/raptor3um/raptoreum/commit/c783b39ce) Merge #8171: [RPC] Fix createrawtx sequence number unsigned int parsing +- [`402eb5573`](https://github.com/raptor3um/raptoreum/commit/402eb5573) Merge #8208: Do not set extra flags for unfiltered DNS seed results +- [`9875ab535`](https://github.com/raptor3um/raptoreum/commit/9875ab535) Merge #8207: [trivial] Add a link to the Bitcoin-Core repository and website to the About Dialog +- [`96180a189`](https://github.com/raptor3um/raptoreum/commit/96180a189) Merge #7636: Add bitcoin address label to request payment QR code +- [`62852538e`](https://github.com/raptor3um/raptoreum/commit/62852538e) Merge #8198: [trivial] Sync ax_pthread with upstream draft4 +- [`61a667fc4`](https://github.com/raptor3um/raptoreum/commit/61a667fc4) Merge #8194: [gitian] set correct PATH for wrappers +- [`2b4e896f6`](https://github.com/raptor3um/raptoreum/commit/2b4e896f6) Merge #8197: [trivial] Ignore split-debug.sh +- [`0c6122634`](https://github.com/raptor3um/raptoreum/commit/0c6122634) Also revert BLOCK_DOWNLOAD_TIMEOUT_PER_PEER to 500000 +- [`c7937c202`](https://github.com/raptor3um/raptoreum/commit/c7937c202) Remove unnecessary call to AddInventoryKnown in INV message handling +- [`e3ca41b1c`](https://github.com/raptor3um/raptoreum/commit/e3ca41b1c) Raptoreumify build-osx.md +- [`49f9d613b`](https://github.com/raptor3um/raptoreum/commit/49f9d613b) Revert to BLOCK_DOWNLOAD_TIMEOUT_BASE = 1000000 +- [`f00aeb87c`](https://github.com/raptor3um/raptoreum/commit/f00aeb87c) Fix failing test in p2p-fullblocktest.py +- [`05c8f2ee2`](https://github.com/raptor3um/raptoreum/commit/05c8f2ee2) Raptoreumify new tests in bitcoin-util-test.json +- [`2e51d8273`](https://github.com/raptor3um/raptoreum/commit/2e51d8273) Merge #8201: [qa] fundrawtransaction: Fix race, assert amounts +- [`e7e3a8071`](https://github.com/raptor3um/raptoreum/commit/e7e3a8071) Merge #8141: Continuing port of java comparison tool +- [`6a698300a`](https://github.com/raptor3um/raptoreum/commit/6a698300a) Merge #7598: Refactor CreateNewBlock to be a method of the BlockAssembler class +- [`6ef8aae76`](https://github.com/raptor3um/raptoreum/commit/6ef8aae76) Merge #8193: [trivial][doc] Use Debian 8.5 in the gitian-build guide +- [`06a73ad7c`](https://github.com/raptor3um/raptoreum/commit/06a73ad7c) Merge #8188: Add armhf/aarch64 gitian builds +- [`acbda5d16`](https://github.com/raptor3um/raptoreum/commit/acbda5d16) Merge #8177: developer notes: updates for C++11 +- [`b95a338b3`](https://github.com/raptor3um/raptoreum/commit/b95a338b3) Merge #8133: build: Finish up out-of-tree changes +- [`79db88bbb`](https://github.com/raptor3um/raptoreum/commit/79db88bbb) Merge #8181: build: Get rid of `CLIENT_DATE` +- [`209a4d63b`](https://github.com/raptor3um/raptoreum/commit/209a4d63b) Merge #8178: Add git and github tips and tricks to developer notes +- [`b9a00f629`](https://github.com/raptor3um/raptoreum/commit/b9a00f629) Merge #7292: [RPC] Expose ancestor/descendant information over RPC +- [`856e54678`](https://github.com/raptor3um/raptoreum/commit/856e54678) Merge #7283: [gitian] Default reference_datetime to commit author date +- [`2e3aacf43`](https://github.com/raptor3um/raptoreum/commit/2e3aacf43) Merge #8166: src/test: Do not shadow local variables +- [`aa6cb48bf`](https://github.com/raptor3um/raptoreum/commit/aa6cb48bf) Merge #8154: drop vAddrToSend after sending big addr message +- [`ca228f09f`](https://github.com/raptor3um/raptoreum/commit/ca228f09f) Merge #8168: util: Add ParseUInt32 and ParseUInt64 +- [`cfc76bab9`](https://github.com/raptor3um/raptoreum/commit/cfc76bab9) Merge #8172: Fix two warnings for comparison between signed and unsigned +- [`a60d4d64c`](https://github.com/raptor3um/raptoreum/commit/a60d4d64c) Remove 'LDFLAGS=-static-libstdc++' from CONFIGFLAGS in gitian-linux.yml +- [`80d02d8f5`](https://github.com/raptor3um/raptoreum/commit/80d02d8f5) Use nRelevantServices for requiredServiceBits +- [`b3e26cc75`](https://github.com/raptor3um/raptoreum/commit/b3e26cc75) Merge #8083: Add support for dnsseeds with option to filter by servicebits +- [`361d26037`](https://github.com/raptor3um/raptoreum/commit/361d26037) Merge #8173: Use SipHash for node eviction (cont'd) +- [`fc7b5778f`](https://github.com/raptor3um/raptoreum/commit/fc7b5778f) Merge #7993: [depends] Bump Freetype, ccache, ZeroMQ, miniupnpc, expat +- [`05419aba3`](https://github.com/raptor3um/raptoreum/commit/05419aba3) Merge #8153: [rpc] fundrawtransaction feeRate: Use BTC/kB +- [`ca699ceba`](https://github.com/raptor3um/raptoreum/commit/ca699ceba) Merge #8126: std::shared_ptr based CTransaction storage in mempool +- [`51fa05ac3`](https://github.com/raptor3um/raptoreum/commit/51fa05ac3) Merge #8082: Defer inserting into maprelay until just before relaying. +- [`881d8329c`](https://github.com/raptor3um/raptoreum/commit/881d8329c) Merge #7703: tor: Change auth order to only use password auth if -torpassword +- [`00c84ca53`](https://github.com/raptor3um/raptoreum/commit/00c84ca53) Merge #8065: Addrman offline attempts +- [`2ee817fb0`](https://github.com/raptor3um/raptoreum/commit/2ee817fb0) Merge #8078: Disable the mempool P2P command when bloom filters disabled +- [`0b8169d49`](https://github.com/raptor3um/raptoreum/commit/0b8169d49) Merge #8164: [Bitcoin-Tx] fix missing test fixtures, fix 32bit atoi issue +- [`9af87c826`](https://github.com/raptor3um/raptoreum/commit/9af87c826) Merge #7957: [RPC][Bitcoin-TX] Add support for sequence number +- [`d5d25564c`](https://github.com/raptor3um/raptoreum/commit/d5d25564c) Merge #8136: Log/report in 10% steps during VerifyDB +- [`7f0213ac3`](https://github.com/raptor3um/raptoreum/commit/7f0213ac3) Merge #8118: Reduce unnecessary hashing in signrawtransaction +- [`49c2e9702`](https://github.com/raptor3um/raptoreum/commit/49c2e9702) Merge #8151: [init] Make feefilter option debug option +- [`b2bd69a7a`](https://github.com/raptor3um/raptoreum/commit/b2bd69a7a) Merge #8142: Improve CWallet API with new GetAccountPubkey function. +- [`463a68d4a`](https://github.com/raptor3um/raptoreum/commit/463a68d4a) Merge #8007: Minor locking improvements +- [`d7d5d577f`](https://github.com/raptor3um/raptoreum/commit/d7d5d577f) Merge #8137: Improve CWallet API with new AccountMove function. +- [`7538795b1`](https://github.com/raptor3um/raptoreum/commit/7538795b1) Merge #8143: comment nit: miners don't vote +- [`c69df9b82`](https://github.com/raptor3um/raptoreum/commit/c69df9b82) Merge #7967: [RPC] add feerate option to fundrawtransaction +- [`af51e591b`](https://github.com/raptor3um/raptoreum/commit/af51e591b) Merge #8139: Fix interrupted HTTP RPC connection workaround for Python 3.5+ +- [`fb88e9b60`](https://github.com/raptor3um/raptoreum/commit/fb88e9b60) Merge #7997: replace mapNextTx with slimmer setSpends +- [`df14a7f00`](https://github.com/raptor3um/raptoreum/commit/df14a7f00) Merge #7825: Prevent multiple calls to ExtractDestination +- [`dbf4dc4de`](https://github.com/raptor3um/raptoreum/commit/dbf4dc4de) Merge #8029: [Doc] Simplify OS X build notes +- [`fefd0ace3`](https://github.com/raptor3um/raptoreum/commit/fefd0ace3) Merge #8077: Consensus: Decouple from chainparams.o and timedata.o +- [`bf069fb1b`](https://github.com/raptor3um/raptoreum/commit/bf069fb1b) Merge #8123: Use std::atomic for fRequestShutdown and fReopenDebugLog +- [`09eda9783`](https://github.com/raptor3um/raptoreum/commit/09eda9783) Merge #8112: Include signal.h for sig_atomic_t in WIN32 +- [`bad08eadf`](https://github.com/raptor3um/raptoreum/commit/bad08eadf) Merge #7960: Only use AddInventoryKnown for transactions +- [`433a026a1`](https://github.com/raptor3um/raptoreum/commit/433a026a1) Fix OpenSSL build error +- [`91752ab7e`](https://github.com/raptor3um/raptoreum/commit/91752ab7e) Merge #7689: Replace OpenSSL AES with ctaes-based version +- [`83dc1dc99`](https://github.com/raptor3um/raptoreum/commit/83dc1dc99) Directly push messages instead of using CDataStream first +- [`e65bf228b`](https://github.com/raptor3um/raptoreum/commit/e65bf228b) Merge #8121: [Doc] Update implemented BIPs list +- [`dfa0bd234`](https://github.com/raptor3um/raptoreum/commit/dfa0bd234) Merge #8080: Do not use mempool for GETDATA for tx accepted after the last mempool req. +- [`b2a27c062`](https://github.com/raptor3um/raptoreum/commit/b2a27c062) Only serve normal transactions from mapRelay +- [`bef036125`](https://github.com/raptor3um/raptoreum/commit/bef036125) Merge #7877: Change mapRelay to store CTransactions +- [`2dc71e8e0`](https://github.com/raptor3um/raptoreum/commit/2dc71e8e0) Revert deadlock fix in ProcessGetData +- [`d8c5a5900`](https://github.com/raptor3um/raptoreum/commit/d8c5a5900) Merge #8090: Adding P2SH(p2pkh) script test case +- [`34b7fddde`](https://github.com/raptor3um/raptoreum/commit/34b7fddde) Raptoreumify benchmarking.md binary name +- [`475dbd49b`](https://github.com/raptor3um/raptoreum/commit/475dbd49b) Pass sys.stdout to Popen instead of subprocess.STDOUT +- [`a0481f1ed`](https://github.com/raptor3um/raptoreum/commit/a0481f1ed) Merge #8750: [qa] Refactor RPCTestHandler to prevent TimeoutExpired +- [`5496e468a`](https://github.com/raptor3um/raptoreum/commit/5496e468a) Raptoreumify a few docs and the use of an address +- [`5ba21d4e3`](https://github.com/raptor3um/raptoreum/commit/5ba21d4e3) Revert "ReprocessBlocks"->"ResetBlockFailureFlags" in debug message +- [`b1df5e9e8`](https://github.com/raptor3um/raptoreum/commit/b1df5e9e8) Align sorting in OverviewPage::SetupTransactionList with transaction view +- [`abe84cb9e`](https://github.com/raptor3um/raptoreum/commit/abe84cb9e) Use GetStrongRandBytes in CMnemonic::Generate +- [`249167ab8`](https://github.com/raptor3um/raptoreum/commit/249167ab8) Python 3 in .travis.yml +- [`a1111cdf6`](https://github.com/raptor3um/raptoreum/commit/a1111cdf6) Raptoreumify addresses/keys in signmessages.py RPC test +- [`21aaf9289`](https://github.com/raptor3um/raptoreum/commit/21aaf9289) Introduce redirect_stderr argument to start_node +- [`fbe36d3db`](https://github.com/raptor3um/raptoreum/commit/fbe36d3db) Pass -createwalletbackups=0 to raptoreumd when running rpc tests +- [`69dd8f4a6`](https://github.com/raptor3um/raptoreum/commit/69dd8f4a6) Python 3 fixes/porting in rpc tests +- [`2924b3440`](https://github.com/raptor3um/raptoreum/commit/2924b3440) Cast command to str when calling show_debug_msg +- [`6dc4a1385`](https://github.com/raptor3um/raptoreum/commit/6dc4a1385) Merge #8110: [Doc] Add benchmarking notes +- [`a3c63033d`](https://github.com/raptor3um/raptoreum/commit/a3c63033d) Merge #8115: Avoid integer division in the benchmark inner-most loop. +- [`43cbeb7fa`](https://github.com/raptor3um/raptoreum/commit/43cbeb7fa) Merge #7891: Always require OS randomness when generating secret keys +- [`cee571bda`](https://github.com/raptor3um/raptoreum/commit/cee571bda) Merge #8107: bench: Added base58 encoding/decoding benchmarks +- [`a39b1f7b8`](https://github.com/raptor3um/raptoreum/commit/a39b1f7b8) Merge #7896: fix typo in help text +- [`6c962f5e6`](https://github.com/raptor3um/raptoreum/commit/6c962f5e6) Merge #8111: Benchmark SipHash +- [`0027292ac`](https://github.com/raptor3um/raptoreum/commit/0027292ac) Merge #8104: Tests: add timeout to sync_blocks() and sync_mempools() +- [`8d47ecb23`](https://github.com/raptor3um/raptoreum/commit/8d47ecb23) Merge #8108: Trivial: Remove unused local variable shadowing upper local +- [`7db5be442`](https://github.com/raptor3um/raptoreum/commit/7db5be442) Merge #8098: [qa] test_framework: Append portseed to tmpdir +- [`b71ee087a`](https://github.com/raptor3um/raptoreum/commit/b71ee087a) Merge #8015: CCoinsViewErrorCatcher raison-d-etre +- [`9bf698793`](https://github.com/raptor3um/raptoreum/commit/9bf698793) Merge #8034: [doc][trivial] Add basic git squash workflow [skip ci] +- [`640bee181`](https://github.com/raptor3um/raptoreum/commit/640bee181) Merge #7795: UpdateTip: log only one line at most per block +- [`51d17dcde`](https://github.com/raptor3um/raptoreum/commit/51d17dcde) Move AutoBackupWallet into wallet.cpp +- [`8723f9956`](https://github.com/raptor3um/raptoreum/commit/8723f9956) Merge #8061: [Wallet] Improve Wallet encapsulation +- [`c571a9490`](https://github.com/raptor3um/raptoreum/commit/c571a9490) Merge #8076: VerifyDB: don't check blocks that have been pruned +- [`42a3e0d2d`](https://github.com/raptor3um/raptoreum/commit/42a3e0d2d) Merge #8063: Acquire lock to check for genesis block. +- [`00bf61885`](https://github.com/raptor3um/raptoreum/commit/00bf61885) Merge #8092: Correct small typo in extract_strings_qt.py +- [`f50b8bf66`](https://github.com/raptor3um/raptoreum/commit/f50b8bf66) Merge #8095: Test framework: only cleanup on successful test runs +- [`3f5be563f`](https://github.com/raptor3um/raptoreum/commit/3f5be563f) Merge #8014: Qt: Sort transactions by date +- [`62aaaaeac`](https://github.com/raptor3um/raptoreum/commit/62aaaaeac) Merge #8047: [qa] test_framework: Set wait-timeout for bitcoind procs +- [`bcecdcd8e`](https://github.com/raptor3um/raptoreum/commit/bcecdcd8e) Merge #8056: [qa] Remove hardcoded "4 nodes" from test_framework +- [`8eeaa4f21`](https://github.com/raptor3um/raptoreum/commit/8eeaa4f21) Fix typo adddrman to addrman as requested in #8070 +- [`1897ccc64`](https://github.com/raptor3um/raptoreum/commit/1897ccc64) Merge #8033: Fix Socks5() connect failures to be less noisy and less unnecessarily scary +- [`0450dfdeb`](https://github.com/raptor3um/raptoreum/commit/0450dfdeb) Merge #7932: CAddrMan::Deserialize handle corrupt serializations better. +- [`72bee9e55`](https://github.com/raptor3um/raptoreum/commit/72bee9e55) Merge #8031: improvement to readability +- [`8b28f5f99`](https://github.com/raptor3um/raptoreum/commit/8b28f5f99) Merge #8020: Use SipHash-2-4 for various non-cryptographic hashes +- [`a0afc3ee0`](https://github.com/raptor3um/raptoreum/commit/a0afc3ee0) Merge #8038: [qa, doc] Various minor fixes +- [`7b2587946`](https://github.com/raptor3um/raptoreum/commit/7b2587946) Merge #8059: Remove unneeded feerate param from RelayTransaction/AcceptToMemoryPool. +- [`26f07f835`](https://github.com/raptor3um/raptoreum/commit/26f07f835) Merge #8004: signal handling: fReopenDebugLog and fRequestShutdown should be type sig_atomic_t +- [`f0fe21d37`](https://github.com/raptor3um/raptoreum/commit/f0fe21d37) Merge #8041: [qa] Fix bip9-softforks blockstore issue +- [`4ee385842`](https://github.com/raptor3um/raptoreum/commit/4ee385842) Merge #8039: bench: Add crypto hash benchmarks +- [`f1996dc8c`](https://github.com/raptor3um/raptoreum/commit/f1996dc8c) Merge #7972: [qa] pull-tester: Run rpc test in parallel +- [`76b72a7f2`](https://github.com/raptor3um/raptoreum/commit/76b72a7f2) Merge #8028: Fix insanity of CWalletDB::WriteTx and CWalletTx::WriteToDisk +- [`4750be1af`](https://github.com/raptor3um/raptoreum/commit/4750be1af) Merge #8036: init: Move berkeleydb version reporting to wallet +- [`3dbae2d32`](https://github.com/raptor3um/raptoreum/commit/3dbae2d32) Merge #8019: Remove state arg from ReconsiderBlock, rename to ResetBlockFailureFlags +- [`262e857db`](https://github.com/raptor3um/raptoreum/commit/262e857db) Merge #8012: Qt: Delay user confirmation of send +- [`8bafa06b7`](https://github.com/raptor3um/raptoreum/commit/8bafa06b7) Merge #7971: [qa] Refactor test_framework and pull tester +- [`24ff34102`](https://github.com/raptor3um/raptoreum/commit/24ff34102) Merge #8018: Autofind rpc tests --srcdir +- [`19a6c779e`](https://github.com/raptor3um/raptoreum/commit/19a6c779e) Merge #8030: test: Revert fatal-ness of missing python-zmq +- [`3d665aa48`](https://github.com/raptor3um/raptoreum/commit/3d665aa48) Use fThread = true default argument in CAlert::Notify +- [`3110f7ebd`](https://github.com/raptor3um/raptoreum/commit/3110f7ebd) Fix issues introduced in 1770 (#1803) +- [`5222e9377`](https://github.com/raptor3um/raptoreum/commit/5222e9377) Merge #7976: Remove obsolete reference to CValidationState from UpdateCoins. +- [`93be53e34`](https://github.com/raptor3um/raptoreum/commit/93be53e34) Merge #7934: Improve rolling bloom filter performance and benchmark +- [`65a71dcb2`](https://github.com/raptor3um/raptoreum/commit/65a71dcb2) Merge #8009: Docs: Fixed invalid example paths in gitian-building.md +- [`19af9cfe1`](https://github.com/raptor3um/raptoreum/commit/19af9cfe1) Merge #8013: doc: Fedora build requirements, add gcc-c++ and fix typo +- [`25147c9dc`](https://github.com/raptor3um/raptoreum/commit/25147c9dc) Merge #7814: [qa] Switch to py3 +- [`c66fcf47e`](https://github.com/raptor3um/raptoreum/commit/c66fcf47e) Merge #8011: don't run ThreadMessageHandler at lowered priority +- [`d4b8abf4f`](https://github.com/raptor3um/raptoreum/commit/d4b8abf4f) Send non-tx/non-block inventory items +- [`5d8e94a26`](https://github.com/raptor3um/raptoreum/commit/5d8e94a26) Merge #7840: Several performance and privacy improvements to inv/mempool handling +- [`33233409a`](https://github.com/raptor3um/raptoreum/commit/33233409a) Merge #7966: http: Do a pending c++11 simplification handling work items +- [`90b00cfc6`](https://github.com/raptor3um/raptoreum/commit/90b00cfc6) Merge #7953: Create signmessagewithprivkey rpc +- [`233493b71`](https://github.com/raptor3um/raptoreum/commit/233493b71) Delete old "raptoreum" registry key when installing/uninstalling +- [`b78bd5cc7`](https://github.com/raptor3um/raptoreum/commit/b78bd5cc7) Raptoreumify help text of fundrawtransaction +- [`da2de0771`](https://github.com/raptor3um/raptoreum/commit/da2de0771) Put ps_rounds to the bottom of the result of listunspent +- [`15fc7f213`](https://github.com/raptor3um/raptoreum/commit/15fc7f213) De-bump fees in miner_tests.cpp +- [`7d4046186`](https://github.com/raptor3um/raptoreum/commit/7d4046186) Fix failing fundrawtransaction tests +- [`2c63839f2`](https://github.com/raptor3um/raptoreum/commit/2c63839f2) Raptoreumify fundrawtransaction exception +- [`f8ad2ffa7`](https://github.com/raptor3um/raptoreum/commit/f8ad2ffa7) Merge #7977: [trivial] Add missing const qualifiers. +- [`e6b2f918d`](https://github.com/raptor3um/raptoreum/commit/e6b2f918d) Merge #7968: doc: Fedora build requirements +- [`79fe8e45f`](https://github.com/raptor3um/raptoreum/commit/79fe8e45f) Merge #8002: [depends] Add -stdlib=libc++ to darwin CXX flags +- [`d55b78eb6`](https://github.com/raptor3um/raptoreum/commit/d55b78eb6) Merge #8000: tinyformat: force USE_VARIADIC_TEMPLATES +- [`49c3127b5`](https://github.com/raptor3um/raptoreum/commit/49c3127b5) Merge #7974: More comments on the design of AttemptToEvictConnection. +- [`9bed9ac9f`](https://github.com/raptor3um/raptoreum/commit/9bed9ac9f) Merge #7975: [doc] Update bitcoin-core GitHub links +- [`6662e23a0`](https://github.com/raptor3um/raptoreum/commit/6662e23a0) Merge #7982: build: No need to check for leveldb atomics +- [`7c6dab037`](https://github.com/raptor3um/raptoreum/commit/7c6dab037) Return from main instead of calling exit() +- [`a468803bd`](https://github.com/raptor3um/raptoreum/commit/a468803bd) Merge #7964: Minor changes for c++11 consistency +- [`d97501316`](https://github.com/raptor3um/raptoreum/commit/d97501316) Merge #7807: Fixed miner test values, gave constants for less error-prone values. +- [`61227bb21`](https://github.com/raptor3um/raptoreum/commit/61227bb21) Merge #7962: CalculateNextWorkRequired Cleanup +- [`03507a720`](https://github.com/raptor3um/raptoreum/commit/03507a720) Merge #7952: Log invalid block hash to make debugging easier. +- [`c8bb792f4`](https://github.com/raptor3um/raptoreum/commit/c8bb792f4) Merge #7939: qt: Make it possible to show details for multiple transactions +- [`d69bcb1a0`](https://github.com/raptor3um/raptoreum/commit/d69bcb1a0) Merge #7941: Fixing comment in script_test.json test case +- [`7973142f1`](https://github.com/raptor3um/raptoreum/commit/7973142f1) Reformat listunstpent help to align with upstream +- [`5cf744532`](https://github.com/raptor3um/raptoreum/commit/5cf744532) Merge #7916: Explicitly pass CChainParams& to DisconnectTip() +- [`a60c35182`](https://github.com/raptor3um/raptoreum/commit/a60c35182) Error/Warning fixes for HD wallet part in wallet.cpp +- [`bacc86464`](https://github.com/raptor3um/raptoreum/commit/bacc86464) Merge #7787: [Moveonly] Create ui_interface.cpp +- [`c3e590968`](https://github.com/raptor3um/raptoreum/commit/c3e590968) Add missing parts from bitcoin PR #7762 +- [`8678f2b39`](https://github.com/raptor3um/raptoreum/commit/8678f2b39) Merge #7905: test: move accounting_tests and rpc_wallet_tests to wallet/test +- [`4f5bb798e`](https://github.com/raptor3um/raptoreum/commit/4f5bb798e) Merge #7827: Speed up getchaintips. +- [`1b17e94ee`](https://github.com/raptor3um/raptoreum/commit/1b17e94ee) Merge #7900: fix spelling mistake +- [`96f9a7c3e`](https://github.com/raptor3um/raptoreum/commit/96f9a7c3e) Merge #7897: add missing newline +- [`cfb8b82dc`](https://github.com/raptor3um/raptoreum/commit/cfb8b82dc) Merge #7848: Divergence between 32- and 64-bit when hashing >4GB affects `gettxoutsetinfo` +- [`c172273e4`](https://github.com/raptor3um/raptoreum/commit/c172273e4) Raptoreumify new binary name variables +- [`9bd55b1bf`](https://github.com/raptor3um/raptoreum/commit/9bd55b1bf) Merge #7603: Build System: Use PACKAGE_TARNAME in NSIS script +- [`6c7d13380`](https://github.com/raptor3um/raptoreum/commit/6c7d13380) Merge #7518: Add multiple options to fundrawtransaction +- [`f1197476a`](https://github.com/raptor3um/raptoreum/commit/f1197476a) Merge #7870: [contrib] Add MarcoFalke key and move all keys to contrib/gitian-keys +- [`24f8c248f`](https://github.com/raptor3um/raptoreum/commit/24f8c248f) Merge #7856: Only send one GetAddr response per connection. +- [`b2eabb097`](https://github.com/raptor3um/raptoreum/commit/b2eabb097) Merge #7809: depends: some base fixes/changes +- [`60159eb2f`](https://github.com/raptor3um/raptoreum/commit/60159eb2f) Merge #7798: [travis] Print the commit which was evaluated +- [`d532f22d3`](https://github.com/raptor3um/raptoreum/commit/d532f22d3) Use BIP32_EXTKEY_SIZE instead of fixed constant +- [`7080c27dd`](https://github.com/raptor3um/raptoreum/commit/7080c27dd) Merge #7878: [test] bctest.py: Revert faa41ee +- [`ac53190bf`](https://github.com/raptor3um/raptoreum/commit/ac53190bf) Add missing changes from Bitcoin #7853 +- [`c176f6c5b`](https://github.com/raptor3um/raptoreum/commit/c176f6c5b) Merge #7812: Tiny refactor of `IsRBFOptIn`, avoid exception +- [`f1f3fa327`](https://github.com/raptor3um/raptoreum/commit/f1f3fa327) Merge #7846: Clean up lockorder data of destroyed mutexes +- [`116b14b5f`](https://github.com/raptor3um/raptoreum/commit/116b14b5f) Merge #7849: tests: add varints_bitpatterns test +- [`1ac85586c`](https://github.com/raptor3um/raptoreum/commit/1ac85586c) Merge #7847: doc: add arch linux build example +- [`cc3a06bf5`](https://github.com/raptor3um/raptoreum/commit/cc3a06bf5) Merge #7863: getblockchaininfo: make bip9_softforks an object, not an array. +- [`5b1ad12d1`](https://github.com/raptor3um/raptoreum/commit/5b1ad12d1) Merge #7855: [doc] gitian: Replace precise with trusty +- [`20cb9aa21`](https://github.com/raptor3um/raptoreum/commit/20cb9aa21) Merge #7796: [amount] Add support for negative fee rates +- [`e48f46c80`](https://github.com/raptor3um/raptoreum/commit/e48f46c80) Merge #7838: [Doc] Update gitian build guide to debian 8.4.0 +- [`d983f1d78`](https://github.com/raptor3um/raptoreum/commit/d983f1d78) Merge #7828: Trivial: Globals: Explicitly pass const CChainParams& to ProcessMessage() +- [`2a7971010`](https://github.com/raptor3um/raptoreum/commit/2a7971010) Merge #7786: Doc: Update isStandardTx comment +- [`b2d659f19`](https://github.com/raptor3um/raptoreum/commit/b2d659f19) Merge #7570: Net: Add IPv6 Link-Local Address Support +- [`a8aeff143`](https://github.com/raptor3um/raptoreum/commit/a8aeff143) Merge #7801: [qa] Remove misleading "errorString syntax" +- [`738e1c51c`](https://github.com/raptor3um/raptoreum/commit/738e1c51c) Merge #7793: [doxygen] Fix member comments +- [`1f8ca7546`](https://github.com/raptor3um/raptoreum/commit/1f8ca7546) depends: mac deploy Py3 compatibility +- [`e5b82075a`](https://github.com/raptor3um/raptoreum/commit/e5b82075a) Fix no-wallet build after backports refactored RPCs +- [`f235b6a6a`](https://github.com/raptor3um/raptoreum/commit/f235b6a6a) Apply review suggestions/fixes +- [`6a515e5e2`](https://github.com/raptor3um/raptoreum/commit/6a515e5e2) Merge #7788: Use relative paths instead of absolute paths in protoc calls +- [`d5f1b5ae8`](https://github.com/raptor3um/raptoreum/commit/d5f1b5ae8) Merge #7791: Doc: change Precise to Trusty in gitian-building.md +- [`e7d9ffa5d`](https://github.com/raptor3um/raptoreum/commit/e7d9ffa5d) Merge #7774: RPC: add versionHex in getblock and getblockheader JSON results +- [`1cd653cc5`](https://github.com/raptor3um/raptoreum/commit/1cd653cc5) Merge #7781: devtools: Auto-set branch to merge to in github-merge +- [`c86717a59`](https://github.com/raptor3um/raptoreum/commit/c86717a59) Merge #7813: [doc] Update port in tor.md +- [`7ba8612b5`](https://github.com/raptor3um/raptoreum/commit/7ba8612b5) Merge #7797: RPC: fix generatetoaddress failing to parse address +- [`a7514a8e6`](https://github.com/raptor3um/raptoreum/commit/a7514a8e6) Merge #7789: [Doc] Add note about using the Qt official binary installer. +- [`9dbda86cb`](https://github.com/raptor3um/raptoreum/commit/9dbda86cb) HDWallet error/warning message fixes +- [`298224b3b`](https://github.com/raptor3um/raptoreum/commit/298224b3b) Merge #7691: [Wallet] refactor wallet/init interaction +- [`a5505e7e8`](https://github.com/raptor3um/raptoreum/commit/a5505e7e8) Merge #7711: [build-aux] Update Boost & check macros to latest serials +- [`21b23d1ec`](https://github.com/raptor3um/raptoreum/commit/21b23d1ec) Merge #7785: Trivial: Fix typo: Optimizaton -> Optimization [skip ci] +- [`960cb014d`](https://github.com/raptor3um/raptoreum/commit/960cb014d) Merge #7477: Fix quoting of copyright holders in configure.ac. +- [`0956f3d67`](https://github.com/raptor3um/raptoreum/commit/0956f3d67) Merge #7763: Put hex-encoded version in UpdateTip +- [`644240157`](https://github.com/raptor3um/raptoreum/commit/644240157) Merge #7766: rpc: Register calls where they are defined +- [`18da34e29`](https://github.com/raptor3um/raptoreum/commit/18da34e29) Merge #7761: [Qt] remove trailing output-index from transaction-id +- [`1c8441778`](https://github.com/raptor3um/raptoreum/commit/1c8441778) Merge #7573: P2P: add maxtimeadjustment command line option +- [`a9a209f58`](https://github.com/raptor3um/raptoreum/commit/a9a209f58) Merge #7723: build: python 3 compatibility +- [`ba65eb1ac`](https://github.com/raptor3um/raptoreum/commit/ba65eb1ac) Merge #7764: [qa] Don't run pruning.py twice +- [`a309bf372`](https://github.com/raptor3um/raptoreum/commit/a309bf372) Clear setInternalKeyPool and setExternalKeyPool instead of setKeyPool +- [`e2fefa539`](https://github.com/raptor3um/raptoreum/commit/e2fefa539) Merge #7558: [RPC] Add import/removeprunedfunds rpc call +- [`ca33635ef`](https://github.com/raptor3um/raptoreum/commit/ca33635ef) Merge #7742: [Wallet][RPC] add missing abandon status documentation +- [`34701da5c`](https://github.com/raptor3um/raptoreum/commit/34701da5c) Merge #7737: devtools: make github-merge.py use py3 +- [`a4911c383`](https://github.com/raptor3um/raptoreum/commit/a4911c383) Merge #7646: Fix lockunspent help message +- [`f933c6726`](https://github.com/raptor3um/raptoreum/commit/f933c6726) Merge #7715: Fix calculation of balances and available coins. +- [`760d58e3d`](https://github.com/raptor3um/raptoreum/commit/760d58e3d) Merge #7671: [RPC] Add generatetoaddress rpc to mine to an address +- [`953aeead1`](https://github.com/raptor3um/raptoreum/commit/953aeead1) Merge #7710: [Depends] Bump miniupnpc and config.guess+sub +- [`74fe8fe59`](https://github.com/raptor3um/raptoreum/commit/74fe8fe59) Merge #7649: Prevent multiple calls to CWallet::AvailableCoins +- [`aa584522d`](https://github.com/raptor3um/raptoreum/commit/aa584522d) Raptoreum related changes for feefilter +- [`11ac70af9`](https://github.com/raptor3um/raptoreum/commit/11ac70af9) Merge #7542: Implement "feefilter" P2P message +- [`283922243`](https://github.com/raptor3um/raptoreum/commit/283922243) Merge #7726: Correct importaddress help reference to importpubkey +- [`04bf554ab`](https://github.com/raptor3um/raptoreum/commit/04bf554ab) Merge #7712: Improve COutPoint less operator +- [`f4d30a645`](https://github.com/raptor3um/raptoreum/commit/f4d30a645) Merge #7708: De-neuter NODE_BLOOM +- [`8fde2fd5f`](https://github.com/raptor3um/raptoreum/commit/8fde2fd5f) Merge #7705: [amount] Add tests and make GetFee() monotonic +- [`721171ee3`](https://github.com/raptor3um/raptoreum/commit/721171ee3) Merge #7686: [qt] Remove 0-fee from send dialog +- [`29d263389`](https://github.com/raptor3um/raptoreum/commit/29d263389) Merge #7594: Mempool: Add tracking of ancestor packages +- [`49a8ed6d3`](https://github.com/raptor3um/raptoreum/commit/49a8ed6d3) Merge #7683: Fix torcontrol.cpp unused private field warning +- [`abbbe61d0`](https://github.com/raptor3um/raptoreum/commit/abbbe61d0) Merge #7608: [wallet] Move hardcoded file name out of log messages +- [`5f9bfa0b6`](https://github.com/raptor3um/raptoreum/commit/5f9bfa0b6) Merge #7670: use cached block hash in blockToJSON() +- [`fb4ec255c`](https://github.com/raptor3um/raptoreum/commit/fb4ec255c) Merge #7663: Make the generate RPC call function for non-regtest +- [`fa0341115`](https://github.com/raptor3um/raptoreum/commit/fa0341115) Merge #7507: Remove internal miner +- [`332fbfc0e`](https://github.com/raptor3um/raptoreum/commit/332fbfc0e) HDWallet fixes after moving wallet initialization +- [`b3525b2e6`](https://github.com/raptor3um/raptoreum/commit/b3525b2e6) Merge #7577: [Wallet] move "load wallet phase" to CWallet +- [`8be396a3b`](https://github.com/raptor3um/raptoreum/commit/8be396a3b) Merge #7667: Move GetTempPath() to testutil +- [`f1e95e358`](https://github.com/raptor3um/raptoreum/commit/f1e95e358) Merge #7635: [Documentation] Add dependency info to test docs +- [`51c6ab20f`](https://github.com/raptor3um/raptoreum/commit/51c6ab20f) Merge #7576: [Wallet] move wallet help string creation to CWallet +- [`24cf36972`](https://github.com/raptor3um/raptoreum/commit/24cf36972) Merge #7592: mempool: Re-remove ERROR logging for mempool rejects +- [`23eeaeef8`](https://github.com/raptor3um/raptoreum/commit/23eeaeef8) Merge #7662: remove unused NOBLKS_VERSION_{START,END} constants +- [`00d42b7c9`](https://github.com/raptor3um/raptoreum/commit/00d42b7c9) Merge #7539: Add tags to mempool's mapTx indices +- [`d6a0de72a`](https://github.com/raptor3um/raptoreum/commit/d6a0de72a) fix splashscreen (shrink titleCopyrightVSpace) +- [`af5aece96`](https://github.com/raptor3um/raptoreum/commit/af5aece96) make CopyrightHolders more generic +- [`4e0bb527d`](https://github.com/raptor3um/raptoreum/commit/4e0bb527d) Merge #8373: Fix OSX non-deterministic dmg +- [`51ca0d5b4`](https://github.com/raptor3um/raptoreum/commit/51ca0d5b4) Move privatesend to rpcwallet.cpp as well after Bitcoin #7307 was backported +- [`02785c858`](https://github.com/raptor3um/raptoreum/commit/02785c858) Disable check-doc.py for now until all backported PRs are merged and docs fixed +- [`48eddeea2`](https://github.com/raptor3um/raptoreum/commit/48eddeea2) Merge #7455: [travis] Exit early when check-doc.py fails +- [`07338feae`](https://github.com/raptor3um/raptoreum/commit/07338feae) Merge #7620: [travis] Only run check-doc.py once +- [`266520ced`](https://github.com/raptor3um/raptoreum/commit/266520ced) Merge #7632: Delete outdated test-patches reference +- [`eed9428d2`](https://github.com/raptor3um/raptoreum/commit/eed9428d2) Merge #7616: [depends] Delete unused patches +- [`74eda8759`](https://github.com/raptor3um/raptoreum/commit/74eda8759) Merge #7537: wallet: Warn on unexpected EOF while salvaging wallet +- [`5390a1a0a`](https://github.com/raptor3um/raptoreum/commit/5390a1a0a) Merge #7590: Improving wording related to Boost library requirements [updated] +- [`f0300c6c5`](https://github.com/raptor3um/raptoreum/commit/f0300c6c5) Merge #7606: [depends] builders: No need to set -L and --location for curl +- [`a890c7616`](https://github.com/raptor3um/raptoreum/commit/a890c7616) Merge #7612: [doc] Typo fix +- [`984dc5271`](https://github.com/raptor3um/raptoreum/commit/984dc5271) Merge #7619: Add missing sudo entry in gitian VM setup. +- [`6a121275d`](https://github.com/raptor3um/raptoreum/commit/6a121275d) Merge #7583: [doc] Fix typos +- [`97c7da4b7`](https://github.com/raptor3um/raptoreum/commit/97c7da4b7) Merge #7509: Common argument defaults for NODE_BLOOM stuff and -wallet +- [`ee5f8d211`](https://github.com/raptor3um/raptoreum/commit/ee5f8d211) Merge #7536: test: test leading spaces for ParseHex +- [`cd7a2e2b5`](https://github.com/raptor3um/raptoreum/commit/cd7a2e2b5) Merge #7504: Crystal clean make clean +- [`529e8ad63`](https://github.com/raptor3um/raptoreum/commit/529e8ad63) Merge #7528: autogen.sh: warn about needing autoconf if autoreconf is not found +- [`de91ef95f`](https://github.com/raptor3um/raptoreum/commit/de91ef95f) Merge #7490: tests: Remove May15 test +- [`7ec1e1887`](https://github.com/raptor3um/raptoreum/commit/7ec1e1887) Merge #7459: Consensus: Decouple pow.o from util.o +- [`8874b2e0f`](https://github.com/raptor3um/raptoreum/commit/8874b2e0f) Merge #6480: include the chaintip blockindex in the SyncTransaction signal, add signal UpdateTip() +- [`a3d1e5eda`](https://github.com/raptor3um/raptoreum/commit/a3d1e5eda) Merge #7070: Move maxTxFee out of mempool +- [`e7a6f79e5`](https://github.com/raptor3um/raptoreum/commit/e7a6f79e5) Merge #7192: Unify product name to as few places as possible +- [`0f8ce5688`](https://github.com/raptor3um/raptoreum/commit/0f8ce5688) Merge #7444: Improve block validity/ConnectBlock() comments +- [`bcbd2cda2`](https://github.com/raptor3um/raptoreum/commit/bcbd2cda2) Merge #7091: Consensus build package +- [`0afbd1c3d`](https://github.com/raptor3um/raptoreum/commit/0afbd1c3d) Merge #7084: mempool: Replace maxFeeRate of 10000*minRelayTxFee with maxTxFee +- [`a65f7b7a7`](https://github.com/raptor3um/raptoreum/commit/a65f7b7a7) Merge #7311: MOVEONLY: Move non-consensus functions out of pow +- [`c8e04d43f`](https://github.com/raptor3um/raptoreum/commit/c8e04d43f) Add missing comment in net.cpp +- [`5f68e06a0`](https://github.com/raptor3um/raptoreum/commit/5f68e06a0) Add missing whitelistalwaysrelay arg to SET_DOC_OPTIONAL +- [`6789bf6e1`](https://github.com/raptor3um/raptoreum/commit/6789bf6e1) Merge #7287: Consensus: Remove calls to error() and FormatStateMessage() +- [`3cd83db0d`](https://github.com/raptor3um/raptoreum/commit/3cd83db0d) Merge #7441: Use Debian 8.3 in gitian build guide +- [`c5f84c4e6`](https://github.com/raptor3um/raptoreum/commit/c5f84c4e6) Merge #6842: limitfreerelay edge case bugfix +- [`6c5286aad`](https://github.com/raptor3um/raptoreum/commit/6c5286aad) Merge #7423: doc: add example for building with constrained resources +- [`2fd5d93a9`](https://github.com/raptor3um/raptoreum/commit/2fd5d93a9) Merge #7437: GUI: Disable tab navigation for peers tables. +- [`b277eed58`](https://github.com/raptor3um/raptoreum/commit/b277eed58) Merge #7425: devtools: Fix utf-8 support in messages for github-merge +- [`5323a08af`](https://github.com/raptor3um/raptoreum/commit/5323a08af) Merge #7300: [trivial] Add missing copyright headers +- [`577f683c5`](https://github.com/raptor3um/raptoreum/commit/577f683c5) Merge #7402: [devtools] github-merge get toplevel dir without extra whitespace +- [`d9d9e95e4`](https://github.com/raptor3um/raptoreum/commit/d9d9e95e4) Merge #7395: devtools: show pull and commit information in github-merge +- [`85919332d`](https://github.com/raptor3um/raptoreum/commit/85919332d) Merge #7236: Use createrawtx locktime parm in txn_clone +- [`643181fe1`](https://github.com/raptor3um/raptoreum/commit/643181fe1) Merge #7262: Reduce inefficiency of GetAccountAddress() +- [`43700eef3`](https://github.com/raptor3um/raptoreum/commit/43700eef3) Merge #7383: [Qt] rename "amount" to "requested amount" in receive coins table +- [`59db2fda1`](https://github.com/raptor3um/raptoreum/commit/59db2fda1) Merge #7183: Improved readability of ApproximateBestSubset +- [`78ad32d10`](https://github.com/raptor3um/raptoreum/commit/78ad32d10) Merge #7307: [RPC, Wallet] Move RPC dispatch table registration to wallet/ code +- [`3be77849d`](https://github.com/raptor3um/raptoreum/commit/3be77849d) Merge pull request #7378 +- [`42997ee8d`](https://github.com/raptor3um/raptoreum/commit/42997ee8d) Merge pull request #7280 +- [`2474fd0ae`](https://github.com/raptor3um/raptoreum/commit/2474fd0ae) Merge pull request #7208 +- [`723eacf45`](https://github.com/raptor3um/raptoreum/commit/723eacf45) Merge pull request #7290 +- [`25ba3aba1`](https://github.com/raptor3um/raptoreum/commit/25ba3aba1) Merge pull request #7304 +- [`38080259b`](https://github.com/raptor3um/raptoreum/commit/38080259b) Merge pull request #7313 +- [`26a5dfe33`](https://github.com/raptor3um/raptoreum/commit/26a5dfe33) Merge pull request #7326 +- [`5ca9b1a9c`](https://github.com/raptor3um/raptoreum/commit/5ca9b1a9c) Merge pull request #7317 +- [`bcebc7c4c`](https://github.com/raptor3um/raptoreum/commit/bcebc7c4c) Merge pull request #7266 +- [`f04f8c19d`](https://github.com/raptor3um/raptoreum/commit/f04f8c19d) Merge pull request #7257 +- [`3f6d6572f`](https://github.com/raptor3um/raptoreum/commit/3f6d6572f) Merge pull request #7156 +- [`bf688abce`](https://github.com/raptor3um/raptoreum/commit/bf688abce) Merge pull request #7113 +- [`f1da40c87`](https://github.com/raptor3um/raptoreum/commit/f1da40c87) Merge #7550: rpc: Input-from-stdin mode for bitcoin-cli +- [`f8407083c`](https://github.com/raptor3um/raptoreum/commit/f8407083c) Remove duplicated CCACHE= line in depends/config.site.in diff --git a/doc/release-notes/dash/release-notes-0.12.3.1.md b/doc/release-notes/dash/release-notes-0.12.3.1.md new file mode 100644 index 0000000000..fdc4b68bfb --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.12.3.1.md @@ -0,0 +1,500 @@ +Raptoreum Core version 0.12.3.1 +========================== + +Release is now available from: + + + +This is a new major version release, bringing new features, various bugfixes 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/Raptoreum-Qt (on Mac) or +raptoreumd/raptoreum-qt (on Linux). + +Downgrade warning +----------------- + +### Downgrade to a version < 0.12.2.2 + +Because release 0.12.2.2 included the [per-UTXO fix](release-notes/raptoreum/release-notes-0.12.2.2.md#per-utxo-fix) +which changed the structure of the internal database, you will have to reindex +the database if you decide to use any pre-0.12.2.2 version. + +Wallet forward or backward compatibility was not affected. + +### Downgrade to 0.12.2.2/3 + +Downgrading to these versions does not require any additional actions, should be +fully compatible. + +Notable changes +=============== + +Introducing Named Devnets +------------------------- + +We introduce a new feature called [Named Devnets](https://github.com/raptor3um/raptoreum/pull/1791). +This feature allows the creation of multiple independent devnets. Each one is +identified by a name which is hardened into a "devnet genesis" block, +which is automatically positioned at height 1. Validation rules will +ensure that a node from `devnet=test1` will never be able to accept blocks +from `devnet=test2`. This is done by checking the expected devnet genesis +block. + +The genesis block of the devnet is the same as the one from regtest. This +starts the devnet with a very low difficulty, allowing us to fill up +needed balances for smartnodes very fast. + +Also, the devnet name is put into the sub-version of the `VERSION` message. +If a node connects to the wrong network, it will immediately be disconnected. + +New format of network message signatures +---------------------------------------- + +We introduced a new signature format for Raptoreum-specific network messages, +read more [here](https://github.com/raptor3um/raptoreum/pull/1936) and [here](https://github.com/raptor3um/raptoreum/pull/1937). +We also introduced a new spork `SPORK_6_NEW_SIGS` which is going to be used to activate the new format after the network has finished the upgrade. +Note that old pre-12.3 nodes won't be able to recognize and verify new signatures after `SPORK_6_NEW_SIGS` activates. + +The old format is partly kept in the code to keep backwards compatibility. This code will be removed in an upcoming +release. + +Governance system improvements +------------------------------ + +We do not use watchdogs since 12.2.x, instead we include all required information about sentinel into smartnode +pings. With this update we add some additional information and cover everything with a signature to ensure that +smartnode ping wasn't maleated by some intermediary node. All messages and logic related to watchdogs are +completely removed now. We also improved proposal message format, as well as proposal validation and processing, +which should lower network traffic and CPU usage. Handling of triggers was also improved slightly. + +`SPORK_13_OLD_SUPERBLOCK_FLAG` was removed now as it was unused since some time. + +PrivateSend improvements +------------------------ + +PrivateSend collaterals are no longer required to be N times of the PrivateSend fee (PSF), instead any input +which is greater or equal 1 PSF but less or equal 4 PSF can be used as a collateral. Inputs that are greater or +equal 1 PSF but strictly less than 2 PSF will be used in collaterals with OP_RETURN outputs. Note that such +inputs will be consumed completely, with no change outputs at all. This should lower number of inputs wallet +would need to take care of, improve privacy by eliminating the case where user accidentally merge small +non-private inputs together and also decrease global UTXO set size. + +It might feel that thanks to this change mixing fees are going to be slightly higher on average if have lots of +such small inputs. However, you need to keep in mind that creating new PrivateSend collaterals cost some fee too +and since such small inputs were not used at all you'd need more txes to create such collaterals. So in general, +we believe average mixing fees should stay mostly the same. + +There are also some other minor fixes which should also slightly improve mixing process. + +Additional indexes cover P2PK now +--------------------------------- + +Additional indexes like `addressindex` etc. process P2PK outputs correctly now. Note, that these indexes will +not be re-built automatically on wallet update, you must reindex manually to update indexes with P2PK outputs. + +Support for pruned nodes in Lite Mode +------------------------------------- + +It is now possible to run a pruned node which stores only some recent blocks and not the whole blockchain. +However this option is only available in so called Lite Mode. In this mode, Raptoreum specific features are disabled, meaning +that such nodes won't fully validate the blockchain (smartnode payments and superblocks). +PrivateSend and InstantSend functions are also disabled on such nodes. Such nodes are comparable to SPV-like nodes +in terms of security and validation - it relies a lot on surrounding nodes, so please keep this in mind if you decide to +use it for something. + +Default maximum block size +-------------------------- + +We've changed the default maximum block size to 2MB. Such blocks were already allowed before, but the default setting +for the maximum block size (which only affects miners) was kept in place until this version. + +RPC changes +----------- + +There are a few changes in existing RPC interfaces in this release: +- `gobject count`, `smartnode count` and `smartnode list` will now by default return JSON formatted output; +If you rely on the old output format, you can still specify an additional parameter for backwards compatibility (`all` for `count` and `status` for `list`); +- `smartnodelist` has a few new modes: `daemon`, `json`, `sentinel`; +- `debug` rpc now requires categories to be separated via `+`, not `,` like before (e.g. `raptoreum+net`); +- `getchaintips` now shows the block fork occurred in `forkpoint` field; +- `getrawmempool`'s has InstantSend-related info (`instantsend` and `instantlock`); +- `getgovernanceinfo` has new field `sentinelpingmaxseconds`; +- `getwalletinfo` now shows PrivateSend balance in `privatesend_balance` field; +- `sendrawtransaction` no longer bypasses transaction policy limits by default. +- `dumphdinfo` should throw an error when wallet isn't HD now + +There is also a new RPC command `listaddressbalances`. + +You can read about RPC changes brought by backporting from Bitcoin Core in following docs: +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md#low-level-rpc-changes +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.1.md#low-level-rpc-changes +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md#low-level-rpc-changes + +Command-line options +-------------------- + +New cmd-line options: +- introduced in Raptoreum Core 0.12.3.1: `allowprivatenet`, `bip9params`, `sporkaddr`, `devnet`; +- backported from Bitcoin Core 0.13/0.14: `blockreconstructionextratxn`, `maxtimeadjustment`, `maxtipage`, +`incrementalrelayfee`, `dustrelayfee`, `blockmintxfee`. + +See `Help -> Command-line options` in Qt wallet or `raptoreumd --help` for more info. + +New Smartnode Information Dialog +--------------------------------- + +You can now double-click on your smartnode in `My Smartnodes` list on `Smartnodes` tab to reveal the new +Smartnode Information dialog. It will show you some basic information as well as software versions reported by the +smartnode. There is also a QR code now which encodes corresponding smartnode private key (the one you set with +mnprivkey during MN setup and NOT the one that controls the 1000 RAPTOREUM collateral) which should make the process of pairing with +mobile software allowing you to vote with your smartnode a bit easier (this software is still in development). + +Testnet fixes +------------- + +While we've been in release preparation, a miner used his ASICs on testnet. This resulted in too many blocks being mined +in a too short time. It revealed a few corner-case bugs in validation and synchronisation rules which we have fixed now. +We've also backported a special testnet rule for our difficulty adjustment algorithm that allows to mine a low difficulty +block on testnet when the last block is older than 5 minutes. This and the other fixes should stabilize our testnet in +case of future ASIC uses on testnet. + +Using smartnode lists for initial peers discovery +-------------------------------------------------- + +We now use a recent smartnode list to feed the hardcoded seed nodes list in Raptoreum Core. This list was previously +unmaintained as we fully relied on DNS based discovery on startup. DNS discovery is still used as the main discovery +method, but the hardcoded seed list should now be able to serve as a proper backup in case DNS fails for some reason. + +Lots of backports, refactoring and bug fixes +-------------------------------------------- + +We backported many performance improvements and refactoring from Bitcoin Core and aligned most of our codebase with version 0.14. +Most notable ones besides various performance and stability improvements probably are +[Compact Block support (BIP 152)](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md#compact-block-support-bip-152), +[Mining transaction selection ("Child Pays For Parent")](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md#mining-transaction-selection-child-pays-for-parent), +[Null dummy soft fork (BIP 147, without SegWit)](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.1.md#null-dummy-soft-fork), +[Nested RPC Commands in Debug Console](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md#nested-rpc-commands-in-debug-console) and +[Support for JSON-RPC Named Arguments](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md#support-for-json-rpc-named-arguments). + +You can read more about all changes in Bitcoin Core 0.13 and 0.14 in following documents: +- [release-notes-0.13.0.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md); +- [release-notes-0.13.1.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.1.md); +- [release-notes-0.13.2.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.2.md); +- [release-notes-0.14.0.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md); +- [release-notes-0.14.1.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.1.md); +- [release-notes-0.14.2.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.2.md). + +Note that some features were already backported earlier (per-UTXO fix, -assumevalid, GUI overlay etc.) and some were not backported at all +(SegWit and feefilter, you can read more about why we did so [here](https://blog.raptoreum.org/segwit-lighting-rbf-in-raptoreum-9536868ca861) and [here](https://github.com/raptor3um/raptoreum/pull/2025)). +The alert system was also kept in place for now. We are going to continue backporting the most notable fixes and improvements from Bitcoin Core versions 0.15 and 0.16 in future releases. + +A lot of refactoring, code cleanups and other small fixes were done in this release again. We are going to continue making code more reliable and easier to review in future releases as well. + + +0.12.3.1 Change log +=================== + +See detailed [change log](https://github.com/raptor3um/raptoreum/compare/v0.12.2.3...raptoreum:v0.12.3.1) below. + +### Governance: +- [`6c79c348e`](https://github.com/raptor3um/raptoreum/commit/6c79c348e) Drop "MAY, 2018" clause for proposal validation on mainnet (#2101) +- [`6079b860e`](https://github.com/raptor3um/raptoreum/commit/6079b860e) Drop trigger objects when triggers are deleted or failed to be created (#2098) +- [`2583e1963`](https://github.com/raptor3um/raptoreum/commit/2583e1963) Test: Add few valid/invalid proposals (internationalization) (#2044) +- [`25eb6d7b3`](https://github.com/raptor3um/raptoreum/commit/25eb6d7b3) clean up governance vote code (#2042) +- [`a0874b72a`](https://github.com/raptor3um/raptoreum/commit/a0874b72a) Validate data size for proposals only (#2004) +- [`15fac7c7e`](https://github.com/raptor3um/raptoreum/commit/15fac7c7e) Validate proposals for expiration (#2003) +- [`a3bcc4307`](https://github.com/raptor3um/raptoreum/commit/a3bcc4307) Refactor governance (#1993) +- [`04a23bf0c`](https://github.com/raptor3um/raptoreum/commit/04a23bf0c) Fix the bug in CGovernanceObject::ProcessVote() (#1989) +- [`b0868093b`](https://github.com/raptor3um/raptoreum/commit/b0868093b) simplify gobject JSON format, remove unused fields (#1902) +- [`1dda9fe6f`](https://github.com/raptor3um/raptoreum/commit/1dda9fe6f) CProposalValidator refactoring and follow up fixes (#1956) +- [`89380b4c9`](https://github.com/raptor3um/raptoreum/commit/89380b4c9) Drop watchdogs, replace them with sentinel pings (#1949) +- [`e71cb3861`](https://github.com/raptor3um/raptoreum/commit/e71cb3861) Store CGovernanceVote hash in memory instead of recalculating it via GetHash() every time (#1946) +- [`580c4884c`](https://github.com/raptor3um/raptoreum/commit/580c4884c) Fix trigger execution and expiration (#1920) +- [`0670695fe`](https://github.com/raptor3um/raptoreum/commit/0670695fe) Move prev/next sb height logic from rpc to CSuperblock::GetNearestSuperblocksHeights (#1919) +- [`741fcbc90`](https://github.com/raptor3um/raptoreum/commit/741fcbc90) Remove excessive custom validation in CProposalValidator::ValidatePaymentAddress (#1917) +- [`354aac8d1`](https://github.com/raptor3um/raptoreum/commit/354aac8d1) rename nEpochStart variable and adjust comments (#1915) +- [`8ea1bd0f5`](https://github.com/raptor3um/raptoreum/commit/8ea1bd0f5) remove unused method GetObjectSubtype (#1914) +- [`8a387ee09`](https://github.com/raptor3um/raptoreum/commit/8a387ee09) Drop SPORK_13_OLD_SUPERBLOCK_FLAG and check superblock start hash (#1872) + +### InstantSend: +- [`8c2d16f5f`](https://github.com/raptor3um/raptoreum/commit/8c2d16f5f) Limit IS quorums by updated MNs only (#2107) +- [`ef85d5144`](https://github.com/raptor3um/raptoreum/commit/ef85d5144) Comment updates - InstantSend (#2062) +- [`c0a109998`](https://github.com/raptor3um/raptoreum/commit/c0a109998) Fix instantsend in testnet and regtest (#2016) +- [`2f1661678`](https://github.com/raptor3um/raptoreum/commit/2f1661678) Locked txes should not expire until mined and have sufficient confirmations (#2011) +- [`846f1d217`](https://github.com/raptor3um/raptoreum/commit/846f1d217) Avoid processing tx lock request twice in the wallet it was sent from (#2007) +- [`c0c998da3`](https://github.com/raptor3um/raptoreum/commit/c0c998da3) Fix CInstantSend::GetTxLockRequest() (#2006) +- [`7d5223b5e`](https://github.com/raptor3um/raptoreum/commit/7d5223b5e) Network-specific thresholds for required confirmations (IS) (#1962) +- [`2c04504f1`](https://github.com/raptor3um/raptoreum/commit/2c04504f1) Refactor IS votes processing (#1951) + +### PrivateSend: +- [`0d5426343`](https://github.com/raptor3um/raptoreum/commit/0d5426343) Fix an edge case in PrepareDenominate (#2138) +- [`8e129877a`](https://github.com/raptor3um/raptoreum/commit/8e129877a) Partially revert 1922 (#2108) +- [`fcac40ab4`](https://github.com/raptor3um/raptoreum/commit/fcac40ab4) RPC: fix wallet lock check in `privatesend start` (#2102) +- [`dbbedc031`](https://github.com/raptor3um/raptoreum/commit/dbbedc031) Fix JoinExistingQueue bug (#2100) +- [`7ac4b972a`](https://github.com/raptor3um/raptoreum/commit/7ac4b972a) Require all participants to submit equal number of inputs (#2075) +- [`d1bf615f3`](https://github.com/raptor3um/raptoreum/commit/d1bf615f3) No POOL_STATE_ERROR or POOL_STATE_SUCCESS on smartnodes (#2009) +- [`d03adb7c3`](https://github.com/raptor3um/raptoreum/commit/d03adb7c3) Check if in smartnode mode first and only then do the job (or not) (#2008) +- [`ddff32b96`](https://github.com/raptor3um/raptoreum/commit/ddff32b96) Fix TransactionRecord::PrivateSendMakeCollaterals tx type (#1996) +- [`4f978a263`](https://github.com/raptor3um/raptoreum/commit/4f978a263) Drop Nx requirements for PS collaterals (#1995) +- [`a44f48743`](https://github.com/raptor3um/raptoreum/commit/a44f48743) Allow data outputs in PS collaterals (#1984) +- [`ef9a9f2d6`](https://github.com/raptor3um/raptoreum/commit/ef9a9f2d6) Fix unlocking error on "Start Mixing" (#1941) +- [`0bd8c8e43`](https://github.com/raptor3um/raptoreum/commit/0bd8c8e43) Refactor: vecTxIn -> vecOutPoints for CompactTallyItem (#1932) +- [`d7f55d508`](https://github.com/raptor3um/raptoreum/commit/d7f55d508) Switch nTimeLastSuccessfulStep from GetTimeMillis() to GetTime() (#1923) +- [`204b1fe99`](https://github.com/raptor3um/raptoreum/commit/204b1fe99) Drop unnecessary AcceptToMemoryPool in PS (and corresponding cs-main locks), just relay what we have (#1922) +- [`271c249e1`](https://github.com/raptor3um/raptoreum/commit/271c249e1) Skip next mn payments winners when selecting a MN to mix on (#1921) +- [`ca89c7b87`](https://github.com/raptor3um/raptoreum/commit/ca89c7b87) [Trivial] Update PrivateSend denominations in comments / typo fixes (#1910) +- [`b1817dd93`](https://github.com/raptor3um/raptoreum/commit/b1817dd93) Introduce CDarksendAccept class (for DSACCEPT messages) (#1875) +- [`d69ad9d61`](https://github.com/raptor3um/raptoreum/commit/d69ad9d61) Skip existing smartnode conections on mixing (#1833) +- [`1d620d1f9`](https://github.com/raptor3um/raptoreum/commit/1d620d1f9) Fix calls to AcceptToMemoryPool in PS submodules (#1823) + +### Network: +- [`fda74b4a8`](https://github.com/raptor3um/raptoreum/commit/fda74b4a8) Use correct protocol when serializing messages in reply to `getdata` (#2157) +- [`6bf389afb`](https://github.com/raptor3um/raptoreum/commit/6bf389afb) Don't drop mnb-s for outdated MNs (#2131) +- [`c60079b59`](https://github.com/raptor3um/raptoreum/commit/c60079b59) ThreadOpenSmartnodeConnections should process only one mn at a time (#2080) +- [`a648d6eff`](https://github.com/raptor3um/raptoreum/commit/a648d6eff) Drop delayed headers logic and fix duplicate initial headers sync by handling block inv correctly (#2032) +- [`99085c5b6`](https://github.com/raptor3um/raptoreum/commit/99085c5b6) swap devnet magic bytes around (#2028) +- [`a37dbd6d2`](https://github.com/raptor3um/raptoreum/commit/a37dbd6d2) Fix netfulfilledman usage (#2033) +- [`08033ffe4`](https://github.com/raptor3um/raptoreum/commit/08033ffe4) Reject Raptoreum-specific messages from obsolete peers (#1983) +- [`43671a39d`](https://github.com/raptor3um/raptoreum/commit/43671a39d) Deprecate nMnCount in mnget (#1942) +- [`451f7f071`](https://github.com/raptor3um/raptoreum/commit/451f7f071) Fix issues with mnp, mnw and dsq signatures via new spork (SPORK_6_NEW_SIGS) (#1936) +- [`048062641`](https://github.com/raptor3um/raptoreum/commit/048062641) Force smartnodes to have listen=1 and maxconnections to be at least DEFAULT_MAX_PEER_CONNECTIONS (#1935) +- [`aadec3735`](https://github.com/raptor3um/raptoreum/commit/aadec3735) Change format of gobject, store/transmit vchData instead of hex-encoded string of a string (#1934) +- [`ed712eb81`](https://github.com/raptor3um/raptoreum/commit/ed712eb81) Fix nDelayGetHeadersTime (int64_t max == never delay) (#1916) +- [`f35b5979a`](https://github.com/raptor3um/raptoreum/commit/f35b5979a) Refactor CGovernanceManager::Sync (split in two) (#1930) +- [`b5046d59c`](https://github.com/raptor3um/raptoreum/commit/b5046d59c) Dseg fixes (#1929) +- [`312088b56`](https://github.com/raptor3um/raptoreum/commit/312088b56) Fix connectivity check in CActiveSmartnode::ManageStateInitial (#1918) +- [`8f2c1998d`](https://github.com/raptor3um/raptoreum/commit/8f2c1998d) Rename vBlockHashesFromINV to vDelayedGetHeaders (#1909) +- [`4719ec477`](https://github.com/raptor3um/raptoreum/commit/4719ec477) Remove some locking in net.h/net.cpp (#1905) +- [`a6ba82ac9`](https://github.com/raptor3um/raptoreum/commit/a6ba82ac9) Use smartnode list to generate hardcoded seeds (#1892) +- [`1b1a440f4`](https://github.com/raptor3um/raptoreum/commit/1b1a440f4) Do not send raptoreum-specific requests to smartnodes before we are fully connected (#1882) +- [`1ca270ed8`](https://github.com/raptor3um/raptoreum/commit/1ca270ed8) No need for msgMakerInitProto for sporks because we loop by fully connected nodes only now (#1877) +- [`b84afb251`](https://github.com/raptor3um/raptoreum/commit/b84afb251) Allow to filter for fully connected nodes when calling CopyNodeVector (#1864) +- [`532b9fa3d`](https://github.com/raptor3um/raptoreum/commit/532b9fa3d) Use OpenNetworkConnection instead of calling ConnectNode directly in Raptoreum code (#1857) +- [`3aad9d908`](https://github.com/raptor3um/raptoreum/commit/3aad9d908) Fix logging in PushInventory (#1847) +- [`81fb931fb`](https://github.com/raptor3um/raptoreum/commit/81fb931fb) Don't delay GETHEADERS when no blocks have arrived yet in devnet (#1807) + +### Mining: +- [`ff93dd613`](https://github.com/raptor3um/raptoreum/commit/ff93dd613) Check devnet genesis block (#2057) +- [`1dbf5a0f6`](https://github.com/raptor3um/raptoreum/commit/1dbf5a0f6) Fix transaction/block versions for devnet genesis blocks (#2056) +- [`880cbf43b`](https://github.com/raptor3um/raptoreum/commit/880cbf43b) Backport fPowAllowMinDifficultyBlocks rule to DarkGravityWave (#2027) +- [`27dfed424`](https://github.com/raptor3um/raptoreum/commit/27dfed424) Bump default max block size from 750k to 2MB (#2023) +- [`79183f630`](https://github.com/raptor3um/raptoreum/commit/79183f630) Add tests for GetBlockSubsidy algorithm (#2022) + +### Wallet: +- [`0a71c693e`](https://github.com/raptor3um/raptoreum/commit/0a71c693e) Remove explicit wallet lock in SmartnodeList::StartAll() (#2106) +- [`0de79d70b`](https://github.com/raptor3um/raptoreum/commit/0de79d70b) Do not create oversized transactions (bad-txns-oversize) (#2103) +- [`0260821f8`](https://github.com/raptor3um/raptoreum/commit/0260821f8) fix SelectCoinsByDenominations (#2074) +- [`b7bd96e2b`](https://github.com/raptor3um/raptoreum/commit/b7bd96e2b) Clarify the warning displayed when encrypting HD wallet (#2002) +- [`4930bb9f5`](https://github.com/raptor3um/raptoreum/commit/4930bb9f5) Don't hold cs_storage in CKeyHolderStorage while calling functions which might lock cs_wallet (#2000) +- [`4d442376e`](https://github.com/raptor3um/raptoreum/commit/4d442376e) Limit the scope of cs_wallet lock in CPrivateSendClient::PrepareDenominate() (#1997) +- [`1d32d1c32`](https://github.com/raptor3um/raptoreum/commit/1d32d1c32) Add missing includes required for compilation with --disable-wallet flag (#1991) +- [`3f0c8723e`](https://github.com/raptor3um/raptoreum/commit/3f0c8723e) Slightly refactor AutoBackupWallet (#1927) +- [`9965d51bb`](https://github.com/raptor3um/raptoreum/commit/9965d51bb) Avoid reference leakage in CKeyHolderStorage::AddKey (#1840) +- [`c532be1c0`](https://github.com/raptor3um/raptoreum/commit/c532be1c0) Protect CKeyHolderStorage via mutex (#1834) +- [`144850657`](https://github.com/raptor3um/raptoreum/commit/144850657) Switch KeePassHttp integration to new AES lib, add tests and a note about KeePassHttp security (#1818) +- [`fa2549986`](https://github.com/raptor3um/raptoreum/commit/fa2549986) Swap iterations and fUseInstantSend parameters in ApproximateBestSubset (#1819) + +### RPC: +- [`700b7ceb7`](https://github.com/raptor3um/raptoreum/commit/700b7ceb7) RPC: dumphdinfo should throw an error when wallet isn't HD (#2134) +- [`5669fc880`](https://github.com/raptor3um/raptoreum/commit/5669fc880) Fix typos and rpc help text (#2120) +- [`806d7f049`](https://github.com/raptor3um/raptoreum/commit/806d7f049) Fix rpc tests broken by 2110 (#2118) +- [`8d8fdb433`](https://github.com/raptor3um/raptoreum/commit/8d8fdb433) sendrawtransaction no longer bypasses transaction policy limits by default (#2110) +- [`6ab1fd763`](https://github.com/raptor3um/raptoreum/commit/6ab1fd763) RPC: Add description for InstantSend-related fields of mempool entry (#2050) +- [`138441eb8`](https://github.com/raptor3um/raptoreum/commit/138441eb8) Add `forkpoint` to `getchaintips` (#2039) +- [`9b17f2b9c`](https://github.com/raptor3um/raptoreum/commit/9b17f2b9c) Convert `gobject count` output to json (by default) (#1994) +- [`4b128b1b9`](https://github.com/raptor3um/raptoreum/commit/4b128b1b9) Fix listaddressbalances (#1987) +- [`d115efacb`](https://github.com/raptor3um/raptoreum/commit/d115efacb) [RPC] Few additions to smartnodelist (#1971) +- [`9451782a0`](https://github.com/raptor3um/raptoreum/commit/9451782a0) RPC: Add `listaddressbalances` (#1972) +- [`bab543f3e`](https://github.com/raptor3um/raptoreum/commit/bab543f3e) Various RPC fixes (#1958) +- [`151152b98`](https://github.com/raptor3um/raptoreum/commit/151152b98) rpc - Update getaddednodeinfo help to remove dummy argument (#1947) +- [`3c44dde2e`](https://github.com/raptor3um/raptoreum/commit/3c44dde2e) Return JSON object for smartnode count (by default but still support old modes for now) (#1900) +- [`4bc4a7dac`](https://github.com/raptor3um/raptoreum/commit/4bc4a7dac) Fix `debug` rpc (#1897) +- [`063bc5542`](https://github.com/raptor3um/raptoreum/commit/063bc5542) Fix `smartnode list` (#1893) +- [`5a5f61872`](https://github.com/raptor3um/raptoreum/commit/5a5f61872) Shorten MN outpoint output from getvotes (#1871) +- [`86d33b276`](https://github.com/raptor3um/raptoreum/commit/86d33b276) Remove double registration of "privatesend" RPC (#1853) +- [`c2de362b9`](https://github.com/raptor3um/raptoreum/commit/c2de362b9) Actually honor fMiningRequiresPeers in getblocktemplate (#1844) +- [`1cffb8a7e`](https://github.com/raptor3um/raptoreum/commit/1cffb8a7e) Include p2pk into addressindex (#1839) + +### GUI: +- [`7ab5b4a28`](https://github.com/raptor3um/raptoreum/commit/7ab5b4a28) Update/optimize images (#2147) +- [`82805a6c6`](https://github.com/raptor3um/raptoreum/commit/82805a6c6) swap out old logo for T&C logo in Qt GUI (#2081) +- [`e9f63073d`](https://github.com/raptor3um/raptoreum/commit/e9f63073d) Warn when more than 50% of smartnodes are using newer version (#1963) +- [`653600352`](https://github.com/raptor3um/raptoreum/commit/653600352) Draw text on top of everything else in TrafficGraphWidget (#1944) +- [`118eeded6`](https://github.com/raptor3um/raptoreum/commit/118eeded6) [GUI] Create QR-code for Smartnode private key (#1970) +- [`9f2467af8`](https://github.com/raptor3um/raptoreum/commit/9f2467af8) Hide autocompleter on Enter/Return key (#1898) +- [`e30009c31`](https://github.com/raptor3um/raptoreum/commit/e30009c31) Fix qt and fontconfig depends #1884 + +### Docs: +- [`a80ef0423`](https://github.com/raptor3um/raptoreum/commit/a80ef0423) Update release notes (#2155) +- [`5e1149a65`](https://github.com/raptor3um/raptoreum/commit/5e1149a65) Update release notes (#2142) +- [`d46dc0f56`](https://github.com/raptor3um/raptoreum/commit/d46dc0f56) Update release notes (#2135) +- [`d076ad4ce`](https://github.com/raptor3um/raptoreum/commit/d076ad4ce) Update release notes and staging tree in README (#2116) +- [`ca2eae6e6`](https://github.com/raptor3um/raptoreum/commit/ca2eae6e6) 12.3 release notes draft (#2045) +- [`faeb4480a`](https://github.com/raptor3um/raptoreum/commit/faeb4480a) Update manpages with ./contrib/devtools/gen-manpages.sh (#2088) +- [`4148b8200`](https://github.com/raptor3um/raptoreum/commit/4148b8200) Release notes cleanup (#2034) +- [`d2c46a6a3`](https://github.com/raptor3um/raptoreum/commit/d2c46a6a3) Update protocol-documentation.md (#1964) +- [`4db8483d4`](https://github.com/raptor3um/raptoreum/commit/4db8483d4) [Docs] Doxyfile Project version update (#1938) +- [`6e022c57b`](https://github.com/raptor3um/raptoreum/commit/6e022c57b) Remove src/drafted folder (#1907) +- [`0318c76ba`](https://github.com/raptor3um/raptoreum/commit/0318c76ba) Update links and references to current communication channels (#1906) +- [`e23861c0e`](https://github.com/raptor3um/raptoreum/commit/e23861c0e) [Trivial] RPC Typos / markdown formatting (#1830) +- [`3dc62106b`](https://github.com/raptor3um/raptoreum/commit/3dc62106b) [Docs] Doxygen config update (#1796) + +### Other fixes and improvements: +- [`4dbde218b`](https://github.com/raptor3um/raptoreum/commit/4dbde218b) Fix p2pkh tests asserts (#2153) +- [`26c891f67`](https://github.com/raptor3um/raptoreum/commit/26c891f67) Fix block value/payee validation in lite mode (#2148) +- [`9af9d57b4`](https://github.com/raptor3um/raptoreum/commit/9af9d57b4) Release 0.12.3 (#2145) +- [`8e6364694`](https://github.com/raptor3um/raptoreum/commit/8e6364694) Bump SERIALIZATION_VERSION_STRINGs (#2136) +- [`641070521`](https://github.com/raptor3um/raptoreum/commit/641070521) Fix 2 small issues in sporks module (#2133) +- [`97b9b4fed`](https://github.com/raptor3um/raptoreum/commit/97b9b4fed) Bump nMinimumChainWork, defaultAssumeValid and checkpoints (#2130) +- [`1c9917e22`](https://github.com/raptor3um/raptoreum/commit/1c9917e22) Fix CVE-2018-12356 by hardening the regex (#2126) +- [`b7c326115`](https://github.com/raptor3um/raptoreum/commit/b7c326115) Do not create mnb until sync is finished (#2122) +- [`b98643c27`](https://github.com/raptor3um/raptoreum/commit/b98643c27) Split sentinel expiration in CSmartnode::Check() in two parts (timeout and version) (#2121) +- [`836e10471`](https://github.com/raptor3um/raptoreum/commit/836e10471) Bump proto to 70210 (#2109) +- [`23ba94b37`](https://github.com/raptor3um/raptoreum/commit/23ba94b37) Bump remaining min protocols (#2097) +- [`9299a84b1`](https://github.com/raptor3um/raptoreum/commit/9299a84b1) Bump few consts (#2096) +- [`7b43720f0`](https://github.com/raptor3um/raptoreum/commit/7b43720f0) Fix copying of final binaries into raptoreumcore-binaries (#2090) +- [`cc593615e`](https://github.com/raptor3um/raptoreum/commit/cc593615e) Bump copyright year to 2018 (#2087) +- [`2129ee4d8`](https://github.com/raptor3um/raptoreum/commit/2129ee4d8) Add docker support when doing Gitian builds (#2084) +- [`6a1456ef4`](https://github.com/raptor3um/raptoreum/commit/6a1456ef4) Update gitian key for codablock (#2085) +- [`ab96a6af6`](https://github.com/raptor3um/raptoreum/commit/ab96a6af6) Update gitian keys, script and doc (#2082) +- [`5d057cf66`](https://github.com/raptor3um/raptoreum/commit/5d057cf66) Add string_cast benchmark (#2073) +- [`cf71f5767`](https://github.com/raptor3um/raptoreum/commit/cf71f5767) Fix potential DoS vector for smartnode payments (#2071) +- [`febdc2116`](https://github.com/raptor3um/raptoreum/commit/febdc2116) Fix `nl` locale alias (#2061) +- [`1264a5577`](https://github.com/raptor3um/raptoreum/commit/1264a5577) Fix spork signature check for new nodes after SPORK_6_NEW_SIGS is switched to ON (#2060) +- [`41680f4d9`](https://github.com/raptor3um/raptoreum/commit/41680f4d9) small cleanup in a few places (#2058) +- [`741b94875`](https://github.com/raptor3um/raptoreum/commit/741b94875) Translations201804 (#2012) +- [`8e24b087b`](https://github.com/raptor3um/raptoreum/commit/8e24b087b) replace boost iterators in raptoreum-specific code (#2048) +- [`7719b7ec2`](https://github.com/raptor3um/raptoreum/commit/7719b7ec2) Update BIP147 deployment times, nMinimumChainWork and defaultAssumeValid (#2030) +- [`b07503f01`](https://github.com/raptor3um/raptoreum/commit/b07503f01) Some cleanup (mostly trivial) (#2038) +- [`f8e5c5d56`](https://github.com/raptor3um/raptoreum/commit/f8e5c5d56) Simplify spork defaults by using a map (#2037) +- [`6dd8304a5`](https://github.com/raptor3um/raptoreum/commit/6dd8304a5) Remove duplication of "class CBlockIndex;" (#2036) +- [`4ea790377`](https://github.com/raptor3um/raptoreum/commit/4ea790377) Raptoreumify lib names (#2035) +- [`53093c65b`](https://github.com/raptor3um/raptoreum/commit/53093c65b) Run tests in mocked time (#2031) +- [`f7b9aae27`](https://github.com/raptor3um/raptoreum/commit/f7b9aae27) Correctly update pindexBestHeader and pindexBestInvalid in InvalidateBlock (#2029) +- [`8b09e779b`](https://github.com/raptor3um/raptoreum/commit/8b09e779b) Bump testnet checkpoint and nMinimumChainWork/defaultAssumeValid params (#2026) +- [`eecc69223`](https://github.com/raptor3um/raptoreum/commit/eecc69223) Fix a very ancient bug from mid 2015 (#2021) +- [`72a225b9b`](https://github.com/raptor3um/raptoreum/commit/72a225b9b) Few fixes for lite mode (#2014) +- [`c7e9ea9fb`](https://github.com/raptor3um/raptoreum/commit/c7e9ea9fb) Avoid repeating the full scan in CSmartnodeMan::UpdateLastPaid() on non-MNs (#1985) +- [`f28a58e0a`](https://github.com/raptor3um/raptoreum/commit/f28a58e0a) Refactor and fix restart (#1999) +- [`7248700b3`](https://github.com/raptor3um/raptoreum/commit/7248700b3) Add missing cs_main locks (#1998) +- [`9e98c856f`](https://github.com/raptor3um/raptoreum/commit/9e98c856f) A pack of small fixes (#1992) +- [`19ea1a791`](https://github.com/raptor3um/raptoreum/commit/19ea1a791) Use operator[] instead of emplace in CSmartnodePayments::AddPaymentVote (#1980) +- [`ca3655f49`](https://github.com/raptor3um/raptoreum/commit/ca3655f49) Fix some (potential dead)locks (#1977) +- [`2a7e6861d`](https://github.com/raptor3um/raptoreum/commit/2a7e6861d) Include "clientversion.h" in rpc/smartnode.cpp (#1979) +- [`ef1a86c3e`](https://github.com/raptor3um/raptoreum/commit/ef1a86c3e) Add dummy CMakeLists.txt file to make development with CLion easier (#1978) +- [`a9d8e2c5d`](https://github.com/raptor3um/raptoreum/commit/a9d8e2c5d) [Init] Avoid segfault when called with -enableinstantsend=0 (#1976) +- [`3200eae9b`](https://github.com/raptor3um/raptoreum/commit/3200eae9b) Don't use short version of 'tinyformat/fmt' namespace in util.h (#1975) +- [`97a07cbc4`](https://github.com/raptor3um/raptoreum/commit/97a07cbc4) Refactor `CSmartnodePayment*` (#1974) +- [`4ffa7bac0`](https://github.com/raptor3um/raptoreum/commit/4ffa7bac0) Introduce DIP0001Height (#1973) +- [`611879aa6`](https://github.com/raptor3um/raptoreum/commit/611879aa6) Use spork addresses instead of raw keys and allow changing them on startup (#1969) +- [`9ef38c6d7`](https://github.com/raptor3um/raptoreum/commit/9ef38c6d7) Switch CNetFulfilledRequestManager and CSmartnodeMan maps/funcs to CService (#1967) +- [`929c1584a`](https://github.com/raptor3um/raptoreum/commit/929c1584a) Rename CheckPreviousBlockVotes to CheckBlockVotes and adjust its log output a bit (#1965) +- [`bf0854e58`](https://github.com/raptor3um/raptoreum/commit/bf0854e58) Swap `expired` and `sentinel_expired` states in order (#1961) +- [`9876207ce`](https://github.com/raptor3um/raptoreum/commit/9876207ce) Multiple devnet fixes (#1960) +- [`e37b6c7da`](https://github.com/raptor3um/raptoreum/commit/e37b6c7da) Fix BIP147 deployment threshold parameter (#1955) +- [`106276a3e`](https://github.com/raptor3um/raptoreum/commit/106276a3e) Adjust/fix log output (#1954) +- [`0abd1894e`](https://github.com/raptor3um/raptoreum/commit/0abd1894e) Call CheckMnbAndUpdateSmartnodeList when starting MN (#1945) +- [`e23f61822`](https://github.com/raptor3um/raptoreum/commit/e23f61822) Make TrafficGraphDataTests more general (#1943) +- [`5b1c4d8a1`](https://github.com/raptor3um/raptoreum/commit/5b1c4d8a1) Few (mostly trivial) cleanups and fixes (#1940) +- [`99273f63a`](https://github.com/raptor3um/raptoreum/commit/99273f63a) Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (#1937) +- [`c65613350`](https://github.com/raptor3um/raptoreum/commit/c65613350) Switch smartnode id in Raptoreum data structures from CTxIn to COutPoint (#1933) +- [`2ea6f7d82`](https://github.com/raptor3um/raptoreum/commit/2ea6f7d82) Use `override` keyword for overriden class member functions (#1644) +- [`d5ef77ba9`](https://github.com/raptor3um/raptoreum/commit/d5ef77ba9) Refactor: use constant refs and `Ret` suffix (#1928) +- [`2e04864b2`](https://github.com/raptor3um/raptoreum/commit/2e04864b2) Replace boost::lexical_cast with atoi (#1926) +- [`0f4d963ba`](https://github.com/raptor3um/raptoreum/commit/0f4d963ba) Add DSHA256 and X11 benchmarks, refactor names of other algo benchmarks to group them together (#1925) +- [`4528c735f`](https://github.com/raptor3um/raptoreum/commit/4528c735f) Replace some instantsend/privatesend magic numbers with constants (#1924) +- [`120893c63`](https://github.com/raptor3um/raptoreum/commit/120893c63) Update timeLastMempoolReq when responding to MEMPOOL request (#1904) +- [`bb20b4e7b`](https://github.com/raptor3um/raptoreum/commit/bb20b4e7b) Few cleanups after backporting (#1903) +- [`a7fa07a30`](https://github.com/raptor3um/raptoreum/commit/a7fa07a30) Drop BOOST_FOREACH and use references in loops (const ref where applicable, Raptoreum code only) (#1899) +- [`e0b6988a4`](https://github.com/raptor3um/raptoreum/commit/e0b6988a4) Various fixes and refactoring for Cache*Map classes (#1896) +- [`99b2789a7`](https://github.com/raptor3um/raptoreum/commit/99b2789a7) Fix DeserializeAndCheckBlockTest benchmark and store hashDevnetGenesisBlock in `consensus` (#1888) +- [`88646bd0d`](https://github.com/raptor3um/raptoreum/commit/88646bd0d) Rename `fMasterNode` to `fSmartnodeMode` to clarify its meaning and to avoid confusion with `CNode::fSmartnode` (#1874) +- [`f6d98422c`](https://github.com/raptor3um/raptoreum/commit/f6d98422c) Silence ratecheck_test (#1873) +- [`9cee4193b`](https://github.com/raptor3um/raptoreum/commit/9cee4193b) Separate .h generation from .json/.raw for different modules (#1870) +- [`83957f2d3`](https://github.com/raptor3um/raptoreum/commit/83957f2d3) Fix alertTests.raw.h (again) (#1869) +- [`c13afaad8`](https://github.com/raptor3um/raptoreum/commit/c13afaad8) Fix alertTests.raw.h generation (#1868) +- [`a46bf120b`](https://github.com/raptor3um/raptoreum/commit/a46bf120b) Don't directly call "wine test_raptoreum.exe" and let "make check" handle it (#1841) +- [`e805f790e`](https://github.com/raptor3um/raptoreum/commit/e805f790e) Automatically build and push docker image to docker.io/raptoreum/raptoreumd-develop (#1809) +- [`d9058aa04`](https://github.com/raptor3um/raptoreum/commit/d9058aa04) Increase travis timeout for "wine src/test/test_raptoreum.exe" call (#1820) +- [`10786fe8e`](https://github.com/raptor3um/raptoreum/commit/10786fe8e) Use travis_wait for "wine test_raptoreum.exe" call to fix timeouts (#1812) +- [`4bce3bf8b`](https://github.com/raptor3um/raptoreum/commit/4bce3bf8b) Fix crash on exit when -createwalletbackups=0 (#1810) +- [`cd9c6994c`](https://github.com/raptor3um/raptoreum/commit/cd9c6994c) Implement named devnets (#1791) +- [`ebbd26a05`](https://github.com/raptor3um/raptoreum/commit/ebbd26a05) Drop IsInputAssociatedWithPubkey and optimize CheckOutpoint (#1783) + +### Backports and related fixes: +- See commit list [here](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3-backports.md) + + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alexander Block +- Chris Adam +- Codarren Velvindron +- crowning- +- gladcow +- InhumanPerfection +- Kamil Woźniak +- Nathan Marley +- Oleg Girko +- PaulieD +- Semen Martynov +- Spencer Lievens +- thephez +- UdjinM6 + +As well as Bitcoin Core Developers and everyone who submitted issues, +reviewed pull requests or helped translating on +[Transifex](https://www.transifex.com/projects/p/raptoreum/). + + +Older releases +============== + +Raptoreum was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of smartnodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Raptoreum. + +Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Jun/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 + diff --git a/doc/release-notes/raptoreum/release-notes-0.12.3.2.md b/doc/release-notes/dash/release-notes-0.12.3.2.md similarity index 77% rename from doc/release-notes/raptoreum/release-notes-0.12.3.2.md rename to doc/release-notes/dash/release-notes-0.12.3.2.md index b74444906f..3aa097e59d 100644 --- a/doc/release-notes/raptoreum/release-notes-0.12.3.2.md +++ b/doc/release-notes/dash/release-notes-0.12.3.2.md @@ -10,7 +10,7 @@ improvements. Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -67,23 +67,23 @@ connectivity on devnets which are using nodes with multiple different ports. 0.12.3.2 Change log =================== -See detailed [change log](https://github.com/raptoreum/raptoreum/compare/v0.12.3.1...raptoreum:v0.12.3.2) below. +See detailed [change log](https://github.com/raptor3um/raptoreum/compare/v0.12.3.1...raptoreum:v0.12.3.2) below. ### Network: -- [`2474d9cb8`](https://github.com/raptoreum/raptoreum/commit/2474d9cb8) Sync mn list and mnw list from 3 peers max (#2169) -- [`2c303cdb1`](https://github.com/raptoreum/raptoreum/commit/2c303cdb1) A few devnet related fixes (#2168) +- [`2474d9cb8`](https://github.com/raptor3um/raptoreum/commit/2474d9cb8) Sync mn list and mnw list from 3 peers max (#2169) +- [`2c303cdb1`](https://github.com/raptor3um/raptoreum/commit/2c303cdb1) A few devnet related fixes (#2168) ### Mining: -- [`2ba0c7760`](https://github.com/raptoreum/raptoreum/commit/2ba0c7760) Add tests for special rules for slow blocks on devnet/testnet (#2176) -- [`b9a83d2ae`](https://github.com/raptoreum/raptoreum/commit/b9a83d2ae) Allow mining min diff for very slow (2h+) blocks (#2175) -- [`050cabdf5`](https://github.com/raptoreum/raptoreum/commit/050cabdf5) Adjust diff for slow testnet/devnet blocks a bit smoother (#2161) +- [`2ba0c7760`](https://github.com/raptor3um/raptoreum/commit/2ba0c7760) Add tests for special rules for slow blocks on devnet/testnet (#2176) +- [`b9a83d2ae`](https://github.com/raptor3um/raptoreum/commit/b9a83d2ae) Allow mining min diff for very slow (2h+) blocks (#2175) +- [`050cabdf5`](https://github.com/raptor3um/raptoreum/commit/050cabdf5) Adjust diff for slow testnet/devnet blocks a bit smoother (#2161) ### GUI: -- [`7b9919d18`](https://github.com/raptoreum/raptoreum/commit/7b9919d18) Fix issues with selections on Smartnode tab (#2170) -- [`c4698d5f3`](https://github.com/raptoreum/raptoreum/commit/c4698d5f3) Make PS Buttons not react to spacebar (#2154) +- [`7b9919d18`](https://github.com/raptor3um/raptoreum/commit/7b9919d18) Fix issues with selections on Smartnode tab (#2170) +- [`c4698d5f3`](https://github.com/raptor3um/raptoreum/commit/c4698d5f3) Make PS Buttons not react to spacebar (#2154) ### Other: -- [`f833e2ed6`](https://github.com/raptoreum/raptoreum/commit/f833e2ed6) Bump to 0.12.3.2 (#2173) +- [`f833e2ed6`](https://github.com/raptor3um/raptoreum/commit/f833e2ed6) Bump to 0.12.3.2 (#2173) Credits @@ -121,15 +121,15 @@ Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Jun/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Jun/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/raptoreum/release-notes-0.12.3.3.md b/doc/release-notes/dash/release-notes-0.12.3.3.md similarity index 79% rename from doc/release-notes/raptoreum/release-notes-0.12.3.3.md rename to doc/release-notes/dash/release-notes-0.12.3.3.md index b656c5f492..d0a131567a 100644 --- a/doc/release-notes/raptoreum/release-notes-0.12.3.3.md +++ b/doc/release-notes/dash/release-notes-0.12.3.3.md @@ -9,7 +9,7 @@ This is a critical bugfix release. Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -52,7 +52,7 @@ can cause node receiving a block to crash https://github.com/bitcoin/bitcoin/pul 0.12.3.3 Change log =================== -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.12.3.2...raptoreum:v0.12.3.3). +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.12.3.2...raptoreum:v0.12.3.3). Credits ======= @@ -84,16 +84,16 @@ Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Jun/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Jun/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/raptoreum/release-notes-0.12.3.4.md b/doc/release-notes/dash/release-notes-0.12.3.4.md similarity index 79% rename from doc/release-notes/raptoreum/release-notes-0.12.3.4.md rename to doc/release-notes/dash/release-notes-0.12.3.4.md index 61eb7221fb..49f7fb9ea6 100644 --- a/doc/release-notes/raptoreum/release-notes-0.12.3.4.md +++ b/doc/release-notes/dash/release-notes-0.12.3.4.md @@ -9,7 +9,7 @@ This is an optional release and only contains changes for testnet. It is not req Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -54,7 +54,7 @@ When deployed on testnet, it is required to start with a fresh data directory or 0.12.3.4 Change log =================== -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.12.3.3...raptoreum:v0.12.3.4). +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.12.3.3...raptoreum:v0.12.3.4). Python Support -------------- @@ -91,17 +91,17 @@ Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/dash/release-notes-0.13.0.md b/doc/release-notes/dash/release-notes-0.13.0.md new file mode 100644 index 0000000000..0d31171759 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.13.0.md @@ -0,0 +1,749 @@ +Raptoreum Core version 0.13.0.0 +========================== + +Release is now available from: + + + +This is a new major version release, bringing new features, various bugfixes 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/Raptoreum-Qt (on Mac) or +raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation you will +have to reindex (start with -reindex-chainstate or -reindex) to make sure +your wallet has all the new data synced. + +Downgrade warning +----------------- + +### Downgrade to a version < 0.13.0.0 + +Downgrading to a version smaller than 0.13 is only supported as long as DIP2/DIP3 +has not been activated. Activation will happen when enough miners signal compatibility +through a BIP9 (bit 3) deployment. + +Notable changes +=============== + +DIP0002 - Special Transactions +------------------------------ +Currently, new features and consensus mechanisms have to be implemented on top of the restrictions +imposed by the simple nature of transactions. Since classical transactions can only carry inputs +and outputs, they are most useful for financial transactions (i.e. transfers of quantities of Raptoreum +between addresses on the distributed ledger). These inputs and outputs carry scripts and signatures +which are used to authorize and validate the transaction. + +To implement new on-chain features and consensus mechanisms which do not fit into this concept of +financial transactions, it is often necessary to misuse the inputs/outputs and their corresponding +scripts to add additional data and meaning to a transaction. For example, new opcodes would have +to be introduced to mark a transaction as something special and add a payload. In other cases, +OP_RETURN has been misused to store data on-chain. + +The introduction of special transactions will require the whole Raptoreum ecosystem to perform a one-time +mandatory update of all the software and libraries involved. Software and libraries will have to be +changed so that they can differentiate between classical transactions and special transactions. +Deserialization of a classical transaction remains unchanged. Deserialization of a special transaction +requires the software/library to at least implement skipping and ignoring the extra_payload field. +Validation and processing of the inputs and outputs of a special transaction must remain identical to +classical transactions. + +Read more: https://github.com/raptor3um/dips/blob/master/dip-0002.md + +DIP0003 - Deterministic Smartnode Lists +---------------------------------------- +This DIP provides on-chain consensus for smartnode lists that in turn allow for deterministic quorum +derivation and service scoring of smartnode rewards. + +In the previous system, each node maintained its own individual smartnode list. Smartnodes gained +entry to that smartnode list after the owner created a 1000 Raptoreum UTXO and the smartnode broadcast +a "smartnode broadcast/announcement" P2P message. This in turn set the smartnode to a PRE_ENABLED +state in the list maintained by each node. Smartnodes then regularly broadcasted ping messages to +keep the smartnode in ENABLED state. + +The previous system was maintained with consensus mechanisms that predated Satoshi Nakamoto’s solution +to the Byzantine Generals Problem. This meant that each node needed to maintain their own individual +smartnode list with P2P messages and not a blockchain based solution. Due to the nature of the P2P +system, there was no guarantee that nodes would come to the same conclusion on what the smartnode +list ought to look like. Discrepancies might, for example, occur due to a different order of message +reception or if messages had not been received at all. This posed some risks in regard to consensus +and limited the possible uses of quorums by the system. + +Additionally, the previous system required a complicated and failure prone "smartnode sync" after +the initial startup of the node. After the blockchain was synced, the node would request the current +smartnode list, the reward payment votes, and then verify the received list. This process tended to +take an unnecessarily long amount of time and sometimes resulted in failure. + +In the new system, the smartnode list is derived entirely from information found on-chain. New +smartnodes are added by new special transactions called Provider Registration Transactions +(abbreviated as ProRegTx). They are only removed by spending the collateral. A ProRegTx is a special +transaction which includes either a 1000-Raptoreum collateral payment or a reference to it, along with +other payload information (DIP0002). + +The new system is going to be activated via combination of a BIP9-like deployment (bit 3) and new spork +(`SPORK_15_DETERMINISTIC_MNS_ENABLED`). + +Read more: https://github.com/raptor3um/dips/blob/master/dip-0003.md +Upgrade instructions: https://docs.raptoreum.org/DIP3-smartnode-upgrade + +DIP0004 - Simplified Verification of Deterministic Smartnode Lists +------------------------------------------------------------------- +A verifiable and correct smartnode list is foundational to many Raptoreum features, including verification +of an InstantSend transaction, mixing in PrivateSend and many features of Evolution. The deterministic +smartnode lists introduced by DIP0003 enable full derivation and verification of a smartnode list via +on-chain data. This, however, requires the full chain to be available to construct or verify this list. +A SPV client does not have the full chain and thus would have to rely on a list provided by one or more +nodes in the network. This provided list must be verifiable by the SPV client without needing the full +chain. This DIP proposes additions to the block’s coinbase transaction and new P2P messages to get and +update a smartnode list with additional proof data. + +Read more: https://github.com/raptor3um/dips/blob/master/dip-0004.md + +Mining +------ +Please note that smartnode payments in `getblocktemplate` rpc are now returned as an array and not as +a single object anymore. Make sure to apply corresponding changes to your pool software. + +Also, deterministic smartnodes can now set their payout address to a P2SH address. The most common use +case for P2SH is multisig but script can be pretty much anything. If your pool software doesn't recognize +P2SH addresses, the simplest way to fix it is to use `script` field which shows scriptPubKey for each +entry of smartnode payments array in `getblocktemplate`. + +And finally, after DIP0003 activation your pool software must be able to produce Coinbase Special +Transaction https://github.com/raptor3um/dips/blob/master/dip-0004.md#coinbase-special-transaction. +Use `coinbase_payload` from `getblocktemplate` to get extra payload needed to construct this transaction. + +PrivateSend +----------- +With further refactoring of PrivateSend code it became possible to implement mixing in few parallel +mixing sessions at once from one single wallet. You can set number of mixing sessions via +`privatesendsessions` cmd-line option or raptoreum.conf. You can pick any number of sessions between 1 and 10, +default is 4 which should be good enough for most users. For this feature to work you should also make +sure that `privatesendmultisession` is set to `1` via cmd-line or `Enable PrivateSend multi-session` is +enabled in GUI. + +Introducing parallel mixing sessions should speed mixing up which makes it reasonable to add a new +mixing denom (0.00100001 RAPTOREUM) now while keeping all the old ones too. It also makes sense to allow more +mixing rounds now, so the new default number of rounds is 4 and the maximum number of rounds is 16 now. + +You can also adjust rounds and amount via `setprivatesendrounds` and `setprivatesendamount` RPC commands +which override corresponding cmd-line params (`privatesendrounds` and `privatesendamount` respectively). + +NOTE: Introducing the new denom and a couple of other changes made it incompatible with mixing on +smartnodes running on pre-0.13 software. Please keep using 0.12.3 local wallet to mix your coins until +there is some significant number of smartnodes running on version 0.13 to make sure you have enough +smartnodes to choose from when the wallet picks one to mix funds on. + +InstantSend +----------- +With further improvements of networking code it's now possible to handle more load, so we are changing +InstantSend to be always-on for so called "simple txes" - transactions with 4 or less inputs. Such +transactions will be automatically locked even if they only pay minimal fee. According to stats, this +means that up to 90% of currently observed transactions will became automatically locked via InstantSend +with no additional cost to end users or any additional effort from wallet developers or other service +providers. + +This feature is going to be activated via combination of a BIP9-like deployment (we are reusing bit 3) +and new spork (`SPORK_16_INSTANTSEND_AUTOLOCKS`). + +Historically, InstantSend transactions were shown in GUI and RPC with more confirmations than regular ones, +which caused quite a bit of confusion. This will no longer be the case, instead we are going to show real +blockchain confirmations only and a separate indicator to show if transaction was locked via InstantSend +or not. For GUI it's color highlight and a new column, for RPC commands - `instantlock` field and `addlocked` +param. + +One of the issues with InstantSend adoption by SPV wallets (besides lack of Deterministic Smartnode List) +was inability to filter all InstantSend messages the same way transactions are filtered. This should be +fixed now and SPV wallets should only get lock votes for transactions they are interested in. + +Another popular request was to preserve information about InstantSend locks between wallet restarts, which +is now implemented. This data is stored in a new cache file `instantsend.dat`. You can safely remove it, +if you don't need information about recent transaction locks for some reason (NOTE: make sure it's not one +of your wallets!). + +We also added new ZMQ notifications for double-spend attempts which try to override transactions locked +via InstantSend - `zmqpubrawinstantsenddoublespend` and `zmqpubhashinstantsenddoublespend`. + +Sporks +------ +There are a couple of new sporks introduced in this version `SPORK_15_DETERMINISTIC_MNS_ENABLED` (block +based) and `SPORK_16_INSTANTSEND_AUTOLOCKS` (timestamp based). There is aslo `SPORK_17_QUORUM_DKG_ENABLED` +(timestamp based) which is going to be used on testnet only for now. + +Spork data is stored in a new cache file (`sporks.dat`) now. + +Governance +---------- +Introduction of Deterministic Smartnodes requires replacing of the old smartnode private key which was used +both for operating a MN and for voting on proposals with a set of separate keys, preferably fresh new ones. +This means that votes casted for proposals by Smartnode Owners via the old system will no longer be valid +after DIP0003 activation and must be re-casted using the new voting key. + +Also, you can now get notifications about governance objects or votes via new ZMQ notifications: +`zmqpubhashgovernancevote`, `zmqpubhashgovernanceobject`, `zmqpubrawgovernancevote` and +`zmqpubhashgovernanceobject`. + +GUI changes +----------- +Smartnodes tab has a new section dedicated to DIP0003 registered smartnodes now. After DIP0003 activation +this will be the only section shown here, the two old sections for non-deterministic smartnodes will no +longer be available. + +There are changes in the way InstantSend transactions are displayed, see `InstantSend` section above. + +Some other (mostly minor) issues were also fixed, see `GUI` part of `0.13.0.0 Change log` section below for +detailed list of fixes. + +RPC changes +----------- +There are a few changes in existing RPC interfaces in this release: +- `gobject prepare` allows to send proposal transaction as an InstantSend one and also accepts an UTXO reference to spend; +- `smartnode status` and `smartnode list` show some DIP0003 related info now; +- `previousbits` and `coinbase_payload` fields were added in `getblocktemplate`; +- `getblocktemplate` now returns an array for smartnode payments instead of a single object (miners and mining pools have to upgrade their software to support multiple smartnode payees); +- smartnode and superblock payments in `getblocktemplate` show payee scriptPubKey in `script` field in addition to payee address in `payee`; +- `getblockchaininfo` shows BIP9 deployment progress; +- `help command subCommand` should give detailed help for subcommands e.g. `help protx list`; +- `compressed` option in `smartnode genkey`; +- `dumpwallet` shows info about dumped wallet and warns user about security issues; +- `instantlock` field added in output of `getrawmempool`, `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry`, +`getrawtransaction`, `decoderawtransaction`, `gettransaction`, `listtransactions`, `listsinceblock`; +- `addlocked` param added to `getreceivedbyaddress`, `getreceivedbyaccount`, `getbalance`, `sendfrom`, `sendmany`, +`listreceivedbyaddress`, `listreceivedbyaccount`, `listaccounts`. + +There are also new RPC commands: +- `protx` (`list`, `info`, `diff`, `register`, `register_fund`, `register_prepare`, +`register_submit`, `update_service`, `update_registrar`, `revoke`); +- `bls generate`; +- `setprivatesendrounds`; +- `setprivatesendamount`. + +See `help command` in rpc for more info. + +Command-line options +-------------------- + +New cmd-line options: +- `smartnodeblsprivkey`; +- `minsporkkeys`; +- `privatesendsessions`; +- `zmqpubrawinstantsenddoublespend`; +- `zmqpubhashinstantsenddoublespend`; +- `zmqpubhashgovernancevote`; +- `zmqpubhashgovernanceobject`; +- `zmqpubrawgovernancevote`; +- `zmqpubhashgovernanceobject`. + +Some of them are Devnet only: +- `budgetparams`; +- `minimumdifficultyblocks`; +- `highsubsidyblocks`; +- `highsubsidyfactor`. + +Few cmd-line options are no longer supported: +- `instantsenddepth`; +- `mempoolreplacement`. + +See `Help -> Command-line options` in Qt wallet or `raptoreumd --help` for more info. + +Lots of refactoring and bug fixes +--------------------------------- + +A lot of refactoring, code cleanups and other small fixes were done in this release. + +0.13.0.0 Change log +=================== + +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.12.3.4...raptoreum:v0.13.0.0). + +### Network +- [`03a6865d9`](https://github.com/raptor3um/raptoreum/commit/03a6865d9) Enforce correct port on mainnet for DIP3 MNs (#2576) +- [`3f26ed78c`](https://github.com/raptor3um/raptoreum/commit/3f26ed78c) Backport network checks missing in CActiveDeterministicSmartnodeManager::Init() (#2572) +- [`7c7500864`](https://github.com/raptor3um/raptoreum/commit/7c7500864) Also stop asking other peers for a TX when ProcessTxLockRequest fails (#2529) +- [`19a6f718d`](https://github.com/raptor3um/raptoreum/commit/19a6f718d) Don't respond with getdata for legacy inv types when spork15 is active (#2528) +- [`22dcec71a`](https://github.com/raptor3um/raptoreum/commit/22dcec71a) Punish nodes which keep requesting and then rejecting blocks (#2518) +- [`a18ca49a2`](https://github.com/raptor3um/raptoreum/commit/a18ca49a2) Disconnect peers with version < 70212 after DIP3 activation via BIP9 (#2497) +- [`a57e9dea7`](https://github.com/raptor3um/raptoreum/commit/a57e9dea7) Fix filtering of the lock votes for SPV nodes. (#2468) +- [`c6cf4d9a4`](https://github.com/raptor3um/raptoreum/commit/c6cf4d9a4) Relay txes through MN network faster than through regular nodes (#2397) +- [`e66c4e184`](https://github.com/raptor3um/raptoreum/commit/e66c4e184) Don't revert to INV based block announcements when the previous block is the devnet genesis block (#2388) +- [`b5142ee2c`](https://github.com/raptor3um/raptoreum/commit/b5142ee2c) Implement RemoveAskFor to indicate that we're not interested in an item anymore (#2384) +- [`53e12b7b4`](https://github.com/raptor3um/raptoreum/commit/53e12b7b4) Don't bail out from ProcessSmartnodeConnections in regtest (#2368) +- [`31759a44d`](https://github.com/raptor3um/raptoreum/commit/31759a44d) Fix tx inv throughput (#2300) +- [`9d90b4fa4`](https://github.com/raptor3um/raptoreum/commit/9d90b4fa4) Honor filterInventoryKnown for non-tx/non-block items (#2292) +- [`6764dafec`](https://github.com/raptor3um/raptoreum/commit/6764dafec) Skip initial smartnode list sync if spork 15 is active +- [`fced9a4b8`](https://github.com/raptor3um/raptoreum/commit/fced9a4b8) Ban peers that send us MNLISTDIFF messages +- [`d3ac86206`](https://github.com/raptor3um/raptoreum/commit/d3ac86206) Implement GETMNLISTDIFF and MNLISTDIFF P2P messages +- [`40eee1775`](https://github.com/raptor3um/raptoreum/commit/40eee1775) Fix sync in regtest (again) (#2241) +- [`c4ee2c89e`](https://github.com/raptor3um/raptoreum/commit/c4ee2c89e) Fix mnsync in regtest (#2202) + +### Mining +- [`f96563462`](https://github.com/raptor3um/raptoreum/commit/f96563462) Fix check for nTemporaryTestnetForkDIP3Height (#2508) +- [`80656038f`](https://github.com/raptor3um/raptoreum/commit/80656038f) Bump nTemporaryTestnetForkHeight to 274000 (#2498) +- [`1c25356ff`](https://github.com/raptor3um/raptoreum/commit/1c25356ff) Allow to use low difficulty and higher block rewards for devnet (#2369) +- [`3cc4ac137`](https://github.com/raptor3um/raptoreum/commit/3cc4ac137) Fix crash bug with duplicate inputs within a transaction (#2302) +- [`e6b699bc2`](https://github.com/raptor3um/raptoreum/commit/e6b699bc2) Enforce MN and superblock payments in same block +- [`c7f75afdd`](https://github.com/raptor3um/raptoreum/commit/c7f75afdd) Fix nulldummy tests by creating correct DIP4 coinbase transactions +- [`bcc071957`](https://github.com/raptor3um/raptoreum/commit/bcc071957) Calculate and enforce DIP4 smartnodes merkle root in CbTx +- [`0a086898f`](https://github.com/raptor3um/raptoreum/commit/0a086898f) Implement and enforce CbTx with correct block height and deprecate BIP34 + +### RPC +- [`a22f1bffe`](https://github.com/raptor3um/raptoreum/commit/a22f1bffe) Remove support for "0" as an alternative to "" when the default is requested (#2622) (#2624) +- [`18e1edabf`](https://github.com/raptor3um/raptoreum/commit/18e1edabf) Backport 2618 to v0.13.0.x (#2619) +- [`0dce846d5`](https://github.com/raptor3um/raptoreum/commit/0dce846d5) Add an option to use specific address as a source of funds in protx rpc commands (otherwise use payoutAddress/operatorPayoutAddress) (#2581) +- [`e71ea29e6`](https://github.com/raptor3um/raptoreum/commit/e71ea29e6) Add ownerAddr and votingAddr to CDeterministicMNState::ToJson (#2571) +- [`999a51907`](https://github.com/raptor3um/raptoreum/commit/999a51907) Fix optional revocation reason parameter for "protx revoke" and a few help strings (#2568) +- [`c08926146`](https://github.com/raptor3um/raptoreum/commit/c08926146) Unify "protx list" options (#2559) +- [`e9f7142ed`](https://github.com/raptor3um/raptoreum/commit/e9f7142ed) Bump PROTOCOL_VERSION and DMN_PROTO_VERSION to 70213 (#2557) +- [`818f0f464`](https://github.com/raptor3um/raptoreum/commit/818f0f464) Allow consuming specific UTXO in gobject prepare command (#2482) +- [`1270b7122`](https://github.com/raptor3um/raptoreum/commit/1270b7122) Use a verbosity instead of two verbose parameters (#2506) +- [`f6f6d075d`](https://github.com/raptor3um/raptoreum/commit/f6f6d075d) Still support "protx list" and "protx diff" when wallet is disabled at compile time (#2511) +- [`5a3f64310`](https://github.com/raptor3um/raptoreum/commit/5a3f64310) Deserialize CFinalCommitmentTxPayload instead of CFinalCommitment in TxToJSON (#2510) +- [`5da4c9728`](https://github.com/raptor3um/raptoreum/commit/5da4c9728) Use "registered" as default for "protx list" (#2513) +- [`fc6d651c4`](https://github.com/raptor3um/raptoreum/commit/fc6d651c4) Fix crashes in "protx" RPCs when wallet is disabled (#2509) +- [`ba49a4a16`](https://github.com/raptor3um/raptoreum/commit/ba49a4a16) Trivial: protx fund_register RPC help corrections (#2502) +- [`45421b1a3`](https://github.com/raptor3um/raptoreum/commit/45421b1a3) Add IS parameter for gobject prepare (#2452) +- [`2ba1ff521`](https://github.com/raptor3um/raptoreum/commit/2ba1ff521) Use ParseFixedPoint instead of ParseDoubleV in "protx register" commands (#2458) +- [`e049f9c1e`](https://github.com/raptor3um/raptoreum/commit/e049f9c1e) fix protx register rpc help (#2461) +- [`eb2103760`](https://github.com/raptor3um/raptoreum/commit/eb2103760) trivail, clarifies help text for protx register (#2462) +- [`76e93c7d7`](https://github.com/raptor3um/raptoreum/commit/76e93c7d7) Corrections to incorrect syntax in RPC help (#2466) +- [`3c1f44c3a`](https://github.com/raptor3um/raptoreum/commit/3c1f44c3a) Make sure protx_update_registrar adds enough funds for the fees +- [`d130f25ac`](https://github.com/raptor3um/raptoreum/commit/d130f25ac) Fix check for number of params to protx_update_service (#2443) +- [`adf9c87e2`](https://github.com/raptor3um/raptoreum/commit/adf9c87e2) Fix protx/bls rpc help (#2438) +- [`579c83e88`](https://github.com/raptor3um/raptoreum/commit/579c83e88) Add coinbase_payload to getblocktemplate help (#2437) +- [`3685c85e7`](https://github.com/raptor3um/raptoreum/commit/3685c85e7) Show BIP9 progress in getblockchaininfo (#2435) +- [`da3e3db4d`](https://github.com/raptor3um/raptoreum/commit/da3e3db4d) Fix sub-command help for smartnode, gobject and protx rpcs (#2425) +- [`adad3fcfe`](https://github.com/raptor3um/raptoreum/commit/adad3fcfe) RPC: protx help corrections (#2422) +- [`1d56dffda`](https://github.com/raptor3um/raptoreum/commit/1d56dffda) Unify help display logic for various "complex" rpc commands (#2415) +- [`02442673d`](https://github.com/raptor3um/raptoreum/commit/02442673d) Trivial: Correct protx diff RPC help (#2410) +- [`1f56600c4`](https://github.com/raptor3um/raptoreum/commit/1f56600c4) Trivial: Protx operator reward clarification (#2407) +- [`7011fec1b`](https://github.com/raptor3um/raptoreum/commit/7011fec1b) RPC: Add help details for the bls RPC (#2403) +- [`50f133ad0`](https://github.com/raptor3um/raptoreum/commit/50f133ad0) Add merkle tree and coinbase transaction to the `protx diff` rpc command (#2392) +- [`25b6dae9e`](https://github.com/raptor3um/raptoreum/commit/25b6dae9e) Code style and RPC help string cleanups for DIP2/DIP3 (#2379) +- [`0ad2906c5`](https://github.com/raptor3um/raptoreum/commit/0ad2906c5) Clarify addlocked description in getbalance RPC (#2364) +- [`547b81dd0`](https://github.com/raptor3um/raptoreum/commit/547b81dd0) log `gobject prepare` params (#2317) +- [`d932d2c4e`](https://github.com/raptor3um/raptoreum/commit/d932d2c4e) Add instantlock field to getrawtransaction rpc output (#2314) +- [`c3d6b0651`](https://github.com/raptor3um/raptoreum/commit/c3d6b0651) Remove redundant check for unknown commands in smartnode RPC (#2279) +- [`44706dc88`](https://github.com/raptor3um/raptoreum/commit/44706dc88) Implement projection of MN reward winners in "smartnode winners" +- [`2d8f1244c`](https://github.com/raptor3um/raptoreum/commit/2d8f1244c) Implement 'smartnode info ' RPC +- [`e2a9dbbce`](https://github.com/raptor3um/raptoreum/commit/e2a9dbbce) Better "smartnode status" for deterministic smartnodes +- [`50ac6fb3a`](https://github.com/raptor3um/raptoreum/commit/50ac6fb3a) Throw exception when trying to invoke start-xxx RPC in deterministic mode +- [`58aa81364`](https://github.com/raptor3um/raptoreum/commit/58aa81364) Implement "protx revoke" RPC +- [`185416b97`](https://github.com/raptor3um/raptoreum/commit/185416b97) Implement "protx update_registrar" RPC +- [`32951f795`](https://github.com/raptor3um/raptoreum/commit/32951f795) Implement "protx update_service" RPC +- [`5e3abeca2`](https://github.com/raptor3um/raptoreum/commit/5e3abeca2) Implement "protx list" RPC +- [`c77242346`](https://github.com/raptor3um/raptoreum/commit/c77242346) Implement "protx register" RPC +- [`1c2565804`](https://github.com/raptor3um/raptoreum/commit/1c2565804) Refactor `smartnode` and `gobject` RPCs to support `help command subCommand` syntax (#2240) +- [`fb4d301a2`](https://github.com/raptor3um/raptoreum/commit/fb4d301a2) Add extraPayloadSize/extraPayload fields to RPC help +- [`2997d6d26`](https://github.com/raptor3um/raptoreum/commit/2997d6d26) add compressed option to `smartnode genkey` (#2232) +- [`98ed90cbb`](https://github.com/raptor3um/raptoreum/commit/98ed90cbb) adds rpc calls for `setprivatesendrounds` and `setprivatesendamount` (#2230) +- [`50eb98d90`](https://github.com/raptor3um/raptoreum/commit/50eb98d90) Prepare for DIP3 operator reward payments and switch to array in getblocktemplate (#2216) +- [`a959f60aa`](https://github.com/raptor3um/raptoreum/commit/a959f60aa) De-duplicate "gobject vote-alias" and "gobject "vote-many" code (#2217) +- [`566fa5ec3`](https://github.com/raptor3um/raptoreum/commit/566fa5ec3) Add support for "help command subCommand" (#2210) +- [`4cd969e3d`](https://github.com/raptor3um/raptoreum/commit/4cd969e3d) Add `previousbits` field to `getblocktemplate` output (#2201) +- [`ac30196bc`](https://github.com/raptor3um/raptoreum/commit/ac30196bc) Show some info about the wallet dumped via dumpwallet (#2191) + +### LLMQ and Deterministic Smartnodes +- [`a3b01dfbe`](https://github.com/raptor3um/raptoreum/commit/a3b01dfbe) Gracefully shutdown on evodb inconsistency instead of crashing (#2611) (#2620) +- [`3861c6a82`](https://github.com/raptor3um/raptoreum/commit/3861c6a82) Add BIP9 deployment for DIP3 on mainnet (#2585) +- [`587911b36`](https://github.com/raptor3um/raptoreum/commit/587911b36) Fix IsBlockPayeeValid (#2577) +- [`3c30a6aff`](https://github.com/raptor3um/raptoreum/commit/3c30a6aff) Add missing smartnodeblsprivkey help text (#2569) +- [`378dadd0f`](https://github.com/raptor3um/raptoreum/commit/378dadd0f) Ensure EvoDB consistency for quorum commitments by storing the best block hash (#2537) +- [`2127a426b`](https://github.com/raptor3um/raptoreum/commit/2127a426b) Further refactoring of CQuorumBlockProcessor (#2545) +- [`1522656d6`](https://github.com/raptor3um/raptoreum/commit/1522656d6) Correctly handle spent collaterals for MNs that were registered in the same block (#2553) +- [`583035337`](https://github.com/raptor3um/raptoreum/commit/583035337) Track operator key changes in mempool and handle conflicts (#2540) +- [`88f7bf0d8`](https://github.com/raptor3um/raptoreum/commit/88f7bf0d8) Don't delete/add values to the unique property map when it's null (#2538) +- [`15414dac2`](https://github.com/raptor3um/raptoreum/commit/15414dac2) Refactor CQuorumBlockProcessor and CDeterministicMNManager (#2536) +- [`d9b28fe1a`](https://github.com/raptor3um/raptoreum/commit/d9b28fe1a) Introduce dummy (ping-like) contributions for the dummy DKG (#2542) +- [`df0d0cce7`](https://github.com/raptor3um/raptoreum/commit/df0d0cce7) Watch for changes in operator key and disable local MN (#2541) +- [`511dc3714`](https://github.com/raptor3um/raptoreum/commit/511dc3714) Remove ProTxs from mempool that refer to a ProRegTx for which the collateral was spent (#2539) +- [`225c2135e`](https://github.com/raptor3um/raptoreum/commit/225c2135e) Allow skipping of MN payments with zero duffs (#2534) +- [`60867978d`](https://github.com/raptor3um/raptoreum/commit/60867978d) Avoid printing DIP3/DIP4 related logs twice (#2525) +- [`7037f7c99`](https://github.com/raptor3um/raptoreum/commit/7037f7c99) Bail out from GetBlockTxOuts in case nBlockHeight is above tip+1 (#2523) +- [`022491420`](https://github.com/raptor3um/raptoreum/commit/022491420) Print the state object when ProcessSpecialTxsInBlock fails in ConnectBlock (#2516) +- [`812834dc5`](https://github.com/raptor3um/raptoreum/commit/812834dc5) Put height into mined commitments and use it instead of the special handling of quorumVvecHash (#2501) +- [`a4f5ba38b`](https://github.com/raptor3um/raptoreum/commit/a4f5ba38b) Implement CDummyDKG and CDummyCommitment until we have the real DKG merged (#2492) +- [`66612cc4b`](https://github.com/raptor3um/raptoreum/commit/66612cc4b) Add 0 entry to vTxSigOps when adding quorum commitments (#2489) +- [`f5beeafa1`](https://github.com/raptor3um/raptoreum/commit/f5beeafa1) Also restart MNs which didn't have the collateral moved, but do it later (#2483) +- [`0123517b4`](https://github.com/raptor3um/raptoreum/commit/0123517b4) Implement PoSe based on information from LLMQ commitments (#2478) +- [`22b5952c5`](https://github.com/raptor3um/raptoreum/commit/22b5952c5) Implement and enforce DIP6 commitments (#2477) +- [`d40a5ce31`](https://github.com/raptor3um/raptoreum/commit/d40a5ce31) Properly initialize confirmedHash in CSimplifiedMNListEntry (#2479) +- [`5ffc31bce`](https://github.com/raptor3um/raptoreum/commit/5ffc31bce) Forbid version=0 in special TXs (#2473) +- [`85157f9a9`](https://github.com/raptor3um/raptoreum/commit/85157f9a9) Few trivial fixes for DIP2/DIP3 (#2474) +- [`b5947f299`](https://github.com/raptor3um/raptoreum/commit/b5947f299) Implement BuildSimplifiedDiff in CDeterministicMNList +- [`6edad3745`](https://github.com/raptor3um/raptoreum/commit/6edad3745) Use ForEachMN and GetMN in BuildDiff instead of directly accessing mnMap +- [`83aac461b`](https://github.com/raptor3um/raptoreum/commit/83aac461b) Allow P2SH/multisig addresses for operator rewards +- [`f5864254c`](https://github.com/raptor3um/raptoreum/commit/f5864254c) Do not use keyIDCollateralAddress anymore when spork15 is active +- [`5ccf556f3`](https://github.com/raptor3um/raptoreum/commit/5ccf556f3) GetSmartnodeInfo with payee argument should do nothing when DIP3 is active +- [`927e8bd79`](https://github.com/raptor3um/raptoreum/commit/927e8bd79) Also forbid reusing collateral key for owner/voting keys +- [`826e7d063`](https://github.com/raptor3um/raptoreum/commit/826e7d063) Move internal collateral check to the else branch of the external collateral check +- [`dc404e755`](https://github.com/raptor3um/raptoreum/commit/dc404e755) Allow P2SH for payout scripts +- [`9adf8ad73`](https://github.com/raptor3um/raptoreum/commit/9adf8ad73) Remove restriction that forced use of same addresses for payout and collateral +- [`7c1f11089`](https://github.com/raptor3um/raptoreum/commit/7c1f11089) Revert #2441 and retry fixing (#2444) +- [`6761fa49f`](https://github.com/raptor3um/raptoreum/commit/6761fa49f) More checks for tx type +- [`b84369663`](https://github.com/raptor3um/raptoreum/commit/b84369663) Be more specific about tx version in conditions +- [`c975a986b`](https://github.com/raptor3um/raptoreum/commit/c975a986b) no cs_main in specialtxes +- [`8bd5b231b`](https://github.com/raptor3um/raptoreum/commit/8bd5b231b) Log mempool payload errors instead of crashing via assert +- [`658b7afd1`](https://github.com/raptor3um/raptoreum/commit/658b7afd1) Make error messages re payload a bit more specific +- [`153afb906`](https://github.com/raptor3um/raptoreum/commit/153afb906) Restart MNs in DIP3 tests even if collateral has not moved (#2441) +- [`4ad2f647c`](https://github.com/raptor3um/raptoreum/commit/4ad2f647c) Use proTxHash instead of outpoint when calculating smartnode scores (#2440) +- [`c27e62935`](https://github.com/raptor3um/raptoreum/commit/c27e62935) Allow reusing of external collaterals in DIP3 (#2427) +- [`9da9d575a`](https://github.com/raptor3um/raptoreum/commit/9da9d575a) Allow collaterals for non-DIP3 MNs which were created after DIP3/BIP9 activation (#2412) +- [`30a2b283a`](https://github.com/raptor3um/raptoreum/commit/30a2b283a) Sign ProRegTx collaterals with a string message instead of payload hash, split `protx register` into `prepare`/`submit` (#2395) +- [`e34701295`](https://github.com/raptor3um/raptoreum/commit/e34701295) Fix crash when deterministic MN list is empty and keep paying superblocks in this case (#2387) +- [`28a6007a4`](https://github.com/raptor3um/raptoreum/commit/28a6007a4) Prepare DIP3 for testnet and reuse DIP3 deployment for autoix deployment (#2389) +- [`e3df91082`](https://github.com/raptor3um/raptoreum/commit/e3df91082) Allow referencing other TX outputs for ProRegTx collateral (#2366) +- [`fdfb07742`](https://github.com/raptor3um/raptoreum/commit/fdfb07742) Update ProRegTx serialization order (#2378) +- [`eaa856eb7`](https://github.com/raptor3um/raptoreum/commit/eaa856eb7) Remove nProtocolVersion and add mode/type fields to DIP3 (#2358) +- [`c9d274518`](https://github.com/raptor3um/raptoreum/commit/c9d274518) Use BLS keys for the DIP3 operator key (#2352) +- [`eaef90202`](https://github.com/raptor3um/raptoreum/commit/eaef90202) Don't use boost range adaptors in CDeterministicMNList (#2327) +- [`6adc236d0`](https://github.com/raptor3um/raptoreum/commit/6adc236d0) Only use dataDir in CEvoDB when not in-memory (#2291) +- [`8a878bfcf`](https://github.com/raptor3um/raptoreum/commit/8a878bfcf) Call InitializeCurrentBlockTip and activeSmartnodeManager->Init after importing has finished (#2286) +- [`6b3d65028`](https://github.com/raptor3um/raptoreum/commit/6b3d65028) After DIP3 activation, allow voting with voting keys stored in your wallet (#2281) +- [`d8247dfff`](https://github.com/raptor3um/raptoreum/commit/d8247dfff) Use refactored payment logic when spork15 is active +- [`60002b7dd`](https://github.com/raptor3um/raptoreum/commit/60002b7dd) Payout and enforce operator reward payments +- [`2c481f0f8`](https://github.com/raptor3um/raptoreum/commit/2c481f0f8) Implement deterministic version of CSmartnodePayments::IsScheduled +- [`19fbf8ab7`](https://github.com/raptor3um/raptoreum/commit/19fbf8ab7) Move cs_main lock from CSmartnode::UpdateLastPaid to CSmartnodeMan +- [`dc7292afa`](https://github.com/raptor3um/raptoreum/commit/dc7292afa) Implement new MN payments logic and add compatibility code +- [`d4530eb7d`](https://github.com/raptor3um/raptoreum/commit/d4530eb7d) Put all smartnodes in SMARTNODE_ENABLED state when spork15 is active +- [`31b4f8354`](https://github.com/raptor3um/raptoreum/commit/31b4f8354) Forbid starting of legacy smartnodes with non matching ProTx collateral values +- [`5050a9205`](https://github.com/raptor3um/raptoreum/commit/5050a9205) Add compatibility code for FindRandomNotInVec and GetSmartnodeScores +- [`cc73422f8`](https://github.com/raptor3um/raptoreum/commit/cc73422f8) Add methods to add/remove (non-)deterministic MNs +- [`7d14566bc`](https://github.com/raptor3um/raptoreum/commit/7d14566bc) Add compatibility code to CSmartnodeMan so that old code is still compatible +- [`27e8b48a6`](https://github.com/raptor3um/raptoreum/commit/27e8b48a6) Stop executing legacy MN list code when spork 15 is activated +- [`d90b13996`](https://github.com/raptor3um/raptoreum/commit/d90b13996) Implement CActiveDeterministicSmartnodeManager +- [`a5e65aa37`](https://github.com/raptor3um/raptoreum/commit/a5e65aa37) Erase mnListCache entry on UndoBlock (#2254) +- [`88e7888de`](https://github.com/raptor3um/raptoreum/commit/88e7888de) Try using cache in GetListForBlock before reading from disk (#2253) +- [`9653af2f3`](https://github.com/raptor3um/raptoreum/commit/9653af2f3) Classes, validation and update logic for CProUpRevTX +- [`1c68d1107`](https://github.com/raptor3um/raptoreum/commit/1c68d1107) Classes, validation and update logic for CProUpRegTX +- [`8aca3b040`](https://github.com/raptor3um/raptoreum/commit/8aca3b040) Also check duplicate addresses for CProUpServTX in CTxMemPool +- [`923fd6739`](https://github.com/raptor3um/raptoreum/commit/923fd6739) Implement CProUpServTx logic in CDeterministicMNManager +- [`6ec0d7aea`](https://github.com/raptor3um/raptoreum/commit/6ec0d7aea) Classes and basic validation of ProUpServTx +- [`255403e92`](https://github.com/raptor3um/raptoreum/commit/255403e92) Include proTx data in json formatted transactions +- [`25545fc1e`](https://github.com/raptor3um/raptoreum/commit/25545fc1e) Split keyIDSmartnode into keyIDOwner/keyIDOperator/keyIDVoting (#2248) +- [`2c172873a`](https://github.com/raptor3um/raptoreum/commit/2c172873a) Don't allow non-ProTx smartnode collaterals after DIP3 activation +- [`9e8a86714`](https://github.com/raptor3um/raptoreum/commit/9e8a86714) Implementation of deterministic MNs list +- [`76fd30894`](https://github.com/raptor3um/raptoreum/commit/76fd30894) Automatically lock ProTx collaterals when TX is added/loaded to wallet +- [`cdd723ede`](https://github.com/raptor3um/raptoreum/commit/cdd723ede) Conflict handling for ProRegTx in mempool +- [`958b84ace`](https://github.com/raptor3um/raptoreum/commit/958b84ace) Implementation of ProRegTx with basic validation (no processing) +- [`c9a72e888`](https://github.com/raptor3um/raptoreum/commit/c9a72e888) Introduce CEvoDB for all evo related things, e.g. DIP3 +- [`4531f6b89`](https://github.com/raptor3um/raptoreum/commit/4531f6b89) Implement CDBTransaction and CScopedDBTransaction +- [`e225cebcd`](https://github.com/raptor3um/raptoreum/commit/e225cebcd) Use previous block for CheckSpecialTx (#2243) +- [`b92bd8997`](https://github.com/raptor3um/raptoreum/commit/b92bd8997) Fix mninfo search by payee (#2233) +- [`8af7f6223`](https://github.com/raptor3um/raptoreum/commit/8af7f6223) Account for extraPayload when calculating fees in FundTransaction +- [`b606bde9a`](https://github.com/raptor3um/raptoreum/commit/b606bde9a) Support version 3 transaction serialization in mininode.py +- [`61bbe54ab`](https://github.com/raptor3um/raptoreum/commit/61bbe54ab) Add Get-/SetTxPayload helpers +- [`cebf71bbc`](https://github.com/raptor3um/raptoreum/commit/cebf71bbc) Stubs for special TX validation and processing +- [`d6c5a72e2`](https://github.com/raptor3um/raptoreum/commit/d6c5a72e2) Basic validation of version 3 TXs in CheckTransaction +- [`a3c4ee3fd`](https://github.com/raptor3um/raptoreum/commit/a3c4ee3fd) DIP2 changes to CTransaction and CMutableTransaction +- [`d20100ecd`](https://github.com/raptor3um/raptoreum/commit/d20100ecd) DIP0003 deployment +- [`4d3518fe0`](https://github.com/raptor3um/raptoreum/commit/4d3518fe0) Refactor MN payee logic in preparation for DIP3 (#2215) +- [`d946f21bd`](https://github.com/raptor3um/raptoreum/commit/d946f21bd) Smartnode related refactorings in preparation of DIP3 (#2212) + +### PrivateSend +- [`07309f0ec`](https://github.com/raptor3um/raptoreum/commit/07309f0ec) Allow up to SMARTNODE_MAX_MIXING_TXES (5) DSTXes per MN in a row (#2552) +- [`ed53fce47`](https://github.com/raptor3um/raptoreum/commit/ed53fce47) Revert "Apply similar logic to vecSmartnodesUsed" (#2503) +- [`69bffed72`](https://github.com/raptor3um/raptoreum/commit/69bffed72) Do not sort resulting vector in SelectCoinsGroupedByAddresses (#2493) +- [`bb11f1a63`](https://github.com/raptor3um/raptoreum/commit/bb11f1a63) Fix recent changes in DSA conditions (#2494) +- [`6480ad1d5`](https://github.com/raptor3um/raptoreum/commit/6480ad1d5) Should check dsq queue regardless of the mixing state (#2491) +- [`67483cd34`](https://github.com/raptor3um/raptoreum/commit/67483cd34) Fix dsq/dsa conditions (#2487) +- [`9d4df466b`](https://github.com/raptor3um/raptoreum/commit/9d4df466b) Fix CreateDenominated failure for addresses with huge amount of inputs (#2486) +- [`2b400f74b`](https://github.com/raptor3um/raptoreum/commit/2b400f74b) Base dsq/dstx thresholold on total number of up to date smartnodes (#2465) +- [`262454791`](https://github.com/raptor3um/raptoreum/commit/262454791) Add 5th denom, drop deprecated logic and bump min PS version (#2318) +- [`23f169c44`](https://github.com/raptor3um/raptoreum/commit/23f169c44) Drop custom PS logic for guessing fees etc. from SelectCoins (#2371) +- [`f7b0b5759`](https://github.com/raptor3um/raptoreum/commit/f7b0b5759) Pick rounds with the most inputs available to mix first (#2278) +- [`727e940c0`](https://github.com/raptor3um/raptoreum/commit/727e940c0) Fix recently introduced PS bugs (#2330) +- [`85a958a36`](https://github.com/raptor3um/raptoreum/commit/85a958a36) Drop dummy copy constructors in CPrivateSend*Session (#2305) +- [`c6a0c5541`](https://github.com/raptor3um/raptoreum/commit/c6a0c5541) A couple of small fixes for mixing collaterals (#2294) +- [`d192d642f`](https://github.com/raptor3um/raptoreum/commit/d192d642f) Move heavy coin selection out of the loop in SubmitDenominate (#2274) +- [`28e0476f4`](https://github.com/raptor3um/raptoreum/commit/28e0476f4) Squash two logic branches in SubmitDenominate into one (#2270) +- [`9b6eb4765`](https://github.com/raptor3um/raptoreum/commit/9b6eb4765) Include inputs with max rounds in SelectCoinsDark/SelectCoinsByDenominations (#2277) +- [`55d7bb900`](https://github.com/raptor3um/raptoreum/commit/55d7bb900) Add an option to disable popups for PS mixing txes (#2272) +- [`38ccfef3b`](https://github.com/raptor3um/raptoreum/commit/38ccfef3b) Identify PS collateral payments in transaction list a bit more accurate (#2271) +- [`ad31dbbd7`](https://github.com/raptor3um/raptoreum/commit/ad31dbbd7) Add more variance to coin selection in PS mixing (#2261) +- [`8c9cb2909`](https://github.com/raptor3um/raptoreum/commit/8c9cb2909) Revert 2075 (#2259) +- [`b164bcc7a`](https://github.com/raptor3um/raptoreum/commit/b164bcc7a) Split PS into Manager and Session and allow running multiple mixing sessions in parallel (client side) (#2203) +- [`d4d11476a`](https://github.com/raptor3um/raptoreum/commit/d4d11476a) Fix typo and grammar in PS error message (#2199) +- [`a83ab5501`](https://github.com/raptor3um/raptoreum/commit/a83ab5501) Fix wallet lock check in DoAutomaticDenominating (#2196) +- [`30fa8bc33`](https://github.com/raptor3um/raptoreum/commit/30fa8bc33) Make sure pwalletMain is not null whenever it's used in PS client (#2190) +- [`3c89983db`](https://github.com/raptor3um/raptoreum/commit/3c89983db) Remove DarksendConfig (#2132) +- [`43091a3ef`](https://github.com/raptor3um/raptoreum/commit/43091a3ef) PrivateSend Enhancement: Up default round count to 4 and allow user to mix up to 16 rounds (#2128) + +### InstantSend +- [`35550a3f9`](https://github.com/raptor3um/raptoreum/commit/35550a3f9) Add quorumModifierHash to instant send lock vote (#2505) +- [`fa8f4a10c`](https://github.com/raptor3um/raptoreum/commit/fa8f4a10c) Include smartnodeProTxHash in CTxLockVote (#2484) +- [`624e50949`](https://github.com/raptor3um/raptoreum/commit/624e50949) Remove few leftovers of `-instantsenddepth` +- [`733cd9512`](https://github.com/raptor3um/raptoreum/commit/733cd9512) Remove global fDIP0003ActiveAtTip and fix wrong use of VersionBitsState in auto IX (#2380) +- [`5454bea37`](https://github.com/raptor3um/raptoreum/commit/5454bea37) Automatic InstantSend locks for "simple" transactions (#2140) +- [`1e74bcace`](https://github.com/raptor3um/raptoreum/commit/1e74bcace) [ZMQ] Notify when an IS double spend is attempted (#2262) +- [`6bcd868de`](https://github.com/raptor3um/raptoreum/commit/6bcd868de) Fix lockedByInstantSend initialization (#2197) +- [`0a6f47323`](https://github.com/raptor3um/raptoreum/commit/0a6f47323) Remove dummy confirmations in RPC API and GUI for InstantSend transactions (#2040) +- [`ace980834`](https://github.com/raptor3um/raptoreum/commit/ace980834) Extend Bloom Filter support to InstantSend related messages (#2184) +- [`2c0d4c9d7`](https://github.com/raptor3um/raptoreum/commit/2c0d4c9d7) Save/load InstantSend cache (#2051) + +### Sporks +- [`33f78d70e`](https://github.com/raptor3um/raptoreum/commit/33f78d70e) Do not accept sporks with nTimeSigned way too far into the future (#2578) +- [`6c4b3ed8d`](https://github.com/raptor3um/raptoreum/commit/6c4b3ed8d) Load sporks before checking blockchain (#2573) +- [`d94092b60`](https://github.com/raptor3um/raptoreum/commit/d94092b60) Fix spork propagation while in IBD and fix spork integration tests (#2533) +- [`43e757bee`](https://github.com/raptor3um/raptoreum/commit/43e757bee) Amend SERIALIZATION_VERSION_STRING string for spork cache (#2339) +- [`f7ab6c469`](https://github.com/raptor3um/raptoreum/commit/f7ab6c469) M-of-N-like sporks (#2288) +- [`c2958733e`](https://github.com/raptor3um/raptoreum/commit/c2958733e) CSporkManager::Clear() should not alter sporkPubKeyID and sporkPrivKey (#2313) +- [`8c0dca282`](https://github.com/raptor3um/raptoreum/commit/8c0dca282) Add versioning to spork cache (#2312) +- [`5461e92bf`](https://github.com/raptor3um/raptoreum/commit/5461e92bf) Add spork to control deterministic MN lists activation +- [`73c2ddde7`](https://github.com/raptor3um/raptoreum/commit/73c2ddde7) extract sporkmanager from sporkmessage (#2234) +- [`1767e3457`](https://github.com/raptor3um/raptoreum/commit/1767e3457) Save/load spork cache (#2206) +- [`075ca0903`](https://github.com/raptor3um/raptoreum/commit/075ca0903) Protect CSporkManager with critical section (#2213) + +### Governance +- [`222e5b4f7`](https://github.com/raptor3um/raptoreum/commit/222e5b4f7) Remove proposal/funding votes from MNs that changed the voting key (#2570) +- [`5185dd5b7`](https://github.com/raptor3um/raptoreum/commit/5185dd5b7) Use correct time field when removing pre-DIP3 votes (#2535) +- [`d2ca9edde`](https://github.com/raptor3um/raptoreum/commit/d2ca9edde) Fix multiple issues with governance voting after spork15 activation (#2526) +- [`08dc17871`](https://github.com/raptor3um/raptoreum/commit/08dc17871) Drop pre-DIP3 votes from current votes per MN per object (#2524) +- [`0c1b683a0`](https://github.com/raptor3um/raptoreum/commit/0c1b683a0) Clear votes which were created before spork15 activation and use operator key for non-funding votes (#2512) +- [`da4b5fb16`](https://github.com/raptor3um/raptoreum/commit/da4b5fb16) Remove an unused function from governance object collateral code (#2480) +- [`8deb8e90f`](https://github.com/raptor3um/raptoreum/commit/8deb8e90f) Modernize Gov Methods (#2326) +- [`0471fa884`](https://github.com/raptor3um/raptoreum/commit/0471fa884) Drop MAX_GOVERNANCE_OBJECT_DATA_SIZE (and maxgovobjdatasize in rpc) (#2298) +- [`737353c84`](https://github.com/raptor3um/raptoreum/commit/737353c84) Fix IsBlockValueValid/IsOldBudgetBlockValueValid (#2276) +- [`a5643f899`](https://github.com/raptor3um/raptoreum/commit/a5643f899) Switch RequestGovernanceObjectVotes from pointers to hashes (#2189) +- [`0e689341d`](https://github.com/raptor3um/raptoreum/commit/0e689341d) Implement Governance ZMQ notification messages (#2160) + +### GUI +- [`858bb52ad`](https://github.com/raptor3um/raptoreum/commit/858bb52ad) Show correct operator payee address in DIP3 MN list GUI (#2563) +- [`190863722`](https://github.com/raptor3um/raptoreum/commit/190863722) Remove legacy MN list tabs on spork15 activation (#2567) +- [`3e97b0cbd`](https://github.com/raptor3um/raptoreum/commit/3e97b0cbd) Make sure that we can get inputType and fUseInstantSend regardless of the way recipients are sorted (#2550) +- [`1a7c29b97`](https://github.com/raptor3um/raptoreum/commit/1a7c29b97) Revert "Sort recipients in SendCoins dialog via BIP69 rule (#2546)" (#2549) +- [`ca0aec2a3`](https://github.com/raptor3um/raptoreum/commit/ca0aec2a3) Match recipients with txouts by scriptPubKey in reassignAmounts() (#2548) +- [`09730e1c5`](https://github.com/raptor3um/raptoreum/commit/09730e1c5) Bail out from update methods in SmartnodeList when shutdown is requested (#2551) +- [`18cd5965c`](https://github.com/raptor3um/raptoreum/commit/18cd5965c) Sort recipients in SendCoins dialog via BIP69 rule (#2546) +- [`9100c69eb`](https://github.com/raptor3um/raptoreum/commit/9100c69eb) Allow filtering by proTxHash on DIP3 MN tab (#2532) +- [`216119921`](https://github.com/raptor3um/raptoreum/commit/216119921) Fix wrong total MN count in UI and "smartnode count" RPC (#2527) +- [`8f8878a94`](https://github.com/raptor3um/raptoreum/commit/8f8878a94) Add dummy/hidden column to carry the proTxHash per MN list entry... (#2530) +- [`a4ea816b2`](https://github.com/raptor3um/raptoreum/commit/a4ea816b2) use aqua gui theme (#2472) +- [`aa495405b`](https://github.com/raptor3um/raptoreum/commit/aa495405b) [GUI] Realign tx filter widgets (#2485) +- [`f4ef388de`](https://github.com/raptor3um/raptoreum/commit/f4ef388de) Update PS help text for the new denom (#2471) +- [`7cabbadef`](https://github.com/raptor3um/raptoreum/commit/7cabbadef) Implement context menu and extra info on double-click for DIP3 smartnode list (#2459) +- [`9232a455c`](https://github.com/raptor3um/raptoreum/commit/9232a455c) Do not hold cs_main while emitting messages in WalletModel::prepareTransaction (#2463) +- [`cf2b547b7`](https://github.com/raptor3um/raptoreum/commit/cf2b547b7) Implement tab for DIP3 MN list (#2454) +- [`46462d682`](https://github.com/raptor3um/raptoreum/commit/46462d682) Add a column for IS lock status on Transactions tab (#2433) +- [`5ecd91b05`](https://github.com/raptor3um/raptoreum/commit/5ecd91b05) Fix ps collateral/denom creation tx category confusion (#2430) +- [`4a78b161f`](https://github.com/raptor3um/raptoreum/commit/4a78b161f) PrivateSend spending txes should have "outgoing" icon on overview screen (#2396) +- [`d7e210341`](https://github.com/raptor3um/raptoreum/commit/d7e210341) Fixes inaccurate round count in CoinControlDialog (#2137) + +### Cleanups/Tests/Docs/Other +- [`b5670c475`](https://github.com/raptor3um/raptoreum/commit/b5670c475) Set CLIENT_VERSION_IS_RELEASE to true (#2591) +- [`a05eeb21e`](https://github.com/raptor3um/raptoreum/commit/a05eeb21e) Update immer to c89819df92191d6969a6a22c88c72943b8e25016 (#2626) +- [`10b3736bd`](https://github.com/raptor3um/raptoreum/commit/10b3736bd) [0.13.0.x] Translations201901 (#2592) +- [`34d2a6038`](https://github.com/raptor3um/raptoreum/commit/34d2a6038) Release notes 0.13.0.0 draft (#2583) +- [`c950a8f51`](https://github.com/raptor3um/raptoreum/commit/c950a8f51) Merge v0.12.3.4 commits into develop (#2582) +- [`6dfceaba5`](https://github.com/raptor3um/raptoreum/commit/6dfceaba5) Force FlushStateToDisk on ConnectTip/DisconnectTip while not in IBD (#2560) +- [`552d9089e`](https://github.com/raptor3um/raptoreum/commit/552d9089e) Update testnet seeds to point to MNs that are on the new chain (#2558) +- [`63b58b1e9`](https://github.com/raptor3um/raptoreum/commit/63b58b1e9) Reintroduce BLSInit to correctly set secure alloctor callbacks (#2543) +- [`cbd030352`](https://github.com/raptor3um/raptoreum/commit/cbd030352) Serialize the block header in CBlockHeader::GetHash() (#2531) +- [`3a6bd8d23`](https://github.com/raptor3um/raptoreum/commit/3a6bd8d23) Call ProcessTick every second, handle tick cooldown inside (#2522) +- [`973a7f6dd`](https://github.com/raptor3um/raptoreum/commit/973a7f6dd) Fix GUI warnings in debug.log (#2521) +- [`c248c48e4`](https://github.com/raptor3um/raptoreum/commit/c248c48e4) Try to fix a few sporadic instant send failures in DIP3 tests (#2500) +- [`7a709b81d`](https://github.com/raptor3um/raptoreum/commit/7a709b81d) Perform less instant send tests in DIP3 tests (#2499) +- [`245c3220e`](https://github.com/raptor3um/raptoreum/commit/245c3220e) Sync blocks before creating TXs (#2496) +- [`65528e9e7`](https://github.com/raptor3um/raptoreum/commit/65528e9e7) Bump smartnodeman cache version (#2467) +- [`6c190d1bb`](https://github.com/raptor3um/raptoreum/commit/6c190d1bb) Fix make deploy error on macos (#2475) +- [`df7d12b41`](https://github.com/raptor3um/raptoreum/commit/df7d12b41) Add univalue test for real numbers (#2460) +- [`614ff70b4`](https://github.com/raptor3um/raptoreum/commit/614ff70b4) Let ccache compress the cache by itself instead of compressing ccache.tar (#2456) +- [`40fa1bb49`](https://github.com/raptor3um/raptoreum/commit/40fa1bb49) Add platform dependent include_directories in CMakeLists.txt (#2455) +- [`12aba2592`](https://github.com/raptor3um/raptoreum/commit/12aba2592) Updating translations for de, es, fi, nl, pt, sk, zh_CN, zh_TW (#2451) +- [`52bf5a6b0`](https://github.com/raptor3um/raptoreum/commit/52bf5a6b0) Install libxkbcommon0 in gitian-linux.yml +- [`fefe34250`](https://github.com/raptor3um/raptoreum/commit/fefe34250) Update manpages +- [`c60687fe6`](https://github.com/raptor3um/raptoreum/commit/c60687fe6) Sleep longer between attempts in sync_blocks +- [`88498ba13`](https://github.com/raptor3um/raptoreum/commit/88498ba13) Apply suggestions from code review +- [`91af72b18`](https://github.com/raptor3um/raptoreum/commit/91af72b18) Allow to specify how log to sleep between attempts in wait_until +- [`f65e74682`](https://github.com/raptor3um/raptoreum/commit/f65e74682) Pass "-parallel=3" to reduce load on Travis nodes while testing +- [`3c99d9e35`](https://github.com/raptor3um/raptoreum/commit/3c99d9e35) Fix test_fail_create_protx in DIP3 tests +- [`4de70f0ac`](https://github.com/raptor3um/raptoreum/commit/4de70f0ac) Test P2SH/multisig payee addresses in DIP3 tests +- [`5fc4072ca`](https://github.com/raptor3um/raptoreum/commit/5fc4072ca) Parallel ASN resolve and allow passing of input file names to makeseeds.py (#2432) +- [`76a38f6ce`](https://github.com/raptor3um/raptoreum/commit/76a38f6ce) Update defaultAssumeValid, nMinimumChainWork and checkpoints (#2428) +- [`0e9ad207a`](https://github.com/raptor3um/raptoreum/commit/0e9ad207a) Update hardcoded seeds (#2429) +- [`42ee369b1`](https://github.com/raptor3um/raptoreum/commit/42ee369b1) [Formatting] smartnodelist.* clang+manual format (#2426) +- [`e961c7134`](https://github.com/raptor3um/raptoreum/commit/e961c7134) Translations 201811 (#2249) +- [`f0df5bffa`](https://github.com/raptor3um/raptoreum/commit/f0df5bffa) Clang evo folder and activesmartnode.* (#2418) +- [`98bdf35f9`](https://github.com/raptor3um/raptoreum/commit/98bdf35f9) bump PS copyright (#2417) +- [`e9bb822c1`](https://github.com/raptor3um/raptoreum/commit/e9bb822c1) Clang format PrivateSend files (#2373) +- [`bea590958`](https://github.com/raptor3um/raptoreum/commit/bea590958) Fix auto-IS tests (#2414) +- [`f03629d6d`](https://github.com/raptor3um/raptoreum/commit/f03629d6d) Explicitly specify which branch of Wine to install (#2411) +- [`5e829a3b1`](https://github.com/raptor3um/raptoreum/commit/5e829a3b1) Update Chia bls-signature to latest version (#2409) +- [`51addf9a0`](https://github.com/raptor3um/raptoreum/commit/51addf9a0) Fix p2p-instantsend.py test (#2408) +- [`7e8f07bb9`](https://github.com/raptor3um/raptoreum/commit/7e8f07bb9) A couple of fixes for shutdown sequence (#2406) +- [`9c455caea`](https://github.com/raptor3um/raptoreum/commit/9c455caea) A couple of fixes for init steps (#2405) +- [`6560ac64b`](https://github.com/raptor3um/raptoreum/commit/6560ac64b) Properly escape $ in Jenkinsfile.gitian (#2404) +- [`70eb710b1`](https://github.com/raptor3um/raptoreum/commit/70eb710b1) Undefine DOUBLE after include Chia BLS headers (#2400) +- [`052af81b4`](https://github.com/raptor3um/raptoreum/commit/052af81b4) Ensure correct order of destruction for BLS secure allocator (#2401) +- [`c8804ea5a`](https://github.com/raptor3um/raptoreum/commit/c8804ea5a) Do not ignore patches in depends (#2399) +- [`13f2eb449`](https://github.com/raptor3um/raptoreum/commit/13f2eb449) Force fvisibility=hidden when compiling on macos (#2398) +- [`9eb9c99d5`](https://github.com/raptor3um/raptoreum/commit/9eb9c99d5) Bump version to 0.13.0 (#2386) +- [`8f9b004ca`](https://github.com/raptor3um/raptoreum/commit/8f9b004ca) Support "fast" mode when calling sync_smartnodes (#2383) +- [`fcea333ba`](https://github.com/raptor3um/raptoreum/commit/fcea333ba) Rewrite handling of too long depends builds in .travis.yml (#2385) +- [`d1debfc26`](https://github.com/raptor3um/raptoreum/commit/d1debfc26) Implement mt_pooled_secure_allocator and use it for BLS secure allocation (#2375) +- [`0692de1c5`](https://github.com/raptor3um/raptoreum/commit/0692de1c5) Fix prepare_smartnodes/create_smartnodes in RaptoreumTestFramework (#2382) +- [`6433a944a`](https://github.com/raptor3um/raptoreum/commit/6433a944a) [Trivial] typo Groupped -> Grouped (#2374) +- [`59932401b`](https://github.com/raptor3um/raptoreum/commit/59932401b) Change internal references of Darksend to PrivateSend (#2372) +- [`e3046adb3`](https://github.com/raptor3um/raptoreum/commit/e3046adb3) Clear devNetParams and mimic behavior of other param types (#2367) +- [`de426e962`](https://github.com/raptor3um/raptoreum/commit/de426e962) Give tail calls enough time to print errors (#2376) +- [`0402240a2`](https://github.com/raptor3um/raptoreum/commit/0402240a2) Bump CMAKE_CXX_STANDARD to 14 in CMakeLists.txt (#2377) +- [`3c9237aa4`](https://github.com/raptor3um/raptoreum/commit/3c9237aa4) Use VersionBitsState instead of VersionBitsTipState to avoid cs_main lock (#2370) +- [`c4351fd32`](https://github.com/raptor3um/raptoreum/commit/c4351fd32) revert 737, DEFAULT_TRANSACTION_MAXFEE = 0.1 * COIN (#2362) +- [`1c9ed7806`](https://github.com/raptor3um/raptoreum/commit/1c9ed7806) GDB automation with Python script to measure memory usage in raptoreumd (#1609) +- [`d998dc13e`](https://github.com/raptor3um/raptoreum/commit/d998dc13e) Add cmake to non-mac gitian descriptors (#2360) +- [`266dd3232`](https://github.com/raptor3um/raptoreum/commit/266dd3232) mkdir -p to allow re-start of failed chia build (#2359) +- [`11a0cbf84`](https://github.com/raptor3um/raptoreum/commit/11a0cbf84) InstantSend-related tests refactoring (#2333) +- [`3313bbd51`](https://github.com/raptor3um/raptoreum/commit/3313bbd51) Backport bitcoin #13623 Migrate gitian-build.sh to python (#2319) +- [`7b76bbb57`](https://github.com/raptor3um/raptoreum/commit/7b76bbb57) Update Chia BLS libs to latest master (#2357) +- [`e2de632f8`](https://github.com/raptor3um/raptoreum/commit/e2de632f8) Move handling of `size != SerSize` into SetBuf/GetBuf (#2356) +- [`81d60bc28`](https://github.com/raptor3um/raptoreum/commit/81d60bc28) Fix the issue with transaction amount precision in IS tests (#2353) +- [`a45055384`](https://github.com/raptor3um/raptoreum/commit/a45055384) Fix qt configure to detect clang version correctly (#2344) +- [`b99d94a0f`](https://github.com/raptor3um/raptoreum/commit/b99d94a0f) Minor build documentation updates (#2343) +- [`464191698`](https://github.com/raptor3um/raptoreum/commit/464191698) Review fixes +- [`9c8e4ac76`](https://github.com/raptor3um/raptoreum/commit/9c8e4ac76) Move bls stuff from crypto/ to bls/ +- [`bed1ded8b`](https://github.com/raptor3um/raptoreum/commit/bed1ded8b) Remove duplicated check (#2336) +- [`89f744d06`](https://github.com/raptor3um/raptoreum/commit/89f744d06) pack of small cleanup fixes / optimizations (#2334) +- [`9603c5290`](https://github.com/raptor3um/raptoreum/commit/9603c5290) Trivial: Codestyle fixes in InstantSend code (#2332) +- [`90ad75911`](https://github.com/raptor3um/raptoreum/commit/90ad75911) Fix auto-IS and tests (#2331) +- [`b3fc236af`](https://github.com/raptor3um/raptoreum/commit/b3fc236af) Fix mnodeman.cs vs cs_vPendingSmartnodes vs cs_main deadlock (#2200) +- [`80fd096b0`](https://github.com/raptor3um/raptoreum/commit/80fd096b0) Add ECDSA benchmarks +- [`78675d9bb`](https://github.com/raptor3um/raptoreum/commit/78675d9bb) Add BLS and DKG benchmarks +- [`3ee27c168`](https://github.com/raptor3um/raptoreum/commit/3ee27c168) Add highly parallelized worker/helper for BLS/DKG calculations +- [`aa3b0aa8a`](https://github.com/raptor3um/raptoreum/commit/aa3b0aa8a) Add simple helpers/wrappers for BLS+AES based integrated encryption schemes (IES) +- [`9ccf6f584`](https://github.com/raptor3um/raptoreum/commit/9ccf6f584) Implement wrappers around Chia BLS lib +- [`3039d44d3`](https://github.com/raptor3um/raptoreum/commit/3039d44d3) Add Chia bls-signatures library to depends +- [`f3dcb6916`](https://github.com/raptor3um/raptoreum/commit/f3dcb6916) Add cmake to ci/Dockerfile.builder +- [`057d7445e`](https://github.com/raptor3um/raptoreum/commit/057d7445e) Add libgmp to depends +- [`b0d0093d7`](https://github.com/raptor3um/raptoreum/commit/b0d0093d7) Add helper to rename all threads of a ctpl::thread_pool +- [`47a162255`](https://github.com/raptor3um/raptoreum/commit/47a162255) Add ctpl header only library +- [`407baccec`](https://github.com/raptor3um/raptoreum/commit/407baccec) Remove obsolete build-openbsd.md (#2328) +- [`8a1b51356`](https://github.com/raptor3um/raptoreum/commit/8a1b51356) Backport: Fix Qt build with XCode (for depends) (#2325) +- [`a5aca049d`](https://github.com/raptor3um/raptoreum/commit/a5aca049d) rename vars in mnsync to make more sense (#2308) +- [`ee6a5a33b`](https://github.com/raptor3um/raptoreum/commit/ee6a5a33b) Gov cleanup + copyright bump (#2324) +- [`d7e5f02ea`](https://github.com/raptor3um/raptoreum/commit/d7e5f02ea) Update build documentation (#2323) +- [`bd8c54d12`](https://github.com/raptor3um/raptoreum/commit/bd8c54d12) A bit more verbosity for some critical errors (#2316) +- [`a4ff2a19a`](https://github.com/raptor3um/raptoreum/commit/a4ff2a19a) Fix some warnings and do a couple of other trivial cleanups (#2315) +- [`07208a4ae`](https://github.com/raptor3um/raptoreum/commit/07208a4ae) document spork system with doxygen comments (#2301) +- [`2c1a17909`](https://github.com/raptor3um/raptoreum/commit/2c1a17909) cleanup: remove unused vars, includes, functions (#2306) +- [`3d48824b4`](https://github.com/raptor3um/raptoreum/commit/3d48824b4) Update .clang-format to more accurately show the actual style (#2299) +- [`8ea40102c`](https://github.com/raptor3um/raptoreum/commit/8ea40102c) Remove leftover RBF code from BTC (#2297) +- [`76599aad3`](https://github.com/raptor3um/raptoreum/commit/76599aad3) Drop (pre-)70208 compatibility code (#2295) +- [`016681cd3`](https://github.com/raptor3um/raptoreum/commit/016681cd3) Add support for serialization of bitsets and tuples (#2293) +- [`2a95dd30c`](https://github.com/raptor3um/raptoreum/commit/2a95dd30c) Fix locking issues in DIP3 unit tests (#2285) +- [`47ca06ab3`](https://github.com/raptor3um/raptoreum/commit/47ca06ab3) DIP3 integration tests (#2280) +- [`ad6c2893c`](https://github.com/raptor3um/raptoreum/commit/ad6c2893c) Docs - Update Core version number in readme files (#2267) +- [`bc7924d41`](https://github.com/raptor3um/raptoreum/commit/bc7924d41) Add unit tests for DIP3 and DIP4 +- [`d653ace99`](https://github.com/raptor3um/raptoreum/commit/d653ace99) Update CbTx in TestChainSetup +- [`9674be8f9`](https://github.com/raptor3um/raptoreum/commit/9674be8f9) Refactor TestChain100Setup to allow different test chain setups +- [`cb37c3972`](https://github.com/raptor3um/raptoreum/commit/cb37c3972) Bump PROTOCOL_VERSION to 70211, bump MIN_* protocols to 70210 (#2256) +- [`b99886532`](https://github.com/raptor3um/raptoreum/commit/b99886532) add link for developer-notes in contributing (#2260) +- [`fded838c9`](https://github.com/raptor3um/raptoreum/commit/fded838c9) RPC folder: Cleaned up brackets on if, while, for, BOOST_FOREACH. Some whitespace fixes (#2257) +- [`5295c78cc`](https://github.com/raptor3um/raptoreum/commit/5295c78cc) Fix typo in "penalty" (#2247) +- [`c566ce75d`](https://github.com/raptor3um/raptoreum/commit/c566ce75d) Update copyright in specialtx.h/cpp +- [`e002c50b0`](https://github.com/raptor3um/raptoreum/commit/e002c50b0) Add "immer" functional/immutable containers library (#2244) +- [`799e3c312`](https://github.com/raptor3um/raptoreum/commit/799e3c312) Perform Jenkins builds in /raptoreum-src all the time to fix caching issues (#2242) +- [`b6896387a`](https://github.com/raptor3um/raptoreum/commit/b6896387a) Move DIP1 transaction size checks out of ContextualCheckBlock and use ContextualCheckTransaction instead (#2238) +- [`e415fd049`](https://github.com/raptor3um/raptoreum/commit/e415fd049) Revert CSmartnodePayments::IsTransactionValid to the logic before the recent refactorings (#2237) +- [`8da88ecf6`](https://github.com/raptor3um/raptoreum/commit/8da88ecf6) Don't crash when formatting in logging throws exceptions (#2231) +- [`2e06f8133`](https://github.com/raptor3um/raptoreum/commit/2e06f8133) fix missed format parameter (#2229) +- [`3d654b981`](https://github.com/raptor3um/raptoreum/commit/3d654b981) Build bionic base image in Jenkinsfile.gitian & update docs (#2226) +- [`c09f57bd7`](https://github.com/raptor3um/raptoreum/commit/c09f57bd7) Backport move to Ubuntu Bionic and GCC7 in Gitian builds (#2225) +- [`7cf9572c2`](https://github.com/raptor3um/raptoreum/commit/7cf9572c2) Backport Bitcoin #11881: Remove Python2 support (#2224) +- [`633879cd2`](https://github.com/raptor3um/raptoreum/commit/633879cd2) Only use version 1 and 2 transactions for sighash_tests (#2219) +- [`2d4e18537`](https://github.com/raptor3um/raptoreum/commit/2d4e18537) Some useful commits from the DIP3 PR in regard to integration tests (#2218) +- [`106bab1ae`](https://github.com/raptor3um/raptoreum/commit/106bab1ae) Add new ParseXXX methods to easily parse UniValue values (#2211) +- [`c4c610783`](https://github.com/raptor3um/raptoreum/commit/c4c610783) Use C++14 standard when building (#2209) +- [`589a77013`](https://github.com/raptor3um/raptoreum/commit/589a77013) Correction to release date for 0.12.0 (#2205) +- [`96435288f`](https://github.com/raptor3um/raptoreum/commit/96435288f) Move block template specific stuff from CBlock to CBlockTemplate (#2195) +- [`3d002c946`](https://github.com/raptor3um/raptoreum/commit/3d002c946) Fix active smartnode task schedule (#2193) +- [`65b904526`](https://github.com/raptor3um/raptoreum/commit/65b904526) Add helpers GetSentinelString() and GetDaemonString() to CSmartnodePing (#2192) +- [`eb202e812`](https://github.com/raptor3um/raptoreum/commit/eb202e812) Use ccache in gitian builds (#2185) +- [`b47617325`](https://github.com/raptor3um/raptoreum/commit/b47617325) Install python3 in gitian builds (#2182) +- [`7a85e24c3`](https://github.com/raptor3um/raptoreum/commit/7a85e24c3) Remove deprecated gitian-rpi2.yml descriptor (#2183) +- [`1681d6366`](https://github.com/raptor3um/raptoreum/commit/1681d6366) Replace Raptoreum-specific threads with Raptoreum-specific scheduled tasks (#2043) +- [`dac090964`](https://github.com/raptor3um/raptoreum/commit/dac090964) remove raptoreum.io dns seed entry (#2181) +- [`753c2436b`](https://github.com/raptor3um/raptoreum/commit/753c2436b) Fix MissingPropertyException on Jenkins when no cache was found (#2180) +- [`f3e380659`](https://github.com/raptor3um/raptoreum/commit/f3e380659) Move to in-docker CI builds and add Jenkins support (#2178) +- [`23dde9f12`](https://github.com/raptor3um/raptoreum/commit/23dde9f12) Remove a few annoying debug prints from CSmartnodeMan (#2179) +- [`5036d7dfc`](https://github.com/raptor3um/raptoreum/commit/5036d7dfc) depends: Update Qt download url (#2177) +- [`e23339d6f`](https://github.com/raptor3um/raptoreum/commit/e23339d6f) use nullptr in Raptoreum-specific code (#2166) +- [`42c193df0`](https://github.com/raptor3um/raptoreum/commit/42c193df0) replace map count/insert w/emplace in instantx.cpp (#2165) +- [`fd70a1eb9`](https://github.com/raptor3um/raptoreum/commit/fd70a1eb9) iterator cleanup in several places (#2164) +- [`df1be90ce`](https://github.com/raptor3um/raptoreum/commit/df1be90ce) Update links to obsolete documentation (#2162) +- [`448e92f4a`](https://github.com/raptor3um/raptoreum/commit/448e92f4a) GetOutPointPrivateSendRounds readability (#2149) +- [`6da2837bd`](https://github.com/raptor3um/raptoreum/commit/6da2837bd) InstantSend Integration tests (#2141) +- [`8ee9333bc`](https://github.com/raptor3um/raptoreum/commit/8ee9333bc) remove boost dependency from Raptoreum-specific code (#2072) +- [`a527845e4`](https://github.com/raptor3um/raptoreum/commit/a527845e4) Bump to 0.12.4.0 pre-release (#2167) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alexander Block +- UdjinM6 +- PastaPastaPasta +- gladcow +- Nathan Marley +- thephez +- strophy +- PaulieD +- InhumanPerfection +- Spencer Lievens +- -k +- Salisbury +- Solar Designer +- Oleg Girko +- Anton Suprunchuk + +As well as everyone that submitted issues, reviewed pull requests or helped translating on +[Transifex](https://www.transifex.com/projects/p/raptoreum/). + +Older releases +============== + +Raptoreum was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of smartnodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Raptoreum. + +Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 + diff --git a/doc/release-notes/raptoreum/release-notes-0.13.1.md b/doc/release-notes/dash/release-notes-0.13.1.md similarity index 76% rename from doc/release-notes/raptoreum/release-notes-0.13.1.md rename to doc/release-notes/dash/release-notes-0.13.1.md index a7d6b59c96..2f7140b0a9 100644 --- a/doc/release-notes/raptoreum/release-notes-0.13.1.md +++ b/doc/release-notes/dash/release-notes-0.13.1.md @@ -9,7 +9,7 @@ This is a new minor version release, bringing various bugfixes and other improve Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -73,25 +73,25 @@ in some rare cases otherwise); 0.13.1.0 Change log =================== -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.13.0.0...raptoreum:v0.13.1.0). +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.13.0.0...raptoreum:v0.13.1.0). ### Backports -- [`da5a861c0`](https://github.com/raptoreum/raptoreum/commit/da5a861c0) Change the way invalid ProTxes are handled in `addUnchecked` and `existsProviderTxConflict` (#2691) -- [`6ada90c11`](https://github.com/raptoreum/raptoreum/commit/6ada90c11) Call existsProviderTxConflict after CheckSpecialTx (#2690) -- [`23eb70cb7`](https://github.com/raptoreum/raptoreum/commit/23eb70cb7) Add getspecialtxes rpc (#2668) -- [`023f8a01a`](https://github.com/raptoreum/raptoreum/commit/023f8a01a) Fix bench log for payee and special txes (#2678) -- [`8961a6acc`](https://github.com/raptoreum/raptoreum/commit/8961a6acc) Stop checking MN protocol version before signalling DIP3 (#2684) -- [`e18916386`](https://github.com/raptoreum/raptoreum/commit/e18916386) Add missing help text for `operatorPayoutAddress` (#2679) -- [`0d8cc0761`](https://github.com/raptoreum/raptoreum/commit/0d8cc0761) Invoke CheckSpecialTx after all normal TX checks have passed (#2673) -- [`592210daf`](https://github.com/raptoreum/raptoreum/commit/592210daf) Bump block stats when adding commitment tx into block (#2654) -- [`070ad103f`](https://github.com/raptoreum/raptoreum/commit/070ad103f) Wait for script checks to finish before messing with txes in Raptoreum-specific way (#2652) -- [`3a3586d5a`](https://github.com/raptoreum/raptoreum/commit/3a3586d5a) Use helper function to produce help text for params of `protx` rpcs (#2649) -- [`332e0361c`](https://github.com/raptoreum/raptoreum/commit/332e0361c) Add checkbox to show only smartnodes the wallet has keys for (#2627) +- [`da5a861c0`](https://github.com/raptor3um/raptoreum/commit/da5a861c0) Change the way invalid ProTxes are handled in `addUnchecked` and `existsProviderTxConflict` (#2691) +- [`6ada90c11`](https://github.com/raptor3um/raptoreum/commit/6ada90c11) Call existsProviderTxConflict after CheckSpecialTx (#2690) +- [`23eb70cb7`](https://github.com/raptor3um/raptoreum/commit/23eb70cb7) Add getspecialtxes rpc (#2668) +- [`023f8a01a`](https://github.com/raptor3um/raptoreum/commit/023f8a01a) Fix bench log for payee and special txes (#2678) +- [`8961a6acc`](https://github.com/raptor3um/raptoreum/commit/8961a6acc) Stop checking MN protocol version before signalling DIP3 (#2684) +- [`e18916386`](https://github.com/raptor3um/raptoreum/commit/e18916386) Add missing help text for `operatorPayoutAddress` (#2679) +- [`0d8cc0761`](https://github.com/raptor3um/raptoreum/commit/0d8cc0761) Invoke CheckSpecialTx after all normal TX checks have passed (#2673) +- [`592210daf`](https://github.com/raptor3um/raptoreum/commit/592210daf) Bump block stats when adding commitment tx into block (#2654) +- [`070ad103f`](https://github.com/raptor3um/raptoreum/commit/070ad103f) Wait for script checks to finish before messing with txes in Raptoreum-specific way (#2652) +- [`3a3586d5a`](https://github.com/raptor3um/raptoreum/commit/3a3586d5a) Use helper function to produce help text for params of `protx` rpcs (#2649) +- [`332e0361c`](https://github.com/raptor3um/raptoreum/commit/332e0361c) Add checkbox to show only smartnodes the wallet has keys for (#2627) ### Other -- [`bd0de4876`](https://github.com/raptoreum/raptoreum/commit/bd0de4876) Bump version to 0.13.1 (#2686) +- [`bd0de4876`](https://github.com/raptor3um/raptoreum/commit/bd0de4876) Bump version to 0.13.1 (#2686) Credits ======= @@ -126,19 +126,19 @@ Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 +- [v0.13.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/raptoreum/release-notes-0.13.2.md b/doc/release-notes/dash/release-notes-0.13.2.md similarity index 80% rename from doc/release-notes/raptoreum/release-notes-0.13.2.md rename to doc/release-notes/dash/release-notes-0.13.2.md index fa0a6eed71..35d96e39e4 100644 --- a/doc/release-notes/raptoreum/release-notes-0.13.2.md +++ b/doc/release-notes/dash/release-notes-0.13.2.md @@ -9,7 +9,7 @@ This is a new minor version release, bringing various bugfixes and other improve Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -96,27 +96,27 @@ There are few bug fixes in this release: 0.13.2.0 Change log =================== -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.13.1.0...raptoreum:v0.13.2.0). +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.13.1.0...raptoreum:v0.13.2.0). ### Backports -- [`548a48918`](https://github.com/raptoreum/raptoreum/commit/548a48918) Move IS block filtering into ConnectBlock (#2766) -- [`6374dce99`](https://github.com/raptoreum/raptoreum/commit/6374dce99) Fix error message for invalid voting addresses (#2747) -- [`25222b378`](https://github.com/raptoreum/raptoreum/commit/25222b378) Make -smartnodeblsprivkey mandatory when -smartnode is given (#2745) -- [`0364e033a`](https://github.com/raptoreum/raptoreum/commit/0364e033a) Implement 2-stage commit for CEvoDB to avoid inconsistencies after crashes (#2744) -- [`a11e2f9eb`](https://github.com/raptoreum/raptoreum/commit/a11e2f9eb) Add collateraladdress into smartnode/protx list rpc output (#2740) -- [`43612a272`](https://github.com/raptoreum/raptoreum/commit/43612a272) Only include selected TX types into CMerkleBlock (#2737) -- [`f868fbc78`](https://github.com/raptoreum/raptoreum/commit/f868fbc78) Stop g_connman first before deleting it (#2734) -- [`9e233f391`](https://github.com/raptoreum/raptoreum/commit/9e233f391) Fix incorrect usage of begin() when genesis block is requested in "protx diff" (#2699) -- [`e75f971b9`](https://github.com/raptoreum/raptoreum/commit/e75f971b9) Do not process blocks in CDeterministicMNManager before dip3 activation (#2698) -- [`1cc47ebcd`](https://github.com/raptoreum/raptoreum/commit/1cc47ebcd) Backport #14701: build: Add CLIENT_VERSION_BUILD to CFBundleGetInfoString (#2687) +- [`548a48918`](https://github.com/raptor3um/raptoreum/commit/548a48918) Move IS block filtering into ConnectBlock (#2766) +- [`6374dce99`](https://github.com/raptor3um/raptoreum/commit/6374dce99) Fix error message for invalid voting addresses (#2747) +- [`25222b378`](https://github.com/raptor3um/raptoreum/commit/25222b378) Make -smartnodeblsprivkey mandatory when -smartnode is given (#2745) +- [`0364e033a`](https://github.com/raptor3um/raptoreum/commit/0364e033a) Implement 2-stage commit for CEvoDB to avoid inconsistencies after crashes (#2744) +- [`a11e2f9eb`](https://github.com/raptor3um/raptoreum/commit/a11e2f9eb) Add collateraladdress into smartnode/protx list rpc output (#2740) +- [`43612a272`](https://github.com/raptor3um/raptoreum/commit/43612a272) Only include selected TX types into CMerkleBlock (#2737) +- [`f868fbc78`](https://github.com/raptor3um/raptoreum/commit/f868fbc78) Stop g_connman first before deleting it (#2734) +- [`9e233f391`](https://github.com/raptor3um/raptoreum/commit/9e233f391) Fix incorrect usage of begin() when genesis block is requested in "protx diff" (#2699) +- [`e75f971b9`](https://github.com/raptor3um/raptoreum/commit/e75f971b9) Do not process blocks in CDeterministicMNManager before dip3 activation (#2698) +- [`1cc47ebcd`](https://github.com/raptor3um/raptoreum/commit/1cc47ebcd) Backport #14701: build: Add CLIENT_VERSION_BUILD to CFBundleGetInfoString (#2687) ### Other -- [`2516a6e19`](https://github.com/raptoreum/raptoreum/commit/2516a6e19) Bump version to 0.13.2 -- [`9dd16cdbe`](https://github.com/raptoreum/raptoreum/commit/9dd16cdbe) Bump minChainWork and AssumeValid to block #1033120 (#2750) -- [`18f087b27`](https://github.com/raptoreum/raptoreum/commit/18f087b27) Fix some typos in doc/guide-startmany.md (#2711) -- [`709ab6d3e`](https://github.com/raptoreum/raptoreum/commit/709ab6d3e) Minimal fix for litemode vs bad-protx-key-not-same issue (#2694) +- [`2516a6e19`](https://github.com/raptor3um/raptoreum/commit/2516a6e19) Bump version to 0.13.2 +- [`9dd16cdbe`](https://github.com/raptor3um/raptoreum/commit/9dd16cdbe) Bump minChainWork and AssumeValid to block #1033120 (#2750) +- [`18f087b27`](https://github.com/raptor3um/raptoreum/commit/18f087b27) Fix some typos in doc/guide-startmany.md (#2711) +- [`709ab6d3e`](https://github.com/raptor3um/raptoreum/commit/709ab6d3e) Minimal fix for litemode vs bad-protx-key-not-same issue (#2694) Credits ======= @@ -153,20 +153,20 @@ Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v0.13.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 +- [v0.13.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/raptoreum/release-notes-0.13.3.md b/doc/release-notes/dash/release-notes-0.13.3.md similarity index 77% rename from doc/release-notes/raptoreum/release-notes-0.13.3.md rename to doc/release-notes/dash/release-notes-0.13.3.md index d767ddee27..35494429cd 100644 --- a/doc/release-notes/raptoreum/release-notes-0.13.3.md +++ b/doc/release-notes/dash/release-notes-0.13.3.md @@ -9,7 +9,7 @@ This is a new minor version release, bringing various bugfixes and other improve Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -70,21 +70,21 @@ There are few bug fixes in this release: 0.13.3.0 Change log =================== -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.13.2.0...raptoreum:v0.13.3.0). +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.13.2.0...raptoreum:v0.13.3.0). ### Backports -- [`575cafc01`](https://github.com/raptoreum/raptoreum/commit/575cafc01) Do not skip pushing of vMatch and vHashes in CMerkleBlock (#2826) -- [`8c58799d8`](https://github.com/raptoreum/raptoreum/commit/8c58799d8) There can be no two votes which differ by the outcome only (#2819) -- [`66c2f3953`](https://github.com/raptoreum/raptoreum/commit/66c2f3953) Fix vote ratecheck (#2813) -- [`b52d0ad19`](https://github.com/raptoreum/raptoreum/commit/b52d0ad19) Fix revoke reason check for ProUpRevTx (#2787) -- [`35914e084`](https://github.com/raptoreum/raptoreum/commit/35914e084) Skip mempool.dat when wallet is starting in "zap" mode (#2782) -- [`46d875100`](https://github.com/raptoreum/raptoreum/commit/46d875100) Disable in-wallet miner for win/macos Travis/Gitian builds (#2778) +- [`575cafc01`](https://github.com/raptor3um/raptoreum/commit/575cafc01) Do not skip pushing of vMatch and vHashes in CMerkleBlock (#2826) +- [`8c58799d8`](https://github.com/raptor3um/raptoreum/commit/8c58799d8) There can be no two votes which differ by the outcome only (#2819) +- [`66c2f3953`](https://github.com/raptor3um/raptoreum/commit/66c2f3953) Fix vote ratecheck (#2813) +- [`b52d0ad19`](https://github.com/raptor3um/raptoreum/commit/b52d0ad19) Fix revoke reason check for ProUpRevTx (#2787) +- [`35914e084`](https://github.com/raptor3um/raptoreum/commit/35914e084) Skip mempool.dat when wallet is starting in "zap" mode (#2782) +- [`46d875100`](https://github.com/raptor3um/raptoreum/commit/46d875100) Disable in-wallet miner for win/macos Travis/Gitian builds (#2778) ### Other -- [`25038ff36`](https://github.com/raptoreum/raptoreum/commit/25038ff36) Bump version to 0.13.3.0 -- [`53b2162e2`](https://github.com/raptoreum/raptoreum/commit/53b2162e2) Harden spork15 value to 1047200 when on mainnet (#2830) +- [`25038ff36`](https://github.com/raptor3um/raptoreum/commit/25038ff36) Bump version to 0.13.3.0 +- [`53b2162e2`](https://github.com/raptor3um/raptoreum/commit/53b2162e2) Harden spork15 value to 1047200 when on mainnet (#2830) Credits ======= @@ -120,21 +120,21 @@ Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v0.13.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 -- [v0.13.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 +- [v0.13.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/raptoreum/release-notes-0.14.0.1.md b/doc/release-notes/dash/release-notes-0.14.0.1.md similarity index 76% rename from doc/release-notes/raptoreum/release-notes-0.14.0.1.md rename to doc/release-notes/dash/release-notes-0.14.0.1.md index 85830097c4..0339b8ef57 100644 --- a/doc/release-notes/raptoreum/release-notes-0.14.0.1.md +++ b/doc/release-notes/dash/release-notes-0.14.0.1.md @@ -9,7 +9,7 @@ This is a new minor version release, bringing various bugfixes. Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -61,11 +61,11 @@ would happen. 0.14.0.1 Change log =================== -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.14.0.0...raptoreum:v0.14.0.1). +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.14.0.0...raptoreum:v0.14.0.1). -- [`a2baa93ec`](https://github.com/raptoreum/raptoreum/commit/a2baa93ec) Only require valid collaterals for votes and triggers (#2947) (#2957) -- [`b293e6dde`](https://github.com/raptoreum/raptoreum/commit/b293e6dde) Fix off-by-one error in InstantSend mining info removal when disconnecting blocks (#2951) -- [`276b6e3a8`](https://github.com/raptoreum/raptoreum/commit/276b6e3a8) bump version to 0.14.0.1 and prepare release notes (#2952) +- [`a2baa93ec`](https://github.com/raptor3um/raptoreum/commit/a2baa93ec) Only require valid collaterals for votes and triggers (#2947) (#2957) +- [`b293e6dde`](https://github.com/raptor3um/raptoreum/commit/b293e6dde) Fix off-by-one error in InstantSend mining info removal when disconnecting blocks (#2951) +- [`276b6e3a8`](https://github.com/raptor3um/raptoreum/commit/276b6e3a8) bump version to 0.14.0.1 and prepare release notes (#2952) Credits ======= @@ -101,23 +101,23 @@ Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v0.14.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 -- [v0.13.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 -- [v0.13.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 -- [v0.13.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 +- [v0.14.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/dash/release-notes-0.14.0.2.md b/doc/release-notes/dash/release-notes-0.14.0.2.md new file mode 100644 index 0000000000..d51565b28b --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.14.0.2.md @@ -0,0 +1,133 @@ +Raptoreum Core version 0.14.0.2 +========================== + +Release is now available from: + + + +This is a new minor version release, bringing various bugfixes. + +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/Raptoreum-Qt (on Mac) or +raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading from +version 0.13 should not require any additional actions. + +Downgrade warning +----------------- + +### Downgrade to a version < 0.14.0.0 + +Downgrading to a version smaller than 0.14 is not supported anymore as DIP8 has +activated on mainnet and testnet. + +### Downgrade to versions 0.14.0.0 - 0.14.0.1 + +Downgrading to older 0.14 releases is fully supported but is not +recommended unless you have some serious issues with version 0.14.0.2. + +Notable changes +=============== + +Performance improvements +------------------------ +Slow startup times were observed in older versions. This was due to sub-optimal handling of old +deterministic smartnode lists which caused the loading of too many lists into memory. This should be +fixed now. + +Fixed excessive memory use +-------------------------- +Multiple issues were found which caused excessive use of memory in some situations, especially when +a full reindex was performed, causing the node to crash even when enough RAM was available. This should +be fixed now. + +Fixed out-of-sync smartnode list UI +------------------------------------ +The smartnode tab, which shows the smartnode list, was not always up-to-date as it missed some internal +updates. This should be fixed now. + +0.14.0.2 Change log +=================== + +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.14.0.1...raptoreum:v0.14.0.2). + +- [`d2ff63e8d`](https://github.com/raptor3um/raptoreum/commit/d2ff63e8d) Use std::unique_ptr for mnList in CSimplifiedMNList (#3014) +- [`321bbf5af`](https://github.com/raptor3um/raptoreum/commit/321bbf5af) Fix excessive memory use when flushing chainstate and EvoDB (#3008) +- [`0410259dd`](https://github.com/raptor3um/raptoreum/commit/0410259dd) Fix 2 common Travis failures which happen when Travis has network issues (#3003) +- [`8d763c144`](https://github.com/raptor3um/raptoreum/commit/8d763c144) Only load signingActiveQuorumCount + 1 quorums into cache (#3002) +- [`2dc1b06ec`](https://github.com/raptor3um/raptoreum/commit/2dc1b06ec) Remove skipped denom from the list on tx commit (#2997) +- [`dff2c851d`](https://github.com/raptor3um/raptoreum/commit/dff2c851d) Update manpages for 0.14.0.2 (#2999) +- [`46c4f5844`](https://github.com/raptor3um/raptoreum/commit/46c4f5844) Use Travis stages instead of custom timeouts (#2948) +- [`49c37b82a`](https://github.com/raptor3um/raptoreum/commit/49c37b82a) Back off for 1m when connecting to quorum smartnodes (#2975) +- [`c1f756fd9`](https://github.com/raptor3um/raptoreum/commit/c1f756fd9) Multiple speed optimizations for deterministic MN list handling (#2972) +- [`11699f540`](https://github.com/raptor3um/raptoreum/commit/11699f540) Process/keep messages/connections from PoSe-banned MNs (#2967) +- [`c5415e746`](https://github.com/raptor3um/raptoreum/commit/c5415e746) Fix UI smartnode list (#2966) +- [`fb6f0e04d`](https://github.com/raptor3um/raptoreum/commit/fb6f0e04d) Bump version to 0.14.0.2 and copy release notes (#2991) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alexander Block (codablock) +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Raptoreum was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of smartnodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Raptoreum. + +Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.14.0.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 + diff --git a/doc/release-notes/raptoreum/release-notes-0.14.0.3.md b/doc/release-notes/dash/release-notes-0.14.0.3.md similarity index 75% rename from doc/release-notes/raptoreum/release-notes-0.14.0.3.md rename to doc/release-notes/dash/release-notes-0.14.0.3.md index 42cf3b5817..bb1e2cbc59 100644 --- a/doc/release-notes/raptoreum/release-notes-0.14.0.3.md +++ b/doc/release-notes/dash/release-notes-0.14.0.3.md @@ -9,7 +9,7 @@ This is a new minor version release, bringing various bugfixes and improvements. Please report bugs using the issue tracker at github: - + Upgrading and downgrading @@ -88,26 +88,26 @@ The "getmempoolinfo" RPC also has a new field now which shows the same informati 0.14.0.3 Change log =================== -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.14.0.2...raptoreum:v0.14.0.3). - -- [`f2443709b`](https://github.com/raptoreum/raptoreum/commit/f2443709b) Update release-notes.md for 0.14.0.3 (#3054) -- [`17ba23871`](https://github.com/raptoreum/raptoreum/commit/17ba23871) Re-verify invalid IS sigs when the active quorum set rotated (#3052) -- [`8c49d9b54`](https://github.com/raptoreum/raptoreum/commit/8c49d9b54) Remove recovered sigs from the LLMQ db when corresponding IS locks get confirmed (#3048) -- [`2e0cf8a30`](https://github.com/raptoreum/raptoreum/commit/2e0cf8a30) Add "instantsendlocks" to getmempoolinfo RPC (#3047) -- [`a8fb8252e`](https://github.com/raptoreum/raptoreum/commit/a8fb8252e) Use fEnablePrivateSend instead of fPrivateSendRunning -- [`a198a04e0`](https://github.com/raptoreum/raptoreum/commit/a198a04e0) Show number of InstantSend locks in Debug Console (#2919) -- [`013169d63`](https://github.com/raptoreum/raptoreum/commit/013169d63) Optimize on-disk deterministic smartnode storage to reduce size of evodb (#3017) -- [`9ac7a998b`](https://github.com/raptoreum/raptoreum/commit/9ac7a998b) Add "isValidMember" and "memberIndex" to "quorum memberof" and allow to specify quorum scan count (#3009) -- [`99824a879`](https://github.com/raptoreum/raptoreum/commit/99824a879) Implement "quorum memberof" (#3004) -- [`7ea319fd2`](https://github.com/raptoreum/raptoreum/commit/7ea319fd2) Bail out properly on Evo DB consistency check failures in ConnectBlock/DisconnectBlock (#3044) -- [`b1ffedb2d`](https://github.com/raptoreum/raptoreum/commit/b1ffedb2d) Do not count 0-fee txes for fee estimation (#3037) -- [`974055a9b`](https://github.com/raptoreum/raptoreum/commit/974055a9b) Fix broken link in PrivateSend info dialog (#3031) -- [`781b16579`](https://github.com/raptoreum/raptoreum/commit/781b16579) Merge pull request #3028 from PastaPastaPasta/backport-12588 -- [`5af6ce91d`](https://github.com/raptoreum/raptoreum/commit/5af6ce91d) Add Raptoreum Core Group codesign certificate (#3027) -- [`873ab896c`](https://github.com/raptoreum/raptoreum/commit/873ab896c) Fix osslsigncode compile issue in gitian-build (#3026) -- [`ea8569e97`](https://github.com/raptoreum/raptoreum/commit/ea8569e97) Backport #12783: macOS: disable AppNap during sync (and mixing) (#3024) -- [`4286dde49`](https://github.com/raptoreum/raptoreum/commit/4286dde49) Remove support for InstantSend locked gobject collaterals (#3019) -- [`788d42dbc`](https://github.com/raptoreum/raptoreum/commit/788d42dbc) Bump version to 0.14.0.3 and copy release notes (#3053) +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.14.0.2...raptoreum:v0.14.0.3). + +- [`f2443709b`](https://github.com/raptor3um/raptoreum/commit/f2443709b) Update release-notes.md for 0.14.0.3 (#3054) +- [`17ba23871`](https://github.com/raptor3um/raptoreum/commit/17ba23871) Re-verify invalid IS sigs when the active quorum set rotated (#3052) +- [`8c49d9b54`](https://github.com/raptor3um/raptoreum/commit/8c49d9b54) Remove recovered sigs from the LLMQ db when corresponding IS locks get confirmed (#3048) +- [`2e0cf8a30`](https://github.com/raptor3um/raptoreum/commit/2e0cf8a30) Add "instantsendlocks" to getmempoolinfo RPC (#3047) +- [`a8fb8252e`](https://github.com/raptor3um/raptoreum/commit/a8fb8252e) Use fEnablePrivateSend instead of fPrivateSendRunning +- [`a198a04e0`](https://github.com/raptor3um/raptoreum/commit/a198a04e0) Show number of InstantSend locks in Debug Console (#2919) +- [`013169d63`](https://github.com/raptor3um/raptoreum/commit/013169d63) Optimize on-disk deterministic smartnode storage to reduce size of evodb (#3017) +- [`9ac7a998b`](https://github.com/raptor3um/raptoreum/commit/9ac7a998b) Add "isValidMember" and "memberIndex" to "quorum memberof" and allow to specify quorum scan count (#3009) +- [`99824a879`](https://github.com/raptor3um/raptoreum/commit/99824a879) Implement "quorum memberof" (#3004) +- [`7ea319fd2`](https://github.com/raptor3um/raptoreum/commit/7ea319fd2) Bail out properly on Evo DB consistency check failures in ConnectBlock/DisconnectBlock (#3044) +- [`b1ffedb2d`](https://github.com/raptor3um/raptoreum/commit/b1ffedb2d) Do not count 0-fee txes for fee estimation (#3037) +- [`974055a9b`](https://github.com/raptor3um/raptoreum/commit/974055a9b) Fix broken link in PrivateSend info dialog (#3031) +- [`781b16579`](https://github.com/raptor3um/raptoreum/commit/781b16579) Merge pull request #3028 from PastaPastaPasta/backport-12588 +- [`5af6ce91d`](https://github.com/raptor3um/raptoreum/commit/5af6ce91d) Add Raptoreum Core Group codesign certificate (#3027) +- [`873ab896c`](https://github.com/raptor3um/raptoreum/commit/873ab896c) Fix osslsigncode compile issue in gitian-build (#3026) +- [`ea8569e97`](https://github.com/raptor3um/raptoreum/commit/ea8569e97) Backport #12783: macOS: disable AppNap during sync (and mixing) (#3024) +- [`4286dde49`](https://github.com/raptor3um/raptoreum/commit/4286dde49) Remove support for InstantSend locked gobject collaterals (#3019) +- [`788d42dbc`](https://github.com/raptor3um/raptoreum/commit/788d42dbc) Bump version to 0.14.0.3 and copy release notes (#3053) Credits ======= @@ -145,25 +145,25 @@ Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. These release are considered obsolete. Old release notes can be found here: -- [v0.14.0.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.2.md) released July/4/2019 -- [v0.14.0.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.1.md) released May/31/2019 -- [v0.14.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 -- [v0.13.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 -- [v0.13.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 -- [v0.13.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 +- [v0.14.0.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/dash/release-notes-0.14.0.4.md b/doc/release-notes/dash/release-notes-0.14.0.4.md new file mode 100644 index 0000000000..e1895ab346 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.14.0.4.md @@ -0,0 +1,177 @@ +Raptoreum Core version 0.14.0.4 +========================== + +Release is now available from: + + + +This is a new minor version release, bringing various bugfixes and 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/Raptoreum-Qt (on Mac) or +raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading from +version 0.13 should not require any additional actions. + +When upgrading from a version prior to 0.14.0.3, the +first startup of Raptoreum Core will run a migration process which can take a few minutes +to finish. After the migration, a downgrade to an older version is only possible with +a reindex (or reindex-chainstate). + +Downgrade warning +----------------- + +### Downgrade to a version < 0.14.0.3 + +Downgrading to a version smaller than 0.14.0.3 is not supported anymore due to changes +in the "evodb" database format. If you need to use an older version, you have to perform +a reindex or re-sync the whole chain. + +Notable changes +=============== + +Fix respends of freshly received InstantSend transactions +--------------------------------------------------------- + +A bug in Raptoreum Core caused respends to not work before a received InstantSend transaction was confirmed in at least +one block. This is fixed in this release, so that InstantSend locked mempool transactions can be +respent immediately in Raptoreum Core (other wallets were not affected). + +Deprecation of SPORK_16_INSTANTSEND_AUTOLOCKS +--------------------------------------------- + +With the activation of SPORK_20_INSTANTSEND_LLMQ_BASED a few month ago, all transactions started to be locked via +InstantSend, which already partly deprecated SPORK_16_INSTANTSEND_AUTOLOCKS. This release removes the last use +of SPORK_16_INSTANTSEND_AUTOLOCKS, which caused InstantSend to stop working when the mempool got too large. + +Improve orphan transaction limit handling +----------------------------------------- + +Instead of limiting orphan transaction by number of transaction, we limit orphans by total size in bytes +now. This allows to have thousands of orphan transactions before hitting the limit. + +Discrepancies in orphan sets between nodes and handling of those was one of the major limiting factors in +the stress tests performed by an unknown entity on mainnet. + +Improve re-requesting for already known transactions +---------------------------------------------------- + +Previously, Raptoreum would re-request old transactions even though they were already known locally. This +happened when the outputs were respent very shortly after confirmation of the transaction. This lead to +wrongly handling these transactions as orphans, filling up the orphan set and hitting limits very fast. +This release fixes this for nodes which have txindex enabled, which is the case for all smartnodes. Normal +nodes (without txindex) can ignore the issue as they are not involved in active InstantSend locking. + +Another issue fixed in this release is the re-requesting of transactions after an InstantSend lock invalidated +a conflicting transaction. + +Multiple improvements to PrivateSend +------------------------------------ + +Multiple improvements to PrivateSend are introduced in this release, leading to faster mixing and more +reasonable selection of UTXOs when sending PrivateSend funds. + +Fix for CVE-2017-18350 +---------------------- + +Bitcoin silently implemented a hidden fix for [CVE-2017-18350](https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-November/017453.html). +in Bitcoin v0.15.1. This release of Raptoreum Core includes a backport of this fix. + + +0.14.0.4 Change log +=================== + +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.14.0.3...raptoreum:v0.14.0.4). + +- [`5f98ed7a5`](https://github.com/raptor3um/raptoreum/commit/5f98ed7a5) [v0.14.0.x] Bump version to 0.14.0.4 and draft release notes (#3203) +- [`c0dda38fe`](https://github.com/raptor3um/raptoreum/commit/c0dda38fe) Circumvent BIP69 sorting in fundrawtransaction.py test (#3100) +- [`64ae6365f`](https://github.com/raptor3um/raptoreum/commit/64ae6365f) Fix compile issues +- [`36473015b`](https://github.com/raptor3um/raptoreum/commit/36473015b) Merge #11397: net: Improve and document SOCKS code +- [`66e298728`](https://github.com/raptor3um/raptoreum/commit/66e298728) Slightly optimize ApproximateBestSubset and its usage for PS txes (#3184) +- [`16b6b6f7c`](https://github.com/raptor3um/raptoreum/commit/16b6b6f7c) Update activemn if protx info changed (#3176) +- [`ce6687130`](https://github.com/raptor3um/raptoreum/commit/ce6687130) Actually update spent index on DisconnectBlock (#3167) +- [`9b49bfda8`](https://github.com/raptor3um/raptoreum/commit/9b49bfda8) Only track last seen time instead of first and last seen time (#3165) +- [`ad720eef1`](https://github.com/raptor3um/raptoreum/commit/ad720eef1) Merge #17118: build: depends macOS: point --sysroot to SDK (#3161) +- [`909d6a4ba`](https://github.com/raptor3um/raptoreum/commit/909d6a4ba) Simulate BlockConnected/BlockDisconnected for PS caches +- [`db7f471c7`](https://github.com/raptor3um/raptoreum/commit/db7f471c7) Few fixes related to SelectCoinsGroupedByAddresses (#3144) +- [`1acd4742c`](https://github.com/raptor3um/raptoreum/commit/1acd4742c) Various fixes for mixing queues (#3138) +- [`0031d6b04`](https://github.com/raptor3um/raptoreum/commit/0031d6b04) Also consider txindex for transactions in AlreadyHave() (#3126) +- [`c4be5ac4d`](https://github.com/raptor3um/raptoreum/commit/c4be5ac4d) Ignore recent rejects filter for locked txes (#3124) +- [`f2d401aa8`](https://github.com/raptor3um/raptoreum/commit/f2d401aa8) Make orphan TX map limiting dependent on total TX size instead of TX count (#3121) +- [`87ff566a0`](https://github.com/raptor3um/raptoreum/commit/87ff566a0) Update/modernize macOS plist (#3074) +- [`2141d5f9d`](https://github.com/raptor3um/raptoreum/commit/2141d5f9d) Fix bip69 vs change position issue (#3063) +- [`75fddde67`](https://github.com/raptor3um/raptoreum/commit/75fddde67) Partially revert 3061 (#3150) +- [`c74f2cd8b`](https://github.com/raptor3um/raptoreum/commit/c74f2cd8b) Fix SelectCoinsMinConf to allow instant respends (#3061) +- [`2e7ec2369`](https://github.com/raptor3um/raptoreum/commit/2e7ec2369) [0.14.0.x] Remove check for mempool size in CInstantSendManager::CheckCanLock (#3119) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alexander Block (codablock) +- Nathan Marley (nmarley) +- PastaPastaPasta +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Raptoreum was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of smartnodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Raptoreum. + +Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.14.0.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 + diff --git a/doc/release-notes/dash/release-notes-0.14.0.5.md b/doc/release-notes/dash/release-notes-0.14.0.5.md new file mode 100644 index 0000000000..3f1832527c --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.14.0.5.md @@ -0,0 +1,141 @@ +Raptoreum Core version 0.14.0.5 +========================== + +Release is now available from: + + + +This is a new minor version release, bringing various bugfixes and improvements. +It is highly recommended to upgrade to this release as it contains a critical +fix for a possible DoS vector. + +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/Raptoreum-Qt (on Mac) or +raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading from +version 0.13 should not require any additional actions. + +When upgrading from a version prior to 0.14.0.3, the +first startup of Raptoreum Core will run a migration process which can take a few minutes +to finish. After the migration, a downgrade to an older version is only possible with +a reindex (or reindex-chainstate). + +Downgrade warning +----------------- + +### Downgrade to a version < 0.14.0.3 + +Downgrading to a version smaller than 0.14.0.3 is not supported anymore due to changes +in the "evodb" database format. If you need to use an older version, you have to perform +a reindex or re-sync the whole chain. + +Notable changes +=============== + +Fix for a DoS vector +-------------------- + +This release fixes a serious DoS vector which allows to cause memory exhaustion until the point of +out-of-memory related crashes. We highly recommend upgrading all nodes. Thanks to Bitcoin ABC +developers for finding and reporting this issue to us. + +Better handling of non-locked transactions in mined blocks +---------------------------------------------------------- + +We observed multiple cases of ChainLocks failing on mainnet. We tracked this down to a situation where +PrivateSend mixing transactions were first rejected by parts of the network (0.14.0.4 nodes) while other parts +(<=0.14.0.3) accepted the transaction into the mempool. This caused InstantSend locking to fail for these +transactions, while non-upgraded miners still included the transactions into blocks after 10 minutes. +This caused blocks to not get ChainLocked for at least 10 minutes. This release improves an already existent +fallback mechanism (retroactive InstantSend locking) to also work for transaction which are already partially +known in the network. This should cause ChainLocks to succeed in such situations. + +0.14.0.5 Change log +=================== + +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.14.0.4...raptoreum:v0.14.0.5). + +- [`20d4a27778`](https://github.com/raptor3um/raptoreum/commit/dc07a0c5e1) Make sure mempool txes are properly processed by CChainLocksHandler despite node restarts (#3230) +- [`dc07a0c5e1`](https://github.com/raptor3um/raptoreum/commit/dc07a0c5e1) [v0.14.0.x] Bump version and prepare release notes (#3228) +- [`401da32090`](https://github.com/raptor3um/raptoreum/commit/401da32090) More fixes in llmq-is-retroactive tests +- [`33721eaa11`](https://github.com/raptor3um/raptoreum/commit/33721eaa11) Make llmq-is-retroactive test compatible with 0.14.0.x +- [`85bd162a3e`](https://github.com/raptor3um/raptoreum/commit/85bd162a3e) Make wait_for_xxx methods compatible with 0.14.0.x +- [`22cfddaf12`](https://github.com/raptor3um/raptoreum/commit/22cfddaf12) Allow re-signing of IS locks when performing retroactive signing (#3219) +- [`a8b8891a1d`](https://github.com/raptor3um/raptoreum/commit/a8b8891a1d) Add wait_for_xxx methods as found in develop +- [`8dae12cc60`](https://github.com/raptor3um/raptoreum/commit/8dae12cc60) More/better logging for InstantSend +- [`fdd19cf667`](https://github.com/raptor3um/raptoreum/commit/fdd19cf667) Tests: Fix the way nodes are connected to each other in setup_network/start_smartnodes (#3221) +- [`41f0e9d028`](https://github.com/raptor3um/raptoreum/commit/41f0e9d028) More fixes related to extra_args +- [`5213118601`](https://github.com/raptor3um/raptoreum/commit/5213118601) Tests: Allow specifying different cmd-line params for each smartnode (#3222) +- [`2fef21fd80`](https://github.com/raptor3um/raptoreum/commit/2fef21fd80) Don't join thread in CQuorum::~CQuorum when called from within the thread (#3223) +- [`e69c6c3207`](https://github.com/raptor3um/raptoreum/commit/e69c6c3207) Merge #12392: Fix ignoring tx data requests when fPauseSend is set on a peer (#3225) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alexander Block (codablock) +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Raptoreum was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of smartnodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Raptoreum. + +Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.14.0.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.4.md) released November/22/2019 +- [v0.14.0.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 + diff --git a/doc/release-notes/dash/release-notes-0.14.0.md b/doc/release-notes/dash/release-notes-0.14.0.md new file mode 100644 index 0000000000..eae066312f --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.14.0.md @@ -0,0 +1,756 @@ +Raptoreum Core version 0.14.0.0 +========================== + +Release is now available from: + + + +This is a new major version release, bringing new features, various bugfixes 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/Raptoreum-Qt (on Mac) or +raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading from +version 0.13 should not require any additional actions. + +Downgrade warning +----------------- + +### Downgrade to a version < 0.13.0.0 + +Downgrading to a version smaller than 0.13 is not supported anymore as DIP2/DIP3 has +activated on mainnet and testnet. + +### Downgrade to versions 0.13.0.0 - 0.13.3.0 + +Downgrading to 0.13 releases is fully supported until DIP0008 activation but is not +recommended unless you have some serious issues with version 0.14. + +Notable changes +=============== + +DIP0004 - Coinbase Payload v2 +----------------------------- +Coinbase Payload v2 introduces new field `merkleRootQuorums` which represents the merkle root of +all the hashes of the final quorum commitments of all active LLMQ sets. This allows SPV clients +to verify active LLMQ sets and use this information to further verify ChainLocks and LLMQ-based +InstantSend messages. Coinbase Payload v2 relies on DIP0008 (bit 4) activation. + +https://github.com/raptor3um/dips/blob/master/dip-0004.md#calculating-the-merkle-root-of-the-active-llmqs + +DIP0008 - ChainLocks +-------------------- +This version introduces ChainLocks, a technology for near-instant confirmation of blocks and +finding near-instant consensus on the longest valid/accepted chain. ChainLocks leverages LLMQ +Signing Requests/Sessions to accomplish this. ChainLocks relies on DIP0008 (bit 4) activation and +`SPORK_19_CHAINLOCKS_ENABLED` spork. + +Read more: https://github.com/raptor3um/dips/blob/master/dip-0008.md + +DIP0010 - LLMQ-based InstantSend +-------------------------------- +InstantSend is a feature to allow instant confirmations of payments. It works by locking transaction +inputs through smartnode quorums. It has been present in Raptoreum for a few years and been proven to work. +Nevertheless, there are some limits which could theoretically be removed in the old system but doing so +would have created risks in terms of scalability and security. + +We introduce LLMQ-based InstantSend which is designed to be much more scalable without sacrificing +security and which allows all transactions to be treated as InstantSend transactions. The old system +differentiated transactions as InstantSend transactions by using the P2P message “ix” instead of “tx”. +Since this distinction is not required in the new system, the P2P message “ix” will be removed after +DIP0008 deployment (for now, transactions sent via "ix" message will be relayed further via "tx" message). + +Read more: https://github.com/raptor3um/dips/blob/master/dip-0010.md + +Network +------ +Legacy messages `mnw`, `mnwb`, `mnget`, `mnb`, `mnp`, `dseg`, `mnv`, `qdcommit` and their corresponding +inventory types (7, 10, 14, 15, 19, 22) are no longer suported. + +Message `version` is extended with a 256 bit field - a challenge sent to a smartnode. Smartnode which +received such a challenge must reply with new p2p message `mnauth` directly after `verack`. This `mnauth` +message must include a signed challenge that was previously sent via `version`. + +Mining +------ +Due to changes in coinbase payload this version requires for miners to signal their readiness via +BIP9-like mechanism - by setting bit 4 of the block version to 1. Note that if your mining software +simply uses `coinbase_payload` field from `getblocktemplate` RPC and doesn't construct coinbase payload +manually then there should be no changes to your mining software required. We however encourage pools +and solo-miners to check their software compatibility on testnet to ensure flawless migration. + +PrivateSend +----------- +The wallet will try to create and consume denoms a bit more accurately now. It will also only create a +limited number of inputs for each denominated amount to prevent bloating itself with mostly the smallest +denoms. You can control this number of inputs via new `-privatesenddenoms` cmd-line option (default is 300). + +InstantSend +----------- +Legacy InstantSend is going to be superseded by the newly implemented LLMQ-based one once DIP0008 (bit 4) +is active and `SPORK_20_INSTANTSEND_LLMQ_BASED` spork is ON. + +Sporks +------ +There are two new sporks introduced in this version - `SPORK_19_CHAINLOCKS_ENABLED` and +`SPORK_20_INSTANTSEND_LLMQ_BASED`. `SPORK_17_QUORUM_DKG_ENABLED` was introduced in v0.13 but was kept OFF. +It will be turned on once 80% smartnodes are upgraded to v0.14 which will enable DKG and DKG-based PoSe. + +QR codes +-------- +Wallet can now show QR codes for addresses in the address book, receiving addresses and addresses identified +in transactions list (right click -> "Show QR-code"). + +RPC changes +----------- +There are a few changes in existing RPC interfaces in this release: +- for blockchain based RPC commands `instantlock` will say `true` if the transaction +was locked via LLMQ based ChainLocks (for backwards compatibility reasons) +- `prioritisetransaction` no longer allows adjusting priority +- `getgovernanceinfo` no longer has `smartnodewatchdogmaxseconds` and `sentinelpingmaxseconds` fields +- `smartnodelist` no longer supports `activeseconds`, `daemon`, `lastseen`, `protocol`, `keyid`, `rank` +and `sentinel` modes, new mode - `pubkeyoperator` +- `smartnode count` no longer has `ps_compatible` and `qualify` fields and `ps` and `qualify` modes +- `smartnode winner` and `smartnode current` no longer have `protocol`, `lastseen` and `activeseconds` +fields, new field - `proTxHash` +- `debug` supports new categories: `chainlocks`, `llmq`, `llmq-dkg`, `llmq-sigs` +- `mnsync` no longer has `IsSmartnodeListSynced` and `IsWinnersListSynced` fields +- various RPCs that had `instantlock` field have `chainlock` (excluding mempool RPCs) and +`instantlock_internal` fields now + +There are also new RPC commands: +- `bls fromsecret` parses a BLS secret key and returns the secret/public key pair +- `quorum` is a set of commands for quorums/LLMQs e.g. `list` to show active quorums (by default, +can specify different `count`) or `info` to shows detailed information about some specific quorum +etc., see `help quorum` + +Few RPC commands are no longer supported: `estimatepriority`, `estimatesmartpriority`, +`gobject getvotes`, `smartnode start-*`, `smartnode genkey`, `smartnode list-conf`, `smartnode check`, +`smartnodebroadcast`, `sentinelping` + +See `help command` in rpc for more info. + +ZMQ changes +----------- +Added two new messages `hashchainlock` and `rawchainlock` which return the hash of the chainlocked block +or the raw block itself respectively. + +Command-line options +-------------------- + +Changes in existing cmd-line options: +- `-bip9params` supports optional `window` and `threshold` values now + +New cmd-line options: +- `-watchquorums` +- `-privatesenddenoms` +- `-dip3params` (regtest-only) +- `-llmqchainlocks` (devnet-only) + +Few cmd-line options are no longer supported: `-limitfreerelay`, `-relaypriority`, `-blockprioritysize`, +`-sendfreetransactions`, `-mnconf`, `-mnconflock`, `-smartnodeprivkey` + +See `Help -> Command-line options` in Qt wallet or `raptoreumd --help` for more info. + +Miscellaneous +------------- + +A lot of refactoring, backports, code cleanups and other small fixes were done in this release. + + 0.14.0.0 Change log +=================== + +See detailed [set of changes](https://github.com/raptor3um/raptoreum/compare/v0.13.3.0...raptoreum:v0.14.0.0). + +- [`612a90e8c`](https://github.com/raptor3um/raptoreum/commit/612a90e8c) Set CLIENT_VERSION_IS_RELEASE to true (#2926) +- [`9482f77e5`](https://github.com/raptor3um/raptoreum/commit/9482f77e5) Update help text via gen-manpages.sh (#2929) +- [`211a39d19`](https://github.com/raptor3um/raptoreum/commit/211a39d19) 0.14 release notes draft (#2896) +- [`84162021a`](https://github.com/raptor3um/raptoreum/commit/84162021a) Fix duplicate `-instantsendnotify` invocation (#2925) +- [`38aab0c5e`](https://github.com/raptor3um/raptoreum/commit/38aab0c5e) Add blocks conflicting with ChainLocks to block index (#2923) +- [`394bec483`](https://github.com/raptor3um/raptoreum/commit/394bec483) Skip processing in SyncTransaction when chain is not synced yet (#2920) +- [`c8a80b279`](https://github.com/raptor3um/raptoreum/commit/c8a80b279) Set DIP0008 mainnet activation params (#2915) +- [`040abafe3`](https://github.com/raptor3um/raptoreum/commit/040abafe3) [0.14] Bump chainparams (#2910) +- [`240238b19`](https://github.com/raptor3um/raptoreum/commit/240238b19) Fix db leaks in LLMQ db (#2914) +- [`56f31195d`](https://github.com/raptor3um/raptoreum/commit/56f31195d) Fall back to ReadBlockFromDisk when blockTxs is not filled yet (#2908) +- [`4dc5c0e9e`](https://github.com/raptor3um/raptoreum/commit/4dc5c0e9e) Bump "keepOldConnections" by one for all LLMQ types (#2909) +- [`7696a6fc8`](https://github.com/raptor3um/raptoreum/commit/7696a6fc8) Print inputs on which we voted and quorums used for signing (#2907) +- [`a173e6836`](https://github.com/raptor3um/raptoreum/commit/a173e6836) Implement integration tests for DKG error handling (#2905) +- [`89f6f7591`](https://github.com/raptor3um/raptoreum/commit/89f6f7591) Implement zmq notifications for chainlocked blocks (#2899) +- [`66a2cdeaf`](https://github.com/raptor3um/raptoreum/commit/66a2cdeaf) Properly handle conflicts between ChainLocks and InstantSend (#2904) +- [`b63f7dd39`](https://github.com/raptor3um/raptoreum/commit/b63f7dd39) Fix a crash in `smartnode winners` when `count` is too large (#2902) +- [`357b7279d`](https://github.com/raptor3um/raptoreum/commit/357b7279d) Implement isolate_node/reconnect_isolated_node in tests (#2901) +- [`7fdc66dd8`](https://github.com/raptor3um/raptoreum/commit/7fdc66dd8) Ask for locked TXs after removing conflicting TXs (#2898) +- [`5d05ab17a`](https://github.com/raptor3um/raptoreum/commit/5d05ab17a) Fix PrivateSend log (#2892) +- [`53827a376`](https://github.com/raptor3um/raptoreum/commit/53827a376) Remove code for QDEBUGSTATUS propagation (#2891) +- [`783cb9ca6`](https://github.com/raptor3um/raptoreum/commit/783cb9ca6) Skip CheckCbTxMerkleRoots until assumeValid block (#2890) +- [`4dee7c4a2`](https://github.com/raptor3um/raptoreum/commit/4dee7c4a2) Cache heavy parts of `CalcCbTxMerkleRoot*` (#2885) +- [`b3ed6410f`](https://github.com/raptor3um/raptoreum/commit/b3ed6410f) Be more accurate with denom creation/consumption (#2853) +- [`3d993ee8f`](https://github.com/raptor3um/raptoreum/commit/3d993ee8f) Translations v14 (#2638) +- [`fbd244dde`](https://github.com/raptor3um/raptoreum/commit/fbd244dde) Bail out in few more places when blockchain is not synced yet (#2888) +- [`fd6aaae7f`](https://github.com/raptor3um/raptoreum/commit/fd6aaae7f) Add proTxHash to smartnode list rpc response (#2887) +- [`dd3977523`](https://github.com/raptor3um/raptoreum/commit/dd3977523) More "bench" log for Raptoreum specific parts (#2884) +- [`8ffdcbf99`](https://github.com/raptor3um/raptoreum/commit/8ffdcbf99) A bunch of mostly trivial tweaks/fixes (#2889) +- [`195100161`](https://github.com/raptor3um/raptoreum/commit/195100161) New LLMQ-based IS should have no legacy IS strings in UI and no legacy restrictions (#2883) +- [`7f419ae7f`](https://github.com/raptor3um/raptoreum/commit/7f419ae7f) Accept non-spent LLMQ IS locked outpoints from mempool in PS mixing (#2878) +- [`2652030a2`](https://github.com/raptor3um/raptoreum/commit/2652030a2) Use larger nPruneAfterSizeIn parameter for mapAlreadyAskedFor (#2882) +- [`03021fa53`](https://github.com/raptor3um/raptoreum/commit/03021fa53) Harden DIP3 activation (#2881) +- [`dcdb9dba1`](https://github.com/raptor3um/raptoreum/commit/dcdb9dba1) Add NotifySmartnodeListChanged signal to CClientUIInterface (#2880) +- [`19a9e2f4c`](https://github.com/raptor3um/raptoreum/commit/19a9e2f4c) Report `instantlock: true` for transactions locked via ChainLocks (#2877) +- [`5cfceab86`](https://github.com/raptor3um/raptoreum/commit/5cfceab86) Refactor IS-lock GUI notification and implement a similar one for ChainLocks (#2875) +- [`ed30db713`](https://github.com/raptor3um/raptoreum/commit/ed30db713) Ensure wallet is available and unlocked for some `governance` and `evo` RPCs (#2874) +- [`0c2fdf4da`](https://github.com/raptor3um/raptoreum/commit/0c2fdf4da) Refactor some Raptoreum/mixing-specific wallet functions (#2850) +- [`22ae0bc21`](https://github.com/raptor3um/raptoreum/commit/22ae0bc21) Archive islock hashes when removing confirmed islocks (#2872) +- [`b322b4828`](https://github.com/raptor3um/raptoreum/commit/b322b4828) Wait longer until re-requesting recovered sigs and ISLOCKs from other peers (#2871) +- [`2502aadd7`](https://github.com/raptor3um/raptoreum/commit/2502aadd7) Fix infinite loop in CDBTransactionIterator::SkipDeletedAndOverwritten (#2870) +- [`cd94cbe6f`](https://github.com/raptor3um/raptoreum/commit/cd94cbe6f) Track which TXs are not locked yet and use this info in ProcessPendingRetryLockTxs (#2869) +- [`c4549aca2`](https://github.com/raptor3um/raptoreum/commit/c4549aca2) Change `quorum list` behaviour to list active quorums by default (#2866) +- [`cff9f9717`](https://github.com/raptor3um/raptoreum/commit/cff9f9717) Prefix all bls/quorum threads with `raptoreum-` (#2865) +- [`5e865f9c8`](https://github.com/raptor3um/raptoreum/commit/5e865f9c8) Bump mempool counter on each successful IS lock (#2864) +- [`a67e66143`](https://github.com/raptor3um/raptoreum/commit/a67e66143) Don't disconnect peers on MNAUTH verification failure (#2868) +- [`1d8c7226d`](https://github.com/raptor3um/raptoreum/commit/1d8c7226d) Fix race condition in sendheaders.py (#2862) +- [`0c54e41f2`](https://github.com/raptor3um/raptoreum/commit/0c54e41f2) Retry locking of child TXs in batches instead of per locked parent (#2858) +- [`fbe44761c`](https://github.com/raptor3um/raptoreum/commit/fbe44761c) Don't wake up select if it was already woken up (#2863) +- [`7fe1a4a78`](https://github.com/raptor3um/raptoreum/commit/7fe1a4a78) Also invoke WriteInstantSendLockMined when IS lock comes after the mined block (#2861) +- [`f32f9523b`](https://github.com/raptor3um/raptoreum/commit/f32f9523b) Use lazy BLS signatures more often and don't always verify self-recovered sigs (#2860) +- [`5e8ae2ceb`](https://github.com/raptor3um/raptoreum/commit/5e8ae2ceb) Disable optimistic send in PushMessage by default (#2859) +- [`90b1b7196`](https://github.com/raptor3um/raptoreum/commit/90b1b7196) Move processing of InstantSend locks into its own worker thread (#2857) +- [`ae78360e5`](https://github.com/raptor3um/raptoreum/commit/ae78360e5) Add cache to CQuorumManager::ScanQuorums (#2856) +- [`241f76f9b`](https://github.com/raptor3um/raptoreum/commit/241f76f9b) Collection of minor performance optimizations (#2855) +- [`82a47f543`](https://github.com/raptor3um/raptoreum/commit/82a47f543) Allow testing ChainLocks enforcement with spork19 == 1 (#2854) +- [`e67618ac5`](https://github.com/raptor3um/raptoreum/commit/e67618ac5) Clean up a few GUI related items (#2846) +- [`225c3898d`](https://github.com/raptor3um/raptoreum/commit/225c3898d) Don't skip "safe TX" check when ChainLocks are not enforced yet (#2851) +- [`27b2cd2cc`](https://github.com/raptor3um/raptoreum/commit/27b2cd2cc) Skip required services and port checks when outgoing connections is a MN (#2847) +- [`aeb4c60c8`](https://github.com/raptor3um/raptoreum/commit/aeb4c60c8) Reimplement CMNAuth::NotifySmartnodeListChanged to work with new interface +- [`fa90c0204`](https://github.com/raptor3um/raptoreum/commit/fa90c0204) Also call NotifySmartnodeListChanged when MNs have been updated +- [`db781b32d`](https://github.com/raptor3um/raptoreum/commit/db781b32d) Pass oldList and diff instead of newList into NotifySmartnodeListChanged +- [`b0260e970`](https://github.com/raptor3um/raptoreum/commit/b0260e970) Do not maintain CService in smartnodeQuorumNodes +- [`60788ce32`](https://github.com/raptor3um/raptoreum/commit/60788ce32) Connect to most recently updated address in ThreadOpenSmartnodeConnections +- [`93b1b3d73`](https://github.com/raptor3um/raptoreum/commit/93b1b3d73) Fix shadowing of "addr" +- [`5bebdda71`](https://github.com/raptor3um/raptoreum/commit/5bebdda71) Add GetValidMNByService to CDeterministicMNList +- [`5d94d6bdf`](https://github.com/raptor3um/raptoreum/commit/5d94d6bdf) Remove unused CConnman::ForEachQuorumMember +- [`1ba8694cd`](https://github.com/raptor3um/raptoreum/commit/1ba8694cd) Various fixes for RemoveInvalidVotes() (#2845) +- [`b5bc7c9da`](https://github.com/raptor3um/raptoreum/commit/b5bc7c9da) Call HandleFullyConfirmedBlock when ChainLocks are enabled but not enforced (#2844) +- [`9fa09b974`](https://github.com/raptor3um/raptoreum/commit/9fa09b974) CBLSWrapper::SetHexStr() should not accept non-hex strings (#2843) +- [`0f0d8eaf4`](https://github.com/raptor3um/raptoreum/commit/0f0d8eaf4) Add RPC for BLS secret to public key (#2841) +- [`6982d9854`](https://github.com/raptor3um/raptoreum/commit/6982d9854) Ignore cache files on reindex (#2840) +- [`f8bedba7c`](https://github.com/raptor3um/raptoreum/commit/f8bedba7c) Don't retry locks when new IS system is disabled (#2837) +- [`92feade81`](https://github.com/raptor3um/raptoreum/commit/92feade81) Remove unused forward declaration (#2838) +- [`206e5a1b4`](https://github.com/raptor3um/raptoreum/commit/206e5a1b4) Use big endian inversed height in CInstantSendDb +- [`4b9f6cd3a`](https://github.com/raptor3um/raptoreum/commit/4b9f6cd3a) Use big endian inversed height in BuildInversedHeightKey +- [`53656b3e8`](https://github.com/raptor3um/raptoreum/commit/53656b3e8) Compare CDataStream internal vector with unsigned comparison +- [`dd21d046f`](https://github.com/raptor3um/raptoreum/commit/dd21d046f) Avoid unnecessary calls to parentIt->GetKey +- [`d34ec7866`](https://github.com/raptor3um/raptoreum/commit/d34ec7866) Update wallet transactions when confirmed IS locks are removed +- [`b897505f8`](https://github.com/raptor3um/raptoreum/commit/b897505f8) Remove the need for maintaining the last ChainLocked block in the DB +- [`8e7083cb8`](https://github.com/raptor3um/raptoreum/commit/8e7083cb8) Use db.RemoveConfirmedISLocks() in NotifyChainLock to remove confirmed locks +- [`4577438e8`](https://github.com/raptor3um/raptoreum/commit/4577438e8) Implement RemoveConfirmedInstantSendLocks to prune confirmed IS locks from DB +- [`d6e775851`](https://github.com/raptor3um/raptoreum/commit/d6e775851) Keep track of when IS locks were mined +- [`0a6416e06`](https://github.com/raptor3um/raptoreum/commit/0a6416e06) Wipe llmq db on reindex (#2835) +- [`4af5ea8a7`](https://github.com/raptor3um/raptoreum/commit/4af5ea8a7) Remove netfulfilledman.h duplicate (#2834) +- [`208406df7`](https://github.com/raptor3um/raptoreum/commit/208406df7) Re-introduce nInstantSendKeepLock check for LLMQ-based IS when spork19 is OFF (#2829) +- [`7d765a0fc`](https://github.com/raptor3um/raptoreum/commit/7d765a0fc) Track best block to later know if a DB upgrade is needed +- [`1a25c2084`](https://github.com/raptor3um/raptoreum/commit/1a25c2084) Apply suggestions from code review +- [`282cb697a`](https://github.com/raptor3um/raptoreum/commit/282cb697a) Use version 2 CCbTx in create_coinbase to fix test failures +- [`adc101a11`](https://github.com/raptor3um/raptoreum/commit/adc101a11) Implement quorum commitment merkle root tests in dip4-coinbasemerkleroots.py +- [`40ad06e77`](https://github.com/raptor3um/raptoreum/commit/40ad06e77) Return the fresh quorum hash from mine_quorum +- [`17b9318a0`](https://github.com/raptor3um/raptoreum/commit/17b9318a0) Mine SIGN_HEIGHT_OFFSET additional blocks after the quorum commitment +- [`5e832e2fa`](https://github.com/raptor3um/raptoreum/commit/5e832e2fa) Implement support for CbTx version 2 (with quorum merkle root) +- [`b1b41f02a`](https://github.com/raptor3um/raptoreum/commit/b1b41f02a) Fix a crash in mininode.py when inventory type is unknown +- [`44a3b9c90`](https://github.com/raptor3um/raptoreum/commit/44a3b9c90) Don't use pindex->GetBlockHash() in ProcessCommitment +- [`f9dbe3ed5`](https://github.com/raptor3um/raptoreum/commit/f9dbe3ed5) Track in which block a quorum commitment was mined +- [`ba459663b`](https://github.com/raptor3um/raptoreum/commit/ba459663b) Add deletedQuorums and newQuorums to CSimplifiedMNListEntry +- [`8f7929bed`](https://github.com/raptor3um/raptoreum/commit/8f7929bed) Implement and enforce quorum commitment merkle roots in coinbases +- [`07620746a`](https://github.com/raptor3um/raptoreum/commit/07620746a) Implement GetMined(AndActive)CommitmentsUntilBlock and use it in ScanQuorums +- [`d5250a333`](https://github.com/raptor3um/raptoreum/commit/d5250a333) Track at which height a quorum commitment was mined +- [`806948f90`](https://github.com/raptor3um/raptoreum/commit/806948f90) Store the full commitment in CQuorum +- [`b67f6a0dc`](https://github.com/raptor3um/raptoreum/commit/b67f6a0dc) Implement CDBTransactionIterator +- [`6d1599bc6`](https://github.com/raptor3um/raptoreum/commit/6d1599bc6) Change CDBTransaction to compare keys by their serialized form +- [`5482083eb`](https://github.com/raptor3um/raptoreum/commit/5482083eb) Support passing CDataStream as key into CDBWrapper/CDBBatch/CDBIterator +- [`c23dfaf57`](https://github.com/raptor3um/raptoreum/commit/c23dfaf57) Update qa/rpc-tests/dip4-coinbasemerkleroots.py +- [`9f2e5d085`](https://github.com/raptor3um/raptoreum/commit/9f2e5d085) Use FromHex to deserialize block header +- [`999848432`](https://github.com/raptor3um/raptoreum/commit/999848432) Implement dip4-coinbasemerkleroots.py integration tests +- [`ade5760a9`](https://github.com/raptor3um/raptoreum/commit/ade5760a9) Allow registering MNs without actually starting them +- [`ef6b6a1e6`](https://github.com/raptor3um/raptoreum/commit/ef6b6a1e6) Implement support for GETMNLISTD and MNLISTDIFF P2P message in mininode.py +- [`585b9c281`](https://github.com/raptor3um/raptoreum/commit/585b9c281) Make CBlock.get_merkle_root static +- [`1e0bdbc9b`](https://github.com/raptor3um/raptoreum/commit/1e0bdbc9b) Implement CPartialMerkleTree and CMerkleBlock in mininode.py +- [`d8778f555`](https://github.com/raptor3um/raptoreum/commit/d8778f555) Implement CService in mininode.py +- [`02480402b`](https://github.com/raptor3um/raptoreum/commit/02480402b) Implement deser_dyn_bitset and ser_dyn_bitset in mininode.py +- [`b0850fad0`](https://github.com/raptor3um/raptoreum/commit/b0850fad0) Do not skip pushing of vMatch and vHashes in CMerkleBlock (#2826) +- [`58589fb50`](https://github.com/raptor3um/raptoreum/commit/58589fb50) Trivial: Fix a couple typos (#2818) +- [`992922c49`](https://github.com/raptor3um/raptoreum/commit/992922c49) Specify DIP3 enforcement block height/hash for mainnet params +- [`a370bbfe3`](https://github.com/raptor3um/raptoreum/commit/a370bbfe3) Update immer library to current master (0a718d2d76bab6ebdcf43de943bd6c7d2dbfe2f9) (#2821) +- [`9f04855ae`](https://github.com/raptor3um/raptoreum/commit/9f04855ae) Fix blsWorker (#2820) +- [`377dd3b82`](https://github.com/raptor3um/raptoreum/commit/377dd3b82) There can be no two votes which differ by the outcome only (#2819) +- [`a87909ec3`](https://github.com/raptor3um/raptoreum/commit/a87909ec3) Keep the most recent gobject votes only (#2815) +- [`010752d4e`](https://github.com/raptor3um/raptoreum/commit/010752d4e) Set fAllowMultiplePorts to true for testnet (#2817) +- [`74d999e56`](https://github.com/raptor3um/raptoreum/commit/74d999e56) Remove watchdogs from existence (#2816) +- [`bfc288afb`](https://github.com/raptor3um/raptoreum/commit/bfc288afb) Update getblock rpc help text (#2814) +- [`aeba4afce`](https://github.com/raptor3um/raptoreum/commit/aeba4afce) Fix vote ratecheck (#2813) +- [`ad7defba9`](https://github.com/raptor3um/raptoreum/commit/ad7defba9) Drop all kind of invalid votes from all types of gobjects (#2812) +- [`e75760fa7`](https://github.com/raptor3um/raptoreum/commit/e75760fa7) Update "listtransactions" and "listsinceblock" RPC help (#2811) +- [`8987a6c3e`](https://github.com/raptor3um/raptoreum/commit/8987a6c3e) Update "debug" rpc help text (#2810) +- [`4b4234f39`](https://github.com/raptor3um/raptoreum/commit/4b4234f39) Refactor: fix layer violation for LLMQ based IS in UI (#2808) +- [`614cb6c2e`](https://github.com/raptor3um/raptoreum/commit/614cb6c2e) Fix getgovernanceinfo rpc help text (#2809) +- [`39ba45f3c`](https://github.com/raptor3um/raptoreum/commit/39ba45f3c) Show chainlocked txes as fully confirmed (#2807) +- [`f87035d14`](https://github.com/raptor3um/raptoreum/commit/f87035d14) Fix qt tests and actually run them (#2801) +- [`162acc5a0`](https://github.com/raptor3um/raptoreum/commit/162acc5a0) Fix potential deadlock in LoadWallet() (#2806) +- [`81eeff1c5`](https://github.com/raptor3um/raptoreum/commit/81eeff1c5) Fix devnet genesis check in InitBlockIndex() (#2805) +- [`4d8ef3512`](https://github.com/raptor3um/raptoreum/commit/4d8ef3512) Reset local/static cache in LogAcceptCategory when categories change (#2804) +- [`4a79f7a70`](https://github.com/raptor3um/raptoreum/commit/4a79f7a70) Few trivial cleanups (#2803) +- [`5057ad511`](https://github.com/raptor3um/raptoreum/commit/5057ad511) Drop DBG macros uses from governance modules (#2802) +- [`29a9e24b4`](https://github.com/raptor3um/raptoreum/commit/29a9e24b4) Prepare Raptoreum-related stuff before starting ThreadImport (#2800) +- [`8f280f346`](https://github.com/raptor3um/raptoreum/commit/8f280f346) Split "llmq" debug category into "llmq", "llmq-dkg" and "llmq-sigs" (#2799) +- [`15c720dd4`](https://github.com/raptor3um/raptoreum/commit/15c720dd4) Stop tracking interested/participating nodes and send/announce to MNAUTH peers (#2798) +- [`f20620b0a`](https://github.com/raptor3um/raptoreum/commit/f20620b0a) Also handle MNAUTH on non-smartnodes (#2797) +- [`b18f8cb77`](https://github.com/raptor3um/raptoreum/commit/b18f8cb77) Implement MNAUTH and allow unlimited inbound MN connections (#2790) +- [`aae985746`](https://github.com/raptor3um/raptoreum/commit/aae985746) Update log categories in help message and in decomposition of "raptoreum" category (#2792) +- [`7b76e7abb`](https://github.com/raptor3um/raptoreum/commit/7b76e7abb) Implement BIP9 style deployment for DIP8/ChainLocks and fix a bug with late headers (#2793) +- [`3ead8cd85`](https://github.com/raptor3um/raptoreum/commit/3ead8cd85) Fix potential travis failures due to network failures (#2795) +- [`02db06658`](https://github.com/raptor3um/raptoreum/commit/02db06658) Fix loop in CLLMQUtils::GetQuorumConnections to add at least 2 connections (#2796) +- [`071b60ded`](https://github.com/raptor3um/raptoreum/commit/071b60ded) Bump MAX_OUTBOUND_SMARTNODE_CONNECTIONS to 250 on smartnodes (#2791) +- [`0ed5ae05a`](https://github.com/raptor3um/raptoreum/commit/0ed5ae05a) Fix bug in GetNextSmartnodeForPayment (#2789) +- [`7135f01a1`](https://github.com/raptor3um/raptoreum/commit/7135f01a1) Fix revoke reason check for ProUpRevTx (#2787) +- [`658ce9eff`](https://github.com/raptor3um/raptoreum/commit/658ce9eff) Apply Bloom filters to DIP2 transactions extra payload (#2786) +- [`a1e4ac21f`](https://github.com/raptor3um/raptoreum/commit/a1e4ac21f) Disable logging of libevent debug messages (#2794) +- [`9a1362abd`](https://github.com/raptor3um/raptoreum/commit/9a1362abd) Introduce SENDDSQUEUE to indicate that a node is interested in DSQ messages (#2785) +- [`9e70209e4`](https://github.com/raptor3um/raptoreum/commit/9e70209e4) Honor bloom filters when announcing LLMQ based IS locks (#2784) +- [`12274e578`](https://github.com/raptor3um/raptoreum/commit/12274e578) Introduce "qsendrecsigs" to indicate that plain recovered sigs should be sent (#2783) +- [`60a91848a`](https://github.com/raptor3um/raptoreum/commit/60a91848a) Skip mempool.dat when wallet is starting in "zap" mode (#2782) +- [`b87821047`](https://github.com/raptor3um/raptoreum/commit/b87821047) Make LLMQ/InstantSend/ChainLocks code less spammy (#2781) +- [`591b0185c`](https://github.com/raptor3um/raptoreum/commit/591b0185c) Bump proto version and only send LLMQ related messages to v14 nodes (#2780) +- [`c3602372c`](https://github.com/raptor3um/raptoreum/commit/c3602372c) Implement retroactive IS locking of transactions first seen in blocks instead of mempool (#2770) +- [`9df6acdc2`](https://github.com/raptor3um/raptoreum/commit/9df6acdc2) Disable in-wallet miner for win/macos Travis/Gitian builds (#2778) +- [`5299d3933`](https://github.com/raptor3um/raptoreum/commit/5299d3933) Multiple refactorings/fixes for LLMQ bases InstantSend and ChainLocks (#2779) +- [`a5d2edbe0`](https://github.com/raptor3um/raptoreum/commit/a5d2edbe0) Relay spork after updating internal spork maps (#2777) +- [`e52763d21`](https://github.com/raptor3um/raptoreum/commit/e52763d21) Refactor and fix instantsend tests/utils (#2776) +- [`25205fd46`](https://github.com/raptor3um/raptoreum/commit/25205fd46) RPC - Remove P2PKH message from protx help (#2773) +- [`a69a5cf4a`](https://github.com/raptor3um/raptoreum/commit/a69a5cf4a) Use smaller (3 out of 5) quorums for regtest/Travis (#2774) +- [`396ebc2dc`](https://github.com/raptor3um/raptoreum/commit/396ebc2dc) Fix tests after 2768 (#2772) +- [`6f90cf7a1`](https://github.com/raptor3um/raptoreum/commit/6f90cf7a1) Merge bitcoin#9602: Remove coin age priority and free transactions - implementation (#2768) +- [`6350adf1b`](https://github.com/raptor3um/raptoreum/commit/6350adf1b) Slightly refactor ProcessInstantSendLock (#2767) +- [`3a1aeb000`](https://github.com/raptor3um/raptoreum/commit/3a1aeb000) Multiple fixes/refactorings for ChainLocks (#2765) +- [`152a78eab`](https://github.com/raptor3um/raptoreum/commit/152a78eab) Add compatibility code to P2PFingerprintTest until we catch up with backports +- [`72af215a3`](https://github.com/raptor3um/raptoreum/commit/72af215a3) Fix CreateNewBlock_validity by not holding cs_main when calling createAndProcessEmptyBlock +- [`95192d5b5`](https://github.com/raptor3um/raptoreum/commit/95192d5b5) Require no cs_main lock for ProcessNewBlock/ActivateBestChain +- [`2eb553174`](https://github.com/raptor3um/raptoreum/commit/2eb553174) Avoid cs_main in net_processing ActivateBestChain calls +- [`f69c4370d`](https://github.com/raptor3um/raptoreum/commit/f69c4370d) Refactor ProcessGetData in anticipation of avoiding cs_main for ABC +- [`7f54372bb`](https://github.com/raptor3um/raptoreum/commit/7f54372bb) Create new mutex for orphans, no cs_main in PLV::BlockConnected +- [`6085de378`](https://github.com/raptor3um/raptoreum/commit/6085de378) Add ability to assert a lock is not held in DEBUG_LOCKORDER +- [`9344dee8a`](https://github.com/raptor3um/raptoreum/commit/9344dee8a) Merge #11580: Do not send (potentially) invalid headers in response to getheaders +- [`d1a602260`](https://github.com/raptor3um/raptoreum/commit/d1a602260) Merge #11113: [net] Ignore getheaders requests for very old side blocks +- [`d1db98c67`](https://github.com/raptor3um/raptoreum/commit/d1db98c67) Merge #9665: Use cached [compact] blocks to respond to getdata messages +- [`0905b911d`](https://github.com/raptor3um/raptoreum/commit/0905b911d) Actually use cached most recent compact block +- [`cd0f94fb5`](https://github.com/raptor3um/raptoreum/commit/cd0f94fb5) Give wait_for_quorum_phase more time +- [`4ae52758b`](https://github.com/raptor3um/raptoreum/commit/4ae52758b) Remove size check in CDKGSessionManager::GetVerifiedContributions +- [`e21da2d99`](https://github.com/raptor3um/raptoreum/commit/e21da2d99) Move simple PoSe tests into llmq-simplepose.py +- [`6488135f4`](https://github.com/raptor3um/raptoreum/commit/6488135f4) Track index into self.nodes in mninfo +- [`f30ea6dfd`](https://github.com/raptor3um/raptoreum/commit/f30ea6dfd) Replace BITCOIN_UNORDERED_LRU_CACHE_H with RAPTOREUM_UNORDERED_LRU_CACHE_H +- [`e763310b5`](https://github.com/raptor3um/raptoreum/commit/e763310b5) Add missing LOCK(cs_main) +- [`3a5e7c433`](https://github.com/raptor3um/raptoreum/commit/3a5e7c433) Do not hold cs_vNodes in CSigSharesManager::SendMessages() for too long (#2758) +- [`fbf0dcb08`](https://github.com/raptor3um/raptoreum/commit/fbf0dcb08) Various small cleanups (#2761) +- [`588eb30b8`](https://github.com/raptor3um/raptoreum/commit/588eb30b8) Fix deadlock in CSigSharesManager::SendMessages (#2757) +- [`7b24f9b8b`](https://github.com/raptor3um/raptoreum/commit/7b24f9b8b) Drop --c++11 brew flag in build-osx.md (#2755) +- [`ac00c6628`](https://github.com/raptor3um/raptoreum/commit/ac00c6628) Make InstantSend locks persistent +- [`293c9ad6a`](https://github.com/raptor3um/raptoreum/commit/293c9ad6a) Use unordered_lru_cache in CRecoveredSigsDb +- [`9e4aa1f98`](https://github.com/raptor3um/raptoreum/commit/9e4aa1f98) Implement unordered_lru_cache +- [`609114a80`](https://github.com/raptor3um/raptoreum/commit/609114a80) Code review: re-add string cast in mininode.py +- [`85ffc1d64`](https://github.com/raptor3um/raptoreum/commit/85ffc1d64) drop `swap_outputs_in_rawtx` and `DecimalEncoder` in smartfees.py +- [`bc593c84b`](https://github.com/raptor3um/raptoreum/commit/bc593c84b) Revert "Fix use of missing self.log in blockchain.py" +- [`0e91ebcf4`](https://github.com/raptor3um/raptoreum/commit/0e91ebcf4) Use logging framework in Raptoreum specific tests +- [`dd1245c2a`](https://github.com/raptor3um/raptoreum/commit/dd1245c2a) Update dnsseed-policy.md (#2751) +- [`f351145e6`](https://github.com/raptor3um/raptoreum/commit/f351145e6) Use GetVoteForId instead of maintaining votes on inputs +- [`d4cf78fe2`](https://github.com/raptor3um/raptoreum/commit/d4cf78fe2) Add HasVotedOnId/GetVoteForId to CSigningManager +- [`43e1bf674`](https://github.com/raptor3um/raptoreum/commit/43e1bf674) Add key prefix to "rs_" for CRecoveredSigsDb keys +- [`61e10f651`](https://github.com/raptor3um/raptoreum/commit/61e10f651) Use llmqDb for CRecoveredSigsDb +- [`b2cd1db40`](https://github.com/raptor3um/raptoreum/commit/b2cd1db40) Don't use CEvoDB in CDKGSessionManager and instead use llmqDb +- [`e2cad1bd6`](https://github.com/raptor3um/raptoreum/commit/e2cad1bd6) Introduce global llmq::llmqDb instance of CDBWrapper +- [`acb52f6ec`](https://github.com/raptor3um/raptoreum/commit/acb52f6ec) Don't pass CEvoDB to CDKGSessionHandler and CDKGSession +- [`06fc65559`](https://github.com/raptor3um/raptoreum/commit/06fc65559) Actually remove from finalInstantSendLocks in CInstantSendManager::RemoveFinalISLock +- [`041a1c26d`](https://github.com/raptor3um/raptoreum/commit/041a1c26d) Move safe TX checks into TestForBlock and TestPackageTransactions +- [`4d3365ddb`](https://github.com/raptor3um/raptoreum/commit/4d3365ddb) Completely disable InstantSend while filling mempool in autoix-mempool.py +- [`fae33e03a`](https://github.com/raptor3um/raptoreum/commit/fae33e03a) Let ProcessPendingReconstructedRecoveredSigs return void instead of bool +- [`f8f867a6b`](https://github.com/raptor3um/raptoreum/commit/f8f867a6b) Sync blocks after generating in mine_quorum() +- [`3e60d2d2d`](https://github.com/raptor3um/raptoreum/commit/3e60d2d2d) Adjust LLMQ based InstantSend tests for new spork20 +- [`41a71fe44`](https://github.com/raptor3um/raptoreum/commit/41a71fe44) update autoix-mempool.py to test both "old" and "new" InstantSend (and fix CheckCanLock to respect mempool limits) +- [`843b6d7a9`](https://github.com/raptor3um/raptoreum/commit/843b6d7a9) update p2p-autoinstantsend.py to test both "old" and "new" InstantSend +- [`a8da11ac5`](https://github.com/raptor3um/raptoreum/commit/a8da11ac5) update p2p-instantsend.py to test both "old" and "new" InstantSend +- [`55152cb31`](https://github.com/raptor3um/raptoreum/commit/55152cb31) Move IS block filtering into ConnectBlock +- [`2299ee283`](https://github.com/raptor3um/raptoreum/commit/2299ee283) Rename IXLOCK to ISLOCK and InstantX to InstantSend +- [`f5dcb00ac`](https://github.com/raptor3um/raptoreum/commit/f5dcb00ac) Introduce spork SPORK_20_INSTANTSEND_LLMQ_BASED to switch between new/old system +- [`280690792`](https://github.com/raptor3um/raptoreum/commit/280690792) Combine loops in CChainLocksHandler::NewPoWValidBlock +- [`9e9081110`](https://github.com/raptor3um/raptoreum/commit/9e9081110) Add override keywork to CDSNotificationInterface::NotifyChainLock +- [`e2f99f4ae`](https://github.com/raptor3um/raptoreum/commit/e2f99f4ae) Set llmqForInstantSend for mainnet and testnet +- [`5b8344e8f`](https://github.com/raptor3um/raptoreum/commit/5b8344e8f) Use scheduleFromNow instead of schedule+boost::chrono +- [`f44f09ca0`](https://github.com/raptor3um/raptoreum/commit/f44f09ca0) Fix crash in BlockAssembler::addPackageTxs +- [`baf8b81c4`](https://github.com/raptor3um/raptoreum/commit/baf8b81c4) Fix no-wallet build +- [`2a7a5c633`](https://github.com/raptor3um/raptoreum/commit/2a7a5c633) Only sign ChainLocks when all included TXs are "safe" +- [`96291e7a0`](https://github.com/raptor3um/raptoreum/commit/96291e7a0) Cheaper/Faster bailout from TrySignChainTip when already signed before +- [`0a5e8eb86`](https://github.com/raptor3um/raptoreum/commit/0a5e8eb86) Move ChainLock signing into TrySignChainTip and call it periodically +- [`bd7edc8ae`](https://github.com/raptor3um/raptoreum/commit/bd7edc8ae) Track txids of new blocks and first-seen time of TXs in CChainLocksHandler +- [`7945192ff`](https://github.com/raptor3um/raptoreum/commit/7945192ff) Enforce IX locks from the new system +- [`dc97835ec`](https://github.com/raptor3um/raptoreum/commit/dc97835ec) Disable explicit lock requests when the new IX system is active +- [`68cfdc932`](https://github.com/raptor3um/raptoreum/commit/68cfdc932) Also call ProcessTx from sendrawtransaction and RelayWalletTransaction +- [`1d2d370cd`](https://github.com/raptor3um/raptoreum/commit/1d2d370cd) Whenever we check for locked TXs, also check for the new system having a lock +- [`3a6cc2cc1`](https://github.com/raptor3um/raptoreum/commit/3a6cc2cc1) Show "verified via LLMQ based InstantSend" in GUI TX status +- [`34a8b2997`](https://github.com/raptor3um/raptoreum/commit/34a8b2997) Disable old IX code when the new system is active +- [`5ff4db0a0`](https://github.com/raptor3um/raptoreum/commit/5ff4db0a0) Downgrade TXLOCKREQUEST to TX when new IX system is active +- [`1959f3e4a`](https://github.com/raptor3um/raptoreum/commit/1959f3e4a) Handle incoming TXs by calling CInstantXManager::ProcessTx +- [`83dbcc483`](https://github.com/raptor3um/raptoreum/commit/83dbcc483) Implement CInstantSendManager and related P2P messages +- [`5bbc12274`](https://github.com/raptor3um/raptoreum/commit/5bbc12274) Implement PushReconstructedRecoveredSig in CSigningManager +- [`2bbac8ff7`](https://github.com/raptor3um/raptoreum/commit/2bbac8ff7) Introduce NotifyChainLock signal and invoke it when CLSIGs get processed +- [`e47af29d4`](https://github.com/raptor3um/raptoreum/commit/e47af29d4) Fix "chainlock" in WalletTxToJSON (#2748) +- [`e21d8d6b9`](https://github.com/raptor3um/raptoreum/commit/e21d8d6b9) Fix error message for invalid voting addresses (#2747) +- [`80891ee6f`](https://github.com/raptor3um/raptoreum/commit/80891ee6f) Make -smartnodeblsprivkey mandatory when -smartnode is given (#2745) +- [`521d4ae08`](https://github.com/raptor3um/raptoreum/commit/521d4ae08) Implement 2-stage commit for CEvoDB to avoid inconsistencies after crashes (#2744) +- [`e63cdadc9`](https://github.com/raptor3um/raptoreum/commit/e63cdadc9) Add a button/context menu items to show QR codes for addresses (#2741) +- [`b6177740c`](https://github.com/raptor3um/raptoreum/commit/b6177740c) Add collateraladdress into smartnode/protx list rpc output (#2740) +- [`b5466e20a`](https://github.com/raptor3um/raptoreum/commit/b5466e20a) Add "chainlock" field to more rpcs (#2743) +- [`8dd934922`](https://github.com/raptor3um/raptoreum/commit/8dd934922) Don't be too harsh for invalid CLSIGs (#2742) +- [`a34fb6d6f`](https://github.com/raptor3um/raptoreum/commit/a34fb6d6f) Fix banning when local node doesn't have the vvec (#2739) +- [`4a495c6b4`](https://github.com/raptor3um/raptoreum/commit/4a495c6b4) Only include selected TX types into CMerkleBlock (#2737) +- [`0db2d1596`](https://github.com/raptor3um/raptoreum/commit/0db2d1596) code review and reset file perms +- [`f971da831`](https://github.com/raptor3um/raptoreum/commit/f971da831) Stop g_connman first before deleting it (#2734) +- [`9eb0ca704`](https://github.com/raptor3um/raptoreum/commit/9eb0ca704) Ignore sig share inv messages when we don't have the quorum vvec (#2733) +- [`080b59a57`](https://github.com/raptor3um/raptoreum/commit/080b59a57) Backport bitcoin#14385: qt: avoid system harfbuzz and bz2 (#2732) +- [`2041186f4`](https://github.com/raptor3um/raptoreum/commit/2041186f4) On timeout, print members proTxHashes from members which did not send a share (#2731) +- [`ea90296b6`](https://github.com/raptor3um/raptoreum/commit/ea90296b6) Actually start the timers for sig share and recSig verification (#2730) +- [`5c84cab0f`](https://github.com/raptor3um/raptoreum/commit/5c84cab0f) Send/Receive multiple messages as part of one P2P message in CSigSharesManager (#2729) +- [`d2573c43b`](https://github.com/raptor3um/raptoreum/commit/d2573c43b) Only return from wait_for_chainlock when the block is actually processed (#2728) +- [`6ac49da24`](https://github.com/raptor3um/raptoreum/commit/6ac49da24) Send QSIGSESANN messages when sending first message for a session +- [`8ce8cb9ca`](https://github.com/raptor3um/raptoreum/commit/8ce8cb9ca) Remove MarkXXX methods from CSigSharesNodeState +- [`fa25728ca`](https://github.com/raptor3um/raptoreum/commit/fa25728ca) Use new sessionId based session management in CSigSharesManager +- [`34e3f8eb5`](https://github.com/raptor3um/raptoreum/commit/34e3f8eb5) Implement session management based on session ids and announcements +- [`7372f6f10`](https://github.com/raptor3um/raptoreum/commit/7372f6f10) Move RebuildSigShare from CBatchedSigShares to CSigSharesManager +- [`55a6182b1`](https://github.com/raptor3um/raptoreum/commit/55a6182b1) Introduce QSIGSESANN/CSigSesAnn P2P message +- [`80375a0b4`](https://github.com/raptor3um/raptoreum/commit/80375a0b4) Change CSigSharesInv and CBatchedSigShares to be sessionId based +- [`9b4285b1c`](https://github.com/raptor3um/raptoreum/commit/9b4285b1c) Use salted hashing for keys for unordered maps/sets in LLMQ code +- [`b5462f524`](https://github.com/raptor3um/raptoreum/commit/b5462f524) Implement std::unordered_map/set compatible hasher classes for salted hashes +- [`c52e8402c`](https://github.com/raptor3um/raptoreum/commit/c52e8402c) Remove now obsolete TODO comment above CRecoveredSigsDb +- [`e83e32b95`](https://github.com/raptor3um/raptoreum/commit/e83e32b95) Add in-memory cache for CRecoveredSigsDb::HasRecoveredSigForHash +- [`677c0040c`](https://github.com/raptor3um/raptoreum/commit/677c0040c) Add in-memory cache to CQuorumBlockProcessor::HasMinedCommitment +- [`f305cf77b`](https://github.com/raptor3um/raptoreum/commit/f305cf77b) Multiple fixes and optimizations for LLMQs and ChainLocks (#2724) +- [`c3eb0c788`](https://github.com/raptor3um/raptoreum/commit/c3eb0c788) reset file perms +- [`c17356efc`](https://github.com/raptor3um/raptoreum/commit/c17356efc) Merge #9970: Improve readability of segwit.py, smartfees.py +- [`ee6e5654e`](https://github.com/raptor3um/raptoreum/commit/ee6e5654e) Merge #9505: Prevector Quick Destruct +- [`c4a3cd6a1`](https://github.com/raptor3um/raptoreum/commit/c4a3cd6a1) Merge #8665: Assert all the things! +- [`b09e3e080`](https://github.com/raptor3um/raptoreum/commit/b09e3e080) Merge #9977: QA: getblocktemplate_longpoll.py should always use >0 fee tx +- [`e8df27f8e`](https://github.com/raptor3um/raptoreum/commit/e8df27f8e) Merge #9984: devtools: Make github-merge compute SHA512 from git, instead of worktree +- [`c55e019bf`](https://github.com/raptor3um/raptoreum/commit/c55e019bf) Merge #9940: Fix verify-commits on OSX, update for new bad Tree-SHA512, point travis to different keyservers +- [`f9a2e4c4f`](https://github.com/raptor3um/raptoreum/commit/f9a2e4c4f) Merge #9514: release: Windows signing script +- [`ee2048ae4`](https://github.com/raptor3um/raptoreum/commit/ee2048ae4) Merge #9830: Add safe flag to listunspent result +- [`914bd7877`](https://github.com/raptor3um/raptoreum/commit/914bd7877) Merge #9972: Fix extended rpc tests broken by #9768 +- [`dad8c67d3`](https://github.com/raptor3um/raptoreum/commit/dad8c67d3) Merge #9768: [qa] Add logging to test_framework.py +- [`c75d7dc83`](https://github.com/raptor3um/raptoreum/commit/c75d7dc83) Merge #9962: [trivial] Fix typo in rpc/protocol.h +- [`49b743e39`](https://github.com/raptor3um/raptoreum/commit/49b743e39) Merge #9538: [util] Remove redundant call to get() on smart pointer (thread_specific_ptr) +- [`e5c4a67a2`](https://github.com/raptor3um/raptoreum/commit/e5c4a67a2) Merge #9916: Fix msvc compiler error C4146 (minus operator applied to unsigned type) +- [`fcd3b4fd4`](https://github.com/raptor3um/raptoreum/commit/fcd3b4fd4) Disallow new proposals using legacy serialization (#2722) +- [`668b84b1e`](https://github.com/raptor3um/raptoreum/commit/668b84b1e) Fix stacktraces compilation issues (#2721) +- [`0fd1fb7d5`](https://github.com/raptor3um/raptoreum/commit/0fd1fb7d5) Don't build docker image when running Travis job on some another repo (#2718) +- [`48d92f116`](https://github.com/raptor3um/raptoreum/commit/48d92f116) Implement optional pretty printed stacktraces (#2420) +- [`0b552be20`](https://github.com/raptor3um/raptoreum/commit/0b552be20) Fix file permissions broken in 2682 (#2717) +- [`74bb23cac`](https://github.com/raptor3um/raptoreum/commit/74bb23cac) Add link to bugcrowd in issue template (#2716) +- [`252ee89c3`](https://github.com/raptor3um/raptoreum/commit/252ee89c3) Implement new algo for quorum connections (#2710) +- [`104c6e776`](https://github.com/raptor3um/raptoreum/commit/104c6e776) Cleanup successful sessions before doing timeout check (#2712) +- [`26db020d1`](https://github.com/raptor3um/raptoreum/commit/26db020d1) Separate init/destroy and start/stop steps in LLMQ flow (#2709) +- [`9f5869032`](https://github.com/raptor3um/raptoreum/commit/9f5869032) Avoid using ordered maps in LLMQ signing code (#2708) +- [`bb90eb4bf`](https://github.com/raptor3um/raptoreum/commit/bb90eb4bf) backports-0.15-pr6 code review +- [`7a192e2e4`](https://github.com/raptor3um/raptoreum/commit/7a192e2e4) Optimize sleeping behavior in CSigSharesManager::WorkThreadMain (#2707) +- [`d7bd0954f`](https://github.com/raptor3um/raptoreum/commit/d7bd0954f) Use pipe() together with fcntl instead of pipe2() +- [`742a25898`](https://github.com/raptor3um/raptoreum/commit/742a25898) Implement caching in CRecoveredSigsDb +- [`500b9c89a`](https://github.com/raptor3um/raptoreum/commit/500b9c89a) Use CBLSLazySignature in CBatchedSigShares +- [`02b68885a`](https://github.com/raptor3um/raptoreum/commit/02b68885a) Implement CBLSLazySignature for lazy serialization/deserialization +- [`6e8f50aa5`](https://github.com/raptor3um/raptoreum/commit/6e8f50aa5) Faster default-initialization of BLS primitives by re-using the null-hash +- [`c03480d20`](https://github.com/raptor3um/raptoreum/commit/c03480d20) Disable optimistic sending when pushing sig share related messages +- [`acb87895f`](https://github.com/raptor3um/raptoreum/commit/acb87895f) Implement WakeupSelect() to allow preliminary wakeup after message push +- [`cf2932098`](https://github.com/raptor3um/raptoreum/commit/cf2932098) Allow to disable optimistic send in PushMessage() +- [`bedfc262e`](https://github.com/raptor3um/raptoreum/commit/bedfc262e) Rework handling of CSigSharesManager worker thread (#2703) +- [`3e4286a58`](https://github.com/raptor3um/raptoreum/commit/3e4286a58) Less cs_main locks in quorums (#2702) +- [`3bbc75fc4`](https://github.com/raptor3um/raptoreum/commit/3bbc75fc4) Reintroduce spork15 so that it's relayed by 0.14 nodes (#2701) +- [`b71a3f48d`](https://github.com/raptor3um/raptoreum/commit/b71a3f48d) Remove not used and not implemented methods from net.h (#2700) +- [`c0cb27465`](https://github.com/raptor3um/raptoreum/commit/c0cb27465) Fix incorrect usage of begin() when genesis block is requested in "protx diff" (#2699) +- [`b239bb24a`](https://github.com/raptor3um/raptoreum/commit/b239bb24a) Do not process blocks in CDeterministicMNManager before dip3 activation (#2698) +- [`86fc05049`](https://github.com/raptor3um/raptoreum/commit/86fc05049) Drop no longer used code and bump min protos (#2697) +- [`fef8e5d45`](https://github.com/raptor3um/raptoreum/commit/fef8e5d45) A small overhaul of the way MN list/stats UI and data are tied together (#2696) +- [`90bb3ca2f`](https://github.com/raptor3um/raptoreum/commit/90bb3ca2f) Backport #14701: build: Add CLIENT_VERSION_BUILD to CFBundleGetInfoString (#2687) +- [`00f904ec7`](https://github.com/raptor3um/raptoreum/commit/00f904ec7) Change the way invalid ProTxes are handled in `addUnchecked` and `existsProviderTxConflict` (#2691) +- [`5478183e7`](https://github.com/raptor3um/raptoreum/commit/5478183e7) Call existsProviderTxConflict after CheckSpecialTx (#2690) +- [`1be5a72a9`](https://github.com/raptor3um/raptoreum/commit/1be5a72a9) Merge #9853: Fix error codes from various RPCs +- [`1bfc069e3`](https://github.com/raptor3um/raptoreum/commit/1bfc069e3) Merge #9575: Remove unused, non-working RPC PostCommand signal +- [`e53da66b2`](https://github.com/raptor3um/raptoreum/commit/e53da66b2) Merge #9936: [trivial] Fix three typos introduced into walletdb.h in commit 7184e25 +- [`2121ba776`](https://github.com/raptor3um/raptoreum/commit/2121ba776) Merge #9945: Improve logging in bctest.py if there is a formatting mismatch +- [`b1d64f3a1`](https://github.com/raptor3um/raptoreum/commit/b1d64f3a1) Merge #9548: Remove min reasonable fee +- [`1c08f9a5f`](https://github.com/raptor3um/raptoreum/commit/1c08f9a5f) Merge #9369: Factor out CWallet::nTimeSmart computation into a method. +- [`9a3067115`](https://github.com/raptor3um/raptoreum/commit/9a3067115) fix compile error caused by #9605 +- [`7e4257254`](https://github.com/raptor3um/raptoreum/commit/7e4257254) Allow to override llmqChainLocks with "-llmqchainlocks" on devnet (#2683) +- [`bed57cfbf`](https://github.com/raptor3um/raptoreum/commit/bed57cfbf) Stop checking MN protocol version before signalling DIP3 (#2684) +- [`8d249d4df`](https://github.com/raptor3um/raptoreum/commit/8d249d4df) Merge #9605: Use CScheduler for wallet flushing, remove ThreadFlushWalletDB +- [`9c8c12ed4`](https://github.com/raptor3um/raptoreum/commit/9c8c12ed4) devtools: Fix a syntax error typo +- [`8a436ec36`](https://github.com/raptor3um/raptoreum/commit/8a436ec36) Merge #9932: Fix verify-commits on travis and always check top commit's tree +- [`31267f4c8`](https://github.com/raptor3um/raptoreum/commit/31267f4c8) Merge #9555: [test] Avoid reading a potentially uninitialized variable in tx_invalid-test (transaction_tests.cpp) +- [`a31b2de7a`](https://github.com/raptor3um/raptoreum/commit/a31b2de7a) Merge #9906: Disallow copy constructor CReserveKeys +- [`22cda1a92`](https://github.com/raptor3um/raptoreum/commit/22cda1a92) Merge #9929: tests: Delete unused function `_rpchost_to_args` +- [`6addbe074`](https://github.com/raptor3um/raptoreum/commit/6addbe074) Merge #9880: Verify Tree-SHA512s in merge commits, enforce sigs are not SHA1 +- [`29bbfc58f`](https://github.com/raptor3um/raptoreum/commit/29bbfc58f) Merge #8574: [Wallet] refactor CWallet/CWalletDB/CDB +- [`67a86091a`](https://github.com/raptor3um/raptoreum/commit/67a86091a) Implement and use secure BLS batch verification (#2681) +- [`e2ae2ae63`](https://github.com/raptor3um/raptoreum/commit/e2ae2ae63) Update misspelled Synchronizing in GetSyncStatus (#2680) +- [`721965990`](https://github.com/raptor3um/raptoreum/commit/721965990) Add missing help text for `operatorPayoutAddress` (#2679) +- [`68c0de4ba`](https://github.com/raptor3um/raptoreum/commit/68c0de4ba) Do not send excessive messages in governance sync (#2124) +- [`09e71de80`](https://github.com/raptor3um/raptoreum/commit/09e71de80) Fix bench log for payee and special txes (#2678) +- [`03fa11550`](https://github.com/raptor3um/raptoreum/commit/03fa11550) Speed up CQuorumManager::ScanQuorums (#2677) +- [`071035b93`](https://github.com/raptor3um/raptoreum/commit/071035b93) Apply code review suggestions #2647 +- [`501227dee`](https://github.com/raptor3um/raptoreum/commit/501227dee) Merge #9333: Document CWalletTx::mapValue entries and remove erase of nonexistent "version" entry. +- [`a61b747a2`](https://github.com/raptor3um/raptoreum/commit/a61b747a2) Merge #9547: bench: Assert that division by zero is unreachable +- [`b821dfa7d`](https://github.com/raptor3um/raptoreum/commit/b821dfa7d) Merge #9739: Fix BIP68 activation test +- [`56890f98f`](https://github.com/raptor3um/raptoreum/commit/56890f98f) Merge #9832: [qa] assert_start_raises_init_error +- [`31755267a`](https://github.com/raptor3um/raptoreum/commit/31755267a) Missing `=` characters (#2676) +- [`088525bde`](https://github.com/raptor3um/raptoreum/commit/088525bde) Multiple fixes for LLMQs and BLS batch verification (#2674) +- [`ae70e8a34`](https://github.com/raptor3um/raptoreum/commit/ae70e8a34) Fix negative "keys left since backup" (#2671) +- [`2a330f17a`](https://github.com/raptor3um/raptoreum/commit/2a330f17a) Fix endless wait in RenameThreadPool (#2675) +- [`1400df2e5`](https://github.com/raptor3um/raptoreum/commit/1400df2e5) Invoke CheckSpecialTx after all normal TX checks have passed (#2673) +- [`18950f923`](https://github.com/raptor3um/raptoreum/commit/18950f923) Optimize DKG debug message processing for performance and lower bandwidth (#2672) +- [`4615da99f`](https://github.com/raptor3um/raptoreum/commit/4615da99f) Merge #9576: [wallet] Remove redundant initialization +- [`8944b5a78`](https://github.com/raptor3um/raptoreum/commit/8944b5a78) Merge #9905: [contrib] gh-merge: Move second sha512 check to the end +- [`8dfddf503`](https://github.com/raptor3um/raptoreum/commit/8dfddf503) Merge #9910: Docs: correct and elaborate -rpcbind doc +- [`395b53716`](https://github.com/raptor3um/raptoreum/commit/395b53716) Merge #9774: Enable host lookups for -proxy and -onion parameters +- [`2c3dde75c`](https://github.com/raptor3um/raptoreum/commit/2c3dde75c) Merge #9828: Avoid -Wshadow warnings in wallet_tests +- [`3d3443b6a`](https://github.com/raptor3um/raptoreum/commit/3d3443b6a) Merge #8808: Do not shadow variables (gcc set) +- [`053b97c94`](https://github.com/raptor3um/raptoreum/commit/053b97c94) Merge #9903: Docs: add details to -rpcclienttimeout doc +- [`5d1c97da1`](https://github.com/raptor3um/raptoreum/commit/5d1c97da1) Add getspecialtxes rpc (#2668) +- [`ca6c8f547`](https://github.com/raptor3um/raptoreum/commit/ca6c8f547) Add missing default value for SPORK_19_CHAINLOCKS_ENABLED (#2670) +- [`6da341379`](https://github.com/raptor3um/raptoreum/commit/6da341379) Use smaller LLMQs for ChainLocks on testnet and devnet (#2669) +- [`54f576ea7`](https://github.com/raptor3um/raptoreum/commit/54f576ea7) Fix LLMQ related test failures on Travis (#2666) +- [`6fe479aa1`](https://github.com/raptor3um/raptoreum/commit/6fe479aa1) Don't leak skShare in logs (#2662) +- [`559bdfc6e`](https://github.com/raptor3um/raptoreum/commit/559bdfc6e) ProcessSpecialTxsInBlock should respect fJustCheck (#2653) +- [`805aeaa16`](https://github.com/raptor3um/raptoreum/commit/805aeaa16) Drop cs_main from UpdatedBlockTip in CDKGSessionManager/CDKGSessionHandler (#2655) +- [`2a4fbb6e4`](https://github.com/raptor3um/raptoreum/commit/2a4fbb6e4) Bump block stats when adding commitment tx into block (#2654) +- [`25cb14b61`](https://github.com/raptor3um/raptoreum/commit/25cb14b61) Fix confusion between dip3 activation and enforcement (#2651) +- [`7caf9394e`](https://github.com/raptor3um/raptoreum/commit/7caf9394e) drop raptoreum-docs folder and instead link to raptoreum-docs.github.io in README (#2650) +- [`70a9e905c`](https://github.com/raptor3um/raptoreum/commit/70a9e905c) Use helper function to produce help text for params of `protx` rpcs (#2649) +- [`f123248f1`](https://github.com/raptor3um/raptoreum/commit/f123248f1) update copyright (#2648) +- [`d398bf052`](https://github.com/raptor3um/raptoreum/commit/d398bf052) reverse order from jsonRequest, strSubCommand +- [`ad4b3cda3`](https://github.com/raptor3um/raptoreum/commit/ad4b3cda3) Instead of asserting signatures once, wait for them to change to the expected state +- [`3237668b1`](https://github.com/raptor3um/raptoreum/commit/3237668b1) Rename inInvalidate->inEnforceBestChainLock and make it atomic +- [`5033d5ef4`](https://github.com/raptor3um/raptoreum/commit/5033d5ef4) Don't check for conflicting ChainLocks when phashBlock is not set +- [`08d915dc2`](https://github.com/raptor3um/raptoreum/commit/08d915dc2) Increase waiting time in LLMQ signing tests +- [`886299a40`](https://github.com/raptor3um/raptoreum/commit/886299a40) Implement llmq-chainlocks.py integration tests +- [`3413ff917`](https://github.com/raptor3um/raptoreum/commit/3413ff917) Add info about ChainLocks to block and transaction RPCs +- [`135829dc4`](https://github.com/raptor3um/raptoreum/commit/135829dc4) Add SPORK_19_CHAINLOCKS_ENABLED +- [`29532ba19`](https://github.com/raptor3um/raptoreum/commit/29532ba19) Implement and enforce ChainLocks +- [`2bf6eb1c7`](https://github.com/raptor3um/raptoreum/commit/2bf6eb1c7) Track parent->child relations for blocks +- [`04a51c9ef`](https://github.com/raptor3um/raptoreum/commit/04a51c9ef) Use a block that is 8 blocks in the past for SelectQuorumForSigning +- [`cf33efc9e`](https://github.com/raptor3um/raptoreum/commit/cf33efc9e) Move SelectQuorumForSigning into CSigningManager and make it height based +- [`4026ea203`](https://github.com/raptor3um/raptoreum/commit/4026ea203) Implement VerifyRecoveredSig to allow verifcation of sigs found in P2P messages +- [`9f211ef12`](https://github.com/raptor3um/raptoreum/commit/9f211ef12) Add listener interface to listen for recovered sigs +- [`189cee210`](https://github.com/raptor3um/raptoreum/commit/189cee210) Don't pass poolSize to SelectQuorum and instead use consensus params +- [`13855674d`](https://github.com/raptor3um/raptoreum/commit/13855674d) Add missing new-line character in log output +- [`d31edf66a`](https://github.com/raptor3um/raptoreum/commit/d31edf66a) Wait for script checks to finish before messing with txes in Raptoreum-specific way (#2652) +- [`2c477b0d4`](https://github.com/raptor3um/raptoreum/commit/2c477b0d4) Fix no_wallet for rpcsmartnode/rpcevo +- [`fc00b7bae`](https://github.com/raptor3um/raptoreum/commit/fc00b7bae) add import to rpcevo fixing backport 8775 +- [`30b03863e`](https://github.com/raptor3um/raptoreum/commit/30b03863e) Apply suggestions from code review #2646 +- [`c70aa6079`](https://github.com/raptor3um/raptoreum/commit/c70aa6079) change #8775 to keep raptoreum codebase improvement, but still backport #9908 +- [`afdb0a267`](https://github.com/raptor3um/raptoreum/commit/afdb0a267) Merge #9908: Define 7200 second timestamp window constant +- [`c094d4bbe`](https://github.com/raptor3um/raptoreum/commit/c094d4bbe) fix #8775 backport +- [`f9147466f`](https://github.com/raptor3um/raptoreum/commit/f9147466f) remove other rpc references to pwalletMain +- [`d7474fd56`](https://github.com/raptor3um/raptoreum/commit/d7474fd56) remove all references to pwalletMain in rpc folder +- [`87af11781`](https://github.com/raptor3um/raptoreum/commit/87af11781) Merge #8775: RPC refactoring: Access wallet using new GetWalletForJSONRPCRequest +- [`1fa7f7e74`](https://github.com/raptor3um/raptoreum/commit/1fa7f7e74) stop test failures +- [`444f671ab`](https://github.com/raptor3um/raptoreum/commit/444f671ab) Update src/miner.cpp +- [`514769940`](https://github.com/raptor3um/raptoreum/commit/514769940) fix 9868 +- [`7ee31cbd6`](https://github.com/raptor3um/raptoreum/commit/7ee31cbd6) Speed up integration tests with smartnodes (#2642) +- [`fda16f1fe`](https://github.com/raptor3um/raptoreum/commit/fda16f1fe) Fix off-by-1 in phase calculations and the rest of llmq-signing.py issues (#2641) +- [`b595f9e6a`](https://github.com/raptor3um/raptoreum/commit/b595f9e6a) Fix LLMQ signing integration tests (#2640) +- [`597748689`](https://github.com/raptor3um/raptoreum/commit/597748689) Bring back ResetLocalSessionStatus call (#2639) +- [`682a3b993`](https://github.com/raptor3um/raptoreum/commit/682a3b993) Merge #9904: test: Fail if InitBlockIndex fails +- [`55a656c24`](https://github.com/raptor3um/raptoreum/commit/55a656c24) Merge #9359: Add test for CWalletTx::GetImmatureCredit() returning stale values. +- [`68f6b43d1`](https://github.com/raptor3um/raptoreum/commit/68f6b43d1) fix #9143 backport +- [`bba55e262`](https://github.com/raptor3um/raptoreum/commit/bba55e262) Merge #9143: Refactor ZapWalletTxes to avoid layer violations +- [`02f4661b3`](https://github.com/raptor3um/raptoreum/commit/02f4661b3) fix #9894 backport +- [`07b50aefa`](https://github.com/raptor3um/raptoreum/commit/07b50aefa) Merge #9894: remove 'label' filter for rpc command help +- [`8035769d4`](https://github.com/raptor3um/raptoreum/commit/8035769d4) remove removed argument from #9834 +- [`904e56fb1`](https://github.com/raptor3um/raptoreum/commit/904e56fb1) Merge #9834: qt: clean up initialize/shutdown signals +- [`2df84c6f1`](https://github.com/raptor3um/raptoreum/commit/2df84c6f1) fix merge error from #9821 +- [`21e00e905`](https://github.com/raptor3um/raptoreum/commit/21e00e905) Merge #9821: util: Specific GetOSRandom for Linux/FreeBSD/OpenBSD +- [`f9c585776`](https://github.com/raptor3um/raptoreum/commit/f9c585776) manual fixes on #9868 +- [`3ddf3dc62`](https://github.com/raptor3um/raptoreum/commit/3ddf3dc62) Merge #9868: Abstract out the command line options for block assembly +- [`397792355`](https://github.com/raptor3um/raptoreum/commit/397792355) Merge #9861: Trivial: Debug log ambiguity fix for peer addrs +- [`3d1a0b3ab`](https://github.com/raptor3um/raptoreum/commit/3d1a0b3ab) Merge #9871: Add a tree sha512 hash to merge commits +- [`8264e15cd`](https://github.com/raptor3um/raptoreum/commit/8264e15cd) Merge #9822: Remove block file location upgrade code +- [`f51d2e094`](https://github.com/raptor3um/raptoreum/commit/f51d2e094) Merge #9732: [Trivial] Remove nonsense #undef foreach +- [`3e10ff63f`](https://github.com/raptor3um/raptoreum/commit/3e10ff63f) Merge #9867: Replace remaining sprintf with snprintf +- [`0d38c16e7`](https://github.com/raptor3um/raptoreum/commit/0d38c16e7) Merge #9350: [Trivial] Adding label for amount inside of tx_valid/tx_invalid.json +- [`d2ddc2a00`](https://github.com/raptor3um/raptoreum/commit/d2ddc2a00) A couple of fixes/refactorings for CDKGSessionHandler (#2637) +- [`b2b97f258`](https://github.com/raptor3um/raptoreum/commit/b2b97f258) Fix some strings, docs and cmd-line/rpc help messages (#2632) +- [`e7981e468`](https://github.com/raptor3um/raptoreum/commit/e7981e468) Remove fLLMQAllowDummyCommitments from consensus params (#2636) +- [`8cd7287ba`](https://github.com/raptor3um/raptoreum/commit/8cd7287ba) Fix missing lupdate in depends (#2633) +- [`b0ad1425e`](https://github.com/raptor3um/raptoreum/commit/b0ad1425e) Review fixes (mostly if/else related but no change in logic) +- [`c905f1fe1`](https://github.com/raptor3um/raptoreum/commit/c905f1fe1) Initialize g_connman before initializing the LLMQ system +- [`b8d069bcd`](https://github.com/raptor3um/raptoreum/commit/b8d069bcd) fix/cleanup qt rpcnestedtests +- [`b970c20a9`](https://github.com/raptor3um/raptoreum/commit/b970c20a9) Avoid using immature coinbase UTXOs for dummy TXins +- [`4d25148c0`](https://github.com/raptor3um/raptoreum/commit/4d25148c0) Add llmq-signing.py tests +- [`d020ffa00`](https://github.com/raptor3um/raptoreum/commit/d020ffa00) Add wait_for_sporks_same and mine_quorum to RaptoreumTestFramework +- [`0cc1cf279`](https://github.com/raptor3um/raptoreum/commit/0cc1cf279) Add receivedFinalCommitment flag to CDKGDebugSessionStatus +- [`23d7ed80d`](https://github.com/raptor3um/raptoreum/commit/23d7ed80d) Implement "quorum sign/hasrecsig/isconflicting" RPCs +- [`316b6bf0d`](https://github.com/raptor3um/raptoreum/commit/316b6bf0d) Faster re-requesting of recovered sigs +- [`c38f889e7`](https://github.com/raptor3um/raptoreum/commit/c38f889e7) Implement processing, verifcation and propagation of signature shares +- [`43fd1b352`](https://github.com/raptor3um/raptoreum/commit/43fd1b352) Implement CSigningManager to process and propagage recovered signatures +- [`56ee83a76`](https://github.com/raptor3um/raptoreum/commit/56ee83a76) Add ReadDataStream to CDBWrapper to allow manual deserialization +- [`b6346a2f6`](https://github.com/raptor3um/raptoreum/commit/b6346a2f6) Implement CBLSInsecureBatchVerifier for convenient batch verification +- [`dd8f24588`](https://github.com/raptor3um/raptoreum/commit/dd8f24588) Implement IsBanned to allow checking for banned nodes outside of net_processing.cpp +- [`49de41726`](https://github.com/raptor3um/raptoreum/commit/49de41726) Implement CFixedVarIntsBitSet and CAutoBitSet +- [`76a58f5a4`](https://github.com/raptor3um/raptoreum/commit/76a58f5a4) Add `src/bls/*.h` and .cpp to CMakeLists.txt +- [`b627528ce`](https://github.com/raptor3um/raptoreum/commit/b627528ce) Use void as return type for WriteContributions +- [`edac100f5`](https://github.com/raptor3um/raptoreum/commit/edac100f5) Fix "quorum" RPCs help and unify logic in the sub-commands RPC entry point +- [`217f3941d`](https://github.com/raptor3um/raptoreum/commit/217f3941d) Skip starting of cache populator thread in case we don't have a valid vvec +- [`679a9895b`](https://github.com/raptor3um/raptoreum/commit/679a9895b) Add comments about why it's ok to ignore some failures +- [`15c34ccbd`](https://github.com/raptor3um/raptoreum/commit/15c34ccbd) Implement CQuorum and CQuorumManager +- [`8e4fe3660`](https://github.com/raptor3um/raptoreum/commit/8e4fe3660) [PrivateSend] Fallback to less participants if possible, fix too long timeouts on server side (#2616) +- [`ee808d819`](https://github.com/raptor3um/raptoreum/commit/ee808d819) Add checkbox to show only smartnodes the wallet has keys for (#2627) +- [`fff50af3c`](https://github.com/raptor3um/raptoreum/commit/fff50af3c) Revert "Set CLIENT_VERSION_IS_RELEASE to true (#2591)" +- [`fed4716c0`](https://github.com/raptor3um/raptoreum/commit/fed4716c0) Remove support for "0" as an alternative to "" when the default is requested (#2622) +- [`8b7771a31`](https://github.com/raptor3um/raptoreum/commit/8b7771a31) Add some `const`s +- [`0b1347c0d`](https://github.com/raptor3um/raptoreum/commit/0b1347c0d) Pass self-created message to CDKGPendingMessages instead of processing them +- [`02c7932f4`](https://github.com/raptor3um/raptoreum/commit/02c7932f4) Add owner and voting addresses to rpc output, unify it across different methods (#2618) +- [`c948c0ff3`](https://github.com/raptor3um/raptoreum/commit/c948c0ff3) Fix help for optional parameters in "quorum dkgstatus" +- [`957652bf3`](https://github.com/raptor3um/raptoreum/commit/957652bf3) Fix help for "quorum dkgstatus" and remove support for "0" proTxHash +- [`b7b436b7d`](https://github.com/raptor3um/raptoreum/commit/b7b436b7d) Apply review suggestions to rpcquorums.cpp +- [`3fe991063`](https://github.com/raptor3um/raptoreum/commit/3fe991063) Drop unused overload of GetSmartnodeQuorums +- [`5daeedabf`](https://github.com/raptor3um/raptoreum/commit/5daeedabf) Batched logger should not break log parsing +- [`2aed51c55`](https://github.com/raptor3um/raptoreum/commit/2aed51c55) Give nodes more time per phase when doing PoSe tests +- [`5958f8b81`](https://github.com/raptor3um/raptoreum/commit/5958f8b81) Remove dkgRndSleepTime from consensus params and make sleeping it non-random +- [`0dae46c2f`](https://github.com/raptor3um/raptoreum/commit/0dae46c2f) Move RandBool() into random.h/cpp +- [`e1901d24a`](https://github.com/raptor3um/raptoreum/commit/e1901d24a) Handle review suggestions +- [`352edbd33`](https://github.com/raptor3um/raptoreum/commit/352edbd33) Introduce SPORK_18_QUORUM_DEBUG_ENABLED to enable/disable LLMQ debug messages +- [`324406bfe`](https://github.com/raptor3um/raptoreum/commit/324406bfe) Implement debugging messages and RPC for LLMQ DKGs +- [`098b09495`](https://github.com/raptor3um/raptoreum/commit/098b09495) Pass scheduler to InitLLMQSystem +- [`a1f4853d6`](https://github.com/raptor3um/raptoreum/commit/a1f4853d6) Use LLMQ DKGs for PoSe testing in DIP3 tests +- [`6836f8c38`](https://github.com/raptor3um/raptoreum/commit/6836f8c38) Implement LLMQ DKG +- [`318b59813`](https://github.com/raptor3um/raptoreum/commit/318b59813) Prepare inter-quorum smartnode connections +- [`4bf736f33`](https://github.com/raptor3um/raptoreum/commit/4bf736f33) Add cxxtimer header only libraries +- [`c6be8cfcd`](https://github.com/raptor3um/raptoreum/commit/c6be8cfcd) Allow to skip malleability check when deserializing BLS primitives +- [`9d25bb1d8`](https://github.com/raptor3um/raptoreum/commit/9d25bb1d8) Add batched logger +- [`0df3871d1`](https://github.com/raptor3um/raptoreum/commit/0df3871d1) Remove dummy DKG +- [`55f205eba`](https://github.com/raptor3um/raptoreum/commit/55f205eba) A couple of fixes for `smartnode list` rpc (#2615) +- [`fa18d3e10`](https://github.com/raptor3um/raptoreum/commit/fa18d3e10) More fixes for PrivateSend after 2612 (#2614) +- [`bade33273`](https://github.com/raptor3um/raptoreum/commit/bade33273) Fix 2612 (#2613) +- [`5c5932eb9`](https://github.com/raptor3um/raptoreum/commit/5c5932eb9) [PrivateSend] Allow more than 3 mixing participants (#2612) +- [`0acfbf640`](https://github.com/raptor3um/raptoreum/commit/0acfbf640) Gracefully shutdown on evodb inconsistency instead of crashing (#2611) +- [`07dcddb4c`](https://github.com/raptor3um/raptoreum/commit/07dcddb4c) Backports 0.15 pr2 (#2597) +- [`04d1671b9`](https://github.com/raptor3um/raptoreum/commit/04d1671b9) armv7l build support (#2601) +- [`7d58d87f4`](https://github.com/raptor3um/raptoreum/commit/7d58d87f4) Remove a few sporks which are not used anymore (#2607) +- [`d1910eaff`](https://github.com/raptor3um/raptoreum/commit/d1910eaff) Refactor remains of CSmartnode/-Man into CSmartnodeMeta/-Man (#2606) +- [`cdc8ae943`](https://github.com/raptor3um/raptoreum/commit/cdc8ae943) Don't hold CDeterministicMNManager::cs while calling signals (#2608) +- [`968eb3fc5`](https://github.com/raptor3um/raptoreum/commit/968eb3fc5) Add real timestamp to log output when mock time is enabled (#2604) +- [`0648496e2`](https://github.com/raptor3um/raptoreum/commit/0648496e2) Fix flaky p2p-fullblocktest (#2605) +- [`96d4f7459`](https://github.com/raptor3um/raptoreum/commit/96d4f7459) Try to fix flaky IX tests in DIP3 tests (#2602) +- [`896733223`](https://github.com/raptor3um/raptoreum/commit/896733223) Raptoreumify copyright_header.py (#2598) +- [`c58f775cc`](https://github.com/raptor3um/raptoreum/commit/c58f775cc) De-raptoreumify env vars and raptoreumify help text in tests instead (#2603) +- [`a49f4123e`](https://github.com/raptor3um/raptoreum/commit/a49f4123e) Backports 0.15 pr1 (#2590) +- [`f95aae2b3`](https://github.com/raptor3um/raptoreum/commit/f95aae2b3) Remove all legacy/compatibility MN code (#2600) +- [`0e28f0aa9`](https://github.com/raptor3um/raptoreum/commit/0e28f0aa9) Fix flaky autoix tests by disabling autoix while filling mempool (#2595) +- [`78c22ad0f`](https://github.com/raptor3um/raptoreum/commit/78c22ad0f) Multiple fixes for "smartnode list" +- [`e54f6b274`](https://github.com/raptor3um/raptoreum/commit/e54f6b274) Use ban score of 10 for invalid DSQ sigs +- [`536229d17`](https://github.com/raptor3um/raptoreum/commit/536229d17) Apply suggestions from code review +- [`75024e117`](https://github.com/raptor3um/raptoreum/commit/75024e117) Merge #10365: [tests] increase timeouts in sendheaders test +- [`1efd77358`](https://github.com/raptor3um/raptoreum/commit/1efd77358) Remove non-DIP3 code path in CSmartnodePayments::IsScheduled +- [`4c749b7e9`](https://github.com/raptor3um/raptoreum/commit/4c749b7e9) Directly use deterministicMNManager in "smartnode list" +- [`0fe97a045`](https://github.com/raptor3um/raptoreum/commit/0fe97a045) Remove support for "smartnode list rank" +- [`adc2ec225`](https://github.com/raptor3um/raptoreum/commit/adc2ec225) Remove unsupported types/fields from "smartnode list" +- [`4b150e72f`](https://github.com/raptor3um/raptoreum/commit/4b150e72f) Directly use deterministicMNManager instead of mnodeman.CountXXX +- [`4c3bb7304`](https://github.com/raptor3um/raptoreum/commit/4c3bb7304) Remove call to mnodeman.PoSeBan +- [`0594cd719`](https://github.com/raptor3um/raptoreum/commit/0594cd719) Remove code that is incompatible now due to GetSmartnodeRanks returning DMNs now +- [`37541ee00`](https://github.com/raptor3um/raptoreum/commit/37541ee00) Change GetSmartnodeScores and GetSmartnodeRank/s to use CDeterministicMNCPtr +- [`17c792cd3`](https://github.com/raptor3um/raptoreum/commit/17c792cd3) Remove MN upgrade check in ComputeBlockVersion +- [`71a695100`](https://github.com/raptor3um/raptoreum/commit/71a695100) Move logic from FindRandomNotInVec into GetRandomNotUsedSmartnode +- [`2f66d6ada`](https://github.com/raptor3um/raptoreum/commit/2f66d6ada) Replace uses of mnodeman in PS code when deterministicMNManager can be used directly +- [`eedb15845`](https://github.com/raptor3um/raptoreum/commit/eedb15845) Remove use of mnodeman.GetSmartnodeInfo from IX code +- [`fb13b000b`](https://github.com/raptor3um/raptoreum/commit/fb13b000b) Remove support for legacy operator keys in CPrivateSendBroadcastTx +- [`5f5fcc49c`](https://github.com/raptor3um/raptoreum/commit/5f5fcc49c) Remove legacy signatures support in CPrivateSendQueue +- [`da924519a`](https://github.com/raptor3um/raptoreum/commit/da924519a) Remove support for legacy signatures in CTxLockVote +- [`2b2e4f45d`](https://github.com/raptor3um/raptoreum/commit/2b2e4f45d) Remove a few uses of mnodeman from governance code +- [`14d8ce03c`](https://github.com/raptor3um/raptoreum/commit/14d8ce03c) Don't use GetSmartnodeInfo in CTxLockVote::IsValid +- [`1ff241881`](https://github.com/raptor3um/raptoreum/commit/1ff241881) Directly use deterministicMNManager in some places +- [`45f34e130`](https://github.com/raptor3um/raptoreum/commit/45f34e130) Implement HasValidMN, HasValidMNByCollateral and GetValidMNByCollateral +- [`bc29fe160`](https://github.com/raptor3um/raptoreum/commit/bc29fe160) Remove compatibility code from governance RPCs and directly use deterministicMNManager +- [`b49ef5d71`](https://github.com/raptor3um/raptoreum/commit/b49ef5d71) Directly use deterministicMNManager when processing DSTX +- [`ae229e283`](https://github.com/raptor3um/raptoreum/commit/ae229e283) Directly use deterministicMNManager in CGovernanceManager::GetCurrentVotes +- [`96e0385db`](https://github.com/raptor3um/raptoreum/commit/96e0385db) Let "smartnode winner/current" directly use deterministicMNManager +- [`82745dd07`](https://github.com/raptor3um/raptoreum/commit/82745dd07) Use DIP3 MNs in auto-IX tests (#2588) +- [`ce5a51134`](https://github.com/raptor3um/raptoreum/commit/ce5a51134) Speed up stopping of nodes in tests by splitting up stop and wait (#2587) +- [`0c9fb6968`](https://github.com/raptor3um/raptoreum/commit/0c9fb6968) Harden spork15 on testnet (#2586) +- [`361900e46`](https://github.com/raptor3um/raptoreum/commit/361900e46) Bump version to 0.14 (#2589) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alexander Block (codablock) +- Amir Abrams (AmirAbrams) +- Daniel Hoffmann (dhoffmann) +- Duke Leto (leto) +- fish-en +- gladcow +- -k (charlesrocket) +- Nathan Marley (nmarley) +- PastaPastaPasta +- Peter Bushnell (Bushstar) +- strophy +- thephez +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Raptoreum was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of smartnodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Raptoreum. + +Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.13.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/raptor3um/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 + diff --git a/doc/release-notes/dash/release-notes-0.15-backports.md b/doc/release-notes/dash/release-notes-0.15-backports.md new file mode 100644 index 0000000000..e730aafa62 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.15-backports.md @@ -0,0 +1,755 @@ +### 0.15 backports and related fixes: +- [`cbf9c54a1`](https://github.com/raptor3um/raptoreum/commit/cbf9c54a1) Backport osslsigncode 2.0 - bitcoin#16669 and bitcoin#17671 (#3258) +- [`697d289eb`](https://github.com/raptor3um/raptoreum/commit/697d289eb) Merge #12392: Fix ignoring tx data requests when fPauseSend is set on a peer (#3225) +- [`8c17c8163`](https://github.com/raptor3um/raptoreum/commit/8c17c8163) Remove light-hires theme as it's not required anymore +- [`d9741fc63`](https://github.com/raptor3um/raptoreum/commit/d9741fc63) Merge #16254: qt: Set AA_EnableHighDpiScaling attribute early +- [`df04cdcd2`](https://github.com/raptor3um/raptoreum/commit/df04cdcd2) Fix Raptoreum specific docs and scripts +- [`1ef70ac9e`](https://github.com/raptor3um/raptoreum/commit/1ef70ac9e) Merge #12607: depends: Remove ccache +- [`5107582f2`](https://github.com/raptor3um/raptoreum/commit/5107582f2) Merge #11252: [P2P] When clearing addrman clear mapInfo and mapAddr. (#3171) +- [`cf632029b`](https://github.com/raptor3um/raptoreum/commit/cf632029b) Merge #12804: [tests] Fix intermittent rpc_net.py failure. +- [`1d8eb903a`](https://github.com/raptor3um/raptoreum/commit/1d8eb903a) Merge #12545: test: Use wait_until to ensure ping goes out +- [`0f7d8f898`](https://github.com/raptor3um/raptoreum/commit/0f7d8f898) Merge #17118: build: depends macOS: point --sysroot to SDK +- [`21d33dd56`](https://github.com/raptor3um/raptoreum/commit/21d33dd56) Merge #14413: tests: Allow closed rpc handler in assert_start_raises_init_error (#3157) +- [`17151daa2`](https://github.com/raptor3um/raptoreum/commit/17151daa2) Fix compilation +- [`fefe07003`](https://github.com/raptor3um/raptoreum/commit/fefe07003) Merge #14670: http: Fix HTTP server shutdown +- [`a8e49d33e`](https://github.com/raptor3um/raptoreum/commit/a8e49d33e) Merge #11006: Improve shutdown process +- [`00cbfac3c`](https://github.com/raptor3um/raptoreum/commit/00cbfac3c) Merge #12366: http: Join worker threads before deleting work queue +- [`a12b03e5c`](https://github.com/raptor3um/raptoreum/commit/a12b03e5c) Run orphan TX handling tests twice, once by resolving via mempool and once via block +- [`e76207024`](https://github.com/raptor3um/raptoreum/commit/e76207024) Also handle/resolve orphan TXs when parents appear in a block +- [`7e257a4e6`](https://github.com/raptor3um/raptoreum/commit/7e257a4e6) Remove RBF related code +- [`e89844d60`](https://github.com/raptor3um/raptoreum/commit/e89844d60) Interrupt orphan processing after every transaction +- [`306d2366d`](https://github.com/raptor3um/raptoreum/commit/306d2366d) [MOVEONLY] Move processing of orphan queue to ProcessOrphanTx +- [`079f22af1`](https://github.com/raptor3um/raptoreum/commit/079f22af1) Simplify orphan processing in preparation for interruptibility +- [`30767ffc4`](https://github.com/raptor3um/raptoreum/commit/30767ffc4) Remove unnecessary time imports +- [`8bcba5d4e`](https://github.com/raptor3um/raptoreum/commit/8bcba5d4e) Merge #8498: Near-Bugfix: Optimization: Minimize the number of times it is checked that no money... +- [`ed65d5126`](https://github.com/raptor3um/raptoreum/commit/ed65d5126) Merge #13003: qa: Add test for orphan handling +- [`3e72a09c1`](https://github.com/raptor3um/raptoreum/commit/3e72a09c1) Merge #11772: [tests] Change invalidblockrequest to use BitcoinTestFramework +- [`573d1da16`](https://github.com/raptor3um/raptoreum/commit/573d1da16) Use NodeConnCB as base for P2PDataStore +- [`01c138e86`](https://github.com/raptor3um/raptoreum/commit/01c138e86) Merge #11771: [tests] Change invalidtxrequest to use BitcoinTestFramework +- [`f4ea83674`](https://github.com/raptor3um/raptoreum/commit/f4ea83674) Merge #11849: [tests] Assert that only one NetworkThread exists +- [`6e6e950fc`](https://github.com/raptor3um/raptoreum/commit/6e6e950fc) Merge #11641: qa: Only allow disconnecting all NodeConns +- [`7c163b1ff`](https://github.com/raptor3um/raptoreum/commit/7c163b1ff) Merge #11182: [tests] Add P2P interface to TestNode +- [`bdfc303d2`](https://github.com/raptor3um/raptoreum/commit/bdfc303d2) Temporarily remove arguments to BENCHMARK +- [`2be67c760`](https://github.com/raptor3um/raptoreum/commit/2be67c760) Merge #12324: speed up Unserialize_impl for prevector +- [`595826ad6`](https://github.com/raptor3um/raptoreum/commit/595826ad6) Merge #12549: Make prevector::resize() and other prevector operations much faster +- [`a1bd147bc`](https://github.com/raptor3um/raptoreum/commit/a1bd147bc) Raptoreumify +- [`f7b71f660`](https://github.com/raptor3um/raptoreum/commit/f7b71f660) Merge #13611: [bugfix] Use `__cpuid_count` for gnu C to avoid gitian build fail. +- [`4bfc6ab30`](https://github.com/raptor3um/raptoreum/commit/4bfc6ab30) Merge #13788: Fix --disable-asm for newer assembly checks/code +- [`1b2252c28`](https://github.com/raptor3um/raptoreum/commit/1b2252c28) Merge #13386: SHA256 implementations based on Intel SHA Extensions +- [`1df17c02e`](https://github.com/raptor3um/raptoreum/commit/1df17c02e) Merge #13393: Enable double-SHA256-for-64-byte code on 32-bit x86 +- [`d07f54b96`](https://github.com/raptor3um/raptoreum/commit/d07f54b96) Merge #13471: For AVX2 code, also check for AVX, XSAVE, and OS support +- [`e44b6c7e5`](https://github.com/raptor3um/raptoreum/commit/e44b6c7e5) Merge #13438: Improve coverage of SHA256 SelfTest code +- [`adfd2e1a8`](https://github.com/raptor3um/raptoreum/commit/adfd2e1a8) Merge #13408: crypto: cleanup sha256 build +- [`5a23934df`](https://github.com/raptor3um/raptoreum/commit/5a23934df) Merge #13191: Specialized double-SHA256 with 64 byte inputs with SSE4.1 and AVX2 +- [`ad55048a6`](https://github.com/raptor3um/raptoreum/commit/ad55048a6) Merge #11176: build: Rename --enable-experimental-asm to --enable-asm and enable by default +- [`e2b4b205e`](https://github.com/raptor3um/raptoreum/commit/e2b4b205e) Remove now redundant and actually erroneous throwing of "Invalid blockhash" +- [`f38caa988`](https://github.com/raptor3um/raptoreum/commit/f38caa988) Merge #11676: contrib/init: Update openrc-run filename +- [`617c88623`](https://github.com/raptor3um/raptoreum/commit/617c88623) Merge #11289: Add wallet backup text to import* and add* RPCs +- [`d7119e648`](https://github.com/raptor3um/raptoreum/commit/d7119e648) Merge #11277: Fix uninitialized URI in batch RPC requests +- [`18f104b97`](https://github.com/raptor3um/raptoreum/commit/18f104b97) Merge #11590: [Wallet] always show help-line of wallet encryption calls +- [`569a11fef`](https://github.com/raptor3um/raptoreum/commit/569a11fef) Merge #11554: Sanity-check script sizes in bitcoin-tx +- [`7919c9681`](https://github.com/raptor3um/raptoreum/commit/7919c9681) Merge #11539: [verify-commits] Allow revoked keys to expire +- [`55550b8dd`](https://github.com/raptor3um/raptoreum/commit/55550b8dd) Add missing comment +- [`46373f5ee`](https://github.com/raptor3um/raptoreum/commit/46373f5ee) Merge #11565: Make listsinceblock refuse unknown block hash +- [`4096433ad`](https://github.com/raptor3um/raptoreum/commit/4096433ad) Update OpenBSD build docs as in bitcoin#11442 +- [`c6c337152`](https://github.com/raptor3um/raptoreum/commit/c6c337152) Merge #11530: Add share/rpcuser to dist. source code archive +- [`f8aca185b`](https://github.com/raptor3um/raptoreum/commit/f8aca185b) Merge #11521: travis: move back to the minimal image +- [`424ed32db`](https://github.com/raptor3um/raptoreum/commit/424ed32db) Few assert_raises_jsonrpc -> assert_raises_rpc_error fixes +- [`60ef97cc4`](https://github.com/raptor3um/raptoreum/commit/60ef97cc4) Adjust STALE_CHECK_INTERVAL to be 2.5 minutes instead of 10 minutes +- [`71d39e6a4`](https://github.com/raptor3um/raptoreum/commit/71d39e6a4) Don't disconnect smartnodes just because they were slow in block announcement +- [`438a972a7`](https://github.com/raptor3um/raptoreum/commit/438a972a7) Fix minchainwork.py +- [`9a96c0605`](https://github.com/raptor3um/raptoreum/commit/9a96c0605) Remove uses of NODE_WITNESS +- [`3e8962323`](https://github.com/raptor3um/raptoreum/commit/3e8962323) Merge #11593: rpc: work-around an upstream libevent bug +- [`58cb7e38f`](https://github.com/raptor3um/raptoreum/commit/58cb7e38f) Merge #11560: Connect to a new outbound peer if our tip is stale +- [`859b962a2`](https://github.com/raptor3um/raptoreum/commit/859b962a2) Move DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN up +- [`7d21a78fa`](https://github.com/raptor3um/raptoreum/commit/7d21a78fa) Merge #11531: Check that new headers are not a descendant of an invalid block (more effeciently) +- [`c743111c6`](https://github.com/raptor3um/raptoreum/commit/c743111c6) Merge #11578: net: Add missing lock in ProcessHeadersMessage(...) +- [`2e980018c`](https://github.com/raptor3um/raptoreum/commit/2e980018c) Merge #11568: Disconnect outbound peers on invalid chains +- [`b451094e2`](https://github.com/raptor3um/raptoreum/commit/b451094e2) Merge #11490: Disconnect from outbound peers with bad headers chains +- [`c35aa663b`](https://github.com/raptor3um/raptoreum/commit/c35aa663b) Merge #11326: Fix crash on shutdown with invalid wallet +- [`38a45a53d`](https://github.com/raptor3um/raptoreum/commit/38a45a53d) Make CDBEnv::IsMock() const +- [`bf7485213`](https://github.com/raptor3um/raptoreum/commit/bf7485213) More "connman." to "connman->" changes +- [`2edc29ee3`](https://github.com/raptor3um/raptoreum/commit/2edc29ee3) Merge #10756: net processing: swap out signals for an interface class +- [`f8c310a97`](https://github.com/raptor3um/raptoreum/commit/f8c310a97) Merge #11456: Replace relevant services logic with a function suite. +- [`35d60de2b`](https://github.com/raptor3um/raptoreum/commit/35d60de2b) Merge #11458: Don't process unrequested, low-work blocks +- [`9938dd83d`](https://github.com/raptor3um/raptoreum/commit/9938dd83d) Merge #10357: Allow setting nMinimumChainWork on command line +- [`f18fa576b`](https://github.com/raptor3um/raptoreum/commit/f18fa576b) Merge #11472: qa: Make tmpdir option an absolute path, misc cleanup +- [`b15513022`](https://github.com/raptor3um/raptoreum/commit/b15513022) Merge #11476: Avoid opening copied wallet databases simultaneously +- [`d05801c8a`](https://github.com/raptor3um/raptoreum/commit/d05801c8a) Merge #11492: [wallet] Fix leak in CDB constructor +- [`b6116b20c`](https://github.com/raptor3um/raptoreum/commit/b6116b20c) Merge #11376: Ensure backupwallet fails when attempting to backup to source file +- [`fa57eafd0`](https://github.com/raptor3um/raptoreum/commit/fa57eafd0) scripted-diff: rename assert_raises_jsonrpc to assert_raises_rpc error +- [`58a946c6b`](https://github.com/raptor3um/raptoreum/commit/58a946c6b) [tests] do not allow assert_raises_message to be called with JSONRPCException +- [`3602d3139`](https://github.com/raptor3um/raptoreum/commit/3602d3139) [tests] remove direct testing on JSONRPCException from individual test cases +- [`297e9a018`](https://github.com/raptor3um/raptoreum/commit/297e9a018) Remove more SegWit related tests from script_standard_tests.cpp +- [`f76d53d73`](https://github.com/raptor3um/raptoreum/commit/f76d53d73) Raptoreumify a few strings in tests +- [`4770830bb`](https://github.com/raptor3um/raptoreum/commit/4770830bb) Drop accidently added lines in release-notes.md +- [`1c65e0859`](https://github.com/raptor3um/raptoreum/commit/1c65e0859) Fix "os" import in wallet-dump.py +- [`f61698937`](https://github.com/raptor3um/raptoreum/commit/f61698937) Merge #11483: Fix importmulti bug when importing an already imported key +- [`f8f55c25c`](https://github.com/raptor3um/raptoreum/commit/f8f55c25c) Merge #11465: rpc: Update named args documentation for importprivkey +- [`1313ee3d4`](https://github.com/raptor3um/raptoreum/commit/1313ee3d4) Merge #11397: net: Improve and document SOCKS code +- [`08513bfff`](https://github.com/raptor3um/raptoreum/commit/08513bfff) Merge #11437: [Docs] Update Windows build instructions for using WSL and Ubuntu 17.04 +- [`9e3cb7599`](https://github.com/raptor3um/raptoreum/commit/9e3cb7599) Merge #9937: rpc: Prevent `dumpwallet` from overwriting files +- [`1d3ac9a76`](https://github.com/raptor3um/raptoreum/commit/1d3ac9a76) Merge #11440: Fix validationinterface build on super old boost/clang +- [`6ab680959`](https://github.com/raptor3um/raptoreum/commit/6ab680959) Merge #11338: qt: Backup former GUI settings on `-resetguisettings` +- [`3b0df3422`](https://github.com/raptor3um/raptoreum/commit/3b0df3422) Merge #11318: Put back inadvertently removed copyright notices +- [`b6e7a4b61`](https://github.com/raptor3um/raptoreum/commit/b6e7a4b61) Merge #11335: Replace save|restoreWindowGeometry with Qt functions +- [`61c5fb9ef`](https://github.com/raptor3um/raptoreum/commit/61c5fb9ef) Merge #11015: [Qt] Add delay before filtering transactions +- [`654c78fa2`](https://github.com/raptor3um/raptoreum/commit/654c78fa2) Merge #11267: rpc: update cli for `estimate*fee` argument rename +- [`cbf59efef`](https://github.com/raptor3um/raptoreum/commit/cbf59efef) Implement WalletModel::IsSpendable for CScript +- [`a88e000fe`](https://github.com/raptor3um/raptoreum/commit/a88e000fe) Merge #11247: qt: Use IsMine to validate custom change address +- [`6ec77c0a7`](https://github.com/raptor3um/raptoreum/commit/6ec77c0a7) Merge #11131: rpc: Write authcookie atomically +- [`9a5b798e9`](https://github.com/raptor3um/raptoreum/commit/9a5b798e9) Merge #10957: Avoid returning a BIP9Stats object with uninitialized values +- [`76776fb62`](https://github.com/raptor3um/raptoreum/commit/76776fb62) Merge #11017: [wallet] Close DB on error. +- [`b93785d8d`](https://github.com/raptor3um/raptoreum/commit/b93785d8d) Fix maxuploadtarget.py +- [`e37bd6d96`](https://github.com/raptor3um/raptoreum/commit/e37bd6d96) Fix zmq_test.py +- [`7a44dc195`](https://github.com/raptor3um/raptoreum/commit/7a44dc195) Fix hash256() imports +- [`7b80cc804`](https://github.com/raptor3um/raptoreum/commit/7b80cc804) Allow ignoring of known messages in mininode.py +- [`9ef73e6ad`](https://github.com/raptor3um/raptoreum/commit/9ef73e6ad) Fix mining.py +- [`5a5953863`](https://github.com/raptor3um/raptoreum/commit/5a5953863) Remove SegWit tests from script_standard_tests.cpp +- [`5291c27ca`](https://github.com/raptor3um/raptoreum/commit/5291c27ca) A few compilation fixes +- [`dc303defc`](https://github.com/raptor3um/raptoreum/commit/dc303defc) qa: Fix lcov for out-of-tree builds +- [`c8e17f1c3`](https://github.com/raptor3um/raptoreum/commit/c8e17f1c3) Merge #11433: qa: Restore bitcoin-util-test py2 compatibility +- [`377a8fae2`](https://github.com/raptor3um/raptoreum/commit/377a8fae2) Merge #11399: Fix bip68-sequence rpc test +- [`5c0e3ea6e`](https://github.com/raptor3um/raptoreum/commit/5c0e3ea6e) Merge #11422: qa: Verify DBWrapper iterators are taking snapshots +- [`8855f4b97`](https://github.com/raptor3um/raptoreum/commit/8855f4b97) qa: Treat mininode p2p exceptions as fatal +- [`7ddd16921`](https://github.com/raptor3um/raptoreum/commit/7ddd16921) Merge #10552: [Test] Tests for zmqpubrawtx and zmqpubrawblock +- [`eb68d88b9`](https://github.com/raptor3um/raptoreum/commit/eb68d88b9) Merge #11116: [script] Unit tests for script/standard and IsMine functions. +- [`bc5918aa1`](https://github.com/raptor3um/raptoreum/commit/bc5918aa1) Merge #11310: [tests] Test listwallets RPC +- [`797b47460`](https://github.com/raptor3um/raptoreum/commit/797b47460) Merge #11230: [tests] fixup dbcrash interaction with add_nodes() +- [`102c3f2ce`](https://github.com/raptor3um/raptoreum/commit/102c3f2ce) [test] Replace check_output with low level version +- [`654815456`](https://github.com/raptor3um/raptoreum/commit/654815456) [test] Add assert_raises_process_error to assert process errors +- [`6245ce95e`](https://github.com/raptor3um/raptoreum/commit/6245ce95e) [test] Add support for custom arguments to TestNodeCLI +- [`d446cc57a`](https://github.com/raptor3um/raptoreum/commit/d446cc57a) [test] Improve assert_raises_jsonrpc docstring +- [`b9599c297`](https://github.com/raptor3um/raptoreum/commit/b9599c297) Partially backport bitcoin#10838 for bitcoin_cli.py +- [`ded01879d`](https://github.com/raptor3um/raptoreum/commit/ded01879d) Merge #11067: [qa] TestNode: Add wait_until_stopped helper method +- [`a2e8cb4f4`](https://github.com/raptor3um/raptoreum/commit/a2e8cb4f4) Merge #11210: Stop test_bitcoin-qt touching ~/.bitcoin +- [`ec892d459`](https://github.com/raptor3um/raptoreum/commit/ec892d459) Merge #11234: Remove redundant testutil.cpp|h files +- [`d643ada80`](https://github.com/raptor3um/raptoreum/commit/d643ada80) Merge #11241: [tests] Improve signmessages functional test +- [`b9ce8480d`](https://github.com/raptor3um/raptoreum/commit/b9ce8480d) Merge #11215: [tests] fixups from set_test_params() +- [`a304d4d47`](https://github.com/raptor3um/raptoreum/commit/a304d4d47) Fix RaptoreumTestFramework and tests depending on it +- [`ac0f483d8`](https://github.com/raptor3um/raptoreum/commit/ac0f483d8) Fix issues with set_test_params and start/stop_node +- [`703f4c77a`](https://github.com/raptor3um/raptoreum/commit/703f4c77a) Fix stderr related issues +- [`39a1c6452`](https://github.com/raptor3um/raptoreum/commit/39a1c6452) Allow to set self.stderr when using vanilla setup_nodes() +- [`8ba042b58`](https://github.com/raptor3um/raptoreum/commit/8ba042b58) Fix dip3-deterministicmns.py +- [`f51a4df5c`](https://github.com/raptor3um/raptoreum/commit/f51a4df5c) Allow calling add_nodes multiple times without reusing datadirs +- [`17bb230d7`](https://github.com/raptor3um/raptoreum/commit/17bb230d7) Merge #11121: TestNode tidyups +- [`37250c02e`](https://github.com/raptor3um/raptoreum/commit/37250c02e) Merge #11150: [tests] Add getmininginfo test +- [`74325db11`](https://github.com/raptor3um/raptoreum/commit/74325db11) Merge #10859: RPC: gettxout: Slightly improve doc and tests +- [`ebfec2218`](https://github.com/raptor3um/raptoreum/commit/ebfec2218) Raptoreumify BITCOINCLI +- [`1adc2001a`](https://github.com/raptor3um/raptoreum/commit/1adc2001a) Merge #10798: [tests] [utils] test bitcoin-cli +- [`1b77cc81a`](https://github.com/raptor3um/raptoreum/commit/1b77cc81a) No need to assert wait_until +- [`956e6bc01`](https://github.com/raptor3um/raptoreum/commit/956e6bc01) Merge #11068: qa: Move wait_until to util +- [`d09f88d98`](https://github.com/raptor3um/raptoreum/commit/d09f88d98) Merge #11077: [tests] fix timeout issues from TestNode +- [`0a8ad8b56`](https://github.com/raptor3um/raptoreum/commit/0a8ad8b56) Merge #11091: test: Increase initial RPC timeout to 60 seconds +- [`1596b1dfa`](https://github.com/raptor3um/raptoreum/commit/1596b1dfa) Move -createwalletbackups=0 into test_node.py +- [`4049754f4`](https://github.com/raptor3um/raptoreum/commit/4049754f4) Raptoreumify test_node.py +- [`96966e5b8`](https://github.com/raptor3um/raptoreum/commit/96966e5b8) Use TestNode.node_encrypt_wallet +- [`cc124c99c`](https://github.com/raptor3um/raptoreum/commit/cc124c99c) Remove Raptoreum specific leftovers of node.stop optimization +- [`f55da3aa5`](https://github.com/raptor3um/raptoreum/commit/f55da3aa5) Merge #10711: [tests] Introduce TestNode +- [`f7a679062`](https://github.com/raptor3um/raptoreum/commit/f7a679062) Merge #10854: Avoid using sizes on non-fixed-width types to derive protocol constants. +- [`3eb0e1463`](https://github.com/raptor3um/raptoreum/commit/3eb0e1463) Fix rawtransaction.py test +- [`93e3294ec`](https://github.com/raptor3um/raptoreum/commit/93e3294ec) Remove unsupported parameter from DecodeHexTx calls +- [`499fcecaf`](https://github.com/raptor3um/raptoreum/commit/499fcecaf) Merge #11334: qt: Remove custom fee radio group and remove nCustomFeeRadio setting +- [`a09370aef`](https://github.com/raptor3um/raptoreum/commit/a09370aef) Merge #11108: Changing -txindex requires -reindex, not -reindex-chainstate +- [`f9453e055`](https://github.com/raptor3um/raptoreum/commit/f9453e055) Merge #11145: Fix rounding bug in calculation of minimum change +- [`10c505cdf`](https://github.com/raptor3um/raptoreum/commit/10c505cdf) Merge #11119: [doc] build-windows: Mention that only trusty works +- [`7e8d1fcc1`](https://github.com/raptor3um/raptoreum/commit/7e8d1fcc1) Merge #11097: gitian: quick hack to fix version string in releases +- [`a31fb063a`](https://github.com/raptor3um/raptoreum/commit/a31fb063a) Merge #11081: Add length check for CExtKey deserialization (jonasschnelli, guidovranken) +- [`124f3dbf2`](https://github.com/raptor3um/raptoreum/commit/124f3dbf2) Merge #11083: Fix combinerawtransaction RPC help result section +- [`8308012e1`](https://github.com/raptor3um/raptoreum/commit/8308012e1) Merge #10571: [RPC]Move transaction combining from signrawtransaction to new RPC +- [`a72fc7c7d`](https://github.com/raptor3um/raptoreum/commit/a72fc7c7d) resolve NIT, remove extra line +- [`f7a9b0df4`](https://github.com/raptor3um/raptoreum/commit/f7a9b0df4) move `deterministicMNManager->UpgradeDBIfNeeded();` to be after LoadChainTip +- [`64dde0f6c`](https://github.com/raptor3um/raptoreum/commit/64dde0f6c) add back the todo +- [`689eff3aa`](https://github.com/raptor3um/raptoreum/commit/689eff3aa) Drop unused GetScriptForWitness +- [`4b579c77a`](https://github.com/raptor3um/raptoreum/commit/4b579c77a) Fix remaining issues +- [`02328ae96`](https://github.com/raptor3um/raptoreum/commit/02328ae96) Merge #11044: [wallet] Keypool topup cleanups +- [`ac07bf609`](https://github.com/raptor3um/raptoreum/commit/ac07bf609) revert unintentional change, 10758 +- [`3d445628a`](https://github.com/raptor3um/raptoreum/commit/3d445628a) remove `LogPrintf("Initializing databases...\n");` +- [`e941c9ba5`](https://github.com/raptor3um/raptoreum/commit/e941c9ba5) Merge #11028: Avoid masking of difficulty adjustment errors by checkpoints +- [`2d922f5d3`](https://github.com/raptor3um/raptoreum/commit/2d922f5d3) fix +- [`c438c9322`](https://github.com/raptor3um/raptoreum/commit/c438c9322) Merge #11022: Basic keypool topup +- [`d5fdf62fa`](https://github.com/raptor3um/raptoreum/commit/d5fdf62fa) Merge #10919: Fix more init bugs. +- [`7662c0b79`](https://github.com/raptor3um/raptoreum/commit/7662c0b79) A couple of fixes +- [`16bd20e57`](https://github.com/raptor3um/raptoreum/commit/16bd20e57) Remove segwit related code +- [`21eca6481`](https://github.com/raptor3um/raptoreum/commit/21eca6481) BIP143: Signing logic +- [`fff708d3a`](https://github.com/raptor3um/raptoreum/commit/fff708d3a) BIP143: Verification logic +- [`8da543f27`](https://github.com/raptor3um/raptoreum/commit/8da543f27) Refactor script validation to observe amounts +- [`1f06ecdd5`](https://github.com/raptor3um/raptoreum/commit/1f06ecdd5) add gargs +- [`9f71ab04b`](https://github.com/raptor3um/raptoreum/commit/9f71ab04b) remove chainparams from method call (10758) +- [`05ad6d2ec`](https://github.com/raptor3um/raptoreum/commit/05ad6d2ec) change nEnd to index (might break the progress bar on wallet creation, should test) +- [`cd5a12f9f`](https://github.com/raptor3um/raptoreum/commit/cd5a12f9f) Merge #10862: Remove unused variable int64_t nEnd. Fix typo: "conditon" → "condition". +- [`714438af4`](https://github.com/raptor3um/raptoreum/commit/714438af4) remove rewinding blocks +- [`dbd499308`](https://github.com/raptor3um/raptoreum/commit/dbd499308) Merge #10758: Fix some chainstate-init-order bugs. +- [`0631cd95d`](https://github.com/raptor3um/raptoreum/commit/0631cd95d) Merge #10789: Punctuation/grammer fixes in rpcwallet.cpp +- [`75e8e0a45`](https://github.com/raptor3um/raptoreum/commit/75e8e0a45) add a zero to the GenerateNewKey call +- [`11e41b90c`](https://github.com/raptor3um/raptoreum/commit/11e41b90c) internal -> fInternal +- [`b8c1d66fb`](https://github.com/raptor3um/raptoreum/commit/b8c1d66fb) Merge #10795: No longer ever reuse keypool indexes +- [`d04633d28`](https://github.com/raptor3um/raptoreum/commit/d04633d28) Merge #10707: Better API for estimatesmartfee RPC +- [`65cd33479`](https://github.com/raptor3um/raptoreum/commit/65cd33479) Tools window: Information - make "InstantSend locks" and "Number of Smartnodes" fields copyable +- [`ddef2025b`](https://github.com/raptor3um/raptoreum/commit/ddef2025b) sat -> duff +- [`a7e20cd4c`](https://github.com/raptor3um/raptoreum/commit/a7e20cd4c) Use chainparams passed into ATMPW +- [`e6df5690a`](https://github.com/raptor3um/raptoreum/commit/e6df5690a) Drop segwit related parts and fix cs_main issues +- [`70e386580`](https://github.com/raptor3um/raptoreum/commit/70e386580) Backport meaningful parts of 8149/2b1f6f9ccf36f1e0a2c9d99154e1642f796d7c2b +- [`6fd35565a`](https://github.com/raptor3um/raptoreum/commit/6fd35565a) Merge #13527: policy: Remove promiscuousmempoolflags +- [`9b8df2f52`](https://github.com/raptor3um/raptoreum/commit/9b8df2f52) add dip3params +- [`6fc928541`](https://github.com/raptor3um/raptoreum/commit/6fc928541) Merge bitcoin#10695: [qa] Rewrite BIP65/BIP66 functional tests +- [`eda5dac9f`](https://github.com/raptor3um/raptoreum/commit/eda5dac9f) Merge #10192: Cache full script execution results in addition to signatures +- [`3e7ff3306`](https://github.com/raptor3um/raptoreum/commit/3e7ff3306) Merge #10835: Rename member field according to the style guide +- [`d2f1259c8`](https://github.com/raptor3um/raptoreum/commit/d2f1259c8) Merge #11029: [RPC] trivial: gettxout no longer shows version of tx +- [`c2e6a2f9c`](https://github.com/raptor3um/raptoreum/commit/c2e6a2f9c) Merge #10949: Clarify help message for -discardfee +- [`ec366d259`](https://github.com/raptor3um/raptoreum/commit/ec366d259) Merge #10817: Redefine Dust and add a discard_rate +- [`443b57793`](https://github.com/raptor3um/raptoreum/commit/443b57793) Merge #10784: Do not allow users to get keys from keypool without reserving them +- [`3b7d3c90d`](https://github.com/raptor3um/raptoreum/commit/3b7d3c90d) Merge #10501: remove some unused functions -- ignoring removal of SetPort due to raptoreum#2168 +- [`3e483659a`](https://github.com/raptor3um/raptoreum/commit/3e483659a) Merge #10914: Add missing lock in CScheduler::AreThreadsServicingQueue() +- [`a80f42eab`](https://github.com/raptor3um/raptoreum/commit/a80f42eab) Still pass the disconect block index +- [`6dce8d273`](https://github.com/raptor3um/raptoreum/commit/6dce8d273) Fix includes +- [`91a4b775a`](https://github.com/raptor3um/raptoreum/commit/91a4b775a) fix some things +- [`e4183b093`](https://github.com/raptor3um/raptoreum/commit/e4183b093) remove extra arg +- [`40617436c`](https://github.com/raptor3um/raptoreum/commit/40617436c) Merge #10179: Give CValidationInterface Support for calling notifications on the CScheduler Thread +- [`9829a6dac`](https://github.com/raptor3um/raptoreum/commit/9829a6dac) Merge #10655: Properly document target_confirmations in listsinceblock +- [`93754f8d8`](https://github.com/raptor3um/raptoreum/commit/93754f8d8) Merge #10799: Prevent user from specifying conflicting parameters to fundrawtx +- [`05bed7009`](https://github.com/raptor3um/raptoreum/commit/05bed7009) Merge #10833: Fix typos +- [`0cccde9df`](https://github.com/raptor3um/raptoreum/commit/0cccde9df) fix all of the problems +- [`791c07fb0`](https://github.com/raptor3um/raptoreum/commit/791c07fb0) add gArgs +- [`19b584c3b`](https://github.com/raptor3um/raptoreum/commit/19b584c3b) remove some rbf +- [`c84970899`](https://github.com/raptor3um/raptoreum/commit/c84970899) Merge #10706: Improve wallet fee logic and fix GUI bugs +- [`c62c7ab6d`](https://github.com/raptor3um/raptoreum/commit/c62c7ab6d) Merge #10662: Initialize randomness in benchmarks +- [`de1342791`](https://github.com/raptor3um/raptoreum/commit/de1342791) Merge #10314: Remove unused forward declaration for non-existent ScriptPubKeyToJSON(...) +- [`f2dcac3a4`](https://github.com/raptor3um/raptoreum/commit/f2dcac3a4) Merge #10757: RPC: Introduce getblockstats to plot things (#3058) +- [`51a4e11d6`](https://github.com/raptor3um/raptoreum/commit/51a4e11d6) raptoreumify what made sense in fuzzing.md +- [`b1970add1`](https://github.com/raptor3um/raptoreum/commit/b1970add1) Code Review fixes +- [`8cadbf622`](https://github.com/raptor3um/raptoreum/commit/8cadbf622) bitcoin -> raptoreum +- [`122da986c`](https://github.com/raptor3um/raptoreum/commit/122da986c) Merge #10415: [tests] Speed up fuzzing by ~200x when using afl-fuzz +- [`2f2a6972d`](https://github.com/raptor3um/raptoreum/commit/2f2a6972d) Merge #9691: Init ECC context for test_bitcoin_fuzzy. +- [`32dc5f1da`](https://github.com/raptor3um/raptoreum/commit/32dc5f1da) Merge #9354: Make fuzzer actually test CTxOutCompressor +- [`f55cf1704`](https://github.com/raptor3um/raptoreum/commit/f55cf1704) Merge #9172: Resurrect pstratem's "Simple fuzzing framework" +- [`6905da5fe`](https://github.com/raptor3um/raptoreum/commit/6905da5fe) Merge #11308: [qa] zapwallettxes: Wait up to 3s for mempool reload (#3051) +- [`0599d3a03`](https://github.com/raptor3um/raptoreum/commit/0599d3a03) Backport bitcoin#10831: Batch flushing operations to the walletdb during top up and increase keypool size (#3045) +- [`c851de999`](https://github.com/raptor3um/raptoreum/commit/c851de999) Resolve merge issues +- [`3d6c5ac27`](https://github.com/raptor3um/raptoreum/commit/3d6c5ac27) More mocktime related fixes +- [`59e57337e`](https://github.com/raptor3um/raptoreum/commit/59e57337e) fix wait_node +- [`cd30d6b44`](https://github.com/raptor3um/raptoreum/commit/cd30d6b44) simplify `stop_node` +- [`a67f5375f`](https://github.com/raptor3um/raptoreum/commit/a67f5375f) remove duplicate import +- [`3980caf20`](https://github.com/raptor3um/raptoreum/commit/3980caf20) re-add import shutil +- [`cb480af01`](https://github.com/raptor3um/raptoreum/commit/cb480af01) Raptoreumify +- [`806da3c6e`](https://github.com/raptor3um/raptoreum/commit/806da3c6e) adjust number of parameters in sendmany +- [`c4094c8de`](https://github.com/raptor3um/raptoreum/commit/c4094c8de) Few more tiny trivial fixes +- [`8c2c2a1ad`](https://github.com/raptor3um/raptoreum/commit/8c2c2a1ad) s/bitcoind/raptoreumd/ in some places +- [`76822dd50`](https://github.com/raptor3um/raptoreum/commit/76822dd50) fix imports +- [`4bfef1daa`](https://github.com/raptor3um/raptoreum/commit/4bfef1daa) Add missing raptoreum-specific parts +- [`9828b624a`](https://github.com/raptor3um/raptoreum/commit/9828b624a) `_wait_for_bitcoind_start` should be a part of BitcoinTestFramework +- [`d0288fba5`](https://github.com/raptor3um/raptoreum/commit/d0288fba5) Refactor/fix mocktime usage in tests +- [`9c8365ee6`](https://github.com/raptor3um/raptoreum/commit/9c8365ee6) Fix GetMinimumFee changes +- [`2e235b4b4`](https://github.com/raptor3um/raptoreum/commit/2e235b4b4) Fix rpcs +- [`00052aa15`](https://github.com/raptor3um/raptoreum/commit/00052aa15) Drop rbf-related parts +- [`00c4046e5`](https://github.com/raptor3um/raptoreum/commit/00c4046e5) Wallet: Refactor FundTransaction to accept parameters via CCoinControl +- [`c9784838a`](https://github.com/raptor3um/raptoreum/commit/c9784838a) Merge #10589: More economical fee estimates for RBF and RPC options to control +- [`c853c012e`](https://github.com/raptor3um/raptoreum/commit/c853c012e) Fix amounts formatting in `decoderawtransaction` and `getsuperblockbudget` +- [`a82f22e52`](https://github.com/raptor3um/raptoreum/commit/a82f22e52) Merge #10556: Move stop/start functions from utils.py into BitcoinTestFramework +- [`746ebf165`](https://github.com/raptor3um/raptoreum/commit/746ebf165) fix indendation in wallet.cpp +- [`3a6b2ce27`](https://github.com/raptor3um/raptoreum/commit/3a6b2ce27) backport part of #10481 +- [`ecfdfa64d`](https://github.com/raptor3um/raptoreum/commit/ecfdfa64d) Merge #10792: Replace MAX_OPCODE for OP_NOP10. +- [`1a0d52814`](https://github.com/raptor3um/raptoreum/commit/1a0d52814) #10483 scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead of the macro NULL +- [`ac80c9012`](https://github.com/raptor3um/raptoreum/commit/ac80c9012) Merge #11012: Make sure to clean up mapBlockSource if we've already seen the block +- [`19a17a58d`](https://github.com/raptor3um/raptoreum/commit/19a17a58d) Merge #10968: Add instructions for parallel gitian builds. +- [`7f3d3deda`](https://github.com/raptor3um/raptoreum/commit/7f3d3deda) Merge #11032: [qa] Fix block message processing error in sendheaders.py +- [`e5c94eea0`](https://github.com/raptor3um/raptoreum/commit/e5c94eea0) Merge #10765: Tests: address placement should be deterministic by default +- [`c2fcf849a`](https://github.com/raptor3um/raptoreum/commit/c2fcf849a) Merge #11025: qa: Fix inv race in example_test +- [`50fee01e3`](https://github.com/raptor3um/raptoreum/commit/50fee01e3) Merge #10963: [bench] Restore format state of cout after printing with std::fixed/setprecision +- [`5f2aef826`](https://github.com/raptor3um/raptoreum/commit/5f2aef826) Merge #11003: Docs: Capitalize bullet points in CONTRIBUTING guide +- [`cd490905b`](https://github.com/raptor3um/raptoreum/commit/cd490905b) Merge #10999: Fix amounts formatting in `decoderawtransaction` +- [`dfd14bf57`](https://github.com/raptor3um/raptoreum/commit/dfd14bf57) Merge #10977: [net] Fix use of uninitialized value in getnetworkinfo(const JSONRPCRequest&) +- [`a0fb110e9`](https://github.com/raptor3um/raptoreum/commit/a0fb110e9) Merge #10971: build: fix missing sse42 in depends builds +- [`cfc697527`](https://github.com/raptor3um/raptoreum/commit/cfc697527) Merge #10985: Add undocumented -forcecompactdb to force LevelDB compactions +- [`e72a2e278`](https://github.com/raptor3um/raptoreum/commit/e72a2e278) Merge #10942: Eliminate fee overpaying edge case when subtracting fee from recipients +- [`707f3ec86`](https://github.com/raptor3um/raptoreum/commit/707f3ec86) Merge #10958: Update to latest Bitcoin patches for LevelDB +- [`ae488ba3d`](https://github.com/raptor3um/raptoreum/commit/ae488ba3d) Merge #10885: Reject invalid wallets +- [`417d95f4e`](https://github.com/raptor3um/raptoreum/commit/417d95f4e) Merge #10931: Fix misleading "Method not found" multiwallet errors +- [`0a0ba2837`](https://github.com/raptor3um/raptoreum/commit/0a0ba2837) Merge #10865: Move CloseSocket out of SetSocketNonBlocking and pass socket as const reference +- [`f39372949`](https://github.com/raptor3um/raptoreum/commit/f39372949) Merge #9622: [rpc] listsinceblock should include lost transactions when parameter is a reorg'd block +- [`d10e4e769`](https://github.com/raptor3um/raptoreum/commit/d10e4e769) Merge #10893: [QA] Avoid running multiwallet.py twice +- [`af4450ffe`](https://github.com/raptor3um/raptoreum/commit/af4450ffe) Merge #10604: [wallet] [tests] Add listwallets RPC, include wallet name in `getwalletinfo` and add multiwallet test +- [`ed8d9a780`](https://github.com/raptor3um/raptoreum/commit/ed8d9a780) Merge #10775: nCheckDepth chain height fix +- [`00ceca621`](https://github.com/raptor3um/raptoreum/commit/00ceca621) Merge #10712: Add change output if necessary to reduce excess fee +- [`e78960872`](https://github.com/raptor3um/raptoreum/commit/e78960872) Merge #10543: Change API to estimaterawfee +- [`50ec76307`](https://github.com/raptor3um/raptoreum/commit/50ec76307) Merge #10598: Supress struct/class mismatch warnings introduced in #10284 +- [`bfa64fd15`](https://github.com/raptor3um/raptoreum/commit/bfa64fd15) Merge #10284: Always log debug information for fee calculation in CreateTransaction +- [`1a75762b5`](https://github.com/raptor3um/raptoreum/commit/1a75762b5) Merge #10769: [Qt] replace fee slider with a Dropdown, extend conf. targets +- [`9d206814c`](https://github.com/raptor3um/raptoreum/commit/9d206814c) Merge #10783: [RPC] Various rpc argument fixes +- [`f66ff6be0`](https://github.com/raptor3um/raptoreum/commit/f66ff6be0) Drop state from DisconnectBlock params (finilize 10297 backport) +- [`42cf74dec`](https://github.com/raptor3um/raptoreum/commit/42cf74dec) add #if ENABLE_MINER to relevant sections +- [`53f046ce2`](https://github.com/raptor3um/raptoreum/commit/53f046ce2) Fix makefile +- [`106fdfa0b`](https://github.com/raptor3um/raptoreum/commit/106fdfa0b) Fix tests +- [`6edcf43fc`](https://github.com/raptor3um/raptoreum/commit/6edcf43fc) Merge #10683: rpc: Move the `generate` RPC call to rpcwallet +- [`f1f9e5dfb`](https://github.com/raptor3um/raptoreum/commit/f1f9e5dfb) Merge #11002: [wallet] return correct error code from resendwallettransaction +- [`a7ef22261`](https://github.com/raptor3um/raptoreum/commit/a7ef22261) Merge #10995: Fix resendwallettransactions assert failure if -walletbroadcast=0 +- [`60b3ae182`](https://github.com/raptor3um/raptoreum/commit/60b3ae182) add gArgs +- [`f3259d0d2`](https://github.com/raptor3um/raptoreum/commit/f3259d0d2) remove DB_PEAK_USAGE_FACTOR +- [`453d75657`](https://github.com/raptor3um/raptoreum/commit/453d75657) Merge #10148: Use non-atomic flushing with block replay +- [`8ed0d522f`](https://github.com/raptor3um/raptoreum/commit/8ed0d522f) disable jni in builds +- [`33807c8ce`](https://github.com/raptor3um/raptoreum/commit/33807c8ce) Merge #11000: test: Add resendwallettransactions functional tests +- [`7f1009ed5`](https://github.com/raptor3um/raptoreum/commit/7f1009ed5) Merge #11023: [tests] Add option to attach a python debugger if functional test fails +- [`52aef4cfe`](https://github.com/raptor3um/raptoreum/commit/52aef4cfe) Merge #10301: Check if sys/random.h is required for getentropy. +- [`8cb2508c9`](https://github.com/raptor3um/raptoreum/commit/8cb2508c9) Merge #10974: Fix typo in sendcoinsdialog. +- [`80bc6df26`](https://github.com/raptor3um/raptoreum/commit/80bc6df26) Merge #10892: Replace traditional for with ranged for in block and transaction primitives +- [`07d08a822`](https://github.com/raptor3um/raptoreum/commit/07d08a822) Merge #10912: [tests] Fix incorrect memory_cleanse(…) call in crypto_tests.cpp +- [`5dc2193d2`](https://github.com/raptor3um/raptoreum/commit/5dc2193d2) Merge #10824: Avoid unnecessary work in SetNetworkActive +- [`8fdf59431`](https://github.com/raptor3um/raptoreum/commit/8fdf59431) Merge #10927: test: Make sure wallet.backup is created in temp path +- [`b2b0bc9b0`](https://github.com/raptor3um/raptoreum/commit/b2b0bc9b0) Merge #10870: [Qt] Use wallet 0 in rpc console if running with multiple wallets +- [`6096212d5`](https://github.com/raptor3um/raptoreum/commit/6096212d5) Merge #10883: Rename -usewallet to -rpcwallet +- [`1a9645228`](https://github.com/raptor3um/raptoreum/commit/1a9645228) add gArgs +- [`fdf34ff65`](https://github.com/raptor3um/raptoreum/commit/fdf34ff65) Merge #10849: Multiwallet: simplest endpoint support +- [`6fb74ead6`](https://github.com/raptor3um/raptoreum/commit/6fb74ead6) Merge #10832: init: Factor out AppInitLockDataDirectory and fix startup core dump issue +- [`d97fd1ca7`](https://github.com/raptor3um/raptoreum/commit/d97fd1ca7) state that getinfo will be deprecated in a future version +- [`d6633b5fb`](https://github.com/raptor3um/raptoreum/commit/d6633b5fb) apply rpcconsole.cpp patch +- [`4a22fb78f`](https://github.com/raptor3um/raptoreum/commit/4a22fb78f) s/raptoreum-util-test.py/bitcoin-util-test.py +- [`e0424c1a0`](https://github.com/raptor3um/raptoreum/commit/e0424c1a0) s/libbitcoin/libraptoreum +- [`316fa1859`](https://github.com/raptor3um/raptoreum/commit/316fa1859) s/bitcoind/raptoreumd +- [`f38ed3c71`](https://github.com/raptor3um/raptoreum/commit/f38ed3c71) #10821 continued +- [`64c195a03`](https://github.com/raptor3um/raptoreum/commit/64c195a03) remove witness/segwit based text +- [`c84636a47`](https://github.com/raptor3um/raptoreum/commit/c84636a47) update commented time estimates for fees +- [`6ce278f56`](https://github.com/raptor3um/raptoreum/commit/6ce278f56) s/149900/140100 +- [`c34ec30b6`](https://github.com/raptor3um/raptoreum/commit/c34ec30b6) s/bitcoin/raptoreum +- [`83af2d8d5`](https://github.com/raptor3um/raptoreum/commit/83af2d8d5) remove redundant wait_node +- [`ae1beffe0`](https://github.com/raptor3um/raptoreum/commit/ae1beffe0) remove boost list_of +- [`d76cd903e`](https://github.com/raptor3um/raptoreum/commit/d76cd903e) Merge #10419: [trivial] Fix three recently introduced typos +- [`b430366dd`](https://github.com/raptor3um/raptoreum/commit/b430366dd) Merge #10199: Better fee estimates +- [`c7dcf79f0`](https://github.com/raptor3um/raptoreum/commit/c7dcf79f0) Merge #10821: Add SSE4 optimized SHA256 +- [`d587fe3f0`](https://github.com/raptor3um/raptoreum/commit/d587fe3f0) Merge #10681: add gdb attach process to test README +- [`b535dfbc4`](https://github.com/raptor3um/raptoreum/commit/b535dfbc4) Merge #10857: [RPC] Add a deprecation warning to getinfo's output +- [`2ada45284`](https://github.com/raptor3um/raptoreum/commit/2ada45284) Merge #10864: Avoid redundant redeclaration of GetWarnings(const string&) +- [`fa2cd234b`](https://github.com/raptor3um/raptoreum/commit/fa2cd234b) \#10193 Introduce src/reverse_iterator.hpp and include it... +- [`96897e51a`](https://github.com/raptor3um/raptoreum/commit/96897e51a) \#10193 Fix const_reverse_iterator constructor (pass const ptr) +- [`d6d462fd7`](https://github.com/raptor3um/raptoreum/commit/d6d462fd7) #10193 scripted-diff: Remove BOOST_REVERSE_FOREACH +- [`c123e10cc`](https://github.com/raptor3um/raptoreum/commit/c123e10cc) #10193 scripted-diff: Remove `#include ` +- [`0fe9f757e`](https://github.com/raptor3um/raptoreum/commit/0fe9f757e) \#10193 clang-format: Delete ForEachMacros +- [`3dddfc6b4`](https://github.com/raptor3um/raptoreum/commit/3dddfc6b4) Merge #9909: tests: Add FindEarliestAtLeast test for edge cases +- [`6320d516b`](https://github.com/raptor3um/raptoreum/commit/6320d516b) Merge #10535: [qa] fundrawtx: Fix shutdown race +- [`e4c41e74a`](https://github.com/raptor3um/raptoreum/commit/e4c41e74a) fix build related to #10760 +- [`ab1120956`](https://github.com/raptor3um/raptoreum/commit/ab1120956) Merge #10844: Use range based for loop +- [`dc97d48bb`](https://github.com/raptor3um/raptoreum/commit/dc97d48bb) Merge #10760: Avoid dereference-of-casted-pointer +- [`cea9e1cf0`](https://github.com/raptor3um/raptoreum/commit/cea9e1cf0) Merge #10855: random: only use getentropy on openbsd +- [`644274fde`](https://github.com/raptor3um/raptoreum/commit/644274fde) Merge #9980: Fix mem access violation merkleblock +- [`083c49e1d`](https://github.com/raptor3um/raptoreum/commit/083c49e1d) Merge #10837: Fix resource leak on error in GetDevURandom +- [`9ad533089`](https://github.com/raptor3um/raptoreum/commit/9ad533089) Merge #10803: Explicitly search for bdb5.3. +- [`ea07a5213`](https://github.com/raptor3um/raptoreum/commit/ea07a5213) Merge #10330: [wallet] fix zapwallettxes interaction with persistent mempool +- [`fc94fac75`](https://github.com/raptor3um/raptoreum/commit/fc94fac75) Merge #10842: Fix incorrect Doxygen tag (@ince → @since). Doxygen parameter name matching. +- [`72fbee959`](https://github.com/raptor3um/raptoreum/commit/72fbee959) Merge #11196: Switch memory_cleanse implementation to BoringSSL's to ensure memory clearing even with -lto +- [`4079942b5`](https://github.com/raptor3um/raptoreum/commit/4079942b5) use old benchmark system +- [`0840ce3a9`](https://github.com/raptor3um/raptoreum/commit/0840ce3a9) Merge #15649: Add ChaCha20Poly1305@Bitcoin AEAD +- [`996b1f078`](https://github.com/raptor3um/raptoreum/commit/996b1f078) include vector in poly1305.cpp +- [`0129a8453`](https://github.com/raptor3um/raptoreum/commit/0129a8453) use old benchmarking system +- [`4493671b8`](https://github.com/raptor3um/raptoreum/commit/4493671b8) Merge #15519: Add Poly1305 implementation +- [`db5f3161f`](https://github.com/raptor3um/raptoreum/commit/db5f3161f) Use old BENCHMARK setup +- [`21ace6629`](https://github.com/raptor3um/raptoreum/commit/21ace6629) Merge #15512: Add ChaCha20 encryption option (XOR) +- [`d9c541e9d`](https://github.com/raptor3um/raptoreum/commit/d9c541e9d) Merge #10704: [tests] nits in dbcrash.py +- [`7e4318dda`](https://github.com/raptor3um/raptoreum/commit/7e4318dda) Merge bitcoin#8329: Consensus: MOVEONLY: Move functions for tx verification (#3030) +- [`a4f046cd0`](https://github.com/raptor3um/raptoreum/commit/a4f046cd0) adjust formatting from review configure.ac +- [`0eae9ed90`](https://github.com/raptor3um/raptoreum/commit/0eae9ed90) remove witness comment/text +- [`2b9216e98`](https://github.com/raptor3um/raptoreum/commit/2b9216e98) /s/BTC/RAPTOREUM +- [`188f4a752`](https://github.com/raptor3um/raptoreum/commit/188f4a752) Merge #10735: Avoid static analyzer warnings regarding uninitialized arguments +- [`c097ab84d`](https://github.com/raptor3um/raptoreum/commit/c097ab84d) Merge #10840: Remove duplicate include +- [`d7057d429`](https://github.com/raptor3um/raptoreum/commit/d7057d429) Merge #10766: Building Environment: Set ARFLAGS to cr +- [`6d856aeb4`](https://github.com/raptor3um/raptoreum/commit/6d856aeb4) Merge #10820: Use cpuid intrinsics instead of asm code +- [`483786a72`](https://github.com/raptor3um/raptoreum/commit/483786a72) Merge #10812: [utils] Allow bitcoin-cli's -rpcconnect option to be used with square brackets +- [`445e8d85c`](https://github.com/raptor3um/raptoreum/commit/445e8d85c) Merge #10807: getbalance example covers at least 6 confirms +- [`38f52f881`](https://github.com/raptor3um/raptoreum/commit/38f52f881) Merge #10816: Properly forbid -salvagewallet and -zapwallettxes for multi wallet. +- [`29760e78b`](https://github.com/raptor3um/raptoreum/commit/29760e78b) Merge #10808: Avoid some new gcc warnings in 15 +- [`b14bd204c`](https://github.com/raptor3um/raptoreum/commit/b14bd204c) Merge #10819: Fix uninitialized atomic variables +- [`17177202a`](https://github.com/raptor3um/raptoreum/commit/17177202a) Merge #10557: Make check to distinguish between orphan txs and old txs more efficient. +- [`a0ff957d1`](https://github.com/raptor3um/raptoreum/commit/a0ff957d1) Merge #10806: build: verify that the assembler can handle crc32 functions +- [`09854d661`](https://github.com/raptor3um/raptoreum/commit/09854d661) Merge #10780: Simplify "!foo || (foo && bar)" as "!foo || bar" +- [`526036ead`](https://github.com/raptor3um/raptoreum/commit/526036ead) Merge #9804: Fixes subscript 0 (&var[0]) where should use (var.data()) instead. +- [`28197ef74`](https://github.com/raptor3um/raptoreum/commit/28197ef74) Merge #10714: Avoid printing incorrect block indexing time due to uninitialized variable +- [`ec01825ba`](https://github.com/raptor3um/raptoreum/commit/ec01825ba) Merge #10786: Add PR description to merge commit in github-merge.py +- [`b195cbb5e`](https://github.com/raptor3um/raptoreum/commit/b195cbb5e) Merge #10651: Verify binaries from bitcoincore.org and bitcoin.org +- [`f1c9b7a89`](https://github.com/raptor3um/raptoreum/commit/f1c9b7a89) Merge #10190: [tests] mining functional tests (including regression test for submitblock) +- [`cf40b5409`](https://github.com/raptor3um/raptoreum/commit/cf40b5409) Merge #10676: document script-based return fields for validateaddress +- [`6e2f77933`](https://github.com/raptor3um/raptoreum/commit/6e2f77933) Merge #10747: [rpc] fix verbose argument for getblock in bitcoin-cli +- [`a60f1e2b5`](https://github.com/raptor3um/raptoreum/commit/a60f1e2b5) Merge #10710: REST/RPC example update +- [`9221e0d3c`](https://github.com/raptor3um/raptoreum/commit/9221e0d3c) Merge #10728: fix typo in help text for removeprunedfunds +- [`184847c2e`](https://github.com/raptor3um/raptoreum/commit/184847c2e) Merge #10673: [qt] Avoid potential null pointer dereference in TransactionView::exportClicked() +- [`0a215695a`](https://github.com/raptor3um/raptoreum/commit/0a215695a) Merge #10685: Clarify CCoinsViewMemPool documentation. +- [`9bcadebf7`](https://github.com/raptor3um/raptoreum/commit/9bcadebf7) Merge #10631: Use the override specifier (C++11) where we expect to be overriding the virtual function of a base class +- [`77088082e`](https://github.com/raptor3um/raptoreum/commit/77088082e) Merge #10684: Remove no longer used mempool.exists(outpoint) +- [`d57cbc615`](https://github.com/raptor3um/raptoreum/commit/d57cbc615) Backport #12783: macOS: disable AppNap during sync (and mixing) (#3024) +- [`2cbf726ab`](https://github.com/raptor3um/raptoreum/commit/2cbf726ab) Backport #8694: Basic multiwallet support (#3022) +- [`8b224e093`](https://github.com/raptor3um/raptoreum/commit/8b224e093) revert the accidental revertion of c1bdf64 +- [`4e46f2511`](https://github.com/raptor3um/raptoreum/commit/4e46f2511) add end commend for all llmq namespace +- [`216cbfdd9`](https://github.com/raptor3um/raptoreum/commit/216cbfdd9) Merge #11792: Trivial: fix comments for ZeroMQ bitcoind args +- [`a38648c91`](https://github.com/raptor3um/raptoreum/commit/a38648c91) Merge #12588: [Utils] Remove deprecated PyZMQ call from Python ZMQ example +- [`b71a187da`](https://github.com/raptor3um/raptoreum/commit/b71a187da) Backport yet another part of 11824 +- [`2f8512b92`](https://github.com/raptor3um/raptoreum/commit/2f8512b92) Merge #11126: Acquire cs_main lock before cs_wallet during wallet initialization +- [`bcef238d0`](https://github.com/raptor3um/raptoreum/commit/bcef238d0) raptoreumify test/functional/README.md +- [`2f5606358`](https://github.com/raptor3um/raptoreum/commit/2f5606358) raptoreumify test/README.md +- [`7e866ed2d`](https://github.com/raptor3um/raptoreum/commit/7e866ed2d) don't use replace-by-fee.py as example +- [`f4736b382`](https://github.com/raptor3um/raptoreum/commit/f4736b382) update seeds emplace_back based on code review +- [`5ac5e66f3`](https://github.com/raptor3um/raptoreum/commit/5ac5e66f3) remove unneeded space wallet.cpp +- [`4c61aedfc`](https://github.com/raptor3um/raptoreum/commit/4c61aedfc) Merge #10659: [qa] blockchain: Pass on closed connection during generate call +- [`e19fc0b9b`](https://github.com/raptor3um/raptoreum/commit/e19fc0b9b) Merge #10118: Util: Remove redundant calls to argsGlobal.IsArgSet() +- [`2708a7be0`](https://github.com/raptor3um/raptoreum/commit/2708a7be0) Merge #10612: The young person's guide to the test_framework +- [`4b2f27070`](https://github.com/raptor3um/raptoreum/commit/4b2f27070) Merge #10496: Add Binds, WhiteBinds, Whitelistedrange to CConnman::Options +- [`f2a477646`](https://github.com/raptor3um/raptoreum/commit/f2a477646) Merge #9544: [trivial] Add end of namespace comments. Improve consistency. +- [`8c998f2f9`](https://github.com/raptor3um/raptoreum/commit/8c998f2f9) fix tests 50 -> 500 +- [`785fa0701`](https://github.com/raptor3um/raptoreum/commit/785fa0701) Merge #10295: [qt] Move some WalletModel functions into CWallet +- [`8677d7599`](https://github.com/raptor3um/raptoreum/commit/8677d7599) Merge #9176: Globals: Pass Consensus::Params through CBlockTreeDB::LoadBlockIndexGuts() +- [`5eca7445a`](https://github.com/raptor3um/raptoreum/commit/5eca7445a) Merge #10412: Improve wallet rescan API +- [`64ef42c79`](https://github.com/raptor3um/raptoreum/commit/64ef42c79) Merge #10446: net: avoid extra dns query per seed +- [`f68c7bc5c`](https://github.com/raptor3um/raptoreum/commit/f68c7bc5c) Merge #10626: doc: Remove outdated minrelaytxfee comment +- [`41b386903`](https://github.com/raptor3um/raptoreum/commit/41b386903) Merge #10400: [RPC] Add an uptime command that displays the amount of time (in seconds) bitcoind has been running +- [`677c78516`](https://github.com/raptor3um/raptoreum/commit/677c78516) Merge #10191: [trivial] Rename unused RPC arguments 'dummy' +- [`f4c0858b4`](https://github.com/raptor3um/raptoreum/commit/f4c0858b4) Merge #10577: Add an explanation of quickly hashing onto a non-power of two range. +- [`3f4d08d36`](https://github.com/raptor3um/raptoreum/commit/3f4d08d36) Merge #10565: [coverage] Remove subtrees and benchmarks from coverage report +- [`5f2c9d730`](https://github.com/raptor3um/raptoreum/commit/5f2c9d730) Merge #10633: doc: Fix various typos +- [`305fd0679`](https://github.com/raptor3um/raptoreum/commit/305fd0679) Merge #10248: Rewrite addrdb with less duplication using CHashVerifier +- [`2116e9301`](https://github.com/raptor3um/raptoreum/commit/2116e9301) Merge #10276: contrib/verifybinaries: allow filtering by platform +- [`31f4a602a`](https://github.com/raptor3um/raptoreum/commit/31f4a602a) Merge #9517: [refactor] Switched httpserver.cpp to use RAII wrapped libevents. +- [`1c4981d71`](https://github.com/raptor3um/raptoreum/commit/1c4981d71) Merge #9343: Don't create change at dust limit +- [`a3abc463f`](https://github.com/raptor3um/raptoreum/commit/a3abc463f) Merge #10530: Fix invalid instantiation and possibly unsafe accesses of array in class base_uint +- [`41302bbae`](https://github.com/raptor3um/raptoreum/commit/41302bbae) Merge #10628: [depends] expat 2.2.1 +- [`6b6ea2461`](https://github.com/raptor3um/raptoreum/commit/6b6ea2461) Merge #10642: Remove obsolete `_MSC_VER` check +- [`43c952d2e`](https://github.com/raptor3um/raptoreum/commit/43c952d2e) Merge #10632: qa: Add stopatheight test +- [`d46aff536`](https://github.com/raptor3um/raptoreum/commit/d46aff536) Merge #10536: Remove unreachable or otherwise redundant code +- [`6489e678c`](https://github.com/raptor3um/raptoreum/commit/6489e678c) Merge #10759: Fix multi_rpc test for hosts that dont default to utf8 +- [`722c373f5`](https://github.com/raptor3um/raptoreum/commit/722c373f5) bitcoin -> raptoreum +- [`eb1b61b36`](https://github.com/raptor3um/raptoreum/commit/eb1b61b36) fix indents +- [`7802c82e3`](https://github.com/raptor3um/raptoreum/commit/7802c82e3) Merge #10533: [tests] Use cookie auth instead of rpcuser and rpcpassword +- [`ed24dbba7`](https://github.com/raptor3um/raptoreum/commit/ed24dbba7) remove Boost_Reverse_foreach +- [`82dcb03e3`](https://github.com/raptor3um/raptoreum/commit/82dcb03e3) REJECT_CONFLICT -> REJECT_DUPLICATE +- [`9d336854f`](https://github.com/raptor3um/raptoreum/commit/9d336854f) Merge #10503: Use REJECT_DUPLICATE for already known and conflicted txn +- [`a8fcc80a1`](https://github.com/raptor3um/raptoreum/commit/a8fcc80a1) Merge #9549: [net] Avoid possibility of NULL pointer dereference in MarkBlockAsInFlight(...) +- [`aa364bf7a`](https://github.com/raptor3um/raptoreum/commit/aa364bf7a) Merge #10555: [tests] various improvements to zmq_test.py +- [`e1a146d95`](https://github.com/raptor3um/raptoreum/commit/e1a146d95) Merge #10592: [trivial] fix indentation for ArgsManager class +- [`5ac6d7c4e`](https://github.com/raptor3um/raptoreum/commit/5ac6d7c4e) Merge #10614: random: fix crash on some 64bit platforms +- [`0647ea656`](https://github.com/raptor3um/raptoreum/commit/0647ea656) Merge #10587: Net: Fix resource leak in ReadBinaryFile(...) +- [`8c4e351c8`](https://github.com/raptor3um/raptoreum/commit/8c4e351c8) Merge #10602: Make clang-format use C++11 features (e.g. `A>` instead of `A >`) +- [`3bae86b62`](https://github.com/raptor3um/raptoreum/commit/3bae86b62) Merge #10582: Pass in smart fee slider value to coin control dialog +- [`c520de239`](https://github.com/raptor3um/raptoreum/commit/c520de239) Merge #9895: Turn TryCreateDirectory() into TryCreateDirectories() +- [`ab02a4335`](https://github.com/raptor3um/raptoreum/commit/ab02a4335) Merge #9738: gettxoutproof() should return consistent result +- [`61ca895c4`](https://github.com/raptor3um/raptoreum/commit/61ca895c4) Merge #10551: [Tests] Wallet encryption functional tests +- [`0cb552a20`](https://github.com/raptor3um/raptoreum/commit/0cb552a20) Merge #10377: Use rdrand as entropy source on supported platforms +- [`e81a28604`](https://github.com/raptor3um/raptoreum/commit/e81a28604) scripted-diff: Remove PAIRTYPE #10502 +- [`0d52db844`](https://github.com/raptor3um/raptoreum/commit/0d52db844) scripted-diff: Remove Q_FOREACH #10502 `-BEGIN VERIFY SCRIPT- sed -i 's/Q_FOREACH *(\(.*\),/for (\1 :/' ./src/*.h ./src/*.cpp ./src/*/*.h ./src/*/*.cpp ./src/*/*/*.h ./src/*/*/*.cpp ; -END VERIFY SCRIPT-` +- [`a15d7405e`](https://github.com/raptor3um/raptoreum/commit/a15d7405e) scripted diff: #10502 Fully remove BOOST_FOREACH `-BEGIN VERIFY SCRIPT- sed -i 's/BOOST_FOREACH *(\(.*\),/for (\1 :/' ./src/*.h ./src/*.cpp ./src/*/*.h ./src/*/*.cpp ./src/*/*/*.h ./src/*/*/*.cpp ; -END VERIFY SCRIPT-` +- [`25008bd38`](https://github.com/raptor3um/raptoreum/commit/25008bd38) Small preparations for Q_FOREACH, PAIRTYPE and `#include ` removal +- [`a0bc91a57`](https://github.com/raptor3um/raptoreum/commit/a0bc91a57) Merge #10480: Improve commit-check-script.sh +- [`946388169`](https://github.com/raptor3um/raptoreum/commit/946388169) Merge #10544: Update to LevelDB 1.20 +- [`10716ea6d`](https://github.com/raptor3um/raptoreum/commit/10716ea6d) Merge #10575: Header include guideline +- [`c1c24205b`](https://github.com/raptor3um/raptoreum/commit/c1c24205b) Merge #10534: Clarify prevector::erase and avoid swap-to-clear +- [`eef9c8ea1`](https://github.com/raptor3um/raptoreum/commit/eef9c8ea1) Merge #10553: Simplify "bool x = y ? true : false". Remove unused function and trailing semicolon. +- [`195d42a28`](https://github.com/raptor3um/raptoreum/commit/195d42a28) Merge #10568: Remove unnecessary forward class declarations in header files +- [`30c5aaead`](https://github.com/raptor3um/raptoreum/commit/30c5aaead) Merge #10578: Add missing include for atomic in db.h +- [`e80ca5361`](https://github.com/raptor3um/raptoreum/commit/e80ca5361) Merge #10549: Avoid printing generic and duplicated "checking for QT" during ./configure +- [`594eb7444`](https://github.com/raptor3um/raptoreum/commit/594eb7444) remove unneeded parenthesises +- [`d93b83732`](https://github.com/raptor3um/raptoreum/commit/d93b83732) Use InsecureRandRange instead of InsecureRandBool +- [`1099c1ad6`](https://github.com/raptor3um/raptoreum/commit/1099c1ad6) Merge #10546: Remove 33 unused Boost includes +- [`80b803250`](https://github.com/raptor3um/raptoreum/commit/80b803250) Merge #10561: Remove duplicate includes +- [`dc5dc4186`](https://github.com/raptor3um/raptoreum/commit/dc5dc4186) Merge #10566: [docs] Use the "domain name setup" image (previously unused) in the gitian docs +- [`6a0f56578`](https://github.com/raptor3um/raptoreum/commit/6a0f56578) Merge #10560: Remove unused constants +- [`2bfa37472`](https://github.com/raptor3um/raptoreum/commit/2bfa37472) Merge #10569: Fix stopatheight +- [`f6400a871`](https://github.com/raptor3um/raptoreum/commit/f6400a871) Merge #10521: Limit variable scope +- [`e9b389d19`](https://github.com/raptor3um/raptoreum/commit/e9b389d19) continued, raptoreum code +- [`b92d2dd66`](https://github.com/raptor3um/raptoreum/commit/b92d2dd66) Merge #10545: Use list initialization (C++11) for maps/vectors instead of boost::assign::map_list_of/list_of +- [`7e7c3ce6c`](https://github.com/raptor3um/raptoreum/commit/7e7c3ce6c) Merge #10548: Use std::unordered_{map,set} (C++11) instead of boost::unordered_{map,set} +- [`b6dc579be`](https://github.com/raptor3um/raptoreum/commit/b6dc579be) Merge #10547: [tests] Use FastRandomContext instead of boost::random::{mt19937,uniform_int_distribution} +- [`20e30fb93`](https://github.com/raptor3um/raptoreum/commit/20e30fb93) Merge #10524: [tests] Remove printf(...) +- [`6318ca636`](https://github.com/raptor3um/raptoreum/commit/6318ca636) insecure_rand() -> InsecureRandBits +- [`57c5cfb0f`](https://github.com/raptor3um/raptoreum/commit/57c5cfb0f) Merge #10321: Use FastRandomContext for all tests +- [`5edec30db`](https://github.com/raptor3um/raptoreum/commit/5edec30db) Merge #10523: Perform member initialization in initialization lists where possible +- [`648848b79`](https://github.com/raptor3um/raptoreum/commit/648848b79) Merge #10331: Share config between util and functional tests +- [`42985c31b`](https://github.com/raptor3um/raptoreum/commit/42985c31b) Merge #10463: Names: BIP9 vs versionbits +- [`37659cd52`](https://github.com/raptor3um/raptoreum/commit/37659cd52) Merge #10431: Prevent shadowing the global dustRelayFee +- [`72a1b6f59`](https://github.com/raptor3um/raptoreum/commit/72a1b6f59) Use sync_with_ping to ensure that we don't start generating blocks too early +- [`3fe858e53`](https://github.com/raptor3um/raptoreum/commit/3fe858e53) wait for node1 in fundrawtransaction(-hd).py tests +- [`6c0b5053b`](https://github.com/raptor3um/raptoreum/commit/6c0b5053b) Fix start_/stop_node-s +- [`493f4336a`](https://github.com/raptor3um/raptoreum/commit/493f4336a) fix tx rate +- [`de33753f0`](https://github.com/raptor3um/raptoreum/commit/de33753f0) Revert "Merge #10376: [tests] fix disconnect_ban intermittency" +- [`b791821c8`](https://github.com/raptor3um/raptoreum/commit/b791821c8) start_node -> self.start_node +- [`3c96b2526`](https://github.com/raptor3um/raptoreum/commit/3c96b2526) stop_node(s) -> self.stop_node(s) in raptoreum specific tests +- [`46dd6a357`](https://github.com/raptor3um/raptoreum/commit/46dd6a357) make mainnetDefaultPort static +- [`a685391c7`](https://github.com/raptor3um/raptoreum/commit/a685391c7) fix AvailableCoins Calls +- [`1bbe050fe`](https://github.com/raptor3um/raptoreum/commit/1bbe050fe) adjust check || -> && +- [`9e2235a4b`](https://github.com/raptor3um/raptoreum/commit/9e2235a4b) add initializing to regtest +- [`4968710a2`](https://github.com/raptor3um/raptoreum/commit/4968710a2) Resolve AvailableCoins method call +- [`9adb72e11`](https://github.com/raptor3um/raptoreum/commit/9adb72e11) remove initialize to 0 in chainparams.h +- [`6ce3e55cb`](https://github.com/raptor3um/raptoreum/commit/6ce3e55cb) add extra params to AvailableCoins calls +- [`6ad8fe0e9`](https://github.com/raptor3um/raptoreum/commit/6ad8fe0e9) adjust CoinType logic +- [`d5d27ad19`](https://github.com/raptor3um/raptoreum/commit/d5d27ad19) s/bitcoind/raptoreumd +- [`39cfd61c0`](https://github.com/raptor3um/raptoreum/commit/39cfd61c0) Merge #9279: Consensus: Move CFeeRate out of libconsensus +- [`535d7d6a8`](https://github.com/raptor3um/raptoreum/commit/535d7d6a8) Merge #10347: Use range-based for loops (C++11) when looping over vector elements +- [`30ad4b8e8`](https://github.com/raptor3um/raptoreum/commit/30ad4b8e8) Merge #8952: Add query options to listunspent RPC call +- [`e7d7ecb6e`](https://github.com/raptor3um/raptoreum/commit/e7d7ecb6e) Set a few param values to 0 by default +- [`e740604f6`](https://github.com/raptor3um/raptoreum/commit/e740604f6) No need for zero initialization of devnet params +- [`50652674b`](https://github.com/raptor3um/raptoreum/commit/50652674b) Merge #8855: Use a proper factory for creating chainparams +- [`175d68ac2`](https://github.com/raptor3um/raptoreum/commit/175d68ac2) Merge #10426: Replace bytes_serialized with bogosize +- [`51525efd6`](https://github.com/raptor3um/raptoreum/commit/51525efd6) Merge #10403: Fix importmulti failure to return rescan errors +- [`35bafa14b`](https://github.com/raptor3um/raptoreum/commit/35bafa14b) Merge #10515: [test] Add test for getchaintxstats +- [`44a55019b`](https://github.com/raptor3um/raptoreum/commit/44a55019b) Merge #10478: rpc: Add listen address to incoming connections in `getpeerinfo` +- [`40cec429b`](https://github.com/raptor3um/raptoreum/commit/40cec429b) Merge #10471: Denote functions CNode::GetRecvVersion() and CNode::GetRefCount() as const +- [`f59e5e67f`](https://github.com/raptor3um/raptoreum/commit/f59e5e67f) Merge #10500: Avoid CWalletTx copies in GetAddressBalances and GetAddressGroupings +- [`e353d271f`](https://github.com/raptor3um/raptoreum/commit/e353d271f) Merge #10359: [tests] functional tests should call BitcoinTestFramework start/stop node methods +- [`70cd81cc8`](https://github.com/raptor3um/raptoreum/commit/70cd81cc8) Merge #10423: [tests] skipped tests should clean up after themselves +- [`c7aa3723c`](https://github.com/raptor3um/raptoreum/commit/c7aa3723c) Merge #10323: Update to latest libsecp256k1 master +- [`b6b486c27`](https://github.com/raptor3um/raptoreum/commit/b6b486c27) Merge #10376: [tests] fix disconnect_ban intermittency +- [`a8c202081`](https://github.com/raptor3um/raptoreum/commit/a8c202081) remove unused import cont. +- [`60475f127`](https://github.com/raptor3um/raptoreum/commit/60475f127) Merge #11831: Always return true if AppInitMain got to the end +- [`a740a0cec`](https://github.com/raptor3um/raptoreum/commit/a740a0cec) remove extra argument from code review +- [`5a760dd90`](https://github.com/raptor3um/raptoreum/commit/5a760dd90) remove duplicate code +- [`dd99dd08c`](https://github.com/raptor3um/raptoreum/commit/dd99dd08c) add gArgs for a couple things not caught by scripted diff +- [`5d5171f47`](https://github.com/raptor3um/raptoreum/commit/5d5171f47) remove unused gArgs wrappers +- [`6bfbe6053`](https://github.com/raptor3um/raptoreum/commit/6bfbe6053) Scripted diff `find src/ -name "*.cpp" ! -wholename "src/util.h" ! -wholename "src/util.cpp" | xargs perl -i -pe 's/(?`fs` and some related cleanup +- [`250195185`](https://github.com/raptor3um/raptoreum/commit/250195185) Adjust CDSNotificationInterface to align with CValidationInterface changes +- [`d180061b8`](https://github.com/raptor3um/raptoreum/commit/d180061b8) Pass block index via BlockDisconnected +- [`282d1554d`](https://github.com/raptor3um/raptoreum/commit/282d1554d) adjust examples/raptoreum.conf +- [`e451325d6`](https://github.com/raptor3um/raptoreum/commit/e451325d6) Merge #10186: Remove SYNC_TRANSACTION_NOT_IN_BLOCK magic number +- [`60438257a`](https://github.com/raptor3um/raptoreum/commit/60438257a) Merge #9725: CValidationInterface Cleanups +- [`f893ac66c`](https://github.com/raptor3um/raptoreum/commit/f893ac66c) Merge #10124: [test] Suppress test logging spam +- [`a54ff70ff`](https://github.com/raptor3um/raptoreum/commit/a54ff70ff) Merge #9902: Lightweight abstraction of boost::filesystem +- [`515343963`](https://github.com/raptor3um/raptoreum/commit/515343963) Merge #10036: Fix init README format to render correctly on github +- [`c8a565d6e`](https://github.com/raptor3um/raptoreum/commit/c8a565d6e) Merge #10090: Update bitcoin.conf with example for pruning +- [`6f558270d`](https://github.com/raptor3um/raptoreum/commit/6f558270d) Merge #10143: [net] Allow disconnectnode RPC to be called with node id +- [`4efa99c2d`](https://github.com/raptor3um/raptoreum/commit/4efa99c2d) Merge #10221: Stop treating coinbase outputs differently in GUI: show them at 1conf +- [`16053cd52`](https://github.com/raptor3um/raptoreum/commit/16053cd52) Merge #10226: wallet: Use boost to more portably ensure -wallet specifies only a filename +- [`7fa60a1c7`](https://github.com/raptor3um/raptoreum/commit/7fa60a1c7) Merge #10219: Tests: Order Python Tests Differently +- [`0b232fd1c`](https://github.com/raptor3um/raptoreum/commit/0b232fd1c) Merge #10208: [wallet] Rescan abortability +- [`55d1251ff`](https://github.com/raptor3um/raptoreum/commit/55d1251ff) Merge #9480: De-duplicate SignatureCacheHasher +- [`29194b1f5`](https://github.com/raptor3um/raptoreum/commit/29194b1f5) Backport Bitcoin#9424, Bitcoin#10123 and Bitcoin#10153 (#2918) +- [`15fa1873d`](https://github.com/raptor3um/raptoreum/commit/15fa1873d) Drop redundant imports and fix related code +- [`6f91144f2`](https://github.com/raptor3um/raptoreum/commit/6f91144f2) Fix p2p-fingerprint.py +- [`92fed9254`](https://github.com/raptor3um/raptoreum/commit/92fed9254) Fix and re-enable pruning.py +- [`bfeb5bca4`](https://github.com/raptor3um/raptoreum/commit/bfeb5bca4) fix txindex.py and add it to extended scripts +- [`c37008a45`](https://github.com/raptor3um/raptoreum/commit/c37008a45) update dip4-coinbasemerkalroots.py and llmq-is-cl-conflicts.py +- [`7fd979cc0`](https://github.com/raptor3um/raptoreum/commit/7fd979cc0) Merge #10114: [tests] sync_with_ping should assert that ping hasn't timed out +- [`4121daba2`](https://github.com/raptor3um/raptoreum/commit/4121daba2) Merge #10098: Make qt wallet test compatible with qt4 +- [`cc06ef551`](https://github.com/raptor3um/raptoreum/commit/cc06ef551) Merge #10109: Remove SingleNodeConnCB +- [`94aa904c0`](https://github.com/raptor3um/raptoreum/commit/94aa904c0) Merge #10107: Remove unused variable. Remove accidental trailing semicolons in Python code +- [`404e244d1`](https://github.com/raptor3um/raptoreum/commit/404e244d1) Merge #10088: Trivial: move several relay options into the relay help group +- [`05cb5a058`](https://github.com/raptor3um/raptoreum/commit/05cb5a058) Merge #10108: ApproximateBestSubset should take inputs by reference, not value +- [`bfd63c179`](https://github.com/raptor3um/raptoreum/commit/bfd63c179) Merge #10076: [qa] combine_logs: Use ordered list for logfiles +- [`e57559a8d`](https://github.com/raptor3um/raptoreum/commit/e57559a8d) Merge #10096: Check that all test scripts in test/functional are being run +- [`c2258978b`](https://github.com/raptor3um/raptoreum/commit/c2258978b) Merge #10057: [init] Deduplicated sigaction() boilerplate +- [`6bb55d547`](https://github.com/raptor3um/raptoreum/commit/6bb55d547) Merge #10056: [zmq] Call va_end() on va_start()ed args. +- [`142b5cba0`](https://github.com/raptor3um/raptoreum/commit/142b5cba0) Merge #10073: Actually run assumevalid.py +- [`14001a3d9`](https://github.com/raptor3um/raptoreum/commit/14001a3d9) Merge #10085: Docs: remove 'noconnect' option +- [`120941793`](https://github.com/raptor3um/raptoreum/commit/120941793) Merge #10083: [QA] Renaming rawTx into rawtx +- [`1781c7a70`](https://github.com/raptor3um/raptoreum/commit/1781c7a70) Merge #10069: [QA] Fix typo in fundrawtransaction test +- [`379312931`](https://github.com/raptor3um/raptoreum/commit/379312931) Merge #9946: Fix build errors if spaces in path or parent directory +- [`ba20c9031`](https://github.com/raptor3um/raptoreum/commit/ba20c9031) Merge #10067: [trivial] Dead code removal +- [`ae05068c5`](https://github.com/raptor3um/raptoreum/commit/ae05068c5) Merge #10053: [test] Allow functional test cases to be skipped +- [`9f07f489d`](https://github.com/raptor3um/raptoreum/commit/9f07f489d) Merge #10047: [tests] Remove unused variables and imports +- [`96a5f5730`](https://github.com/raptor3um/raptoreum/commit/96a5f5730) Merge #9500: [Qt][RPC] Autocomplete commands for 'help' command in debug console +- [`07e0567dc`](https://github.com/raptor3um/raptoreum/commit/07e0567dc) Merge #9558: Clarify assumptions made about when BlockCheck is called +- [`2aa3f890d`](https://github.com/raptor3um/raptoreum/commit/2aa3f890d) Merge #10029: Fix parameter naming inconsistencies between .h and .cpp files +- [`7edb9e15a`](https://github.com/raptor3um/raptoreum/commit/7edb9e15a) Merge #10017: combine_logs.py - aggregates log files from multiple bitcoinds during functional tests. +- [`f2e976a05`](https://github.com/raptor3um/raptoreum/commit/f2e976a05) Merge #10045: [trivial] Fix typos in comments +- [`2c833eff3`](https://github.com/raptor3um/raptoreum/commit/2c833eff3) Merge #10039: Fix compile errors with Qt 5.3.2 and Boost 1.55.0 +- [`a6eee07f2`](https://github.com/raptor3um/raptoreum/commit/a6eee07f2) Merge bitcoin#9963: util: Properly handle errors during log message formatting (#2917) +- [`67c735b15`](https://github.com/raptor3um/raptoreum/commit/67c735b15) s/bitcoin-config.h/raptoreum-config.h/ +- [`2f63322cd`](https://github.com/raptor3um/raptoreum/commit/2f63322cd) raptoreumify "Finding reviewers" section to be more relevant +- [`e7a21faa2`](https://github.com/raptor3um/raptoreum/commit/e7a21faa2) Merge Bitcoin#9960: Trivial: Add const modifier to GetHDChain and IsHDEnabled +- [`eecc72436`](https://github.com/raptor3um/raptoreum/commit/eecc72436) Merge #10564: Return early in IsBanned. +- [`742744f25`](https://github.com/raptor3um/raptoreum/commit/742744f25) Merge #10522: [wallet] Remove unused variables +- [`31bb4622a`](https://github.com/raptor3um/raptoreum/commit/31bb4622a) Merge #10538: [trivial] Fix typo: "occurrences" (misspelled as "occurrances") +- [`f57063155`](https://github.com/raptor3um/raptoreum/commit/f57063155) Merge #10514: Bugfix: missing == 0 after randrange +- [`b708ea819`](https://github.com/raptor3um/raptoreum/commit/b708ea819) Merge #10469: Fixing typo in rpcdump.cpp +- [`55dc3dae5`](https://github.com/raptor3um/raptoreum/commit/55dc3dae5) Merge #10486: devtools: Retry after signing fails in github-merge +- [`0d2f2b361`](https://github.com/raptor3um/raptoreum/commit/0d2f2b361) Merge #10273: [scripts] Minor improvements to `macdeployqtplus` script. +- [`317b797e2`](https://github.com/raptor3um/raptoreum/commit/317b797e2) Merge #9670: contrib: github-merge improvements +- [`a3467dd26`](https://github.com/raptor3um/raptoreum/commit/a3467dd26) Merge #10228: build: regenerate bitcoin-config.h as necessary +- [`a089c9325`](https://github.com/raptor3um/raptoreum/commit/a089c9325) Merge #9827: Improve ScanForWalletTransactions return value +- [`383d1819a`](https://github.com/raptor3um/raptoreum/commit/383d1819a) Merge #10211: [doc] Contributor fixes & new "finding reviewers" section +- [`632956a80`](https://github.com/raptor3um/raptoreum/commit/632956a80) Merge #9693: Prevent integer overflow in ReadVarInt. +- [`0db1328a2`](https://github.com/raptor3um/raptoreum/commit/0db1328a2) Merge #10177: Changed "Send" button default status from true to false +- [`dccd6970b`](https://github.com/raptor3um/raptoreum/commit/dccd6970b) Merge #10164: Wallet: reduce excess logic InMempool() +- [`23530a88a`](https://github.com/raptor3um/raptoreum/commit/23530a88a) Merge #10135: [p2p] Send the correct error code in reject messages +- [`e5ecff6e8`](https://github.com/raptor3um/raptoreum/commit/e5ecff6e8) Merge #9949: [bench] Avoid function call arguments which are pointers to uninitialized values +- [`3dcaf4749`](https://github.com/raptor3um/raptoreum/commit/3dcaf4749) Merge #10166: Ignore Doxyfile generated from Doxyfile.in template. +- [`13cdff498`](https://github.com/raptor3um/raptoreum/commit/13cdff498) Merge #10104: linearize script: Option to use RPC cookie +- [`f471b75ae`](https://github.com/raptor3um/raptoreum/commit/f471b75ae) Merge #9533: Allow non-power-of-2 signature cache sizes +- [`198808894`](https://github.com/raptor3um/raptoreum/commit/198808894) Merge #10058: No need to use OpenSSL malloc/free +- [`22b21f50c`](https://github.com/raptor3um/raptoreum/commit/22b21f50c) Merge #10077: [qa] Add setnetworkactive smoke test +- [`9fa51cc66`](https://github.com/raptor3um/raptoreum/commit/9fa51cc66) Merge #10072: Remove sources of unreliablility in extended functional tests +- [`818ec218d`](https://github.com/raptor3um/raptoreum/commit/818ec218d) Merge #10128: Speed Up CuckooCache tests +- [`07ed44df6`](https://github.com/raptor3um/raptoreum/commit/07ed44df6) Merge #10136: build: Disable Wshadow warning +- [`b5968cd7a`](https://github.com/raptor3um/raptoreum/commit/b5968cd7a) Merge #10129: scheduler: fix sub-second precision with boost < 1.50 +- [`16641e1b1`](https://github.com/raptor3um/raptoreum/commit/16641e1b1) Merge #10095: refactor: Move GetDifficulty out of `rpc/server.h` +- [`6edbc9ceb`](https://github.com/raptor3um/raptoreum/commit/6edbc9ceb) Merge bitcoin#9956: Reorganise qa directory (#2912) +- [`ace96a941`](https://github.com/raptor3um/raptoreum/commit/ace96a941) Drop xvfb and run tests in linux64_nowallet +- [`fc1b3772d`](https://github.com/raptor3um/raptoreum/commit/fc1b3772d) Merge #10899: [test] Qt: Use `_putenv_s` instead of setenv on Windows builds +- [`f8c3f9f7d`](https://github.com/raptor3um/raptoreum/commit/f8c3f9f7d) Merge #10142: Run bitcoin_test-qt under minimal QPA platform +- [`826846f15`](https://github.com/raptor3um/raptoreum/commit/826846f15) Review suggestions +- [`9cef545ac`](https://github.com/raptor3um/raptoreum/commit/9cef545ac) code review +- [`720f13d69`](https://github.com/raptor3um/raptoreum/commit/720f13d69) add a comment linking to xvfb documentation +- [`5f4519804`](https://github.com/raptor3um/raptoreum/commit/5f4519804) Merge #9734: Add updating of chainTxData to release process +- [`1914c2d78`](https://github.com/raptor3um/raptoreum/commit/1914c2d78) Merge #10038: Add mallocinfo mode to `getmemoryinfo` RPC +- [`de0919220`](https://github.com/raptor3um/raptoreum/commit/de0919220) Merge #10027: Set to nullptr after delete +- [`d56322285`](https://github.com/raptor3um/raptoreum/commit/d56322285) Merge #10033: Trivial: Fix typo in key.h comment +- [`22563f369`](https://github.com/raptor3um/raptoreum/commit/22563f369) Merge #10024: [trivial] Use log.info() instead of print() in remaining functional test cases. +- [`dd91bd7b3`](https://github.com/raptor3um/raptoreum/commit/dd91bd7b3) Merge #9911: Wshadow: various gcc fixes +- [`eea802738`](https://github.com/raptor3um/raptoreum/commit/eea802738) Merge #9987: Remove unused code +- [`6376da03f`](https://github.com/raptor3um/raptoreum/commit/6376da03f) Merge #9818: Save watch only key timestamps when reimporting keys +- [`8e0968faf`](https://github.com/raptor3um/raptoreum/commit/8e0968faf) Merge #9690: Change 'Clear' button string to 'Reset' +- [`aee4472ac`](https://github.com/raptor3um/raptoreum/commit/aee4472ac) Merge #9974: Add basic Qt wallet test +- [`ae9ca8459`](https://github.com/raptor3um/raptoreum/commit/ae9ca8459) Merge #10010: util: rename variable to avoid shadowing +- [`594b78fdf`](https://github.com/raptor3um/raptoreum/commit/594b78fdf) Merge #9921: build: Probe MSG_DONTWAIT in the same way as MSG_NOSIGNAL +- [`5ae202da9`](https://github.com/raptor3um/raptoreum/commit/5ae202da9) Merge #9842: Fix RPC failure testing (continuation of #9707) +- [`1cfda206a`](https://github.com/raptor3um/raptoreum/commit/1cfda206a) Merge #9993: Initialize nRelockTime diff --git a/doc/release-notes/dash/release-notes-0.15.0.md b/doc/release-notes/dash/release-notes-0.15.0.md new file mode 100644 index 0000000000..fbb7448ce5 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.15.0.md @@ -0,0 +1,533 @@ +Dash Core version 0.15 +====================== + +Release is now available from: + + + +This is a new major version release, bringing new features, various bugfixes 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/Dash-Qt (on Mac) or +dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading from +version 0.13 should not require any additional actions. + +When upgrading from a version prior to 0.14.0.3, the +first startup of Dash Core will run a migration process which can take a few minutes +to finish. After the migration, a downgrade to an older version is only possible with +a reindex (or reindex-chainstate). + +Downgrade warning +----------------- + +### Downgrade to a version < 0.14.0.3 + +Downgrading to a version smaller than 0.14.0.3 is not supported anymore due to changes +in the "evodb" database format. If you need to use an older version, you have to perform +a reindex or re-sync the whole chain. + +Notable changes +=============== + +Removal of the p2p alert system +------------------------------- +The p2p alert system was designed to send messages to all nodes supporting it by someone who holds +so called alert keys to notify such nodes in case of severe network issues. This version removes +the `alert` p2p message and `--alert` option. Internal alerts, partition detection warnings and the +`--alertnotify` option features remain. + +Removal of the legacy InstantSend system +---------------------------------------- +Version 0.14 introduced the new LLMQ-based InstantSend system which is designed to be much more scalable +than the legacy one without sacrificing security. The new system also allows all transactions to be treated as +InstantSend transactions. The legacy system was disabled together with the successful deployment of ChainLocks, +but we had to keep supporting the legacy system for a while to ensure a smooth transition period. This version finally drops +the legacy system completely. + +Read more about ChainLocks: https://github.com/dashpay/dips/blob/master/dip-0008.md +Read more about LLMQ-based InstantSend: https://github.com/dashpay/dips/blob/master/dip-0010.md + +Sporks +------ +The security level of ChainLocks and LLMQ-based InstantSend made sporks `SPORK_5_INSTANTSEND_MAX_VALUE` and +`SPORK_12_RECONSIDER_BLOCKS` obsolete, so they are removed now. Sporks `SPORK_15_DETERMINISTIC_MNS_ENABLED`, +`SPORK_16_INSTANTSEND_AUTOLOCKS` and `SPORK_20_INSTANTSEND_LLMQ_BASED` have no code logic behind them anymore +because they were used as part of the DIP0003, DIP0008 and DIP0010 activation process which is finished now. +They are still kept and relayed only to ensure smooth operation of v0.14 clients and will be removed in some +future version. + +Mempool sync improvements +------------------------- +Nodes joining the network will now try to sync their mempool from other v0.15+ peers via the `mempool` p2p message. +This behaviour can be disabled via the new `--syncmempool` option. Nodes serving such requests will now also push +`inv` p2p messages for InstandSend locks which are held for transactions in their mempool. These two changes +should help new nodes to quickly catchup on start and detect any potential double-spend as soon as possible. +This should also help wallets to slightly improve UX by showing the correct status of unconfirmed transactions +locked via InstandSend, if they were sent while the receiving wallet was offline. Note that bloom-filters +still apply to such `inv` messages, just like they do for transactions and locks that are relayed on a +regular basis. + +PrivateSend improvements +------------------------ +This version decouples the so called "Lite Mode" and client-side PrivateSend mixing, which allows client-side mixing +on pruned nodes running with `--litemode` option. Such nodes will have to also specify the newly redefined +`--enableprivatesend` option. Non-prunned nodes do not have to do this but they can use `--enableprivatesend` +option to disable mixing completely instead. Please note that specifying this option does not start mixing +automatically anymore (which was the case in previous versions). To automatically start mixing, use the new +`--privatesendautostart` option in addition to `--enableprivatesend`. Additionally, PrivateSend can always be +controlled with the `privatesend` RPC. + +Thanks to LLMQ-based InstantSend and its ability to lock chains of unconfirmed transactions (and not only a single +one like in the legacy system), PrivateSend mixing speed has improved significantly. In such an environment +Liquidity Provider Mode, which was introduced a long time ago to support mixing volume, is no longer needed and +is removed now. As such the `--liquidityprovider` option is not available anymore. + +Some other improvements were also introduced to speed up mixing, e.g. by joining more queues or dropping potential +malicious mixing participants faster by checking some rules earlier etc. Lots of related code was refactored to +further improve its readability, which should make it easier for someone to re-implement PrivateSend +correctly in other wallets if there is a desire to do so. + +Wallet changes +-------------- +Wallet internals were optimized to significantly improve performance which should be especially notable for huge +wallets with tens of thousands of transactions or more. The GUI for such wallets should be much more responsive too now. + +Running Masternodes from local wallets was deprecated a long time ago and starting from this version we disable +wallet functionality on Masternodes completely. + +GUI changes +----------- +The Qt GUI went through a refresh to follow branding color guides and to make it feel lighter. All old themes besides +the Traditional one (the one with a minimal styling) were removed and instead a new Dark theme was added. + +In this version we made a lot of optimizations to remove various lags and lockups, the GUI in general should feel +much more smoother now, especially for huge wallets or when navigating through the masternode list. The latter has +a few new columns (collateral, owner and voting addresses) which give more options to filter and/or sort the list. +All issues with hi-dpi monitors should also be fixed now. + +The "Send" popup dialog was slightly tweaked to improve the language and provide a bit more information about inputs +included in the transaction, its size and the actual resulting fee rate. It will also show the number of inputs +a PrivateSend transaction is going to consume and display a warning regarding sender privacy if this number is 10 +or higher. + +Changes in regtest and devnet p2p/rpc ports +------------------------------------------- +Default p2p and rpc ports for devnets and regtest were changed to ensure their consistency and to avoid +any potential interference with bitcoin's regtests. New default p2p/rpc ports for devnet are 19799/19798, +for regtest - 19899/19898 respectively. + +ZMQ changes +----------- +Added two new messages `rawchainlocksig` and `rawtxlocksig` which return the raw data of the block/transaction +concatenated with the corresponding `clsig`/`islock` message respectively. + +Crash reports and stack traces +------------------------------ +Binaries built with Gitian (including all official releases) will from now on always have crash reports and +crash hooks enabled. This means, that all binaries will print some information about the stack trace at the +time of a crash. If no debug information is present at crash time (which is usually the case), the binaries +will print a line that looks like this: +``` +2020-01-06 14:41:08 Windows Exception: EXCEPTION_ACCESS_VIOLATION +No debug information available for stacktrace. You should add debug information and then run: +dashd.exe -printcrashinfo=bvcgc43iinzgc43ijfxgm3yba.... +``` +If you encounter such a crash, include these lines when you report the crash and we will be able to debug it +further. Anyone interested in running the specified `-printcrashinfo` command can do so after copying the debug info +file from the Gitian build to the same place where the binary is located. This will then print a detailed stack +trace. + +RPC changes +----------- +There are a few changes in existing RPC interfaces in this release: +- no more `instantsend` field in various RPC commands +- `use-IS`, `use_is` and `instantsend` options are deprecated in various RPC commands and have no effect anymore +- added new `merkleRootQuorums` field in `getblock` RPC results +- individual Dash-specific fields which were used to display soft-fork progress in `getblockchaininfo` are replaced + with the backported `statistics` object +- `privatesend_balance` field is shown in all related RPC results regardless of the Lite Mode or PrivateSend state +- added `pubKeyOperator` field for each masternode in `quorum info` RPC response + +There are also new RPC commands: +- `getbestchainlock` +- `getmerkleblocks` +- `getprivatesendinfo` + +`getpoolinfo` was deprecated in favor of `getprivatesendinfo` and no longer returns any data. + +There are also new RPC commands backported from Bitcoin Core 0.15: +- `abortrescan` +- `combinerawtransaction` +- `getblockstats` +- `getchaintxstats` +- `listwallets` +- `logging` +- `uptime` + +Make sure to check Bitcoin Core 0.15 release notes in a [section](#backports-from-bitcoin-core-015) below +for more RPC changes. + +See `help command` in rpc for more info. + +Command-line options +-------------------- +Changes in existing cmd-line options: +- `--enableprivatesend` option has a new meaning now, see [PrivateSend](#privatesend) section for more info + +New cmd-line options: +- `--printcrashinfo` +- `--syncmempool` +- `--privatesendautostart` + +Few cmd-line options are no longer supported: +- `--alerts` +- `--masternode`, deprecated, specifying `--masternodeblsprivkey` option alone is enough to enable masternode mode now +- `--liquidityprovider` +- `--enableinstantsend`, dropped due to removal of the Legacy InstantSend + +Make sure to check Bitcoin Core 0.15 release notes in a [section](#backports-from-bitcoin-core-015) below +for more changes in command-line options. + +See `Help -> Command-line options` in Qt wallet or `dashd --help` for more info. + +Build system +------------ +This version always includes stacktraces in binaries now, `--enable-stacktraces` option is no longer available. +Instead you can choose if you want to hook crash reporting into various types of crashes by using `--enable-crash-hooks` +option (default is `no`). When using this option on macOS make sure to build binaries with `make -C src osx_debug`. + +Backports from Bitcoin Core 0.15 +-------------------------------- + +Most of the changes between Bitcoin Core 0.14 and Bitcoin Core 0.15 have been backported into Dash Core 0.15. +We only excluded backports which do not align with Dash, like SegWit or RBF related changes. + +You can read about changes brought by backporting from Bitcoin Core 0.15 in following docs: +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.15.0.md +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.15.1.md + +Some other individual PRs were backported from versions 0.16+, you can find the full list of backported PRs +and additional fixes in https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15-backports.md + +Miscellaneous +------------- +A lot of refactoring, backports, code cleanups and other small fixes were done in this release. Dash-specific +modules were reorganized in separate folders to make navigation through code a bit easier. + +0.15 Change log +=============== + +See detailed [set of changes](https://github.com/dashpay/dash/compare/v0.14.0.5...dashpay:v0.15.0.0). + +- [`3c055bf79`](https://github.com/dashpay/dash/commit/3c055bf79) Bump nMinimumChainWork and defaultAssumeValid (#3336) +- [`818e7a6f7`](https://github.com/dashpay/dash/commit/818e7a6f7) Update release notes +- [`9d5c3d12e`](https://github.com/dashpay/dash/commit/9d5c3d12e) Try to actually accept newly created dstx-es into masternode's mempool (#3332) +- [`f23e722da`](https://github.com/dashpay/dash/commit/f23e722da) Switch CLIENT_VERSION_IS_RELEASE to `true` for v0.15 (#3306) +- [`b57f1dac8`](https://github.com/dashpay/dash/commit/b57f1dac8) Update release notes +- [`15c6df583`](https://github.com/dashpay/dash/commit/15c6df583) Bring back "about" menu icon (#3329) +- [`2c30818f7`](https://github.com/dashpay/dash/commit/2c30818f7) Add pubKeyOperator to `quorum info` rpc response (#3327) +- [`2bbf78c1b`](https://github.com/dashpay/dash/commit/2bbf78c1b) Update release-notes.md +- [`2c305d02d`](https://github.com/dashpay/dash/commit/2c305d02d) Update translations 2020-02-03 (#3322) +- [`672e18e48`](https://github.com/dashpay/dash/commit/672e18e48) Only sync mempool from v0.15+ (proto 70216+) nodes (#3321) +- [`829bde81e`](https://github.com/dashpay/dash/commit/829bde81e) Fix dark text on dark background in combobox dropdowns on windows (#3315) +- [`c0a671e84`](https://github.com/dashpay/dash/commit/c0a671e84) Fix node protection logic false positives (#3314) +- [`8d5fc6e0a`](https://github.com/dashpay/dash/commit/8d5fc6e0a) Merge #13162: [net] Don't incorrectly log that REJECT messages are unknown. +- [`9e711befd`](https://github.com/dashpay/dash/commit/9e711befd) More of 13946 +- [`e5e3572e9`](https://github.com/dashpay/dash/commit/e5e3572e9) Merge #13946: p2p: Clarify control flow in ProcessMessage +- [`dbbc51121`](https://github.com/dashpay/dash/commit/dbbc51121) Add `automake` package to dash-win-signer's packages list (#3307) +- [`fd0f24335`](https://github.com/dashpay/dash/commit/fd0f24335) [Trivial] Release note update (#3308) +- [`058872d4f`](https://github.com/dashpay/dash/commit/058872d4f) Update release-notes.md +- [`546e69f1a`](https://github.com/dashpay/dash/commit/546e69f1a) Fix CActiveMasternodeManager::GetLocalAddress to prefer IPv4 if multiple local addresses are known (#3304) +- [`e4ef7e8d0`](https://github.com/dashpay/dash/commit/e4ef7e8d0) Drop unused `invSet` in `CDKGSession` (#3303) +- [`da7686c93`](https://github.com/dashpay/dash/commit/da7686c93) Update translations 2020-01-23 (#3302) +- [`6b5d3edae`](https://github.com/dashpay/dash/commit/6b5d3edae) Fix dip4-coinbasemerkleroots.py race condition (#3297) +- [`a8213cadb`](https://github.com/dashpay/dash/commit/a8213cadb) Various fixes for DSTX-es (#3295) +- [`2c26bdf2d`](https://github.com/dashpay/dash/commit/2c26bdf2d) Update release-notes.md +- [`1d9adbe63`](https://github.com/dashpay/dash/commit/1d9adbe63) Replace generic CScopedDBTransaction with specialized CEvoDBScopedCommitter (#3292) +- [`8fd486c6b`](https://github.com/dashpay/dash/commit/8fd486c6b) Translations 2020-01 (#3192) +- [`3c54f6527`](https://github.com/dashpay/dash/commit/3c54f6527) Bump copyright year to 2020 (#3290) +- [`35d28c748`](https://github.com/dashpay/dash/commit/35d28c748) Update man pages (#3291) +- [`203cc9077`](https://github.com/dashpay/dash/commit/203cc9077) trivial: adding SVG and high contrast icons (#3209) +- [`e875d4925`](https://github.com/dashpay/dash/commit/e875d4925) Define defaultTheme and darkThemePrefix as constants and use them instead of plain strings (#3288) +- [`1d203b422`](https://github.com/dashpay/dash/commit/1d203b422) Bump PROTOCOL_VERSION to 70216 (#3287) +- [`b84482ac5`](https://github.com/dashpay/dash/commit/b84482ac5) Let regtest have its own qt settings (#3286) +- [`1c885bbed`](https://github.com/dashpay/dash/commit/1c885bbed) Only load valid themes, fallback to "Light" theme otherwise (#3285) +- [`ce924278d`](https://github.com/dashpay/dash/commit/ce924278d) Don't load caches when blocks/chainstate was deleted and also delete old caches (#3280) +- [`ebf529e8a`](https://github.com/dashpay/dash/commit/ebf529e8a) Drop new connection instead of old one when duplicate MNAUTH is received (#3272) +- [`817cd9a17`](https://github.com/dashpay/dash/commit/817cd9a17) AppInitMain should quit early and return `false` if shutdown was requested at some point (#3267) +- [`42e104932`](https://github.com/dashpay/dash/commit/42e104932) Tweak few more strings re mixing and balances (#3265) +- [`d30eeb6f8`](https://github.com/dashpay/dash/commit/d30eeb6f8) Use -Wno-psabi for arm builds on Travis/Gitlab (#3264) +- [`1df3c67a8`](https://github.com/dashpay/dash/commit/1df3c67a8) A few fixes for integration tests (#3263) +- [`6e50a7b2a`](https://github.com/dashpay/dash/commit/6e50a7b2a) Fix params.size() check in "protx list wallet" RPC (#3259) +- [`1a1cec224`](https://github.com/dashpay/dash/commit/1a1cec224) Fix pull request detection in .gitlab-ci.yml (#3256) +- [`31afa9c0f`](https://github.com/dashpay/dash/commit/31afa9c0f) Don't disconnect masternode connections when we have less then the desired amount of outbound nodes (#3255) +- [`cecbbab3c`](https://github.com/dashpay/dash/commit/cecbbab3c) move privatesend rpc methods from rpc/masternode.cpp to new rpc/privatesend.cpp (#3253) +- [`8e054f374`](https://github.com/dashpay/dash/commit/8e054f374) Sync mempool from other nodes on start (#3251) +- [`474f25b8d`](https://github.com/dashpay/dash/commit/474f25b8d) Push islock invs when syncing mempool (#3250) +- [`3b0f8ff8b`](https://github.com/dashpay/dash/commit/3b0f8ff8b) Skip mnsync restrictions for whitelisted and manually added nodes (#3249) +- [`fd94e9c38`](https://github.com/dashpay/dash/commit/fd94e9c38) Streamline, refactor and unify PS checks for mixing entries and final txes (#3246) +- [`c42b20097`](https://github.com/dashpay/dash/commit/c42b20097) Try to avoid being marked as a bad quorum member when we sleep for too long in SleepBeforePhase (#3245) +- [`db6ea1de8`](https://github.com/dashpay/dash/commit/db6ea1de8) Fix log output in CDKGPendingMessages::PushPendingMessage (#3244) +- [`416d85b29`](https://github.com/dashpay/dash/commit/416d85b29) Tolerate parent cache with empty cache-artifact directory (#3240) +- [`0c9c27c6f`](https://github.com/dashpay/dash/commit/0c9c27c6f) Add ccache to gitian packages lists (#3237) +- [`65206833e`](https://github.com/dashpay/dash/commit/65206833e) Fix menu bar text color in Dark theme (#3236) +- [`7331d4edd`](https://github.com/dashpay/dash/commit/7331d4edd) Bump wait_for_chainlocked_block_all_nodes timeout in llmq-is-retroactive.py to 30 sec when mining lots of blocks at once (#3238) +- [`dad102669`](https://github.com/dashpay/dash/commit/dad102669) Update static and dns seeds for mainnet and testnet (#3234) +- [`9378c271b`](https://github.com/dashpay/dash/commit/9378c271b) Modify makesseeds.py to work with "protx list valid 1" instead of "masternode list (#3235) +- [`91a996e32`](https://github.com/dashpay/dash/commit/91a996e32) Make sure mempool txes are properly processed by CChainLocksHandler despite node restarts (#3226) +- [`2b587f0eb`](https://github.com/dashpay/dash/commit/2b587f0eb) Slightly refactor CDKGSessionHandler::SleepBeforePhase (#3224) +- [`fdb05860e`](https://github.com/dashpay/dash/commit/fdb05860e) Don't join thread in CQuorum::~CQuorum when called from within the thread (#3223) +- [`4c00d98ea`](https://github.com/dashpay/dash/commit/4c00d98ea) Allow re-signing of IS locks when performing retroactive signing (#3219) +- [`b4b9d3467`](https://github.com/dashpay/dash/commit/b4b9d3467) Tests: Fix the way nodes are connected to each other in setup_network/start_masternodes (#3221) +- [`dfe99c950`](https://github.com/dashpay/dash/commit/dfe99c950) Decouple cs_mnauth/cs_main (#3220) +- [`08f447af9`](https://github.com/dashpay/dash/commit/08f447af9) Tests: Allow specifying different cmd-line params for each masternode (#3222) +- [`9dad60386`](https://github.com/dashpay/dash/commit/9dad60386) Tweak "Send" popup and refactor related code a bit (#3218) +- [`bb7a32d2e`](https://github.com/dashpay/dash/commit/bb7a32d2e) Add Dark theme (#3216) +- [`05ac4dbb4`](https://github.com/dashpay/dash/commit/05ac4dbb4) Dashify few strings (#3214) +- [`482a549a2`](https://github.com/dashpay/dash/commit/482a549a2) Add collateral, owner and voting addresses to masternode list table (#3207) +- [`37f96f5a3`](https://github.com/dashpay/dash/commit/37f96f5a3) Bump version to 0.15 and update few const-s/chainparams (#3204) +- [`9de994988`](https://github.com/dashpay/dash/commit/9de994988) Compliance changes to terminology (#3211) +- [`d475f17bc`](https://github.com/dashpay/dash/commit/d475f17bc) Fix styles for progress dialogs, shutdown window and text selection (#3212) +- [`df372ec5f`](https://github.com/dashpay/dash/commit/df372ec5f) Fix off-by-one error for coinbase txes confirmation icons (#3206) +- [`1e94e3333`](https://github.com/dashpay/dash/commit/1e94e3333) Fix styling for disabled buttons (#3205) +- [`7677b5578`](https://github.com/dashpay/dash/commit/7677b5578) Actually apply CSS styling to RPC console (#3201) +- [`63cc22d5e`](https://github.com/dashpay/dash/commit/63cc22d5e) More Qt tweaks (#3200) +- [`7aa9c43f8`](https://github.com/dashpay/dash/commit/7aa9c43f8) Few Qt tweaks (#3199) +- [`fd50c1c71`](https://github.com/dashpay/dash/commit/fd50c1c71) Hold cs_main/cs_wallet in main MakeCollateralAmounts (#3197) +- [`460e0f475`](https://github.com/dashpay/dash/commit/460e0f475) Fix locking of funds for mixing (#3194) +- [`415b81e41`](https://github.com/dashpay/dash/commit/415b81e41) Refactor some pow functions (#3198) +- [`b2fed3862`](https://github.com/dashpay/dash/commit/b2fed3862) A few trivial fixes for RPCs (#3196) +- [`f8296364a`](https://github.com/dashpay/dash/commit/f8296364a) Two trivial fixes for logs (#3195) +- [`d5cc88f00`](https://github.com/dashpay/dash/commit/d5cc88f00) Should mark tx as a PS one regardless of change calculations in CreateTransaction (#3193) +- [`e9235b9bb`](https://github.com/dashpay/dash/commit/e9235b9bb) trivial: Rename txid paramater for gobject voteraw (#3191) +- [`70b320bab`](https://github.com/dashpay/dash/commit/70b320bab) Detect masternode mode from masternodeblsprivkey arg (#3188) +- [`1091ab3c6`](https://github.com/dashpay/dash/commit/1091ab3c6) Translations201909 (#3107) +- [`251fb5e69`](https://github.com/dashpay/dash/commit/251fb5e69) Slightly optimize ApproximateBestSubset and its usage for PS txes (#3184) +- [`a55624b25`](https://github.com/dashpay/dash/commit/a55624b25) Fix 3182: Append scrollbar styles (#3186) +- [`1bbe1adb4`](https://github.com/dashpay/dash/commit/1bbe1adb4) Add a simple test for payoutAddress reuse in `protx update_registrar` (#3183) +- [`372389d23`](https://github.com/dashpay/dash/commit/372389d23) Disable styling for scrollbars on macos (#3182) +- [`e0781095f`](https://github.com/dashpay/dash/commit/e0781095f) A couple of fixes for additional indexes (#3181) +- [`d3ce0964b`](https://github.com/dashpay/dash/commit/d3ce0964b) Add Qt GUI refresh w/branding updates (#3000) +- [`9bc699ff2`](https://github.com/dashpay/dash/commit/9bc699ff2) Update activemn if protx info changed (#3176) +- [`bbd9b10d4`](https://github.com/dashpay/dash/commit/bbd9b10d4) Refactor nonLockedTxsByInputs (#3178) +- [`64a913d6f`](https://github.com/dashpay/dash/commit/64a913d6f) Allow empty strings in `protx update_registrar` as an option to re-use current values (#3177) +- [`3c21d2577`](https://github.com/dashpay/dash/commit/3c21d2577) Slightly adjust some README.md files (#3175) +- [`883fcbe8b`](https://github.com/dashpay/dash/commit/883fcbe8b) Always run extended tests in Gitlab CI (#3173) +- [`a7492c1d3`](https://github.com/dashpay/dash/commit/a7492c1d3) Handle coin type via CCoinControl (#3172) +- [`0d1a04905`](https://github.com/dashpay/dash/commit/0d1a04905) Don't show individual messages for each TX when too many come in at once (#3170) +- [`589c89250`](https://github.com/dashpay/dash/commit/589c89250) Fix 2 more bottlenecks causing GUI lockups (#3169) +- [`dfd6ee472`](https://github.com/dashpay/dash/commit/dfd6ee472) Actually update spent index on DisconnectBlock (#3167) +- [`3c818e95b`](https://github.com/dashpay/dash/commit/3c818e95b) Only track last seen time instead of first and last seen time (#3165) +- [`df3dbe85b`](https://github.com/dashpay/dash/commit/df3dbe85b) Wait for sporks to propagate in llmq-chainlocks.py before mining new blocks (#3168) +- [`8cbd63d9e`](https://github.com/dashpay/dash/commit/8cbd63d9e) Make HD wallet warning a bit more natural (#3164) +- [`001c4338b`](https://github.com/dashpay/dash/commit/001c4338b) Improved messaging for ip address errors (#3163) +- [`33d04ebf2`](https://github.com/dashpay/dash/commit/33d04ebf2) Disable move ctor/operator for CKeyHolder (#3162) +- [`da2f503a4`](https://github.com/dashpay/dash/commit/da2f503a4) Fix largest part of GUI lockups with large wallets (#3155) +- [`3c6b5f98e`](https://github.com/dashpay/dash/commit/3c6b5f98e) Use wallet UTXOs whenever possible to avoid looping through all wallet txes (#3156) +- [`4db91c605`](https://github.com/dashpay/dash/commit/4db91c605) Fix Gitlab cache issues (#3160) +- [`e9ed35482`](https://github.com/dashpay/dash/commit/e9ed35482) Partially revert 3061 (#3150) +- [`4b6af8f2c`](https://github.com/dashpay/dash/commit/4b6af8f2c) Few fixes related to SelectCoinsGroupedByAddresses (#3144) +- [`859d60f81`](https://github.com/dashpay/dash/commit/859d60f81) Don't use $CACHE_DIR in after_script (#3159) +- [`be127bc2e`](https://github.com/dashpay/dash/commit/be127bc2e) Replace vecAskFor with a priority queue (#3147) +- [`a13a9182d`](https://github.com/dashpay/dash/commit/a13a9182d) Add missing "notfound" and "getsporks" to messagemap (#3146) +- [`efd8d2c82`](https://github.com/dashpay/dash/commit/efd8d2c82) Avoid propagating InstantSend related old recovered sigs (#3145) +- [`24fee3051`](https://github.com/dashpay/dash/commit/24fee3051) Add support for Gitlab CI (#3149) +- [`1cbe280ad`](https://github.com/dashpay/dash/commit/1cbe280ad) Qt: Remove old themes (#3141) +- [`dcdf1f3a6`](https://github.com/dashpay/dash/commit/dcdf1f3a6) Some refactoring for spork related functionality in tests (#3137) +- [`411241471`](https://github.com/dashpay/dash/commit/411241471) Introduce getprivatesendinfo and deprecate getpoolinfo (#3140) +- [`152c10bc4`](https://github.com/dashpay/dash/commit/152c10bc4) Various fixes for mixing queues (#3138) +- [`e0c56246f`](https://github.com/dashpay/dash/commit/e0c56246f) Fixes and refactorings related to using mnsync in tests (#3136) +- [`f8e238c5b`](https://github.com/dashpay/dash/commit/f8e238c5b) [Trivial] RPC help updates (#3134) +- [`d49ee618f`](https://github.com/dashpay/dash/commit/d49ee618f) Add more logging to DashTestFramework (#3130) +- [`cd6c5b4b4`](https://github.com/dashpay/dash/commit/cd6c5b4b4) Multiple fixes for ChainLock tests (#3129) +- [`e06c116d2`](https://github.com/dashpay/dash/commit/e06c116d2) Actually pass extra_args to nodes in assumevalid.py (#3131) +- [`737ac967f`](https://github.com/dashpay/dash/commit/737ac967f) Refactor some Dash-specific `wait_for*` functions in tests (#3122) +- [`b4aefb513`](https://github.com/dashpay/dash/commit/b4aefb513) Also consider txindex for transactions in AlreadyHave() (#3126) +- [`d9e98e31e`](https://github.com/dashpay/dash/commit/d9e98e31e) Fix scripted diff check condition (#3128) +- [`bad3243b8`](https://github.com/dashpay/dash/commit/bad3243b8) Bump mocktime before generating new blocks and generate a few blocks at the end of `test_mempool_doublespend` in `p2p-instantsend.py` (#3125) +- [`82ebba18f`](https://github.com/dashpay/dash/commit/82ebba18f) Few fixes for `wait_for_instantlock` (#3123) +- [`a2fa9bb7e`](https://github.com/dashpay/dash/commit/a2fa9bb7e) Ignore recent rejects filter for locked txes (#3124) +- [`2ca2138fc`](https://github.com/dashpay/dash/commit/2ca2138fc) Whitelist nodes in llmq-dkgerrors.py (#3112) +- [`a8fa5cff9`](https://github.com/dashpay/dash/commit/a8fa5cff9) Make orphan TX map limiting dependent on total TX size instead of TX count (#3121) +- [`746b5f8cd`](https://github.com/dashpay/dash/commit/746b5f8cd) Remove commented out code (#3117) +- [`3ac583cce`](https://github.com/dashpay/dash/commit/3ac583cce) docs: Add packages for building in Alpine Linux (#3115) +- [`c5da93851`](https://github.com/dashpay/dash/commit/c5da93851) A couple of minor improvements in IS code (#3114) +- [`43b7c31d9`](https://github.com/dashpay/dash/commit/43b7c31d9) Wait for the actual best block chainlock in llmq-chainlocks.py (#3109) +- [`22ac6ba4e`](https://github.com/dashpay/dash/commit/22ac6ba4e) Make sure chainlocks and blocks are propagated in llmq-is-cl-conflicts.py before moving to next steps (#3108) +- [`9f1ee8c70`](https://github.com/dashpay/dash/commit/9f1ee8c70) scripted-diff: Refactor llmq type consensus param names (#3093) +- [`1c74b668b`](https://github.com/dashpay/dash/commit/1c74b668b) Introduce getbestchainlock rpc and fix llmq-is-cl-conflicts.py (#3094) +- [`ac0270871`](https://github.com/dashpay/dash/commit/ac0270871) Respect `logips` config option in few more log outputs (#3078) +- [`d26b6a84c`](https://github.com/dashpay/dash/commit/d26b6a84c) Fix a couple of issues with PS fee calculations (#3077) +- [`40399fd97`](https://github.com/dashpay/dash/commit/40399fd97) Circumvent BIP69 sorting in fundrawtransaction.py test (#3100) +- [`e2d651f60`](https://github.com/dashpay/dash/commit/e2d651f60) Add OpenSSL termios fix for musl libc (#3099) +- [`783653f6a`](https://github.com/dashpay/dash/commit/783653f6a) Ensure execinfo.h and linker flags set in autoconf (#3098) +- [`7320c3da2`](https://github.com/dashpay/dash/commit/7320c3da2) Refresh zmq 4.1.5 patches (#3092) +- [`822e617be`](https://github.com/dashpay/dash/commit/822e617be) Fix chia_bls include prefix (#3091) +- [`35f079cbf`](https://github.com/dashpay/dash/commit/35f079cbf) Remove unused code (#3097) +- [`1acde17e8`](https://github.com/dashpay/dash/commit/1acde17e8) Don't care about governance cache while the blockchain isn't synced yet (#3089) +- [`0d126c2ae`](https://github.com/dashpay/dash/commit/0d126c2ae) Use chainparams factory for devnet (#3087) +- [`ac90abe89`](https://github.com/dashpay/dash/commit/ac90abe89) When mixing, always try to join an exsisting queue, only fall back to starting a new queue (#3085) +- [`68d575dc0`](https://github.com/dashpay/dash/commit/68d575dc0) Masternodes should have no wallet enabled (#3084) +- [`6b5b70fab`](https://github.com/dashpay/dash/commit/6b5b70fab) Remove liquidity provider privatesend (#3082) +- [`0b2221ed6`](https://github.com/dashpay/dash/commit/0b2221ed6) Clarify default max peer connections (#3081) +- [`c22169d57`](https://github.com/dashpay/dash/commit/c22169d57) Reduce non-debug PS log output (#3076) +- [`41ae1c7e2`](https://github.com/dashpay/dash/commit/41ae1c7e2) Add LDFLAGS_WRAP_EXCEPTIONS to dash_fuzzy linking (#3075) +- [`77b88558e`](https://github.com/dashpay/dash/commit/77b88558e) Update/modernize macOS plist (#3074) +- [`f1ff14818`](https://github.com/dashpay/dash/commit/f1ff14818) Fix bip69 vs change position issue (#3063) +- [`9abc39383`](https://github.com/dashpay/dash/commit/9abc39383) Refactor few things here and there (#3066) +- [`3d5eabcfb`](https://github.com/dashpay/dash/commit/3d5eabcfb) Update/unify `debug` and `logging` rpc descriptions (#3071) +- [`0e94e97cc`](https://github.com/dashpay/dash/commit/0e94e97cc) Add missing tx `type` to `TxToUniv` (#3069) +- [`becca24fc`](https://github.com/dashpay/dash/commit/becca24fc) Few fixes in docs/comments (#3068) +- [`9d109d6a3`](https://github.com/dashpay/dash/commit/9d109d6a3) Add missing `instantlock`/`instantlock_internal` to `getblock`'s `verbosity=2` mode (#3067) +- [`0f088d03a`](https://github.com/dashpay/dash/commit/0f088d03a) Change regtest and devnet p2p/rpc ports (#3064) +- [`190542256`](https://github.com/dashpay/dash/commit/190542256) Rework govobject/trigger cleanup a bit (#3070) +- [`386de78bc`](https://github.com/dashpay/dash/commit/386de78bc) Fix SelectCoinsMinConf to allow instant respends (#3061) +- [`cbbeec689`](https://github.com/dashpay/dash/commit/cbbeec689) RPC Getrawtransaction fix (#3065) +- [`1e3496799`](https://github.com/dashpay/dash/commit/1e3496799) Added getmemoryinfo parameter string update (#3062) +- [`9d2d8cced`](https://github.com/dashpay/dash/commit/9d2d8cced) Add a few malleability tests for DIP2/3 transactions (#3060) +- [`4983f7abb`](https://github.com/dashpay/dash/commit/4983f7abb) RPC Fix typo in getmerkleblocks help (#3056) +- [`a78dcfdec`](https://github.com/dashpay/dash/commit/a78dcfdec) Add the public GPG key for Pasta for Gitian building (#3057) +- [`929c892c0`](https://github.com/dashpay/dash/commit/929c892c0) Remove p2p alert leftovers (#3050) +- [`dd7873857`](https://github.com/dashpay/dash/commit/dd7873857) Re-verify invalid IS sigs when the active quorum set rotated (#3052) +- [`13e023510`](https://github.com/dashpay/dash/commit/13e023510) Remove recovered sigs from the LLMQ db when corresponding IS locks get confirmed (#3048) +- [`4a7525da3`](https://github.com/dashpay/dash/commit/4a7525da3) Add "instantsendlocks" to getmempoolinfo RPC (#3047) +- [`fbb49f92d`](https://github.com/dashpay/dash/commit/fbb49f92d) Bail out properly on Evo DB consistency check failures in ConnectBlock/DisconnectBlock (#3044) +- [`8d89350b8`](https://github.com/dashpay/dash/commit/8d89350b8) Use less alarming fee warning note (#3038) +- [`02f6188e8`](https://github.com/dashpay/dash/commit/02f6188e8) Do not count 0-fee txes for fee estimation (#3037) +- [`f0c73f5ce`](https://github.com/dashpay/dash/commit/f0c73f5ce) Revert "Skip mempool.dat when wallet is starting in "zap" mode (#2782)" +- [`be3bc48c9`](https://github.com/dashpay/dash/commit/be3bc48c9) Fix broken link in PrivateSend info dialog (#3031) +- [`acab8c552`](https://github.com/dashpay/dash/commit/acab8c552) Add Dash Core Group codesign certificate (#3027) +- [`a1c4321e9`](https://github.com/dashpay/dash/commit/a1c4321e9) Fix osslsigncode compile issue in gitian-build (#3026) +- [`2f21e5551`](https://github.com/dashpay/dash/commit/2f21e5551) Remove legacy InstantSend code (#3020) +- [`7a440d626`](https://github.com/dashpay/dash/commit/7a440d626) Optimize on-disk deterministic masternode storage to reduce size of evodb (#3017) +- [`85fcf32c9`](https://github.com/dashpay/dash/commit/85fcf32c9) Remove support for InstantSend locked gobject collaterals (#3019) +- [`bdec34c94`](https://github.com/dashpay/dash/commit/bdec34c94) remove DS mixes once they have been included in a chainlocked block (#3015) +- [`ee9adb948`](https://github.com/dashpay/dash/commit/ee9adb948) Use std::unique_ptr for mnList in CSimplifiedMNList (#3014) +- [`b401a3baa`](https://github.com/dashpay/dash/commit/b401a3baa) Fix compilation on Ubuntu 16.04 (#3013) +- [`c6eededca`](https://github.com/dashpay/dash/commit/c6eededca) Add "isValidMember" and "memberIndex" to "quorum memberof" and allow to specify quorum scan count (#3009) +- [`b9aadc071`](https://github.com/dashpay/dash/commit/b9aadc071) Fix excessive memory use when flushing chainstate and EvoDB (#3008) +- [`780bffeb7`](https://github.com/dashpay/dash/commit/780bffeb7) Enable stacktrace support in gitian builds (#3006) +- [`5809c5c3d`](https://github.com/dashpay/dash/commit/5809c5c3d) Implement "quorum memberof" (#3004) +- [`63424fb26`](https://github.com/dashpay/dash/commit/63424fb26) Fix 2 common Travis failures which happen when Travis has network issues (#3003) +- [`09b017fc5`](https://github.com/dashpay/dash/commit/09b017fc5) Only load signingActiveQuorumCount + 1 quorums into cache (#3002) +- [`b75e1cebd`](https://github.com/dashpay/dash/commit/b75e1cebd) Decouple lite mode and client-side PrivateSend (#2893) +- [`b9a738528`](https://github.com/dashpay/dash/commit/b9a738528) Remove skipped denom from the list on tx commit (#2997) +- [`5bdb2c0ce`](https://github.com/dashpay/dash/commit/5bdb2c0ce) Revert "Show BIP9 progress in getblockchaininfo (#2435)" +- [`b62db7618`](https://github.com/dashpay/dash/commit/b62db7618) Revert " Add real timestamp to log output when mock time is enabled (#2604)" +- [`1f6e0435b`](https://github.com/dashpay/dash/commit/1f6e0435b) [Trivial] Fix a typo in a comment in mnauth.h (#2988) +- [`f84d5d46d`](https://github.com/dashpay/dash/commit/f84d5d46d) QT: Revert "Force TLS1.0+ for SSL connections" (#2985) +- [`2e13d1305`](https://github.com/dashpay/dash/commit/2e13d1305) Add some comments to make quorum merkle root calculation more clear+ (#2984) +- [`6677a614a`](https://github.com/dashpay/dash/commit/6677a614a) Run extended tests when Travis is started through cron (#2983) +- [`d63202bdc`](https://github.com/dashpay/dash/commit/d63202bdc) Should send "reject" when mixing queue is full (#2981) +- [`8d5781f40`](https://github.com/dashpay/dash/commit/8d5781f40) Stop reporting/processing the number of mixing participants in DSSTATUSUPDATE (#2980) +- [`7334aa553`](https://github.com/dashpay/dash/commit/7334aa553) adjust privatesend formatting and follow some best practices (#2979) +- [`f14179ca0`](https://github.com/dashpay/dash/commit/f14179ca0) [Tests] Remove unused variable and inline another variable in evo_deterministicmns_tests.cpp (#2978) +- [`2756cb795`](https://github.com/dashpay/dash/commit/2756cb795) remove spork 12 (#2754) +- [`633231092`](https://github.com/dashpay/dash/commit/633231092) Provide correct params to AcceptToMemoryPoolWithTime() in LoadMempool() (#2976) +- [`e03538778`](https://github.com/dashpay/dash/commit/e03538778) Back off for 1m when connecting to quorum masternodes (#2975) +- [`bfcfb70d8`](https://github.com/dashpay/dash/commit/bfcfb70d8) Ignore blocks that do not match the filter in getmerkleblocks rpc (#2973) +- [`4739daddc`](https://github.com/dashpay/dash/commit/4739daddc) Process/keep messages/connections from PoSe-banned MNs (#2967) +- [`864856688`](https://github.com/dashpay/dash/commit/864856688) Multiple speed optimizations for deterministic MN list handling (#2972) +- [`d931cb723`](https://github.com/dashpay/dash/commit/d931cb723) Update copyright date (2019) (#2970) +- [`a83b63186`](https://github.com/dashpay/dash/commit/a83b63186) Fix UI masternode list (#2966) +- [`85c9ea400`](https://github.com/dashpay/dash/commit/85c9ea400) Throw a bit more descriptive error message on UpgradeDB failure on pruned nodes (#2962) +- [`2c5e2bc6c`](https://github.com/dashpay/dash/commit/2c5e2bc6c) Inject custom specialization of std::hash for SporkId enum into std (#2960) +- [`809aae73a`](https://github.com/dashpay/dash/commit/809aae73a) RPC docs helper updates (#2949) +- [`09d66c776`](https://github.com/dashpay/dash/commit/09d66c776) Fix compiler warning (#2956) +- [`26bd0d278`](https://github.com/dashpay/dash/commit/26bd0d278) Fix bls and bls_dkg bench (#2955) +- [`d28d318aa`](https://github.com/dashpay/dash/commit/d28d318aa) Remove logic for handling objects and votes orphaned by not-yet-known MNs (#2954) +- [`e02c562aa`](https://github.com/dashpay/dash/commit/e02c562aa) [RPC] Remove check for deprecated `masternode start-many` command (#2950) +- [`fc73b4d6e`](https://github.com/dashpay/dash/commit/fc73b4d6e) Refactor sporks to get rid of repeated if/else blocks (#2946) +- [`a149ca747`](https://github.com/dashpay/dash/commit/a149ca747) Remove references to instantx and darksend in sendcoinsdialog.cpp (#2936) +- [`b74cd3e10`](https://github.com/dashpay/dash/commit/b74cd3e10) Only require valid collaterals for votes and triggers (#2947) +- [`66b336c93`](https://github.com/dashpay/dash/commit/66b336c93) Use Travis stages instead of custom timeouts (#2948) +- [`5780fa670`](https://github.com/dashpay/dash/commit/5780fa670) Remove duplicate code from src/Makefile.am (#2944) +- [`428f30450`](https://github.com/dashpay/dash/commit/428f30450) Implement `rawchainlocksig` and `rawtxlocksig` (#2930) +- [`c08e76101`](https://github.com/dashpay/dash/commit/c08e76101) Tighten rules for DSVIN/DSTX (#2897) +- [`f1fe24b67`](https://github.com/dashpay/dash/commit/f1fe24b67) Only gracefully timeout Travis when integration tests need to be run (#2933) +- [`7c05aa821`](https://github.com/dashpay/dash/commit/7c05aa821) Also gracefully timeout Travis builds when building source takes >30min (#2932) +- [`5652ea023`](https://github.com/dashpay/dash/commit/5652ea023) Show number of InstantSend locks in Debug Console (#2919) +- [`a3f030609`](https://github.com/dashpay/dash/commit/a3f030609) Implement getmerkleblocks rpc (#2894) +- [`32aa229c7`](https://github.com/dashpay/dash/commit/32aa229c7) Reorganize Dash Specific code into folders (#2753) +- [`acbf0a221`](https://github.com/dashpay/dash/commit/acbf0a221) Bump version to 0.14.1 (#2928) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- Alexander Block (codablock) +- Amir Abrams (AmirAbrams) +- -k (charlesrocket) +- Cofresi +- Nathan Marley (nmarley) +- PastaPastaPasta +- Riku (rikublock) +- strophy +- taw00 +- thephez +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Dash was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of masternodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Dash. + +Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.14.0.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md) released December/08/2019 +- [v0.14.0.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md) released November/22/2019 +- [v0.14.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/dash/release-notes-0.16-backports.md b/doc/release-notes/dash/release-notes-0.16-backports.md new file mode 100644 index 0000000000..242f945c1d --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.16-backports.md @@ -0,0 +1,489 @@ +### 0.16 backports and related fixes: +- [`0662f170f0`](https://github.com/dashpay/dash/commit/0662f170f0) Merge #12836: Make WalletInitInterface and DummyWalletInit private, fix nullptr deref (#3498) +- [`0b3c3e8406`](https://github.com/dashpay/dash/commit/0b3c3e8406) Merge bitcoin#11415: [RPC] Disallow using addresses in createmultisig (#3482) +- [`505542663d`](https://github.com/dashpay/dash/commit/505542663d) Merge #12384: [Docs] Add version footnote to tor.md (#3473) +- [`124824da41`](https://github.com/dashpay/dash/commit/124824da41) Backport bitcoin#14123 and bitcoin#16720 (#3463) +- [`ed7d8c883c`](https://github.com/dashpay/dash/commit/ed7d8c883c) Fix autobackup +- [`cd42171a4f`](https://github.com/dashpay/dash/commit/cd42171a4f) bitcoind -> dashd +- [`b1c26d4aae`](https://github.com/dashpay/dash/commit/b1c26d4aae) qt: Disconnect CClientUIInterface from SplashScreen::ConnectWallet +- [`b0c1406bee`](https://github.com/dashpay/dash/commit/b0c1406bee) End Merge #11851: Add m_ prefix to WalletBatch::m_batch +- [`1cf961182f`](https://github.com/dashpay/dash/commit/1cf961182f) Update walletdb comment after renaming. +- [`b1c8875579`](https://github.com/dashpay/dash/commit/b1c8875579) scripted-diff: Rename wallet database classes (begin bitcoin#11851) +- [`8ebbdfe805`](https://github.com/dashpay/dash/commit/8ebbdfe805) Merge #10740: [wallet] `loadwallet` RPC - load wallet at runtime +- [`3d73de3381`](https://github.com/dashpay/dash/commit/3d73de3381) Merge #13028: Make vpwallets usage thread safe +- [`b0dc2ab3c1`](https://github.com/dashpay/dash/commit/b0dc2ab3c1) Merge #11862: Network specific conf sections +- [`aaf5bf1a7e`](https://github.com/dashpay/dash/commit/aaf5bf1a7e) Merge #12878: [refactor] Config handling refactoring in preparation for network-specific sections +- [`7a89b916d1`](https://github.com/dashpay/dash/commit/7a89b916d1) Merge #12713: Track negated options in the option parser +- [`8700f460e3`](https://github.com/dashpay/dash/commit/8700f460e3) Merge #12305: [docs] [refactor] Add help messages for datadir path mangling +- [`28a8db3ca7`](https://github.com/dashpay/dash/commit/28a8db3ca7) Fix sourceFile +- [`97907b051f`](https://github.com/dashpay/dash/commit/97907b051f) Fix autobackup functionality +- [`6f4260f860`](https://github.com/dashpay/dash/commit/6f4260f860) bitcoin -> Dash Core +- [`02dfb89b02`](https://github.com/dashpay/dash/commit/02dfb89b02) fix test 50 -> 500 +- [`4aa8a9a206`](https://github.com/dashpay/dash/commit/4aa8a9a206) resolve DEFAULT_WALLET_DAT being removed +- [`7999080c04`](https://github.com/dashpay/dash/commit/7999080c04) Merge #11687: External wallet files +- [`6db01000cf`](https://github.com/dashpay/dash/commit/6db01000cf) 13017 continued +- [`4dcd8d1bea`](https://github.com/dashpay/dash/commit/4dcd8d1bea) Merge #13017: Add wallets management functions +- [`087d98477b`](https://github.com/dashpay/dash/commit/087d98477b) Merge bitcoin#10387: Eventually connect to NODE_NETWORK_LIMITED peers (#3417) +- [`08477899b4`](https://github.com/dashpay/dash/commit/08477899b4) Merge #13522: [tests] Fix p2p_sendheaders race (#3438) +- [`d804a753af`](https://github.com/dashpay/dash/commit/d804a753af) Merge bitcoin#13134: net: Add option `-enablebip61` to configure sending of BIP61 notifications (#3414) +- [`3d175aa2e5`](https://github.com/dashpay/dash/commit/3d175aa2e5) Merge bitcoin#13151: net: Serve blocks directly from disk when possible (#3408) +- [`97742a14d8`](https://github.com/dashpay/dash/commit/97742a14d8) Merge bitcoin#10762: [wallet] Remove Wallet dependencies from init.cpp (#3412) +- [`782ee1a3cf`](https://github.com/dashpay/dash/commit/782ee1a3cf) Merge #10677: RPC Docs: addmultisigaddress is intended for non-watchonly addresses +- [`a13e2f4355`](https://github.com/dashpay/dash/commit/a13e2f4355) Merge #13123: net: Add Clang thread safety annotations for guarded variables in the networking code +- [`b215a1f005`](https://github.com/dashpay/dash/commit/b215a1f005) Merge #12986: Trivial: Corrected comment array name from pnSeeds6 to pnSeed6 +- [`bbce45d8bd`](https://github.com/dashpay/dash/commit/bbce45d8bd) Merge #13652: rpc: Fix that CWallet::AbandonTransaction would leave the grandchildren, etc. active +- [`5aee3ef4e9`](https://github.com/dashpay/dash/commit/5aee3ef4e9) Merge bitcoin#12617: gui: Show messages as text not html +- [`d7cbaec108`](https://github.com/dashpay/dash/commit/d7cbaec108) Merge #12432: [qt] send: Clear All also resets coin control options +- [`e480ae9fa8`](https://github.com/dashpay/dash/commit/e480ae9fa8) Merge #12743: Fix csBestBlock/cvBlockChange waiting in rpc/mining +- [`2a3df4d54c`](https://github.com/dashpay/dash/commit/2a3df4d54c) Merge #12573: Fix compilation when compiler do not support __builtin_clz* +- [`7c5319f032`](https://github.com/dashpay/dash/commit/7c5319f032) Partial Merge #13545: tests: Fix test case streams_serializedata_xor. Remove Boost dependency. +- [`23704daaf0`](https://github.com/dashpay/dash/commit/23704daaf0) Merge #13437: wallet: Erase wtxOrderd wtx pointer on removeprunedfunds +- [`15fb6dbf05`](https://github.com/dashpay/dash/commit/15fb6dbf05) Merge #13061: Make tests pass after 2020 +- [`424bbc3425`](https://github.com/dashpay/dash/commit/424bbc3425) Merge #12837: rpc: fix type mistmatch in `listreceivedbyaddress` +- [`29a0865df3`](https://github.com/dashpay/dash/commit/29a0865df3) Merge #13304: qa: Fix wallet_listreceivedby race +- [`6dfb5a7377`](https://github.com/dashpay/dash/commit/6dfb5a7377) Merge #13192: [tests] Fixed intermittent failure in p2p_sendheaders.py. +- [`b08a1f9ec1`](https://github.com/dashpay/dash/commit/b08a1f9ec1) Merge #12793: qt: Avoid reseting on resetguisettigs=0 +- [`d4065e79ac`](https://github.com/dashpay/dash/commit/d4065e79ac) Merge #15324: test: Make bloom tests deterministic +- [`c52c1e1ce5`](https://github.com/dashpay/dash/commit/c52c1e1ce5) Merge #17243: p2p: add PoissonNextSend method that returns mockable time +- [`ea9f97c53b`](https://github.com/dashpay/dash/commit/ea9f97c53b) Merge #13298: Net: Bucketing INV delays (1 bucket) for incoming connections to hide tx time +- [`8ade2f7957`](https://github.com/dashpay/dash/commit/8ade2f7957) Merge bitcoin#11281: Avoid permanent cs_main/cs_wallet lock during RescanFromTime (#3411) +- [`54198ce739`](https://github.com/dashpay/dash/commit/54198ce739) Backport bitcoin#15773: test: Add BitcoinTestFramework::sync_* methods (incomplete backport) (#3409) +- [`93513d1296`](https://github.com/dashpay/dash/commit/93513d1296) Backport 10279 (#3394) +- [`6724a1ba64`](https://github.com/dashpay/dash/commit/6724a1ba64) Merge #13507: RPC: Fix parameter count check for importpubkey +- [`f7d5e538df`](https://github.com/dashpay/dash/commit/f7d5e538df) Merge #13451: rpc: expose CBlockIndex::nTx in getblock(header) +- [`11b6221b80`](https://github.com/dashpay/dash/commit/11b6221b80) Merge #13131: Add Windows shutdown handler +- [`38ccf6f628`](https://github.com/dashpay/dash/commit/38ccf6f628) Bugfix: Include for std::unique_ptr +- [`01d3f009c5`](https://github.com/dashpay/dash/commit/01d3f009c5) Merge #12089: qa: Make TestNodeCLI command optional in send_cli +- [`5bb47a6d91`](https://github.com/dashpay/dash/commit/5bb47a6d91) Merge #12198: rpc: Add deprecation error for `getinfo` +- [`d6c36124c0`](https://github.com/dashpay/dash/commit/d6c36124c0) Merge #12227: test_runner: Readable output if create_cache.py fails +- [`8e1484fc62`](https://github.com/dashpay/dash/commit/8e1484fc62) continued +- [`1ab6447f10`](https://github.com/dashpay/dash/commit/1ab6447f10) Merge #11791: [tests] Rename NodeConn and NodeConnCB +- [`43c33aa719`](https://github.com/dashpay/dash/commit/43c33aa719) fix +- [`a9ac795173`](https://github.com/dashpay/dash/commit/a9ac795173) Merge #11293: Deduplicate CMerkleBlock construction code, add test coverage +- [`5cf417bc3a`](https://github.com/dashpay/dash/commit/5cf417bc3a) Bump mocktime while syncing mempools +- [`24b25e13da`](https://github.com/dashpay/dash/commit/24b25e13da) Add wait_func to sync_mempool +- [`6d93b33f48`](https://github.com/dashpay/dash/commit/6d93b33f48) Fix compilation of util_time.cpp +- [`6b32192bdc`](https://github.com/dashpay/dash/commit/6b32192bdc) Fix compilation +- [`775e4ba823`](https://github.com/dashpay/dash/commit/775e4ba823) transactions -> objects +- [`a7b38efb98`](https://github.com/dashpay/dash/commit/a7b38efb98) Fix GetObjectInterval and EraseObjectRequest +- [`8e5fbedf21`](https://github.com/dashpay/dash/commit/8e5fbedf21) net: Use mockable time for tx download +- [`a76bafb98c`](https://github.com/dashpay/dash/commit/a76bafb98c) Merge #16046: util: Add type safe GetTime +- [`2d4cc8a19e`](https://github.com/dashpay/dash/commit/2d4cc8a19e) More logging for object request handling +- [`81503598b9`](https://github.com/dashpay/dash/commit/81503598b9) No inbound delay for non-TX objects and masternodes +- [`26fcd3f0bf`](https://github.com/dashpay/dash/commit/26fcd3f0bf) Also remove m_tx_announced and m_tx_in_flight entries when EraseObjectRequest is called +- [`4bfc20cb67`](https://github.com/dashpay/dash/commit/4bfc20cb67) Force re-requesting of IS locked TXs +- [`ef14b19f05`](https://github.com/dashpay/dash/commit/ef14b19f05) Don't re-request erased object requests +- [`2443c8f582`](https://github.com/dashpay/dash/commit/2443c8f582) Replace uses of CNode::AskFor with RequestObject +- [`004d9224c4`](https://github.com/dashpay/dash/commit/004d9224c4) Replace uses of CConnman::RemoveAskFor with EraseObjectRequest +- [`414943b611`](https://github.com/dashpay/dash/commit/414943b611) Make interval and timeout dependend on INV type +- [`56da433bd9`](https://github.com/dashpay/dash/commit/56da433bd9) Fix governance.cpp +- [`29d3b75f28`](https://github.com/dashpay/dash/commit/29d3b75f28) Generalize TX request code +- [`8c11a8e698`](https://github.com/dashpay/dash/commit/8c11a8e698) Remove MSG_WITNESS_TX +- [`74eabc23e5`](https://github.com/dashpay/dash/commit/74eabc23e5) Merge #15834: Fix transaction relay bugs introduced in #14897 and expire transactions from peer in-flight map +- [`8c0ff34ccd`](https://github.com/dashpay/dash/commit/8c0ff34ccd) Merge #14897: randomize GETDATA(tx) request order and introduce bias toward outbound +- [`9401366e8e`](https://github.com/dashpay/dash/commit/9401366e8e) Set wakeupSelectNeeded=true while poll() is running +- [`1524185462`](https://github.com/dashpay/dash/commit/1524185462) Merge #13212: Net: Fixed a race condition when disabling the network. +- [`f2364b7e5c`](https://github.com/dashpay/dash/commit/f2364b7e5c) Wait for ping/pong before starting testing in net.py +- [`351ddf938d`](https://github.com/dashpay/dash/commit/351ddf938d) Merge #15069: test: Fix rpc_net.py "pong" race condition +- [`62dc0bbdae`](https://github.com/dashpay/dash/commit/62dc0bbdae) Merge #16459: [qa] Fix race condition in example_test.py +- [`575d89fcf4`](https://github.com/dashpay/dash/commit/575d89fcf4) Introduce USE_WAKEUP_PIPE +- [`bc2c70f44a`](https://github.com/dashpay/dash/commit/bc2c70f44a) Increase maxconnections limit when using poll. +- [`efec6cc409`](https://github.com/dashpay/dash/commit/efec6cc409) Implement wakeup pipe handling in poll based SocketEvents +- [`c0b10497bf`](https://github.com/dashpay/dash/commit/c0b10497bf) Implement poll() on systems which support it properly. +- [`8481d6c110`](https://github.com/dashpay/dash/commit/8481d6c110) --- Begin backporting bitcoin#14336 +- [`7c022a20a1`](https://github.com/dashpay/dash/commit/7c022a20a1) Move SocketEvents logic to private method. +- [`ccc3f267ba`](https://github.com/dashpay/dash/commit/ccc3f267ba) Move GenerateSelectSet logic to private method. +- [`7a38df4f76`](https://github.com/dashpay/dash/commit/7a38df4f76) Introduce and use constant SELECT_TIMEOUT_MILLISECONDS. +- [`4e00e435e9`](https://github.com/dashpay/dash/commit/4e00e435e9) Move SocketHandler logic to private method. +- [`cbb6c9a4f9`](https://github.com/dashpay/dash/commit/cbb6c9a4f9) Move InactivityCheck logic to private method. +- [`07f6d92e36`](https://github.com/dashpay/dash/commit/07f6d92e36) Move DisconnectNodes logic to private method. +- [`6eef194443`](https://github.com/dashpay/dash/commit/6eef194443) Move NotifyNumConnectionsChanged logic to private method. +- [`f9bf204829`](https://github.com/dashpay/dash/commit/f9bf204829) --- Begin backporting bitcoin#14335 +- [`9591199629`](https://github.com/dashpay/dash/commit/9591199629) Merge #13503: Document FreeBSD quirk. Fix FreeBSD build: Use std::min(...) to allow for compilation under certain FreeBSD versions. +- [`544552e749`](https://github.com/dashpay/dash/commit/544552e749) bench_bitcoin -> bench_dash +- [`af1dc378cd`](https://github.com/dashpay/dash/commit/af1dc378cd) More of 11220 +- [`48f8f4c353`](https://github.com/dashpay/dash/commit/48f8f4c353) Fix 11867 +- [`561451810e`](https://github.com/dashpay/dash/commit/561451810e) Merge #11867: Improve node network test +- [`6e78ccc09d`](https://github.com/dashpay/dash/commit/6e78ccc09d) Merge #11946: tests: Remove unused variable (firstAddrnServices) +- [`b25eec73ed`](https://github.com/dashpay/dash/commit/b25eec73ed) Merge #11220: Check specific validation error in miner tests +- [`61d12fd5bb`](https://github.com/dashpay/dash/commit/61d12fd5bb) remove witness +- [`5757e0d9e3`](https://github.com/dashpay/dash/commit/5757e0d9e3) Merge #10699: Make all script validation flags backward compatible +- [`7c79c480d7`](https://github.com/dashpay/dash/commit/7c79c480d7) Merge #11804: [docs] Fixed outdated link with archive.is +- [`a4bdc16b10`](https://github.com/dashpay/dash/commit/a4bdc16b10) Merge #11683: tests: Remove unused mininode functions {ser,deser}_int_vector(...). Remove unused imports. +- [`af2cf2028e`](https://github.com/dashpay/dash/commit/af2cf2028e) fix +- [`625142bfa0`](https://github.com/dashpay/dash/commit/625142bfa0) Merge #12327: [gui] Defer coin control instancing +- [`a09e1c9b7e`](https://github.com/dashpay/dash/commit/a09e1c9b7e) Merge #12187: [Docs] Updating benchmarkmarking.md with an updated sample output +- [`7fb5b5b3a5`](https://github.com/dashpay/dash/commit/7fb5b5b3a5) Merge #12173: [Qt] Use flexible font size for QRCode image address +- [`52bf616cc4`](https://github.com/dashpay/dash/commit/52bf616cc4) Merge #11712: [tests] Split NodeConn from NodeConnCB (#3373) +- [`73cc3d786b`](https://github.com/dashpay/dash/commit/73cc3d786b) Merge #12093: Fix incorrect Markdown link +- [`bf7cb2dfcc`](https://github.com/dashpay/dash/commit/bf7cb2dfcc) Merge #12075: [scripts] Add missing univalue file to copyright_header.py +- [`0f937164eb`](https://github.com/dashpay/dash/commit/0f937164eb) Merge #11965: qa: Note on test order in test_runner +- [`6377f5064c`](https://github.com/dashpay/dash/commit/6377f5064c) Merge #11916: Typo fix +- [`bf2d66823a`](https://github.com/dashpay/dash/commit/bf2d66823a) Merge #11842: [build] Add missing stuff to clean-local +- [`47be3441b0`](https://github.com/dashpay/dash/commit/47be3441b0) Merge #11903: [trivial] Add required package dependencies for depends cross compilation +- [`3567f7b399`](https://github.com/dashpay/dash/commit/3567f7b399) Merge #13184: RPC Docs: gettxout*: clarify bestblock and unspent counts +- [`9d269073de`](https://github.com/dashpay/dash/commit/9d269073de) Merge #13201: [qa] Handle disconnect_node race +- [`232bd29936`](https://github.com/dashpay/dash/commit/232bd29936) Merge #12999: qt: Show the Window when double clicking the taskbar icon +- [`f6bbb2c16a`](https://github.com/dashpay/dash/commit/f6bbb2c16a) Merge #12998: Default to defining endian-conversion DECLs in compat w/o config +- [`fa652559f0`](https://github.com/dashpay/dash/commit/fa652559f0) Merge #12985: Windows: Avoid launching as admin when NSIS installer ends. +- [`547aef1b0b`](https://github.com/dashpay/dash/commit/547aef1b0b) Merge #12650: gui: Fix issue: "default port not shown correctly in settings dialog" +- [`89bc82625b`](https://github.com/dashpay/dash/commit/89bc82625b) test: Add missing signal.h header +- [`40e4a1a45c`](https://github.com/dashpay/dash/commit/40e4a1a45c) Merge #12422: util: Make LockDirectory thread-safe, consistent, and fix OpenBSD 6.2 build +- [`45844dc002`](https://github.com/dashpay/dash/commit/45844dc002) Merge #12241: [trivial][docs] Fix incorrect link in /test/ README.md +- [`7d75dbda22`](https://github.com/dashpay/dash/commit/7d75dbda22) More of 10773 +- [`f4d6d370f0`](https://github.com/dashpay/dash/commit/f4d6d370f0) Fix 11854 +- [`97f1661853`](https://github.com/dashpay/dash/commit/97f1661853) fix test failure and fix indentation +- [`9bedb900a9`](https://github.com/dashpay/dash/commit/9bedb900a9) Merge #11904: Add a lock to the wallet directory +- [`9d3c7c3ca6`](https://github.com/dashpay/dash/commit/9d3c7c3ca6) Merge #11854: Split up key and script metadata for better type safety +- [`02ab2efe4a`](https://github.com/dashpay/dash/commit/02ab2efe4a) Merge #11667: Add scripts to dumpwallet RPC +- [`adec6e262e`](https://github.com/dashpay/dash/commit/adec6e262e) Merge #11997: [tests] util_tests.cpp: actually check ignored args +- [`58422516d0`](https://github.com/dashpay/dash/commit/58422516d0) Merge #10874: [RPC] getblockchaininfo: Loop through the bip9 soft fork deployments instead of hard coding +- [`7b1f32082c`](https://github.com/dashpay/dash/commit/7b1f32082c) Merge #11981: Fix gitian build after libzmq bump +- [`fe8c18ca77`](https://github.com/dashpay/dash/commit/fe8c18ca77) Merge #10574: Remove includes in .cpp files for things the corresponding .h file already included +- [`a7a3ecc354`](https://github.com/dashpay/dash/commit/a7a3ecc354) Merge #10773: Shell script cleanups +- [`a98db86ada`](https://github.com/dashpay/dash/commit/a98db86ada) Merge #10493: Use range-based for loops (C++11) when looping over map elements +- [`306390abac`](https://github.com/dashpay/dash/commit/306390abac) Merge #11746: trivial: Fix unsuccessful typo +- [`3f16ebd70a`](https://github.com/dashpay/dash/commit/3f16ebd70a) Merge #11738: Fix sendrawtransaction hang when sending a tx already in mempool +- [`1587728345`](https://github.com/dashpay/dash/commit/1587728345) Merge #11690: [trivial] Fix the StartupWMClass for bitoin-qt, so gnome-shell can recognize it +- [`975f73be7a`](https://github.com/dashpay/dash/commit/975f73be7a) Merge #11648: [tests] Add messages.py (#3372) +- [`6e54327ef2`](https://github.com/dashpay/dash/commit/6e54327ef2) Apply suggestions from code review +- [`d94dd15de7`](https://github.com/dashpay/dash/commit/d94dd15de7) Merge #11718: tests: move pwalletMain to wallet test fixture +- [`9b1ebdb161`](https://github.com/dashpay/dash/commit/9b1ebdb161) Merge #12902: [qa] Handle potential cookie race when starting node +- [`7afc672d80`](https://github.com/dashpay/dash/commit/7afc672d80) Merge #12904: [qa] Ensure bitcoind processes are cleaned up when tests end +- [`5fc1686919`](https://github.com/dashpay/dash/commit/5fc1686919) Merge #12843: [tests] Test starting bitcoind with -h and -version +- [`57d82cf722`](https://github.com/dashpay/dash/commit/57d82cf722) Merge #12638: qa: Cache only chain and wallet for regtest datadir +- [`8bf0a5c3c7`](https://github.com/dashpay/dash/commit/8bf0a5c3c7) Merge #12553: Prefer wait_until over polling with time.sleep +- [`62bbabb6ac`](https://github.com/dashpay/dash/commit/62bbabb6ac) Merge #12475: qa: Fix python TypeError in script.py +- [`fa59296e74`](https://github.com/dashpay/dash/commit/fa59296e74) Merge #12486: [test] Round target fee to 8 decimals in assert_fee_amount +- [`d3e5f8ead7`](https://github.com/dashpay/dash/commit/d3e5f8ead7) Merge #12518: [0.16] Bump leveldb subtree +- [`1e41cf9f3d`](https://github.com/dashpay/dash/commit/1e41cf9f3d) Merge #11722: Switched sync.{cpp,h} to std threading primitives. +- [`411c57995b`](https://github.com/dashpay/dash/commit/411c57995b) Merge #11884: Remove unused include in hash.cpp +- [`791719ea3d`](https://github.com/dashpay/dash/commit/791719ea3d) Merge #11839: don't attempt mempool entry for wallet transactions on startup if alr… +- [`f798771323`](https://github.com/dashpay/dash/commit/f798771323) Merge #11707: [tests] Fix sendheaders +- [`b1dff227cb`](https://github.com/dashpay/dash/commit/b1dff227cb) Apply some review suggestions +- [`871b8585ca`](https://github.com/dashpay/dash/commit/871b8585ca) Merge #11824: Block ActivateBestChain to empty validationinterface queue +- [`d8121bba29`](https://github.com/dashpay/dash/commit/d8121bba29) Apply suggestions from code review +- [`35b041ed14`](https://github.com/dashpay/dash/commit/35b041ed14) Merge #13894: shutdown: Stop threads before resetting ptrs +- [`c01e39d610`](https://github.com/dashpay/dash/commit/c01e39d610) Merge #12266: Move scheduler/threadGroup into common-init instead of per-app +- [`b46693eaf7`](https://github.com/dashpay/dash/commit/b46693eaf7) Apply the same fix to evoDb and deterministicMNManager as pblocktree +- [`9a2fa43455`](https://github.com/dashpay/dash/commit/9a2fa43455) Remove "> 0" from IsArgSet call +- [`75f32fb50f`](https://github.com/dashpay/dash/commit/75f32fb50f) Merge #11309: Minor cleanups for AcceptToMemoryPool +- [`ce08ccec2c`](https://github.com/dashpay/dash/commit/ce08ccec2c) Merge #12556: [Trivial] fix version typo in getpeerinfo RPC call help +- [`b447c5a0c6`](https://github.com/dashpay/dash/commit/b447c5a0c6) Merge #12349: shutdown: fix crash on shutdown with reindex-chainstate +- [`99caed29f1`](https://github.com/dashpay/dash/commit/99caed29f1) Merge #12415: Interrupt loading thread after shutdown request +- [`5e19f32b6b`](https://github.com/dashpay/dash/commit/5e19f32b6b) Merge #12401: Reset pblocktree before deleting LevelDB file +- [`78d303c3fd`](https://github.com/dashpay/dash/commit/78d303c3fd) Merge #12368: Hold mempool.cs for the duration of ATMP. +- [`aa34483efd`](https://github.com/dashpay/dash/commit/aa34483efd) Merge #12374: qt: Make sure splash screen is freed on AppInitMain fail +- [`7e5c5d40d1`](https://github.com/dashpay/dash/commit/7e5c5d40d1) Merge #12377: qt: Poll ShutdownTimer after init is done +- [`8095699575`](https://github.com/dashpay/dash/commit/8095699575) Merge #12367: Fix two fast-shutdown bugs +- [`1948435b4a`](https://github.com/dashpay/dash/commit/1948435b4a) Merge #12302: test: Make ua_comment test pass on 0.16.0 +- [`d8d18d6657`](https://github.com/dashpay/dash/commit/d8d18d6657) Merge #11714: [tests] Test that mempool rejects coinbase transactions +- [`e2c7d1f55a`](https://github.com/dashpay/dash/commit/e2c7d1f55a) add include +- [`62987bee8c`](https://github.com/dashpay/dash/commit/62987bee8c) Merge #11191: RPC: Improve help text and behavior of RPC-logging. +- [`26281c023a`](https://github.com/dashpay/dash/commit/26281c023a) Merge #10154: init: Remove redundant logging code +- [`0c97cd5cee`](https://github.com/dashpay/dash/commit/0c97cd5cee) Merge #11710: cli: Reject arguments to -getinfo +- [`a4dfd54ecf`](https://github.com/dashpay/dash/commit/a4dfd54ecf) Merge #17324: Update univalue subtree +- [`0d49c6fa00`](https://github.com/dashpay/dash/commit/0d49c6fa00) Merge #15703: Update secp256k1 subtree to latest upstream +- [`139108aba5`](https://github.com/dashpay/dash/commit/139108aba5) Merge #15270: Pull leveldb subtree +- [`ce0118b613`](https://github.com/dashpay/dash/commit/ce0118b613) Merge #9254: [depends] ZeroMQ 4.2.2 +- [`8a1ec935a0`](https://github.com/dashpay/dash/commit/8a1ec935a0) Backport 11651 (#3358) +- [`ff5540bf73`](https://github.com/dashpay/dash/commit/ff5540bf73) Fix walletpassphrase +- [`0d42fa00ce`](https://github.com/dashpay/dash/commit/0d42fa00ce) Use mocktime in wallet-encryption.py +- [`be35371de7`](https://github.com/dashpay/dash/commit/be35371de7) More of 12079 +- [`079dbbc393`](https://github.com/dashpay/dash/commit/079dbbc393) Fix 11883 +- [`0c3df75e62`](https://github.com/dashpay/dash/commit/0c3df75e62) More of 11740 +- [`131d8f5cf5`](https://github.com/dashpay/dash/commit/131d8f5cf5) More of 11836 +- [`64e33f715f`](https://github.com/dashpay/dash/commit/64e33f715f) Merge #12220: Error if relative -walletdir is specified +- [`cc2cd7291b`](https://github.com/dashpay/dash/commit/cc2cd7291b) Merge #11970: Add test coverage for bitcoin-cli multiwallet calls +- [`be7bf2e9d8`](https://github.com/dashpay/dash/commit/be7bf2e9d8) Merge #11726: Cleanups + nit fixes for walletdir PR +- [`b24951bc78`](https://github.com/dashpay/dash/commit/b24951bc78) Merge #12905: [rpcwallet] Clamp walletpassphrase value at 100M seconds +- [`2a8040cebb`](https://github.com/dashpay/dash/commit/2a8040cebb) Merge #12101: Clamp walletpassphrase timeout to 2^30 seconds and check its bounds +- [`c4ffc620d0`](https://github.com/dashpay/dash/commit/c4ffc620d0) Merge #12118: Sort mempool by min(feerate, ancestor_feerate) +- [`9cc5078218`](https://github.com/dashpay/dash/commit/9cc5078218) Partial Merge #11403: [refactor] GetAccount{PubKey,Address} -> GetAccountDestination +- [`c02a1239b7`](https://github.com/dashpay/dash/commit/c02a1239b7) Merge #12079: Improve prioritisetransaction test coverage +- [`67cf9591c4`](https://github.com/dashpay/dash/commit/67cf9591c4) Merge #12001: [RPC] Adding ::minRelayTxFee amount to getmempoolinfo and updating help +- [`dbbeb0aee4`](https://github.com/dashpay/dash/commit/dbbeb0aee4) Merge #10657: Utils: Improvements to ECDSA key-handling code +- [`4a7a7cdfa2`](https://github.com/dashpay/dash/commit/4a7a7cdfa2) Merge #11951: Remove dead feeest-file read code for old versions +- [`df30971371`](https://github.com/dashpay/dash/commit/df30971371) Merge #11883: Add configuration file/argument testing +- [`4dd3124245`](https://github.com/dashpay/dash/commit/4dd3124245) Merge #11273: Ignore old format estimation file +- [`b446236e25`](https://github.com/dashpay/dash/commit/b446236e25) Merge #11923: Wallet : remove unused fNoncriticalErrors variable from CWalletDB::FindWalletTx +- [`e077cfd010`](https://github.com/dashpay/dash/commit/e077cfd010) Merge #11864: Make CWallet::FundTransaction atomic +- [`39a8e20de6`](https://github.com/dashpay/dash/commit/39a8e20de6) Merge #11558: Minimal code changes to allow msvc compilation +- [`3855979343`](https://github.com/dashpay/dash/commit/3855979343) Merge #11831: Always return true if AppInitMain got to the end +- [`07316dda2c`](https://github.com/dashpay/dash/commit/07316dda2c) Merge #11836: Rename rpcuser.py to rpcauth.py +- [`f175a2e351`](https://github.com/dashpay/dash/commit/f175a2e351) Merge #11740: Implement BIP159 NODE_NETWORK_LIMITED (pruned peers) *signaling only* +- [`315504c8c3`](https://github.com/dashpay/dash/commit/315504c8c3) Merge #11809: gui: Fix proxy setting options dialog crash +- [`6cf2ea19b2`](https://github.com/dashpay/dash/commit/6cf2ea19b2) Merge #11838: qa: Add getrawtransaction in_active_chain=False test +- [`8e8e06a597`](https://github.com/dashpay/dash/commit/8e8e06a597) Merge #10275: [rpc] Allow fetching tx directly from specified block in getrawtransaction +- [`85ccc76615`](https://github.com/dashpay/dash/commit/85ccc76615) Merge #11830: rpcuser.py: Use 'python' not 'python2' +- [`3d6713d651`](https://github.com/dashpay/dash/commit/3d6713d651) Merge #11729: [docs] links to code style guides +- [`f7f33091e1`](https://github.com/dashpay/dash/commit/f7f33091e1) Merge #10838: (finally) remove getinfo +- [`1c0acbefe1`](https://github.com/dashpay/dash/commit/1c0acbefe1) More of 10286 +- [`381f43a431`](https://github.com/dashpay/dash/commit/381f43a431) More of 11677 +- [`515b9b513b`](https://github.com/dashpay/dash/commit/515b9b513b) More of 10871 +- [`37580b0ba3`](https://github.com/dashpay/dash/commit/37580b0ba3) fix validationinterface.cpp +- [`3eb80fdcd5`](https://github.com/dashpay/dash/commit/3eb80fdcd5) Merge #10286: Call wallet notify callbacks in scheduler thread (without cs_main) +- [`4ec4e349d2`](https://github.com/dashpay/dash/commit/4ec4e349d2) Merge #11677: qa: Remove unused NodeConn members +- [`c1897a6f14`](https://github.com/dashpay/dash/commit/c1897a6f14) Merge #11043: Use std::unique_ptr (C++11) where possible +- [`a42d62d89e`](https://github.com/dashpay/dash/commit/a42d62d89e) Merge #11638: [tests] Dead mininode code +- [`08171fb386`](https://github.com/dashpay/dash/commit/08171fb386) Merge #11513: [trivial] [tests] A few Python3 tidy ups +- [`f2024366d8`](https://github.com/dashpay/dash/commit/f2024366d8) Merge #10871: Handle getinfo in bitcoin-cli w/ -getinfo (revival of #8843) +- [`a321e6195f`](https://github.com/dashpay/dash/commit/a321e6195f) Merge #11259: Remove duplicate destination decoding +- [`52a6c4e336`](https://github.com/dashpay/dash/commit/52a6c4e336) Apply suggestions from code review +- [`2c7b29bac5`](https://github.com/dashpay/dash/commit/2c7b29bac5) Merge #11466: Specify custom wallet directory with -walletdir param +- [`b84b36f228`](https://github.com/dashpay/dash/commit/b84b36f228) Merge #11621: [build] Add temp_bitcoin_locale_qrc to CLEAN_QT to fix make distcheck +- [`5f4770dc33`](https://github.com/dashpay/dash/commit/5f4770dc33) Merge #11654: tests: Initialize recently introduced non-static class member lastCycles to zero in constructor +- [`523ecf915b`](https://github.com/dashpay/dash/commit/523ecf915b) Merge #11646: Require a steady clock for bench with at least micro precision +- [`2a018f8807`](https://github.com/dashpay/dash/commit/2a018f8807) Merge #11221: Refactor: simpler read +- [`304f012632`](https://github.com/dashpay/dash/commit/304f012632) Merge #11562: bench: use std::chrono rather than gettimeofday +- [`06c90e5a83`](https://github.com/dashpay/dash/commit/06c90e5a83) Merge #10866: Fix -Wthread-safety-analysis warnings. Compile with -Wthread-safety-analysis if available. +- [`c9c67ea578`](https://github.com/dashpay/dash/commit/c9c67ea578) Merge #11620: [build] .gitignore: add background.tiff +- [`a592123640`](https://github.com/dashpay/dash/commit/a592123640) Merge #11460: [depends] mac_alias 2.0.6, ds_store 1.1.2 +- [`8a944a1a1a`](https://github.com/dashpay/dash/commit/8a944a1a1a) Merge #10961: Improve readability of DecodeBase58Check(...) +- [`fe333e188a`](https://github.com/dashpay/dash/commit/fe333e188a) Merge #10440: [tests] Add libFuzzer support +- [`09184fc89c`](https://github.com/dashpay/dash/commit/09184fc89c) Merge #10939: [init] Check non-emptiness of -blocknotify command prior to executing +- [`fb18f2664f`](https://github.com/dashpay/dash/commit/fb18f2664f) Merge #11443: [qa] Allow "make cov" out-of-tree; Fix rpc mapping check +- [`1017bbb84e`](https://github.com/dashpay/dash/commit/1017bbb84e) Merge #11419: Utils: Fix launchctl not being able to stop bitcoind +- [`3c5bd7708b`](https://github.com/dashpay/dash/commit/3c5bd7708b) Merge #11421: Merge current secp256k1 subtree +- [`581626f23b`](https://github.com/dashpay/dash/commit/581626f23b) Merge #11024: tests: Remove OldSetKeyFromPassphrase/OldEncrypt/OldDec… (#3320) +- [`052e7fcffd`](https://github.com/dashpay/dash/commit/052e7fcffd) Merge #10952: [wallet] Remove vchDefaultKey and have better first run… (#3319) +- [`0294caac0a`](https://github.com/dashpay/dash/commit/0294caac0a) Merge #11272: CKeystore/CCrypter: move relevant implementation out of… (#3318) +- [`3a83c3ada0`](https://github.com/dashpay/dash/commit/3a83c3ada0) Partial Merge #10420: Add Qt tests for wallet spends (#3317) +- [`00895b9dcb`](https://github.com/dashpay/dash/commit/00895b9dcb) Fix rawtransactions.py +- [`a3f779d08f`](https://github.com/dashpay/dash/commit/a3f779d08f) Fix `qt/test/wallettests.cpp` +- [`6d8738eb9e`](https://github.com/dashpay/dash/commit/6d8738eb9e) Merge #11365: [Tests] Add Qt GUI tests to Overview and ReceiveCoin Page +- [`21b7d3e81c`](https://github.com/dashpay/dash/commit/21b7d3e81c) Merge #11193: [Qt] Terminate string *pszExePath after readlink and without using memset +- [`eddba9c974`](https://github.com/dashpay/dash/commit/eddba9c974) Merge #11284: Fix invalid memory access in CScript::operator+= (guidovranken, ajtowns) +- [`74c5415a28`](https://github.com/dashpay/dash/commit/74c5415a28) Merge #11303: Fix estimatesmartfee rounding display issue +- [`f25f00aac1`](https://github.com/dashpay/dash/commit/f25f00aac1) Merge #10953: [Refactor] Combine scriptPubKey and amount as CTxOut in CScriptCheck +- [`db23d27e8a`](https://github.com/dashpay/dash/commit/db23d27e8a) test_bitcoin -> test_dash +- [`8f2d96c88f`](https://github.com/dashpay/dash/commit/8f2d96c88f) Merge #12276: Remove duplicate mapWallet lookups +- [`5e6f784df8`](https://github.com/dashpay/dash/commit/5e6f784df8) Merge #12278: Add special error for genesis coinbase to getrawtransaction +- [`4e230811b6`](https://github.com/dashpay/dash/commit/4e230811b6) Merge #11711: bitcoin_qt.m4: Minor fixes and clean-ups. +- [`2f8888a86e`](https://github.com/dashpay/dash/commit/2f8888a86e) Merge #12159: Use the character based overload for std::string::find. +- [`8462ae91aa`](https://github.com/dashpay/dash/commit/8462ae91aa) Merge #12108: [Refactor] Remove unused fQuit var from checkqueue.h +- [`f5fbfdefd5`](https://github.com/dashpay/dash/commit/f5fbfdefd5) Merge #12250: Make CKey::Load references const +- [`ea9db38b08`](https://github.com/dashpay/dash/commit/ea9db38b08) Merge #12212: Trivial: Fix spelling in zapwallettxes test description +- [`e158f1ad5b`](https://github.com/dashpay/dash/commit/e158f1ad5b) Merge #12127: Remove unused mempool index +- [`923126a663`](https://github.com/dashpay/dash/commit/923126a663) Merge #12168: Trivial: Fix #include sys/fcntl.h to just fcntl.h (without sys/) +- [`291051f209`](https://github.com/dashpay/dash/commit/291051f209) Merge #12074: [qt] Optimizes boolean expression model && model->haveWatchOnly() +- [`d086f160b5`](https://github.com/dashpay/dash/commit/d086f160b5) Merge #11291: Fix string concatenation to os.path.join and add exception case +- [`e288330e03`](https://github.com/dashpay/dash/commit/e288330e03) Merge #11748: [Tests] Adding unit tests for GetDifficulty in blockchain.cpp. +- [`b8c5d5d7ea`](https://github.com/dashpay/dash/commit/b8c5d5d7ea) Merge #11475: [rpc] mempoolinfo should take ::minRelayTxFee into account +- [`3654f15c91`](https://github.com/dashpay/dash/commit/3654f15c91) Merge #11879: [tests] remove redundant univalue_tests.cpp +- [`f4ed206352`](https://github.com/dashpay/dash/commit/f4ed206352) Merge #11952: [qa] univalue: Bump subtree +- [`ec35169d92`](https://github.com/dashpay/dash/commit/ec35169d92) Merge #11936: [build] Warn that only libconsensus can be built without Boost +- [`c60ba06bd0`](https://github.com/dashpay/dash/commit/c60ba06bd0) Merge #11886: Clarify getbalance meaning a tiny bit in response to questions. +- [`b9e3ae689a`](https://github.com/dashpay/dash/commit/b9e3ae689a) Merge #11616: Update ban-state in case of dirty-state during periodic sweep +- [`49825231fb`](https://github.com/dashpay/dash/commit/49825231fb) Merge #10839: Don't use pass by reference to const for cheaply-copied types (bool, char, etc.) +- [`212496c202`](https://github.com/dashpay/dash/commit/212496c202) Merge #11877: Improve createrawtransaction functional tests +- [`4b0a860f8f`](https://github.com/dashpay/dash/commit/4b0a860f8f) Merge #11870: wallet: Remove unnecessary mempool lock in ReacceptWalletTransactions +- [`b695b67d5f`](https://github.com/dashpay/dash/commit/b695b67d5f) Merge #11516: crypto: Add test cases covering the relevant HMAC-SHA{256,512} key length boundaries +- [`1a754b5d7b`](https://github.com/dashpay/dash/commit/1a754b5d7b) Merge #11829: Test datadir specified in conf file exists +- [`f16a0f79aa`](https://github.com/dashpay/dash/commit/f16a0f79aa) bitcoin -> Dash +- [`42583216fe`](https://github.com/dashpay/dash/commit/42583216fe) addressWidget -> search_widget +- [`f32949fa91`](https://github.com/dashpay/dash/commit/f32949fa91) Merge #11834: [verify-commits] Fix gpg.sh's echoing for commits with '\n' +- [`608fad56a0`](https://github.com/dashpay/dash/commit/608fad56a0) Merge #11781: Add `-debuglogfile` option +- [`48ed520f10`](https://github.com/dashpay/dash/commit/48ed520f10) Merge #11337: Fix code constness in CBlockIndex::GetAncestor() overloads +- [`610b3e1b06`](https://github.com/dashpay/dash/commit/610b3e1b06) Merge #11794: Prefix leveldb debug logging +- [`5091ab5bcc`](https://github.com/dashpay/dash/commit/5091ab5bcc) Merge #11783: Fix shutdown in case of errors during initialization +- [`4f2fcbd1a3`](https://github.com/dashpay/dash/commit/4f2fcbd1a3) Merge #11395: Qt: Enable searching by transaction id +- [`ff20819773`](https://github.com/dashpay/dash/commit/ff20819773) Merge #11753: clarify abortrescan rpc use +- [`151e9209cf`](https://github.com/dashpay/dash/commit/151e9209cf) Merge #11737: Document partial validation in ConnectBlock() +- [`1e2b2b11d5`](https://github.com/dashpay/dash/commit/1e2b2b11d5) Merge #11747: Fix: Open files read only if requested +- [`baadb52aef`](https://github.com/dashpay/dash/commit/baadb52aef) Merge #11603: Move RPC registration out of AppInitParameterInteraction +- [`a97ac0f09a`](https://github.com/dashpay/dash/commit/a97ac0f09a) Merge #11743: qa: Add multiwallet prefix test +- [`c7b8b2b35c`](https://github.com/dashpay/dash/commit/c7b8b2b35c) Merge #11698: [Docs] [Qt] RPC-Console nested commands documentation +- [`27d325eaea`](https://github.com/dashpay/dash/commit/27d325eaea) Merge #11713: Fix for mismatched extern definition in wallet tests +- [`eed401312e`](https://github.com/dashpay/dash/commit/eed401312e) Merge #11140: Trivial: Improve #endif comments +- [`11d59e785d`](https://github.com/dashpay/dash/commit/11d59e785d) Merge #10920: [qt] Fix potential memory leak in newPossibleKey(ChangeCWallet *wallet) +- [`a76a3b72db`](https://github.com/dashpay/dash/commit/a76a3b72db) Merge #11087: Diagnose unsuitable outputs in lockunspent(). +- [`0dbfdad044`](https://github.com/dashpay/dash/commit/0dbfdad044) Merge #11655: net: Assert state.m_chain_sync.m_work_header in ConsiderEviction +- [`5bbbce30eb`](https://github.com/dashpay/dash/commit/5bbbce30eb) Merge #11680: [docs] Add instructions for lcov report generation +- [`46d2cc6159`](https://github.com/dashpay/dash/commit/46d2cc6159) Merge #11035: [contrib] Add Valgrind suppressions file +- [`67c8484e20`](https://github.com/dashpay/dash/commit/67c8484e20) More of 11583 for Dash-specific code +- [`6eb6298bc2`](https://github.com/dashpay/dash/commit/6eb6298bc2) More of 12218 for Dash-specific code +- [`0255027fb6`](https://github.com/dashpay/dash/commit/0255027fb6) Fix "\n"s +- [`e7beff5bcd`](https://github.com/dashpay/dash/commit/e7beff5bcd) Merge #12855: net: Minor accumulated cleanups +- [`a3ea0e93ef`](https://github.com/dashpay/dash/commit/a3ea0e93ef) Merge #12626: Limit the number of IPs addrman learns from each DNS seeder +- [`12a9809824`](https://github.com/dashpay/dash/commit/12a9809824) Merge #12342: Extend #11583 to include "version handshake timeout" message +- [`03576217e5`](https://github.com/dashpay/dash/commit/03576217e5) Merge #12329: net: don't retry failed oneshot connections forever +- [`211c8a3a5b`](https://github.com/dashpay/dash/commit/211c8a3a5b) Merge #12326: net: initialize socket to avoid closing random fd's +- [`49549390af`](https://github.com/dashpay/dash/commit/49549390af) Merge #12218: net: Move misbehaving logging to net logging category +- [`500a60a8fe`](https://github.com/dashpay/dash/commit/500a60a8fe) Merge #11744: net: Add missing locks in net.{cpp,h} +- [`f4fb2c1906`](https://github.com/dashpay/dash/commit/f4fb2c1906) Merge #11583: Do not make it trivial for inbound peers to generate log entries +- [`fccf28b6a0`](https://github.com/dashpay/dash/commit/fccf28b6a0) Merge #11577: Fix warnings (-Wsign-compare) when building with DEBUG_ADDRMAN +- [`94e99441c5`](https://github.com/dashpay/dash/commit/94e99441c5) Merge #11512: Use GetDesireableServiceFlags in seeds, dnsseeds, fixing static seed adding +- [`88197c7414`](https://github.com/dashpay/dash/commit/88197c7414) Merge #11448: [gui] reset addrProxy/addrSeparateProxyTor if colon char missing +- [`7f88a67d5b`](https://github.com/dashpay/dash/commit/7f88a67d5b) Merge #11363: net: Split socket create/connect +- [`87b999011f`](https://github.com/dashpay/dash/commit/87b999011f) Merge branch 'backports-0.16-pr5' of github.com:PastaPastaPasta/dash into backports-0.16-pr5 +- [`e21129552d`](https://github.com/dashpay/dash/commit/e21129552d) fix test/functional/receivedby.py +- [`0ca31d12ed`](https://github.com/dashpay/dash/commit/0ca31d12ed) Fix tests +- [`7bbe84b3cb`](https://github.com/dashpay/dash/commit/7bbe84b3cb) Revert "remove explicit on FreespaceChecker" +- [`62e947dfb9`](https://github.com/dashpay/dash/commit/62e947dfb9) fix receivedby.py +- [`aeaf3c5ef9`](https://github.com/dashpay/dash/commit/aeaf3c5ef9) Merge #10749: Use compile-time constants instead of unnamed enumerations (remove "enum hack") +- [`abc0fb08be`](https://github.com/dashpay/dash/commit/abc0fb08be) Merge #3716: GUI: Receive: Remove option to reuse a previous address +- [`cc5b2f163c`](https://github.com/dashpay/dash/commit/cc5b2f163c) Merge #11055: [wallet] [rpc] getreceivedbyaddress should return error if called with address not owned by the wallet +- [`c5a7046e93`](https://github.com/dashpay/dash/commit/c5a7046e93) Merge #11258: [rpc] Add initialblockdownload to getblockchaininfo +- [`1990f11450`](https://github.com/dashpay/dash/commit/1990f11450) Merge #11269: [Mempool] CTxMemPoolEntry::UpdateAncestorState: modifySiagOps param type +- [`a969c8d0be`](https://github.com/dashpay/dash/commit/a969c8d0be) Merge #11353: Small refactor of CCoinsViewCache::BatchWrite() +- [`767030b9ca`](https://github.com/dashpay/dash/commit/767030b9ca) remove test_bitcoin.cpp +- [`be98dc3894`](https://github.com/dashpay/dash/commit/be98dc3894) test_dash continued +- [`efea72890c`](https://github.com/dashpay/dash/commit/efea72890c) Merge #11623: tests: Add missing locks to tests +- [`bb43baf7c4`](https://github.com/dashpay/dash/commit/bb43baf7c4) Merge #11316: [qt] Add use available balance in send coins dialog (CryptAxe, promag) +- [`134392f421`](https://github.com/dashpay/dash/commit/134392f421) Merge #11074: Assert that CWallet::SyncMetaData finds oldest transaction. +- [`354f57a838`](https://github.com/dashpay/dash/commit/354f57a838) Merge #10368: [wallet] Remove helper conversion operator from wallet +- [`3bae57af8d`](https://github.com/dashpay/dash/commit/3bae57af8d) Merge #10696: Remove redundant nullptr checks before deallocation +- [`79e841fac7`](https://github.com/dashpay/dash/commit/79e841fac7) Merge #11594: Improve -disablewallet parameter interaction +- [`9c914a1c14`](https://github.com/dashpay/dash/commit/9c914a1c14) Merge #10529: Improve bitcoind systemd service file +- [`6d4839fd89`](https://github.com/dashpay/dash/commit/6d4839fd89) Merge #11552: Improve wallet-accounts test +- [`aef1eb00a4`](https://github.com/dashpay/dash/commit/aef1eb00a4) remove explicit on FreespaceChecker +- [`980a053af8`](https://github.com/dashpay/dash/commit/980a053af8) Merge #11107: Fix races in AppInitMain and others with lock and atomic bools +- [`0160203306`](https://github.com/dashpay/dash/commit/0160203306) Merge #11435: build: Make "make clean" remove all files created when running "make check" +- [`72d8f89c91`](https://github.com/dashpay/dash/commit/72d8f89c91) Merge #10409: [tests] Add fuzz testing for BlockTransactions and BlockTransactionsRequest +- [`948863c5b3`](https://github.com/dashpay/dash/commit/948863c5b3) Merge #11499: [Qt] Add upload and download info to the peerlist (debug menu) +- [`78cd1f0677`](https://github.com/dashpay/dash/commit/78cd1f0677) Merge #11635: trivial: Fix typo – alreardy → already +- [`2db55b476f`](https://github.com/dashpay/dash/commit/2db55b476f) Merge #11524: [net] De-duplicate connection eviction logic +- [`1dd2b11000`](https://github.com/dashpay/dash/commit/1dd2b11000) Backport bitcoin#11027: [RPC] Only return hex field once in getrawtransaction (#3298) +- [`19b39167e8`](https://github.com/dashpay/dash/commit/19b39167e8) Remove use of NULL in wallet.cpp +- [`364cc42edb`](https://github.com/dashpay/dash/commit/364cc42edb) Fix 11486 +- [`cff940c288`](https://github.com/dashpay/dash/commit/cff940c288) Fix 11541 +- [`682b59a262`](https://github.com/dashpay/dash/commit/682b59a262) Fix 11452 +- [`b9e76deb10`](https://github.com/dashpay/dash/commit/b9e76deb10) Fix 7061 +- [`eb9263f046`](https://github.com/dashpay/dash/commit/eb9263f046) Merge #11624: Docs: Change formatting for sequence of steps +- [`e1cbdef16c`](https://github.com/dashpay/dash/commit/e1cbdef16c) Merge #11585: addrman: Add missing lock in Clear() (CAddrMan) +- [`458db168d4`](https://github.com/dashpay/dash/commit/458db168d4) Merge #11618: rpc: Lock cs_main in blockToJSON/blockheaderToJSON +- [`40410ede66`](https://github.com/dashpay/dash/commit/40410ede66) Merge #11626: rpc: Make `logging` RPC public +- [`c85b038beb`](https://github.com/dashpay/dash/commit/c85b038beb) Merge #11480: [ui] Add toggle for unblinding password fields +- [`bbd89c54f1`](https://github.com/dashpay/dash/commit/bbd89c54f1) Merge #11611: [build] Don't fail when passed --disable-lcov and lcov isn't available +- [`5f7eebec51`](https://github.com/dashpay/dash/commit/5f7eebec51) Merge #11511: [Init] Remove redundant exit(EXIT_FAILURE) instances and replace with return false +- [`ce381d0826`](https://github.com/dashpay/dash/commit/ce381d0826) Merge #11571: Fixed a couple small grammatical errors. +- [`7b26c638c7`](https://github.com/dashpay/dash/commit/7b26c638c7) Merge #11573: [Util] Update tinyformat.h +- [`2f61a2007a`](https://github.com/dashpay/dash/commit/2f61a2007a) Merge #11541: Build: Fix Automake warnings when running autogen.sh +- [`81ebfb7f76`](https://github.com/dashpay/dash/commit/81ebfb7f76) Merge #11452: Improve ZMQ functional test +- [`e357bda75b`](https://github.com/dashpay/dash/commit/e357bda75b) Merge #11467: Fix typos. Use nullptr instead of NULL. +- [`186edbeeeb`](https://github.com/dashpay/dash/commit/186edbeeeb) Merge #11495: [trivial] Make namespace explicit for is_regular_file +- [`21514ceb50`](https://github.com/dashpay/dash/commit/21514ceb50) Merge #11486: [tests] Add uacomment tests +- [`467c52c75f`](https://github.com/dashpay/dash/commit/467c52c75f) Merge #11508: Fix crash via division by zero assertion +- [`4cdb8f143c`](https://github.com/dashpay/dash/commit/4cdb8f143c) Merge #11062: [mempool] Mark mempool import fails that were found in mempool as 'already there' +- [`3c8a15f697`](https://github.com/dashpay/dash/commit/3c8a15f697) add second arg for ScanForWalletTransactions +- [`4b200baf35`](https://github.com/dashpay/dash/commit/4b200baf35) Merge #11496: [Trivial] Add missing comma from rescanblockchain example +- [`93ebbc866e`](https://github.com/dashpay/dash/commit/93ebbc866e) Merge #7061: [Wallet] Add RPC call "rescanblockchain " +- [`1e2ab7633f`](https://github.com/dashpay/dash/commit/1e2ab7633f) Merge #10099: Slightly Improve Unit Tests for Checkqueue +- [`e7c27f3b77`](https://github.com/dashpay/dash/commit/e7c27f3b77) Merge #10898: Fix invalid checks (NULL checks after dereference, redundant checks, etc.) +- [`78c06fa838`](https://github.com/dashpay/dash/commit/78c06fa838) More of bitcoin#10888 +- [`cdf68a9eb8`](https://github.com/dashpay/dash/commit/cdf68a9eb8) Have to prepare the chain manually in blockchain.py +- [`e031cf4572`](https://github.com/dashpay/dash/commit/e031cf4572) bitcoind->dashd +- [`8d2cf6b82e`](https://github.com/dashpay/dash/commit/8d2cf6b82e) assert_raises_jsonrpc -> assert_raises_rpc_error +- [`fb2cd99f94`](https://github.com/dashpay/dash/commit/fb2cd99f94) Merge #10672: Avoid division by zero in the case of a corrupt estimates file +- [`df109ec118`](https://github.com/dashpay/dash/commit/df109ec118) Merge #11073: Remove dead store in ecdsa_signature_parse_der_lax. +- [`93e979e4d4`](https://github.com/dashpay/dash/commit/93e979e4d4) Merge #11133: Document assumptions that are being made to avoid division by zero +- [`36bb302f80`](https://github.com/dashpay/dash/commit/36bb302f80) Merge #11420: Bump univalue subtree and fix json formatting in tests +- [`7f2ebba617`](https://github.com/dashpay/dash/commit/7f2ebba617) Merge #10941: Add blocknotify and walletnotify functional tests +- [`23ec9e7cc8`](https://github.com/dashpay/dash/commit/23ec9e7cc8) Merge #11367: [rpc] getblockchaininfo: add size_on_disk, prune_target_size +- [`f6f94ee47e`](https://github.com/dashpay/dash/commit/f6f94ee47e) Merge #11411: script: Change SignatureHash input index check to an assert. +- [`5329aba10d`](https://github.com/dashpay/dash/commit/5329aba10d) Merge #11021: [rpc] fix getchaintxstats() +- [`46a1ad7939`](https://github.com/dashpay/dash/commit/46a1ad7939) Merge #11432: Remove unused fTry from push_lock +- [`c08b54d7b6`](https://github.com/dashpay/dash/commit/c08b54d7b6) Merge #11418: Add error string for CLEANSTACK script violation +- [`19180b3357`](https://github.com/dashpay/dash/commit/19180b3357) Merge #10663: net: split resolve out of connect +- [`a287d84b82`](https://github.com/dashpay/dash/commit/a287d84b82) Merge #10858: [RPC] Add "errors" field to getblockchaininfo and unify "errors" field in get*info RPCs +- [`4af8db6d33`](https://github.com/dashpay/dash/commit/4af8db6d33) Merge #11031: [rpc] deprecate estimatefee +- [`8af0f8e2d8`](https://github.com/dashpay/dash/commit/8af0f8e2d8) Merge #11288: More user-friendly error message when partially signing +- [`4b6d804d64`](https://github.com/dashpay/dash/commit/4b6d804d64) Merge #11370: [test] Add getblockchaininfo functional test +- [`3ba12f24a1`](https://github.com/dashpay/dash/commit/3ba12f24a1) Merge #11301: add m_added_nodes to connman options +- [`df1366f384`](https://github.com/dashpay/dash/commit/df1366f384) Merge #11380: Remove outdated share/certs/ directory +- [`d6c4485412`](https://github.com/dashpay/dash/commit/d6c4485412) Merge #11351: Refactor: Modernize disallowed copy constructors/assignment +- [`6cf675807e`](https://github.com/dashpay/dash/commit/6cf675807e) Merge #10888: range-based loops and const qualifications in net.cpp +- [`dac2112dd0`](https://github.com/dashpay/dash/commit/dac2112dd0) Merge #11323: mininode: add an optimistic write and disable nagle +- [`9aac579ade`](https://github.com/dashpay/dash/commit/9aac579ade) [tests] Remove Comparison Test Framework +- [`02f1e98b50`](https://github.com/dashpay/dash/commit/02f1e98b50) [tests] Remove bip9-softforks.py +- [`d570557920`](https://github.com/dashpay/dash/commit/d570557920) Fix whitespaces to make linter happy +- [`ffcb2f63a1`](https://github.com/dashpay/dash/commit/ffcb2f63a1) More of 11300 +- [`7f14febfb4`](https://github.com/dashpay/dash/commit/7f14febfb4) Fixes after 10753 +- [`66dd61d54d`](https://github.com/dashpay/dash/commit/66dd61d54d) More of 10753 +- [`5f8bcacd7f`](https://github.com/dashpay/dash/commit/5f8bcacd7f) More of 10793 +- [`5857ec7154`](https://github.com/dashpay/dash/commit/5857ec7154) More of 10969 +- [`0b15551e3d`](https://github.com/dashpay/dash/commit/0b15551e3d) More of 10680 +- [`b03608d5c2`](https://github.com/dashpay/dash/commit/b03608d5c2) Merge #11469: fix typo in comment of chain.cpp +- [`07de9ee889`](https://github.com/dashpay/dash/commit/07de9ee889) Merge #11408: Trivial: Fix parameter name typo in ErasePurpose walletdb method +- [`177b520b38`](https://github.com/dashpay/dash/commit/177b520b38) Merge #11392: Fix stale link in gitian-building.md +- [`f9b5bae111`](https://github.com/dashpay/dash/commit/f9b5bae111) Merge #11390: [docs] document scripted-diff +- [`44b47017ef`](https://github.com/dashpay/dash/commit/44b47017ef) Merge #11385: Remove some unused functions and methods +- [`c8081ae192`](https://github.com/dashpay/dash/commit/c8081ae192) Merge #11132: Document assumptions that are being made to avoid NULL pointer dereferences +- [`218f65d208`](https://github.com/dashpay/dash/commit/218f65d208) Merge #11340: Trivial: Fix validation comments +- [`45d1923490`](https://github.com/dashpay/dash/commit/45d1923490) Merge #11330: Trivial: Fix comments for DEFAULT_WHITELIST[FORCE]RELAY +- [`99ccb6ebdd`](https://github.com/dashpay/dash/commit/99ccb6ebdd) Merge #10767: [wallet] Clarify wallet initialization / destruction interface +- [`ec496efdb9`](https://github.com/dashpay/dash/commit/ec496efdb9) Merge #11238: Add assertions before potential null deferences +- [`5d4e6dc9ae`](https://github.com/dashpay/dash/commit/5d4e6dc9ae) keep nVersion as 16 byte integer +- [`6962568009`](https://github.com/dashpay/dash/commit/6962568009) Merge #8330: Structure Packing Optimizations in C{,Mutable}Transaction +- [`b1774d8735`](https://github.com/dashpay/dash/commit/b1774d8735) Merge #11246: github-merge: Coalesce git fetches +- [`9f672f82a1`](https://github.com/dashpay/dash/commit/9f672f82a1) Merge #11173: RPC: Fix currency unit string in the help text +- [`fc4ab83c83`](https://github.com/dashpay/dash/commit/fc4ab83c83) Merge #10976: [MOVEONLY] Move some static functions out of wallet.h/cpp #10976 Move some static functions out of wallet.h/cpp +- [`fdf3f25a0a`](https://github.com/dashpay/dash/commit/fdf3f25a0a) Merge #10969: Declare single-argument (non-converting) constructors "explicit" +- [`b5e2f73fee`](https://github.com/dashpay/dash/commit/b5e2f73fee) contrib: Ignore historical release notes for whitespace check +- [`80f4de55fd`](https://github.com/dashpay/dash/commit/80f4de55fd) Merge #11300: Tests: Add a lint check for trailing whitespace *dash* no travis +- [`3ca3c65897`](https://github.com/dashpay/dash/commit/3ca3c65897) Merge #10753: test: Check RPC argument mapping *dash* no travis +- [`00167dea54`](https://github.com/dashpay/dash/commit/00167dea54) Merge #11078: [tests] Make p2p-leaktests.py more robust +- [`094298d187`](https://github.com/dashpay/dash/commit/094298d187) Merge #10691: Trivial: Properly comment about shutdown process in init.cpp file. +- [`b515e7c120`](https://github.com/dashpay/dash/commit/b515e7c120) Merge #11268: [macOS] remove Growl support, remove unused code +- [`b74f55143f`](https://github.com/dashpay/dash/commit/b74f55143f) Merge #11286: [depends] Don't build libevent sample code +- [`75ec11ee93`](https://github.com/dashpay/dash/commit/75ec11ee93) Merge #10793: Changing &var[0] to var.data() +- [`d7a2232103`](https://github.com/dashpay/dash/commit/d7a2232103) Merge #10916: add missing lock to crypter GetKeys() +- [`84e5b323b2`](https://github.com/dashpay/dash/commit/84e5b323b2) Merge #11232: Ensure that data types are consistent +- [`b1af3b8db9`](https://github.com/dashpay/dash/commit/b1af3b8db9) Merge #10680: Fix inconsistencies and grammar in various files +- [`e890851e7d`](https://github.com/dashpay/dash/commit/e890851e7d) Backport bitcoin#11817: [tests] Change feature_csv_activation.py to use BitcoinTestFramework (#3278) +- [`91b4a38398`](https://github.com/dashpay/dash/commit/91b4a38398) Backport bitcoin#11773: [tests] Change feature_block.py to use BitcoinTestFramework (#3277) +- [`ef59dce92e`](https://github.com/dashpay/dash/commit/ef59dce92e) Merge #14630: test_runner: Remove travis specific code +- [`430c0380fa`](https://github.com/dashpay/dash/commit/430c0380fa) Merge #13105: [qa] Add --failfast option to functional test runner +- [`6ac36b8865`](https://github.com/dashpay/dash/commit/6ac36b8865) Fix log output after backporting 10303 (#3275) +- [`2aa7ca5723`](https://github.com/dashpay/dash/commit/2aa7ca5723) Merge #10770: Drop upgrade-cancel callback registration for a generic "cancelable" +- [`e4fef1fd33`](https://github.com/dashpay/dash/commit/e4fef1fd33) Merge #10596: Add vConnect to CConnman::Options +- [`742d6e99fa`](https://github.com/dashpay/dash/commit/742d6e99fa) Merge #10303: [bench] Include ms/blk stats in Connect* benchmarks. +- [`c15a442663`](https://github.com/dashpay/dash/commit/c15a442663) Merge #10843: Add attribute [[noreturn]] (C++11) to functions that will not return +- [`4a8349e93f`](https://github.com/dashpay/dash/commit/4a8349e93f) Merge #11039: Avoid second mapWallet lookup +- [`50ea6c719c`](https://github.com/dashpay/dash/commit/50ea6c719c) PARTIAL Merge #12917: qa: Windows fixups for functional tests +- [`7214f07e78`](https://github.com/dashpay/dash/commit/7214f07e78) Merge #11125: Add bitcoin-cli -stdin and -stdinrpcpass functional tests +- [`59e212eaf8`](https://github.com/dashpay/dash/commit/59e212eaf8) Merge #11099: [RPC][mempool]: Add savemempool RPC +- [`09ed6a45e1`](https://github.com/dashpay/dash/commit/09ed6a45e1) Merge #11179: rpc: Push down safe mode checks +- [`3b620c356c`](https://github.com/dashpay/dash/commit/3b620c356c) Merge #10997: RPC: Add option -stdinrpcpass to bitcoin-cli to allow RPC password to be read from standard input +- [`7f1f623787`](https://github.com/dashpay/dash/commit/7f1f623787) Merge #11050: Avoid treating null RPC arguments different from missing arguments +- [`9044d5315b`](https://github.com/dashpay/dash/commit/9044d5315b) Merge #11156: Fix memory leaks in qt/guiutil.cpp +- [`1d2cd24824`](https://github.com/dashpay/dash/commit/1d2cd24824) Merge #10911: [qt] Fix typo and access key in optionsdialog.ui +- [`73eac47d3c`](https://github.com/dashpay/dash/commit/73eac47d3c) Merge #10845: Remove unreachable code +- [`ce2eeaef5f`](https://github.com/dashpay/dash/commit/ce2eeaef5f) Merge #10777: [tests] Avoid redundant assignments. Remove unused variables +- [`561ec27683`](https://github.com/dashpay/dash/commit/561ec27683) Merge #10781: Python cleanups +- [`62b2f3a317`](https://github.com/dashpay/dash/commit/62b2f3a317) Merge #10809: optim: mark a few classes final +- [`7954cc3dbd`](https://github.com/dashpay/dash/commit/7954cc3dbd) Merge #10901: Fix constness of ArgsManager methods +- [`6984c98882`](https://github.com/dashpay/dash/commit/6984c98882) Merge #10645: Use nullptr (C++11) instead of zero (0) as the null pointer constant +- [`013de95158`](https://github.com/dashpay/dash/commit/013de95158) Merge #10965: Replace deprecated throw() with noexcept specifier (C++11) +- [`8302bd5479`](https://github.com/dashpay/dash/commit/8302bd5479) Merge #9964: Add const to methods that do not modify the object for which it is called +- [`67073009f3`](https://github.com/dashpay/dash/commit/67073009f3) Merge #10964: Pass SendCoinsRecipient (208 bytes) by reference +- [`73c1cc6674`](https://github.com/dashpay/dash/commit/73c1cc6674) Merge #10682: Trivial: Move the AreInputsStandard documentation next to its implementation +- [`4789d90589`](https://github.com/dashpay/dash/commit/4789d90589) Merge #11219: [docs] explain how to recompile a modified unit test +- [`10f7c5f066`](https://github.com/dashpay/dash/commit/10f7c5f066) Merge #11135: Update developer notes with RPC response guidelines +- [`c9dbb1325b`](https://github.com/dashpay/dash/commit/c9dbb1325b) Merge #11143: Fix include path for bitcoin-config.h +- [`806849470b`](https://github.com/dashpay/dash/commit/806849470b) Merge #11164: Fix boost headers included as user instead of system headers +- [`e14eb40b50`](https://github.com/dashpay/dash/commit/e14eb40b50) Merge #11236: Add note on translations to CONTRIBUTING.md +- [`c30597daed`](https://github.com/dashpay/dash/commit/c30597daed) Merge #10701: Remove the virtual specifier for functions with the override specifier +- [`3954aa4f9f`](https://github.com/dashpay/dash/commit/3954aa4f9f) Merge #11144: Move local include to before system includes +- [`f659cc97ac`](https://github.com/dashpay/dash/commit/f659cc97ac) Merge #11161: Remove redundant explicitly defined copy ctors +- [`5f42ab3858`](https://github.com/dashpay/dash/commit/5f42ab3858) Merge #11138: Compat: Simplify bswap_16 implementation +- [`ba2ed60c34`](https://github.com/dashpay/dash/commit/ba2ed60c34) Merge #11169: [GUI] Make tabs toolbar no longer have a context menu +- [`eb0de04d62`](https://github.com/dashpay/dash/commit/eb0de04d62) Merge #11160: Improve versionbits_computeblockversion test code consistency +- [`0486e5796f`](https://github.com/dashpay/dash/commit/0486e5796f) Merge #11155: Trivial: Documentation fixes for CVectorWriter ctors +- [`101ee66073`](https://github.com/dashpay/dash/commit/101ee66073) Merge #11151: Fix header guards using reserved identifiers +- [`d33ee8b1cd`](https://github.com/dashpay/dash/commit/d33ee8b1cd) Merge #11112: [developer-notes] By default, declare single-argument constructors "explicit" +- [`e58fed348f`](https://github.com/dashpay/dash/commit/e58fed348f) Merge #10679: Document the non-DER-conformance of one test in tx_valid.json. +- [`1273fc2795`](https://github.com/dashpay/dash/commit/1273fc2795) Merge #11007: wallet: Fix potential memory leak when loading a corrupted wallet file +- [`7253eb2829`](https://github.com/dashpay/dash/commit/7253eb2829) Merge #11058: Comments: More comments on functions/globals in standard.h. +- [`6095fcc653`](https://github.com/dashpay/dash/commit/6095fcc653) Merge #11026: Bugfix: Use testnet RequireStandard for -acceptnonstdtxn default +- [`7654c786b6`](https://github.com/dashpay/dash/commit/7654c786b6) Merge #11094: Docs: Hash in ZMQ hash is raw bytes, not hex +- [`9d58c98753`](https://github.com/dashpay/dash/commit/9d58c98753) Merge #11066: Document the preference of nullptr over NULL or (void*)0 +- [`95e494983c`](https://github.com/dashpay/dash/commit/95e494983c) Merge #10878: Docs: Fix Markdown formatting issues in init.md +- [`16b1585d50`](https://github.com/dashpay/dash/commit/16b1585d50) Merge #11071: Use static_assert(…, …) (C++11) instead of assert(…) where appropriate +- [`972a0498e7`](https://github.com/dashpay/dash/commit/972a0498e7) Merge #11011: [Trivial] Add a comment on the use of prevector in script. +- [`c9b20f027f`](https://github.com/dashpay/dash/commit/c9b20f027f) Merge #10956: Fix typos +- [`1ba944c55e`](https://github.com/dashpay/dash/commit/1ba944c55e) Merge #10705: Trivial: spelling fixes +- [`cca4376fbd`](https://github.com/dashpay/dash/commit/cca4376fbd) Merge #10917: developer-notes: add reference to snake_case and PascalCase +- [`191a6d9431`](https://github.com/dashpay/dash/commit/191a6d9431) Merge #10461: Update style guide +- [`1972089df1`](https://github.com/dashpay/dash/commit/1972089df1) Merge #11008: Enable disablesafemode by default. diff --git a/doc/release-notes/dash/release-notes-0.16.0.1 b/doc/release-notes/dash/release-notes-0.16.0.1 new file mode 100644 index 0000000000..22d74b0866 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.16.0.1 @@ -0,0 +1,653 @@ +Dash Core version 0.16 +====================== + +Release is now available from: + + + +This is a new major version release, bringing new features, various bugfixes +and other improvements. + +This release is mandatory for all nodes. + +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/Dash-Qt (on Mac) or +dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading +from version 0.13 should not require any additional actions. + +When upgrading from a version prior to 0.14.0.3, the +first startup of Dash Core will run a migration process which can take a few +minutes to finish. After the migration, a downgrade to an older version is only +possible with a reindex (or reindex-chainstate). + +Downgrade warning +----------------- + +### Downgrade to a version < 0.14.0.3 + +Downgrading to a version older than 0.14.0.3 is no longer supported due to +changes in the "evodb" database format. If you need to use an older version, +you must either reindex or re-sync the whole chain. + +### Downgrade of masternodes to < 0.16 + +Starting with this release, masternodes will verify the protocol version of other +masternodes. This will result in PoSe punishment/banning for outdated masternodes, +so downgrading is not recommended. + +Notable changes +=============== + +Block Reward Reallocation +------------------------- +This version implements Block Reward Reallocation which was proposed in order +to slow the growth rate of Dash’s circulating supply by encouraging the +formation of masternodes and was voted in by the network. The resulting allocation +will split all non-proposal block rewards 40% toward miners and 60% toward +masternodes in the end-state once the transition period is complete. + +The reallocation will take place over 4.5 years with a total of 18 reallocation +periods between the start and end state. The transition is being made gradually +to avoid market volatility and minimize network disruption. + +Note that this is a hardfork which must be activated by miners. To do this they +should start creating blocks signalling bit 5 in the `version` field of the block header. + +### Reallocation periods + +Each reallocation period will last three superblock cycles (approximately one +quarter). The following table shows the split of the non-proposal block rewards during +each period. + +|Event|Miner|Masternode| +|--|-----|-----| +|Now|50.0%|50.0%| +|1 |48.7%|51.3%| +|2 |47.4%|52.6%| +|3 |46.7%|53.3%| +|4 |46.0%|54.0%| +|5 |45.4%|54.6%| +|6 |44.8%|55.2%| +|7 |44.3%|55.7%| +|8 |43.8%|56.2%| +|9 |43.3%|56.7%| +|10|42.8%|57.2%| +|11|42.3%|57.7%| +|12|41.8%|58.2%| +|13|41.5%|58.5%| +|14|41.2%|58.8%| +|15|40.9%|59.1%| +|16|40.6%|59.4%| +|17|40.3%|59.7%| +|18|40.1%|59.9%| +|End|40.0%|60.0%| + +Dynamic Activation Thresholds +----------------------------- +In Dash we have used lower thresholds (80% vs 95% in BTC) to activate upgrades +via a BIP9-like mechanism for quite some time. While it's preferable to have as much +of the network hashrate signal update readiness as possible, this can result in +quite lengthy upgrades if one large non-upgraded entity stalls +all progress. Simply lowering thresholds even further can result in network +upgrades occurring too quickly and potentially introducing network instability. This version +implements BIP9-like dynamic activation thresholds which drop from some initial +level to a minimally acceptable one over time at an increasing rate. This provides +a safe non-blocking way of activating proposals. + +This mechanism applies to the Block Reward Reallocation proposal mentioned above. +Its initial threshold is 80% and it will decrease to a minimum of 60% over the +course of 10 periods. Each period is 4032 blocks (approximately one week). + +Concentrated Recovery +--------------------- +In the current system, signature shares are propagated to all LLMQ members +until one of them has collected enough shares to recover the signature. All +members keep propagating and verifying each share until this recovered signature +is propagated in the LLMQ. This causes significant load on the LLMQ and results +in decreased throughput. + +This new system initially sends all shares to a single deterministically selected node, +so that this node can recover the signature and propagate the recovered signature. +This way only the recovered signature needs to be propagated and verified by all +members. After sending their share to this node, each member waits for a +timeout and then sends their share to another deterministically selected member. +This process is repeated until a recovered signature is finally created and propagated. + +This timeout begins at two seconds and increases exponentially up to ten seconds +(i.e. `2,4,8,10,10`) for each node that times out. This is to minimize the time +taken to generate a signature if the recovery node is down, while also +minimizing the traffic generated when the network is under stress. + +The new system is activated with the newly added `SPORK_21_QUORUM_ALL_CONNECTED` +which has two hardcoded values with a special meaning: `0` activates Concentrated +Recovery for every LLMQ and `1` excludes `400_60` and `400_85` quorums. + +Increased number of masternode connections +------------------------------------------ +To implement "Concentrated Recovery", it is now necessary for all members of a LLMQ +to connect to all other members of the same LLMQ. This significantly increases the general +connection count for masternodes. Although these intra-quorum connections are less resource +intensive than normal p2p connections (as they only exchange LLMQ/masternode related +messages), masternode hardware and network requirements will still be higher than before. + +Initially this change will only be activated for the smaller LLMQs (50 members). +Eventually it may be activated for larger quorums (400 members). + +This is also controlled via `SPORK_21_QUORUM_ALL_CONNECTED`. + +Masternode Connection Probing +----------------------------- +While each LLMQ member must have a connection to each other member, it's not necessary +for all members to actually connect to all other members. This is because only +one of a pair of two masternodes need to initiate the connection while the other one can +wait for an incoming connection. Probing is done in the case where a masternode doesn't +really need an outbound connection, but still wants to verify that the other side +has its port open. This is done by initiating a short lived connection, waiting +for `MNAUTH` to succeed and then disconnecting again. + +After this process, each member of a LLMQ knows which members are unable to accept +connections, after which they will vote on these members to be "bad". + +Masternode Minimum Protocol Version Checks +------------------------------------------ +Members of LLMQs will now also check all other members for minimum protocol versions +while in DKG. If a masternode determines that another LLMQ member has a protocol +version that is too low, it will vote for the other member to be "bad". + +PoSe punishment/banning +----------------------- +If 80% of all LLMQ members voted for the same member to be bad, it is excluded +in the final stages of the DKG. This causes the bad masternode to get PoSe punished +and then eventually PoSe banned. + +Network performance improvements +-------------------------------- +This version of Dash Core includes multiple optimizations to the network and p2p message +handling code. The most important one is the introduction of `epoll` on linux-based +systems. This removes most of the CPU overhead caused by the sub-optimal use of `select`, +which could easily use up 50-80% of the CPU time spent in the network thread when many +connections were involved. + +Since these optimizations are exclusive to linux, it is possible that masternodes hosted +on windows servers will be unable to handle the network load and should consider migrating +to a linux based operating system. + +Other improvements were made to the p2p message handling code, so that LLMQ +related connections do less work than full/normal p2p connections. + +Wallet files +------------ +The `--wallet=` option now accepts full paths instead of requiring +wallets to be located in the `-walletdir` directory. + +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. + +When Dash Core 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 Dash Core is started +with any `--wallet=` options, there is no change in behavior, and the +name of any wallet is just its `` string. + +PrivateSend coin management improvements +---------------------------------------- +A new algorithm for the creation of mixing denominations was implemented which +should reduce the number of the smallest inputs created and give users more +control on soft and hard caps. A much more accurate fee management algorithm was +also implemented which should fix issues for users who have custom fees +specified in wallet config or in times when network is under load. + +There is a new "PrivateSend" tab in the GUI which allows spending fully +mixed coins only. The CoinControl feature was also improved to display coins +based on the tab it was opened in, to protect users from accidentally spending +mixed and non-mixed coins in the same transaction and to give better overview of +spendable mixed coins. + +PrivateSend Random Round Mixing +------------------------------- +Some potential attacks on PrivateSend assume that all inputs had been mixed +for the same number of rounds (up to 16). While this assumption alone is not +enough to break PrivateSend privacy, it could still provide some additional +information for other methods like cluster analysis and help to narrow results. + +With Random Round Mixing, an input will be mixed to N rounds like prior. However, +at this point, a salted hash of each input is used to pick ~50% of inputs to +be mixed for another round. This rule is then executed again on the new inputs. +This results in an exponential decay where if you mix a set +of inputs, half of those inputs will be mixed for N rounds, 1/4 will be mixed N+1, +1/8 will be mixed N+2, etc. Current implementation caps it at N+3 which results +in mixing an average of N+0.875 rounds and sounds like a reasonable compromise +given the privacy gains. + +GUI changes +----------- +All dialogs, tabs, icons, colors and interface elements were reworked to improve +user experience, let the wallet look more consistent and to make the GUI more +flexible. There is a new "Appearance setup" dialog that will show up on the first start +of this version and a corresponding tab has been added to the options which allows the +user to pick a theme and to tweak the font family, the font weight and the font size. +This feature specifically should help users who had font size/scaling issues previously. + +For advanced users and developers there is a new way to control the wallet's look +by specifying a path to custom css files via `--custom-css-dir`. Additionally, the new +`--debug-ui` will force Dash Core to reload the custom css files as soon as they get updated +which makes it possible to see and debug all css adjustments live in the running GUI. + +From now on the "Pay To" field in "Send" and "PrivateSend" tabs also accepts Dash URIs. +The Raptoreum address and the amount from the URI are assigned to corresponding fields automatically +if a Dash URI gets pasted into the field. + +Sporks +------ +Two new sporks were introduced in this version: +- `SPORK_21_QUORUM_ALL_CONNECTED` allows to control Concentrated Recovery and +Masternode Probing activation; +- `SPORK_22_PS_MORE_PARTICIPANTS` raises the number of users that can participate +in a single PrivateSend mixing transaction to 20. + +Sporks `SPORK_15_DETERMINISTIC_MNS_ENABLED`, `SPORK_16_INSTANTSEND_AUTOLOCKS` +and `SPORK_20_INSTANTSEND_LLMQ_BASED` which were previously deprecated in v0.15 +are completely removed now. `SPORK_6_NEW_SIGS` was never activated on mainnet +and was also removed in this version. + +Build system +------------ +The minimum version of the GCC compiler required to compile Dash Core is now 4.8. +The minimum version of Qt is now 5.5.1. Some packages in `depends/` as well as +`secp256k1` and `leveldb` subtrees were updated to newer versions. + +RPC changes +----------- +There are a few changes in existing RPC interfaces in this release: +- `getpeerinfo` has new field `masternode` to indicate whether connection was + due to masternode connection attempt +- `getprivatesendinfo` `denoms` field was replaced by `denoms_goal` and + `denoms_hardcap` +- `listunspent` has new filter option `coinType` to be able to filter different + types of coins (all, mixed etc.) +- `protx diff` returns more detailed information about new quorums +- `quorum dkgstatus` shows `quorumConnections` for each LLMQ with detailed + information about each participating masternode +- `quorum sign` has an optional `quorumHash` argument to pick the exact quorum +- `socketevents` in `getnetworkinfo` rpc shows the socket events mode, + either `epoll`, `poll` or `select` + +There are also new RPC commands: +- `quorum selectquorum` returns the quorum that would/should sign a request + +There are also new RPC commands backported from Bitcoin Core 0.16: +- `help-console` for more info about using console in Qt +- `loadwallet` loads a wallet from a wallet file or directory +- `rescanblockchain` rescans the local blockchain for wallet related transactions +- `savemempool` dumps the mempool to disk + +Please check Bitcoin Core 0.16 release notes in a [section](#backports-from-bitcoin-core-016) +below and `help ` in rpc for more information. + +Command-line options +-------------------- +Changes in existing cmd-line options: + +New cmd-line options: +- `--custom-css-dir` +- `--debug-ui` +- `--disablegovernance` +- `--font-family` +- `--font-scale` +- `--font-weight-bold` +- `--font-weight-normal` +- `--llmqdevnetparams` +- `--llmqtestparams` +- `--privatesenddenomsgoal` +- `--privatesenddenomshardcap` +- `--socketevents` + +Few cmd-line options are no longer supported: +- `--litemode` +- `--privatesenddenoms` + +There are also new command-line options backported from Bitcoin Core 0.16: +- `--addrmantest` +- `--debuglogfile` +- `--deprecatedrpc` +- `--enablebip61` +- `--getinfo` +- `--stdinrpcpass` + +Please check Bitcoin Core 0.16 release notes in a [section](#backports-from-bitcoin-core-016) +below and `Help -> Command-line options` in Qt wallet or `dashd --help` for more information. + +Backports from Bitcoin Core 0.16 +-------------------------------- + +Most of the changes between Bitcoin Core 0.15 and Bitcoin Core 0.16 have been +backported into Dash Core 0.16. We only excluded backports which do not align +with Dash, like SegWit or RBF related changes. + +You can read about changes brought by backporting from Bitcoin Core 0.16 in +following docs: +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.16.0.md +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.16.1.md +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.16.2.md + +Some other individual PRs were backported from versions 0.17+, you can find the +full list of backported PRs and additional fixes in [release-notes-0.16-backports.md](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16-backports.md) + +Miscellaneous +------------- +A lot of refactoring, code cleanups and other small fixes were done in this release. + +0.16 Change log +=============== + +See detailed [set of changes](https://github.com/dashpay/dash/compare/v0.15.0.0...dashpay:v0.16.0.1). + +- [`37fe9a6e2f`](https://github.com/dashpay/dash/commit/37fe9a6e2f) Fix mempool sync (#3725) +- [`69b77765ba`](https://github.com/dashpay/dash/commit/69b77765ba) qt: Fix font family updates (#3746) +- [`cf2da32ffe`](https://github.com/dashpay/dash/commit/cf2da32ffe) qt: Fix font size and scaling issues (#3734) +- [`586f166499`](https://github.com/dashpay/dash/commit/586f166499) qt: Fix Recent transactions list height (#3744) +- [`12d0782071`](https://github.com/dashpay/dash/commit/12d0782071) Translations 2020-09 (#3736) +- [`fc8ca6ad50`](https://github.com/dashpay/dash/commit/fc8ca6ad50) Bump few things and update man pages for v0.16 (#3737) +- [`8e6706dede`](https://github.com/dashpay/dash/commit/8e6706dede) qt: Add PrivateSend tab in OptionsDialog, allow to show/hide PS UI (#3717) +- [`dbfdf8cb15`](https://github.com/dashpay/dash/commit/dbfdf8cb15) qt: Finetune OverviewPage (#3715) +- [`9028712b60`](https://github.com/dashpay/dash/commit/9028712b60) qt: Finetune TransactionsView (#3710) +- [`f4e3bf95d0`](https://github.com/dashpay/dash/commit/f4e3bf95d0) qt: Finetune CoinControlDialog + bitcoin#14828 (#3701) +- [`e405f553b9`](https://github.com/dashpay/dash/commit/e405f553b9) RPC: Update getprivatesendinfo help (#3727) +- [`b4a78fb285`](https://github.com/dashpay/dash/commit/b4a78fb285) Fix testnet icon (#3726) +- [`3650ee6556`](https://github.com/dashpay/dash/commit/3650ee6556) qt: Remove unused assets (#3721) +- [`cb078422cd`](https://github.com/dashpay/dash/commit/cb078422cd) qt: Finetune RPCConsole (#3720) +- [`a198a74a4f`](https://github.com/dashpay/dash/commit/a198a74a4f) privatesend: Avoid interacting with keypool in CTransactionBuilder ctor (#3723) +- [`f601122cbd`](https://github.com/dashpay/dash/commit/f601122cbd) qt: Hide remaining PrivateSend UI if PrivateSend is not enabled (#3716) +- [`c7896eb657`](https://github.com/dashpay/dash/commit/c7896eb657) qt: Disable missing macOS focus rects in AddressBookPage (#3711) +- [`c136522e84`](https://github.com/dashpay/dash/commit/c136522e84) qt: Finetune Options Dialog (#3709) +- [`bb0d5d4808`](https://github.com/dashpay/dash/commit/bb0d5d4808) qt: Make sure send confirmation dialog uses correct font settings (#3714) +- [`ab5ffe3c11`](https://github.com/dashpay/dash/commit/ab5ffe3c11) qt: Use scaled font size for all QToolTip instances (#3708) +- [`42b606ea76`](https://github.com/dashpay/dash/commit/42b606ea76) qt: Make sure font size in TransactionDescDialog is adjusted properly (#3707) +- [`8fa280140a`](https://github.com/dashpay/dash/commit/8fa280140a) qt: Tweak few strings (#3706) +- [`a70056c5a8`](https://github.com/dashpay/dash/commit/a70056c5a8) privatesend: Implement Random Round Mixing (#3661) +- [`eb163c53a5`](https://github.com/dashpay/dash/commit/eb163c53a5) Implement dynamic activation thresholds (#3692) +- [`7d6aba47cf`](https://github.com/dashpay/dash/commit/7d6aba47cf) Implement Block Reward Reallocation (#3691) +- [`19aab3a1d8`](https://github.com/dashpay/dash/commit/19aab3a1d8) qt|wallet: Fix "Use available balance" for PrivateSend (#3700) +- [`37af70a188`](https://github.com/dashpay/dash/commit/37af70a188) Merge #13622: Remove mapRequest tracking that just effects Qt display. (#3694) +- [`e13c746a7d`](https://github.com/dashpay/dash/commit/e13c746a7d) chainparams: Remove llmq_50_60 from regtest (#3696) +- [`f2c1a9213c`](https://github.com/dashpay/dash/commit/f2c1a9213c) Fix two potential issues in the way pending islocks are processed (#3678) +- [`01a3a6c81a`](https://github.com/dashpay/dash/commit/01a3a6c81a) qt: Finetune ModalOverlay (#3699) +- [`16f9d94404`](https://github.com/dashpay/dash/commit/16f9d94404) qt: Make sure the statusbar reflects internal states correct (#3698) +- [`9e425d66c6`](https://github.com/dashpay/dash/commit/9e425d66c6) Partially merge #3604: +- [`2bb94c73eb`](https://github.com/dashpay/dash/commit/2bb94c73eb) masternode|net|rpc: Improve masternode sync process (#3690) +- [`aa81a06264`](https://github.com/dashpay/dash/commit/aa81a06264) masternode|rpc: Remove unused code (#3689) +- [`2e92237865`](https://github.com/dashpay/dash/commit/2e92237865) qt: Improved status bar (#3688) +- [`54ed089f97`](https://github.com/dashpay/dash/commit/54ed089f97) test: Implement unit tests for CTransactionBuilder (#3677) +- [`ab0f789be6`](https://github.com/dashpay/dash/commit/ab0f789be6) wallet: Fix and improve CWallet::CreateTransaction (#3668) +- [`dd55609d6b`](https://github.com/dashpay/dash/commit/dd55609d6b) test: Implement unit tests for CWallet::CreateTransaction (#3667) +- [`9c988d5b5a`](https://github.com/dashpay/dash/commit/9c988d5b5a) privatesend|wallet|qt: Improve calculations in CreateDenominated/MakeCollateralAmounts (#3657) +- [`ba2dcb0399`](https://github.com/dashpay/dash/commit/ba2dcb0399) qt: Update assets and colorize them theme related (#3574) +- [`50d7a2fecf`](https://github.com/dashpay/dash/commit/50d7a2fecf) qt: Ignore GUIUtil::updateFont calls until GUIUtil::loadFonts was called (#3687) +- [`608f481a9c`](https://github.com/dashpay/dash/commit/608f481a9c) qt: Fix block update signals/slots in BitcoinGUI and SendCoinsDialog (#3685) +- [`25e4fed75b`](https://github.com/dashpay/dash/commit/25e4fed75b) QT: add last block hash to debug ui (#3672) +- [`195dcad1ee`](https://github.com/dashpay/dash/commit/195dcad1ee) trivial/docs: minor adjustments to PrivateSend help text (#3669) +- [`b1a35b2d32`](https://github.com/dashpay/dash/commit/b1a35b2d32) Merge #13007: test: Fix dangling wallet pointer in vpwallets (#3666) +- [`f9bf42cb90`](https://github.com/dashpay/dash/commit/f9bf42cb90) Harden spork6 logic then remove spork6 (#3662) +- [`604d6a4225`](https://github.com/dashpay/dash/commit/604d6a4225) Fix some translation issues (#3656) +- [`60d298376b`](https://github.com/dashpay/dash/commit/60d298376b) Fix crash on splash screen when wallet fails to load (#3629) +- [`ca76dd0868`](https://github.com/dashpay/dash/commit/ca76dd0868) qt: Give PrivateSend separate instances of SendCoinsDialog + CCoinControl (#3625) +- [`0969c2d268`](https://github.com/dashpay/dash/commit/0969c2d268) qt: Splashscreen redesign (#3613) +- [`966be38c79`](https://github.com/dashpay/dash/commit/966be38c79) qt: Make sure stylesheet updates of -debug-ui are activated (#3623) +- [`0ed7f1672c`](https://github.com/dashpay/dash/commit/0ed7f1672c) qt: Add missing placeholders (#3575) +- [`103fda2cb7`](https://github.com/dashpay/dash/commit/103fda2cb7) qt: Fix appearancewidget.h to make lint-include-guards.sh happy (#3627) +- [`2cc36dffde`](https://github.com/dashpay/dash/commit/2cc36dffde) qt: Drop PlatformStyle (#3573) +- [`b073ae9853`](https://github.com/dashpay/dash/commit/b073ae9853) qt: Redesign scrollbar styles (#3571) +- [`1a2867f886`](https://github.com/dashpay/dash/commit/1a2867f886) qt: Introduce appearance tab and setup dialog (#3568) +- [`d44611bc2b`](https://github.com/dashpay/dash/commit/d44611bc2b) qt: General qt/c++ related fixes and updates (#3562) +- [`d22ab43910`](https://github.com/dashpay/dash/commit/d22ab43910) qt: Introduce platform specific css sections (#3570) +- [`a16cfa77de`](https://github.com/dashpay/dash/commit/a16cfa77de) qt: Redesign BitcoinAmountField (#3569) +- [`7db9909a17`](https://github.com/dashpay/dash/commit/7db9909a17) qt: Introduce runtime theme changes (#3559) +- [`b3738648d6`](https://github.com/dashpay/dash/commit/b3738648d6) qt: General CSS related redesigns (#3563) +- [`1dea248d0d`](https://github.com/dashpay/dash/commit/1dea248d0d) qt: Make use of GUIUtil themed colors/styles (#3561) +- [`06d69d74c2`](https://github.com/dashpay/dash/commit/06d69d74c2) qt: Replace usage of QTabBar with custom replacement (#3560) +- [`edfc3a4646`](https://github.com/dashpay/dash/commit/edfc3a4646) qt: Call GUIUtil::loadFonts earlier (#3593) +- [`f371e4771c`](https://github.com/dashpay/dash/commit/f371e4771c) qt: Add -debug-ui command line parameter (#3558) +- [`dde4ab5f84`](https://github.com/dashpay/dash/commit/dde4ab5f84) qt: Add -custom-css-dir commmand line parameter (#3557) +- [`067622764c`](https://github.com/dashpay/dash/commit/067622764c) qt: Disable macOS system focus rectangles for dash themes (#3556) +- [`d296cbdca1`](https://github.com/dashpay/dash/commit/d296cbdca1) qt: Implement application wide font management (#3555) +- [`b409254587`](https://github.com/dashpay/dash/commit/b409254587) qt: Redesign of the main toolbar (#3554) +- [`c5fcc811d6`](https://github.com/dashpay/dash/commit/c5fcc811d6) qt: Generalized css files, simple design changes, added scripts to keep track of color usage (#3508) +- [`8aeeb97995`](https://github.com/dashpay/dash/commit/8aeeb97995) Print exception origin in crash messages (#3653) +- [`bd5c047e28`](https://github.com/dashpay/dash/commit/bd5c047e28) Implement a safer version of GetCrashInfoFromException (#3652) +- [`4414b5c3c7`](https://github.com/dashpay/dash/commit/4414b5c3c7) llmq: Fix spork check in CSigSharesManager::ForceReAnnouncement (#3650) +- [`c232f2a12d`](https://github.com/dashpay/dash/commit/c232f2a12d) [RPC] Show address of fundDest when no funds (#3649) +- [`abe3d578b2`](https://github.com/dashpay/dash/commit/abe3d578b2) Include protocol version into MNAUTH (#3631) +- [`4db8968d4a`](https://github.com/dashpay/dash/commit/4db8968d4a) rpc: update help text for BLS operator key arguments (#3628) +- [`bbb0064b60`](https://github.com/dashpay/dash/commit/bbb0064b60) init: Fix crash due to -litemode and improve its deprecation warning (#3626) +- [`8d99e7836c`](https://github.com/dashpay/dash/commit/8d99e7836c) Fix `-resetguisettings` (#3624) +- [`508fc2db4b`](https://github.com/dashpay/dash/commit/508fc2db4b) privatesend: Increase max participants to 20 (#3610) +- [`f425316eed`](https://github.com/dashpay/dash/commit/f425316eed) util: Change TraceThread's "name" type: "const char*" -> "const std::string" (#3609) +- [`a170c649b8`](https://github.com/dashpay/dash/commit/a170c649b8) Fail GetTransaction when the block from txindex is not in mapBlockIndex (#3606) +- [`62c3fb5748`](https://github.com/dashpay/dash/commit/62c3fb5748) llmq: Fix thread handling in CDKGSessionManager and CDKGSessionHandler (#3601) +- [`aa3bec6106`](https://github.com/dashpay/dash/commit/aa3bec6106) evo: Avoid some unnecessary copying in BuildNewListFromBlock (#3594) +- [`6a249f59b6`](https://github.com/dashpay/dash/commit/6a249f59b6) Merge #13564: [wallet] loadwallet shouldn't create new wallets. (#3592) +- [`b45b1373a0`](https://github.com/dashpay/dash/commit/b45b1373a0) Prefer creating larger denoms at the second step of CreateDenominated (#3589) +- [`bac02d0c9a`](https://github.com/dashpay/dash/commit/bac02d0c9a) More accurate fee calculation in CreateDenominated (#3588) +- [`baf18a35d5`](https://github.com/dashpay/dash/commit/baf18a35d5) More pruning improvements (#3579) +- [`0297eb428a`](https://github.com/dashpay/dash/commit/0297eb428a) Change litemode to disablegovernance (#3577) +- [`da38e2bf83`](https://github.com/dashpay/dash/commit/da38e2bf83) Change litemode from disabling all Dash specific features to disabling governance validation (#3488) +- [`772b6bfe7c`](https://github.com/dashpay/dash/commit/772b6bfe7c) Disable new connection handling and concentrated recovery for large LLMQs (#3548) +- [`c72bc354f8`](https://github.com/dashpay/dash/commit/c72bc354f8) contrib: Move dustinface.pgp into contrib/gitian-keys (#3547) +- [`0b70380fff`](https://github.com/dashpay/dash/commit/0b70380fff) Fix argument handling for devnets (#3549) +- [`5f9fc5edb6`](https://github.com/dashpay/dash/commit/5f9fc5edb6) Fix CSigningManager::VerifyRecoveredSig (#3546) +- [`00486eca06`](https://github.com/dashpay/dash/commit/00486eca06) Use exponential backoff timeouts for recovery (#3535) +- [`34c354eaad`](https://github.com/dashpay/dash/commit/34c354eaad) Dont skip sendmessages (#3534) +- [`40814d945e`](https://github.com/dashpay/dash/commit/40814d945e) Avoid overriding validation states, return more specific states in some cases (#3541) +- [`139f589b6f`](https://github.com/dashpay/dash/commit/139f589b6f) Don'd send SENDXXX messages to fMasternode connections (#3537) +- [`f064964678`](https://github.com/dashpay/dash/commit/f064964678) Only relay DKG messages to intra quorum connection members (#3536) +- [`d08b971ddb`](https://github.com/dashpay/dash/commit/d08b971ddb) Use correct CURRENT_VERSION constants when creating ProTx-es via rpc (#3524) +- [`4ae57a2276`](https://github.com/dashpay/dash/commit/4ae57a2276) qt: Fix label updates in SendCoinsEntry (#3523) +- [`1a54f0392d`](https://github.com/dashpay/dash/commit/1a54f0392d) Revert "implemented labeler which automatically adds RPC label to anything modifying RPC files (#3499)" (#3517) +- [`acff9998e1`](https://github.com/dashpay/dash/commit/acff9998e1) UpgradeDBIfNeeded failure should require reindexing (#3516) +- [`1163fc70a2`](https://github.com/dashpay/dash/commit/1163fc70a2) Use correct CURRENT_VERSION constants when checking ProTx version (#3515) +- [`0186fdfe60`](https://github.com/dashpay/dash/commit/0186fdfe60) Fix chainlock scheduler handling (#3514) +- [`b4008ee4fc`](https://github.com/dashpay/dash/commit/b4008ee4fc) Some Dashification (#3513) +- [`ab5aeed920`](https://github.com/dashpay/dash/commit/ab5aeed920) Optimize MN lists cache (#3506) +- [`91d9329093`](https://github.com/dashpay/dash/commit/91d9329093) Make CDeterministicMN::internalId private to make sure it's set/accessed properly (#3505) +- [`232430fac9`](https://github.com/dashpay/dash/commit/232430fac9) Fix ProcessNewBlock vs EnforceBestChainLock deadlocks in ActivateBestChain (#3492) +- [`fe98b81b80`](https://github.com/dashpay/dash/commit/fe98b81b80) implemented labeler which automatically adds RPC label to anything modifying RPC files (#3499) +- [`ae5faf23da`](https://github.com/dashpay/dash/commit/ae5faf23da) Better error handling while processing special txes (#3504) +- [`13a45ec323`](https://github.com/dashpay/dash/commit/13a45ec323) rpc: Validate provided keys for query_options parameter in listunspent (#3507) +- [`9b47883884`](https://github.com/dashpay/dash/commit/9b47883884) contrib: Added dustinface.pgp (#3502) +- [`048503bcb5`](https://github.com/dashpay/dash/commit/048503bcb5) qt: Some UI fixes and improvements (#3500) +- [`8fcda67a54`](https://github.com/dashpay/dash/commit/8fcda67a54) Remove spork 15, 16, 20 (#3493) +- [`9d3546baee`](https://github.com/dashpay/dash/commit/9d3546baee) Reintroduce mixing hard cap for all but the largest denom (#3489) +- [`397630a82c`](https://github.com/dashpay/dash/commit/397630a82c) CI: Fix Gitlab nowallet and release builds (#3491) +- [`a9fc40fb0a`](https://github.com/dashpay/dash/commit/a9fc40fb0a) add "Verifying a Rebase" section to CONTRIBUTING.md (#3487) +- [`0c5c99243a`](https://github.com/dashpay/dash/commit/0c5c99243a) rpc/wallet: Add coinType to queryOptions of listunspent (#3483) +- [`3a56ed9ca6`](https://github.com/dashpay/dash/commit/3a56ed9ca6) Fix NO_WALLET=1 build (#3490) +- [`926087aac6`](https://github.com/dashpay/dash/commit/926087aac6) Implement significantly improved createdenominations algorithm (#3479) +- [`fe208c98e3`](https://github.com/dashpay/dash/commit/fe208c98e3) Feat. request for Dash Platform: `quorum sign` rpc command with additional quorumHash #3424 (#3446) +- [`4c1f65baae`](https://github.com/dashpay/dash/commit/4c1f65baae) Fix #3241 UX/UI - Introduce PrivateSend tab which allows to spend fully mixed coins only (#3442) +- [`f46617dbab`](https://github.com/dashpay/dash/commit/f46617dbab) add litemode information to help texts regarding CL/IS and change getbestchainlock to throw an error if running in litemode (#3478) +- [`5cabc8f5ca`](https://github.com/dashpay/dash/commit/5cabc8f5ca) Introduce ONLY_PRIVATESEND coin type to select fully mixed coins only (#3459) +- [`e0ff9af2b0`](https://github.com/dashpay/dash/commit/e0ff9af2b0) qt: Allow and process URIs pasted to the payTo field of SendCoinsEntry (#3475) +- [`1c20160933`](https://github.com/dashpay/dash/commit/1c20160933) Fix `gobject submit`: replace request params with txidFee (#3471) +- [`970c23d6e6`](https://github.com/dashpay/dash/commit/970c23d6e6) Remove logic for forcing chainlocks without DIP8 activation on testnet (#3470) +- [`ae15299117`](https://github.com/dashpay/dash/commit/ae15299117) Feature request #3425 - Add information to "protx diff" (#3468) +- [`017c4779ca`](https://github.com/dashpay/dash/commit/017c4779ca) Fix recovery from coin db crashes (and dbcrash.py test) (#3467) +- [`d5f403d3fd`](https://github.com/dashpay/dash/commit/d5f403d3fd) Refactor and fix GetRealOutpointPrivateSendRounds (#3460) +- [`c06838e205`](https://github.com/dashpay/dash/commit/c06838e205) Streamline processing of pool state updates (#3458) +- [`538fcf2f1b`](https://github.com/dashpay/dash/commit/538fcf2f1b) Disable qt menu heuristics for openConfEditorAction (#3466) +- [`6e1c5480cd`](https://github.com/dashpay/dash/commit/6e1c5480cd) qt: Maximize the window if the dock icon gets clicked on macOS (#3465) +- [`3960d622c5`](https://github.com/dashpay/dash/commit/3960d622c5) Fix incorrect nTimeFirstKey reset due to missing count of hd pubkeys (#3461) +- [`d0bb30838b`](https://github.com/dashpay/dash/commit/d0bb30838b) Various (mostly trivial) PS fixes (#3457) +- [`b0963b079e`](https://github.com/dashpay/dash/commit/b0963b079e) Fix deadlocks (#3456) +- [`bdce58756a`](https://github.com/dashpay/dash/commit/bdce58756a) Remove duplicated condition check (#3464) +- [`10baa4a857`](https://github.com/dashpay/dash/commit/10baa4a857) Update Windows build instructions (#3453) +- [`7fdc4c7b0d`](https://github.com/dashpay/dash/commit/7fdc4c7b0d) change miniupnp lib server (#3452) +- [`911b5580e4`](https://github.com/dashpay/dash/commit/911b5580e4) Fix typo in error log when EPOLL_CTL_ADD fails for wakeup pipe (#3451) +- [`b775fa263f`](https://github.com/dashpay/dash/commit/b775fa263f) Lower DEFAULT_PRIVATESEND_DENOMS (#3434) +- [`d59deea77b`](https://github.com/dashpay/dash/commit/d59deea77b) Implement epoll support (#3445) +- [`96faa8155e`](https://github.com/dashpay/dash/commit/96faa8155e) Don't disconnect masternode probes for a few seconds (#3449) +- [`608aed3d85`](https://github.com/dashpay/dash/commit/608aed3d85) Don't try to connect to itself through CLLMQUtils::GetQuorumConnections (#3448) +- [`d663f48085`](https://github.com/dashpay/dash/commit/d663f48085) Lower SELECT_TIMEOUT_MILLISECONDS for USE_WAKEUP_PIPE case (#3444) +- [`f5f4ccbf24`](https://github.com/dashpay/dash/commit/f5f4ccbf24) Refactor/Prepare CConnman for upcoming epoll support (#3432) +- [`93aa640af8`](https://github.com/dashpay/dash/commit/93aa640af8) Fix #3248: use blue logo for Traditional theme (#3441) +- [`3d24290bcb`](https://github.com/dashpay/dash/commit/3d24290bcb) Take all nodes into account in check_sigs instead of just just masternodes (#3437) +- [`d06597a421`](https://github.com/dashpay/dash/commit/d06597a421) [Trivial] Adjust some text in mnauth.cpp (#3413) +- [`de931a25a3`](https://github.com/dashpay/dash/commit/de931a25a3) Wakeup wakeup-pipe when new peers are added (#3433) +- [`75a1968c96`](https://github.com/dashpay/dash/commit/75a1968c96) Fix abandonconflict.py (#3436) +- [`2610e718cd`](https://github.com/dashpay/dash/commit/2610e718cd) Don't delete MN list snapshots and diffs from DB when reorgs take place (#3435) +- [`6d83b0a053`](https://github.com/dashpay/dash/commit/6d83b0a053) Make socketevents mode (poll vs select) configurable via parameter (#3431) +- [`9a8caf0986`](https://github.com/dashpay/dash/commit/9a8caf0986) Remove fix for fNetworkActive vs OpenNetworkConnection race (#3430) +- [`96ed9fae39`](https://github.com/dashpay/dash/commit/96ed9fae39) Fix flushing of rejects before disconnecting (#3429) +- [`0cb385c567`](https://github.com/dashpay/dash/commit/0cb385c567) Improve network connections related logging (#3428) +- [`d5092c44cb`](https://github.com/dashpay/dash/commit/d5092c44cb) Make sure that cleanup is not triggered too early in llmq-signing.py (#3427) +- [`402b13907d`](https://github.com/dashpay/dash/commit/402b13907d) Only call DisconnectNodes once per second (#3421) +- [`ee995ef02a`](https://github.com/dashpay/dash/commit/ee995ef02a) Implement more reliable wait_for_masternode_probes in test framework (#3422) +- [`755a23ca00`](https://github.com/dashpay/dash/commit/755a23ca00) Always pass current mocktime to started nodes (#3423) +- [`1e30054b9e`](https://github.com/dashpay/dash/commit/1e30054b9e) Avoid calling SendMessages (and others) for all nodes all the time (#3420) +- [`8aa85c084b`](https://github.com/dashpay/dash/commit/8aa85c084b) Deterministically choose which peers to drop on duplicate MNAUTH (#3419) +- [`79f0bb1033`](https://github.com/dashpay/dash/commit/79f0bb1033) Fix crash in validateaddress (#3418) +- [`d032d02f10`](https://github.com/dashpay/dash/commit/d032d02f10) Multiple fixes for failing tests (#3410) +- [`e20c63f535`](https://github.com/dashpay/dash/commit/e20c63f535) A few simple/trivial optimizations (#3398) +- [`9bcdeaea57`](https://github.com/dashpay/dash/commit/9bcdeaea57) Avoid unnecessary processing/verification of reconstructed recovered signatures (#3399) +- [`38556a3d49`](https://github.com/dashpay/dash/commit/38556a3d49) Don't try to connect to masternodes that we already have a connection to (#3401) +- [`0e56e32c22`](https://github.com/dashpay/dash/commit/0e56e32c22) Add cache for CBlockTreeDB::HasTxIndex (#3402) +- [`2dff0501e9`](https://github.com/dashpay/dash/commit/2dff0501e9) Remove semaphore for masternode connections (#3403) +- [`c1d9dd553a`](https://github.com/dashpay/dash/commit/c1d9dd553a) FindDevNetGenesisBlock remove unused arg (#3405) +- [`c7b6eb851d`](https://github.com/dashpay/dash/commit/c7b6eb851d) Implement "concentrated recovery" of LLMQ signatures (#3389) +- [`e518ce4e13`](https://github.com/dashpay/dash/commit/e518ce4e13) Increase DIP0008 bip9 window by 10 years (#3391) +- [`1aba86567b`](https://github.com/dashpay/dash/commit/1aba86567b) Implement checking of open ports and min proto versions in DKGs (#3390) +- [`f43cdbc586`](https://github.com/dashpay/dash/commit/f43cdbc586) Gradually bump mocktime in wait_for_quorum_connections (#3388) +- [`3b904a0fa1`](https://github.com/dashpay/dash/commit/3b904a0fa1) Add a note about dash_hash under dependencies in test/README.md (#3386) +- [`b0668028b6`](https://github.com/dashpay/dash/commit/b0668028b6) Implement more randomized behavior in GetQuorumConnections (#3385) +- [`27dfb5a34d`](https://github.com/dashpay/dash/commit/27dfb5a34d) Move wait_proc into wait_for_quorum_connections (#3384) +- [`ff6f391aea`](https://github.com/dashpay/dash/commit/ff6f391aea) Refactor Gitlab builds to use multiple stages (#3377) +- [`a5a3e51554`](https://github.com/dashpay/dash/commit/a5a3e51554) Let all LLMQ members connect to each other instead of only a few ones (#3380) +- [`8ab1a3734a`](https://github.com/dashpay/dash/commit/8ab1a3734a) Bump mocktime each time waiting for phase1 fails (#3383) +- [`c68b5f68aa`](https://github.com/dashpay/dash/commit/c68b5f68aa) Hold CEvoDB lock while iterating mined commitments (#3379) +- [`deba865b17`](https://github.com/dashpay/dash/commit/deba865b17) Also verify quorumHash when waiting for DKG phases (#3382) +- [`17ece14f40`](https://github.com/dashpay/dash/commit/17ece14f40) Better/more logging for DKGs (#3381) +- [`80be2520a2`](https://github.com/dashpay/dash/commit/80be2520a2) Call FlushBackgroundCallbacks before resetting CConnman (#3378) +- [`b6bdb8be9e`](https://github.com/dashpay/dash/commit/b6bdb8be9e) Faster opening of masternode connections (#3375) +- [`94bcf85347`](https://github.com/dashpay/dash/commit/94bcf85347) Refactor and unify quorum connection handling #(3367) +- [`c0bb06e766`](https://github.com/dashpay/dash/commit/c0bb06e766) Multiple fixes for masternode connection handling (#3366) +- [`f2ece1031f`](https://github.com/dashpay/dash/commit/f2ece1031f) Remove logging for waking of select() (#3370) +- [`cf1f8c3825`](https://github.com/dashpay/dash/commit/cf1f8c3825) Support devnets in mininode (#3364) +- [`f7ddee13a1`](https://github.com/dashpay/dash/commit/f7ddee13a1) Fix possible segfault (#3365) +- [`40cdfe8662`](https://github.com/dashpay/dash/commit/40cdfe8662) Add peer id to "socket send error" logs (#3363) +- [`0fa2e14065`](https://github.com/dashpay/dash/commit/0fa2e14065) Fix issues introduced with asynchronous signal handling (#3369) +- [`b188c5c25e`](https://github.com/dashpay/dash/commit/b188c5c25e) Refactor some PrivateSend related code to use WalletModel instead of accessing the wallet directly from qt (#3345) +- [`05c134c783`](https://github.com/dashpay/dash/commit/05c134c783) Fix litemode vs txindex check (#3355) +- [`c9881d0fc7`](https://github.com/dashpay/dash/commit/c9881d0fc7) Masternodes must have required services enabled (#3350) +- [`c6911354a1`](https://github.com/dashpay/dash/commit/c6911354a1) Few tweaks for MakeCollateralAmounts (#3347) +- [`56b8e97ab0`](https://github.com/dashpay/dash/commit/56b8e97ab0) Refactor and simplify PrivateSend based on the fact that we only mix one single denom at a time now (#3346) +- [`af7cfd6a3f`](https://github.com/dashpay/dash/commit/af7cfd6a3f) Define constants for keys in CInstantSendDb and use them instead of plain strings (#3352) +- [`d52020926c`](https://github.com/dashpay/dash/commit/d52020926c) Fix undefined behaviour in stacktrace printing. (#3357) +- [`4c01ca4573`](https://github.com/dashpay/dash/commit/4c01ca4573) Fix undefined behaviour in unordered_limitedmap and optimise it. (#3349) +- [`2521970a50`](https://github.com/dashpay/dash/commit/2521970a50) Add configurable devnet quorums (#3348) +- [`7075083f07`](https://github.com/dashpay/dash/commit/7075083f07) Detect mixing session readiness based on the current pool state (#3328) +- [`dff9430c5e`](https://github.com/dashpay/dash/commit/dff9430c5e) A couple of fixes for CActiveMasternodeManager::Init() (#3326) +- [`4af4432cb9`](https://github.com/dashpay/dash/commit/4af4432cb9) Add unit tests for CPrivateSend::IsCollateralAmount (#3310) +- [`e1fc378ffd`](https://github.com/dashpay/dash/commit/e1fc378ffd) Refactor PS a bit and make it so that the expected flow for mixing is to time out and fallback (#3309) +- [`39b17fd5a3`](https://github.com/dashpay/dash/commit/39b17fd5a3) Fix empty TRAVIS_COMMIT_RANGE for one-commit-branch builds in Travis (#3299) +- [`f4f9f918dc`](https://github.com/dashpay/dash/commit/f4f9f918dc) [Pretty Trivial] Adjust some comments (#3252) +- [`26fb682e91`](https://github.com/dashpay/dash/commit/26fb682e91) Speed up prevector initialization and vector assignment from prevectors (#3274) +- [`9c9cac6d67`](https://github.com/dashpay/dash/commit/9c9cac6d67) Show quorum connections in "quorum dkgstatus" and use it in mine_quorum (#3271) +- [`aca6af0a0e`](https://github.com/dashpay/dash/commit/aca6af0a0e) Use smaller LLMQs in regtest (#3269) +- [`88da298082`](https://github.com/dashpay/dash/commit/88da298082) Add -whitelist to all nodes in smartfees.py (#3273) +- [`7e3ed76e54`](https://github.com/dashpay/dash/commit/7e3ed76e54) Make a deep copy of extra_args before modifying it in set_dash_test_params (#3270) +- [`75bb7ec022`](https://github.com/dashpay/dash/commit/75bb7ec022) A few optimizations/speedups for Dash related tests (#3268) +- [`2afdc8c6f6`](https://github.com/dashpay/dash/commit/2afdc8c6f6) Add basic PrivateSend RPC Tests (#3254) +- [`dc656e3236`](https://github.com/dashpay/dash/commit/dc656e3236) Bump version to 0.16 on develop (#3239) +- [`c182c6ca14`](https://github.com/dashpay/dash/commit/c182c6ca14) Upgrade Travis to use Bionic instead of Trusty (#3143) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- 10xcryptodev +- Akshay CM (akshaynexus) +- Alexander Block (codablock) +- Cofresi +- CryptoTeller +- dustinface (xdustinface) +- konez2k +- Oleg Girko (OlegGirko) +- PastaPastaPasta +- Piter Bushnell (Bushstar) +- sc-9310 +- thephez +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Dash was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of masternodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Dash. + +Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.15.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15.0.0.md) released Febrary/18/2020 +- [v0.14.0.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md) released December/08/2019 +- [v0.14.0.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md) released November/22/2019 +- [v0.14.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/dash/release-notes-0.16.0.1.md b/doc/release-notes/dash/release-notes-0.16.0.1.md new file mode 100644 index 0000000000..22d74b0866 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.16.0.1.md @@ -0,0 +1,653 @@ +Dash Core version 0.16 +====================== + +Release is now available from: + + + +This is a new major version release, bringing new features, various bugfixes +and other improvements. + +This release is mandatory for all nodes. + +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/Dash-Qt (on Mac) or +dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading +from version 0.13 should not require any additional actions. + +When upgrading from a version prior to 0.14.0.3, the +first startup of Dash Core will run a migration process which can take a few +minutes to finish. After the migration, a downgrade to an older version is only +possible with a reindex (or reindex-chainstate). + +Downgrade warning +----------------- + +### Downgrade to a version < 0.14.0.3 + +Downgrading to a version older than 0.14.0.3 is no longer supported due to +changes in the "evodb" database format. If you need to use an older version, +you must either reindex or re-sync the whole chain. + +### Downgrade of masternodes to < 0.16 + +Starting with this release, masternodes will verify the protocol version of other +masternodes. This will result in PoSe punishment/banning for outdated masternodes, +so downgrading is not recommended. + +Notable changes +=============== + +Block Reward Reallocation +------------------------- +This version implements Block Reward Reallocation which was proposed in order +to slow the growth rate of Dash’s circulating supply by encouraging the +formation of masternodes and was voted in by the network. The resulting allocation +will split all non-proposal block rewards 40% toward miners and 60% toward +masternodes in the end-state once the transition period is complete. + +The reallocation will take place over 4.5 years with a total of 18 reallocation +periods between the start and end state. The transition is being made gradually +to avoid market volatility and minimize network disruption. + +Note that this is a hardfork which must be activated by miners. To do this they +should start creating blocks signalling bit 5 in the `version` field of the block header. + +### Reallocation periods + +Each reallocation period will last three superblock cycles (approximately one +quarter). The following table shows the split of the non-proposal block rewards during +each period. + +|Event|Miner|Masternode| +|--|-----|-----| +|Now|50.0%|50.0%| +|1 |48.7%|51.3%| +|2 |47.4%|52.6%| +|3 |46.7%|53.3%| +|4 |46.0%|54.0%| +|5 |45.4%|54.6%| +|6 |44.8%|55.2%| +|7 |44.3%|55.7%| +|8 |43.8%|56.2%| +|9 |43.3%|56.7%| +|10|42.8%|57.2%| +|11|42.3%|57.7%| +|12|41.8%|58.2%| +|13|41.5%|58.5%| +|14|41.2%|58.8%| +|15|40.9%|59.1%| +|16|40.6%|59.4%| +|17|40.3%|59.7%| +|18|40.1%|59.9%| +|End|40.0%|60.0%| + +Dynamic Activation Thresholds +----------------------------- +In Dash we have used lower thresholds (80% vs 95% in BTC) to activate upgrades +via a BIP9-like mechanism for quite some time. While it's preferable to have as much +of the network hashrate signal update readiness as possible, this can result in +quite lengthy upgrades if one large non-upgraded entity stalls +all progress. Simply lowering thresholds even further can result in network +upgrades occurring too quickly and potentially introducing network instability. This version +implements BIP9-like dynamic activation thresholds which drop from some initial +level to a minimally acceptable one over time at an increasing rate. This provides +a safe non-blocking way of activating proposals. + +This mechanism applies to the Block Reward Reallocation proposal mentioned above. +Its initial threshold is 80% and it will decrease to a minimum of 60% over the +course of 10 periods. Each period is 4032 blocks (approximately one week). + +Concentrated Recovery +--------------------- +In the current system, signature shares are propagated to all LLMQ members +until one of them has collected enough shares to recover the signature. All +members keep propagating and verifying each share until this recovered signature +is propagated in the LLMQ. This causes significant load on the LLMQ and results +in decreased throughput. + +This new system initially sends all shares to a single deterministically selected node, +so that this node can recover the signature and propagate the recovered signature. +This way only the recovered signature needs to be propagated and verified by all +members. After sending their share to this node, each member waits for a +timeout and then sends their share to another deterministically selected member. +This process is repeated until a recovered signature is finally created and propagated. + +This timeout begins at two seconds and increases exponentially up to ten seconds +(i.e. `2,4,8,10,10`) for each node that times out. This is to minimize the time +taken to generate a signature if the recovery node is down, while also +minimizing the traffic generated when the network is under stress. + +The new system is activated with the newly added `SPORK_21_QUORUM_ALL_CONNECTED` +which has two hardcoded values with a special meaning: `0` activates Concentrated +Recovery for every LLMQ and `1` excludes `400_60` and `400_85` quorums. + +Increased number of masternode connections +------------------------------------------ +To implement "Concentrated Recovery", it is now necessary for all members of a LLMQ +to connect to all other members of the same LLMQ. This significantly increases the general +connection count for masternodes. Although these intra-quorum connections are less resource +intensive than normal p2p connections (as they only exchange LLMQ/masternode related +messages), masternode hardware and network requirements will still be higher than before. + +Initially this change will only be activated for the smaller LLMQs (50 members). +Eventually it may be activated for larger quorums (400 members). + +This is also controlled via `SPORK_21_QUORUM_ALL_CONNECTED`. + +Masternode Connection Probing +----------------------------- +While each LLMQ member must have a connection to each other member, it's not necessary +for all members to actually connect to all other members. This is because only +one of a pair of two masternodes need to initiate the connection while the other one can +wait for an incoming connection. Probing is done in the case where a masternode doesn't +really need an outbound connection, but still wants to verify that the other side +has its port open. This is done by initiating a short lived connection, waiting +for `MNAUTH` to succeed and then disconnecting again. + +After this process, each member of a LLMQ knows which members are unable to accept +connections, after which they will vote on these members to be "bad". + +Masternode Minimum Protocol Version Checks +------------------------------------------ +Members of LLMQs will now also check all other members for minimum protocol versions +while in DKG. If a masternode determines that another LLMQ member has a protocol +version that is too low, it will vote for the other member to be "bad". + +PoSe punishment/banning +----------------------- +If 80% of all LLMQ members voted for the same member to be bad, it is excluded +in the final stages of the DKG. This causes the bad masternode to get PoSe punished +and then eventually PoSe banned. + +Network performance improvements +-------------------------------- +This version of Dash Core includes multiple optimizations to the network and p2p message +handling code. The most important one is the introduction of `epoll` on linux-based +systems. This removes most of the CPU overhead caused by the sub-optimal use of `select`, +which could easily use up 50-80% of the CPU time spent in the network thread when many +connections were involved. + +Since these optimizations are exclusive to linux, it is possible that masternodes hosted +on windows servers will be unable to handle the network load and should consider migrating +to a linux based operating system. + +Other improvements were made to the p2p message handling code, so that LLMQ +related connections do less work than full/normal p2p connections. + +Wallet files +------------ +The `--wallet=` option now accepts full paths instead of requiring +wallets to be located in the `-walletdir` directory. + +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. + +When Dash Core 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 Dash Core is started +with any `--wallet=` options, there is no change in behavior, and the +name of any wallet is just its `` string. + +PrivateSend coin management improvements +---------------------------------------- +A new algorithm for the creation of mixing denominations was implemented which +should reduce the number of the smallest inputs created and give users more +control on soft and hard caps. A much more accurate fee management algorithm was +also implemented which should fix issues for users who have custom fees +specified in wallet config or in times when network is under load. + +There is a new "PrivateSend" tab in the GUI which allows spending fully +mixed coins only. The CoinControl feature was also improved to display coins +based on the tab it was opened in, to protect users from accidentally spending +mixed and non-mixed coins in the same transaction and to give better overview of +spendable mixed coins. + +PrivateSend Random Round Mixing +------------------------------- +Some potential attacks on PrivateSend assume that all inputs had been mixed +for the same number of rounds (up to 16). While this assumption alone is not +enough to break PrivateSend privacy, it could still provide some additional +information for other methods like cluster analysis and help to narrow results. + +With Random Round Mixing, an input will be mixed to N rounds like prior. However, +at this point, a salted hash of each input is used to pick ~50% of inputs to +be mixed for another round. This rule is then executed again on the new inputs. +This results in an exponential decay where if you mix a set +of inputs, half of those inputs will be mixed for N rounds, 1/4 will be mixed N+1, +1/8 will be mixed N+2, etc. Current implementation caps it at N+3 which results +in mixing an average of N+0.875 rounds and sounds like a reasonable compromise +given the privacy gains. + +GUI changes +----------- +All dialogs, tabs, icons, colors and interface elements were reworked to improve +user experience, let the wallet look more consistent and to make the GUI more +flexible. There is a new "Appearance setup" dialog that will show up on the first start +of this version and a corresponding tab has been added to the options which allows the +user to pick a theme and to tweak the font family, the font weight and the font size. +This feature specifically should help users who had font size/scaling issues previously. + +For advanced users and developers there is a new way to control the wallet's look +by specifying a path to custom css files via `--custom-css-dir`. Additionally, the new +`--debug-ui` will force Dash Core to reload the custom css files as soon as they get updated +which makes it possible to see and debug all css adjustments live in the running GUI. + +From now on the "Pay To" field in "Send" and "PrivateSend" tabs also accepts Dash URIs. +The Raptoreum address and the amount from the URI are assigned to corresponding fields automatically +if a Dash URI gets pasted into the field. + +Sporks +------ +Two new sporks were introduced in this version: +- `SPORK_21_QUORUM_ALL_CONNECTED` allows to control Concentrated Recovery and +Masternode Probing activation; +- `SPORK_22_PS_MORE_PARTICIPANTS` raises the number of users that can participate +in a single PrivateSend mixing transaction to 20. + +Sporks `SPORK_15_DETERMINISTIC_MNS_ENABLED`, `SPORK_16_INSTANTSEND_AUTOLOCKS` +and `SPORK_20_INSTANTSEND_LLMQ_BASED` which were previously deprecated in v0.15 +are completely removed now. `SPORK_6_NEW_SIGS` was never activated on mainnet +and was also removed in this version. + +Build system +------------ +The minimum version of the GCC compiler required to compile Dash Core is now 4.8. +The minimum version of Qt is now 5.5.1. Some packages in `depends/` as well as +`secp256k1` and `leveldb` subtrees were updated to newer versions. + +RPC changes +----------- +There are a few changes in existing RPC interfaces in this release: +- `getpeerinfo` has new field `masternode` to indicate whether connection was + due to masternode connection attempt +- `getprivatesendinfo` `denoms` field was replaced by `denoms_goal` and + `denoms_hardcap` +- `listunspent` has new filter option `coinType` to be able to filter different + types of coins (all, mixed etc.) +- `protx diff` returns more detailed information about new quorums +- `quorum dkgstatus` shows `quorumConnections` for each LLMQ with detailed + information about each participating masternode +- `quorum sign` has an optional `quorumHash` argument to pick the exact quorum +- `socketevents` in `getnetworkinfo` rpc shows the socket events mode, + either `epoll`, `poll` or `select` + +There are also new RPC commands: +- `quorum selectquorum` returns the quorum that would/should sign a request + +There are also new RPC commands backported from Bitcoin Core 0.16: +- `help-console` for more info about using console in Qt +- `loadwallet` loads a wallet from a wallet file or directory +- `rescanblockchain` rescans the local blockchain for wallet related transactions +- `savemempool` dumps the mempool to disk + +Please check Bitcoin Core 0.16 release notes in a [section](#backports-from-bitcoin-core-016) +below and `help ` in rpc for more information. + +Command-line options +-------------------- +Changes in existing cmd-line options: + +New cmd-line options: +- `--custom-css-dir` +- `--debug-ui` +- `--disablegovernance` +- `--font-family` +- `--font-scale` +- `--font-weight-bold` +- `--font-weight-normal` +- `--llmqdevnetparams` +- `--llmqtestparams` +- `--privatesenddenomsgoal` +- `--privatesenddenomshardcap` +- `--socketevents` + +Few cmd-line options are no longer supported: +- `--litemode` +- `--privatesenddenoms` + +There are also new command-line options backported from Bitcoin Core 0.16: +- `--addrmantest` +- `--debuglogfile` +- `--deprecatedrpc` +- `--enablebip61` +- `--getinfo` +- `--stdinrpcpass` + +Please check Bitcoin Core 0.16 release notes in a [section](#backports-from-bitcoin-core-016) +below and `Help -> Command-line options` in Qt wallet or `dashd --help` for more information. + +Backports from Bitcoin Core 0.16 +-------------------------------- + +Most of the changes between Bitcoin Core 0.15 and Bitcoin Core 0.16 have been +backported into Dash Core 0.16. We only excluded backports which do not align +with Dash, like SegWit or RBF related changes. + +You can read about changes brought by backporting from Bitcoin Core 0.16 in +following docs: +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.16.0.md +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.16.1.md +- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.16.2.md + +Some other individual PRs were backported from versions 0.17+, you can find the +full list of backported PRs and additional fixes in [release-notes-0.16-backports.md](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16-backports.md) + +Miscellaneous +------------- +A lot of refactoring, code cleanups and other small fixes were done in this release. + +0.16 Change log +=============== + +See detailed [set of changes](https://github.com/dashpay/dash/compare/v0.15.0.0...dashpay:v0.16.0.1). + +- [`37fe9a6e2f`](https://github.com/dashpay/dash/commit/37fe9a6e2f) Fix mempool sync (#3725) +- [`69b77765ba`](https://github.com/dashpay/dash/commit/69b77765ba) qt: Fix font family updates (#3746) +- [`cf2da32ffe`](https://github.com/dashpay/dash/commit/cf2da32ffe) qt: Fix font size and scaling issues (#3734) +- [`586f166499`](https://github.com/dashpay/dash/commit/586f166499) qt: Fix Recent transactions list height (#3744) +- [`12d0782071`](https://github.com/dashpay/dash/commit/12d0782071) Translations 2020-09 (#3736) +- [`fc8ca6ad50`](https://github.com/dashpay/dash/commit/fc8ca6ad50) Bump few things and update man pages for v0.16 (#3737) +- [`8e6706dede`](https://github.com/dashpay/dash/commit/8e6706dede) qt: Add PrivateSend tab in OptionsDialog, allow to show/hide PS UI (#3717) +- [`dbfdf8cb15`](https://github.com/dashpay/dash/commit/dbfdf8cb15) qt: Finetune OverviewPage (#3715) +- [`9028712b60`](https://github.com/dashpay/dash/commit/9028712b60) qt: Finetune TransactionsView (#3710) +- [`f4e3bf95d0`](https://github.com/dashpay/dash/commit/f4e3bf95d0) qt: Finetune CoinControlDialog + bitcoin#14828 (#3701) +- [`e405f553b9`](https://github.com/dashpay/dash/commit/e405f553b9) RPC: Update getprivatesendinfo help (#3727) +- [`b4a78fb285`](https://github.com/dashpay/dash/commit/b4a78fb285) Fix testnet icon (#3726) +- [`3650ee6556`](https://github.com/dashpay/dash/commit/3650ee6556) qt: Remove unused assets (#3721) +- [`cb078422cd`](https://github.com/dashpay/dash/commit/cb078422cd) qt: Finetune RPCConsole (#3720) +- [`a198a74a4f`](https://github.com/dashpay/dash/commit/a198a74a4f) privatesend: Avoid interacting with keypool in CTransactionBuilder ctor (#3723) +- [`f601122cbd`](https://github.com/dashpay/dash/commit/f601122cbd) qt: Hide remaining PrivateSend UI if PrivateSend is not enabled (#3716) +- [`c7896eb657`](https://github.com/dashpay/dash/commit/c7896eb657) qt: Disable missing macOS focus rects in AddressBookPage (#3711) +- [`c136522e84`](https://github.com/dashpay/dash/commit/c136522e84) qt: Finetune Options Dialog (#3709) +- [`bb0d5d4808`](https://github.com/dashpay/dash/commit/bb0d5d4808) qt: Make sure send confirmation dialog uses correct font settings (#3714) +- [`ab5ffe3c11`](https://github.com/dashpay/dash/commit/ab5ffe3c11) qt: Use scaled font size for all QToolTip instances (#3708) +- [`42b606ea76`](https://github.com/dashpay/dash/commit/42b606ea76) qt: Make sure font size in TransactionDescDialog is adjusted properly (#3707) +- [`8fa280140a`](https://github.com/dashpay/dash/commit/8fa280140a) qt: Tweak few strings (#3706) +- [`a70056c5a8`](https://github.com/dashpay/dash/commit/a70056c5a8) privatesend: Implement Random Round Mixing (#3661) +- [`eb163c53a5`](https://github.com/dashpay/dash/commit/eb163c53a5) Implement dynamic activation thresholds (#3692) +- [`7d6aba47cf`](https://github.com/dashpay/dash/commit/7d6aba47cf) Implement Block Reward Reallocation (#3691) +- [`19aab3a1d8`](https://github.com/dashpay/dash/commit/19aab3a1d8) qt|wallet: Fix "Use available balance" for PrivateSend (#3700) +- [`37af70a188`](https://github.com/dashpay/dash/commit/37af70a188) Merge #13622: Remove mapRequest tracking that just effects Qt display. (#3694) +- [`e13c746a7d`](https://github.com/dashpay/dash/commit/e13c746a7d) chainparams: Remove llmq_50_60 from regtest (#3696) +- [`f2c1a9213c`](https://github.com/dashpay/dash/commit/f2c1a9213c) Fix two potential issues in the way pending islocks are processed (#3678) +- [`01a3a6c81a`](https://github.com/dashpay/dash/commit/01a3a6c81a) qt: Finetune ModalOverlay (#3699) +- [`16f9d94404`](https://github.com/dashpay/dash/commit/16f9d94404) qt: Make sure the statusbar reflects internal states correct (#3698) +- [`9e425d66c6`](https://github.com/dashpay/dash/commit/9e425d66c6) Partially merge #3604: +- [`2bb94c73eb`](https://github.com/dashpay/dash/commit/2bb94c73eb) masternode|net|rpc: Improve masternode sync process (#3690) +- [`aa81a06264`](https://github.com/dashpay/dash/commit/aa81a06264) masternode|rpc: Remove unused code (#3689) +- [`2e92237865`](https://github.com/dashpay/dash/commit/2e92237865) qt: Improved status bar (#3688) +- [`54ed089f97`](https://github.com/dashpay/dash/commit/54ed089f97) test: Implement unit tests for CTransactionBuilder (#3677) +- [`ab0f789be6`](https://github.com/dashpay/dash/commit/ab0f789be6) wallet: Fix and improve CWallet::CreateTransaction (#3668) +- [`dd55609d6b`](https://github.com/dashpay/dash/commit/dd55609d6b) test: Implement unit tests for CWallet::CreateTransaction (#3667) +- [`9c988d5b5a`](https://github.com/dashpay/dash/commit/9c988d5b5a) privatesend|wallet|qt: Improve calculations in CreateDenominated/MakeCollateralAmounts (#3657) +- [`ba2dcb0399`](https://github.com/dashpay/dash/commit/ba2dcb0399) qt: Update assets and colorize them theme related (#3574) +- [`50d7a2fecf`](https://github.com/dashpay/dash/commit/50d7a2fecf) qt: Ignore GUIUtil::updateFont calls until GUIUtil::loadFonts was called (#3687) +- [`608f481a9c`](https://github.com/dashpay/dash/commit/608f481a9c) qt: Fix block update signals/slots in BitcoinGUI and SendCoinsDialog (#3685) +- [`25e4fed75b`](https://github.com/dashpay/dash/commit/25e4fed75b) QT: add last block hash to debug ui (#3672) +- [`195dcad1ee`](https://github.com/dashpay/dash/commit/195dcad1ee) trivial/docs: minor adjustments to PrivateSend help text (#3669) +- [`b1a35b2d32`](https://github.com/dashpay/dash/commit/b1a35b2d32) Merge #13007: test: Fix dangling wallet pointer in vpwallets (#3666) +- [`f9bf42cb90`](https://github.com/dashpay/dash/commit/f9bf42cb90) Harden spork6 logic then remove spork6 (#3662) +- [`604d6a4225`](https://github.com/dashpay/dash/commit/604d6a4225) Fix some translation issues (#3656) +- [`60d298376b`](https://github.com/dashpay/dash/commit/60d298376b) Fix crash on splash screen when wallet fails to load (#3629) +- [`ca76dd0868`](https://github.com/dashpay/dash/commit/ca76dd0868) qt: Give PrivateSend separate instances of SendCoinsDialog + CCoinControl (#3625) +- [`0969c2d268`](https://github.com/dashpay/dash/commit/0969c2d268) qt: Splashscreen redesign (#3613) +- [`966be38c79`](https://github.com/dashpay/dash/commit/966be38c79) qt: Make sure stylesheet updates of -debug-ui are activated (#3623) +- [`0ed7f1672c`](https://github.com/dashpay/dash/commit/0ed7f1672c) qt: Add missing placeholders (#3575) +- [`103fda2cb7`](https://github.com/dashpay/dash/commit/103fda2cb7) qt: Fix appearancewidget.h to make lint-include-guards.sh happy (#3627) +- [`2cc36dffde`](https://github.com/dashpay/dash/commit/2cc36dffde) qt: Drop PlatformStyle (#3573) +- [`b073ae9853`](https://github.com/dashpay/dash/commit/b073ae9853) qt: Redesign scrollbar styles (#3571) +- [`1a2867f886`](https://github.com/dashpay/dash/commit/1a2867f886) qt: Introduce appearance tab and setup dialog (#3568) +- [`d44611bc2b`](https://github.com/dashpay/dash/commit/d44611bc2b) qt: General qt/c++ related fixes and updates (#3562) +- [`d22ab43910`](https://github.com/dashpay/dash/commit/d22ab43910) qt: Introduce platform specific css sections (#3570) +- [`a16cfa77de`](https://github.com/dashpay/dash/commit/a16cfa77de) qt: Redesign BitcoinAmountField (#3569) +- [`7db9909a17`](https://github.com/dashpay/dash/commit/7db9909a17) qt: Introduce runtime theme changes (#3559) +- [`b3738648d6`](https://github.com/dashpay/dash/commit/b3738648d6) qt: General CSS related redesigns (#3563) +- [`1dea248d0d`](https://github.com/dashpay/dash/commit/1dea248d0d) qt: Make use of GUIUtil themed colors/styles (#3561) +- [`06d69d74c2`](https://github.com/dashpay/dash/commit/06d69d74c2) qt: Replace usage of QTabBar with custom replacement (#3560) +- [`edfc3a4646`](https://github.com/dashpay/dash/commit/edfc3a4646) qt: Call GUIUtil::loadFonts earlier (#3593) +- [`f371e4771c`](https://github.com/dashpay/dash/commit/f371e4771c) qt: Add -debug-ui command line parameter (#3558) +- [`dde4ab5f84`](https://github.com/dashpay/dash/commit/dde4ab5f84) qt: Add -custom-css-dir commmand line parameter (#3557) +- [`067622764c`](https://github.com/dashpay/dash/commit/067622764c) qt: Disable macOS system focus rectangles for dash themes (#3556) +- [`d296cbdca1`](https://github.com/dashpay/dash/commit/d296cbdca1) qt: Implement application wide font management (#3555) +- [`b409254587`](https://github.com/dashpay/dash/commit/b409254587) qt: Redesign of the main toolbar (#3554) +- [`c5fcc811d6`](https://github.com/dashpay/dash/commit/c5fcc811d6) qt: Generalized css files, simple design changes, added scripts to keep track of color usage (#3508) +- [`8aeeb97995`](https://github.com/dashpay/dash/commit/8aeeb97995) Print exception origin in crash messages (#3653) +- [`bd5c047e28`](https://github.com/dashpay/dash/commit/bd5c047e28) Implement a safer version of GetCrashInfoFromException (#3652) +- [`4414b5c3c7`](https://github.com/dashpay/dash/commit/4414b5c3c7) llmq: Fix spork check in CSigSharesManager::ForceReAnnouncement (#3650) +- [`c232f2a12d`](https://github.com/dashpay/dash/commit/c232f2a12d) [RPC] Show address of fundDest when no funds (#3649) +- [`abe3d578b2`](https://github.com/dashpay/dash/commit/abe3d578b2) Include protocol version into MNAUTH (#3631) +- [`4db8968d4a`](https://github.com/dashpay/dash/commit/4db8968d4a) rpc: update help text for BLS operator key arguments (#3628) +- [`bbb0064b60`](https://github.com/dashpay/dash/commit/bbb0064b60) init: Fix crash due to -litemode and improve its deprecation warning (#3626) +- [`8d99e7836c`](https://github.com/dashpay/dash/commit/8d99e7836c) Fix `-resetguisettings` (#3624) +- [`508fc2db4b`](https://github.com/dashpay/dash/commit/508fc2db4b) privatesend: Increase max participants to 20 (#3610) +- [`f425316eed`](https://github.com/dashpay/dash/commit/f425316eed) util: Change TraceThread's "name" type: "const char*" -> "const std::string" (#3609) +- [`a170c649b8`](https://github.com/dashpay/dash/commit/a170c649b8) Fail GetTransaction when the block from txindex is not in mapBlockIndex (#3606) +- [`62c3fb5748`](https://github.com/dashpay/dash/commit/62c3fb5748) llmq: Fix thread handling in CDKGSessionManager and CDKGSessionHandler (#3601) +- [`aa3bec6106`](https://github.com/dashpay/dash/commit/aa3bec6106) evo: Avoid some unnecessary copying in BuildNewListFromBlock (#3594) +- [`6a249f59b6`](https://github.com/dashpay/dash/commit/6a249f59b6) Merge #13564: [wallet] loadwallet shouldn't create new wallets. (#3592) +- [`b45b1373a0`](https://github.com/dashpay/dash/commit/b45b1373a0) Prefer creating larger denoms at the second step of CreateDenominated (#3589) +- [`bac02d0c9a`](https://github.com/dashpay/dash/commit/bac02d0c9a) More accurate fee calculation in CreateDenominated (#3588) +- [`baf18a35d5`](https://github.com/dashpay/dash/commit/baf18a35d5) More pruning improvements (#3579) +- [`0297eb428a`](https://github.com/dashpay/dash/commit/0297eb428a) Change litemode to disablegovernance (#3577) +- [`da38e2bf83`](https://github.com/dashpay/dash/commit/da38e2bf83) Change litemode from disabling all Dash specific features to disabling governance validation (#3488) +- [`772b6bfe7c`](https://github.com/dashpay/dash/commit/772b6bfe7c) Disable new connection handling and concentrated recovery for large LLMQs (#3548) +- [`c72bc354f8`](https://github.com/dashpay/dash/commit/c72bc354f8) contrib: Move dustinface.pgp into contrib/gitian-keys (#3547) +- [`0b70380fff`](https://github.com/dashpay/dash/commit/0b70380fff) Fix argument handling for devnets (#3549) +- [`5f9fc5edb6`](https://github.com/dashpay/dash/commit/5f9fc5edb6) Fix CSigningManager::VerifyRecoveredSig (#3546) +- [`00486eca06`](https://github.com/dashpay/dash/commit/00486eca06) Use exponential backoff timeouts for recovery (#3535) +- [`34c354eaad`](https://github.com/dashpay/dash/commit/34c354eaad) Dont skip sendmessages (#3534) +- [`40814d945e`](https://github.com/dashpay/dash/commit/40814d945e) Avoid overriding validation states, return more specific states in some cases (#3541) +- [`139f589b6f`](https://github.com/dashpay/dash/commit/139f589b6f) Don'd send SENDXXX messages to fMasternode connections (#3537) +- [`f064964678`](https://github.com/dashpay/dash/commit/f064964678) Only relay DKG messages to intra quorum connection members (#3536) +- [`d08b971ddb`](https://github.com/dashpay/dash/commit/d08b971ddb) Use correct CURRENT_VERSION constants when creating ProTx-es via rpc (#3524) +- [`4ae57a2276`](https://github.com/dashpay/dash/commit/4ae57a2276) qt: Fix label updates in SendCoinsEntry (#3523) +- [`1a54f0392d`](https://github.com/dashpay/dash/commit/1a54f0392d) Revert "implemented labeler which automatically adds RPC label to anything modifying RPC files (#3499)" (#3517) +- [`acff9998e1`](https://github.com/dashpay/dash/commit/acff9998e1) UpgradeDBIfNeeded failure should require reindexing (#3516) +- [`1163fc70a2`](https://github.com/dashpay/dash/commit/1163fc70a2) Use correct CURRENT_VERSION constants when checking ProTx version (#3515) +- [`0186fdfe60`](https://github.com/dashpay/dash/commit/0186fdfe60) Fix chainlock scheduler handling (#3514) +- [`b4008ee4fc`](https://github.com/dashpay/dash/commit/b4008ee4fc) Some Dashification (#3513) +- [`ab5aeed920`](https://github.com/dashpay/dash/commit/ab5aeed920) Optimize MN lists cache (#3506) +- [`91d9329093`](https://github.com/dashpay/dash/commit/91d9329093) Make CDeterministicMN::internalId private to make sure it's set/accessed properly (#3505) +- [`232430fac9`](https://github.com/dashpay/dash/commit/232430fac9) Fix ProcessNewBlock vs EnforceBestChainLock deadlocks in ActivateBestChain (#3492) +- [`fe98b81b80`](https://github.com/dashpay/dash/commit/fe98b81b80) implemented labeler which automatically adds RPC label to anything modifying RPC files (#3499) +- [`ae5faf23da`](https://github.com/dashpay/dash/commit/ae5faf23da) Better error handling while processing special txes (#3504) +- [`13a45ec323`](https://github.com/dashpay/dash/commit/13a45ec323) rpc: Validate provided keys for query_options parameter in listunspent (#3507) +- [`9b47883884`](https://github.com/dashpay/dash/commit/9b47883884) contrib: Added dustinface.pgp (#3502) +- [`048503bcb5`](https://github.com/dashpay/dash/commit/048503bcb5) qt: Some UI fixes and improvements (#3500) +- [`8fcda67a54`](https://github.com/dashpay/dash/commit/8fcda67a54) Remove spork 15, 16, 20 (#3493) +- [`9d3546baee`](https://github.com/dashpay/dash/commit/9d3546baee) Reintroduce mixing hard cap for all but the largest denom (#3489) +- [`397630a82c`](https://github.com/dashpay/dash/commit/397630a82c) CI: Fix Gitlab nowallet and release builds (#3491) +- [`a9fc40fb0a`](https://github.com/dashpay/dash/commit/a9fc40fb0a) add "Verifying a Rebase" section to CONTRIBUTING.md (#3487) +- [`0c5c99243a`](https://github.com/dashpay/dash/commit/0c5c99243a) rpc/wallet: Add coinType to queryOptions of listunspent (#3483) +- [`3a56ed9ca6`](https://github.com/dashpay/dash/commit/3a56ed9ca6) Fix NO_WALLET=1 build (#3490) +- [`926087aac6`](https://github.com/dashpay/dash/commit/926087aac6) Implement significantly improved createdenominations algorithm (#3479) +- [`fe208c98e3`](https://github.com/dashpay/dash/commit/fe208c98e3) Feat. request for Dash Platform: `quorum sign` rpc command with additional quorumHash #3424 (#3446) +- [`4c1f65baae`](https://github.com/dashpay/dash/commit/4c1f65baae) Fix #3241 UX/UI - Introduce PrivateSend tab which allows to spend fully mixed coins only (#3442) +- [`f46617dbab`](https://github.com/dashpay/dash/commit/f46617dbab) add litemode information to help texts regarding CL/IS and change getbestchainlock to throw an error if running in litemode (#3478) +- [`5cabc8f5ca`](https://github.com/dashpay/dash/commit/5cabc8f5ca) Introduce ONLY_PRIVATESEND coin type to select fully mixed coins only (#3459) +- [`e0ff9af2b0`](https://github.com/dashpay/dash/commit/e0ff9af2b0) qt: Allow and process URIs pasted to the payTo field of SendCoinsEntry (#3475) +- [`1c20160933`](https://github.com/dashpay/dash/commit/1c20160933) Fix `gobject submit`: replace request params with txidFee (#3471) +- [`970c23d6e6`](https://github.com/dashpay/dash/commit/970c23d6e6) Remove logic for forcing chainlocks without DIP8 activation on testnet (#3470) +- [`ae15299117`](https://github.com/dashpay/dash/commit/ae15299117) Feature request #3425 - Add information to "protx diff" (#3468) +- [`017c4779ca`](https://github.com/dashpay/dash/commit/017c4779ca) Fix recovery from coin db crashes (and dbcrash.py test) (#3467) +- [`d5f403d3fd`](https://github.com/dashpay/dash/commit/d5f403d3fd) Refactor and fix GetRealOutpointPrivateSendRounds (#3460) +- [`c06838e205`](https://github.com/dashpay/dash/commit/c06838e205) Streamline processing of pool state updates (#3458) +- [`538fcf2f1b`](https://github.com/dashpay/dash/commit/538fcf2f1b) Disable qt menu heuristics for openConfEditorAction (#3466) +- [`6e1c5480cd`](https://github.com/dashpay/dash/commit/6e1c5480cd) qt: Maximize the window if the dock icon gets clicked on macOS (#3465) +- [`3960d622c5`](https://github.com/dashpay/dash/commit/3960d622c5) Fix incorrect nTimeFirstKey reset due to missing count of hd pubkeys (#3461) +- [`d0bb30838b`](https://github.com/dashpay/dash/commit/d0bb30838b) Various (mostly trivial) PS fixes (#3457) +- [`b0963b079e`](https://github.com/dashpay/dash/commit/b0963b079e) Fix deadlocks (#3456) +- [`bdce58756a`](https://github.com/dashpay/dash/commit/bdce58756a) Remove duplicated condition check (#3464) +- [`10baa4a857`](https://github.com/dashpay/dash/commit/10baa4a857) Update Windows build instructions (#3453) +- [`7fdc4c7b0d`](https://github.com/dashpay/dash/commit/7fdc4c7b0d) change miniupnp lib server (#3452) +- [`911b5580e4`](https://github.com/dashpay/dash/commit/911b5580e4) Fix typo in error log when EPOLL_CTL_ADD fails for wakeup pipe (#3451) +- [`b775fa263f`](https://github.com/dashpay/dash/commit/b775fa263f) Lower DEFAULT_PRIVATESEND_DENOMS (#3434) +- [`d59deea77b`](https://github.com/dashpay/dash/commit/d59deea77b) Implement epoll support (#3445) +- [`96faa8155e`](https://github.com/dashpay/dash/commit/96faa8155e) Don't disconnect masternode probes for a few seconds (#3449) +- [`608aed3d85`](https://github.com/dashpay/dash/commit/608aed3d85) Don't try to connect to itself through CLLMQUtils::GetQuorumConnections (#3448) +- [`d663f48085`](https://github.com/dashpay/dash/commit/d663f48085) Lower SELECT_TIMEOUT_MILLISECONDS for USE_WAKEUP_PIPE case (#3444) +- [`f5f4ccbf24`](https://github.com/dashpay/dash/commit/f5f4ccbf24) Refactor/Prepare CConnman for upcoming epoll support (#3432) +- [`93aa640af8`](https://github.com/dashpay/dash/commit/93aa640af8) Fix #3248: use blue logo for Traditional theme (#3441) +- [`3d24290bcb`](https://github.com/dashpay/dash/commit/3d24290bcb) Take all nodes into account in check_sigs instead of just just masternodes (#3437) +- [`d06597a421`](https://github.com/dashpay/dash/commit/d06597a421) [Trivial] Adjust some text in mnauth.cpp (#3413) +- [`de931a25a3`](https://github.com/dashpay/dash/commit/de931a25a3) Wakeup wakeup-pipe when new peers are added (#3433) +- [`75a1968c96`](https://github.com/dashpay/dash/commit/75a1968c96) Fix abandonconflict.py (#3436) +- [`2610e718cd`](https://github.com/dashpay/dash/commit/2610e718cd) Don't delete MN list snapshots and diffs from DB when reorgs take place (#3435) +- [`6d83b0a053`](https://github.com/dashpay/dash/commit/6d83b0a053) Make socketevents mode (poll vs select) configurable via parameter (#3431) +- [`9a8caf0986`](https://github.com/dashpay/dash/commit/9a8caf0986) Remove fix for fNetworkActive vs OpenNetworkConnection race (#3430) +- [`96ed9fae39`](https://github.com/dashpay/dash/commit/96ed9fae39) Fix flushing of rejects before disconnecting (#3429) +- [`0cb385c567`](https://github.com/dashpay/dash/commit/0cb385c567) Improve network connections related logging (#3428) +- [`d5092c44cb`](https://github.com/dashpay/dash/commit/d5092c44cb) Make sure that cleanup is not triggered too early in llmq-signing.py (#3427) +- [`402b13907d`](https://github.com/dashpay/dash/commit/402b13907d) Only call DisconnectNodes once per second (#3421) +- [`ee995ef02a`](https://github.com/dashpay/dash/commit/ee995ef02a) Implement more reliable wait_for_masternode_probes in test framework (#3422) +- [`755a23ca00`](https://github.com/dashpay/dash/commit/755a23ca00) Always pass current mocktime to started nodes (#3423) +- [`1e30054b9e`](https://github.com/dashpay/dash/commit/1e30054b9e) Avoid calling SendMessages (and others) for all nodes all the time (#3420) +- [`8aa85c084b`](https://github.com/dashpay/dash/commit/8aa85c084b) Deterministically choose which peers to drop on duplicate MNAUTH (#3419) +- [`79f0bb1033`](https://github.com/dashpay/dash/commit/79f0bb1033) Fix crash in validateaddress (#3418) +- [`d032d02f10`](https://github.com/dashpay/dash/commit/d032d02f10) Multiple fixes for failing tests (#3410) +- [`e20c63f535`](https://github.com/dashpay/dash/commit/e20c63f535) A few simple/trivial optimizations (#3398) +- [`9bcdeaea57`](https://github.com/dashpay/dash/commit/9bcdeaea57) Avoid unnecessary processing/verification of reconstructed recovered signatures (#3399) +- [`38556a3d49`](https://github.com/dashpay/dash/commit/38556a3d49) Don't try to connect to masternodes that we already have a connection to (#3401) +- [`0e56e32c22`](https://github.com/dashpay/dash/commit/0e56e32c22) Add cache for CBlockTreeDB::HasTxIndex (#3402) +- [`2dff0501e9`](https://github.com/dashpay/dash/commit/2dff0501e9) Remove semaphore for masternode connections (#3403) +- [`c1d9dd553a`](https://github.com/dashpay/dash/commit/c1d9dd553a) FindDevNetGenesisBlock remove unused arg (#3405) +- [`c7b6eb851d`](https://github.com/dashpay/dash/commit/c7b6eb851d) Implement "concentrated recovery" of LLMQ signatures (#3389) +- [`e518ce4e13`](https://github.com/dashpay/dash/commit/e518ce4e13) Increase DIP0008 bip9 window by 10 years (#3391) +- [`1aba86567b`](https://github.com/dashpay/dash/commit/1aba86567b) Implement checking of open ports and min proto versions in DKGs (#3390) +- [`f43cdbc586`](https://github.com/dashpay/dash/commit/f43cdbc586) Gradually bump mocktime in wait_for_quorum_connections (#3388) +- [`3b904a0fa1`](https://github.com/dashpay/dash/commit/3b904a0fa1) Add a note about dash_hash under dependencies in test/README.md (#3386) +- [`b0668028b6`](https://github.com/dashpay/dash/commit/b0668028b6) Implement more randomized behavior in GetQuorumConnections (#3385) +- [`27dfb5a34d`](https://github.com/dashpay/dash/commit/27dfb5a34d) Move wait_proc into wait_for_quorum_connections (#3384) +- [`ff6f391aea`](https://github.com/dashpay/dash/commit/ff6f391aea) Refactor Gitlab builds to use multiple stages (#3377) +- [`a5a3e51554`](https://github.com/dashpay/dash/commit/a5a3e51554) Let all LLMQ members connect to each other instead of only a few ones (#3380) +- [`8ab1a3734a`](https://github.com/dashpay/dash/commit/8ab1a3734a) Bump mocktime each time waiting for phase1 fails (#3383) +- [`c68b5f68aa`](https://github.com/dashpay/dash/commit/c68b5f68aa) Hold CEvoDB lock while iterating mined commitments (#3379) +- [`deba865b17`](https://github.com/dashpay/dash/commit/deba865b17) Also verify quorumHash when waiting for DKG phases (#3382) +- [`17ece14f40`](https://github.com/dashpay/dash/commit/17ece14f40) Better/more logging for DKGs (#3381) +- [`80be2520a2`](https://github.com/dashpay/dash/commit/80be2520a2) Call FlushBackgroundCallbacks before resetting CConnman (#3378) +- [`b6bdb8be9e`](https://github.com/dashpay/dash/commit/b6bdb8be9e) Faster opening of masternode connections (#3375) +- [`94bcf85347`](https://github.com/dashpay/dash/commit/94bcf85347) Refactor and unify quorum connection handling #(3367) +- [`c0bb06e766`](https://github.com/dashpay/dash/commit/c0bb06e766) Multiple fixes for masternode connection handling (#3366) +- [`f2ece1031f`](https://github.com/dashpay/dash/commit/f2ece1031f) Remove logging for waking of select() (#3370) +- [`cf1f8c3825`](https://github.com/dashpay/dash/commit/cf1f8c3825) Support devnets in mininode (#3364) +- [`f7ddee13a1`](https://github.com/dashpay/dash/commit/f7ddee13a1) Fix possible segfault (#3365) +- [`40cdfe8662`](https://github.com/dashpay/dash/commit/40cdfe8662) Add peer id to "socket send error" logs (#3363) +- [`0fa2e14065`](https://github.com/dashpay/dash/commit/0fa2e14065) Fix issues introduced with asynchronous signal handling (#3369) +- [`b188c5c25e`](https://github.com/dashpay/dash/commit/b188c5c25e) Refactor some PrivateSend related code to use WalletModel instead of accessing the wallet directly from qt (#3345) +- [`05c134c783`](https://github.com/dashpay/dash/commit/05c134c783) Fix litemode vs txindex check (#3355) +- [`c9881d0fc7`](https://github.com/dashpay/dash/commit/c9881d0fc7) Masternodes must have required services enabled (#3350) +- [`c6911354a1`](https://github.com/dashpay/dash/commit/c6911354a1) Few tweaks for MakeCollateralAmounts (#3347) +- [`56b8e97ab0`](https://github.com/dashpay/dash/commit/56b8e97ab0) Refactor and simplify PrivateSend based on the fact that we only mix one single denom at a time now (#3346) +- [`af7cfd6a3f`](https://github.com/dashpay/dash/commit/af7cfd6a3f) Define constants for keys in CInstantSendDb and use them instead of plain strings (#3352) +- [`d52020926c`](https://github.com/dashpay/dash/commit/d52020926c) Fix undefined behaviour in stacktrace printing. (#3357) +- [`4c01ca4573`](https://github.com/dashpay/dash/commit/4c01ca4573) Fix undefined behaviour in unordered_limitedmap and optimise it. (#3349) +- [`2521970a50`](https://github.com/dashpay/dash/commit/2521970a50) Add configurable devnet quorums (#3348) +- [`7075083f07`](https://github.com/dashpay/dash/commit/7075083f07) Detect mixing session readiness based on the current pool state (#3328) +- [`dff9430c5e`](https://github.com/dashpay/dash/commit/dff9430c5e) A couple of fixes for CActiveMasternodeManager::Init() (#3326) +- [`4af4432cb9`](https://github.com/dashpay/dash/commit/4af4432cb9) Add unit tests for CPrivateSend::IsCollateralAmount (#3310) +- [`e1fc378ffd`](https://github.com/dashpay/dash/commit/e1fc378ffd) Refactor PS a bit and make it so that the expected flow for mixing is to time out and fallback (#3309) +- [`39b17fd5a3`](https://github.com/dashpay/dash/commit/39b17fd5a3) Fix empty TRAVIS_COMMIT_RANGE for one-commit-branch builds in Travis (#3299) +- [`f4f9f918dc`](https://github.com/dashpay/dash/commit/f4f9f918dc) [Pretty Trivial] Adjust some comments (#3252) +- [`26fb682e91`](https://github.com/dashpay/dash/commit/26fb682e91) Speed up prevector initialization and vector assignment from prevectors (#3274) +- [`9c9cac6d67`](https://github.com/dashpay/dash/commit/9c9cac6d67) Show quorum connections in "quorum dkgstatus" and use it in mine_quorum (#3271) +- [`aca6af0a0e`](https://github.com/dashpay/dash/commit/aca6af0a0e) Use smaller LLMQs in regtest (#3269) +- [`88da298082`](https://github.com/dashpay/dash/commit/88da298082) Add -whitelist to all nodes in smartfees.py (#3273) +- [`7e3ed76e54`](https://github.com/dashpay/dash/commit/7e3ed76e54) Make a deep copy of extra_args before modifying it in set_dash_test_params (#3270) +- [`75bb7ec022`](https://github.com/dashpay/dash/commit/75bb7ec022) A few optimizations/speedups for Dash related tests (#3268) +- [`2afdc8c6f6`](https://github.com/dashpay/dash/commit/2afdc8c6f6) Add basic PrivateSend RPC Tests (#3254) +- [`dc656e3236`](https://github.com/dashpay/dash/commit/dc656e3236) Bump version to 0.16 on develop (#3239) +- [`c182c6ca14`](https://github.com/dashpay/dash/commit/c182c6ca14) Upgrade Travis to use Bionic instead of Trusty (#3143) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- 10xcryptodev +- Akshay CM (akshaynexus) +- Alexander Block (codablock) +- Cofresi +- CryptoTeller +- dustinface (xdustinface) +- konez2k +- Oleg Girko (OlegGirko) +- PastaPastaPasta +- Piter Bushnell (Bushstar) +- sc-9310 +- thephez +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Dash was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of masternodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Dash. + +Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.15.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15.0.0.md) released Febrary/18/2020 +- [v0.14.0.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md) released December/08/2019 +- [v0.14.0.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md) released November/22/2019 +- [v0.14.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/dash/release-notes-0.16.1.0.md b/doc/release-notes/dash/release-notes-0.16.1.0.md new file mode 100644 index 0000000000..1be9abc5c6 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.16.1.0.md @@ -0,0 +1,154 @@ +Dash Core version 0.16.1.0 +========================== + +Release is now available from: + + + +This is a new minor version release, bringing various bugfixes and 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/Dash-Qt (on Mac) or +dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading +from version 0.13 should not require any additional actions. + +When upgrading from a version prior to 0.14.0.3, the +first startup of Dash Core will run a migration process which can take a few +minutes to finish. After the migration, a downgrade to an older version is only +possible with a reindex (or reindex-chainstate). + +Downgrade warning +----------------- + +### Downgrade to a version < 0.14.0.3 + +Downgrading to a version older than 0.14.0.3 is no longer supported due to +changes in the "evodb" database format. If you need to use an older version, +you must either reindex or re-sync the whole chain. + +### Downgrade of masternodes to < 0.16 + +Starting with this release, masternodes will verify the protocol version of other +masternodes. This will result in PoSe punishment/banning for outdated masternodes, +so downgrading is not recommended. + +Notable changes +=============== + +Network changes +--------------- +InstantSend locks were not relayed correctly when another node was requesting updates via the `mempool` +p2p message. Some other internal optimizations were made to the way object requests are handled. + +GUI changes +----------- +Fixes for the following GUI related issues +- The wallet crashed if no valid GUI theme was found in settings. +This happened for users upgrading from versions prior to v0.14. +- There were randomly occurring font size scaling issues. +- Opening or closing the settings while the application was in full-screen/maximized +window mode lead to fragmented GUI layouts. +- There was an unexpected checkmark in the "Encrypt wallet" menu item on Linux and Windows +- Starting Dash Core compiled without wallet support or with `-disablewallet` command line +parameter lead to an application crash. + +RPC changes +----------- +- `getwalletinfo` shows wallet rescan duration and progress now + +0.16.1.0 Change log +=================== + +See detailed [set of changes](https://github.com/dashpay/dash/compare/v0.16.0.1...dashpay:v0.16.1.0). + +- [`b1c930bc86`](https://github.com/dashpay/dash/commit/b1c930bc86) [v0.16.x] bump version in configure.ac (#3788) +- [`3d94e714a9`](https://github.com/dashpay/dash/commit/3d94e714a9) contrib|src: Update hard coded seeds (#3791) +- [`c02a994489`](https://github.com/dashpay/dash/commit/c02a994489) bump nMinimumChainWork, defaultAssumeValid, checkpointData for mainnet and testnet (#3789) +- [`1d41fbd760`](https://github.com/dashpay/dash/commit/1d41fbd760) Update man pages (#3798) +- [`b3bbc00dbc`](https://github.com/dashpay/dash/commit/b3bbc00dbc) Merge #15730: rpc: Show scanning details in getwalletinfo (#3785) +- [`3ad4651db1`](https://github.com/dashpay/dash/commit/3ad4651db1) Call EraseObjectRequest as soon as an object is read from the stream (#3783) +- [`d8f8f174c0`](https://github.com/dashpay/dash/commit/d8f8f174c0) Avoid accessing pendingContributionVerifications from VerifyPendingContributions while ReceiveMessage is still doing its job (#3782) +- [`0814e6145d`](https://github.com/dashpay/dash/commit/0814e6145d) qt: Handle fonts of deleted widgets properly, streamline the flow in `GUIUtil::updateFonts` (#3772) +- [`e149740120`](https://github.com/dashpay/dash/commit/e149740120) qt: avoid auto-updating window width when it's in full screen or when it's maximized (#3771) +- [`78358a2a6d`](https://github.com/dashpay/dash/commit/78358a2a6d) qt: Do not show a check-mark for "Encrypt wallet" menu item (#3770) +- [`7b72e98092`](https://github.com/dashpay/dash/commit/7b72e98092) Fix IS-locks sync via `mempool` p2p command (#3766) +- [`9ceee5df20`](https://github.com/dashpay/dash/commit/9ceee5df20) qt: Fix --disable-wallet build and --disablewallet mode (#3762) +- [`62985c771b`](https://github.com/dashpay/dash/commit/62985c771b) depends: Update Qt download url. (#3756) +- [`717a41a572`](https://github.com/dashpay/dash/commit/717a41a572) qt: Make sure there is a valid theme set in the options (#3755) +- [`01a3435158`](https://github.com/dashpay/dash/commit/01a3435158) update public part of windows code signing certificate (#3749) + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- dustinface (xdustinface) +- Oleg Girko (OlegGirko) +- PastaPastaPasta +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Dash was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of masternodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Dash. + +Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.16.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.0.1.md) released September/30/2020 +- [v0.15.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15.0.0.md) released Febrary/18/2020 +- [v0.14.0.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md) released December/08/2019 +- [v0.14.0.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md) released November/22/2019 +- [v0.14.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/dash/release-notes-0.16.1.1.md b/doc/release-notes/dash/release-notes-0.16.1.1.md new file mode 100644 index 0000000000..ea1185e5a4 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.16.1.1.md @@ -0,0 +1,126 @@ +Dash Core version 0.16.1.1 +========================== + +Release is now available from: + + + +This is a new hotfix release. + +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/Dash-Qt (on Mac) or +dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading +from version 0.13 should not require any additional actions. + +When upgrading from a version prior to 0.14.0.3, the +first startup of Dash Core will run a migration process which can take a few +minutes to finish. After the migration, a downgrade to an older version is only +possible with a reindex (or reindex-chainstate). + +Downgrade warning +----------------- + +### Downgrade to a version < 0.14.0.3 + +Downgrading to a version older than 0.14.0.3 is no longer supported due to +changes in the "evodb" database format. If you need to use an older version, +you must either reindex or re-sync the whole chain. + +### Downgrade of masternodes to < 0.16 + +Starting with this release, masternodes will verify the protocol version of other +masternodes. This will result in PoSe punishment/banning for outdated masternodes, +so downgrading is not recommended. + +Notable changes +=============== + +There was an unexpected behaviour of the "Encrypt wallet" menu item for unencrypted wallets +which was showing users the "Decrypt wallet" dialog instead. This was a GUI only issue, +internal encryption logic and RPC behaviour were not affected. + +0.16.1.1 Change log +=================== + +See detailed [set of changes](https://github.com/dashpay/dash/compare/v0.16.1.0...dashpay:v0.16.1.1). + +- [`ccef3b4836`](https://github.com/dashpay/dash/commit/ccef3b48363d8bff4b919d9119355182e3902ef3) qt: Fix wallet encryption dialog (#3816) + +Python Support +-------------- + +Support for Python 2 has been discontinued for all test files and tools. + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Dash was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of masternodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Dash. + +Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.16.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.1.0.md) released November/14/2020 +- [v0.16.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.0.1.md) released September/30/2020 +- [v0.15.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15.0.0.md) released Febrary/18/2020 +- [v0.14.0.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md) released December/08/2019 +- [v0.14.0.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md) released November/22/2019 +- [v0.14.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/dash/release-notes-0.17.0.2.md b/doc/release-notes/dash/release-notes-0.17.0.2.md new file mode 100644 index 0000000000..17940c6b75 --- /dev/null +++ b/doc/release-notes/dash/release-notes-0.17.0.2.md @@ -0,0 +1,341 @@ +Dash Core version 0.17.0.2 +========================== + +Release is now available from: + + + +This is a new major version release, bringing new features, various bugfixes +and other improvements. + +This release is mandatory for all nodes. + +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/Dash-Qt (on Mac) or +dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were +using version < 0.13 you will have to reindex (start with -reindex-chainstate +or -reindex) to make sure your wallet has all the new data synced. Upgrading +from version 0.13 should not require any additional actions. + +When upgrading from a version prior to 0.14.0.3, the +first startup of Dash Core will run a migration process which can take a few +minutes to finish. After the migration, a downgrade to an older version is only +possible with a reindex (or reindex-chainstate). + +Downgrade warning +----------------- + +### Downgrade to a version < 0.14.0.3 + +Downgrading to a version older than 0.14.0.3 is no longer supported due to +changes in the "evodb" database format. If you need to use an older version, +you must either reindex or re-sync the whole chain. + +### Downgrade of masternodes to < 0.17.0.2 + +Starting with the 0.16 release, masternodes verify the protocol version of other +masternodes. This results in PoSe punishment/banning for outdated masternodes, +so downgrading even prior to the activation of the introduced hard-fork changes +is not recommended. + +Notable changes +=============== + +Opcode updates +-------------- +Several opcodes have been reactivated/introduced to broaden the functionality +of the system and enable developers to build new solutions. These opcodes are +a combination of previously disabled ones that have been found to be safe and +new ones previously introduced by Bitcoin Cash. Details of the opcodes are +provided in [DIP-0020](https://github.com/dashpay/dips/blob/master/dip-0020.md). + +These opcodes are activated via a BIP9 style hard fork that will begin +signalling on July 1st using bit 6. Any nodes that do not upgrade by the time +this feature is activated will diverge from the rest of the network. + +DKG Data Sharing +---------------- +Quorum resilience has been improved by enabling masternodes to request DKG data +from other quorum members. This allows Dash Platform to obtain required +information while also making it possible for corrupted masternodes to recover +the DKG data they need to participate in quorums they are part of. Details are +provided in [DIP-0021](https://github.com/dashpay/dips/blob/master/dip-0021.md). + +Platform support +---------------- +Support for Dash Platform has been expanded through the addition of a new +quorum type `LLMQ_100_67` and `LLMQ_100_67_testnet`, several RPCs, and a way to limit Platform RPC access +to a subset of allowed RPCs, specifically: +- `getbestblockhash` +- `getbestchainlock` +- `getblockcount` +- `getblockhash` +- `quorum sign` (for platform quorums only) +- `quorum verify` +- `verifyislock` + +These changes provide necessary Platform capabilities while maximizing the +isolation between Core and Platform. New quorum type will be activated using +the same bit 6 introduced to activate new opcodes. + +BLS update +---------- +Dash Core’s BLS signature library has been updated based on v1.0 of the +Chia BLS library to support migration to a new BLS signature scheme which will +be implemented in a future version of DashCore. These changes will be made to +align with standards and improve security. + +Network performance improvements +-------------------------------- +This version of Dash Core includes multiple optimizations to the network and +p2p message handling code. + +We reintroduced [Intra-Quorum Connections](https://github.com/dashpay/dips/blob/master/dip-0006.md#intra-quorum-communication) +which were temporary disabled with the introduction of +`SPORK_21_QUORUM_ALL_CONNECTED`. This should make communications for masternodes +belonging to the same quorum more robust and improve network connectivity in +general. + +FreeBSD and MacOS machines will now default to the new `kqueue` network mode +which is similar to `epoll` mode on linux-based. It removes most of the CPU +overhead caused by the sub-optimal use of `select` in the network thread when +many connections were involved. + +Wallet changes +-------------- +Upgrading a non-Hierarchical Deterministic (HD) wallet to an HD wallet is now +possible. Previously new HD wallets could be created, but non-HD wallets could +not be upgraded. This update will enable existing non-HD wallets to upgrade to +take advantage of HD wallet features. Upgrades can be done via either the debug +console or command line and a new backup must be made when this upgrade is +performed. + +Users can now load and unload wallets dynamically via RPC and GUI console. +It's now possible to have multiple wallets loaded at the same time, however only +one of them is going to be active and receive updates or be used for sending +trasactions at a specific point in time. + +Also, enabling wallet encryption no longer requires a wallet restart. + +Sporks +------ +Several spork changes have been made to streamline code and improve system +reliability. Activation of `SPORK_22_PS_MORE_PARTICIPANTS` in DashCore v0.16 +has rendered that spork unnecessary. The associated logic has been hardened +and the spork removed. `SPORK_21_QUORUM_ALL_CONNECTED` logic has been split +into two sporks, `SPORK_21_QUORUM_ALL_CONNECTED` and `SPORK_23_QUORUM_POSE`, +so that masternode quorum connectivity and quorum Proof of Service (PoSe) can +be controlled independently. Finally, `SPORK_2_INSTANTSEND_ENABLED` has a new +mode (value: 1) that enables a smooth transition in case InstantSend needs to +be disabled. + +Statoshi backport +------------------ +This version includes a [backport](https://github.com/dashpay/dash/pull/2515) +of [Statoshi functionality](https://github.com/jlopp/statoshi) which allows +nodes to emit metrics to a StatsD instance. This can help node operators to +learn more about node performance and network state in general. We added +several command line options to give node operators more control, see options +starting with `-stats` prefix. + +PrivateSend rename +------------------ +PrivateSend has been renamed to CoinJoin to better reflect the functionality +it provides and align with industry standard terminology. The renaming only +applies to the UI and RPCs but does not change functionality. + +Build system +------------ +Multiple packaged in `depends` were updated. Current versions are: +- biplist 1.0.3 +- bls-dash 1.0.1 +- boost 1.70.0 +- cmake 3.14.7 +- expat 2.2.5 +- mac alias 2.0.7 +- miniupnpc 2.0.20180203 +- qt 5.9.6 +- zeromq 4.2.3 + +Packages libX11, libXext, xextproto and xtrans are no longer used. + +Minimum supported macOS version was bumped to 10.10. + +RPC changes +----------- +There are seven new RPC commands which are Dash specific and seven new RPC +commands introduced through Bitcoin backports. One previously deprecated RPC, +`estimatefee`, was removed and several RPCs have been deprecated. + +The new RPCs are: +- `createwallet` +- `getaddressesbylabel` +- `getaddressinfo` +- `getzmqnotifications` +- `gobject list-prepared` +- `listlabels` +- `masternode payments` +- `quorum getdata` +- `quorum verify` +- `signrawtransactionwithkey` +- `signrawtransactionwithwallet` +- `unloadwallet` +- `verifychainlock` +- `verifyislock` +- `upgradetohd` + +The deprecated RPCs are all related to the deprecation of wallet accounts and +will be removed in DashCore v0.18. Note that the deprecation of wallet accounts +means that any RPCs that previously accepted an “account” parameter are +affected — please refer to the RPC help for details about specific RPCs. + +The deprecated RPCs are: +- `getaccount` +- `getaccountaddress` +- `getaddressbyaccount` +- `getreceivedbyaccount` +- `listaccounts` +- `listreceivedbyaccount` +- `masternode current` +- `masternode winner` +- `move` +- `sendfrom` +- `setaccount` + +`protx register` and `protx register_fund` RPCs now accept an additional `submit` parameter +which allows producing and printing ProRegTx-es without relaying them +to the network. + +Also, please note that all mixing-related RPCs have been renamed to replace +“PrivateSend” with “CoinJoin” (e.g. `setprivatesendrounds` -> `setcoinjoinrounds`). + +Please check `help ` for more detailed information on specific RPCs. + +Command-line options +-------------------- +Changes in existing cmd-line options: + +New cmd-line options: +- `-dip8params` +- `-llmq-data-recovery` +- `-llmq-qvvec-sync` +- `-llmqinstantsend` +- `-platform-user` +- `-statsenabled` +- `-statshost` +- `-statshostname` +- `-statsport` +- `-statsns` +- `-statsperiod` +- `-zmqpubhashrecoveredsig` +- `-zmqpubrawrecoveredsig` + +Also, please note that all mixing-related command-line options have been +renamed to replace “PrivateSend” with “CoinJoin” (e.g. `setprivatesendrounds` +-> `setcoinjoinrounds`). + +Please check `Help -> Command-line options` in Qt wallet or `dashd --help` for +more information. + +Backports from Bitcoin Core 0.17 +-------------------------------- + +This release also introduces over 450 updates from Bitcoin v0.17 as well as +some updates from Bitcoin v0.18 and more recent versions. This includes a +number of performance improvements, dynamic loading of wallets via RPC, support +for signalling pruned nodes, and a number of other updates that will benefit +Dash users. Bitcoin changes that do not align with Dash’s product needs, such +as SegWit and RBF, are excluded from our backporting. For additional detail on +what’s included in Bitcoin v0.17, please refer to [their release notes](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.17.0.md). + +Miscellaneous +------------- +A lot of refactoring, code cleanups and other small fixes were done in this release. + +0.17.0.2 Change log +=================== + +See detailed [set of changes](https://github.com/dashpay/dash/compare/v0.16.1.1...dashpay:v0.17.0.2). + +Credits +======= + +Thanks to everyone who directly contributed to this release: + +- 10xcryptodev +- dustinface (xdustinface) +- Kittywhiskers Van Gogh (kittywhiskers) +- Kolby Moroz Liebl (KolbyML) +- Konstantin Shuplenkov (shuplenkov) +- Minh20 +- PastaPastaPasta +- strophy +- thephez +- tomthoros +- UdjinM6 + +As well as everyone that submitted issues and reviewed pull requests. + +Older releases +============== + +Dash was previously known as Darkcoin. + +Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin +which was first released on Jan/18/2014. + +Darkcoin tree 0.9.x was the open source implementation of masternodes based on +the 0.8.x tree and was first released on Mar/13/2014. + +Darkcoin tree 0.10.x used to be the closed source implementation of Darksend +which was released open source on Sep/25/2014. + +Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, +Darkcoin was rebranded to Dash. + +Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. + +Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. + +These release are considered obsolete. Old release notes can be found here: + +- [v0.16.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.1.1.md) released November/17/2020 +- [v0.16.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.1.0.md) released November/14/2020 +- [v0.16.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.0.1.md) released September/30/2020 +- [v0.15.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15.0.0.md) released Febrary/18/2020 +- [v0.14.0.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md) released December/08/2019 +- [v0.14.0.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md) released November/22/2019 +- [v0.14.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md) released August/15/2019 +- [v0.14.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md) released July/4/2019 +- [v0.14.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md) released May/31/2019 +- [v0.14.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md) released May/22/2019 +- [v0.13.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md) released Apr/04/2019 +- [v0.13.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md) released Mar/15/2019 +- [v0.13.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md) released Feb/9/2019 +- [v0.13.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md) released Jan/14/2019 +- [v0.12.3.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md) released Dec/14/2018 +- [v0.12.3.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md) released Sep/19/2018 +- [v0.12.3.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md) released Jul/09/2018 +- [v0.12.3.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md) released Jul/03/2018 +- [v0.12.2.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md) released Jan/12/2018 +- [v0.12.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md) released Dec/17/2017 +- [v0.12.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md) released Nov/08/2017 +- [v0.12.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md) released Feb/06/2017 +- [v0.12.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md) released Aug/15/2015 +- [v0.11.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md) released Mar/04/2015 +- [v0.11.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md) released Feb/10/2015 +- [v0.11.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md) released Jan/15/2015 +- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 +- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 diff --git a/doc/release-notes/raptoreum/release-notes-0.9.0.md b/doc/release-notes/dash/release-notes-0.9.0.md similarity index 100% rename from doc/release-notes/raptoreum/release-notes-0.9.0.md rename to doc/release-notes/dash/release-notes-0.9.0.md diff --git a/doc/release-notes/raptoreum/release-notes-0.12.2.2.md b/doc/release-notes/raptoreum/release-notes-0.12.2.2.md deleted file mode 100644 index 7a8d80c93b..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.12.2.2.md +++ /dev/null @@ -1,260 +0,0 @@ -Raptoreum Core version 0.12.2.2 -========================== - -Release is now available from: - - - -This is a new minor version release, bringing various bugfixes 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/Raptoreum-Qt (on Mac) or -raptoreumd/raptoreum-qt (on Linux). Because of the per-UTXO fix (see below) there is a -one-time database upgrade operation, so expect a slightly longer startup time on -the first run. - -Downgrade warning ------------------ - -### Downgrade to a version < 0.12.2.2 - -Because release 0.12.2.2 includes the per-UTXO fix (see below) which changes the -structure of the internal database, this release is not fully backwards -compatible. You will have to reindex the database if you decide to use any -previous version. - -This does not affect wallet forward or backward compatibility. - - -Notable changes -=============== - -Per-UTXO fix ------------- - -This fixes a potential vulnerability, so called 'Corebleed', which was -demonstrated this summer at the Вrеаkіng Віtсоіn Соnfеrеnсе іn Раrіs. The DoS -can cause nodes to allocate excessive amounts of memory, which leads them to a -halt. You can read more about the fix in the original Bitcoin Core pull request -https://github.com/bitcoin/bitcoin/pull/10195 - -To fix this issue in Raptoreum Core however, we had to backport a lot of other -improvements from Bitcoin Core, see full list of backports in the detailed -change log below. - -Additional indexes fix ----------------------- - -If you were using additional indexes like `addressindex`, `spentindex` or -`timestampindex` it's possible that they are not accurate. Please consider -reindexing the database by starting your node with `-reindex` command line -option. This is a one-time operation, the issue should be fixed now. - -InstantSend fix ---------------- - -InstantSend should work with multisig addresses now. - -PrivateSend fix ---------------- - -Some internal data structures were not cleared properly, which could lead -to a slightly higher memory consumption over a long period of time. This was -a minor issue which was not affecting mixing speed or user privacy in any way. - -Removal of support for local smartnodes ----------------------------------------- - -Keeping a wallet with 1000 RAPTOREUM unlocked for 24/7 is definitely not a good idea -anymore. Because of this fact, it's also no longer reasonable to update and test -this feature, so it's completely removed now. If for some reason you were still -using it, please follow one of the guides and setup a remote smartnode instead. - -Dropping old (pre-12.2) peers ------------------------------ - -Connections from peers with protocol lower than 70208 are no longer accepted. - -Other improvements and bug fixes --------------------------------- - -As a result of previous intensive refactoring and some additional fixes, -it should be possible to compile Raptoreum Core with `--disable-wallet` option now. - -This release also improves sync process and significantly lowers the time after -which `getblocktemplate` rpc becomes available on node start. - -And as usual, various small bugs and typos were fixed and more refactoring was -done too. - - -0.12.2.2 Change log -=================== - -See detailed [change log](https://github.com/raptoreum/raptoreum/compare/v0.12.2.1...raptoreum:v0.12.2.2) below. - -### Backports: -- [`996f5103a`](https://github.com/raptoreum/raptoreum/commit/996f5103a) Backport #7056: Save last db read -- [`23fe35a18`](https://github.com/raptoreum/raptoreum/commit/23fe35a18) Backport #7756: Add cursor to iterate over utxo set, use this in `gettxoutsetinfo` -- [`17f2ea5d7`](https://github.com/raptoreum/raptoreum/commit/17f2ea5d7) Backport #7904: txdb: Fix assert crash in new UTXO set cursor -- [`2e54bd2e8`](https://github.com/raptoreum/raptoreum/commit/2e54bd2e8) Backport #7927: Minor changes to dbwrapper to simplify support for other databases -- [`abaf524f0`](https://github.com/raptoreum/raptoreum/commit/abaf524f0) Backport #7815: Break circular dependency main ↔ txdb -- [`02a6cef94`](https://github.com/raptoreum/raptoreum/commit/02a6cef94) Move index structures into spentindex.h -- [`d92b454a2`](https://github.com/raptoreum/raptoreum/commit/d92b454a2) Add SipHash-2-4 primitives to hash -- [`44526af95`](https://github.com/raptoreum/raptoreum/commit/44526af95) Use SipHash-2-4 for CCoinsCache index -- [`60e6a602e`](https://github.com/raptoreum/raptoreum/commit/60e6a602e) Use C++11 thread-safe static initializers in coins.h/coins.cpp -- [`753cb1563`](https://github.com/raptoreum/raptoreum/commit/753cb1563) Backport #7874: Improve AlreadyHave -- [`952383e16`](https://github.com/raptoreum/raptoreum/commit/952383e16) Backport #7933: Fix OOM when deserializing UTXO entries with invalid length -- [`e3b7ed449`](https://github.com/raptoreum/raptoreum/commit/e3b7ed449) Backport #8273: Bump `-dbcache` default to 300MiB -- [`94e01eb66`](https://github.com/raptoreum/raptoreum/commit/94e01eb66) Backport #8467: [Trivial] Do not shadow members in dbwrapper -- [`105fd1815`](https://github.com/raptoreum/raptoreum/commit/105fd1815) Use fixed preallocation instead of costly GetSerializeSize -- [`6fbe93aa7`](https://github.com/raptoreum/raptoreum/commit/6fbe93aa7) Backport #9307: Remove undefined FetchCoins method declaration -- [`6974f1723`](https://github.com/raptoreum/raptoreum/commit/6974f1723) Backport #9346: Batch construct batches -- [`4b4d22293`](https://github.com/raptoreum/raptoreum/commit/4b4d22293) Backport #9308: [test] Add CCoinsViewCache Access/Modify/Write tests -- [`a589c94a9`](https://github.com/raptoreum/raptoreum/commit/a589c94a9) Backport #9107: Safer modify new coins -- [`09b3e042f`](https://github.com/raptoreum/raptoreum/commit/09b3e042f) Backport #9310: Assert FRESH validity in CCoinsViewCache::BatchWrite -- [`ceb64fcd4`](https://github.com/raptoreum/raptoreum/commit/ceb64fcd4) Backport #8610: Share unused mempool memory with coincache -- [`817ecc03d`](https://github.com/raptoreum/raptoreum/commit/817ecc03d) Backport #9353: Add data() method to CDataStream (and use it) -- [`249db2776`](https://github.com/raptoreum/raptoreum/commit/249db2776) Backport #9999: [LevelDB] Plug leveldb logs to bitcoin logs -- [`cfefd34f4`](https://github.com/raptoreum/raptoreum/commit/cfefd34f4) Backport #10126: Compensate for memory peak at flush time -- [`ff9b2967a`](https://github.com/raptoreum/raptoreum/commit/ff9b2967a) Backport #10133: Clean up calculations of pcoinsTip memory usage -- [`567043d36`](https://github.com/raptoreum/raptoreum/commit/567043d36) Make DisconnectBlock and ConnectBlock static in validation.cpp -- [`9a266e68d`](https://github.com/raptoreum/raptoreum/commit/9a266e68d) Backport #10297: Simplify DisconnectBlock arguments/return value -- [`fc5ced317`](https://github.com/raptoreum/raptoreum/commit/fc5ced317) Backport #10445: Add test for empty chain and reorg consistency for gettxoutsetinfo. -- [`6f1997182`](https://github.com/raptoreum/raptoreum/commit/6f1997182) Add COMPACTSIZE wrapper similar to VARINT for serialization -- [`b06a6a2e7`](https://github.com/raptoreum/raptoreum/commit/b06a6a2e7) Fix use of missing self.log in blockchain.py -- [`8ed672219`](https://github.com/raptoreum/raptoreum/commit/8ed672219) Backport #10250: Fix some empty vector references -- [`afa96b7c1`](https://github.com/raptoreum/raptoreum/commit/afa96b7c1) Backport #10249: Switch CCoinsMap from boost to std unordered_map -- [`c81394b97`](https://github.com/raptoreum/raptoreum/commit/c81394b97) Backport #10195: Switch chainstate db and cache to per-txout model -- [`d4562b5e5`](https://github.com/raptoreum/raptoreum/commit/d4562b5e5) Fix CCoinsViewCache::GetPriority to use new per-utxo -- [`92bb65894`](https://github.com/raptoreum/raptoreum/commit/92bb65894) Fix address index to use new per-utxo DB -- [`9ad56fe18`](https://github.com/raptoreum/raptoreum/commit/9ad56fe18) Raptoreum related fixes for per-utxo DB -- [`4f807422f`](https://github.com/raptoreum/raptoreum/commit/4f807422f) Backport #10550: Don't return stale data from CCoinsViewCache::Cursor() -- [`151c552c7`](https://github.com/raptoreum/raptoreum/commit/151c552c7) Backport #10537: Few Minor per-utxo assert-semantics re-adds and tweak -- [`06aa02ff6`](https://github.com/raptoreum/raptoreum/commit/06aa02ff6) Backport #10559: Change semantics of HaveCoinInCache to match HaveCoin -- [`549839a50`](https://github.com/raptoreum/raptoreum/commit/549839a50) Backport #10581: Simplify return values of GetCoin/HaveCoin(InCache) -- [`5b232161a`](https://github.com/raptoreum/raptoreum/commit/5b232161a) Backport #10558: Address nits from per-utxo change -- [`1a9add78c`](https://github.com/raptoreum/raptoreum/commit/1a9add78c) Backport #10660: Allow to cancel the txdb upgrade via splashscreen keypress 'q' -- [`4102211a3`](https://github.com/raptoreum/raptoreum/commit/4102211a3) Backport #10526: Force on-the-fly compaction during pertxout upgrade -- [`8780c762e`](https://github.com/raptoreum/raptoreum/commit/8780c762e) Backport #10985: Add undocumented -forcecompactdb to force LevelDB compactions -- [`4cd19913d`](https://github.com/raptoreum/raptoreum/commit/4cd19913d) Backport #10998: Fix upgrade cancel warnings -- [`371feda4c`](https://github.com/raptoreum/raptoreum/commit/371feda4c) Backport #11529: Avoid slow transaction search with txindex enabled -- [`cdb2b1944`](https://github.com/raptoreum/raptoreum/commit/cdb2b1944) build: quiet annoying warnings without adding new ones -- [`fee05dab9`](https://github.com/raptoreum/raptoreum/commit/fee05dab9) build: silence gcc7's implicit fallthrough warning - -### Smartnodes: -- [`312663b4b`](https://github.com/raptoreum/raptoreum/commit/312663b4b) Remove support for local smartnodes (#1706) - -### PrivateSend: -- [`7e96af4e6`](https://github.com/raptoreum/raptoreum/commit/7e96af4e6) Refactor PrivateSend (#1735) -- [`f4502099a`](https://github.com/raptoreum/raptoreum/commit/f4502099a) make CheckDSTXes() private, execute it on both client and server (#1736) - -### InstantSend: -- [`4802a1fb7`](https://github.com/raptoreum/raptoreum/commit/4802a1fb7) Allow IS for all txes, not only for txes with p2pkh and data outputs (#1760) -- [`f37a64208`](https://github.com/raptoreum/raptoreum/commit/f37a64208) InstantSend txes should never qualify to be a 0-fee txes (#1777) - -### DIP0001: -- [`3028af19f`](https://github.com/raptoreum/raptoreum/commit/3028af19f) post-DIP0001 cleanup (#1763) -- [`51b2c7501`](https://github.com/raptoreum/raptoreum/commit/51b2c7501) Fix WarningBitsConditionChecker (#1765) - -### Network/Sync: -- [`5d58dd90c`](https://github.com/raptoreum/raptoreum/commit/5d58dd90c) Make sure to clear setAskFor in Raptoreum submodules (#1730) -- [`328009749`](https://github.com/raptoreum/raptoreum/commit/328009749) fine-tune sync conditions in getblocktemplate (#1739) -- [`362becbcc`](https://github.com/raptoreum/raptoreum/commit/362becbcc) Bump MIN_PEER_PROTO_VERSION to 70208 (#1772) -- [`930afd7df`](https://github.com/raptoreum/raptoreum/commit/930afd7df) Fix mnp and mnv invs (#1775) -- [`63e306148`](https://github.com/raptoreum/raptoreum/commit/63e306148) Improve sync (#1779) -- [`a79c97248`](https://github.com/raptoreum/raptoreum/commit/a79c97248) Fix ProcessVerifyBroadcast (#1780) - -### Build: -- [`c166ed39b`](https://github.com/raptoreum/raptoreum/commit/c166ed39b) Allow compilation with `--disable-wallet` (#1733) -- [`31bc9d4ee`](https://github.com/raptoreum/raptoreum/commit/31bc9d4ee) Show test progress for tests running in wine to avoid Travis timeout (#1740) -- [`32f21698e`](https://github.com/raptoreum/raptoreum/commit/32f21698e) Adjust tests to avoid Travis timeouts (#1745) -- [`837c4fc5d`](https://github.com/raptoreum/raptoreum/commit/837c4fc5d) Force rcc to use resource format version 1. (#1784) - -### GUI: -- [`70cb2a4af`](https://github.com/raptoreum/raptoreum/commit/70cb2a4af) Fix traditional UI theme (#1741) -- [`e975f891c`](https://github.com/raptoreum/raptoreum/commit/e975f891c) Fix ru typo (#1742) - -### Docs: -- [`bc8342558`](https://github.com/raptoreum/raptoreum/commit/bc8342558) Two small fixes in docs (#1746) -- [`9e7cc56cb`](https://github.com/raptoreum/raptoreum/commit/9e7cc56cb) Fix typo in release-notes.md (#1759) -- [`3f3705c47`](https://github.com/raptoreum/raptoreum/commit/3f3705c47) [Trivial] Typo/doc updates and RPC help formatting (#1758) -- [`e96da9f19`](https://github.com/raptoreum/raptoreum/commit/e96da9f19) move 0.12.2 release notes -- [`6915ee45e`](https://github.com/raptoreum/raptoreum/commit/6915ee45e) Bump version in README.md to 0.12.2 (#1774) -- [`0291604ad`](https://github.com/raptoreum/raptoreum/commit/0291604ad) Clarify usage of pointers and references in code (#1778) - -### Other: -- [`ccbd5273e`](https://github.com/raptoreum/raptoreum/commit/ccbd5273e) bump to 0.12.3.0 (#1726) -- [`865b61b50`](https://github.com/raptoreum/raptoreum/commit/865b61b50) Unify GetNextWorkRequired (#1737) -- [`d1aeac1b2`](https://github.com/raptoreum/raptoreum/commit/d1aeac1b2) Spelling mistake in validation.cpp (#1752) -- [`442325b07`](https://github.com/raptoreum/raptoreum/commit/442325b07) add `maxgovobjdatasize` field to the output of `getgovernanceinfo` (#1757) -- [`c5ec2f82a`](https://github.com/raptoreum/raptoreum/commit/c5ec2f82a) Drop `IsNormalPaymentScript`, use `IsPayToPublicKeyHash` (#1761) -- [`f9f28e7c7`](https://github.com/raptoreum/raptoreum/commit/f9f28e7c7) De-bump to 0.12.2.2 (#1768) -- [`54186a159`](https://github.com/raptoreum/raptoreum/commit/54186a159) Make sure additional indexes are recalculated correctly in VerifyDB (#1773) -- [`86e6f0dd2`](https://github.com/raptoreum/raptoreum/commit/86e6f0dd2) Fix CSmartnodeMan::ProcessVerify* logs (#1782) - - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alexander Block -- shade -- sidhujag -- thephez -- turbanoff -- Ilya Savinov -- UdjinM6 -- Will Wray - -As well as Bitcoin Core Developers and everyone that submitted issues, -reviewed pull requests or helped translating on -[Transifex](https://www.transifex.com/projects/p/raptoreum/). - - -Older releases -============== - -Raptoreum was previously known as Darkcoin. - -Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin -which was first released on Jan/18/2014. - -Darkcoin tree 0.9.x was the open source implementation of smartnodes based on -the 0.8.x tree and was first released on Mar/13/2014. - -Darkcoin tree 0.10.x used to be the closed source implementation of Darksend -which was released open source on Sep/25/2014. - -Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, -Darkcoin was rebranded to Raptoreum. - -Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. - -Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. - -These release are considered obsolete. Old release notes can be found here: - -- [v0.12.2](release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](release-notes/raptoreum/release-notes-0.12.1.md) released ???/??/2016 -- [v0.12.0](release-notes/raptoreum/release-notes-0.12.0.md) released ???/??/2015 -- [v0.11.2](release-notes/raptoreum/release-notes-0.11.2.md) released Mar/25/2015 -- [v0.11.1](release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 - diff --git a/doc/release-notes/raptoreum/release-notes-0.12.2.md b/doc/release-notes/raptoreum/release-notes-0.12.2.md deleted file mode 100644 index 95ffc6d4b2..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.12.2.md +++ /dev/null @@ -1,410 +0,0 @@ -Raptoreum Core version 0.12.2 -======================== - -Release 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/Raptoreum-Qt (on Mac) or -raptoreumd/raptoreum-qt (on Linux). - -Downgrade warning ------------------ -### Downgrade to a version < 0.12.2 - -Because release 0.12.2 includes DIP0001 (2 MB block size hardfork) plus -a transaction fee reduction and a fix for smartnode rank calculation algo -(which activation also depends on DIP0001) this release will not be -backwards compatible after DIP0001 lock in/activation happens. - -This does not affect wallet forward or backward compatibility. - -Notable changes -=============== - -DIP0001 -------- - -We outline an initial scaling mechanism for Raptoreum. After deployment and activation, Raptoreum will be able to handle double the transactions it can currently handle. Together with the faster block times, Raptoreum we will be prepared to handle eight times the traffic of Bitcoin. - -https://github.com/raptoreum/dips/blob/master/dip-0001.md - - -Fee reduction -------------- - -All transaction fees are reduced 10x (from 10K per Kb to 1K per Kb), including fees for InstantSend (from 0.001 RAPTOREUM per input to 0.0001 per input) - -InstantSend fix ---------------- - -The potential vulnerability found by Matt Robertson and Alexander Block was fixed in d7a8489f3 (#1620). - -RPC changes ------------ - -There are few changes in existing RPC in this release: -- There is no more `bcconfirmations` field in RPC output and `confirmations` shows blockchain only confirmations by default now. You can change this behaviour by switching new `addlockconf` param to `true`. There is a new rpc field `instantlock` which indicates whether a given transaction is locked via InstantSend. For more info and examples please see https://github.com/raptoreum/raptoreum/blob/v0.12.2.x/doc/instantsend.md; -- `gobject list` and `gobject diff` accept `funding`, `delete` and `endorsed` filtering options now, in addition to `valid` and `all` currently available; -- `vin` field in `smartnode` commands is renamed to `outpoint` and shows data in short format now; -- `getblocktemplate` output is extended with versionbits-related information; -- Output of wallet-related commands `validateaddress` is extended with optional `hdkeypath` and `hdchainid` fields. - -There are few new RPC commands also: -- `smartnodelist info` shows additional information about sentinel for each smartnode in the list; -- `smartnodelist pubkey` shows pubkey corresponding to smartnodeprivkey for each smartnode in the list; -- `gobject check` allows to check proposal data for correctness before preparing/submitting the proposal, `gobject prepare` and `gobject submit` should also perform additional validation now though; -- `setnetworkactive` allows to turn all network activity on and off; -- `dumphdinfo` displays some information about HD wallet (if available). - -Command-line options --------------------- - -New: `assumevalid`, `blocksonly`, `reindex-chainstate` - -Experimental: `usehd`, `mnemonic`, `mnemonicpassphrase`, `hdseed` - -See `Help -> Command-line options` in Qt wallet or `raptoreumd --help` for more info. - -PrivateSend improvements ------------------------- - -Algorithm for selecting inputs was slightly changed in [`6067896ae`](https://github.com/raptoreum/raptoreum/commit/6067896ae) ([#1248](https://github.com/raptoreum/raptoreum/pull/1248)). This should allow user to get some mixed funds much faster. - -Lots of backports, refactoring and bug fixes --------------------------------------------- - -We backported some performance improvements from Bitcoin Core and aligned our codebase with their source a little bit better. We still do not have all the improvements so this work is going to be continued in next releases. - -A lot of refactoring and other fixes should make code more reliable and easier to review now. - -Experimental HD wallet ----------------------- - -This release includes experimental implementation of BIP39/BIP44 compatible HD wallet. Wallet type (HD or non-HD) is selected when wallet is created via `usehd` command-line option, default is `0` which means that a regular non-deterministic wallet is going to be used. If you decide to use HD wallet, you can also specify BIP39 mnemonic and mnemonic passphrase (see `mnemonic` and `mnemonicpassphrase` command-line options) but you can do so only on initial wallet creation and can't change these afterwards. If you don't specify them, mnemonic is going to be generated randomly and mnemonic passphrase is going to be just a blank string. - -**WARNING:** The way it's currently implemented is NOT safe and is NOT recommended to use on mainnet. Wallet is created unencrypted with mnemonic stored inside, so even if you encrypt it later there will be a short period of time when mnemonic is stored in plain text. This issue will be addressed in future releases. - -0.12.2 Change log -================= - -Detailed [change log](https://github.com/raptoreum/raptoreum/compare/v0.12.1.x...raptoreum:v0.12.2.x) below. - -### Backports: -- [`ff30aed68`](https://github.com/raptoreum/raptoreum/commit/ff30aed68) Align with btc 0.12 (#1409) -- [`9901cf433`](https://github.com/raptoreum/raptoreum/commit/9901cf433) Fix for raptoreum-qt issue with startup and multiple monitors. (#1461) -- [`39750439b`](https://github.com/raptoreum/raptoreum/commit/39750439b) Force to use C++11 mode for compilation (#1463) -- [`e30faab6f`](https://github.com/raptoreum/raptoreum/commit/e30faab6f) Make strWalletFile const (#1459) -- [`c4fe22900`](https://github.com/raptoreum/raptoreum/commit/c4fe22900) Access WorkQueue::running only within the cs lock. (#1460) -- [`8572d54a9`](https://github.com/raptoreum/raptoreum/commit/8572d54a9) trivial: fix bloom filter init to isEmpty = true (#1458) -- [`b272ae56a`](https://github.com/raptoreum/raptoreum/commit/b272ae56a) Avoid ugly exception in log on unknown inv type (#1457) -- [`e99dbe620`](https://github.com/raptoreum/raptoreum/commit/e99dbe620) Don't return the address of a P2SH of a P2SH (#1455) -- [`f24efd483`](https://github.com/raptoreum/raptoreum/commit/f24efd483) Generate auth cookie in hex instead of base64 (#1454) -- [`3efcb755e`](https://github.com/raptoreum/raptoreum/commit/3efcb755e) Do not shadow LOCK's criticalblock variable for LOCK inside LOCK (#1453) -- [`b7822464f`](https://github.com/raptoreum/raptoreum/commit/b7822464f) Remove unnecessary LOCK(cs_main) in getrawpmempool (#1452) -- [`72176e501`](https://github.com/raptoreum/raptoreum/commit/72176e501) Remove duplicate bantablemodel.h include (#1446) -- [`634ef6c06`](https://github.com/raptoreum/raptoreum/commit/634ef6c06) Fix for build on Ubuntu 14.04 with system libraries (#1467) -- [`c0450f609`](https://github.com/raptoreum/raptoreum/commit/c0450f609) Improve EncodeBase58/DecodeBase58 performance (#1456) -- [`258ed119a`](https://github.com/raptoreum/raptoreum/commit/258ed119a) auto_ptr → unique_ptr -- [`be968206b`](https://github.com/raptoreum/raptoreum/commit/be968206b) Boost 1.61.0 -- [`7f8775409`](https://github.com/raptoreum/raptoreum/commit/7f8775409) Boost 1.63.0 -- [`11afc8f4b`](https://github.com/raptoreum/raptoreum/commit/11afc8f4b) Minimal fix to slow prevector tests as stopgap measure -- [`11121747b`](https://github.com/raptoreum/raptoreum/commit/11121747b) build: fix qt5.7 build under macOS (#1469) -- [`5988e1e7f`](https://github.com/raptoreum/raptoreum/commit/5988e1e7f) Increase minimum debug.log size to 10MB after shrink. (#1480) -- [`a443d4e2d`](https://github.com/raptoreum/raptoreum/commit/a443d4e2d) Backport Bitcoin PRs #6589, #7180 and remaining part of #7181: enable per-command byte counters in `CNode` (#1496) -- [`f9730cb2e`](https://github.com/raptoreum/raptoreum/commit/f9730cb2e) Increase test coverage for addrman and addrinfo (#1497) -- [`a12491448`](https://github.com/raptoreum/raptoreum/commit/a12491448) Eliminate unnecessary call to CheckBlock (#1498) -- [`b0843c397`](https://github.com/raptoreum/raptoreum/commit/b0843c397) Backport Bincoin PR#7348: MOVE ONLY: move rpc* to rpc/ + same for Raptoreum-specific rpc (#1502) -- [`f65017cfe`](https://github.com/raptoreum/raptoreum/commit/f65017cfe) Backport Bitcoin PR#7349: Build against system UniValue when available (#1503) -- [`ac6c3c900`](https://github.com/raptoreum/raptoreum/commit/ac6c3c900) Backport Bitcoin PR#7350: Banlist updates (#1505) -- [`d787fe4ab`](https://github.com/raptoreum/raptoreum/commit/d787fe4ab) Backport Bitcoin PR#7458: [Net] peers.dat, banlist.dat recreated when missing (#1506) -- [`6af9955fa`](https://github.com/raptoreum/raptoreum/commit/6af9955fa) Backport Bitcoin PR#7696: Fix de-serialization bug where AddrMan is corrupted after exception (#1507) -- [`b39c518d5`](https://github.com/raptoreum/raptoreum/commit/b39c518d5) Backport Bitcoin PR#7749: Enforce expected outbound services (#1508) -- [`9268a336d`](https://github.com/raptoreum/raptoreum/commit/9268a336d) Backport Bitcoin PR#7917: Optimize reindex (#1515) -- [`b47984f30`](https://github.com/raptoreum/raptoreum/commit/b47984f30) Remove non-determinism which is breaking net_tests #8069 (#1517) -- [`9a8a290b8`](https://github.com/raptoreum/raptoreum/commit/9a8a290b8) fix race that could fail to persist a ban (#1518) -- [`5a1961e5e`](https://github.com/raptoreum/raptoreum/commit/5a1961e5e) Backport Bitcoin PR#7906: net: prerequisites for p2p encapsulation changes (#1521) -- [`7b5556a29`](https://github.com/raptoreum/raptoreum/commit/7b5556a29) Backport Bitcoin PR#8084: Add recently accepted blocks and txn to AttemptToEvictConnection (#1522) -- [`9ce2b966c`](https://github.com/raptoreum/raptoreum/commit/9ce2b966c) Backport Bitcoin PR#8113: Rework addnode behaviour (#1525) -- [`aa32f1dc9`](https://github.com/raptoreum/raptoreum/commit/aa32f1dc9) Remove bad chain alert partition check (#1529) -- [`d934ffb2f`](https://github.com/raptoreum/raptoreum/commit/d934ffb2f) Added feeler connections increasing good addrs in the tried table. (#1530) -- [`290fb3b57`](https://github.com/raptoreum/raptoreum/commit/290fb3b57) Backport Bitcoin PR#7942: locking for Misbehave() and other cs_main locking fixes (#1535) -- [`a9d771e49`](https://github.com/raptoreum/raptoreum/commit/a9d771e49) Backport Bitcoin PR#8085: p2p: Begin encapsulation (#1537) -- [`82851b439`](https://github.com/raptoreum/raptoreum/commit/82851b439) Backport Bitcoin PR#8049: Expose information on whether transaction relay is enabled in `getnetwork` (#1545) -- [`7707c0789`](https://github.com/raptoreum/raptoreum/commit/7707c0789) backport 9008: Remove assert(nMaxInbound > 0) (#1548) -- [`b621cfb5f`](https://github.com/raptoreum/raptoreum/commit/b621cfb5f) Backport Bitcoin PR#8708: net: have CConnman handle message sending (#1553) -- [`cc4db34f4`](https://github.com/raptoreum/raptoreum/commit/cc4db34f4) net: only delete CConnman if it's been created (#1555) -- [`a3c8cb20d`](https://github.com/raptoreum/raptoreum/commit/a3c8cb20d) Backport Bitcoin PR#8865: Decouple peer-processing-logic from block-connection-logic (#1556) -- [`e7e106e22`](https://github.com/raptoreum/raptoreum/commit/e7e106e22) Backport Bitcoin PR#8969: Decouple peer-processing-logic from block-connection-logic (#2) (#1558) -- [`b4b343145`](https://github.com/raptoreum/raptoreum/commit/b4b343145) Backport Bitcoin PR#9075: Decouple peer-processing-logic from block-connection-logic (#3) (#1560) -- [`415085c73`](https://github.com/raptoreum/raptoreum/commit/415085c73) Backport Bitcoin PR#9183: Final Preparation for main.cpp Split (#1561) -- [`bcf5455bf`](https://github.com/raptoreum/raptoreum/commit/bcf5455bf) Backport Bitcoin PR#8822: net: Consistent checksum handling (#1565) -- [`df6d458b8`](https://github.com/raptoreum/raptoreum/commit/df6d458b8) Backport Bitcoin PR#9260: Mrs Peacock in The Library with The Candlestick (killed main.{h,cpp}) (#1566) -- [`42c784dc7`](https://github.com/raptoreum/raptoreum/commit/42c784dc7) Backport Bitcoin PR#9289: net: drop boost::thread_group (#1568) -- [`b9c67258b`](https://github.com/raptoreum/raptoreum/commit/b9c67258b) Backport Bitcoin PR#9609: net: fix remaining net assertions (#1575) + Raptoreumify -- [`2472999da`](https://github.com/raptoreum/raptoreum/commit/2472999da) Backport Bitcoin PR#9441: Net: Massive speedup. Net locks overhaul (#1586) -- [`ccee103a0`](https://github.com/raptoreum/raptoreum/commit/ccee103a0) Backport "assumed valid blocks" feature from Bitcoin 0.13 (#1582) -- [`105122181`](https://github.com/raptoreum/raptoreum/commit/105122181) Partially backport Bitcoin PR#9626: Clean up a few CConnman cs_vNodes/CNode things (#1591) -- [`76181f575`](https://github.com/raptoreum/raptoreum/commit/76181f575) Do not add random inbound peers to addrman. (#1593) -- [`589d22f2c`](https://github.com/raptoreum/raptoreum/commit/589d22f2c) net: No longer send local address in addrMe (#1600) -- [`b41d9eac2`](https://github.com/raptoreum/raptoreum/commit/b41d9eac2) Backport Bitcoin PR#7868: net: Split DNS resolving functionality out of net structures (#1601) -- [`b82b9787d`](https://github.com/raptoreum/raptoreum/commit/b82b9787d) Backport Bitcoin PR#8128: Net: Turn net structures into dumb storage classes (#1604) -- [`690cb58f8`](https://github.com/raptoreum/raptoreum/commit/690cb58f8) Backport Bitcoin Qt/Gui changes up to 0.14.x part 1 (#1614) -- [`9707ca5ce`](https://github.com/raptoreum/raptoreum/commit/9707ca5ce) Backport Bitcoin Qt/Gui changes up to 0.14.x part 2 (#1615) -- [`91d99fcd3`](https://github.com/raptoreum/raptoreum/commit/91d99fcd3) Backport Bitcoin Qt/Gui changes up to 0.14.x part 3 (#1617) -- [`4cac044d9`](https://github.com/raptoreum/raptoreum/commit/4cac044d9) Merge #8944: Remove bogus assert on number of oubound connections. (#1685) -- [`d23adcc0f`](https://github.com/raptoreum/raptoreum/commit/d23adcc0f) Merge #10231: [Qt] Reduce a significant cs_main lock freeze (#1704) - -### PrivateSend: -- [`6067896ae`](https://github.com/raptoreum/raptoreum/commit/6067896ae) mix inputs with highest number of rounds first (#1248) -- [`559f8421b`](https://github.com/raptoreum/raptoreum/commit/559f8421b) Few fixes for PrivateSend (#1408) -- [`7242e2922`](https://github.com/raptoreum/raptoreum/commit/7242e2922) Refactor PS (#1437) -- [`68e858f8d`](https://github.com/raptoreum/raptoreum/commit/68e858f8d) PrivateSend: dont waste keys from keypool on failure in CreateDenominated (#1473) -- [`2daea77a5`](https://github.com/raptoreum/raptoreum/commit/2daea77a5) fix calculation of (unconfirmed) anonymizable balance (#1477) -- [`029ee6494`](https://github.com/raptoreum/raptoreum/commit/029ee6494) split CPrivateSend (#1492) -- [`739ef9a68`](https://github.com/raptoreum/raptoreum/commit/739ef9a68) Expire confirmed DSTXes after ~1h since confirmation (#1499) -- [`7abac068b`](https://github.com/raptoreum/raptoreum/commit/7abac068b) fix MakeCollateralAmounts (#1500) -- [`0f05e25c7`](https://github.com/raptoreum/raptoreum/commit/0f05e25c7) fix a bug in CommitFinalTransaction (#1540) -- [`82595b1b9`](https://github.com/raptoreum/raptoreum/commit/82595b1b9) fix number of blocks to wait after successful mixing tx (#1597) -- [`33e460f30`](https://github.com/raptoreum/raptoreum/commit/33e460f30) Fix losing keys on PrivateSend (#1616) -- [`ea793a71f`](https://github.com/raptoreum/raptoreum/commit/ea793a71f) Make sure mixing smartnode follows bip69 before signing final mixing tx (#1510) -- [`8c15f5f87`](https://github.com/raptoreum/raptoreum/commit/8c15f5f87) speedup MakeCollateralAmounts by skiping denominated inputs early (#1631) -- [`8e9289e12`](https://github.com/raptoreum/raptoreum/commit/8e9289e12) Keep track of wallet UTXOs and use them for PS balances and rounds calculations (#1655) -- [`f77efcf24`](https://github.com/raptoreum/raptoreum/commit/f77efcf24) do not calculate stuff that are not going to be visible in simple PS UI anyway (#1656) - -### InstantSend: -- [`68e1a8c79`](https://github.com/raptoreum/raptoreum/commit/68e1a8c79) Safety check in CInstantSend::SyncTransaction (#1412) -- [`4a9fbca08`](https://github.com/raptoreum/raptoreum/commit/4a9fbca08) Fix potential deadlock in CInstantSend::UpdateLockedTransaction (#1571) -- [`f786ce6ab`](https://github.com/raptoreum/raptoreum/commit/f786ce6ab) fix instantsendtoaddress param convertion (#1585) -- [`ae909d0a0`](https://github.com/raptoreum/raptoreum/commit/ae909d0a0) Fix: Reject invalid instantsend transaction (#1583) -- [`84ecccefc`](https://github.com/raptoreum/raptoreum/commit/84ecccefc) InstandSend overhaul (#1592) -- [`5f4362cb8`](https://github.com/raptoreum/raptoreum/commit/5f4362cb8) fix SPORK_5_INSTANTSEND_MAX_VALUE validation in CWallet::CreateTransaction (#1619) -- [`d7a8489f3`](https://github.com/raptoreum/raptoreum/commit/d7a8489f3) Fix smartnode score/rank calculations (#1620) -- [`b41f8d3dd`](https://github.com/raptoreum/raptoreum/commit/b41f8d3dd) fix instantsend-related RPC output (#1628) -- [`502748487`](https://github.com/raptoreum/raptoreum/commit/502748487) bump MIN_INSTANTSEND_PROTO_VERSION to 70208 (#1650) -- [`788ae63ac`](https://github.com/raptoreum/raptoreum/commit/788ae63ac) Fix edge case for IS (skip inputs that are too large) (#1695) -- [`470e5435c`](https://github.com/raptoreum/raptoreum/commit/470e5435c) remove InstantSend votes for failed lock attemts after some timeout (#1705) -- [`a9293ad03`](https://github.com/raptoreum/raptoreum/commit/a9293ad03) update setAskFor on TXLOCKVOTE (#1713) -- [`859144809`](https://github.com/raptoreum/raptoreum/commit/859144809) fix bug introduced in #1695 (#1714) - -### Governance: -- [`4595db0ce`](https://github.com/raptoreum/raptoreum/commit/4595db0ce) Few changes for governance rpc: (#1351) -- [`411332f94`](https://github.com/raptoreum/raptoreum/commit/411332f94) sentinel uses status of funding votes (#1440) -- [`a109a611f`](https://github.com/raptoreum/raptoreum/commit/a109a611f) Validate proposals on prepare and submit (#1488) -- [`a439e9840`](https://github.com/raptoreum/raptoreum/commit/a439e9840) Replace watchdogs with ping (#1491) -- [`109c5fd1d`](https://github.com/raptoreum/raptoreum/commit/109c5fd1d) Fixed issues with propagation of governance objects (#1489) -- [`f7aa81586`](https://github.com/raptoreum/raptoreum/commit/f7aa81586) Fix issues with mapSeenGovernanceObjects (#1511) -- [`8075370d1`](https://github.com/raptoreum/raptoreum/commit/8075370d1) change invalid version string constant (#1532) -- [`916af52c0`](https://github.com/raptoreum/raptoreum/commit/916af52c0) Fix vulnerability with mapSmartnodeOrphanObjects (#1512) -- [`70eb83a5c`](https://github.com/raptoreum/raptoreum/commit/70eb83a5c) New rpc call "smartnodelist info" (#1513) -- [`f47f0daf9`](https://github.com/raptoreum/raptoreum/commit/f47f0daf9) add 6 to strAllowedChars (#1542) -- [`6cb3fddcc`](https://github.com/raptoreum/raptoreum/commit/6cb3fddcc) fixed potential deadlock in CSuperblockManager::IsSuperblockTriggered (#1536) -- [`15958c594`](https://github.com/raptoreum/raptoreum/commit/15958c594) fix potential deadlock (PR#1536 fix) (#1538) -- [`1c4e2946a`](https://github.com/raptoreum/raptoreum/commit/1c4e2946a) fix potential deadlock in CGovernanceManager::ProcessVote (#1541) -- [`4942884c7`](https://github.com/raptoreum/raptoreum/commit/4942884c7) fix potential deadlock in CSmartnodeMan::CheckMnbAndUpdateSmartnodeList (#1543) -- [`4ed838cb5`](https://github.com/raptoreum/raptoreum/commit/4ed838cb5) Fix SmartnodeRateCheck (#1490) -- [`6496fc9da`](https://github.com/raptoreum/raptoreum/commit/6496fc9da) fix off-by-1 in CSuperblock::GetPaymentsLimit (#1598) -- [`48d63ab29`](https://github.com/raptoreum/raptoreum/commit/48d63ab29) Relay govobj and govvote to every compatible peer, not only to the one with the same version (#1662) -- [`6f57519c6`](https://github.com/raptoreum/raptoreum/commit/6f57519c6) allow up to 40 chars in proposal name (#1693) -- [`ceda3abe6`](https://github.com/raptoreum/raptoreum/commit/ceda3abe6) start_epoch, end_epoch and payment_amount should be numbers, not strings (#1707) - -### Network/Sync: -- [`62963e911`](https://github.com/raptoreum/raptoreum/commit/62963e911) fix sync reset which is triggered erroneously during reindex (#1478) -- [`fc406f2d8`](https://github.com/raptoreum/raptoreum/commit/fc406f2d8) track asset sync time (#1479) -- [`9e9df2820`](https://github.com/raptoreum/raptoreum/commit/9e9df2820) do not use smartnode connections in feeler logic (#1533) -- [`9694658cd`](https://github.com/raptoreum/raptoreum/commit/9694658cd) Make sure mixing messages are relayed/accepted properly (#1547) -- [`87707c012`](https://github.com/raptoreum/raptoreum/commit/87707c012) fix CDSNotificationInterface::UpdatedBlockTip signature (#1562) -- [`105713c10`](https://github.com/raptoreum/raptoreum/commit/105713c10) Sync overhaul (#1564) -- [`0fc13434b`](https://github.com/raptoreum/raptoreum/commit/0fc13434b) limit UpdatedBlockTip in IBD (#1570) -- [`510c0a06d`](https://github.com/raptoreum/raptoreum/commit/510c0a06d) Relay tx in sendrawtransaction according to its inv.type (#1584) -- [`c56ba56e7`](https://github.com/raptoreum/raptoreum/commit/c56ba56e7) net: Consistently use GetTimeMicros() for inactivity checks (#1588) -- [`4f5455000`](https://github.com/raptoreum/raptoreum/commit/4f5455000) Use GetAdjustedTime instead of GetTime when dealing with network-wide timestamps (#1590) -- [`4f0618ae8`](https://github.com/raptoreum/raptoreum/commit/4f0618ae8) Fix sync issues (#1599) -- [`169afafd5`](https://github.com/raptoreum/raptoreum/commit/169afafd5) Fix duplicate headers download in initial sync (#1589) -- [`91ae0b712`](https://github.com/raptoreum/raptoreum/commit/91ae0b712) Use connman passed to ThreadSendAlert() instead of g_connman global. (#1610) -- [`8da26da71`](https://github.com/raptoreum/raptoreum/commit/8da26da71) Eliminate g_connman use in spork module. (#1613) -- [`4956ba7a7`](https://github.com/raptoreum/raptoreum/commit/4956ba7a7) Eliminate g_connman use in instantx module. (#1626) -- [`10eddb52d`](https://github.com/raptoreum/raptoreum/commit/10eddb52d) Move some (spamy) CSmartnodeSync log messages to new `mnsync` log category (#1630) -- [`753b1e486`](https://github.com/raptoreum/raptoreum/commit/753b1e486) Eliminate remaining uses of g_connman in Raptoreum-specific code. (#1635) -- [`8949f4345`](https://github.com/raptoreum/raptoreum/commit/8949f4345) Wait for full sync in functional tests that use getblocktemplate. (#1642) -- [`5f0da8aa7`](https://github.com/raptoreum/raptoreum/commit/5f0da8aa7) fix sync (#1643) -- [`7a8910443`](https://github.com/raptoreum/raptoreum/commit/7a8910443) Fix unlocked access to vNodes.size() (#1654) -- [`278cf144b`](https://github.com/raptoreum/raptoreum/commit/278cf144b) Remove cs_main from ThreadMnbRequestConnections (#1658) -- [`52cd4d40d`](https://github.com/raptoreum/raptoreum/commit/52cd4d40d) Fix bug: nCachedBlockHeight was not updated on start (#1673) -- [`1df889e23`](https://github.com/raptoreum/raptoreum/commit/1df889e23) Add more logging for MN votes and MNs missing votes (#1683) -- [`28c8d1729`](https://github.com/raptoreum/raptoreum/commit/28c8d1729) Fix sync reset on lack of activity (#1686) -- [`dfb8dbbf6`](https://github.com/raptoreum/raptoreum/commit/dfb8dbbf6) Fix mnp relay bug (#1700) - -### GUI: -- [`5758ae1bf`](https://github.com/raptoreum/raptoreum/commit/5758ae1bf) Full path in "failed to load cache" warnings (#1411) -- [`18c83f58e`](https://github.com/raptoreum/raptoreum/commit/18c83f58e) Qt: bug fixes and enhancement to traffic graph widget (#1429) -- [`72fbfe93d`](https://github.com/raptoreum/raptoreum/commit/72fbfe93d) Icon Cutoff Fix (#1485) -- [`4df8a20f9`](https://github.com/raptoreum/raptoreum/commit/4df8a20f9) Fix windows installer script, should handle `raptoreum:` uri correctly now (#1550) -- [`8b7dffbb6`](https://github.com/raptoreum/raptoreum/commit/8b7dffbb6) Update startup shortcuts (#1551) -- [`6ff7b7aa5`](https://github.com/raptoreum/raptoreum/commit/6ff7b7aa5) fix TrafficGraphData bandwidth calculation (#1618) -- [`026ad8421`](https://github.com/raptoreum/raptoreum/commit/026ad8421) Fix empty tooltip during sync under specific conditions (#1637) -- [`08e503da2`](https://github.com/raptoreum/raptoreum/commit/08e503da2) [GUI] Change look of modaloverlay (#1653) -- [`296cfd2ef`](https://github.com/raptoreum/raptoreum/commit/296cfd2ef) Fix compilation with qt < 5.2 (#1672) -- [`11afd7cfd`](https://github.com/raptoreum/raptoreum/commit/11afd7cfd) Translations201710 - en, de, fi, fr, ru, vi (#1659) -- [`14d11e4a8`](https://github.com/raptoreum/raptoreum/commit/14d11e4a8) Translations 201710 part2 (#1676) -- [`2144dae91`](https://github.com/raptoreum/raptoreum/commit/2144dae91) Add hires version of `light` theme for Hi-DPI screens (#1712) - -### DIP0001: -- [`cd262bf64`](https://github.com/raptoreum/raptoreum/commit/cd262bf64) DIP0001 implementation (#1594) -- [`6a6b31b74`](https://github.com/raptoreum/raptoreum/commit/6a6b31b74) Dip0001-related adjustments (inc. constants) (#1621) -- [`e22453c90`](https://github.com/raptoreum/raptoreum/commit/e22453c90) fix fDIP0001* flags initialization (#1625) -- [`25fa44d5a`](https://github.com/raptoreum/raptoreum/commit/25fa44d5a) fix DIP0001 implementation (#1639) -- [`d07ac4fbd`](https://github.com/raptoreum/raptoreum/commit/d07ac4fbd) fix: update DIP0001 related stuff even in IBD (#1652) -- [`d28619872`](https://github.com/raptoreum/raptoreum/commit/d28619872) fix: The idea behind fDIP0001LockedInAtTip was to indicate that it WAS locked in, not that it IS locked in (#1666) - -### Wallet: -- [`27f3218de`](https://github.com/raptoreum/raptoreum/commit/27f3218de) HD wallet (#1405) -- [`b6804678f`](https://github.com/raptoreum/raptoreum/commit/b6804678f) Minor Warning Fixed (#1482) -- [`cd76f2a15`](https://github.com/raptoreum/raptoreum/commit/cd76f2a15) Disable HD wallet by default (#1629) -- [`8f850c60f`](https://github.com/raptoreum/raptoreum/commit/8f850c60f) Lower tx fees 10x (#1632) -- [`7ab175a8e`](https://github.com/raptoreum/raptoreum/commit/7ab175a8e) Ensure Raptoreum wallets < 0.12.2 can't open HD wallets (#1638) -- [`7efa5e79d`](https://github.com/raptoreum/raptoreum/commit/7efa5e79d) fix fallback fee (#1649) - -### RPC: -- [`a0851494d`](https://github.com/raptoreum/raptoreum/commit/a0851494d) add `smartnodelist pubkey` to rpc (#1549) -- [`825b3ccc9`](https://github.com/raptoreum/raptoreum/commit/825b3ccc9) more "vin" -> "outpoint" in smartnode rpc output (#1633) -- [`0c1679e58`](https://github.com/raptoreum/raptoreum/commit/0c1679e58) fix `smartnode current` rpc (#1640) -- [`8c1e5e838`](https://github.com/raptoreum/raptoreum/commit/8c1e5e838) remove send addresses from listreceivedbyaddress output (#1664) -- [`c3bc06bbf`](https://github.com/raptoreum/raptoreum/commit/c3bc06bbf) fix Examples section of the RPC output for listreceivedbyaccount, listreceivedbyaccount and sendfrom commands (#1665) -- [`ece884994`](https://github.com/raptoreum/raptoreum/commit/ece884994) RPC help formatting updates (#1670) -- [`32ad53e77`](https://github.com/raptoreum/raptoreum/commit/32ad53e77) Revert "fix `smartnode current` rpc (#1640)" (#1681) -- [`a5f99ef2f`](https://github.com/raptoreum/raptoreum/commit/a5f99ef2f) partially revert "[Trivial] RPC help formatting updates #1670" (#1711) - -### Docs: -- [`82a464313`](https://github.com/raptoreum/raptoreum/commit/82a464313) Doc: fix broken formatting in markdown #headers (#1462) -- [`ee4daed83`](https://github.com/raptoreum/raptoreum/commit/ee4daed83) Added clarifications in INSTALL readme for newcomers (#1481) -- [`5d2795029`](https://github.com/raptoreum/raptoreum/commit/5d2795029) Documentation: Add spork message / details to protocol-documentation.md (#1493) -- [`5617aef07`](https://github.com/raptoreum/raptoreum/commit/5617aef07) Documentation: Update undocumented messages in protocol-documentation.md (#1596) -- [`72ef788c5`](https://github.com/raptoreum/raptoreum/commit/72ef788c5) Update `instantsend.md` according to PR#1628 changes (#1663) -- [`304b886d0`](https://github.com/raptoreum/raptoreum/commit/304b886d0) Update build-osx.md formatting (#1690) -- [`578d55979`](https://github.com/raptoreum/raptoreum/commit/578d55979) 12.2 release notes (#1675) - -### Other (noticeable) refactoring and fixes: -- [`98990b683`](https://github.com/raptoreum/raptoreum/commit/98990b683) Refactor: CDarkSendSigner (#1410) -- [`397ea95db`](https://github.com/raptoreum/raptoreum/commit/397ea95db) Implement BIP69 outside of CTxIn/CTxOut (#1514) -- [`27b6f3633`](https://github.com/raptoreum/raptoreum/commit/27b6f3633) fix deadlock (#1531) -- [`e0d6c5b5a`](https://github.com/raptoreum/raptoreum/commit/e0d6c5b5a) fixed potential deadlock in CSmartnodePing::SimpleCheck (#1534) -- [`8b5f47e68`](https://github.com/raptoreum/raptoreum/commit/8b5f47e68) Smartnode classes: Remove repeated/un-needed code and data (#1572) -- [`23582aea4`](https://github.com/raptoreum/raptoreum/commit/23582aea4) add/use GetUTXO\[Coins/Confirmations\] helpers instead of GetInputAge\[IX\] (#1578) -- [`fe81d641d`](https://github.com/raptoreum/raptoreum/commit/fe81d641d) drop pCurrentBlockIndex and use cached block height instead (nCachedBlockHeight) (#1579) -- [`8012f2ca7`](https://github.com/raptoreum/raptoreum/commit/8012f2ca7) drop smartnode index (#1580) -- [`b5f7be649`](https://github.com/raptoreum/raptoreum/commit/b5f7be649) slightly refactor CDSNotificationInterface (#1581) -- [`9028a22b8`](https://github.com/raptoreum/raptoreum/commit/9028a22b8) safe version of GetSmartnodeByRank (#1595) -- [`05da4557d`](https://github.com/raptoreum/raptoreum/commit/05da4557d) Refactor smartnode management (#1611) -- [`adc7c6cb1`](https://github.com/raptoreum/raptoreum/commit/adc7c6cb1) Remove some recursive locks (#1624) - -### Other (technical) commits: -- [`1a528d945`](https://github.com/raptoreum/raptoreum/commit/1a528d945) bump to 0.12.2.0 (#1407) -- [`b815a7b6a`](https://github.com/raptoreum/raptoreum/commit/b815a7b6a) Merge remote-tracking branch 'remotes/origin/master' into v0.12.2.x -- [`7a5943c3a`](https://github.com/raptoreum/raptoreum/commit/7a5943c3a) Merge pull request #1431 from raptoreum/v0.12.2.x-merge_upstream -- [`8bbcf6200`](https://github.com/raptoreum/raptoreum/commit/8bbcf6200) Fixed pow (test and algo) (#1415) -- [`f3b92a95d`](https://github.com/raptoreum/raptoreum/commit/f3b92a95d) c++11: don't throw from the reverselock destructor (#1421) -- [`b40f8f333`](https://github.com/raptoreum/raptoreum/commit/b40f8f333) Rename bitcoinconsensus library to raptoreumconsensus. (#1432) -- [`28a1d0ecc`](https://github.com/raptoreum/raptoreum/commit/28a1d0ecc) Fix the same header included twice. (#1474) -- [`adf97e12a`](https://github.com/raptoreum/raptoreum/commit/adf97e12a) fix travis ci mac build (#1483) -- [`a28fa724c`](https://github.com/raptoreum/raptoreum/commit/a28fa724c) fix BIP34 starting blocks for mainnet/testnet (#1476) -- [`bea548c61`](https://github.com/raptoreum/raptoreum/commit/bea548c61) adjust/fix some log and error messages (#1484) -- [`715504357`](https://github.com/raptoreum/raptoreum/commit/715504357) Raptoreumify bitcoin unix executables (#1486) -- [`1d67d5212`](https://github.com/raptoreum/raptoreum/commit/1d67d5212) Don't try to create empty datadir before the real path is known (#1494) -- [`549b659e8`](https://github.com/raptoreum/raptoreum/commit/549b659e8) Force self-recheck on CActiveSmartnode::ManageStateRemote() (#1441) -- [`96f0d6ec2`](https://github.com/raptoreum/raptoreum/commit/96f0d6ec2) various trivial cleanup fixes (#1501) -- [`f9dd40888`](https://github.com/raptoreum/raptoreum/commit/f9dd40888) include atomic (#1523) -- [`eea78d45e`](https://github.com/raptoreum/raptoreum/commit/eea78d45e) Revert "fixed regtest+ds issues" (#1524) -- [`1b1d52ac3`](https://github.com/raptoreum/raptoreum/commit/1b1d52ac3) workaround for travis (#1526) -- [`c608bbec1`](https://github.com/raptoreum/raptoreum/commit/c608bbec1) Pass reference when calling HasPayeeWithVotes (#1569) -- [`b22cda4df`](https://github.com/raptoreum/raptoreum/commit/b22cda4df) typo: "Writting" -> "Writing" (#1605) -- [`ace00175c`](https://github.com/raptoreum/raptoreum/commit/ace00175c) build: silence gcc7's implicit fallthrough warning (#1622) -- [`02e882c3d`](https://github.com/raptoreum/raptoreum/commit/02e882c3d) bump MIN_SMARTNODE_PAYMENT_PROTO_VERSION_2 and PROTOCOL_VERSION to 70208 (#1636) -- [`d3829e55b`](https://github.com/raptoreum/raptoreum/commit/d3829e55b) fix BIP68 granularity and mask (#1641) -- [`72b221f74`](https://github.com/raptoreum/raptoreum/commit/72b221f74) Revert "fix BIP68 granularity and mask (#1641)" (#1647) -- [`381ffdc4b`](https://github.com/raptoreum/raptoreum/commit/381ffdc4b) Fork testnet to test 12.2 migration (#1660) -- [`33dbafbba`](https://github.com/raptoreum/raptoreum/commit/33dbafbba) fork testnet again to re-test dip0001 because of 2 bugs found in 1st attempt (#1667) -- [`0b6955a7b`](https://github.com/raptoreum/raptoreum/commit/0b6955a7b) update nMinimumChainWork and defaultAssumeValid for testnet (#1668) -- [`4ecbedbe7`](https://github.com/raptoreum/raptoreum/commit/4ecbedbe7) fix `setnetworkactive` (typo) (#1682) -- [`46342b2e8`](https://github.com/raptoreum/raptoreum/commit/46342b2e8) update nCollateralMinConfBlockHash for local (hot) smartnode on mn start (#1689) -- [`f5286b179`](https://github.com/raptoreum/raptoreum/commit/f5286b179) Fix/optimize images (#1688) -- [`673e161d5`](https://github.com/raptoreum/raptoreum/commit/673e161d5) fix trafficgraphdatatests for qt4 (#1699) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alex Werner -- Alexander Block -- Allan Doensen -- Bob Feldbauer -- chaeplin -- crowning- -- diego-ab -- Gavin Westwood -- gladcow -- Holger Schinzel -- Ilya Savinov -- Kamuela Franco -- krychlicki -- Nathan Marley -- Oleg Girko -- QuantumExplorer -- sorin-postelnicu -- Spencer Lievens -- taw00 -- TheLazieR Yip -- thephez -- Tim Flynn -- UdjinM6 -- Will Wray - -As well as Bitcoin Core Developers and everyone that submitted issues or helped translating on [Transifex](https://www.transifex.com/projects/p/raptoreum/). - - -Older releases -============== - -Raptoreum was previously known as Darkcoin. - -Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin -which was first released on Jan/18/2014. - -Darkcoin tree 0.9.x was the open source implementation of smartnodes based on -the 0.8.x tree and was first released on Mar/13/2014. - -Darkcoin tree 0.10.x used to be the closed source implementation of Darksend -which was released open source on Sep/25/2014. - -Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, Darkcoin was rebranded -to Raptoreum. - -Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. - -Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. - -These release are considered obsolete. Old changelogs can be found here: - -- [v0.12.1](release-notes/raptoreum/release-notes-0.12.1.md) released ???/??/2016 -- [v0.12.0](release-notes/raptoreum/release-notes-0.12.0.md) released ???/??/2015 -- [v0.11.2](release-notes/raptoreum/release-notes-0.11.2.md) released Mar/25/2015 -- [v0.11.1](release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 - diff --git a/doc/release-notes/raptoreum/release-notes-0.12.3-backports.md b/doc/release-notes/raptoreum/release-notes-0.12.3-backports.md deleted file mode 100644 index d7433457a4..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.12.3-backports.md +++ /dev/null @@ -1,993 +0,0 @@ -### 12.3 backports and related fixes: -- [`bc45a2f87`](https://github.com/raptoreum/raptoreum/commit/bc45a2f87) Backport compact blocks functionality from bitcoin (#1966) -- [`8b4c419ed`](https://github.com/raptoreum/raptoreum/commit/8b4c419ed) Revert "Merge #7542: Implement "feefilter" P2P message" (#2025) -- [`a4b313fd3`](https://github.com/raptoreum/raptoreum/commit/a4b313fd3) Fix std in DBG macro -- [`6a6e4cdc1`](https://github.com/raptoreum/raptoreum/commit/6a6e4cdc1) Remove remaining `using namespace std` -- [`08b5c69ef`](https://github.com/raptoreum/raptoreum/commit/08b5c69ef) Merge #9643: [refactor] Remove using namespace from wallet/ & util* -- [`ccca7af09`](https://github.com/raptoreum/raptoreum/commit/ccca7af09) Merge #9476: [refactor] Remove using namespace from rpc/ & script/ sources -- [`4ac4e96e8`](https://github.com/raptoreum/raptoreum/commit/4ac4e96e8) Merge #9765: Harden against mistakes handling invalid blocks -- [`662ec024a`](https://github.com/raptoreum/raptoreum/commit/662ec024a) Make peer id logging consistent ("peer=%d" instead of "peer %d") -- [`592d8f073`](https://github.com/raptoreum/raptoreum/commit/592d8f073) Use a temp pindex to avoid a const_cast in ProcessNewBlockHeaders -- [`15a8fcf99`](https://github.com/raptoreum/raptoreum/commit/15a8fcf99) Add a CValidationInterface::NewPoWValidBlock callback -- [`d28172f57`](https://github.com/raptoreum/raptoreum/commit/d28172f57) Call AcceptBlock with the block's shared_ptr instead of CBlock& -- [`c99dd9733`](https://github.com/raptoreum/raptoreum/commit/c99dd9733) [qa] Avoid race in preciousblock test. -- [`807ae74c2`](https://github.com/raptoreum/raptoreum/commit/807ae74c2) Make CBlockIndex*es in net_processing const -- [`1d1c31052`](https://github.com/raptoreum/raptoreum/commit/1d1c31052) Fix cmd args handling for -bip9params -- [`64817fe1d`](https://github.com/raptoreum/raptoreum/commit/64817fe1d) [qa] Fix race condition in sendheaders.py -- [`b2bc78099`](https://github.com/raptoreum/raptoreum/commit/b2bc78099) Fix argument to wait_until -- [`026f2e2a8`](https://github.com/raptoreum/raptoreum/commit/026f2e2a8) Merge #8446: [Trivial] BIP9 parameters on regtest cleanup -- [`e326bda69`](https://github.com/raptoreum/raptoreum/commit/e326bda69) Tests: refactor compact size serialization in mininode -- [`2c810d2c3`](https://github.com/raptoreum/raptoreum/commit/2c810d2c3) Allow changing BIP9 parameters on regtest -- [`45151bd13`](https://github.com/raptoreum/raptoreum/commit/45151bd13) Move context-required checks from CheckBlockHeader to Contextual... -- [`cef919f18`](https://github.com/raptoreum/raptoreum/commit/cef919f18) Merge #9486: Make peer=%d log prints consistent -- [`55ef4d0a9`](https://github.com/raptoreum/raptoreum/commit/55ef4d0a9) [wallet] Add include_unsafe argument to listunspent RPC -- [`e1e03f42c`](https://github.com/raptoreum/raptoreum/commit/e1e03f42c) [wallet] Add IsAllFromMe: true if all inputs are from wallet -- [`611b31ece`](https://github.com/raptoreum/raptoreum/commit/611b31ece) Merge #9650: Better handle invalid parameters to signrawtransaction -- [`ff335e47f`](https://github.com/raptoreum/raptoreum/commit/ff335e47f) [qa] test_framework: Add wrapper for stop_node -- [`64e1bfacd`](https://github.com/raptoreum/raptoreum/commit/64e1bfacd) Add BIP32 to bips.md -- [`4bb2af8d1`](https://github.com/raptoreum/raptoreum/commit/4bb2af8d1) Merge #9114: [depends] Set OSX_MIN_VERSION to 10.8 -- [`61af31531`](https://github.com/raptoreum/raptoreum/commit/61af31531) Merge #8976: libconsensus: Add input validation of flags (#1891) -- [`00a0bc710`](https://github.com/raptoreum/raptoreum/commit/00a0bc710) Remove "TODO: fix off-by-one" -- [`625252fb4`](https://github.com/raptoreum/raptoreum/commit/625252fb4) Allow to pass redirect_stderr=True to initialize_chain and use in wallet-dump.py -- [`d56ac5a74`](https://github.com/raptoreum/raptoreum/commit/d56ac5a74) Fix import-rescan.py and add workaround for pruning mode -- [`1ba125621`](https://github.com/raptoreum/raptoreum/commit/1ba125621) Merge #9761: Use 2 hour grace period for key timestamps in importmulti rescans -- [`75421c37b`](https://github.com/raptoreum/raptoreum/commit/75421c37b) Merge #9764: wallet: Prevent "overrides a member function but is not marked 'override'" warnings -- [`43f697866`](https://github.com/raptoreum/raptoreum/commit/43f697866) Merge #9108: Use importmulti timestamp when importing watch only keys (on top of #9682) -- [`6f86725d0`](https://github.com/raptoreum/raptoreum/commit/6f86725d0) Merge #9682: Require timestamps for importmulti keys -- [`9c5032c54`](https://github.com/raptoreum/raptoreum/commit/9c5032c54) Explicitly start nodes with -usehd=1 in wallet-dump.py -- [`a92b7b2ed`](https://github.com/raptoreum/raptoreum/commit/a92b7b2ed) Add missed change from previous backport to wallet-dump.py -- [`9bb9e9ea7`](https://github.com/raptoreum/raptoreum/commit/9bb9e9ea7) Merge #9077: [qa] Increase wallet-dump RPC timeout -- [`8d90f295e`](https://github.com/raptoreum/raptoreum/commit/8d90f295e) Merge #8442: [qa] Rework hd wallet dump test -- [`9a37add21`](https://github.com/raptoreum/raptoreum/commit/9a37add21) Merge #8417: [QA] Add walletdump RPC test (including HD- & encryption-tests) -- [`27b52a7f8`](https://github.com/raptoreum/raptoreum/commit/27b52a7f8) Add BIP147 to bips.md -- [`12102e4e9`](https://github.com/raptoreum/raptoreum/commit/12102e4e9) Merge #8848: Add NULLDUMMY verify flag in bitcoinconsensus.h -- [`c017353a9`](https://github.com/raptoreum/raptoreum/commit/c017353a9) Add softfork deployment for BIP147 -- [`a42baec5e`](https://github.com/raptoreum/raptoreum/commit/a42baec5e) Remove SegWit related tests/code from nulldummy.py -- [`4bb0cdf40`](https://github.com/raptoreum/raptoreum/commit/4bb0cdf40) Merge #8841: [qa] fix nulldummy test -- [`4a585b2f2`](https://github.com/raptoreum/raptoreum/commit/4a585b2f2) Merge #8835: [qa] nulldummy.py: Don't run unused code -- [`075b4d320`](https://github.com/raptoreum/raptoreum/commit/075b4d320) Merge #8636: Implement NULLDUMMY softfork (BIP147) -- [`8ee652f4c`](https://github.com/raptoreum/raptoreum/commit/8ee652f4c) Merge #10851: depends: fix fontconfig with newer glibc -- [`9a26b427f`](https://github.com/raptoreum/raptoreum/commit/9a26b427f) Don't set PKG_CONFIG_SYSROOT_DIR env variable to build Qt. -- [`0e6672bf7`](https://github.com/raptoreum/raptoreum/commit/0e6672bf7) Merge pull request #1879 from codablock/pr_backport_bitcoin_0.14-11 -- [`c8e5c40ec`](https://github.com/raptoreum/raptoreum/commit/c8e5c40ec) Replace more example Raptoreum addresses with invalid addresses -- [`7e4e4ea27`](https://github.com/raptoreum/raptoreum/commit/7e4e4ea27) Give 1000 bytes instead of 4000 bytes before the block is full -- [`873bd6c80`](https://github.com/raptoreum/raptoreum/commit/873bd6c80) Fix new raptoreum-tx tests -- [`4959ff201`](https://github.com/raptoreum/raptoreum/commit/4959ff201) Fix formatting of help in sendfrom -- [`a4430b624`](https://github.com/raptoreum/raptoreum/commit/a4430b624) Fix rpc tests -- [`5901531bc`](https://github.com/raptoreum/raptoreum/commit/5901531bc) Use constant 7200 instead of TIMESTAMP_WINDOW for now -- [`4d3856b5a`](https://github.com/raptoreum/raptoreum/commit/4d3856b5a) Include test_raptoreum.h instead of test_bitcoin.h -- [`d500d77c4`](https://github.com/raptoreum/raptoreum/commit/d500d77c4) Use nBlockSize/nBlockMaxSize instead of nBlockWeight/nBlockMaxWeight -- [`12770beb6`](https://github.com/raptoreum/raptoreum/commit/12770beb6) Merge #10310: [doc] Add hint about getmempoolentry to getrawmempool help. -- [`e9976d20f`](https://github.com/raptoreum/raptoreum/commit/e9976d20f) Merge #10495: contrib: Update location of seeds.txt -- [`631d9f92e`](https://github.com/raptoreum/raptoreum/commit/631d9f92e) Merge #10309: Trivial: remove extra character from comment -- [`ed898f179`](https://github.com/raptoreum/raptoreum/commit/ed898f179) Merge #10258: Fixed typo in documentation for merkleblock.h -- [`294228afc`](https://github.com/raptoreum/raptoreum/commit/294228afc) Merge #10451: contrib/init/bitcoind.openrcconf: Don't disable wallet by default -- [`b0a817214`](https://github.com/raptoreum/raptoreum/commit/b0a817214) Merge #10260: [doc] Minor corrections to osx dependencies -- [`f7174fb65`](https://github.com/raptoreum/raptoreum/commit/f7174fb65) Merge #10308: [wallet] Securely erase potentially sensitive keys/values -- [`e2225f37c`](https://github.com/raptoreum/raptoreum/commit/e2225f37c) Merge #10265: [wallet] [moveonly] Check non-null pindex before potentially referencing -- [`24be65e87`](https://github.com/raptoreum/raptoreum/commit/24be65e87) Merge #10328: Update contrib/debian to latest Ubuntu PPA upload. -- [`7b7924d47`](https://github.com/raptoreum/raptoreum/commit/7b7924d47) Merge #9497: CCheckQueue Unit Tests -- [`f1ec8c9fa`](https://github.com/raptoreum/raptoreum/commit/f1ec8c9fa) Merge #10008: [trivial] Fix a typo (introduced two days ago) in the default fee warning -- [`539cf5c17`](https://github.com/raptoreum/raptoreum/commit/539cf5c17) Merge #9481: [Qt] Show more significant warning if we fall back to the default fee -- [`bcef7260d`](https://github.com/raptoreum/raptoreum/commit/bcef7260d) Merge #10196: Bugfix: PrioritiseTransaction updates the mempool tx counter -- [`c716ee03f`](https://github.com/raptoreum/raptoreum/commit/c716ee03f) Merge #10441: net: only enforce expected services for half of outgoing connections -- [`785d4d0ee`](https://github.com/raptoreum/raptoreum/commit/785d4d0ee) Merge #8949: Be more agressive in getting connections to peers with relevant services. -- [`67196dc81`](https://github.com/raptoreum/raptoreum/commit/67196dc81) Only consider nodes missing relevant services after 40 failed attemps -- [`c45c767f8`](https://github.com/raptoreum/raptoreum/commit/c45c767f8) Merge #10294: [Wallet] unset change position when there is no change -- [`562332601`](https://github.com/raptoreum/raptoreum/commit/562332601) Merge #10228: build: regenerate bitcoin-config.h as necessary -- [`ee3ff3552`](https://github.com/raptoreum/raptoreum/commit/ee3ff3552) Merge #10215: Check interruptNet during dnsseed lookups -- [`69058b83f`](https://github.com/raptoreum/raptoreum/commit/69058b83f) Merge #10245: Minor fix in build documentation for FreeBSD 11 -- [`a601206d3`](https://github.com/raptoreum/raptoreum/commit/a601206d3) Merge #10410: Fix importwallet edge case rescan bug -- [`955939f77`](https://github.com/raptoreum/raptoreum/commit/955939f77) Merge #10424: Populate services in GetLocalAddress -- [`12099e52d`](https://github.com/raptoreum/raptoreum/commit/12099e52d) Merge #10414: [depends] miniupnpc 2.0.20170509 -- [`b67fdbee9`](https://github.com/raptoreum/raptoreum/commit/b67fdbee9) Merge #10207: Clarify importprivkey help text ... example of blank label without rescan -- [`fb6992de5`](https://github.com/raptoreum/raptoreum/commit/fb6992de5) Merge #10176: net: gracefully handle NodeId wrapping -- [`720325f23`](https://github.com/raptoreum/raptoreum/commit/720325f23) Merge #10204: [rpc] rename disconnectnode argument -- [`2e45791c9`](https://github.com/raptoreum/raptoreum/commit/2e45791c9) Merge #10157: [0.14] Fix the mempool_packages.py test -- [`96b457d47`](https://github.com/raptoreum/raptoreum/commit/96b457d47) Merge #10144: Prioritisetransaction wasn't always updating ancestor fee -- [`ec563a0f1`](https://github.com/raptoreum/raptoreum/commit/ec563a0f1) Merge #10146: Better error handling for submitblock -- [`0fc9b2bd8`](https://github.com/raptoreum/raptoreum/commit/0fc9b2bd8) Merge #10139: [rpc] Remove auth cookie on shutdown -- [`06c871457`](https://github.com/raptoreum/raptoreum/commit/06c871457) Merge #9959: Mining: Prevent slowdown in CreateNewBlock on large mempools -- [`42d306056`](https://github.com/raptoreum/raptoreum/commit/42d306056) Merge #10120: util: Work around (virtual) memory exhaustion on 32-bit w/ glibc -- [`a14912965`](https://github.com/raptoreum/raptoreum/commit/a14912965) Merge #10130: bitcoin-tx input verification (awemany, jnewbery) -- [`8aa00505f`](https://github.com/raptoreum/raptoreum/commit/8aa00505f) Merge #10084: rpc: Rename first named arg of createrawtransaction -- [`a81f44543`](https://github.com/raptoreum/raptoreum/commit/a81f44543) Merge #9973: depends: fix zlib build on osx -- [`b01875185`](https://github.com/raptoreum/raptoreum/commit/b01875185) Merge #10060: [Qt] Ensure an item exists on the rpcconsole stack before adding -- [`edd514c43`](https://github.com/raptoreum/raptoreum/commit/edd514c43) Merge #10037: Trivial: Fix typo in help getrawtransaction RPC -- [`4321788cc`](https://github.com/raptoreum/raptoreum/commit/4321788cc) Merge #9953: Fix shutdown hang with >= 8 -addnodes set -- [`bd0b0daaa`](https://github.com/raptoreum/raptoreum/commit/bd0b0daaa) Merge #9892: Bugfix: Only install manpages for built programs -- [`818fc1eaf`](https://github.com/raptoreum/raptoreum/commit/818fc1eaf) Merge #9891: depends: make osx output deterministic -- [`a16d3b005`](https://github.com/raptoreum/raptoreum/commit/a16d3b005) Merge #9829: Fix importmulti returning rescan errors for wrong keys -- [`16b2a1d1b`](https://github.com/raptoreum/raptoreum/commit/16b2a1d1b) Merge #9791: Avoid VLA in hash.h -- [`39f08b6e6`](https://github.com/raptoreum/raptoreum/commit/39f08b6e6) Merge #9865: Change bitcoin address in RPC help message -- [`3693eb157`](https://github.com/raptoreum/raptoreum/commit/3693eb157) Merge #9879: [doc] Update doc/bips.md for BIP90 implementation -- [`7c3b8ec4b`](https://github.com/raptoreum/raptoreum/commit/7c3b8ec4b) Merge #9840: Update sendfrom RPC help to correct coin selection misconception -- [`5c7c3b3a0`](https://github.com/raptoreum/raptoreum/commit/5c7c3b3a0) Merge #9856: Terminate immediately when allocation fails -- [`397c27ff9`](https://github.com/raptoreum/raptoreum/commit/397c27ff9) Merge #9875: tests: Fix dangling pwalletMain pointer in wallet tests -- [`af006a36e`](https://github.com/raptoreum/raptoreum/commit/af006a36e) Merge #9789: build: add --enable-werror and warn on vla's -- [`d88030845`](https://github.com/raptoreum/raptoreum/commit/d88030845) Merge #9824: qa: Check return code when stopping nodes -- [`f09ae21c3`](https://github.com/raptoreum/raptoreum/commit/f09ae21c3) Merge #9820: Fix pruning test broken by 2 hour manual prune window -- [`0e8be439c`](https://github.com/raptoreum/raptoreum/commit/0e8be439c) Merge #9711: [Trivial] Remove incorrect help message from gettxoutproof() -- [`ac981ec3c`](https://github.com/raptoreum/raptoreum/commit/ac981ec3c) Merge #9773: Return errors from importmulti if complete rescans are not successful -- [`0a6f63bb2`](https://github.com/raptoreum/raptoreum/commit/0a6f63bb2) Merge #9817: Fix segfault crash when shutdown the GUI in disablewallet mode -- [`15a035b9c`](https://github.com/raptoreum/raptoreum/commit/15a035b9c) Merge #9798: Fix Issue #9775 (Check returned value of fopen) -- [`8d2edc469`](https://github.com/raptoreum/raptoreum/commit/8d2edc469) Merge #9813: Read/write mempool.dat as a binary. -- [`199b07a89`](https://github.com/raptoreum/raptoreum/commit/199b07a89) Merge #9760: [wallet] Remove importmulti always-true check -- [`3ab5fab7f`](https://github.com/raptoreum/raptoreum/commit/3ab5fab7f) Merge #9786: boost: remove iostreams includes -- [`5e596423a`](https://github.com/raptoreum/raptoreum/commit/5e596423a) Merge #9785: Avoid variable length arrays -- [`11a5f2e6a`](https://github.com/raptoreum/raptoreum/commit/11a5f2e6a) Rename and Raptoreumify .manpages files -- [`6c2fe3d05`](https://github.com/raptoreum/raptoreum/commit/6c2fe3d05) Remove onlyMaybeDeadlock condition around printing of deadlock info -- [`9b45c2f65`](https://github.com/raptoreum/raptoreum/commit/9b45c2f65) Add missing lines about ARM in depends/README.md -- [`1c8b7b466`](https://github.com/raptoreum/raptoreum/commit/1c8b7b466) Sync release-notes.md with Bitcoin 0.14 -- [`c5fdd27d4`](https://github.com/raptoreum/raptoreum/commit/c5fdd27d4) Merge #8743: Remove old manpages from contrib/debian in favour of doc/man -- [`0080fde36`](https://github.com/raptoreum/raptoreum/commit/0080fde36) Merge #9778: Add two hour buffer to manual pruning -- [`86fd57b8c`](https://github.com/raptoreum/raptoreum/commit/86fd57b8c) Merge #9777: Handle unusual maxsigcachesize gracefully -- [`5f88c6451`](https://github.com/raptoreum/raptoreum/commit/5f88c6451) Merge #9675: Fix typo and spelling inconsistency in CONTRIBUTING.md -- [`52819ca9b`](https://github.com/raptoreum/raptoreum/commit/52819ca9b) Merge #9763: [Trivial] Update comments referencing main.cpp -- [`bb2c1624c`](https://github.com/raptoreum/raptoreum/commit/bb2c1624c) Merge #9771: Add missing cs_wallet lock that triggers new lock held assertion -- [`da8808fba`](https://github.com/raptoreum/raptoreum/commit/da8808fba) Merge #9756: Return error when importmulti called with invalid address. -- [`136d8606c`](https://github.com/raptoreum/raptoreum/commit/136d8606c) Merge #9758: Selectively suppress deprecation warnings -- [`f2b556008`](https://github.com/raptoreum/raptoreum/commit/f2b556008) Merge #9553: Use z = std::max(x - y, 0) instead of z = x - y; if (z < 0) z = 0; -- [`132edbda8`](https://github.com/raptoreum/raptoreum/commit/132edbda8) Merge #9755: Bugfix: Qt/Options: Restore persistent "restart required" notice -- [`fe0ef87cd`](https://github.com/raptoreum/raptoreum/commit/fe0ef87cd) Merge #9720: net: fix banning and disallow sending messages before receiving verack -- [`588b8e5ca`](https://github.com/raptoreum/raptoreum/commit/588b8e5ca) Merge #9715: Disconnect peers which we do not receive VERACKs from within 60 sec -- [`b183a1f2a`](https://github.com/raptoreum/raptoreum/commit/b183a1f2a) Merge #9735: devtools: Handle Qt formatting characters edge-case in update-translations.py -- [`7cc218dd7`](https://github.com/raptoreum/raptoreum/commit/7cc218dd7) Merge #9736: Pre-0.14.0 hardcoded seeds update -- [`b50b8196f`](https://github.com/raptoreum/raptoreum/commit/b50b8196f) Merge #9708: Clean up all known races/platform-specific UB at the time PR was opened -- [`8043468b3`](https://github.com/raptoreum/raptoreum/commit/8043468b3) Merge #9707: Fix RPC failure testing -- [`3b543952d`](https://github.com/raptoreum/raptoreum/commit/3b543952d) Merge #9698: net: fix socket close race -- [`f1f4e25d6`](https://github.com/raptoreum/raptoreum/commit/f1f4e25d6) Merge #9718: Qt/Intro: Various fixes -- [`7d4e34029`](https://github.com/raptoreum/raptoreum/commit/7d4e34029) Merge #9674: Always enforce strict lock ordering (try or not) -- [`e4ddb3a35`](https://github.com/raptoreum/raptoreum/commit/e4ddb3a35) Merge #9705: build: Add options to override BDB cflags/libs -- [`f1cbc40b3`](https://github.com/raptoreum/raptoreum/commit/f1cbc40b3) Merge #9712: bench: Fix initialization order in registration -- [`767f5e436`](https://github.com/raptoreum/raptoreum/commit/767f5e436) Merge #9532: Remove unused variables -- [`eb4c5bac6`](https://github.com/raptoreum/raptoreum/commit/eb4c5bac6) Merge #9227: Make nWalletDBUpdated atomic to avoid a potential race. -- [`72a0d05d6`](https://github.com/raptoreum/raptoreum/commit/72a0d05d6) Merge #9378: [trivial] Add documentation for CWalletTx::fFromMe member. -- [`3f1929fb0`](https://github.com/raptoreum/raptoreum/commit/3f1929fb0) Merge #9659: Net: Turn some methods and params/variables const -- [`81eeb0dee`](https://github.com/raptoreum/raptoreum/commit/81eeb0dee) Merge #9651: Fix typos -- [`ea414f307`](https://github.com/raptoreum/raptoreum/commit/ea414f307) Merge #9578: Add missing mempool lock for CalculateMemPoolAncestors -- [`e86c52f69`](https://github.com/raptoreum/raptoreum/commit/e86c52f69) Merge #9556: Remove redundant semicolons -- [`3dcbfc744`](https://github.com/raptoreum/raptoreum/commit/3dcbfc744) Merge #9580: Fix various minor linearization script issues -- [`dcc251e2b`](https://github.com/raptoreum/raptoreum/commit/dcc251e2b) Merge #9663: [RPC] clarify listunspent amount description -- [`d45a7ae73`](https://github.com/raptoreum/raptoreum/commit/d45a7ae73) Merge #9647: Skip RAII event tests if libevent is built without event_set_mem_functions -- [`e24b8ae50`](https://github.com/raptoreum/raptoreum/commit/e24b8ae50) Merge #9649: [doc] Remove unused clang format dev script -- [`8ad57c31f`](https://github.com/raptoreum/raptoreum/commit/8ad57c31f) Remove "using namespace std" from wallet.cpp -- [`25074aeb4`](https://github.com/raptoreum/raptoreum/commit/25074aeb4) Merge #9644: [refactor] Remove using namespace from src/ -- [`daa8582b1`](https://github.com/raptoreum/raptoreum/commit/daa8582b1) Merge #9615: Wallet incremental fee -- [`b97eecc05`](https://github.com/raptoreum/raptoreum/commit/b97eecc05) Fix review nits -- [`ec8176960`](https://github.com/raptoreum/raptoreum/commit/ec8176960) Remove segwit related raptoreum-tx tests -- [`4d651621e`](https://github.com/raptoreum/raptoreum/commit/4d651621e) Update mainnet chainparams to use correct heights for BIP34/BIP65/BIP66 -- [`3824192e4`](https://github.com/raptoreum/raptoreum/commit/3824192e4) Update testnet chainparams to use correct heights for BIP34/BIP65/BIP66 -- [`715be73c6`](https://github.com/raptoreum/raptoreum/commit/715be73c6) Fix listsinceblock.py -- [`9bc404a8c`](https://github.com/raptoreum/raptoreum/commit/9bc404a8c) Add "setbip69enabled" RPC usable by tests only -- [`6bee150e8`](https://github.com/raptoreum/raptoreum/commit/6bee150e8) Require timestamps for importmulti keys -- [`611cb6f27`](https://github.com/raptoreum/raptoreum/commit/611cb6f27) Fix new raptoreum-tx tests -- [`86753a890`](https://github.com/raptoreum/raptoreum/commit/86753a890) Add spaces around + in updateGlobalFeeVariables -- [`228d774a6`](https://github.com/raptoreum/raptoreum/commit/228d774a6) Fix use of distdir and docker build dir -- [`771c56a79`](https://github.com/raptoreum/raptoreum/commit/771c56a79) Fix new bitcoin-util-tests -- [`9e13bb393`](https://github.com/raptoreum/raptoreum/commit/9e13bb393) Fix transaction_tests.cpp -- [`cd0c910a8`](https://github.com/raptoreum/raptoreum/commit/cd0c910a8) Use new data structures for devnet checkpointData/chainTxData -- [`2cdafa0ca`](https://github.com/raptoreum/raptoreum/commit/2cdafa0ca) Merge #9671: Fix super-unlikely race introduced in 236618061a445d2cb11e72 -- [`4f6de1697`](https://github.com/raptoreum/raptoreum/commit/4f6de1697) Merge #9525: test: Include tx data in EXTRA_DIST -- [`dd5ccf1cb`](https://github.com/raptoreum/raptoreum/commit/dd5ccf1cb) Merge #9406: Re-enable a blank v1 Tx JSON test -- [`a757261e8`](https://github.com/raptoreum/raptoreum/commit/a757261e8) Merge #9646: depends: Fix cross build for qt5.7 -- [`660c027cd`](https://github.com/raptoreum/raptoreum/commit/660c027cd) Merge #9510: [trivial] Fix typos in comments -- [`edf3a00a2`](https://github.com/raptoreum/raptoreum/commit/edf3a00a2) Merge #9638: qa: Actually test assertions in pruning.py -- [`007dc5976`](https://github.com/raptoreum/raptoreum/commit/007dc5976) Merge #9637: [Qt] fix transaction details output-index to reflect vout index -- [`6070cf111`](https://github.com/raptoreum/raptoreum/commit/6070cf111) Merge #9519: Exclude RBF replacement txs from fee estimation -- [`e09d5db45`](https://github.com/raptoreum/raptoreum/commit/e09d5db45) Merge #9574: [depends] Fix QT build on OSX -- [`5a84b27dc`](https://github.com/raptoreum/raptoreum/commit/5a84b27dc) Merge #9628: qa: Increase a sync_blocks timeout in pruning.py -- [`ccd81a00f`](https://github.com/raptoreum/raptoreum/commit/ccd81a00f) Merge #9624: [Trivial] fix logging typo in FlushStateToDisk() -- [`ef6297cdd`](https://github.com/raptoreum/raptoreum/commit/ef6297cdd) Merge #9617: [Trivial] Update license year range to 2017 -- [`dc523a164`](https://github.com/raptoreum/raptoreum/commit/dc523a164) Merge #9371: Notify on removal -- [`3b2a26c4e`](https://github.com/raptoreum/raptoreum/commit/3b2a26c4e) Merge #9596: [bugfix] save feeDelta instead of priorityDelta in DumpMempool -- [`119c3fe62`](https://github.com/raptoreum/raptoreum/commit/119c3fe62) Merge #9516: Bug-fix: listsinceblock: use fork point as reference for blocks in reorg'd chains -- [`96b4910fb`](https://github.com/raptoreum/raptoreum/commit/96b4910fb) Merge #9607: Remove redundant semicolons in Python code -- [`9ba8a31d0`](https://github.com/raptoreum/raptoreum/commit/9ba8a31d0) Merge #9583: Move wallet callbacks into cs_main (this effectively reverts #7946) -- [`6bc16a66f`](https://github.com/raptoreum/raptoreum/commit/6bc16a66f) Merge #9610: [Trivial] Grammar and typo correction (laudaa) -- [`cd04ccd2d`](https://github.com/raptoreum/raptoreum/commit/cd04ccd2d) Merge #9554: [test] Avoid potential NULL pointer dereference in addrman_tests.cpp -- [`c431a7f07`](https://github.com/raptoreum/raptoreum/commit/c431a7f07) trivial: squash missing field 'argNames' initializer warning in qt tests -- [`36109e058`](https://github.com/raptoreum/raptoreum/commit/36109e058) Merge #9377: fundrawtransaction: Keep change-output keys by default, make it optional -- [`f8b880f4d`](https://github.com/raptoreum/raptoreum/commit/f8b880f4d) Merge #9535: Split CNode::cs_vSend: message processing and message sending -- [`a84f8da13`](https://github.com/raptoreum/raptoreum/commit/a84f8da13) Merge #9498: Basic CCheckQueue Benchmarks -- [`3f360d3e2`](https://github.com/raptoreum/raptoreum/commit/3f360d3e2) Merge #9542: Docs: Update CONTRIBUTING.md -- [`78a7a9f30`](https://github.com/raptoreum/raptoreum/commit/78a7a9f30) Merge #9552: Add IPv6 support to qos.sh -- [`197fbea84`](https://github.com/raptoreum/raptoreum/commit/197fbea84) Merge #9512: Fix various things -fsanitize complains about -- [`be63fb795`](https://github.com/raptoreum/raptoreum/commit/be63fb795) Merge #9508: Remove unused Python imports -- [`3bd155bd5`](https://github.com/raptoreum/raptoreum/commit/3bd155bd5) Merge #9561: Wake message handling thread when we receive a new block -- [`2adb35533`](https://github.com/raptoreum/raptoreum/commit/2adb35533) Add assumevalid testcase -- [`40dff103d`](https://github.com/raptoreum/raptoreum/commit/40dff103d) Merge #9380: Separate different uses of minimum fees -- [`87229e06c`](https://github.com/raptoreum/raptoreum/commit/87229e06c) Merge #9469: [depends] Qt 5.7.1 -- [`ad9b9251a`](https://github.com/raptoreum/raptoreum/commit/ad9b9251a) Merge #9490: Replace FindLatestBefore used by importmuti with FindEarliestAtLeast. -- [`4408b2d14`](https://github.com/raptoreum/raptoreum/commit/4408b2d14) Merge #9222: Add 'subtractFeeFromAmount' option to 'fundrawtransaction'. -- [`5b763faba`](https://github.com/raptoreum/raptoreum/commit/5b763faba) Merge #9468: [Depends] Dependency updates for 0.14.0 -- [`74bfe0b22`](https://github.com/raptoreum/raptoreum/commit/74bfe0b22) Merge #9261: Add unstored orphans with rejected parents to recentRejects -- [`53820de3e`](https://github.com/raptoreum/raptoreum/commit/53820de3e) Remove SegWit related code in raptoreum-tx -- [`a0d089eda`](https://github.com/raptoreum/raptoreum/commit/a0d089eda) Merge #8883: Add all standard TXO types to bitcoin-tx -- [`658479355`](https://github.com/raptoreum/raptoreum/commit/658479355) Merge #9472: Disentangle progress estimation from checkpoints and update it -- [`cee8cf1be`](https://github.com/raptoreum/raptoreum/commit/cee8cf1be) Merge #9518: Return height of last block pruned by pruneblockchain RPC -- [`294b8f70e`](https://github.com/raptoreum/raptoreum/commit/294b8f70e) Merge #9520: Deprecate non-txindex getrawtransaction and better warning -- [`7dfcb15e6`](https://github.com/raptoreum/raptoreum/commit/7dfcb15e6) Merge #9416: travis: make distdir before make -- [`a0438d534`](https://github.com/raptoreum/raptoreum/commit/a0438d534) Merge #9297: Various RPC help outputs updated -- [`819ea7484`](https://github.com/raptoreum/raptoreum/commit/819ea7484) Merge #9507: Fix use-after-free in CTxMemPool::removeConflicts() -- [`88b9aa45d`](https://github.com/raptoreum/raptoreum/commit/88b9aa45d) Merge #7871: Manual block file pruning. -- [`6132bfbe2`](https://github.com/raptoreum/raptoreum/commit/6132bfbe2) Use version 2 blocks for miner_tests -- [`56ff71fce`](https://github.com/raptoreum/raptoreum/commit/56ff71fce) Update devnet to activate BIP34/BIP65/BIP66 immediately -- [`7321bfdd6`](https://github.com/raptoreum/raptoreum/commit/7321bfdd6) Merge #8391: Consensus: Remove ISM -- [`17d375e71`](https://github.com/raptoreum/raptoreum/commit/17d375e71) Merge #9436: test: Include tx data in EXTRA_DIST -- [`b72f9249d`](https://github.com/raptoreum/raptoreum/commit/b72f9249d) Merge #9376: Remove unused test files and references -- [`0fc37e8c5`](https://github.com/raptoreum/raptoreum/commit/0fc37e8c5) Merge #7562: Bump transaction version default to 2 -- [`71e3e37d9`](https://github.com/raptoreum/raptoreum/commit/71e3e37d9) Merge #8837: allow bitcoin-tx to parse partial transactions -- [`3235aad49`](https://github.com/raptoreum/raptoreum/commit/3235aad49) Implement SipHash in Python -- [`8e9bae954`](https://github.com/raptoreum/raptoreum/commit/8e9bae954) Merge pull request #1858 from codablock/pr_backport_bitcoin_0.14-8 -- [`e5daae291`](https://github.com/raptoreum/raptoreum/commit/e5daae291) Raptoreumify "linearize" README.md and switch the tool to mainnet -- [`2e02b167e`](https://github.com/raptoreum/raptoreum/commit/2e02b167e) Move wallet backup dir check to wallet.cpp -- [`ec8a9e0a6`](https://github.com/raptoreum/raptoreum/commit/ec8a9e0a6) Add missing Raptoreum specific parameters back in help strings -- [`b3ee3fc35`](https://github.com/raptoreum/raptoreum/commit/b3ee3fc35) Raptoreumify example config and help strings -- [`6ab9e6b90`](https://github.com/raptoreum/raptoreum/commit/6ab9e6b90) Add missing colons to Result/Example help strings -- [`5371ff4ef`](https://github.com/raptoreum/raptoreum/commit/5371ff4ef) Disable contrib/rpm dist -- [`df3159986`](https://github.com/raptoreum/raptoreum/commit/df3159986) Use OpenSmartnodeConnection in ThreadMnbRequestConnections -- [`29d5bdb55`](https://github.com/raptoreum/raptoreum/commit/29d5bdb55) Fix import-rescan.py test -- [`4f39a090b`](https://github.com/raptoreum/raptoreum/commit/4f39a090b) Fix remaining direct uses of mapArgs -- [`8763d30d5`](https://github.com/raptoreum/raptoreum/commit/8763d30d5) Merge #9506: RFC: Improve style for if indentation -- [`e3e3267b4`](https://github.com/raptoreum/raptoreum/commit/e3e3267b4) Merge #9513: build: fix qt distdir builds (retry) -- [`eb7a6b08f`](https://github.com/raptoreum/raptoreum/commit/eb7a6b08f) Merge #8811: rpc: Add support for JSON-RPC named arguments -- [`0dabb80ab`](https://github.com/raptoreum/raptoreum/commit/0dabb80ab) Merge #9496: Rename lambda argument name to prevent shadowing -- [`7c5de865d`](https://github.com/raptoreum/raptoreum/commit/7c5de865d) Merge #9404: Smarter coordination of change and fee in CreateTransaction. -- [`17e51db71`](https://github.com/raptoreum/raptoreum/commit/17e51db71) Merge #9408: Allow shutdown during LoadMempool, dump only when necessary -- [`de21f9261`](https://github.com/raptoreum/raptoreum/commit/de21f9261) Merge #9319: Break addnode out from the outbound connection limits. -- [`0bd905689`](https://github.com/raptoreum/raptoreum/commit/0bd905689) Merge #9138: Improve fee estimation -- [`2dd62abe3`](https://github.com/raptoreum/raptoreum/commit/2dd62abe3) Merge #9465: [Wallet] Do not perform ECDSA signing in the fee calculation inner loop. -- [`9e62719cc`](https://github.com/raptoreum/raptoreum/commit/9e62719cc) Merge #9413: [CoinControl] Allow non-wallet owned change addresses -- [`5d3401c7e`](https://github.com/raptoreum/raptoreum/commit/5d3401c7e) Merge #9312: Increase mempool expiry time to 2 weeks -- [`8c4c6063a`](https://github.com/raptoreum/raptoreum/commit/8c4c6063a) Merge #9281: Refactor: Remove using namespace from bench/ & test/ sources -- [`882e2cdb9`](https://github.com/raptoreum/raptoreum/commit/882e2cdb9) Merge #9373: Linearize script update (hash byte reversal and Python 3 support) -- [`718e6223b`](https://github.com/raptoreum/raptoreum/commit/718e6223b) Merge #9387: [Refactor] RAII of libevent stuff using unique ptrs with deleters -- [`a1478e586`](https://github.com/raptoreum/raptoreum/commit/a1478e586) Merge #9417: Do not evaluate hidden LogPrint arguments -- [`e48bc13a2`](https://github.com/raptoreum/raptoreum/commit/e48bc13a2) Merge #9474: Mark the minconf parameter to move as ignored -- [`35f3f7aad`](https://github.com/raptoreum/raptoreum/commit/35f3f7aad) Merge #9475: Let autoconf detect presence of EVP_MD_CTX_new -- [`d2a8ecc8d`](https://github.com/raptoreum/raptoreum/commit/d2a8ecc8d) Merge #9395: Add test for -walletrejectlongchains -- [`e5873a564`](https://github.com/raptoreum/raptoreum/commit/e5873a564) Merge #9457: [qt] Select more files for translation -- [`f89a5c78d`](https://github.com/raptoreum/raptoreum/commit/f89a5c78d) Merge #9470: qt: Set (count) placeholder in sendcoinsdialog to notranslate -- [`d513c77af`](https://github.com/raptoreum/raptoreum/commit/d513c77af) Merge #9467: [Trivial] [Doc] Install Protobuf v3 on OS X -- [`125adda41`](https://github.com/raptoreum/raptoreum/commit/125adda41) Merge #9401: Make rpcauth help message clearer, add example in example .conf -- [`a81b2750f`](https://github.com/raptoreum/raptoreum/commit/a81b2750f) Merge #9396: Updated listsinceblock rpc documentation -- [`bdd151f59`](https://github.com/raptoreum/raptoreum/commit/bdd151f59) Merge #9288: Fix a bug if the min fee is 0 for FeeFilterRounder -- [`8f423499d`](https://github.com/raptoreum/raptoreum/commit/8f423499d) Merge #9283: A few more CTransactionRef optimizations -- [`71a490e0f`](https://github.com/raptoreum/raptoreum/commit/71a490e0f) Merge #9462: [qt] Do not translate tilde character -- [`da209546d`](https://github.com/raptoreum/raptoreum/commit/da209546d) Merge #8776: Wallet refactoring leading up to multiwallet -- [`1d83352da`](https://github.com/raptoreum/raptoreum/commit/1d83352da) Merge #8877: Qt RPC console: history sensitive-data filter, and saving input line when browsing history -- [`5961c622d`](https://github.com/raptoreum/raptoreum/commit/5961c622d) doc: Add historical release notes for 0.13.2 -- [`7b7ce8997`](https://github.com/raptoreum/raptoreum/commit/7b7ce8997) Merge #9446: SetMerkleBranch: remove unused code, remove cs_main lock requirement -- [`a590da317`](https://github.com/raptoreum/raptoreum/commit/a590da317) Merge #9412: build: Fix 'make deploy' for OSX -- [`b584f5630`](https://github.com/raptoreum/raptoreum/commit/b584f5630) Merge #9433: Update the Windows build notes -- [`e3fbe1520`](https://github.com/raptoreum/raptoreum/commit/e3fbe1520) Merge #9420: Fix linker error when configured with --enable-lcov -- [`cbbab00c5`](https://github.com/raptoreum/raptoreum/commit/cbbab00c5) Merge #9349: Make CScript (and prevector) c++11 movable. -- [`465ceff3b`](https://github.com/raptoreum/raptoreum/commit/465ceff3b) Use ForceSetArg/ForceSetMultiArgs in debug rpc command -- [`aff4b6d2c`](https://github.com/raptoreum/raptoreum/commit/aff4b6d2c) Merge #9243: Clean up mapArgs and mapMultiArgs Usage -- [`b9b358335`](https://github.com/raptoreum/raptoreum/commit/b9b358335) Merge #9435: Removed unused variable in test, fixing warning. -- [`7417a5b24`](https://github.com/raptoreum/raptoreum/commit/7417a5b24) Merge #9407: [Trivial] Added missing colons in when running help command -- [`199170e5d`](https://github.com/raptoreum/raptoreum/commit/199170e5d) Merge #9390: travis: make distdir -- [`d8b07b96a`](https://github.com/raptoreum/raptoreum/commit/d8b07b96a) Merge #9393: build: Include cuckoocache header in Makefile -- [`dc1df137e`](https://github.com/raptoreum/raptoreum/commit/dc1df137e) Merge #9262: Prefer coins that have fewer ancestors, sanity check txn before ATMP -- [`851febd88`](https://github.com/raptoreum/raptoreum/commit/851febd88) Merge #9316: [wallet] Disable free transactions when relay is disabled -- [`504fecfe6`](https://github.com/raptoreum/raptoreum/commit/504fecfe6) Remove call to SetMiscWarning in util.cpp -- [`dcc9dffae`](https://github.com/raptoreum/raptoreum/commit/dcc9dffae) Merge #9236: Fix races for strMiscWarning and fLargeWork*Found, make QT runawayException use GetWarnings -- [`b42c722b6`](https://github.com/raptoreum/raptoreum/commit/b42c722b6) Merge #9311: Flush wallet after abandontransaction -- [`6e11b1491`](https://github.com/raptoreum/raptoreum/commit/6e11b1491) Merge #9329: [Qt] Console: allow empty arguments -- [`8fa6680c5`](https://github.com/raptoreum/raptoreum/commit/8fa6680c5) Merge #9367: If we don't allow free txs, always send a fee filter (take 2) -- [`bf3cc9ff9`](https://github.com/raptoreum/raptoreum/commit/bf3cc9ff9) Merge #9331: [qa] Add test for rescan feature of wallet key import RPCs -- [`c1811e566`](https://github.com/raptoreum/raptoreum/commit/c1811e566) Merge #8895: Better SigCache Implementation -- [`e34afa106`](https://github.com/raptoreum/raptoreum/commit/e34afa106) Merge #9273: Remove unused CDiskBlockPos* argument from ProcessNewBlock -- [`e6d05d71d`](https://github.com/raptoreum/raptoreum/commit/e6d05d71d) Merge #9290: Make RelayWalletTransaction attempt to AcceptToMemoryPool. -- [`e8a710c32`](https://github.com/raptoreum/raptoreum/commit/e8a710c32) Merge pull request #1856 from codablock/pr_backport_bitcoin_0.14-7 -- [`87e9b5988`](https://github.com/raptoreum/raptoreum/commit/87e9b5988) Remove AddRef call in CNode constructor and do AddRef in AcceptConnection -- [`41ef1f98e`](https://github.com/raptoreum/raptoreum/commit/41ef1f98e) Remove comment about smartnode connections -- [`4ee0657f8`](https://github.com/raptoreum/raptoreum/commit/4ee0657f8) Do not add to vNodes until fOneShot/fFeeler/fAddNode have been set -- [`ea7361499`](https://github.com/raptoreum/raptoreum/commit/ea7361499) Use EXIT_FAILURE when calling exit() -- [`997f9f795`](https://github.com/raptoreum/raptoreum/commit/997f9f795) Raptoreumify build-windows.md -- [`c0607af9d`](https://github.com/raptoreum/raptoreum/commit/c0607af9d) Raptoreumify part of developer-notes.md -- [`5c860b347`](https://github.com/raptoreum/raptoreum/commit/5c860b347) Merge #9330: [Qt] Console: add security warning -- [`91dc00515`](https://github.com/raptoreum/raptoreum/commit/91dc00515) Merge #9344: Do not run functions with necessary side-effects in assert() -- [`11e27d7af`](https://github.com/raptoreum/raptoreum/commit/11e27d7af) Add missing null checks in wallet/crypto_tests.cpp -- [`0982d6d3c`](https://github.com/raptoreum/raptoreum/commit/0982d6d3c) Merge #9305: Refactor: Removed begin/end_ptr functions. -- [`3aee86d6f`](https://github.com/raptoreum/raptoreum/commit/3aee86d6f) Merge #9334: Update to latest libsecp256k1 -- [`d0db70b01`](https://github.com/raptoreum/raptoreum/commit/d0db70b01) Merge #9302: Return txid even if ATMP fails for new transaction -- [`c0b0ae8be`](https://github.com/raptoreum/raptoreum/commit/c0b0ae8be) Merge #9309: [qa] Wallet needs to stay unlocked for whole test -- [`04f6a7367`](https://github.com/raptoreum/raptoreum/commit/04f6a7367) Merge #9240: Remove txConflicted -- [`45727e797`](https://github.com/raptoreum/raptoreum/commit/45727e797) Merge #9303: Update comments in ctaes -- [`b0c0046ef`](https://github.com/raptoreum/raptoreum/commit/b0c0046ef) Merge #9291: Remove mapOrphanTransactionsByPrev from DoS_tests -- [`470b526d9`](https://github.com/raptoreum/raptoreum/commit/470b526d9) Merge #9299: Remove no longer needed check for premature v2 txs -- [`7322489ca`](https://github.com/raptoreum/raptoreum/commit/7322489ca) Merge #9276: Some minor testing cleanups -- [`63d610d13`](https://github.com/raptoreum/raptoreum/commit/63d610d13) Merge #9296: Fix missed change to WalletTx structure -- [`19958fecf`](https://github.com/raptoreum/raptoreum/commit/19958fecf) Merge #9274: [qa] Use cached utxo set to fix performance regression -- [`7d887dafb`](https://github.com/raptoreum/raptoreum/commit/7d887dafb) Merge #9282: CMutableTransaction is defined as struct -- [`386026e57`](https://github.com/raptoreum/raptoreum/commit/386026e57) Merge #9165: SendMoney: use already-calculated balance -- [`9782c1831`](https://github.com/raptoreum/raptoreum/commit/9782c1831) Merge #9269: Align struct COrphan definition -- [`2feda90d5`](https://github.com/raptoreum/raptoreum/commit/2feda90d5) Merge #8613: LevelDB 1.19 -- [`b5389c09b`](https://github.com/raptoreum/raptoreum/commit/b5389c09b) Merge #9014: Fix block-connection performance regression -- [`45ea6ba4d`](https://github.com/raptoreum/raptoreum/commit/45ea6ba4d) Fix invalid cast to CTransaction* in WalletModelTransaction -- [`525c04931`](https://github.com/raptoreum/raptoreum/commit/525c04931) Merge #8580: Make CTransaction actually immutable -- [`1e62969fa`](https://github.com/raptoreum/raptoreum/commit/1e62969fa) Preparations for upcoming backport of Bitcoin #8580 -- [`cb61441e2`](https://github.com/raptoreum/raptoreum/commit/cb61441e2) Merge #9251: Improvement of documentation of command line parameter 'whitelist' -- [`5d1f05aff`](https://github.com/raptoreum/raptoreum/commit/5d1f05aff) Merge #9221: [qa] Get rid of duplicate code -- [`5e09f275e`](https://github.com/raptoreum/raptoreum/commit/5e09f275e) Merge #9257: [qa] Dump debug logs on travis failures. -- [`b390e8ee5`](https://github.com/raptoreum/raptoreum/commit/b390e8ee5) Merge #9246: Developer docs about existing subtrees. -- [`b8a81d435`](https://github.com/raptoreum/raptoreum/commit/b8a81d435) Merge #9223: unification of Bloom filter representation -- [`5a6131a86`](https://github.com/raptoreum/raptoreum/commit/5a6131a86) Merge #9265: bitcoin-cli: Make error message less confusing -- [`a95622c0b`](https://github.com/raptoreum/raptoreum/commit/a95622c0b) Merge #9239: Disable fee estimates for 1 block target -- [`62ae4e644`](https://github.com/raptoreum/raptoreum/commit/62ae4e644) Merge #9229: Remove calls to getaddrinfo_a -- [`b2fb586de`](https://github.com/raptoreum/raptoreum/commit/b2fb586de) Add missing comments to ProcessNewBlock and ProcessNewBlockHeaders -- [`180e379e2`](https://github.com/raptoreum/raptoreum/commit/180e379e2) Merge #9253: Fix calculation of number of bound sockets to use -- [`3b2fd85b5`](https://github.com/raptoreum/raptoreum/commit/3b2fd85b5) Merge #9230: Fix some benign races in timestamp logging -- [`d54ef6d7e`](https://github.com/raptoreum/raptoreum/commit/d54ef6d7e) Merge #9226: Remove fNetworkNode and pnodeLocalHost. -- [`a78e0e36c`](https://github.com/raptoreum/raptoreum/commit/a78e0e36c) Merge #9244: Trivial refactor: Remove extern keyword from function declarations -- [`b07393709`](https://github.com/raptoreum/raptoreum/commit/b07393709) Merge #9010: Split up AppInit2 into multiple phases, daemonize after datadir lock errors -- [`27fcec08f`](https://github.com/raptoreum/raptoreum/commit/27fcec08f) Merge #9202: bench: Add support for measuring CPU cycles -- [`ab9bce2c3`](https://github.com/raptoreum/raptoreum/commit/ab9bce2c3) Merge #9225: Fix some benign races -- [`b27c4b8e9`](https://github.com/raptoreum/raptoreum/commit/b27c4b8e9) Merge #9224: Prevent FD_SETSIZE error building on OpenBSD -- [`df24dfd4b`](https://github.com/raptoreum/raptoreum/commit/df24dfd4b) Merge #9233: Fix some typos -- [`f8948de02`](https://github.com/raptoreum/raptoreum/commit/f8948de02) Merge #9219: doc: Improve windows build instructions using Linux subsystem -- [`dadfc45b1`](https://github.com/raptoreum/raptoreum/commit/dadfc45b1) Add size() method to CVectorWriter -- [`5c0b55a7c`](https://github.com/raptoreum/raptoreum/commit/5c0b55a7c) Merge #9128: net: Decouple CConnman and message serialization -- [`c87c15142`](https://github.com/raptoreum/raptoreum/commit/c87c15142) Merge #9220: Refactor: Stop using namespace std (bitcoin-cli/-tx). -- [`2c8fe4686`](https://github.com/raptoreum/raptoreum/commit/2c8fe4686) Merge #9100: tx_valid: re-order inputs to how they are encoded -- [`d5f2f0796`](https://github.com/raptoreum/raptoreum/commit/d5f2f0796) Merge #9216: Doc: Fix copypasted comment -- [`a71702e3e`](https://github.com/raptoreum/raptoreum/commit/a71702e3e) Merge #9144: [Trivial] Correct waitforblockheight example help text -- [`3a48d2b83`](https://github.com/raptoreum/raptoreum/commit/3a48d2b83) Merge #8930: Move orphan processing to ActivateBestChain -- [`f831710f4`](https://github.com/raptoreum/raptoreum/commit/f831710f4) Merge #9139: Change sync_blocks to pick smarter maxheight (on top of #9196) -- [`b6ea01e07`](https://github.com/raptoreum/raptoreum/commit/b6ea01e07) Remove namespace alert_tests when including alert test data -- [`7939a23e3`](https://github.com/raptoreum/raptoreum/commit/7939a23e3) Use std::move when calling MakeTransactionRef -- [`d0a39fbcf`](https://github.com/raptoreum/raptoreum/commit/d0a39fbcf) Use "Raptoreum Core" instead of "raptoreum-core" in some places and Raptoreumify -- [`9170c0e9c`](https://github.com/raptoreum/raptoreum/commit/9170c0e9c) Fix rpc tests -- [`76d7730a5`](https://github.com/raptoreum/raptoreum/commit/76d7730a5) Raptoreumify ISSUE_TEMPLATE.md -- [`07cd44c0e`](https://github.com/raptoreum/raptoreum/commit/07cd44c0e) Use MakeTransactionRef in CreateDevNetGenesisBlock -- [`e02f31347`](https://github.com/raptoreum/raptoreum/commit/e02f31347) Mogrify and optimize network_disabled.png and copy it to all themes -- [`796bed124`](https://github.com/raptoreum/raptoreum/commit/796bed124) Merge #9207: [Doc] Move comments above bash command in build-unix -- [`898bd4395`](https://github.com/raptoreum/raptoreum/commit/898bd4395) Merge #9204: Clarify CreateTransaction error messages -- [`2d87a0fdd`](https://github.com/raptoreum/raptoreum/commit/2d87a0fdd) Merge #8690: Do not fully sort all nodes for addr relay -- [`d757c895b`](https://github.com/raptoreum/raptoreum/commit/d757c895b) Merge #9141: Remove unnecessary calls to CheckFinalTx -- [`4e1c1923b`](https://github.com/raptoreum/raptoreum/commit/4e1c1923b) Merge #9142: Move -salvagewallet, -zap(wtx) to where they belong -- [`ce3f38d6c`](https://github.com/raptoreum/raptoreum/commit/ce3f38d6c) Merge #9025: getrawtransaction should take a bool for verbose -- [`481bab745`](https://github.com/raptoreum/raptoreum/commit/481bab745) Merge #9200: bench: Fix subtle counting issue when rescaling iteration count -- [`507c4e524`](https://github.com/raptoreum/raptoreum/commit/507c4e524) Merge #9185: [Qt] fix coincontrol sort issue -- [`e5cc7d0eb`](https://github.com/raptoreum/raptoreum/commit/e5cc7d0eb) Merge #8872: Remove block-request logic from INV message processing -- [`726dd1f8a`](https://github.com/raptoreum/raptoreum/commit/726dd1f8a) Merge #9179: Set DEFAULT_LIMITFREERELAY = 0 kB/minute -- [`afa99c41f`](https://github.com/raptoreum/raptoreum/commit/afa99c41f) Merge #9117: net: don't send feefilter messages before the version handshake is complete -- [`f12610c03`](https://github.com/raptoreum/raptoreum/commit/f12610c03) Merge #9125: Make CBlock a vector of shared_ptr of CTransactions -- [`c937a0bfb`](https://github.com/raptoreum/raptoreum/commit/c937a0bfb) Merge #9186: test: Fix use-after-free in scheduler tests -- [`2f9528486`](https://github.com/raptoreum/raptoreum/commit/2f9528486) Merge #9156: Add compile and link options echo to configure -- [`a9a2db9a5`](https://github.com/raptoreum/raptoreum/commit/a9a2db9a5) Merge #9168: [qa] add assert_raises_message to check specific error message -- [`9b9d3d1da`](https://github.com/raptoreum/raptoreum/commit/9b9d3d1da) Merge #9133: Unset fImporting for loading mempool -- [`0932079ea`](https://github.com/raptoreum/raptoreum/commit/0932079ea) Merge #9131: fNetworkActive is not protected by a lock, use an atomic -- [`e711f4ae2`](https://github.com/raptoreum/raptoreum/commit/e711f4ae2) Merge #9151: [qa] proxy_test: Calculate hardcoded port numbers -- [`dc4fdd9ff`](https://github.com/raptoreum/raptoreum/commit/dc4fdd9ff) Merge #9164: [trivial] credit values are CAmount -- [`c12eb7f31`](https://github.com/raptoreum/raptoreum/commit/c12eb7f31) Put namespace{} around alertTests.raw.h include -- [`a9c354472`](https://github.com/raptoreum/raptoreum/commit/a9c354472) Merge #9140: Bugfix: Correctly replace generated headers and fail cleanly -- [`12883cfe4`](https://github.com/raptoreum/raptoreum/commit/12883cfe4) Merge #9136: sync_blocks cleanup -- [`2b99a4b4e`](https://github.com/raptoreum/raptoreum/commit/2b99a4b4e) Merge #9145: [qt] Make network disabled icon 50% opaque -- [`db516cfb8`](https://github.com/raptoreum/raptoreum/commit/db516cfb8) Merge #9124: Use better name for local variable to prevent -Wshadow compiler warning -- [`8b7eeb610`](https://github.com/raptoreum/raptoreum/commit/8b7eeb610) Merge #9115: Mention reporting security issues responsibly -- [`a9aa477da`](https://github.com/raptoreum/raptoreum/commit/a9aa477da) Merge #9049: Remove duplicatable duplicate-input check from CheckTransaction -- [`3a388d9c0`](https://github.com/raptoreum/raptoreum/commit/3a388d9c0) Merge #9097: [qa] Rework sync_* and preciousblock.py -- [`ec08f5b75`](https://github.com/raptoreum/raptoreum/commit/ec08f5b75) Merge #9122: fix getnettotals RPC description about timemillis. -- [`5f6908619`](https://github.com/raptoreum/raptoreum/commit/5f6908619) Merge #9121: Initialize variable to prevent compiler warning -- [`56ed80084`](https://github.com/raptoreum/raptoreum/commit/56ed80084) Merge #8894: [Testing] Include fRelay in mininode version messages -- [`161fa919c`](https://github.com/raptoreum/raptoreum/commit/161fa919c) Merge #9111: Remove unused variable UNLIKELY_PCT from fees.h -- [`b64452a7a`](https://github.com/raptoreum/raptoreum/commit/b64452a7a) Revert "Check and enable -Wshadow by default." -- [`591729051`](https://github.com/raptoreum/raptoreum/commit/591729051) Merge #8794: Enable -Wshadow by default -- [`7765c87e7`](https://github.com/raptoreum/raptoreum/commit/7765c87e7) Remove nType and nVersion from Raptoreum related serialization code -- [`19a2d668c`](https://github.com/raptoreum/raptoreum/commit/19a2d668c) Merge #9039: Various serialization simplifcations and optimizations -- [`1121f2f95`](https://github.com/raptoreum/raptoreum/commit/1121f2f95) Merge #9098: [qa] Handle zombies and cluttered tmpdirs -- [`705057f0d`](https://github.com/raptoreum/raptoreum/commit/705057f0d) Merge #9095: test: Fix test_random includes -- [`9b8cc0b1c`](https://github.com/raptoreum/raptoreum/commit/9b8cc0b1c) Merge #9045: Hash P2P messages as they are received instead of at process-time -- [`3d7bb9cf5`](https://github.com/raptoreum/raptoreum/commit/3d7bb9cf5) Merge #9077: [qa] Increase wallet-dump RPC timeout -- [`2342b2ac0`](https://github.com/raptoreum/raptoreum/commit/2342b2ac0) Merge #9094: qt: Use correct conversion function for boost::path datadir -- [`293333481`](https://github.com/raptoreum/raptoreum/commit/293333481) Merge #8981: Wshadow: Do not shadow argument with a local variable -- [`a3325fc06`](https://github.com/raptoreum/raptoreum/commit/a3325fc06) Merge pull request #1851 from codablock/pr_backport_bitcoin_0.14-5 -- [`4a19af7bd`](https://github.com/raptoreum/raptoreum/commit/4a19af7bd) Use correct version for fee estimates db -- [`fc95cbb49`](https://github.com/raptoreum/raptoreum/commit/fc95cbb49) Use nPowTargetSpacing in SendCoinsDialog::updateGlobalFeeVariables -- [`c5bfd2157`](https://github.com/raptoreum/raptoreum/commit/c5bfd2157) Fix version check in CBlockPolicyEstimator::Read -- [`12d8ed437`](https://github.com/raptoreum/raptoreum/commit/12d8ed437) Raptoreumify DIST_CONTRIB in Makefile.am -- [`d45201896`](https://github.com/raptoreum/raptoreum/commit/d45201896) Raptoreumify generatetoaddress help string -- [`6eaafa86b`](https://github.com/raptoreum/raptoreum/commit/6eaafa86b) Merge #7730: Remove priority estimation -- [`9be592806`](https://github.com/raptoreum/raptoreum/commit/9be592806) Merge #8709: Allow filterclear messages for enabling TX relay only. -- [`84559c056`](https://github.com/raptoreum/raptoreum/commit/84559c056) Merge #9052: Use RelevantServices instead of node_network in AttemptToEvict. -- [`29a59e518`](https://github.com/raptoreum/raptoreum/commit/29a59e518) Remove NodeEvictionCandidate constructor and revert to struct initializion -- [`05b34f49b`](https://github.com/raptoreum/raptoreum/commit/05b34f49b) Merge #8568: new var DIST_CONTRIB adds useful things for packagers from contrib -- [`1188dd28a`](https://github.com/raptoreum/raptoreum/commit/1188dd28a) Merge #9093: [doc] release-process: Mention GitHub release and archived release notes -- [`47a7ec79f`](https://github.com/raptoreum/raptoreum/commit/47a7ec79f) Merge #9083: Enforcing consistency, 'gitian' to 'Gitian' -- [`9d661f433`](https://github.com/raptoreum/raptoreum/commit/9d661f433) Merge #8675: Make copyright header lines uniform -- [`921730d97`](https://github.com/raptoreum/raptoreum/commit/921730d97) Merge #9070: Lockedpool fixes -- [`188a2d98f`](https://github.com/raptoreum/raptoreum/commit/188a2d98f) Merge #9085: Remove unused CTxOut::GetHash() -- [`92f0f67c0`](https://github.com/raptoreum/raptoreum/commit/92f0f67c0) Merge #9069: Clean up bctest.py and bitcoin-util-test.py -- [`5adb5b8e8`](https://github.com/raptoreum/raptoreum/commit/5adb5b8e8) Merge #9073: Trivial: Add common failure cases for rpc server connection failure -- [`dd7669bc7`](https://github.com/raptoreum/raptoreum/commit/dd7669bc7) Merge #9050: net: make a few values immutable, and use deterministic randomness for the localnonce -- [`6f8720b7f`](https://github.com/raptoreum/raptoreum/commit/6f8720b7f) Merge #9071: Declare wallet.h functions inline -- [`cd7c5bd75`](https://github.com/raptoreum/raptoreum/commit/cd7c5bd75) Merge #9036: wallet: Change default confirm target from 2 to 6 -- [`70c86db4e`](https://github.com/raptoreum/raptoreum/commit/70c86db4e) Merge #9065: Merge `doc/unit-tests.md` into `src/test/README.md` -- [`9b9f86a59`](https://github.com/raptoreum/raptoreum/commit/9b9f86a59) Merge #8977: [Wallet] Refactor wallet/init interaction (Reaccept wtx, flush thread) -- [`2999d097f`](https://github.com/raptoreum/raptoreum/commit/2999d097f) Merge #9013: Trivial: Explicitly pass const CChainParams& to LoadBlockIndexDB() -- [`42fa46f85`](https://github.com/raptoreum/raptoreum/commit/42fa46f85) Merge #9042: [rpc] ParseHash: Fail when length is not 64 -- [`0a6bf096d`](https://github.com/raptoreum/raptoreum/commit/0a6bf096d) Merge #9066: tests: Remove variable unused after refactoring -- [`07f406fd6`](https://github.com/raptoreum/raptoreum/commit/07f406fd6) Merge #9023: Add logging to bitcoin-util-test.py -- [`b72041518`](https://github.com/raptoreum/raptoreum/commit/b72041518) Merge #8828: Move CWalletDB::ReorderTransactions to CWallet -- [`0b93a5894`](https://github.com/raptoreum/raptoreum/commit/0b93a5894) Merge #8674: tools for analyzing, updating and adding copyright headers in source files -- [`85c5aea08`](https://github.com/raptoreum/raptoreum/commit/85c5aea08) Merge #9063: Do not shadow variable, use deprecated MAP_ANON if MAP_ANONYMOUS is not defined -- [`bc3b9294e`](https://github.com/raptoreum/raptoreum/commit/bc3b9294e) Merge #8753: Locked memory manager -- [`88f9dc2f1`](https://github.com/raptoreum/raptoreum/commit/88f9dc2f1) Merge #9032: test: Add format-dependent comparison to bctest -- [`0a0e60c1f`](https://github.com/raptoreum/raptoreum/commit/0a0e60c1f) Merge #8448: Store mempool and prioritization data to disk -- [`b2229356b`](https://github.com/raptoreum/raptoreum/commit/b2229356b) Merge #9043: [qt] Return useful error message on ATMP failure -- [`ade67c91e`](https://github.com/raptoreum/raptoreum/commit/ade67c91e) Merge #9041: keypoololdest denote Unix epoch, not GMT -- [`77b888a06`](https://github.com/raptoreum/raptoreum/commit/77b888a06) Merge #8989: [Qt] overhaul smart-fee slider, adjust default confirmation target -- [`8d62e3f80`](https://github.com/raptoreum/raptoreum/commit/8d62e3f80) Throw exception in gobject prepare when CommitTransaction fails -- [`848f3389b`](https://github.com/raptoreum/raptoreum/commit/848f3389b) Merge #9016: Return useful error message on ATMP failure -- [`01389bc33`](https://github.com/raptoreum/raptoreum/commit/01389bc33) Merge #9029: instance of 'mem pool' to 'mempool' -- [`55208b759`](https://github.com/raptoreum/raptoreum/commit/55208b759) Merge #9033: Update build notes for dropping osx 10.7 support (fanquake) -- [`2d72e91b5`](https://github.com/raptoreum/raptoreum/commit/2d72e91b5) doc: Add release notes for 0.13.1 release -- [`d38c7f1d4`](https://github.com/raptoreum/raptoreum/commit/d38c7f1d4) Merge #9020: rpc: Remove invalid explanation from wallet fee message -- [`fd364841a`](https://github.com/raptoreum/raptoreum/commit/fd364841a) Merge #9015: release: bump required osx version to 10.8. (jonasschnelli) -- [`5bcd438b1`](https://github.com/raptoreum/raptoreum/commit/5bcd438b1) Merge #8515: A few mempool removal optimizations -- [`4d0f28545`](https://github.com/raptoreum/raptoreum/commit/4d0f28545) Merge #8948: [TRIVIAL] reorder Windows gitian build order to match Linux -- [`00f4d887a`](https://github.com/raptoreum/raptoreum/commit/00f4d887a) Merge #9002: Make connect=0 disable automatic outbound connections. -- [`55cabaa21`](https://github.com/raptoreum/raptoreum/commit/55cabaa21) Merge #9004: Clarify `listenonion` -- [`e9f250d68`](https://github.com/raptoreum/raptoreum/commit/e9f250d68) Merge #8993: Trivial: Fix doxygen comment: the transaction is returned in txOut -- [`9be4217df`](https://github.com/raptoreum/raptoreum/commit/9be4217df) Merge #8982: Eliminating Inconsistencies in Textual Output -- [`beef6e784`](https://github.com/raptoreum/raptoreum/commit/beef6e784) Merge #8990: moveonly: move `coincontrol` to `src/wallet` -- [`6cacb79c0`](https://github.com/raptoreum/raptoreum/commit/6cacb79c0) Merge #8980: RPC: importmulti: Avoid using boost::variant::operator!=, which is only in newer boost versions -- [`efded3ca9`](https://github.com/raptoreum/raptoreum/commit/efded3ca9) Merge #7551: Add importmulti RPC call -- [`bd8e9fbba`](https://github.com/raptoreum/raptoreum/commit/bd8e9fbba) Merge #8774: Qt refactors to better abstract wallet access -- [`dc9556a89`](https://github.com/raptoreum/raptoreum/commit/dc9556a89) Merge #7948: RPC: augment getblockchaininfo bip9_softforks data -- [`3b084b25b`](https://github.com/raptoreum/raptoreum/commit/3b084b25b) Remove unnecessary function prototypes -- [`dd6b9ad20`](https://github.com/raptoreum/raptoreum/commit/dd6b9ad20) Merge #8788: [RPC] Give RPC commands more information about the RPC request -- [`b5b7cd7b7`](https://github.com/raptoreum/raptoreum/commit/b5b7cd7b7) Merge #8951: RPC/Mining: getblocktemplate: Update and fix formatting of help -- [`c2e007538`](https://github.com/raptoreum/raptoreum/commit/c2e007538) Merge pull request #1849 from codablock/pr_backport_bitcoin_0.14-4 -- [`8f13e2537`](https://github.com/raptoreum/raptoreum/commit/8f13e2537) Remove doubled "./" from bitcoin-util-test.json -- [`6989f94d6`](https://github.com/raptoreum/raptoreum/commit/6989f94d6) Get rid of InsecureRand and use equivalent FastRandomContext -- [`5b8946cad`](https://github.com/raptoreum/raptoreum/commit/5b8946cad) Add Raptoreum Copyright to Makefiles modified by Raptoreum developers -- [`7604a3a0e`](https://github.com/raptoreum/raptoreum/commit/7604a3a0e) Raptoreumify INSTALL.md and build-unix.md -- [`89e959d30`](https://github.com/raptoreum/raptoreum/commit/89e959d30) Merge #8936: Report NodeId in misbehaving debug -- [`b84ea46ed`](https://github.com/raptoreum/raptoreum/commit/b84ea46ed) Merge #8965: Mention that PPA doesn't support Debian -- [`c8584293a`](https://github.com/raptoreum/raptoreum/commit/c8584293a) Backport changes to ccoins_caching.cpp which were skipped -- [`2f8677391`](https://github.com/raptoreum/raptoreum/commit/2f8677391) Merge #8873: Add microbenchmarks to profile more code paths. -- [`6e871c0c2`](https://github.com/raptoreum/raptoreum/commit/6e871c0c2) Merge #6996: Add preciousblock RPC -- [`b02e461fa`](https://github.com/raptoreum/raptoreum/commit/b02e461fa) Merge #8908: Update bitcoin-qt.desktop -- [`85706a0ae`](https://github.com/raptoreum/raptoreum/commit/85706a0ae) Merge #8223: [c++11] Use std::unique_ptr for block creation. -- [`0dcca9b99`](https://github.com/raptoreum/raptoreum/commit/0dcca9b99) Merge #8287: [wallet] Set fLimitFree = true -- [`4fc77cc3a`](https://github.com/raptoreum/raptoreum/commit/4fc77cc3a) Merge #8954: contrib: Add README for pgp keys -- [`0fd7c4e6d`](https://github.com/raptoreum/raptoreum/commit/0fd7c4e6d) Merge #8955: doc: update 0.13.0 release note info on linux arm builds -- [`3edeea3dd`](https://github.com/raptoreum/raptoreum/commit/3edeea3dd) Merge #8929: add software-properties-common -- [`239ce534c`](https://github.com/raptoreum/raptoreum/commit/239ce534c) Merge #8914: Kill insecure_random and associated global state -- [`5fc2e197d`](https://github.com/raptoreum/raptoreum/commit/5fc2e197d) Merge #8935: Documentation: Building on Windows with WSL -- [`c4faa3218`](https://github.com/raptoreum/raptoreum/commit/c4faa3218) Merge #8921: RPC: Chainparams: Remove Chainparams::fTestnetToBeDeprecatedFieldRPC -- [`ffc967369`](https://github.com/raptoreum/raptoreum/commit/ffc967369) Merge #8932: Allow bitcoin-tx to create v2 transactions -- [`19316b7a6`](https://github.com/raptoreum/raptoreum/commit/19316b7a6) Merge #8920: Set minimum required Boost to 1.47.0 -- [`0f021e55f`](https://github.com/raptoreum/raptoreum/commit/0f021e55f) Merge #8880: protocol.h: Move MESSAGE_START_SIZE into CMessageHeader -- [`005ae79cf`](https://github.com/raptoreum/raptoreum/commit/005ae79cf) Refactor MSG_XXX enum values to align with Bitcoin core -- [`552fafdae`](https://github.com/raptoreum/raptoreum/commit/552fafdae) Merge #8915: Add copyright/patent issues to possible NACK reasons -- [`dcc63e6e9`](https://github.com/raptoreum/raptoreum/commit/dcc63e6e9) Merge #8911: qt: Translate all files, even if wallet disabled -- [`75668f3fe`](https://github.com/raptoreum/raptoreum/commit/75668f3fe) Merge #8892: doc: Add build instructions for FreeBSD -- [`76641e68a`](https://github.com/raptoreum/raptoreum/commit/76641e68a) Merge #8881: Add some verbose logging to bitcoin-util-test.py -- [`43a377a96`](https://github.com/raptoreum/raptoreum/commit/43a377a96) Merge #8896: Update INSTALL landing redirection notice for build instructions. -- [`d31c2d6c4`](https://github.com/raptoreum/raptoreum/commit/d31c2d6c4) Merge #8887: [Doc] Improve GitHub issue template -- [`1c1554f7c`](https://github.com/raptoreum/raptoreum/commit/1c1554f7c) Merge #8884: Bugfix: Trivial: RPC: getblockchaininfo help: pruneheight is the lowest, not highest, block -- [`fb8d46d44`](https://github.com/raptoreum/raptoreum/commit/fb8d46d44) Merge #8879: [doc] Rework docs -- [`f45adb561`](https://github.com/raptoreum/raptoreum/commit/f45adb561) Merge #8862: Fix a few cases where messages were sent after requested disconnect -- [`6e4dad98a`](https://github.com/raptoreum/raptoreum/commit/6e4dad98a) Merge #8850: Implement (begin|end)_ptr in C++11 and add deprecation comment -- [`14483e46f`](https://github.com/raptoreum/raptoreum/commit/14483e46f) Merge #8856: Globals: Decouple GetConfigFile and ReadConfigFile from global mapArgs -- [`23ac00000`](https://github.com/raptoreum/raptoreum/commit/23ac00000) Merge #8860: [qa] util: Move wait_bitcoinds() into stop_nodes() -- [`10127ae80`](https://github.com/raptoreum/raptoreum/commit/10127ae80) Merge #8863: univalue: Pull subtree -- [`16532f8ee`](https://github.com/raptoreum/raptoreum/commit/16532f8ee) Merge #8857: [qa] mininode: Only allow named args in wait_until -- [`ba02e9d18`](https://github.com/raptoreum/raptoreum/commit/ba02e9d18) Merge #8852: Mention Gitian building script in doc (Laudaa) -- [`210242e5c`](https://github.com/raptoreum/raptoreum/commit/210242e5c) Merge #8813: bitcoind: Daemonize using daemon(3) -- [`2f3abc62e`](https://github.com/raptoreum/raptoreum/commit/2f3abc62e) Merge #8830: [test] Add option to run bitcoin-util-test.py manually -- [`972a44b70`](https://github.com/raptoreum/raptoreum/commit/972a44b70) Merge #8836: bitcoin-util-test.py should fail if the output file is empty -- [`963f6a6f3`](https://github.com/raptoreum/raptoreum/commit/963f6a6f3) Merge #8829: Add bitcoin-tx JSON tests -- [`6b1842af8`](https://github.com/raptoreum/raptoreum/commit/6b1842af8) Merge #8839: test: Avoid ConnectionResetErrors during RPC tests -- [`942fe0ed4`](https://github.com/raptoreum/raptoreum/commit/942fe0ed4) Merge #8840: test: Explicitly set encoding to utf8 when opening text files -- [`272fddce2`](https://github.com/raptoreum/raptoreum/commit/272fddce2) Merge #8826: Do not include env_win.cc on non-Windows systems -- [`e6af21865`](https://github.com/raptoreum/raptoreum/commit/e6af21865) Merge #8834: [qa] blockstore: Switch to dumb dbm -- [`575f625f4`](https://github.com/raptoreum/raptoreum/commit/575f625f4) Merge #8658: Remove unused statements in serialization -- [`cf4bdab3b`](https://github.com/raptoreum/raptoreum/commit/cf4bdab3b) Merge #8827: [qa] Split up slow RPC calls to avoid pruning test timeouts -- [`79f6d3d30`](https://github.com/raptoreum/raptoreum/commit/79f6d3d30) Merge #8832: [rpc] throw JSONRPCError when utxo set can not be read -- [`a26bad09b`](https://github.com/raptoreum/raptoreum/commit/a26bad09b) Merge #8784: Copyright headers for build scripts -- [`3a503b99f`](https://github.com/raptoreum/raptoreum/commit/3a503b99f) Merge #8820: [depends] Fix Qt compilation with Xcode 8 -- [`f9431a1d9`](https://github.com/raptoreum/raptoreum/commit/f9431a1d9) Merge #8823: doc: Add privacy recommendation when running hidden service -- [`8b8362ff1`](https://github.com/raptoreum/raptoreum/commit/8b8362ff1) Merge #8814: [wallet, policy] ParameterInteraction: Don't allow 0 fee -- [`a75d6110e`](https://github.com/raptoreum/raptoreum/commit/a75d6110e) Merge #8634: Add policy: null signature for failed CHECK(MULTI)SIG -- [`b224c0209`](https://github.com/raptoreum/raptoreum/commit/b224c0209) Merge #8357: [mempool] Fix relaypriority calculation error -- [`0adb4b714`](https://github.com/raptoreum/raptoreum/commit/0adb4b714) Merge pull request #1848 from codablock/pr_backport_bitcoin_0.14-3 -- [`9b1d1c61b`](https://github.com/raptoreum/raptoreum/commit/9b1d1c61b) Move AutoBackup initialization into CWallet::InitAutoBackup -- [`205ff3519`](https://github.com/raptoreum/raptoreum/commit/205ff3519) Fix wallet.py test by redirecting stderr to stdout -- [`faf52c590`](https://github.com/raptoreum/raptoreum/commit/faf52c590) Fix rpcnestedtests -- [`acf029501`](https://github.com/raptoreum/raptoreum/commit/acf029501) Merge #8810: tests: Add exception error message for JSONRPCException -- [`ec9de93ae`](https://github.com/raptoreum/raptoreum/commit/ec9de93ae) Merge #8655: Do not shadow variables (trivials) -- [`4a917b1b3`](https://github.com/raptoreum/raptoreum/commit/4a917b1b3) Merge #8796: [trivial] fix mempool comment (outdated by BIP125) -- [`0028dbfbf`](https://github.com/raptoreum/raptoreum/commit/0028dbfbf) Merge #8780: [rpc] Deprecate getinfo -- [`8e610c0ac`](https://github.com/raptoreum/raptoreum/commit/8e610c0ac) Merge #8722: bitcoin-cli: More detailed error reporting -- [`d87c156f1`](https://github.com/raptoreum/raptoreum/commit/d87c156f1) Merge #8486: [wallet] Add high transaction fee warnings -- [`8edc2a78c`](https://github.com/raptoreum/raptoreum/commit/8edc2a78c) Merge #8249: Enable (and check for) 64-bit ASLR on Windows -- [`6262f79f0`](https://github.com/raptoreum/raptoreum/commit/6262f79f0) Merge #8807: [univalue] Pull subtree from upstream -- [`18218aa3c`](https://github.com/raptoreum/raptoreum/commit/18218aa3c) Merge #8802: Fix future copyright year -- [`fdc87cecc`](https://github.com/raptoreum/raptoreum/commit/fdc87cecc) Merge #8771: CONTRIBUTING: Mention not to open several pulls -- [`24c4116b5`](https://github.com/raptoreum/raptoreum/commit/24c4116b5) Merge #8787: [Doc] Add missing autogen to example builds -- [`ce73b8300`](https://github.com/raptoreum/raptoreum/commit/ce73b8300) Merge #8786: Mandatory copyright agreement -- [`54703891e`](https://github.com/raptoreum/raptoreum/commit/54703891e) Merge #8790: [test] Remove redundant debug print in addrman_tests -- [`7f4439fa6`](https://github.com/raptoreum/raptoreum/commit/7f4439fa6) Merge #8789: [qa] pull-tester: Only print output when failed -- [`39d213114`](https://github.com/raptoreum/raptoreum/commit/39d213114) Merge #8661: Do not set an addr time penalty when a peer advertises itself. -- [`c7a0b91d3`](https://github.com/raptoreum/raptoreum/commit/c7a0b91d3) Merge #8793: Do not shadow in src/qt -- [`17e110f47`](https://github.com/raptoreum/raptoreum/commit/17e110f47) Merge #8785: Comment on CNode::nLocalServices meaning -- [`9ad1f3ffb`](https://github.com/raptoreum/raptoreum/commit/9ad1f3ffb) Merge #8779: [contrib] Delete spendfrom -- [`801c9e259`](https://github.com/raptoreum/raptoreum/commit/801c9e259) Merge #8423: [depends] expat 2.2.0, ccache 3.3.1, fontconfig 2.12.1 -- [`0dfb93450`](https://github.com/raptoreum/raptoreum/commit/0dfb93450) Merge #8783: [share] remove qt/protobuf.pri -- [`24c69691c`](https://github.com/raptoreum/raptoreum/commit/24c69691c) Merge #8781: [contrib] delete qt_translations.py -- [`97b63420d`](https://github.com/raptoreum/raptoreum/commit/97b63420d) Merge #8656: Trivial: Do not shadow global variable fileout -- [`bfa539a1d`](https://github.com/raptoreum/raptoreum/commit/bfa539a1d) Merge #8777: [qt] WalletModel: Expose disablewallet -- [`bd9449c00`](https://github.com/raptoreum/raptoreum/commit/bd9449c00) Merge #8773: Trivial Bugfix: doc/gitian-building.md: Link to release-process needs to be updated -- [`06f41f358`](https://github.com/raptoreum/raptoreum/commit/06f41f358) Merge #8768: init: Get rid of fDisableWallet -- [`ac3fdd3d2`](https://github.com/raptoreum/raptoreum/commit/ac3fdd3d2) Merge #8769: Trivial: Fix ISO URL, capitalization -- [`e02b48cad`](https://github.com/raptoreum/raptoreum/commit/e02b48cad) Merge #8765: [Wallet] remove "unused" ThreadFlushWalletDB from removeprunedfunds -- [`36fcd5c41`](https://github.com/raptoreum/raptoreum/commit/36fcd5c41) Merge #8762: Trivial: Fix typo -- [`387201712`](https://github.com/raptoreum/raptoreum/commit/387201712) Merge #7783: [Qt] RPC-Console: support nested commands and simple value queries -- [`630c699f0`](https://github.com/raptoreum/raptoreum/commit/630c699f0) Merge #8696: [Wallet] Remove last external reference to CWalletDB -- [`fbbddf810`](https://github.com/raptoreum/raptoreum/commit/fbbddf810) Merge #8760: [init] Get rid of some ENABLE_WALLET -- [`a5a9e4604`](https://github.com/raptoreum/raptoreum/commit/a5a9e4604) Merge #8700: [copyright] add MIT license headers to .sh scripts where missing -- [`d95a9728b`](https://github.com/raptoreum/raptoreum/commit/d95a9728b) Merge #8676: Add missing copyright headers -- [`b04e32c43`](https://github.com/raptoreum/raptoreum/commit/b04e32c43) Merge #8688: Move static global randomizer seeds into CConnman -- [`473ffa064`](https://github.com/raptoreum/raptoreum/commit/473ffa064) Merge #8702: [copyright] add MIT License copyright header to remaining Python files -- [`45fe44ed2`](https://github.com/raptoreum/raptoreum/commit/45fe44ed2) Merge #8701: [copyright] add MIT License copyright header to zmq_sub.py -- [`412f79083`](https://github.com/raptoreum/raptoreum/commit/412f79083) Merge #8737: Trivial: UndoReadFromDisk works on undo files (rev), not on block files. -- [`af5d18ad5`](https://github.com/raptoreum/raptoreum/commit/af5d18ad5) Merge #8707: net: fix maxuploadtarget setting -- [`699db9932`](https://github.com/raptoreum/raptoreum/commit/699db9932) Merge #8716: [qa] wallet: Check legacy wallet as well -- [`2a13321ff`](https://github.com/raptoreum/raptoreum/commit/2a13321ff) Merge #8742: Specify Protobuf version 2 in paymentrequest.proto -- [`e031570c4`](https://github.com/raptoreum/raptoreum/commit/e031570c4) Merge #8720: Minor change in section name -- [`81a8e05d1`](https://github.com/raptoreum/raptoreum/commit/81a8e05d1) Merge #8754: [Doc] Target protobuf 2.6 in OS X build notes. -- [`9432e1904`](https://github.com/raptoreum/raptoreum/commit/9432e1904) Merge #8494: [init, wallet] ParameterInteraction() iff wallet enabled -- [`9e0976ee0`](https://github.com/raptoreum/raptoreum/commit/9e0976ee0) Merge #8724: [qa] walletbackup: Sync blocks inside the loop -- [`9d8648735`](https://github.com/raptoreum/raptoreum/commit/9d8648735) Merge #8713: [qa] create_cache: Delete temp dir when done -- [`c46c48057`](https://github.com/raptoreum/raptoreum/commit/c46c48057) Merge #8714: [qa] gitignore: Remove unused lines -- [`eae44bd3d`](https://github.com/raptoreum/raptoreum/commit/eae44bd3d) Merge #8712: Remove maxuploadtargets recommended minimum -- [`93e857ed9`](https://github.com/raptoreum/raptoreum/commit/93e857ed9) Merge #8652: [qa]: remove root test directory for RPC tests -- [`85ce0ef28`](https://github.com/raptoreum/raptoreum/commit/85ce0ef28) Merge #8697: fix op order to append first alert -- [`8efec7b06`](https://github.com/raptoreum/raptoreum/commit/8efec7b06) Fix wallet-accounts.py tests -- [`fdd063816`](https://github.com/raptoreum/raptoreum/commit/fdd063816) Merge #8928: Fix init segfault where InitLoadWallet() calls ATMP before genesis -- [`610470c73`](https://github.com/raptoreum/raptoreum/commit/610470c73) Remove bitcoin man pages and call gen-manpages.sh for Raptoreum -- [`f9694badb`](https://github.com/raptoreum/raptoreum/commit/f9694badb) Raptoreumify gen-manpages.sh -- [`5691cee8d`](https://github.com/raptoreum/raptoreum/commit/5691cee8d) Merge #8608: Install manpages via make install, also add some autogenerated manpages -- [`85c0aabc1`](https://github.com/raptoreum/raptoreum/commit/85c0aabc1) Merge #8667: Fix SIGHASH_SINGLE bug in test_framework SignatureHash -- [`3baee7ba2`](https://github.com/raptoreum/raptoreum/commit/3baee7ba2) Merge #8681: Performance Regression Fix: Pre-Allocate txChanged vector -- [`0324fa012`](https://github.com/raptoreum/raptoreum/commit/0324fa012) Merge #8677: Do not shadow upper local variable 'send', prevent -Wshadow compiler warning. -- [`b90d7611a`](https://github.com/raptoreum/raptoreum/commit/b90d7611a) Merge #8563: Add configure check for -latomic -- [`c2a601f50`](https://github.com/raptoreum/raptoreum/commit/c2a601f50) Merge #8680: Address Travis spurious failures -- [`6924212f0`](https://github.com/raptoreum/raptoreum/commit/6924212f0) Merge #8683: fix incorrect file name bitcoin.qrc -- [`3d26438be`](https://github.com/raptoreum/raptoreum/commit/3d26438be) Merge #8673: Trivial: Fix obvious assignment/equality error in test -- [`f7e9bc613`](https://github.com/raptoreum/raptoreum/commit/f7e9bc613) Merge #8606: Fix some locks -- [`218957091`](https://github.com/raptoreum/raptoreum/commit/218957091) Merge #8645: Remove unused Qt 4.6 patch. -- [`75f920e89`](https://github.com/raptoreum/raptoreum/commit/75f920e89) Merge #8663: trivial: remove unnecessary variable fDaemon -- [`313cfb09d`](https://github.com/raptoreum/raptoreum/commit/313cfb09d) Merge #8466: [Trivial] Do not shadow variables in networking code -- [`414272af9`](https://github.com/raptoreum/raptoreum/commit/414272af9) Merge #8629: C++11: s/boost::scoped_ptr/std::unique_ptr/ -- [`4d0be42c6`](https://github.com/raptoreum/raptoreum/commit/4d0be42c6) Merge #8272: Make the dummy argument to getaddednodeinfo optional -- [`bc91f34da`](https://github.com/raptoreum/raptoreum/commit/bc91f34da) Merge #8638: rest.cpp: change HTTP_INTERNAL_SERVER_ERROR to HTTP_BAD_REQUEST -- [`79d550d56`](https://github.com/raptoreum/raptoreum/commit/79d550d56) Merge #8557: [contrib] Rework verifybinaries -- [`ae0aca909`](https://github.com/raptoreum/raptoreum/commit/ae0aca909) [contrib] Remove reference to sf and add doc to verify.sh -- [`aed0b0413`](https://github.com/raptoreum/raptoreum/commit/aed0b0413) contrib: remove hardcoded version from verify.sh -- [`a2d18b475`](https://github.com/raptoreum/raptoreum/commit/a2d18b475) Merge #8640: [depends] Remove Qt46 package -- [`88fcf3fbd`](https://github.com/raptoreum/raptoreum/commit/88fcf3fbd) Merge #8191: Do not shadow variables in src/wallet -- [`5ce7ba611`](https://github.com/raptoreum/raptoreum/commit/5ce7ba611) Merge #8291: [util] CopyrightHolders: Check for untranslated substitution -- [`9d061a273`](https://github.com/raptoreum/raptoreum/commit/9d061a273) Merge #8163: Do not shadow global RPC table variable (tableRPC) -- [`75f65e9f1`](https://github.com/raptoreum/raptoreum/commit/75f65e9f1) Merge #8604: build,doc: Update for 0.13.0+ and OpenBSD 5.9 -- [`d16b2e5ec`](https://github.com/raptoreum/raptoreum/commit/d16b2e5ec) Merge #8621: [contrib] python: Don't use shell=True -- [`3b45caeeb`](https://github.com/raptoreum/raptoreum/commit/3b45caeeb) Merge #8626: Berkeley DB v6 compatibility fix -- [`f6658c07f`](https://github.com/raptoreum/raptoreum/commit/f6658c07f) Merge #8611: Reduce default number of blocks to check at startup -- [`40202ef81`](https://github.com/raptoreum/raptoreum/commit/40202ef81) Raptoreumify gitian-build.sh -- [`fc34ec4b3`](https://github.com/raptoreum/raptoreum/commit/fc34ec4b3) Merge #8566: Easy to use gitian building script -- [`e8e95994b`](https://github.com/raptoreum/raptoreum/commit/e8e95994b) Merge #8625: [doc] - clarify statement about parallel jobs in rpc-tests.py -- [`2da811bec`](https://github.com/raptoreum/raptoreum/commit/2da811bec) Merge #8624: [doc] build: Mention curl -- [`e7da91584`](https://github.com/raptoreum/raptoreum/commit/e7da91584) Merge #8617: Include instructions to extract Mac OS X SDK on Linux using 7zip and SleuthKit -- [`707e2945a`](https://github.com/raptoreum/raptoreum/commit/707e2945a) Merge #8564: [Wallet] remove unused code/conditions in ReadAtCursor -- [`22604cbbc`](https://github.com/raptoreum/raptoreum/commit/22604cbbc) Merge #8607: [doc] Fix doxygen off-by-one comments, fix typos -- [`f81e4f5fa`](https://github.com/raptoreum/raptoreum/commit/f81e4f5fa) Merge #8545: [doc] Update git-subtree-check.sh README -- [`30066a600`](https://github.com/raptoreum/raptoreum/commit/30066a600) Merge #8109: Do not shadow member variables -- [`87c81ba6f`](https://github.com/raptoreum/raptoreum/commit/87c81ba6f) Merge #8602: [trivial][doc] Mention ++i as preferred over i++ in dev notes -- [`59f4df1d8`](https://github.com/raptoreum/raptoreum/commit/59f4df1d8) Merge #8603: [trivial][doc] Mention gpg --refresh-keys in release-process.md -- [`95c61637d`](https://github.com/raptoreum/raptoreum/commit/95c61637d) Merge #8590: Remove unused variables -- [`15b9e43ab`](https://github.com/raptoreum/raptoreum/commit/15b9e43ab) Merge #8581: [wallet] rpc: Drop misleading option -- [`b00f025dd`](https://github.com/raptoreum/raptoreum/commit/b00f025dd) Merge #8583: Show XTHIN in GUI -- [`df07a3174`](https://github.com/raptoreum/raptoreum/commit/df07a3174) Merge #8561: Show "end" instead of many zeros when getheaders request received with a hashStop of Null -- [`3a497a6b5`](https://github.com/raptoreum/raptoreum/commit/3a497a6b5) Merge #8462: Move AdvertiseLocal debug output to net category -- [`3fca7e204`](https://github.com/raptoreum/raptoreum/commit/3fca7e204) Merge #7579: [Qt] show network/chain errors in the GUI -- [`909945d34`](https://github.com/raptoreum/raptoreum/commit/909945d34) Merge #8226: contributing.md: Fix formatting (line lengths and smart quotes) -- [`249e72025`](https://github.com/raptoreum/raptoreum/commit/249e72025) Merge #8578: [test] Remove unused code -- [`7269e4a90`](https://github.com/raptoreum/raptoreum/commit/7269e4a90) Merge #8567: Add default port numbers to REST doc -- [`e61556e20`](https://github.com/raptoreum/raptoreum/commit/e61556e20) Merge #8450: [Test] Replace rpc_wallet_tests.cpp with python RPC unit tests -- [`c9ebd9516`](https://github.com/raptoreum/raptoreum/commit/c9ebd9516) Merge #8560: Trivial: Fix two VarInt examples in serialize.h -- [`d97fa0402`](https://github.com/raptoreum/raptoreum/commit/d97fa0402) Merge #8445: Move CWallet::setKeyPool to private section of CWallet. -- [`bb93f8235`](https://github.com/raptoreum/raptoreum/commit/bb93f8235) doc: Add historical release notes for 0.12.1 0.13.0 -- [`61a3d9aeb`](https://github.com/raptoreum/raptoreum/commit/61a3d9aeb) Merge #8554: trivial: remove unused variable -- [`39909d373`](https://github.com/raptoreum/raptoreum/commit/39909d373) Merge #8558: Add copyright header to wallet_text_fixture.cpp -- [`e2a795fd8`](https://github.com/raptoreum/raptoreum/commit/e2a795fd8) Return EXIT_SUCCESS instead of 0 in main() -- [`e3da73ebf`](https://github.com/raptoreum/raptoreum/commit/e3da73ebf) Update Raptoreum related code to use new SyncTransaction notifications interface -- [`ebc466dbd`](https://github.com/raptoreum/raptoreum/commit/ebc466dbd) Revert test_bitcoin.info to test_raptoreum.info in Makefile.am -- [`f8ffc55af`](https://github.com/raptoreum/raptoreum/commit/f8ffc55af) Partially cherry-pick tests refactorings found in Bitcoin SegWit PRs -- [`8460a9b97`](https://github.com/raptoreum/raptoreum/commit/8460a9b97) Raptoreumify translation_process.md -- [`5b62ad34a`](https://github.com/raptoreum/raptoreum/commit/5b62ad34a) Merge #8551: [qa] Remove unused code -- [`b47cc1331`](https://github.com/raptoreum/raptoreum/commit/b47cc1331) Merge #8548: [wallet] Use __func__ to get function name for output printing -- [`ae90d0f09`](https://github.com/raptoreum/raptoreum/commit/ae90d0f09) Align HD wallet status icon code with Bitcoin code -- [`5bf3dadcb`](https://github.com/raptoreum/raptoreum/commit/5bf3dadcb) Merge #8461: document return value of networkhashps for getmininginfo RPC endpoint -- [`80573f2bf`](https://github.com/raptoreum/raptoreum/commit/80573f2bf) Merge #8540: qt: Fix random segfault when closing "Choose data directory" dialog -- [`55ccc56a8`](https://github.com/raptoreum/raptoreum/commit/55ccc56a8) Merge #8453: Bring secp256k1 subtree up to date with master -- [`7231c6690`](https://github.com/raptoreum/raptoreum/commit/7231c6690) Revert "[qa] Adjust timeouts for micro-optimization of run time" -- [`6ac01da71`](https://github.com/raptoreum/raptoreum/commit/6ac01da71) Merge #8531: [qa] abandonconflict: Use assert_equal -- [`e6dca369e`](https://github.com/raptoreum/raptoreum/commit/e6dca369e) Merge #8504: test: Remove java comparison tool -- [`10aaf04b7`](https://github.com/raptoreum/raptoreum/commit/10aaf04b7) Merge #8505: Trivial: Fix typos in various files -- [`6b8160ba2`](https://github.com/raptoreum/raptoreum/commit/6b8160ba2) Merge #8513: Fix a type error that would not compile on OSX. -- [`7bba7375d`](https://github.com/raptoreum/raptoreum/commit/7bba7375d) Merge #8482: [qa] Use single cache dir for chains -- [`5c928f005`](https://github.com/raptoreum/raptoreum/commit/5c928f005) Merge #8512: Trivial: Corrected JSON typo on setban of net.cpp -- [`bdddabb3c`](https://github.com/raptoreum/raptoreum/commit/bdddabb3c) Merge #8521: qa: Remove duplicate `hash160` implementation -- [`9ecef8313`](https://github.com/raptoreum/raptoreum/commit/9ecef8313) Merge #8520: build: Remove check for `openssl/ec.h` -- [`599df5172`](https://github.com/raptoreum/raptoreum/commit/599df5172) Merge #8516: [trivial] remove no-longer-used InitError logic -- [`a953997b2`](https://github.com/raptoreum/raptoreum/commit/a953997b2) Merge #8058: [Doc] Add issue template -- [`bc659c3e6`](https://github.com/raptoreum/raptoreum/commit/bc659c3e6) Merge #8270: Tests: Use portable #! in python scripts (/usr/bin/env) -- [`a377499c1`](https://github.com/raptoreum/raptoreum/commit/a377499c1) Merge #8192: [trivial] Remove URLs from About dialog translations -- [`f4af44676`](https://github.com/raptoreum/raptoreum/commit/f4af44676) Add SYNC_TRANSACTION_NOT_IN_BLOCK constant and fix callers of SyncTransaction -- [`256b9b77a`](https://github.com/raptoreum/raptoreum/commit/256b9b77a) Merge #7946: Reduce cs_main locks during ConnectTip/SyncWithWallets -- [`6ba688b1c`](https://github.com/raptoreum/raptoreum/commit/6ba688b1c) Merge #8353: Trivial: tiny c++11 refactors -- [`cca05694c`](https://github.com/raptoreum/raptoreum/commit/cca05694c) Merge #8293: Bugfix: Allow building libbitcoinconsensus without any univalue -- [`7dafb5303`](https://github.com/raptoreum/raptoreum/commit/7dafb5303) Merge #8492: configure: Allow building bench_bitcoin by itself -- [`82336d818`](https://github.com/raptoreum/raptoreum/commit/82336d818) Merge #8503: [doc] typos, text errors -- [`d5b5aeefe`](https://github.com/raptoreum/raptoreum/commit/d5b5aeefe) Merge #8481: Qt: Fix minimize and close bugs -- [`549894bac`](https://github.com/raptoreum/raptoreum/commit/549894bac) Merge #8444: Fix p2p-feefilter.py for changed tx relay behavior -- [`5e54cf907`](https://github.com/raptoreum/raptoreum/commit/5e54cf907) Merge #8392: Fix several node initialization issues -- [`35202920f`](https://github.com/raptoreum/raptoreum/commit/35202920f) Merge #8439: [doc] Increase recommended memory in gitian build guide -- [`2c3a218b3`](https://github.com/raptoreum/raptoreum/commit/2c3a218b3) Merge #8189: rename mapAddrCount to mapNetGroupNodes -- [`7c62457e6`](https://github.com/raptoreum/raptoreum/commit/7c62457e6) Merge #8428: Update README.md inside of src/test/ -- [`e34e2bbcc`](https://github.com/raptoreum/raptoreum/commit/e34e2bbcc) Merge #8432: Make CWallet::fFileBacked private. -- [`9589e2448`](https://github.com/raptoreum/raptoreum/commit/9589e2448) Merge #8152: [Wallet] Remove CWalletDB* parameter from CWallet::AddToWallet -- [`aa6c37919`](https://github.com/raptoreum/raptoreum/commit/aa6c37919) Merge #8413: Trivial: pass Consensus::Params& instead of CChainParams& in ContextualCheckBlock -- [`60668fb93`](https://github.com/raptoreum/raptoreum/commit/60668fb93) Merge #8346: Mempool: Use Consensus::CheckTxInputs direclty over main::CheckInputs -- [`8c76eb739`](https://github.com/raptoreum/raptoreum/commit/8c76eb739) Merge #8400: [qa]: enable rpcbind_test -- [`eb54680c3`](https://github.com/raptoreum/raptoreum/commit/eb54680c3) Merge #8238: [WIP][depends] ZeroMQ 4.1.5 && ZMQ on Windows -- [`7c1c9d0ea`](https://github.com/raptoreum/raptoreum/commit/7c1c9d0ea) Merge #8427: net: Ignore `notfound` P2P messages -- [`13b4e659b`](https://github.com/raptoreum/raptoreum/commit/13b4e659b) Merge #8274: util: Update tinyformat -- [`c03c42116`](https://github.com/raptoreum/raptoreum/commit/c03c42116) Merge #8421: httpserver: drop boost (#8023 dependency) -- [`2e4e12f4a`](https://github.com/raptoreum/raptoreum/commit/2e4e12f4a) Merge #8412: libconsensus: Expose a flag for BIP112 -- [`b673b7bf6`](https://github.com/raptoreum/raptoreum/commit/b673b7bf6) Merge #8321: [trivial] Switched constants to sizeof() -- [`e7da254c5`](https://github.com/raptoreum/raptoreum/commit/e7da254c5) Merge #8407: [Qt] Add dbcache migration path -- [`150d63f09`](https://github.com/raptoreum/raptoreum/commit/150d63f09) Merge #8414: prepend license statement to indirectmap.h -- [`04525b435`](https://github.com/raptoreum/raptoreum/commit/04525b435) Merge #8358: [doc] gbuild: Set memory explicitly (default is too low) -- [`47c726e1d`](https://github.com/raptoreum/raptoreum/commit/47c726e1d) Merge #8396: remove outdated legacy code from key.h -- [`9a91ddb41`](https://github.com/raptoreum/raptoreum/commit/9a91ddb41) Merge #8347: Trivial: Make CBlockIndex param const in ContextualCheckBlockHeader and ContextualCheckBlock -- [`0bea37d7b`](https://github.com/raptoreum/raptoreum/commit/0bea37d7b) Merge #8342: Consensus: Trivial transform BOOST_FOREACH into for loop -- [`8cfc25739`](https://github.com/raptoreum/raptoreum/commit/8cfc25739) Merge #11847: Make boost::multi_index comparators const -- [`9c2e97085`](https://github.com/raptoreum/raptoreum/commit/9c2e97085) Fix review nits -- [`f61a75402`](https://github.com/raptoreum/raptoreum/commit/f61a75402) Disable free transactions in TestPackageSelection -- [`f8a7a2c88`](https://github.com/raptoreum/raptoreum/commit/f8a7a2c88) Move bitcoin.ico/png and bitcoin_testnet.ico/png one dir up -- [`a9f0aedb3`](https://github.com/raptoreum/raptoreum/commit/a9f0aedb3) Merge #8320: Fix 0.12 release notes on block relaying -- [`6a993236b`](https://github.com/raptoreum/raptoreum/commit/6a993236b) Remove SegWit related checks added by backporting of Bitcoin #8295 -- [`f9f3b8d93`](https://github.com/raptoreum/raptoreum/commit/f9f3b8d93) Merge #8295: Mining-related fixups for 0.13.0 -- [`bc257c1a0`](https://github.com/raptoreum/raptoreum/commit/bc257c1a0) Merge #8305: Improve handling of unconnecting headers -- [`26540aa5d`](https://github.com/raptoreum/raptoreum/commit/26540aa5d) Merge #8289: bash-completion: Adapt for 0.12 and 0.13 -- [`167047297`](https://github.com/raptoreum/raptoreum/commit/167047297) Merge #8314: Fix pkg-config issues for 0.13 -- [`e6b071ab0`](https://github.com/raptoreum/raptoreum/commit/e6b071ab0) Merge #8315: gitian: Don't require sudo for Linux. -- [`237ba56d9`](https://github.com/raptoreum/raptoreum/commit/237ba56d9) Merge #8303: [Doc] Update bips.md for CSV softfork. -- [`7a6febfaa`](https://github.com/raptoreum/raptoreum/commit/7a6febfaa) Merge #8310: build: require boost for bench -- [`5ff5474e4`](https://github.com/raptoreum/raptoreum/commit/5ff5474e4) Merge #8304: [travis] Update SDK_URL -- [`25627e31d`](https://github.com/raptoreum/raptoreum/commit/25627e31d) Merge #8288: qt: Network-specific example address -- [`355f3724d`](https://github.com/raptoreum/raptoreum/commit/355f3724d) Merge #8298: wallet: Revert input selection post-pruning -- [`2c914e8ba`](https://github.com/raptoreum/raptoreum/commit/2c914e8ba) Merge #8280: Tests: Increase sync_blocks() timeouts in pruning.py -- [`dcf36df67`](https://github.com/raptoreum/raptoreum/commit/dcf36df67) Merge #8285: windows: Add testnet link to installer -- [`ba6b36978`](https://github.com/raptoreum/raptoreum/commit/ba6b36978) Merge #8281: qt: Remove client name from debug window -- [`17aa23c88`](https://github.com/raptoreum/raptoreum/commit/17aa23c88) Merge #8261: The bit field is shown only when status is "started" -- [`7f5b8f1e1`](https://github.com/raptoreum/raptoreum/commit/7f5b8f1e1) Merge #8258: RPC: Hide softfork if timeout is 0 -- [`f1f139033`](https://github.com/raptoreum/raptoreum/commit/f1f139033) Merge #8252: [trivial] Add aarch64 to depends .gitignore -- [`3f7273d00`](https://github.com/raptoreum/raptoreum/commit/3f7273d00) Merge #8256: BUG: bitcoin-qt crash -- [`5a844dcc4`](https://github.com/raptoreum/raptoreum/commit/5a844dcc4) Merge #8254: [doc] Add OSX ZMQ requirement to QA readme -- [`b7b5d6ea7`](https://github.com/raptoreum/raptoreum/commit/b7b5d6ea7) Merge #8246: trivial: capitalize BIP32 in option help -- [`e51f50544`](https://github.com/raptoreum/raptoreum/commit/e51f50544) Merge #8222: Enable mempool consistency checks in unit tests -- [`381629c75`](https://github.com/raptoreum/raptoreum/commit/381629c75) Merge #8229: [Doc] Update OS X build notes for 10.11 SDK -- [`e2bcf8ae0`](https://github.com/raptoreum/raptoreum/commit/e2bcf8ae0) Merge #8216: [qa] assert 'changePosition out of bounds' -- [`c2dabf8bd`](https://github.com/raptoreum/raptoreum/commit/c2dabf8bd) Merge #8220: Stop trimming when mapTx is empty -- [`36aa55458`](https://github.com/raptoreum/raptoreum/commit/36aa55458) Temporarily fix build error cased by out-of-order backporting -- [`808936cc3`](https://github.com/raptoreum/raptoreum/commit/808936cc3) Merge #8179: Evict orphans which are included or precluded by accepted blocks. -- [`573d9314e`](https://github.com/raptoreum/raptoreum/commit/573d9314e) Merge #7713: Fixes for verify-commits script -- [`d2c3b7efe`](https://github.com/raptoreum/raptoreum/commit/d2c3b7efe) Merge #7687: Stop treating importaddress'ed scripts as change -- [`782745b05`](https://github.com/raptoreum/raptoreum/commit/782745b05) Merge #8066: [qa] test_framework: Use different rpc_auth_pair for each node -- [`68757db68`](https://github.com/raptoreum/raptoreum/commit/68757db68) Merge #8210: [Qt] Bump to Qt5.6.1 -- [`05684db6e`](https://github.com/raptoreum/raptoreum/commit/05684db6e) Merge #8203: Clarify documentation for running a tor node -- [`b6d8206c2`](https://github.com/raptoreum/raptoreum/commit/b6d8206c2) Merge #8224: readme: Omit phrasing; 'new' -- [`46473757e`](https://github.com/raptoreum/raptoreum/commit/46473757e) Merge #8215: [wallet] tests: Don't use floating point -- [`6227cfdad`](https://github.com/raptoreum/raptoreum/commit/6227cfdad) Merge #8214: [qa] mininode: fail on send_message instead of silent return -- [`f362c610e`](https://github.com/raptoreum/raptoreum/commit/f362c610e) Merge #7600: Mining: Select transactions using feerate-with-ancestors -- [`79ad5f768`](https://github.com/raptoreum/raptoreum/commit/79ad5f768) Bump univalue version -- [`c783b39ce`](https://github.com/raptoreum/raptoreum/commit/c783b39ce) Merge #8171: [RPC] Fix createrawtx sequence number unsigned int parsing -- [`402eb5573`](https://github.com/raptoreum/raptoreum/commit/402eb5573) Merge #8208: Do not set extra flags for unfiltered DNS seed results -- [`9875ab535`](https://github.com/raptoreum/raptoreum/commit/9875ab535) Merge #8207: [trivial] Add a link to the Bitcoin-Core repository and website to the About Dialog -- [`96180a189`](https://github.com/raptoreum/raptoreum/commit/96180a189) Merge #7636: Add bitcoin address label to request payment QR code -- [`62852538e`](https://github.com/raptoreum/raptoreum/commit/62852538e) Merge #8198: [trivial] Sync ax_pthread with upstream draft4 -- [`61a667fc4`](https://github.com/raptoreum/raptoreum/commit/61a667fc4) Merge #8194: [gitian] set correct PATH for wrappers -- [`2b4e896f6`](https://github.com/raptoreum/raptoreum/commit/2b4e896f6) Merge #8197: [trivial] Ignore split-debug.sh -- [`0c6122634`](https://github.com/raptoreum/raptoreum/commit/0c6122634) Also revert BLOCK_DOWNLOAD_TIMEOUT_PER_PEER to 500000 -- [`c7937c202`](https://github.com/raptoreum/raptoreum/commit/c7937c202) Remove unnecessary call to AddInventoryKnown in INV message handling -- [`e3ca41b1c`](https://github.com/raptoreum/raptoreum/commit/e3ca41b1c) Raptoreumify build-osx.md -- [`49f9d613b`](https://github.com/raptoreum/raptoreum/commit/49f9d613b) Revert to BLOCK_DOWNLOAD_TIMEOUT_BASE = 1000000 -- [`f00aeb87c`](https://github.com/raptoreum/raptoreum/commit/f00aeb87c) Fix failing test in p2p-fullblocktest.py -- [`05c8f2ee2`](https://github.com/raptoreum/raptoreum/commit/05c8f2ee2) Raptoreumify new tests in bitcoin-util-test.json -- [`2e51d8273`](https://github.com/raptoreum/raptoreum/commit/2e51d8273) Merge #8201: [qa] fundrawtransaction: Fix race, assert amounts -- [`e7e3a8071`](https://github.com/raptoreum/raptoreum/commit/e7e3a8071) Merge #8141: Continuing port of java comparison tool -- [`6a698300a`](https://github.com/raptoreum/raptoreum/commit/6a698300a) Merge #7598: Refactor CreateNewBlock to be a method of the BlockAssembler class -- [`6ef8aae76`](https://github.com/raptoreum/raptoreum/commit/6ef8aae76) Merge #8193: [trivial][doc] Use Debian 8.5 in the gitian-build guide -- [`06a73ad7c`](https://github.com/raptoreum/raptoreum/commit/06a73ad7c) Merge #8188: Add armhf/aarch64 gitian builds -- [`acbda5d16`](https://github.com/raptoreum/raptoreum/commit/acbda5d16) Merge #8177: developer notes: updates for C++11 -- [`b95a338b3`](https://github.com/raptoreum/raptoreum/commit/b95a338b3) Merge #8133: build: Finish up out-of-tree changes -- [`79db88bbb`](https://github.com/raptoreum/raptoreum/commit/79db88bbb) Merge #8181: build: Get rid of `CLIENT_DATE` -- [`209a4d63b`](https://github.com/raptoreum/raptoreum/commit/209a4d63b) Merge #8178: Add git and github tips and tricks to developer notes -- [`b9a00f629`](https://github.com/raptoreum/raptoreum/commit/b9a00f629) Merge #7292: [RPC] Expose ancestor/descendant information over RPC -- [`856e54678`](https://github.com/raptoreum/raptoreum/commit/856e54678) Merge #7283: [gitian] Default reference_datetime to commit author date -- [`2e3aacf43`](https://github.com/raptoreum/raptoreum/commit/2e3aacf43) Merge #8166: src/test: Do not shadow local variables -- [`aa6cb48bf`](https://github.com/raptoreum/raptoreum/commit/aa6cb48bf) Merge #8154: drop vAddrToSend after sending big addr message -- [`ca228f09f`](https://github.com/raptoreum/raptoreum/commit/ca228f09f) Merge #8168: util: Add ParseUInt32 and ParseUInt64 -- [`cfc76bab9`](https://github.com/raptoreum/raptoreum/commit/cfc76bab9) Merge #8172: Fix two warnings for comparison between signed and unsigned -- [`a60d4d64c`](https://github.com/raptoreum/raptoreum/commit/a60d4d64c) Remove 'LDFLAGS=-static-libstdc++' from CONFIGFLAGS in gitian-linux.yml -- [`80d02d8f5`](https://github.com/raptoreum/raptoreum/commit/80d02d8f5) Use nRelevantServices for requiredServiceBits -- [`b3e26cc75`](https://github.com/raptoreum/raptoreum/commit/b3e26cc75) Merge #8083: Add support for dnsseeds with option to filter by servicebits -- [`361d26037`](https://github.com/raptoreum/raptoreum/commit/361d26037) Merge #8173: Use SipHash for node eviction (cont'd) -- [`fc7b5778f`](https://github.com/raptoreum/raptoreum/commit/fc7b5778f) Merge #7993: [depends] Bump Freetype, ccache, ZeroMQ, miniupnpc, expat -- [`05419aba3`](https://github.com/raptoreum/raptoreum/commit/05419aba3) Merge #8153: [rpc] fundrawtransaction feeRate: Use BTC/kB -- [`ca699ceba`](https://github.com/raptoreum/raptoreum/commit/ca699ceba) Merge #8126: std::shared_ptr based CTransaction storage in mempool -- [`51fa05ac3`](https://github.com/raptoreum/raptoreum/commit/51fa05ac3) Merge #8082: Defer inserting into maprelay until just before relaying. -- [`881d8329c`](https://github.com/raptoreum/raptoreum/commit/881d8329c) Merge #7703: tor: Change auth order to only use password auth if -torpassword -- [`00c84ca53`](https://github.com/raptoreum/raptoreum/commit/00c84ca53) Merge #8065: Addrman offline attempts -- [`2ee817fb0`](https://github.com/raptoreum/raptoreum/commit/2ee817fb0) Merge #8078: Disable the mempool P2P command when bloom filters disabled -- [`0b8169d49`](https://github.com/raptoreum/raptoreum/commit/0b8169d49) Merge #8164: [Bitcoin-Tx] fix missing test fixtures, fix 32bit atoi issue -- [`9af87c826`](https://github.com/raptoreum/raptoreum/commit/9af87c826) Merge #7957: [RPC][Bitcoin-TX] Add support for sequence number -- [`d5d25564c`](https://github.com/raptoreum/raptoreum/commit/d5d25564c) Merge #8136: Log/report in 10% steps during VerifyDB -- [`7f0213ac3`](https://github.com/raptoreum/raptoreum/commit/7f0213ac3) Merge #8118: Reduce unnecessary hashing in signrawtransaction -- [`49c2e9702`](https://github.com/raptoreum/raptoreum/commit/49c2e9702) Merge #8151: [init] Make feefilter option debug option -- [`b2bd69a7a`](https://github.com/raptoreum/raptoreum/commit/b2bd69a7a) Merge #8142: Improve CWallet API with new GetAccountPubkey function. -- [`463a68d4a`](https://github.com/raptoreum/raptoreum/commit/463a68d4a) Merge #8007: Minor locking improvements -- [`d7d5d577f`](https://github.com/raptoreum/raptoreum/commit/d7d5d577f) Merge #8137: Improve CWallet API with new AccountMove function. -- [`7538795b1`](https://github.com/raptoreum/raptoreum/commit/7538795b1) Merge #8143: comment nit: miners don't vote -- [`c69df9b82`](https://github.com/raptoreum/raptoreum/commit/c69df9b82) Merge #7967: [RPC] add feerate option to fundrawtransaction -- [`af51e591b`](https://github.com/raptoreum/raptoreum/commit/af51e591b) Merge #8139: Fix interrupted HTTP RPC connection workaround for Python 3.5+ -- [`fb88e9b60`](https://github.com/raptoreum/raptoreum/commit/fb88e9b60) Merge #7997: replace mapNextTx with slimmer setSpends -- [`df14a7f00`](https://github.com/raptoreum/raptoreum/commit/df14a7f00) Merge #7825: Prevent multiple calls to ExtractDestination -- [`dbf4dc4de`](https://github.com/raptoreum/raptoreum/commit/dbf4dc4de) Merge #8029: [Doc] Simplify OS X build notes -- [`fefd0ace3`](https://github.com/raptoreum/raptoreum/commit/fefd0ace3) Merge #8077: Consensus: Decouple from chainparams.o and timedata.o -- [`bf069fb1b`](https://github.com/raptoreum/raptoreum/commit/bf069fb1b) Merge #8123: Use std::atomic for fRequestShutdown and fReopenDebugLog -- [`09eda9783`](https://github.com/raptoreum/raptoreum/commit/09eda9783) Merge #8112: Include signal.h for sig_atomic_t in WIN32 -- [`bad08eadf`](https://github.com/raptoreum/raptoreum/commit/bad08eadf) Merge #7960: Only use AddInventoryKnown for transactions -- [`433a026a1`](https://github.com/raptoreum/raptoreum/commit/433a026a1) Fix OpenSSL build error -- [`91752ab7e`](https://github.com/raptoreum/raptoreum/commit/91752ab7e) Merge #7689: Replace OpenSSL AES with ctaes-based version -- [`83dc1dc99`](https://github.com/raptoreum/raptoreum/commit/83dc1dc99) Directly push messages instead of using CDataStream first -- [`e65bf228b`](https://github.com/raptoreum/raptoreum/commit/e65bf228b) Merge #8121: [Doc] Update implemented BIPs list -- [`dfa0bd234`](https://github.com/raptoreum/raptoreum/commit/dfa0bd234) Merge #8080: Do not use mempool for GETDATA for tx accepted after the last mempool req. -- [`b2a27c062`](https://github.com/raptoreum/raptoreum/commit/b2a27c062) Only serve normal transactions from mapRelay -- [`bef036125`](https://github.com/raptoreum/raptoreum/commit/bef036125) Merge #7877: Change mapRelay to store CTransactions -- [`2dc71e8e0`](https://github.com/raptoreum/raptoreum/commit/2dc71e8e0) Revert deadlock fix in ProcessGetData -- [`d8c5a5900`](https://github.com/raptoreum/raptoreum/commit/d8c5a5900) Merge #8090: Adding P2SH(p2pkh) script test case -- [`34b7fddde`](https://github.com/raptoreum/raptoreum/commit/34b7fddde) Raptoreumify benchmarking.md binary name -- [`475dbd49b`](https://github.com/raptoreum/raptoreum/commit/475dbd49b) Pass sys.stdout to Popen instead of subprocess.STDOUT -- [`a0481f1ed`](https://github.com/raptoreum/raptoreum/commit/a0481f1ed) Merge #8750: [qa] Refactor RPCTestHandler to prevent TimeoutExpired -- [`5496e468a`](https://github.com/raptoreum/raptoreum/commit/5496e468a) Raptoreumify a few docs and the use of an address -- [`5ba21d4e3`](https://github.com/raptoreum/raptoreum/commit/5ba21d4e3) Revert "ReprocessBlocks"->"ResetBlockFailureFlags" in debug message -- [`b1df5e9e8`](https://github.com/raptoreum/raptoreum/commit/b1df5e9e8) Align sorting in OverviewPage::SetupTransactionList with transaction view -- [`abe84cb9e`](https://github.com/raptoreum/raptoreum/commit/abe84cb9e) Use GetStrongRandBytes in CMnemonic::Generate -- [`249167ab8`](https://github.com/raptoreum/raptoreum/commit/249167ab8) Python 3 in .travis.yml -- [`a1111cdf6`](https://github.com/raptoreum/raptoreum/commit/a1111cdf6) Raptoreumify addresses/keys in signmessages.py RPC test -- [`21aaf9289`](https://github.com/raptoreum/raptoreum/commit/21aaf9289) Introduce redirect_stderr argument to start_node -- [`fbe36d3db`](https://github.com/raptoreum/raptoreum/commit/fbe36d3db) Pass -createwalletbackups=0 to raptoreumd when running rpc tests -- [`69dd8f4a6`](https://github.com/raptoreum/raptoreum/commit/69dd8f4a6) Python 3 fixes/porting in rpc tests -- [`2924b3440`](https://github.com/raptoreum/raptoreum/commit/2924b3440) Cast command to str when calling show_debug_msg -- [`6dc4a1385`](https://github.com/raptoreum/raptoreum/commit/6dc4a1385) Merge #8110: [Doc] Add benchmarking notes -- [`a3c63033d`](https://github.com/raptoreum/raptoreum/commit/a3c63033d) Merge #8115: Avoid integer division in the benchmark inner-most loop. -- [`43cbeb7fa`](https://github.com/raptoreum/raptoreum/commit/43cbeb7fa) Merge #7891: Always require OS randomness when generating secret keys -- [`cee571bda`](https://github.com/raptoreum/raptoreum/commit/cee571bda) Merge #8107: bench: Added base58 encoding/decoding benchmarks -- [`a39b1f7b8`](https://github.com/raptoreum/raptoreum/commit/a39b1f7b8) Merge #7896: fix typo in help text -- [`6c962f5e6`](https://github.com/raptoreum/raptoreum/commit/6c962f5e6) Merge #8111: Benchmark SipHash -- [`0027292ac`](https://github.com/raptoreum/raptoreum/commit/0027292ac) Merge #8104: Tests: add timeout to sync_blocks() and sync_mempools() -- [`8d47ecb23`](https://github.com/raptoreum/raptoreum/commit/8d47ecb23) Merge #8108: Trivial: Remove unused local variable shadowing upper local -- [`7db5be442`](https://github.com/raptoreum/raptoreum/commit/7db5be442) Merge #8098: [qa] test_framework: Append portseed to tmpdir -- [`b71ee087a`](https://github.com/raptoreum/raptoreum/commit/b71ee087a) Merge #8015: CCoinsViewErrorCatcher raison-d-etre -- [`9bf698793`](https://github.com/raptoreum/raptoreum/commit/9bf698793) Merge #8034: [doc][trivial] Add basic git squash workflow [skip ci] -- [`640bee181`](https://github.com/raptoreum/raptoreum/commit/640bee181) Merge #7795: UpdateTip: log only one line at most per block -- [`51d17dcde`](https://github.com/raptoreum/raptoreum/commit/51d17dcde) Move AutoBackupWallet into wallet.cpp -- [`8723f9956`](https://github.com/raptoreum/raptoreum/commit/8723f9956) Merge #8061: [Wallet] Improve Wallet encapsulation -- [`c571a9490`](https://github.com/raptoreum/raptoreum/commit/c571a9490) Merge #8076: VerifyDB: don't check blocks that have been pruned -- [`42a3e0d2d`](https://github.com/raptoreum/raptoreum/commit/42a3e0d2d) Merge #8063: Acquire lock to check for genesis block. -- [`00bf61885`](https://github.com/raptoreum/raptoreum/commit/00bf61885) Merge #8092: Correct small typo in extract_strings_qt.py -- [`f50b8bf66`](https://github.com/raptoreum/raptoreum/commit/f50b8bf66) Merge #8095: Test framework: only cleanup on successful test runs -- [`3f5be563f`](https://github.com/raptoreum/raptoreum/commit/3f5be563f) Merge #8014: Qt: Sort transactions by date -- [`62aaaaeac`](https://github.com/raptoreum/raptoreum/commit/62aaaaeac) Merge #8047: [qa] test_framework: Set wait-timeout for bitcoind procs -- [`bcecdcd8e`](https://github.com/raptoreum/raptoreum/commit/bcecdcd8e) Merge #8056: [qa] Remove hardcoded "4 nodes" from test_framework -- [`8eeaa4f21`](https://github.com/raptoreum/raptoreum/commit/8eeaa4f21) Fix typo adddrman to addrman as requested in #8070 -- [`1897ccc64`](https://github.com/raptoreum/raptoreum/commit/1897ccc64) Merge #8033: Fix Socks5() connect failures to be less noisy and less unnecessarily scary -- [`0450dfdeb`](https://github.com/raptoreum/raptoreum/commit/0450dfdeb) Merge #7932: CAddrMan::Deserialize handle corrupt serializations better. -- [`72bee9e55`](https://github.com/raptoreum/raptoreum/commit/72bee9e55) Merge #8031: improvement to readability -- [`8b28f5f99`](https://github.com/raptoreum/raptoreum/commit/8b28f5f99) Merge #8020: Use SipHash-2-4 for various non-cryptographic hashes -- [`a0afc3ee0`](https://github.com/raptoreum/raptoreum/commit/a0afc3ee0) Merge #8038: [qa, doc] Various minor fixes -- [`7b2587946`](https://github.com/raptoreum/raptoreum/commit/7b2587946) Merge #8059: Remove unneeded feerate param from RelayTransaction/AcceptToMemoryPool. -- [`26f07f835`](https://github.com/raptoreum/raptoreum/commit/26f07f835) Merge #8004: signal handling: fReopenDebugLog and fRequestShutdown should be type sig_atomic_t -- [`f0fe21d37`](https://github.com/raptoreum/raptoreum/commit/f0fe21d37) Merge #8041: [qa] Fix bip9-softforks blockstore issue -- [`4ee385842`](https://github.com/raptoreum/raptoreum/commit/4ee385842) Merge #8039: bench: Add crypto hash benchmarks -- [`f1996dc8c`](https://github.com/raptoreum/raptoreum/commit/f1996dc8c) Merge #7972: [qa] pull-tester: Run rpc test in parallel -- [`76b72a7f2`](https://github.com/raptoreum/raptoreum/commit/76b72a7f2) Merge #8028: Fix insanity of CWalletDB::WriteTx and CWalletTx::WriteToDisk -- [`4750be1af`](https://github.com/raptoreum/raptoreum/commit/4750be1af) Merge #8036: init: Move berkeleydb version reporting to wallet -- [`3dbae2d32`](https://github.com/raptoreum/raptoreum/commit/3dbae2d32) Merge #8019: Remove state arg from ReconsiderBlock, rename to ResetBlockFailureFlags -- [`262e857db`](https://github.com/raptoreum/raptoreum/commit/262e857db) Merge #8012: Qt: Delay user confirmation of send -- [`8bafa06b7`](https://github.com/raptoreum/raptoreum/commit/8bafa06b7) Merge #7971: [qa] Refactor test_framework and pull tester -- [`24ff34102`](https://github.com/raptoreum/raptoreum/commit/24ff34102) Merge #8018: Autofind rpc tests --srcdir -- [`19a6c779e`](https://github.com/raptoreum/raptoreum/commit/19a6c779e) Merge #8030: test: Revert fatal-ness of missing python-zmq -- [`3d665aa48`](https://github.com/raptoreum/raptoreum/commit/3d665aa48) Use fThread = true default argument in CAlert::Notify -- [`3110f7ebd`](https://github.com/raptoreum/raptoreum/commit/3110f7ebd) Fix issues introduced in 1770 (#1803) -- [`5222e9377`](https://github.com/raptoreum/raptoreum/commit/5222e9377) Merge #7976: Remove obsolete reference to CValidationState from UpdateCoins. -- [`93be53e34`](https://github.com/raptoreum/raptoreum/commit/93be53e34) Merge #7934: Improve rolling bloom filter performance and benchmark -- [`65a71dcb2`](https://github.com/raptoreum/raptoreum/commit/65a71dcb2) Merge #8009: Docs: Fixed invalid example paths in gitian-building.md -- [`19af9cfe1`](https://github.com/raptoreum/raptoreum/commit/19af9cfe1) Merge #8013: doc: Fedora build requirements, add gcc-c++ and fix typo -- [`25147c9dc`](https://github.com/raptoreum/raptoreum/commit/25147c9dc) Merge #7814: [qa] Switch to py3 -- [`c66fcf47e`](https://github.com/raptoreum/raptoreum/commit/c66fcf47e) Merge #8011: don't run ThreadMessageHandler at lowered priority -- [`d4b8abf4f`](https://github.com/raptoreum/raptoreum/commit/d4b8abf4f) Send non-tx/non-block inventory items -- [`5d8e94a26`](https://github.com/raptoreum/raptoreum/commit/5d8e94a26) Merge #7840: Several performance and privacy improvements to inv/mempool handling -- [`33233409a`](https://github.com/raptoreum/raptoreum/commit/33233409a) Merge #7966: http: Do a pending c++11 simplification handling work items -- [`90b00cfc6`](https://github.com/raptoreum/raptoreum/commit/90b00cfc6) Merge #7953: Create signmessagewithprivkey rpc -- [`233493b71`](https://github.com/raptoreum/raptoreum/commit/233493b71) Delete old "raptoreum" registry key when installing/uninstalling -- [`b78bd5cc7`](https://github.com/raptoreum/raptoreum/commit/b78bd5cc7) Raptoreumify help text of fundrawtransaction -- [`da2de0771`](https://github.com/raptoreum/raptoreum/commit/da2de0771) Put ps_rounds to the bottom of the result of listunspent -- [`15fc7f213`](https://github.com/raptoreum/raptoreum/commit/15fc7f213) De-bump fees in miner_tests.cpp -- [`7d4046186`](https://github.com/raptoreum/raptoreum/commit/7d4046186) Fix failing fundrawtransaction tests -- [`2c63839f2`](https://github.com/raptoreum/raptoreum/commit/2c63839f2) Raptoreumify fundrawtransaction exception -- [`f8ad2ffa7`](https://github.com/raptoreum/raptoreum/commit/f8ad2ffa7) Merge #7977: [trivial] Add missing const qualifiers. -- [`e6b2f918d`](https://github.com/raptoreum/raptoreum/commit/e6b2f918d) Merge #7968: doc: Fedora build requirements -- [`79fe8e45f`](https://github.com/raptoreum/raptoreum/commit/79fe8e45f) Merge #8002: [depends] Add -stdlib=libc++ to darwin CXX flags -- [`d55b78eb6`](https://github.com/raptoreum/raptoreum/commit/d55b78eb6) Merge #8000: tinyformat: force USE_VARIADIC_TEMPLATES -- [`49c3127b5`](https://github.com/raptoreum/raptoreum/commit/49c3127b5) Merge #7974: More comments on the design of AttemptToEvictConnection. -- [`9bed9ac9f`](https://github.com/raptoreum/raptoreum/commit/9bed9ac9f) Merge #7975: [doc] Update bitcoin-core GitHub links -- [`6662e23a0`](https://github.com/raptoreum/raptoreum/commit/6662e23a0) Merge #7982: build: No need to check for leveldb atomics -- [`7c6dab037`](https://github.com/raptoreum/raptoreum/commit/7c6dab037) Return from main instead of calling exit() -- [`a468803bd`](https://github.com/raptoreum/raptoreum/commit/a468803bd) Merge #7964: Minor changes for c++11 consistency -- [`d97501316`](https://github.com/raptoreum/raptoreum/commit/d97501316) Merge #7807: Fixed miner test values, gave constants for less error-prone values. -- [`61227bb21`](https://github.com/raptoreum/raptoreum/commit/61227bb21) Merge #7962: CalculateNextWorkRequired Cleanup -- [`03507a720`](https://github.com/raptoreum/raptoreum/commit/03507a720) Merge #7952: Log invalid block hash to make debugging easier. -- [`c8bb792f4`](https://github.com/raptoreum/raptoreum/commit/c8bb792f4) Merge #7939: qt: Make it possible to show details for multiple transactions -- [`d69bcb1a0`](https://github.com/raptoreum/raptoreum/commit/d69bcb1a0) Merge #7941: Fixing comment in script_test.json test case -- [`7973142f1`](https://github.com/raptoreum/raptoreum/commit/7973142f1) Reformat listunstpent help to align with upstream -- [`5cf744532`](https://github.com/raptoreum/raptoreum/commit/5cf744532) Merge #7916: Explicitly pass CChainParams& to DisconnectTip() -- [`a60c35182`](https://github.com/raptoreum/raptoreum/commit/a60c35182) Error/Warning fixes for HD wallet part in wallet.cpp -- [`bacc86464`](https://github.com/raptoreum/raptoreum/commit/bacc86464) Merge #7787: [Moveonly] Create ui_interface.cpp -- [`c3e590968`](https://github.com/raptoreum/raptoreum/commit/c3e590968) Add missing parts from bitcoin PR #7762 -- [`8678f2b39`](https://github.com/raptoreum/raptoreum/commit/8678f2b39) Merge #7905: test: move accounting_tests and rpc_wallet_tests to wallet/test -- [`4f5bb798e`](https://github.com/raptoreum/raptoreum/commit/4f5bb798e) Merge #7827: Speed up getchaintips. -- [`1b17e94ee`](https://github.com/raptoreum/raptoreum/commit/1b17e94ee) Merge #7900: fix spelling mistake -- [`96f9a7c3e`](https://github.com/raptoreum/raptoreum/commit/96f9a7c3e) Merge #7897: add missing newline -- [`cfb8b82dc`](https://github.com/raptoreum/raptoreum/commit/cfb8b82dc) Merge #7848: Divergence between 32- and 64-bit when hashing >4GB affects `gettxoutsetinfo` -- [`c172273e4`](https://github.com/raptoreum/raptoreum/commit/c172273e4) Raptoreumify new binary name variables -- [`9bd55b1bf`](https://github.com/raptoreum/raptoreum/commit/9bd55b1bf) Merge #7603: Build System: Use PACKAGE_TARNAME in NSIS script -- [`6c7d13380`](https://github.com/raptoreum/raptoreum/commit/6c7d13380) Merge #7518: Add multiple options to fundrawtransaction -- [`f1197476a`](https://github.com/raptoreum/raptoreum/commit/f1197476a) Merge #7870: [contrib] Add MarcoFalke key and move all keys to contrib/gitian-keys -- [`24f8c248f`](https://github.com/raptoreum/raptoreum/commit/24f8c248f) Merge #7856: Only send one GetAddr response per connection. -- [`b2eabb097`](https://github.com/raptoreum/raptoreum/commit/b2eabb097) Merge #7809: depends: some base fixes/changes -- [`60159eb2f`](https://github.com/raptoreum/raptoreum/commit/60159eb2f) Merge #7798: [travis] Print the commit which was evaluated -- [`d532f22d3`](https://github.com/raptoreum/raptoreum/commit/d532f22d3) Use BIP32_EXTKEY_SIZE instead of fixed constant -- [`7080c27dd`](https://github.com/raptoreum/raptoreum/commit/7080c27dd) Merge #7878: [test] bctest.py: Revert faa41ee -- [`ac53190bf`](https://github.com/raptoreum/raptoreum/commit/ac53190bf) Add missing changes from Bitcoin #7853 -- [`c176f6c5b`](https://github.com/raptoreum/raptoreum/commit/c176f6c5b) Merge #7812: Tiny refactor of `IsRBFOptIn`, avoid exception -- [`f1f3fa327`](https://github.com/raptoreum/raptoreum/commit/f1f3fa327) Merge #7846: Clean up lockorder data of destroyed mutexes -- [`116b14b5f`](https://github.com/raptoreum/raptoreum/commit/116b14b5f) Merge #7849: tests: add varints_bitpatterns test -- [`1ac85586c`](https://github.com/raptoreum/raptoreum/commit/1ac85586c) Merge #7847: doc: add arch linux build example -- [`cc3a06bf5`](https://github.com/raptoreum/raptoreum/commit/cc3a06bf5) Merge #7863: getblockchaininfo: make bip9_softforks an object, not an array. -- [`5b1ad12d1`](https://github.com/raptoreum/raptoreum/commit/5b1ad12d1) Merge #7855: [doc] gitian: Replace precise with trusty -- [`20cb9aa21`](https://github.com/raptoreum/raptoreum/commit/20cb9aa21) Merge #7796: [amount] Add support for negative fee rates -- [`e48f46c80`](https://github.com/raptoreum/raptoreum/commit/e48f46c80) Merge #7838: [Doc] Update gitian build guide to debian 8.4.0 -- [`d983f1d78`](https://github.com/raptoreum/raptoreum/commit/d983f1d78) Merge #7828: Trivial: Globals: Explicitly pass const CChainParams& to ProcessMessage() -- [`2a7971010`](https://github.com/raptoreum/raptoreum/commit/2a7971010) Merge #7786: Doc: Update isStandardTx comment -- [`b2d659f19`](https://github.com/raptoreum/raptoreum/commit/b2d659f19) Merge #7570: Net: Add IPv6 Link-Local Address Support -- [`a8aeff143`](https://github.com/raptoreum/raptoreum/commit/a8aeff143) Merge #7801: [qa] Remove misleading "errorString syntax" -- [`738e1c51c`](https://github.com/raptoreum/raptoreum/commit/738e1c51c) Merge #7793: [doxygen] Fix member comments -- [`1f8ca7546`](https://github.com/raptoreum/raptoreum/commit/1f8ca7546) depends: mac deploy Py3 compatibility -- [`e5b82075a`](https://github.com/raptoreum/raptoreum/commit/e5b82075a) Fix no-wallet build after backports refactored RPCs -- [`f235b6a6a`](https://github.com/raptoreum/raptoreum/commit/f235b6a6a) Apply review suggestions/fixes -- [`6a515e5e2`](https://github.com/raptoreum/raptoreum/commit/6a515e5e2) Merge #7788: Use relative paths instead of absolute paths in protoc calls -- [`d5f1b5ae8`](https://github.com/raptoreum/raptoreum/commit/d5f1b5ae8) Merge #7791: Doc: change Precise to Trusty in gitian-building.md -- [`e7d9ffa5d`](https://github.com/raptoreum/raptoreum/commit/e7d9ffa5d) Merge #7774: RPC: add versionHex in getblock and getblockheader JSON results -- [`1cd653cc5`](https://github.com/raptoreum/raptoreum/commit/1cd653cc5) Merge #7781: devtools: Auto-set branch to merge to in github-merge -- [`c86717a59`](https://github.com/raptoreum/raptoreum/commit/c86717a59) Merge #7813: [doc] Update port in tor.md -- [`7ba8612b5`](https://github.com/raptoreum/raptoreum/commit/7ba8612b5) Merge #7797: RPC: fix generatetoaddress failing to parse address -- [`a7514a8e6`](https://github.com/raptoreum/raptoreum/commit/a7514a8e6) Merge #7789: [Doc] Add note about using the Qt official binary installer. -- [`9dbda86cb`](https://github.com/raptoreum/raptoreum/commit/9dbda86cb) HDWallet error/warning message fixes -- [`298224b3b`](https://github.com/raptoreum/raptoreum/commit/298224b3b) Merge #7691: [Wallet] refactor wallet/init interaction -- [`a5505e7e8`](https://github.com/raptoreum/raptoreum/commit/a5505e7e8) Merge #7711: [build-aux] Update Boost & check macros to latest serials -- [`21b23d1ec`](https://github.com/raptoreum/raptoreum/commit/21b23d1ec) Merge #7785: Trivial: Fix typo: Optimizaton -> Optimization [skip ci] -- [`960cb014d`](https://github.com/raptoreum/raptoreum/commit/960cb014d) Merge #7477: Fix quoting of copyright holders in configure.ac. -- [`0956f3d67`](https://github.com/raptoreum/raptoreum/commit/0956f3d67) Merge #7763: Put hex-encoded version in UpdateTip -- [`644240157`](https://github.com/raptoreum/raptoreum/commit/644240157) Merge #7766: rpc: Register calls where they are defined -- [`18da34e29`](https://github.com/raptoreum/raptoreum/commit/18da34e29) Merge #7761: [Qt] remove trailing output-index from transaction-id -- [`1c8441778`](https://github.com/raptoreum/raptoreum/commit/1c8441778) Merge #7573: P2P: add maxtimeadjustment command line option -- [`a9a209f58`](https://github.com/raptoreum/raptoreum/commit/a9a209f58) Merge #7723: build: python 3 compatibility -- [`ba65eb1ac`](https://github.com/raptoreum/raptoreum/commit/ba65eb1ac) Merge #7764: [qa] Don't run pruning.py twice -- [`a309bf372`](https://github.com/raptoreum/raptoreum/commit/a309bf372) Clear setInternalKeyPool and setExternalKeyPool instead of setKeyPool -- [`e2fefa539`](https://github.com/raptoreum/raptoreum/commit/e2fefa539) Merge #7558: [RPC] Add import/removeprunedfunds rpc call -- [`ca33635ef`](https://github.com/raptoreum/raptoreum/commit/ca33635ef) Merge #7742: [Wallet][RPC] add missing abandon status documentation -- [`34701da5c`](https://github.com/raptoreum/raptoreum/commit/34701da5c) Merge #7737: devtools: make github-merge.py use py3 -- [`a4911c383`](https://github.com/raptoreum/raptoreum/commit/a4911c383) Merge #7646: Fix lockunspent help message -- [`f933c6726`](https://github.com/raptoreum/raptoreum/commit/f933c6726) Merge #7715: Fix calculation of balances and available coins. -- [`760d58e3d`](https://github.com/raptoreum/raptoreum/commit/760d58e3d) Merge #7671: [RPC] Add generatetoaddress rpc to mine to an address -- [`953aeead1`](https://github.com/raptoreum/raptoreum/commit/953aeead1) Merge #7710: [Depends] Bump miniupnpc and config.guess+sub -- [`74fe8fe59`](https://github.com/raptoreum/raptoreum/commit/74fe8fe59) Merge #7649: Prevent multiple calls to CWallet::AvailableCoins -- [`aa584522d`](https://github.com/raptoreum/raptoreum/commit/aa584522d) Raptoreum related changes for feefilter -- [`11ac70af9`](https://github.com/raptoreum/raptoreum/commit/11ac70af9) Merge #7542: Implement "feefilter" P2P message -- [`283922243`](https://github.com/raptoreum/raptoreum/commit/283922243) Merge #7726: Correct importaddress help reference to importpubkey -- [`04bf554ab`](https://github.com/raptoreum/raptoreum/commit/04bf554ab) Merge #7712: Improve COutPoint less operator -- [`f4d30a645`](https://github.com/raptoreum/raptoreum/commit/f4d30a645) Merge #7708: De-neuter NODE_BLOOM -- [`8fde2fd5f`](https://github.com/raptoreum/raptoreum/commit/8fde2fd5f) Merge #7705: [amount] Add tests and make GetFee() monotonic -- [`721171ee3`](https://github.com/raptoreum/raptoreum/commit/721171ee3) Merge #7686: [qt] Remove 0-fee from send dialog -- [`29d263389`](https://github.com/raptoreum/raptoreum/commit/29d263389) Merge #7594: Mempool: Add tracking of ancestor packages -- [`49a8ed6d3`](https://github.com/raptoreum/raptoreum/commit/49a8ed6d3) Merge #7683: Fix torcontrol.cpp unused private field warning -- [`abbbe61d0`](https://github.com/raptoreum/raptoreum/commit/abbbe61d0) Merge #7608: [wallet] Move hardcoded file name out of log messages -- [`5f9bfa0b6`](https://github.com/raptoreum/raptoreum/commit/5f9bfa0b6) Merge #7670: use cached block hash in blockToJSON() -- [`fb4ec255c`](https://github.com/raptoreum/raptoreum/commit/fb4ec255c) Merge #7663: Make the generate RPC call function for non-regtest -- [`fa0341115`](https://github.com/raptoreum/raptoreum/commit/fa0341115) Merge #7507: Remove internal miner -- [`332fbfc0e`](https://github.com/raptoreum/raptoreum/commit/332fbfc0e) HDWallet fixes after moving wallet initialization -- [`b3525b2e6`](https://github.com/raptoreum/raptoreum/commit/b3525b2e6) Merge #7577: [Wallet] move "load wallet phase" to CWallet -- [`8be396a3b`](https://github.com/raptoreum/raptoreum/commit/8be396a3b) Merge #7667: Move GetTempPath() to testutil -- [`f1e95e358`](https://github.com/raptoreum/raptoreum/commit/f1e95e358) Merge #7635: [Documentation] Add dependency info to test docs -- [`51c6ab20f`](https://github.com/raptoreum/raptoreum/commit/51c6ab20f) Merge #7576: [Wallet] move wallet help string creation to CWallet -- [`24cf36972`](https://github.com/raptoreum/raptoreum/commit/24cf36972) Merge #7592: mempool: Re-remove ERROR logging for mempool rejects -- [`23eeaeef8`](https://github.com/raptoreum/raptoreum/commit/23eeaeef8) Merge #7662: remove unused NOBLKS_VERSION_{START,END} constants -- [`00d42b7c9`](https://github.com/raptoreum/raptoreum/commit/00d42b7c9) Merge #7539: Add tags to mempool's mapTx indices -- [`d6a0de72a`](https://github.com/raptoreum/raptoreum/commit/d6a0de72a) fix splashscreen (shrink titleCopyrightVSpace) -- [`af5aece96`](https://github.com/raptoreum/raptoreum/commit/af5aece96) make CopyrightHolders more generic -- [`4e0bb527d`](https://github.com/raptoreum/raptoreum/commit/4e0bb527d) Merge #8373: Fix OSX non-deterministic dmg -- [`51ca0d5b4`](https://github.com/raptoreum/raptoreum/commit/51ca0d5b4) Move privatesend to rpcwallet.cpp as well after Bitcoin #7307 was backported -- [`02785c858`](https://github.com/raptoreum/raptoreum/commit/02785c858) Disable check-doc.py for now until all backported PRs are merged and docs fixed -- [`48eddeea2`](https://github.com/raptoreum/raptoreum/commit/48eddeea2) Merge #7455: [travis] Exit early when check-doc.py fails -- [`07338feae`](https://github.com/raptoreum/raptoreum/commit/07338feae) Merge #7620: [travis] Only run check-doc.py once -- [`266520ced`](https://github.com/raptoreum/raptoreum/commit/266520ced) Merge #7632: Delete outdated test-patches reference -- [`eed9428d2`](https://github.com/raptoreum/raptoreum/commit/eed9428d2) Merge #7616: [depends] Delete unused patches -- [`74eda8759`](https://github.com/raptoreum/raptoreum/commit/74eda8759) Merge #7537: wallet: Warn on unexpected EOF while salvaging wallet -- [`5390a1a0a`](https://github.com/raptoreum/raptoreum/commit/5390a1a0a) Merge #7590: Improving wording related to Boost library requirements [updated] -- [`f0300c6c5`](https://github.com/raptoreum/raptoreum/commit/f0300c6c5) Merge #7606: [depends] builders: No need to set -L and --location for curl -- [`a890c7616`](https://github.com/raptoreum/raptoreum/commit/a890c7616) Merge #7612: [doc] Typo fix -- [`984dc5271`](https://github.com/raptoreum/raptoreum/commit/984dc5271) Merge #7619: Add missing sudo entry in gitian VM setup. -- [`6a121275d`](https://github.com/raptoreum/raptoreum/commit/6a121275d) Merge #7583: [doc] Fix typos -- [`97c7da4b7`](https://github.com/raptoreum/raptoreum/commit/97c7da4b7) Merge #7509: Common argument defaults for NODE_BLOOM stuff and -wallet -- [`ee5f8d211`](https://github.com/raptoreum/raptoreum/commit/ee5f8d211) Merge #7536: test: test leading spaces for ParseHex -- [`cd7a2e2b5`](https://github.com/raptoreum/raptoreum/commit/cd7a2e2b5) Merge #7504: Crystal clean make clean -- [`529e8ad63`](https://github.com/raptoreum/raptoreum/commit/529e8ad63) Merge #7528: autogen.sh: warn about needing autoconf if autoreconf is not found -- [`de91ef95f`](https://github.com/raptoreum/raptoreum/commit/de91ef95f) Merge #7490: tests: Remove May15 test -- [`7ec1e1887`](https://github.com/raptoreum/raptoreum/commit/7ec1e1887) Merge #7459: Consensus: Decouple pow.o from util.o -- [`8874b2e0f`](https://github.com/raptoreum/raptoreum/commit/8874b2e0f) Merge #6480: include the chaintip blockindex in the SyncTransaction signal, add signal UpdateTip() -- [`a3d1e5eda`](https://github.com/raptoreum/raptoreum/commit/a3d1e5eda) Merge #7070: Move maxTxFee out of mempool -- [`e7a6f79e5`](https://github.com/raptoreum/raptoreum/commit/e7a6f79e5) Merge #7192: Unify product name to as few places as possible -- [`0f8ce5688`](https://github.com/raptoreum/raptoreum/commit/0f8ce5688) Merge #7444: Improve block validity/ConnectBlock() comments -- [`bcbd2cda2`](https://github.com/raptoreum/raptoreum/commit/bcbd2cda2) Merge #7091: Consensus build package -- [`0afbd1c3d`](https://github.com/raptoreum/raptoreum/commit/0afbd1c3d) Merge #7084: mempool: Replace maxFeeRate of 10000*minRelayTxFee with maxTxFee -- [`a65f7b7a7`](https://github.com/raptoreum/raptoreum/commit/a65f7b7a7) Merge #7311: MOVEONLY: Move non-consensus functions out of pow -- [`c8e04d43f`](https://github.com/raptoreum/raptoreum/commit/c8e04d43f) Add missing comment in net.cpp -- [`5f68e06a0`](https://github.com/raptoreum/raptoreum/commit/5f68e06a0) Add missing whitelistalwaysrelay arg to SET_DOC_OPTIONAL -- [`6789bf6e1`](https://github.com/raptoreum/raptoreum/commit/6789bf6e1) Merge #7287: Consensus: Remove calls to error() and FormatStateMessage() -- [`3cd83db0d`](https://github.com/raptoreum/raptoreum/commit/3cd83db0d) Merge #7441: Use Debian 8.3 in gitian build guide -- [`c5f84c4e6`](https://github.com/raptoreum/raptoreum/commit/c5f84c4e6) Merge #6842: limitfreerelay edge case bugfix -- [`6c5286aad`](https://github.com/raptoreum/raptoreum/commit/6c5286aad) Merge #7423: doc: add example for building with constrained resources -- [`2fd5d93a9`](https://github.com/raptoreum/raptoreum/commit/2fd5d93a9) Merge #7437: GUI: Disable tab navigation for peers tables. -- [`b277eed58`](https://github.com/raptoreum/raptoreum/commit/b277eed58) Merge #7425: devtools: Fix utf-8 support in messages for github-merge -- [`5323a08af`](https://github.com/raptoreum/raptoreum/commit/5323a08af) Merge #7300: [trivial] Add missing copyright headers -- [`577f683c5`](https://github.com/raptoreum/raptoreum/commit/577f683c5) Merge #7402: [devtools] github-merge get toplevel dir without extra whitespace -- [`d9d9e95e4`](https://github.com/raptoreum/raptoreum/commit/d9d9e95e4) Merge #7395: devtools: show pull and commit information in github-merge -- [`85919332d`](https://github.com/raptoreum/raptoreum/commit/85919332d) Merge #7236: Use createrawtx locktime parm in txn_clone -- [`643181fe1`](https://github.com/raptoreum/raptoreum/commit/643181fe1) Merge #7262: Reduce inefficiency of GetAccountAddress() -- [`43700eef3`](https://github.com/raptoreum/raptoreum/commit/43700eef3) Merge #7383: [Qt] rename "amount" to "requested amount" in receive coins table -- [`59db2fda1`](https://github.com/raptoreum/raptoreum/commit/59db2fda1) Merge #7183: Improved readability of ApproximateBestSubset -- [`78ad32d10`](https://github.com/raptoreum/raptoreum/commit/78ad32d10) Merge #7307: [RPC, Wallet] Move RPC dispatch table registration to wallet/ code -- [`3be77849d`](https://github.com/raptoreum/raptoreum/commit/3be77849d) Merge pull request #7378 -- [`42997ee8d`](https://github.com/raptoreum/raptoreum/commit/42997ee8d) Merge pull request #7280 -- [`2474fd0ae`](https://github.com/raptoreum/raptoreum/commit/2474fd0ae) Merge pull request #7208 -- [`723eacf45`](https://github.com/raptoreum/raptoreum/commit/723eacf45) Merge pull request #7290 -- [`25ba3aba1`](https://github.com/raptoreum/raptoreum/commit/25ba3aba1) Merge pull request #7304 -- [`38080259b`](https://github.com/raptoreum/raptoreum/commit/38080259b) Merge pull request #7313 -- [`26a5dfe33`](https://github.com/raptoreum/raptoreum/commit/26a5dfe33) Merge pull request #7326 -- [`5ca9b1a9c`](https://github.com/raptoreum/raptoreum/commit/5ca9b1a9c) Merge pull request #7317 -- [`bcebc7c4c`](https://github.com/raptoreum/raptoreum/commit/bcebc7c4c) Merge pull request #7266 -- [`f04f8c19d`](https://github.com/raptoreum/raptoreum/commit/f04f8c19d) Merge pull request #7257 -- [`3f6d6572f`](https://github.com/raptoreum/raptoreum/commit/3f6d6572f) Merge pull request #7156 -- [`bf688abce`](https://github.com/raptoreum/raptoreum/commit/bf688abce) Merge pull request #7113 -- [`f1da40c87`](https://github.com/raptoreum/raptoreum/commit/f1da40c87) Merge #7550: rpc: Input-from-stdin mode for bitcoin-cli -- [`f8407083c`](https://github.com/raptoreum/raptoreum/commit/f8407083c) Remove duplicated CCACHE= line in depends/config.site.in diff --git a/doc/release-notes/raptoreum/release-notes-0.12.3.1.md b/doc/release-notes/raptoreum/release-notes-0.12.3.1.md deleted file mode 100644 index 3c8532c58c..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.12.3.1.md +++ /dev/null @@ -1,500 +0,0 @@ -Raptoreum Core version 0.12.3.1 -========================== - -Release is now available from: - - - -This is a new major version release, bringing new features, various bugfixes 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/Raptoreum-Qt (on Mac) or -raptoreumd/raptoreum-qt (on Linux). - -Downgrade warning ------------------ - -### Downgrade to a version < 0.12.2.2 - -Because release 0.12.2.2 included the [per-UTXO fix](release-notes/raptoreum/release-notes-0.12.2.2.md#per-utxo-fix) -which changed the structure of the internal database, you will have to reindex -the database if you decide to use any pre-0.12.2.2 version. - -Wallet forward or backward compatibility was not affected. - -### Downgrade to 0.12.2.2/3 - -Downgrading to these versions does not require any additional actions, should be -fully compatible. - -Notable changes -=============== - -Introducing Named Devnets -------------------------- - -We introduce a new feature called [Named Devnets](https://github.com/raptoreum/raptoreum/pull/1791). -This feature allows the creation of multiple independent devnets. Each one is -identified by a name which is hardened into a "devnet genesis" block, -which is automatically positioned at height 1. Validation rules will -ensure that a node from `devnet=test1` will never be able to accept blocks -from `devnet=test2`. This is done by checking the expected devnet genesis -block. - -The genesis block of the devnet is the same as the one from regtest. This -starts the devnet with a very low difficulty, allowing us to fill up -needed balances for smartnodes very fast. - -Also, the devnet name is put into the sub-version of the `VERSION` message. -If a node connects to the wrong network, it will immediately be disconnected. - -New format of network message signatures ----------------------------------------- - -We introduced a new signature format for Raptoreum-specific network messages, -read more [here](https://github.com/raptoreum/raptoreum/pull/1936) and [here](https://github.com/raptoreum/raptoreum/pull/1937). -We also introduced a new spork `SPORK_6_NEW_SIGS` which is going to be used to activate the new format after the network has finished the upgrade. -Note that old pre-12.3 nodes won't be able to recognize and verify new signatures after `SPORK_6_NEW_SIGS` activates. - -The old format is partly kept in the code to keep backwards compatibility. This code will be removed in an upcoming -release. - -Governance system improvements ------------------------------- - -We do not use watchdogs since 12.2.x, instead we include all required information about sentinel into smartnode -pings. With this update we add some additional information and cover everything with a signature to ensure that -smartnode ping wasn't maleated by some intermediary node. All messages and logic related to watchdogs are -completely removed now. We also improved proposal message format, as well as proposal validation and processing, -which should lower network traffic and CPU usage. Handling of triggers was also improved slightly. - -`SPORK_13_OLD_SUPERBLOCK_FLAG` was removed now as it was unused since some time. - -PrivateSend improvements ------------------------- - -PrivateSend collaterals are no longer required to be N times of the PrivateSend fee (PSF), instead any input -which is greater or equal 1 PSF but less or equal 4 PSF can be used as a collateral. Inputs that are greater or -equal 1 PSF but strictly less than 2 PSF will be used in collaterals with OP_RETURN outputs. Note that such -inputs will be consumed completely, with no change outputs at all. This should lower number of inputs wallet -would need to take care of, improve privacy by eliminating the case where user accidentally merge small -non-private inputs together and also decrease global UTXO set size. - -It might feel that thanks to this change mixing fees are going to be slightly higher on average if have lots of -such small inputs. However, you need to keep in mind that creating new PrivateSend collaterals cost some fee too -and since such small inputs were not used at all you'd need more txes to create such collaterals. So in general, -we believe average mixing fees should stay mostly the same. - -There are also some other minor fixes which should also slightly improve mixing process. - -Additional indexes cover P2PK now ---------------------------------- - -Additional indexes like `addressindex` etc. process P2PK outputs correctly now. Note, that these indexes will -not be re-built automatically on wallet update, you must reindex manually to update indexes with P2PK outputs. - -Support for pruned nodes in Lite Mode -------------------------------------- - -It is now possible to run a pruned node which stores only some recent blocks and not the whole blockchain. -However this option is only available in so called Lite Mode. In this mode, Raptoreum specific features are disabled, meaning -that such nodes won't fully validate the blockchain (smartnode payments and superblocks). -PrivateSend and InstantSend functions are also disabled on such nodes. Such nodes are comparable to SPV-like nodes -in terms of security and validation - it relies a lot on surrounding nodes, so please keep this in mind if you decide to -use it for something. - -Default maximum block size --------------------------- - -We've changed the default maximum block size to 2MB. Such blocks were already allowed before, but the default setting -for the maximum block size (which only affects miners) was kept in place until this version. - -RPC changes ------------ - -There are a few changes in existing RPC interfaces in this release: -- `gobject count`, `smartnode count` and `smartnode list` will now by default return JSON formatted output; -If you rely on the old output format, you can still specify an additional parameter for backwards compatibility (`all` for `count` and `status` for `list`); -- `smartnodelist` has a few new modes: `daemon`, `json`, `sentinel`; -- `debug` rpc now requires categories to be separated via `+`, not `,` like before (e.g. `raptoreum+net`); -- `getchaintips` now shows the block fork occurred in `forkpoint` field; -- `getrawmempool`'s has InstantSend-related info (`instantsend` and `instantlock`); -- `getgovernanceinfo` has new field `sentinelpingmaxseconds`; -- `getwalletinfo` now shows PrivateSend balance in `privatesend_balance` field; -- `sendrawtransaction` no longer bypasses transaction policy limits by default. -- `dumphdinfo` should throw an error when wallet isn't HD now - -There is also a new RPC command `listaddressbalances`. - -You can read about RPC changes brought by backporting from Bitcoin Core in following docs: -- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md#low-level-rpc-changes -- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.1.md#low-level-rpc-changes -- https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md#low-level-rpc-changes - -Command-line options --------------------- - -New cmd-line options: -- introduced in Raptoreum Core 0.12.3.1: `allowprivatenet`, `bip9params`, `sporkaddr`, `devnet`; -- backported from Bitcoin Core 0.13/0.14: `blockreconstructionextratxn`, `maxtimeadjustment`, `maxtipage`, -`incrementalrelayfee`, `dustrelayfee`, `blockmintxfee`. - -See `Help -> Command-line options` in Qt wallet or `raptoreumd --help` for more info. - -New Smartnode Information Dialog ---------------------------------- - -You can now double-click on your smartnode in `My Smartnodes` list on `Smartnodes` tab to reveal the new -Smartnode Information dialog. It will show you some basic information as well as software versions reported by the -smartnode. There is also a QR code now which encodes corresponding smartnode private key (the one you set with -mnprivkey during MN setup and NOT the one that controls the 1000 RAPTOREUM collateral) which should make the process of pairing with -mobile software allowing you to vote with your smartnode a bit easier (this software is still in development). - -Testnet fixes -------------- - -While we've been in release preparation, a miner used his ASICs on testnet. This resulted in too many blocks being mined -in a too short time. It revealed a few corner-case bugs in validation and synchronisation rules which we have fixed now. -We've also backported a special testnet rule for our difficulty adjustment algorithm that allows to mine a low difficulty -block on testnet when the last block is older than 5 minutes. This and the other fixes should stabilize our testnet in -case of future ASIC uses on testnet. - -Using smartnode lists for initial peers discovery --------------------------------------------------- - -We now use a recent smartnode list to feed the hardcoded seed nodes list in Raptoreum Core. This list was previously -unmaintained as we fully relied on DNS based discovery on startup. DNS discovery is still used as the main discovery -method, but the hardcoded seed list should now be able to serve as a proper backup in case DNS fails for some reason. - -Lots of backports, refactoring and bug fixes --------------------------------------------- - -We backported many performance improvements and refactoring from Bitcoin Core and aligned most of our codebase with version 0.14. -Most notable ones besides various performance and stability improvements probably are -[Compact Block support (BIP 152)](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md#compact-block-support-bip-152), -[Mining transaction selection ("Child Pays For Parent")](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md#mining-transaction-selection-child-pays-for-parent), -[Null dummy soft fork (BIP 147, without SegWit)](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.1.md#null-dummy-soft-fork), -[Nested RPC Commands in Debug Console](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md#nested-rpc-commands-in-debug-console) and -[Support for JSON-RPC Named Arguments](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md#support-for-json-rpc-named-arguments). - -You can read more about all changes in Bitcoin Core 0.13 and 0.14 in following documents: -- [release-notes-0.13.0.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.0.md); -- [release-notes-0.13.1.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.1.md); -- [release-notes-0.13.2.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.13.2.md); -- [release-notes-0.14.0.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.0.md); -- [release-notes-0.14.1.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.1.md); -- [release-notes-0.14.2.md](https://github.com/bitcoin/bitcoin/blob/master/doc/release-notes/release-notes-0.14.2.md). - -Note that some features were already backported earlier (per-UTXO fix, -assumevalid, GUI overlay etc.) and some were not backported at all -(SegWit and feefilter, you can read more about why we did so [here](https://blog.raptoreum.org/segwit-lighting-rbf-in-raptoreum-9536868ca861) and [here](https://github.com/raptoreum/raptoreum/pull/2025)). -The alert system was also kept in place for now. We are going to continue backporting the most notable fixes and improvements from Bitcoin Core versions 0.15 and 0.16 in future releases. - -A lot of refactoring, code cleanups and other small fixes were done in this release again. We are going to continue making code more reliable and easier to review in future releases as well. - - -0.12.3.1 Change log -=================== - -See detailed [change log](https://github.com/raptoreum/raptoreum/compare/v0.12.2.3...raptoreum:v0.12.3.1) below. - -### Governance: -- [`6c79c348e`](https://github.com/raptoreum/raptoreum/commit/6c79c348e) Drop "MAY, 2018" clause for proposal validation on mainnet (#2101) -- [`6079b860e`](https://github.com/raptoreum/raptoreum/commit/6079b860e) Drop trigger objects when triggers are deleted or failed to be created (#2098) -- [`2583e1963`](https://github.com/raptoreum/raptoreum/commit/2583e1963) Test: Add few valid/invalid proposals (internationalization) (#2044) -- [`25eb6d7b3`](https://github.com/raptoreum/raptoreum/commit/25eb6d7b3) clean up governance vote code (#2042) -- [`a0874b72a`](https://github.com/raptoreum/raptoreum/commit/a0874b72a) Validate data size for proposals only (#2004) -- [`15fac7c7e`](https://github.com/raptoreum/raptoreum/commit/15fac7c7e) Validate proposals for expiration (#2003) -- [`a3bcc4307`](https://github.com/raptoreum/raptoreum/commit/a3bcc4307) Refactor governance (#1993) -- [`04a23bf0c`](https://github.com/raptoreum/raptoreum/commit/04a23bf0c) Fix the bug in CGovernanceObject::ProcessVote() (#1989) -- [`b0868093b`](https://github.com/raptoreum/raptoreum/commit/b0868093b) simplify gobject JSON format, remove unused fields (#1902) -- [`1dda9fe6f`](https://github.com/raptoreum/raptoreum/commit/1dda9fe6f) CProposalValidator refactoring and follow up fixes (#1956) -- [`89380b4c9`](https://github.com/raptoreum/raptoreum/commit/89380b4c9) Drop watchdogs, replace them with sentinel pings (#1949) -- [`e71cb3861`](https://github.com/raptoreum/raptoreum/commit/e71cb3861) Store CGovernanceVote hash in memory instead of recalculating it via GetHash() every time (#1946) -- [`580c4884c`](https://github.com/raptoreum/raptoreum/commit/580c4884c) Fix trigger execution and expiration (#1920) -- [`0670695fe`](https://github.com/raptoreum/raptoreum/commit/0670695fe) Move prev/next sb height logic from rpc to CSuperblock::GetNearestSuperblocksHeights (#1919) -- [`741fcbc90`](https://github.com/raptoreum/raptoreum/commit/741fcbc90) Remove excessive custom validation in CProposalValidator::ValidatePaymentAddress (#1917) -- [`354aac8d1`](https://github.com/raptoreum/raptoreum/commit/354aac8d1) rename nEpochStart variable and adjust comments (#1915) -- [`8ea1bd0f5`](https://github.com/raptoreum/raptoreum/commit/8ea1bd0f5) remove unused method GetObjectSubtype (#1914) -- [`8a387ee09`](https://github.com/raptoreum/raptoreum/commit/8a387ee09) Drop SPORK_13_OLD_SUPERBLOCK_FLAG and check superblock start hash (#1872) - -### InstantSend: -- [`8c2d16f5f`](https://github.com/raptoreum/raptoreum/commit/8c2d16f5f) Limit IS quorums by updated MNs only (#2107) -- [`ef85d5144`](https://github.com/raptoreum/raptoreum/commit/ef85d5144) Comment updates - InstantSend (#2062) -- [`c0a109998`](https://github.com/raptoreum/raptoreum/commit/c0a109998) Fix instantsend in testnet and regtest (#2016) -- [`2f1661678`](https://github.com/raptoreum/raptoreum/commit/2f1661678) Locked txes should not expire until mined and have sufficient confirmations (#2011) -- [`846f1d217`](https://github.com/raptoreum/raptoreum/commit/846f1d217) Avoid processing tx lock request twice in the wallet it was sent from (#2007) -- [`c0c998da3`](https://github.com/raptoreum/raptoreum/commit/c0c998da3) Fix CInstantSend::GetTxLockRequest() (#2006) -- [`7d5223b5e`](https://github.com/raptoreum/raptoreum/commit/7d5223b5e) Network-specific thresholds for required confirmations (IS) (#1962) -- [`2c04504f1`](https://github.com/raptoreum/raptoreum/commit/2c04504f1) Refactor IS votes processing (#1951) - -### PrivateSend: -- [`0d5426343`](https://github.com/raptoreum/raptoreum/commit/0d5426343) Fix an edge case in PrepareDenominate (#2138) -- [`8e129877a`](https://github.com/raptoreum/raptoreum/commit/8e129877a) Partially revert 1922 (#2108) -- [`fcac40ab4`](https://github.com/raptoreum/raptoreum/commit/fcac40ab4) RPC: fix wallet lock check in `privatesend start` (#2102) -- [`dbbedc031`](https://github.com/raptoreum/raptoreum/commit/dbbedc031) Fix JoinExistingQueue bug (#2100) -- [`7ac4b972a`](https://github.com/raptoreum/raptoreum/commit/7ac4b972a) Require all participants to submit equal number of inputs (#2075) -- [`d1bf615f3`](https://github.com/raptoreum/raptoreum/commit/d1bf615f3) No POOL_STATE_ERROR or POOL_STATE_SUCCESS on smartnodes (#2009) -- [`d03adb7c3`](https://github.com/raptoreum/raptoreum/commit/d03adb7c3) Check if in smartnode mode first and only then do the job (or not) (#2008) -- [`ddff32b96`](https://github.com/raptoreum/raptoreum/commit/ddff32b96) Fix TransactionRecord::PrivateSendMakeCollaterals tx type (#1996) -- [`4f978a263`](https://github.com/raptoreum/raptoreum/commit/4f978a263) Drop Nx requirements for PS collaterals (#1995) -- [`a44f48743`](https://github.com/raptoreum/raptoreum/commit/a44f48743) Allow data outputs in PS collaterals (#1984) -- [`ef9a9f2d6`](https://github.com/raptoreum/raptoreum/commit/ef9a9f2d6) Fix unlocking error on "Start Mixing" (#1941) -- [`0bd8c8e43`](https://github.com/raptoreum/raptoreum/commit/0bd8c8e43) Refactor: vecTxIn -> vecOutPoints for CompactTallyItem (#1932) -- [`d7f55d508`](https://github.com/raptoreum/raptoreum/commit/d7f55d508) Switch nTimeLastSuccessfulStep from GetTimeMillis() to GetTime() (#1923) -- [`204b1fe99`](https://github.com/raptoreum/raptoreum/commit/204b1fe99) Drop unnecessary AcceptToMemoryPool in PS (and corresponding cs-main locks), just relay what we have (#1922) -- [`271c249e1`](https://github.com/raptoreum/raptoreum/commit/271c249e1) Skip next mn payments winners when selecting a MN to mix on (#1921) -- [`ca89c7b87`](https://github.com/raptoreum/raptoreum/commit/ca89c7b87) [Trivial] Update PrivateSend denominations in comments / typo fixes (#1910) -- [`b1817dd93`](https://github.com/raptoreum/raptoreum/commit/b1817dd93) Introduce CDarksendAccept class (for DSACCEPT messages) (#1875) -- [`d69ad9d61`](https://github.com/raptoreum/raptoreum/commit/d69ad9d61) Skip existing smartnode conections on mixing (#1833) -- [`1d620d1f9`](https://github.com/raptoreum/raptoreum/commit/1d620d1f9) Fix calls to AcceptToMemoryPool in PS submodules (#1823) - -### Network: -- [`fda74b4a8`](https://github.com/raptoreum/raptoreum/commit/fda74b4a8) Use correct protocol when serializing messages in reply to `getdata` (#2157) -- [`6bf389afb`](https://github.com/raptoreum/raptoreum/commit/6bf389afb) Don't drop mnb-s for outdated MNs (#2131) -- [`c60079b59`](https://github.com/raptoreum/raptoreum/commit/c60079b59) ThreadOpenSmartnodeConnections should process only one mn at a time (#2080) -- [`a648d6eff`](https://github.com/raptoreum/raptoreum/commit/a648d6eff) Drop delayed headers logic and fix duplicate initial headers sync by handling block inv correctly (#2032) -- [`99085c5b6`](https://github.com/raptoreum/raptoreum/commit/99085c5b6) swap devnet magic bytes around (#2028) -- [`a37dbd6d2`](https://github.com/raptoreum/raptoreum/commit/a37dbd6d2) Fix netfulfilledman usage (#2033) -- [`08033ffe4`](https://github.com/raptoreum/raptoreum/commit/08033ffe4) Reject Raptoreum-specific messages from obsolete peers (#1983) -- [`43671a39d`](https://github.com/raptoreum/raptoreum/commit/43671a39d) Deprecate nMnCount in mnget (#1942) -- [`451f7f071`](https://github.com/raptoreum/raptoreum/commit/451f7f071) Fix issues with mnp, mnw and dsq signatures via new spork (SPORK_6_NEW_SIGS) (#1936) -- [`048062641`](https://github.com/raptoreum/raptoreum/commit/048062641) Force smartnodes to have listen=1 and maxconnections to be at least DEFAULT_MAX_PEER_CONNECTIONS (#1935) -- [`aadec3735`](https://github.com/raptoreum/raptoreum/commit/aadec3735) Change format of gobject, store/transmit vchData instead of hex-encoded string of a string (#1934) -- [`ed712eb81`](https://github.com/raptoreum/raptoreum/commit/ed712eb81) Fix nDelayGetHeadersTime (int64_t max == never delay) (#1916) -- [`f35b5979a`](https://github.com/raptoreum/raptoreum/commit/f35b5979a) Refactor CGovernanceManager::Sync (split in two) (#1930) -- [`b5046d59c`](https://github.com/raptoreum/raptoreum/commit/b5046d59c) Dseg fixes (#1929) -- [`312088b56`](https://github.com/raptoreum/raptoreum/commit/312088b56) Fix connectivity check in CActiveSmartnode::ManageStateInitial (#1918) -- [`8f2c1998d`](https://github.com/raptoreum/raptoreum/commit/8f2c1998d) Rename vBlockHashesFromINV to vDelayedGetHeaders (#1909) -- [`4719ec477`](https://github.com/raptoreum/raptoreum/commit/4719ec477) Remove some locking in net.h/net.cpp (#1905) -- [`a6ba82ac9`](https://github.com/raptoreum/raptoreum/commit/a6ba82ac9) Use smartnode list to generate hardcoded seeds (#1892) -- [`1b1a440f4`](https://github.com/raptoreum/raptoreum/commit/1b1a440f4) Do not send raptoreum-specific requests to smartnodes before we are fully connected (#1882) -- [`1ca270ed8`](https://github.com/raptoreum/raptoreum/commit/1ca270ed8) No need for msgMakerInitProto for sporks because we loop by fully connected nodes only now (#1877) -- [`b84afb251`](https://github.com/raptoreum/raptoreum/commit/b84afb251) Allow to filter for fully connected nodes when calling CopyNodeVector (#1864) -- [`532b9fa3d`](https://github.com/raptoreum/raptoreum/commit/532b9fa3d) Use OpenNetworkConnection instead of calling ConnectNode directly in Raptoreum code (#1857) -- [`3aad9d908`](https://github.com/raptoreum/raptoreum/commit/3aad9d908) Fix logging in PushInventory (#1847) -- [`81fb931fb`](https://github.com/raptoreum/raptoreum/commit/81fb931fb) Don't delay GETHEADERS when no blocks have arrived yet in devnet (#1807) - -### Mining: -- [`ff93dd613`](https://github.com/raptoreum/raptoreum/commit/ff93dd613) Check devnet genesis block (#2057) -- [`1dbf5a0f6`](https://github.com/raptoreum/raptoreum/commit/1dbf5a0f6) Fix transaction/block versions for devnet genesis blocks (#2056) -- [`880cbf43b`](https://github.com/raptoreum/raptoreum/commit/880cbf43b) Backport fPowAllowMinDifficultyBlocks rule to DarkGravityWave (#2027) -- [`27dfed424`](https://github.com/raptoreum/raptoreum/commit/27dfed424) Bump default max block size from 750k to 2MB (#2023) -- [`79183f630`](https://github.com/raptoreum/raptoreum/commit/79183f630) Add tests for GetBlockSubsidy algorithm (#2022) - -### Wallet: -- [`0a71c693e`](https://github.com/raptoreum/raptoreum/commit/0a71c693e) Remove explicit wallet lock in SmartnodeList::StartAll() (#2106) -- [`0de79d70b`](https://github.com/raptoreum/raptoreum/commit/0de79d70b) Do not create oversized transactions (bad-txns-oversize) (#2103) -- [`0260821f8`](https://github.com/raptoreum/raptoreum/commit/0260821f8) fix SelectCoinsByDenominations (#2074) -- [`b7bd96e2b`](https://github.com/raptoreum/raptoreum/commit/b7bd96e2b) Clarify the warning displayed when encrypting HD wallet (#2002) -- [`4930bb9f5`](https://github.com/raptoreum/raptoreum/commit/4930bb9f5) Don't hold cs_storage in CKeyHolderStorage while calling functions which might lock cs_wallet (#2000) -- [`4d442376e`](https://github.com/raptoreum/raptoreum/commit/4d442376e) Limit the scope of cs_wallet lock in CPrivateSendClient::PrepareDenominate() (#1997) -- [`1d32d1c32`](https://github.com/raptoreum/raptoreum/commit/1d32d1c32) Add missing includes required for compilation with --disable-wallet flag (#1991) -- [`3f0c8723e`](https://github.com/raptoreum/raptoreum/commit/3f0c8723e) Slightly refactor AutoBackupWallet (#1927) -- [`9965d51bb`](https://github.com/raptoreum/raptoreum/commit/9965d51bb) Avoid reference leakage in CKeyHolderStorage::AddKey (#1840) -- [`c532be1c0`](https://github.com/raptoreum/raptoreum/commit/c532be1c0) Protect CKeyHolderStorage via mutex (#1834) -- [`144850657`](https://github.com/raptoreum/raptoreum/commit/144850657) Switch KeePassHttp integration to new AES lib, add tests and a note about KeePassHttp security (#1818) -- [`fa2549986`](https://github.com/raptoreum/raptoreum/commit/fa2549986) Swap iterations and fUseInstantSend parameters in ApproximateBestSubset (#1819) - -### RPC: -- [`700b7ceb7`](https://github.com/raptoreum/raptoreum/commit/700b7ceb7) RPC: dumphdinfo should throw an error when wallet isn't HD (#2134) -- [`5669fc880`](https://github.com/raptoreum/raptoreum/commit/5669fc880) Fix typos and rpc help text (#2120) -- [`806d7f049`](https://github.com/raptoreum/raptoreum/commit/806d7f049) Fix rpc tests broken by 2110 (#2118) -- [`8d8fdb433`](https://github.com/raptoreum/raptoreum/commit/8d8fdb433) sendrawtransaction no longer bypasses transaction policy limits by default (#2110) -- [`6ab1fd763`](https://github.com/raptoreum/raptoreum/commit/6ab1fd763) RPC: Add description for InstantSend-related fields of mempool entry (#2050) -- [`138441eb8`](https://github.com/raptoreum/raptoreum/commit/138441eb8) Add `forkpoint` to `getchaintips` (#2039) -- [`9b17f2b9c`](https://github.com/raptoreum/raptoreum/commit/9b17f2b9c) Convert `gobject count` output to json (by default) (#1994) -- [`4b128b1b9`](https://github.com/raptoreum/raptoreum/commit/4b128b1b9) Fix listaddressbalances (#1987) -- [`d115efacb`](https://github.com/raptoreum/raptoreum/commit/d115efacb) [RPC] Few additions to smartnodelist (#1971) -- [`9451782a0`](https://github.com/raptoreum/raptoreum/commit/9451782a0) RPC: Add `listaddressbalances` (#1972) -- [`bab543f3e`](https://github.com/raptoreum/raptoreum/commit/bab543f3e) Various RPC fixes (#1958) -- [`151152b98`](https://github.com/raptoreum/raptoreum/commit/151152b98) rpc - Update getaddednodeinfo help to remove dummy argument (#1947) -- [`3c44dde2e`](https://github.com/raptoreum/raptoreum/commit/3c44dde2e) Return JSON object for smartnode count (by default but still support old modes for now) (#1900) -- [`4bc4a7dac`](https://github.com/raptoreum/raptoreum/commit/4bc4a7dac) Fix `debug` rpc (#1897) -- [`063bc5542`](https://github.com/raptoreum/raptoreum/commit/063bc5542) Fix `smartnode list` (#1893) -- [`5a5f61872`](https://github.com/raptoreum/raptoreum/commit/5a5f61872) Shorten MN outpoint output from getvotes (#1871) -- [`86d33b276`](https://github.com/raptoreum/raptoreum/commit/86d33b276) Remove double registration of "privatesend" RPC (#1853) -- [`c2de362b9`](https://github.com/raptoreum/raptoreum/commit/c2de362b9) Actually honor fMiningRequiresPeers in getblocktemplate (#1844) -- [`1cffb8a7e`](https://github.com/raptoreum/raptoreum/commit/1cffb8a7e) Include p2pk into addressindex (#1839) - -### GUI: -- [`7ab5b4a28`](https://github.com/raptoreum/raptoreum/commit/7ab5b4a28) Update/optimize images (#2147) -- [`82805a6c6`](https://github.com/raptoreum/raptoreum/commit/82805a6c6) swap out old logo for T&C logo in Qt GUI (#2081) -- [`e9f63073d`](https://github.com/raptoreum/raptoreum/commit/e9f63073d) Warn when more than 50% of smartnodes are using newer version (#1963) -- [`653600352`](https://github.com/raptoreum/raptoreum/commit/653600352) Draw text on top of everything else in TrafficGraphWidget (#1944) -- [`118eeded6`](https://github.com/raptoreum/raptoreum/commit/118eeded6) [GUI] Create QR-code for Smartnode private key (#1970) -- [`9f2467af8`](https://github.com/raptoreum/raptoreum/commit/9f2467af8) Hide autocompleter on Enter/Return key (#1898) -- [`e30009c31`](https://github.com/raptoreum/raptoreum/commit/e30009c31) Fix qt and fontconfig depends #1884 - -### Docs: -- [`a80ef0423`](https://github.com/raptoreum/raptoreum/commit/a80ef0423) Update release notes (#2155) -- [`5e1149a65`](https://github.com/raptoreum/raptoreum/commit/5e1149a65) Update release notes (#2142) -- [`d46dc0f56`](https://github.com/raptoreum/raptoreum/commit/d46dc0f56) Update release notes (#2135) -- [`d076ad4ce`](https://github.com/raptoreum/raptoreum/commit/d076ad4ce) Update release notes and staging tree in README (#2116) -- [`ca2eae6e6`](https://github.com/raptoreum/raptoreum/commit/ca2eae6e6) 12.3 release notes draft (#2045) -- [`faeb4480a`](https://github.com/raptoreum/raptoreum/commit/faeb4480a) Update manpages with ./contrib/devtools/gen-manpages.sh (#2088) -- [`4148b8200`](https://github.com/raptoreum/raptoreum/commit/4148b8200) Release notes cleanup (#2034) -- [`d2c46a6a3`](https://github.com/raptoreum/raptoreum/commit/d2c46a6a3) Update protocol-documentation.md (#1964) -- [`4db8483d4`](https://github.com/raptoreum/raptoreum/commit/4db8483d4) [Docs] Doxyfile Project version update (#1938) -- [`6e022c57b`](https://github.com/raptoreum/raptoreum/commit/6e022c57b) Remove src/drafted folder (#1907) -- [`0318c76ba`](https://github.com/raptoreum/raptoreum/commit/0318c76ba) Update links and references to current communication channels (#1906) -- [`e23861c0e`](https://github.com/raptoreum/raptoreum/commit/e23861c0e) [Trivial] RPC Typos / markdown formatting (#1830) -- [`3dc62106b`](https://github.com/raptoreum/raptoreum/commit/3dc62106b) [Docs] Doxygen config update (#1796) - -### Other fixes and improvements: -- [`4dbde218b`](https://github.com/raptoreum/raptoreum/commit/4dbde218b) Fix p2pkh tests asserts (#2153) -- [`26c891f67`](https://github.com/raptoreum/raptoreum/commit/26c891f67) Fix block value/payee validation in lite mode (#2148) -- [`9af9d57b4`](https://github.com/raptoreum/raptoreum/commit/9af9d57b4) Release 0.12.3 (#2145) -- [`8e6364694`](https://github.com/raptoreum/raptoreum/commit/8e6364694) Bump SERIALIZATION_VERSION_STRINGs (#2136) -- [`641070521`](https://github.com/raptoreum/raptoreum/commit/641070521) Fix 2 small issues in sporks module (#2133) -- [`97b9b4fed`](https://github.com/raptoreum/raptoreum/commit/97b9b4fed) Bump nMinimumChainWork, defaultAssumeValid and checkpoints (#2130) -- [`1c9917e22`](https://github.com/raptoreum/raptoreum/commit/1c9917e22) Fix CVE-2018-12356 by hardening the regex (#2126) -- [`b7c326115`](https://github.com/raptoreum/raptoreum/commit/b7c326115) Do not create mnb until sync is finished (#2122) -- [`b98643c27`](https://github.com/raptoreum/raptoreum/commit/b98643c27) Split sentinel expiration in CSmartnode::Check() in two parts (timeout and version) (#2121) -- [`836e10471`](https://github.com/raptoreum/raptoreum/commit/836e10471) Bump proto to 70210 (#2109) -- [`23ba94b37`](https://github.com/raptoreum/raptoreum/commit/23ba94b37) Bump remaining min protocols (#2097) -- [`9299a84b1`](https://github.com/raptoreum/raptoreum/commit/9299a84b1) Bump few consts (#2096) -- [`7b43720f0`](https://github.com/raptoreum/raptoreum/commit/7b43720f0) Fix copying of final binaries into raptoreumcore-binaries (#2090) -- [`cc593615e`](https://github.com/raptoreum/raptoreum/commit/cc593615e) Bump copyright year to 2018 (#2087) -- [`2129ee4d8`](https://github.com/raptoreum/raptoreum/commit/2129ee4d8) Add docker support when doing Gitian builds (#2084) -- [`6a1456ef4`](https://github.com/raptoreum/raptoreum/commit/6a1456ef4) Update gitian key for codablock (#2085) -- [`ab96a6af6`](https://github.com/raptoreum/raptoreum/commit/ab96a6af6) Update gitian keys, script and doc (#2082) -- [`5d057cf66`](https://github.com/raptoreum/raptoreum/commit/5d057cf66) Add string_cast benchmark (#2073) -- [`cf71f5767`](https://github.com/raptoreum/raptoreum/commit/cf71f5767) Fix potential DoS vector for smartnode payments (#2071) -- [`febdc2116`](https://github.com/raptoreum/raptoreum/commit/febdc2116) Fix `nl` locale alias (#2061) -- [`1264a5577`](https://github.com/raptoreum/raptoreum/commit/1264a5577) Fix spork signature check for new nodes after SPORK_6_NEW_SIGS is switched to ON (#2060) -- [`41680f4d9`](https://github.com/raptoreum/raptoreum/commit/41680f4d9) small cleanup in a few places (#2058) -- [`741b94875`](https://github.com/raptoreum/raptoreum/commit/741b94875) Translations201804 (#2012) -- [`8e24b087b`](https://github.com/raptoreum/raptoreum/commit/8e24b087b) replace boost iterators in raptoreum-specific code (#2048) -- [`7719b7ec2`](https://github.com/raptoreum/raptoreum/commit/7719b7ec2) Update BIP147 deployment times, nMinimumChainWork and defaultAssumeValid (#2030) -- [`b07503f01`](https://github.com/raptoreum/raptoreum/commit/b07503f01) Some cleanup (mostly trivial) (#2038) -- [`f8e5c5d56`](https://github.com/raptoreum/raptoreum/commit/f8e5c5d56) Simplify spork defaults by using a map (#2037) -- [`6dd8304a5`](https://github.com/raptoreum/raptoreum/commit/6dd8304a5) Remove duplication of "class CBlockIndex;" (#2036) -- [`4ea790377`](https://github.com/raptoreum/raptoreum/commit/4ea790377) Raptoreumify lib names (#2035) -- [`53093c65b`](https://github.com/raptoreum/raptoreum/commit/53093c65b) Run tests in mocked time (#2031) -- [`f7b9aae27`](https://github.com/raptoreum/raptoreum/commit/f7b9aae27) Correctly update pindexBestHeader and pindexBestInvalid in InvalidateBlock (#2029) -- [`8b09e779b`](https://github.com/raptoreum/raptoreum/commit/8b09e779b) Bump testnet checkpoint and nMinimumChainWork/defaultAssumeValid params (#2026) -- [`eecc69223`](https://github.com/raptoreum/raptoreum/commit/eecc69223) Fix a very ancient bug from mid 2015 (#2021) -- [`72a225b9b`](https://github.com/raptoreum/raptoreum/commit/72a225b9b) Few fixes for lite mode (#2014) -- [`c7e9ea9fb`](https://github.com/raptoreum/raptoreum/commit/c7e9ea9fb) Avoid repeating the full scan in CSmartnodeMan::UpdateLastPaid() on non-MNs (#1985) -- [`f28a58e0a`](https://github.com/raptoreum/raptoreum/commit/f28a58e0a) Refactor and fix restart (#1999) -- [`7248700b3`](https://github.com/raptoreum/raptoreum/commit/7248700b3) Add missing cs_main locks (#1998) -- [`9e98c856f`](https://github.com/raptoreum/raptoreum/commit/9e98c856f) A pack of small fixes (#1992) -- [`19ea1a791`](https://github.com/raptoreum/raptoreum/commit/19ea1a791) Use operator[] instead of emplace in CSmartnodePayments::AddPaymentVote (#1980) -- [`ca3655f49`](https://github.com/raptoreum/raptoreum/commit/ca3655f49) Fix some (potential dead)locks (#1977) -- [`2a7e6861d`](https://github.com/raptoreum/raptoreum/commit/2a7e6861d) Include "clientversion.h" in rpc/smartnode.cpp (#1979) -- [`ef1a86c3e`](https://github.com/raptoreum/raptoreum/commit/ef1a86c3e) Add dummy CMakeLists.txt file to make development with CLion easier (#1978) -- [`a9d8e2c5d`](https://github.com/raptoreum/raptoreum/commit/a9d8e2c5d) [Init] Avoid segfault when called with -enableinstantsend=0 (#1976) -- [`3200eae9b`](https://github.com/raptoreum/raptoreum/commit/3200eae9b) Don't use short version of 'tinyformat/fmt' namespace in util.h (#1975) -- [`97a07cbc4`](https://github.com/raptoreum/raptoreum/commit/97a07cbc4) Refactor `CSmartnodePayment*` (#1974) -- [`4ffa7bac0`](https://github.com/raptoreum/raptoreum/commit/4ffa7bac0) Introduce DIP0001Height (#1973) -- [`611879aa6`](https://github.com/raptoreum/raptoreum/commit/611879aa6) Use spork addresses instead of raw keys and allow changing them on startup (#1969) -- [`9ef38c6d7`](https://github.com/raptoreum/raptoreum/commit/9ef38c6d7) Switch CNetFulfilledRequestManager and CSmartnodeMan maps/funcs to CService (#1967) -- [`929c1584a`](https://github.com/raptoreum/raptoreum/commit/929c1584a) Rename CheckPreviousBlockVotes to CheckBlockVotes and adjust its log output a bit (#1965) -- [`bf0854e58`](https://github.com/raptoreum/raptoreum/commit/bf0854e58) Swap `expired` and `sentinel_expired` states in order (#1961) -- [`9876207ce`](https://github.com/raptoreum/raptoreum/commit/9876207ce) Multiple devnet fixes (#1960) -- [`e37b6c7da`](https://github.com/raptoreum/raptoreum/commit/e37b6c7da) Fix BIP147 deployment threshold parameter (#1955) -- [`106276a3e`](https://github.com/raptoreum/raptoreum/commit/106276a3e) Adjust/fix log output (#1954) -- [`0abd1894e`](https://github.com/raptoreum/raptoreum/commit/0abd1894e) Call CheckMnbAndUpdateSmartnodeList when starting MN (#1945) -- [`e23f61822`](https://github.com/raptoreum/raptoreum/commit/e23f61822) Make TrafficGraphDataTests more general (#1943) -- [`5b1c4d8a1`](https://github.com/raptoreum/raptoreum/commit/5b1c4d8a1) Few (mostly trivial) cleanups and fixes (#1940) -- [`99273f63a`](https://github.com/raptoreum/raptoreum/commit/99273f63a) Use SPORK_6_NEW_SIGS to switch from signing string messages to hashes (#1937) -- [`c65613350`](https://github.com/raptoreum/raptoreum/commit/c65613350) Switch smartnode id in Raptoreum data structures from CTxIn to COutPoint (#1933) -- [`2ea6f7d82`](https://github.com/raptoreum/raptoreum/commit/2ea6f7d82) Use `override` keyword for overriden class member functions (#1644) -- [`d5ef77ba9`](https://github.com/raptoreum/raptoreum/commit/d5ef77ba9) Refactor: use constant refs and `Ret` suffix (#1928) -- [`2e04864b2`](https://github.com/raptoreum/raptoreum/commit/2e04864b2) Replace boost::lexical_cast with atoi (#1926) -- [`0f4d963ba`](https://github.com/raptoreum/raptoreum/commit/0f4d963ba) Add DSHA256 and X11 benchmarks, refactor names of other algo benchmarks to group them together (#1925) -- [`4528c735f`](https://github.com/raptoreum/raptoreum/commit/4528c735f) Replace some instantsend/privatesend magic numbers with constants (#1924) -- [`120893c63`](https://github.com/raptoreum/raptoreum/commit/120893c63) Update timeLastMempoolReq when responding to MEMPOOL request (#1904) -- [`bb20b4e7b`](https://github.com/raptoreum/raptoreum/commit/bb20b4e7b) Few cleanups after backporting (#1903) -- [`a7fa07a30`](https://github.com/raptoreum/raptoreum/commit/a7fa07a30) Drop BOOST_FOREACH and use references in loops (const ref where applicable, Raptoreum code only) (#1899) -- [`e0b6988a4`](https://github.com/raptoreum/raptoreum/commit/e0b6988a4) Various fixes and refactoring for Cache*Map classes (#1896) -- [`99b2789a7`](https://github.com/raptoreum/raptoreum/commit/99b2789a7) Fix DeserializeAndCheckBlockTest benchmark and store hashDevnetGenesisBlock in `consensus` (#1888) -- [`88646bd0d`](https://github.com/raptoreum/raptoreum/commit/88646bd0d) Rename `fMasterNode` to `fSmartnodeMode` to clarify its meaning and to avoid confusion with `CNode::fSmartnode` (#1874) -- [`f6d98422c`](https://github.com/raptoreum/raptoreum/commit/f6d98422c) Silence ratecheck_test (#1873) -- [`9cee4193b`](https://github.com/raptoreum/raptoreum/commit/9cee4193b) Separate .h generation from .json/.raw for different modules (#1870) -- [`83957f2d3`](https://github.com/raptoreum/raptoreum/commit/83957f2d3) Fix alertTests.raw.h (again) (#1869) -- [`c13afaad8`](https://github.com/raptoreum/raptoreum/commit/c13afaad8) Fix alertTests.raw.h generation (#1868) -- [`a46bf120b`](https://github.com/raptoreum/raptoreum/commit/a46bf120b) Don't directly call "wine test_raptoreum.exe" and let "make check" handle it (#1841) -- [`e805f790e`](https://github.com/raptoreum/raptoreum/commit/e805f790e) Automatically build and push docker image to docker.io/raptoreum/raptoreumd-develop (#1809) -- [`d9058aa04`](https://github.com/raptoreum/raptoreum/commit/d9058aa04) Increase travis timeout for "wine src/test/test_raptoreum.exe" call (#1820) -- [`10786fe8e`](https://github.com/raptoreum/raptoreum/commit/10786fe8e) Use travis_wait for "wine test_raptoreum.exe" call to fix timeouts (#1812) -- [`4bce3bf8b`](https://github.com/raptoreum/raptoreum/commit/4bce3bf8b) Fix crash on exit when -createwalletbackups=0 (#1810) -- [`cd9c6994c`](https://github.com/raptoreum/raptoreum/commit/cd9c6994c) Implement named devnets (#1791) -- [`ebbd26a05`](https://github.com/raptoreum/raptoreum/commit/ebbd26a05) Drop IsInputAssociatedWithPubkey and optimize CheckOutpoint (#1783) - -### Backports and related fixes: -- See commit list [here](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3-backports.md) - - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alexander Block -- Chris Adam -- Codarren Velvindron -- crowning- -- gladcow -- InhumanPerfection -- Kamil Woźniak -- Nathan Marley -- Oleg Girko -- PaulieD -- Semen Martynov -- Spencer Lievens -- thephez -- UdjinM6 - -As well as Bitcoin Core Developers and everyone who submitted issues, -reviewed pull requests or helped translating on -[Transifex](https://www.transifex.com/projects/p/raptoreum/). - - -Older releases -============== - -Raptoreum was previously known as Darkcoin. - -Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin -which was first released on Jan/18/2014. - -Darkcoin tree 0.9.x was the open source implementation of smartnodes based on -the 0.8.x tree and was first released on Mar/13/2014. - -Darkcoin tree 0.10.x used to be the closed source implementation of Darksend -which was released open source on Sep/25/2014. - -Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, -Darkcoin was rebranded to Raptoreum. - -Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. - -Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. - -These release are considered obsolete. Old release notes can be found here: - -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Jun/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 - diff --git a/doc/release-notes/raptoreum/release-notes-0.13.0.md b/doc/release-notes/raptoreum/release-notes-0.13.0.md deleted file mode 100644 index e560e70298..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.13.0.md +++ /dev/null @@ -1,749 +0,0 @@ -Raptoreum Core version 0.13.0.0 -========================== - -Release is now available from: - - - -This is a new major version release, bringing new features, various bugfixes 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/Raptoreum-Qt (on Mac) or -raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation you will -have to reindex (start with -reindex-chainstate or -reindex) to make sure -your wallet has all the new data synced. - -Downgrade warning ------------------ - -### Downgrade to a version < 0.13.0.0 - -Downgrading to a version smaller than 0.13 is only supported as long as DIP2/DIP3 -has not been activated. Activation will happen when enough miners signal compatibility -through a BIP9 (bit 3) deployment. - -Notable changes -=============== - -DIP0002 - Special Transactions ------------------------------- -Currently, new features and consensus mechanisms have to be implemented on top of the restrictions -imposed by the simple nature of transactions. Since classical transactions can only carry inputs -and outputs, they are most useful for financial transactions (i.e. transfers of quantities of Raptoreum -between addresses on the distributed ledger). These inputs and outputs carry scripts and signatures -which are used to authorize and validate the transaction. - -To implement new on-chain features and consensus mechanisms which do not fit into this concept of -financial transactions, it is often necessary to misuse the inputs/outputs and their corresponding -scripts to add additional data and meaning to a transaction. For example, new opcodes would have -to be introduced to mark a transaction as something special and add a payload. In other cases, -OP_RETURN has been misused to store data on-chain. - -The introduction of special transactions will require the whole Raptoreum ecosystem to perform a one-time -mandatory update of all the software and libraries involved. Software and libraries will have to be -changed so that they can differentiate between classical transactions and special transactions. -Deserialization of a classical transaction remains unchanged. Deserialization of a special transaction -requires the software/library to at least implement skipping and ignoring the extra_payload field. -Validation and processing of the inputs and outputs of a special transaction must remain identical to -classical transactions. - -Read more: https://github.com/raptoreum/dips/blob/master/dip-0002.md - -DIP0003 - Deterministic Smartnode Lists ----------------------------------------- -This DIP provides on-chain consensus for smartnode lists that in turn allow for deterministic quorum -derivation and service scoring of smartnode rewards. - -In the previous system, each node maintained its own individual smartnode list. Smartnodes gained -entry to that smartnode list after the owner created a 1000 Raptoreum UTXO and the smartnode broadcast -a "smartnode broadcast/announcement" P2P message. This in turn set the smartnode to a PRE_ENABLED -state in the list maintained by each node. Smartnodes then regularly broadcasted ping messages to -keep the smartnode in ENABLED state. - -The previous system was maintained with consensus mechanisms that predated Satoshi Nakamoto’s solution -to the Byzantine Generals Problem. This meant that each node needed to maintain their own individual -smartnode list with P2P messages and not a blockchain based solution. Due to the nature of the P2P -system, there was no guarantee that nodes would come to the same conclusion on what the smartnode -list ought to look like. Discrepancies might, for example, occur due to a different order of message -reception or if messages had not been received at all. This posed some risks in regard to consensus -and limited the possible uses of quorums by the system. - -Additionally, the previous system required a complicated and failure prone "smartnode sync" after -the initial startup of the node. After the blockchain was synced, the node would request the current -smartnode list, the reward payment votes, and then verify the received list. This process tended to -take an unnecessarily long amount of time and sometimes resulted in failure. - -In the new system, the smartnode list is derived entirely from information found on-chain. New -smartnodes are added by new special transactions called Provider Registration Transactions -(abbreviated as ProRegTx). They are only removed by spending the collateral. A ProRegTx is a special -transaction which includes either a 1000-Raptoreum collateral payment or a reference to it, along with -other payload information (DIP0002). - -The new system is going to be activated via combination of a BIP9-like deployment (bit 3) and new spork -(`SPORK_15_DETERMINISTIC_MNS_ENABLED`). - -Read more: https://github.com/raptoreum/dips/blob/master/dip-0003.md -Upgrade instructions: https://docs.raptoreum.org/DIP3-smartnode-upgrade - -DIP0004 - Simplified Verification of Deterministic Smartnode Lists -------------------------------------------------------------------- -A verifiable and correct smartnode list is foundational to many Raptoreum features, including verification -of an InstantSend transaction, mixing in PrivateSend and many features of Evolution. The deterministic -smartnode lists introduced by DIP0003 enable full derivation and verification of a smartnode list via -on-chain data. This, however, requires the full chain to be available to construct or verify this list. -A SPV client does not have the full chain and thus would have to rely on a list provided by one or more -nodes in the network. This provided list must be verifiable by the SPV client without needing the full -chain. This DIP proposes additions to the block’s coinbase transaction and new P2P messages to get and -update a smartnode list with additional proof data. - -Read more: https://github.com/raptoreum/dips/blob/master/dip-0004.md - -Mining ------- -Please note that smartnode payments in `getblocktemplate` rpc are now returned as an array and not as -a single object anymore. Make sure to apply corresponding changes to your pool software. - -Also, deterministic smartnodes can now set their payout address to a P2SH address. The most common use -case for P2SH is multisig but script can be pretty much anything. If your pool software doesn't recognize -P2SH addresses, the simplest way to fix it is to use `script` field which shows scriptPubKey for each -entry of smartnode payments array in `getblocktemplate`. - -And finally, after DIP0003 activation your pool software must be able to produce Coinbase Special -Transaction https://github.com/raptoreum/dips/blob/master/dip-0004.md#coinbase-special-transaction. -Use `coinbase_payload` from `getblocktemplate` to get extra payload needed to construct this transaction. - -PrivateSend ------------ -With further refactoring of PrivateSend code it became possible to implement mixing in few parallel -mixing sessions at once from one single wallet. You can set number of mixing sessions via -`privatesendsessions` cmd-line option or raptoreum.conf. You can pick any number of sessions between 1 and 10, -default is 4 which should be good enough for most users. For this feature to work you should also make -sure that `privatesendmultisession` is set to `1` via cmd-line or `Enable PrivateSend multi-session` is -enabled in GUI. - -Introducing parallel mixing sessions should speed mixing up which makes it reasonable to add a new -mixing denom (0.00100001 RAPTOREUM) now while keeping all the old ones too. It also makes sense to allow more -mixing rounds now, so the new default number of rounds is 4 and the maximum number of rounds is 16 now. - -You can also adjust rounds and amount via `setprivatesendrounds` and `setprivatesendamount` RPC commands -which override corresponding cmd-line params (`privatesendrounds` and `privatesendamount` respectively). - -NOTE: Introducing the new denom and a couple of other changes made it incompatible with mixing on -smartnodes running on pre-0.13 software. Please keep using 0.12.3 local wallet to mix your coins until -there is some significant number of smartnodes running on version 0.13 to make sure you have enough -smartnodes to choose from when the wallet picks one to mix funds on. - -InstantSend ------------ -With further improvements of networking code it's now possible to handle more load, so we are changing -InstantSend to be always-on for so called "simple txes" - transactions with 4 or less inputs. Such -transactions will be automatically locked even if they only pay minimal fee. According to stats, this -means that up to 90% of currently observed transactions will became automatically locked via InstantSend -with no additional cost to end users or any additional effort from wallet developers or other service -providers. - -This feature is going to be activated via combination of a BIP9-like deployment (we are reusing bit 3) -and new spork (`SPORK_16_INSTANTSEND_AUTOLOCKS`). - -Historically, InstantSend transactions were shown in GUI and RPC with more confirmations than regular ones, -which caused quite a bit of confusion. This will no longer be the case, instead we are going to show real -blockchain confirmations only and a separate indicator to show if transaction was locked via InstantSend -or not. For GUI it's color highlight and a new column, for RPC commands - `instantlock` field and `addlocked` -param. - -One of the issues with InstantSend adoption by SPV wallets (besides lack of Deterministic Smartnode List) -was inability to filter all InstantSend messages the same way transactions are filtered. This should be -fixed now and SPV wallets should only get lock votes for transactions they are interested in. - -Another popular request was to preserve information about InstantSend locks between wallet restarts, which -is now implemented. This data is stored in a new cache file `instantsend.dat`. You can safely remove it, -if you don't need information about recent transaction locks for some reason (NOTE: make sure it's not one -of your wallets!). - -We also added new ZMQ notifications for double-spend attempts which try to override transactions locked -via InstantSend - `zmqpubrawinstantsenddoublespend` and `zmqpubhashinstantsenddoublespend`. - -Sporks ------- -There are a couple of new sporks introduced in this version `SPORK_15_DETERMINISTIC_MNS_ENABLED` (block -based) and `SPORK_16_INSTANTSEND_AUTOLOCKS` (timestamp based). There is aslo `SPORK_17_QUORUM_DKG_ENABLED` -(timestamp based) which is going to be used on testnet only for now. - -Spork data is stored in a new cache file (`sporks.dat`) now. - -Governance ----------- -Introduction of Deterministic Smartnodes requires replacing of the old smartnode private key which was used -both for operating a MN and for voting on proposals with a set of separate keys, preferably fresh new ones. -This means that votes casted for proposals by Smartnode Owners via the old system will no longer be valid -after DIP0003 activation and must be re-casted using the new voting key. - -Also, you can now get notifications about governance objects or votes via new ZMQ notifications: -`zmqpubhashgovernancevote`, `zmqpubhashgovernanceobject`, `zmqpubrawgovernancevote` and -`zmqpubhashgovernanceobject`. - -GUI changes ------------ -Smartnodes tab has a new section dedicated to DIP0003 registered smartnodes now. After DIP0003 activation -this will be the only section shown here, the two old sections for non-deterministic smartnodes will no -longer be available. - -There are changes in the way InstantSend transactions are displayed, see `InstantSend` section above. - -Some other (mostly minor) issues were also fixed, see `GUI` part of `0.13.0.0 Change log` section below for -detailed list of fixes. - -RPC changes ------------ -There are a few changes in existing RPC interfaces in this release: -- `gobject prepare` allows to send proposal transaction as an InstantSend one and also accepts an UTXO reference to spend; -- `smartnode status` and `smartnode list` show some DIP0003 related info now; -- `previousbits` and `coinbase_payload` fields were added in `getblocktemplate`; -- `getblocktemplate` now returns an array for smartnode payments instead of a single object (miners and mining pools have to upgrade their software to support multiple smartnode payees); -- smartnode and superblock payments in `getblocktemplate` show payee scriptPubKey in `script` field in addition to payee address in `payee`; -- `getblockchaininfo` shows BIP9 deployment progress; -- `help command subCommand` should give detailed help for subcommands e.g. `help protx list`; -- `compressed` option in `smartnode genkey`; -- `dumpwallet` shows info about dumped wallet and warns user about security issues; -- `instantlock` field added in output of `getrawmempool`, `getmempoolancestors`, `getmempooldescendants`, `getmempoolentry`, -`getrawtransaction`, `decoderawtransaction`, `gettransaction`, `listtransactions`, `listsinceblock`; -- `addlocked` param added to `getreceivedbyaddress`, `getreceivedbyaccount`, `getbalance`, `sendfrom`, `sendmany`, -`listreceivedbyaddress`, `listreceivedbyaccount`, `listaccounts`. - -There are also new RPC commands: -- `protx` (`list`, `info`, `diff`, `register`, `register_fund`, `register_prepare`, -`register_submit`, `update_service`, `update_registrar`, `revoke`); -- `bls generate`; -- `setprivatesendrounds`; -- `setprivatesendamount`. - -See `help command` in rpc for more info. - -Command-line options --------------------- - -New cmd-line options: -- `smartnodeblsprivkey`; -- `minsporkkeys`; -- `privatesendsessions`; -- `zmqpubrawinstantsenddoublespend`; -- `zmqpubhashinstantsenddoublespend`; -- `zmqpubhashgovernancevote`; -- `zmqpubhashgovernanceobject`; -- `zmqpubrawgovernancevote`; -- `zmqpubhashgovernanceobject`. - -Some of them are Devnet only: -- `budgetparams`; -- `minimumdifficultyblocks`; -- `highsubsidyblocks`; -- `highsubsidyfactor`. - -Few cmd-line options are no longer supported: -- `instantsenddepth`; -- `mempoolreplacement`. - -See `Help -> Command-line options` in Qt wallet or `raptoreumd --help` for more info. - -Lots of refactoring and bug fixes ---------------------------------- - -A lot of refactoring, code cleanups and other small fixes were done in this release. - -0.13.0.0 Change log -=================== - -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.12.3.4...raptoreum:v0.13.0.0). - -### Network -- [`03a6865d9`](https://github.com/raptoreum/raptoreum/commit/03a6865d9) Enforce correct port on mainnet for DIP3 MNs (#2576) -- [`3f26ed78c`](https://github.com/raptoreum/raptoreum/commit/3f26ed78c) Backport network checks missing in CActiveDeterministicSmartnodeManager::Init() (#2572) -- [`7c7500864`](https://github.com/raptoreum/raptoreum/commit/7c7500864) Also stop asking other peers for a TX when ProcessTxLockRequest fails (#2529) -- [`19a6f718d`](https://github.com/raptoreum/raptoreum/commit/19a6f718d) Don't respond with getdata for legacy inv types when spork15 is active (#2528) -- [`22dcec71a`](https://github.com/raptoreum/raptoreum/commit/22dcec71a) Punish nodes which keep requesting and then rejecting blocks (#2518) -- [`a18ca49a2`](https://github.com/raptoreum/raptoreum/commit/a18ca49a2) Disconnect peers with version < 70212 after DIP3 activation via BIP9 (#2497) -- [`a57e9dea7`](https://github.com/raptoreum/raptoreum/commit/a57e9dea7) Fix filtering of the lock votes for SPV nodes. (#2468) -- [`c6cf4d9a4`](https://github.com/raptoreum/raptoreum/commit/c6cf4d9a4) Relay txes through MN network faster than through regular nodes (#2397) -- [`e66c4e184`](https://github.com/raptoreum/raptoreum/commit/e66c4e184) Don't revert to INV based block announcements when the previous block is the devnet genesis block (#2388) -- [`b5142ee2c`](https://github.com/raptoreum/raptoreum/commit/b5142ee2c) Implement RemoveAskFor to indicate that we're not interested in an item anymore (#2384) -- [`53e12b7b4`](https://github.com/raptoreum/raptoreum/commit/53e12b7b4) Don't bail out from ProcessSmartnodeConnections in regtest (#2368) -- [`31759a44d`](https://github.com/raptoreum/raptoreum/commit/31759a44d) Fix tx inv throughput (#2300) -- [`9d90b4fa4`](https://github.com/raptoreum/raptoreum/commit/9d90b4fa4) Honor filterInventoryKnown for non-tx/non-block items (#2292) -- [`6764dafec`](https://github.com/raptoreum/raptoreum/commit/6764dafec) Skip initial smartnode list sync if spork 15 is active -- [`fced9a4b8`](https://github.com/raptoreum/raptoreum/commit/fced9a4b8) Ban peers that send us MNLISTDIFF messages -- [`d3ac86206`](https://github.com/raptoreum/raptoreum/commit/d3ac86206) Implement GETMNLISTDIFF and MNLISTDIFF P2P messages -- [`40eee1775`](https://github.com/raptoreum/raptoreum/commit/40eee1775) Fix sync in regtest (again) (#2241) -- [`c4ee2c89e`](https://github.com/raptoreum/raptoreum/commit/c4ee2c89e) Fix mnsync in regtest (#2202) - -### Mining -- [`f96563462`](https://github.com/raptoreum/raptoreum/commit/f96563462) Fix check for nTemporaryTestnetForkDIP3Height (#2508) -- [`80656038f`](https://github.com/raptoreum/raptoreum/commit/80656038f) Bump nTemporaryTestnetForkHeight to 274000 (#2498) -- [`1c25356ff`](https://github.com/raptoreum/raptoreum/commit/1c25356ff) Allow to use low difficulty and higher block rewards for devnet (#2369) -- [`3cc4ac137`](https://github.com/raptoreum/raptoreum/commit/3cc4ac137) Fix crash bug with duplicate inputs within a transaction (#2302) -- [`e6b699bc2`](https://github.com/raptoreum/raptoreum/commit/e6b699bc2) Enforce MN and superblock payments in same block -- [`c7f75afdd`](https://github.com/raptoreum/raptoreum/commit/c7f75afdd) Fix nulldummy tests by creating correct DIP4 coinbase transactions -- [`bcc071957`](https://github.com/raptoreum/raptoreum/commit/bcc071957) Calculate and enforce DIP4 smartnodes merkle root in CbTx -- [`0a086898f`](https://github.com/raptoreum/raptoreum/commit/0a086898f) Implement and enforce CbTx with correct block height and deprecate BIP34 - -### RPC -- [`a22f1bffe`](https://github.com/raptoreum/raptoreum/commit/a22f1bffe) Remove support for "0" as an alternative to "" when the default is requested (#2622) (#2624) -- [`18e1edabf`](https://github.com/raptoreum/raptoreum/commit/18e1edabf) Backport 2618 to v0.13.0.x (#2619) -- [`0dce846d5`](https://github.com/raptoreum/raptoreum/commit/0dce846d5) Add an option to use specific address as a source of funds in protx rpc commands (otherwise use payoutAddress/operatorPayoutAddress) (#2581) -- [`e71ea29e6`](https://github.com/raptoreum/raptoreum/commit/e71ea29e6) Add ownerAddr and votingAddr to CDeterministicMNState::ToJson (#2571) -- [`999a51907`](https://github.com/raptoreum/raptoreum/commit/999a51907) Fix optional revocation reason parameter for "protx revoke" and a few help strings (#2568) -- [`c08926146`](https://github.com/raptoreum/raptoreum/commit/c08926146) Unify "protx list" options (#2559) -- [`e9f7142ed`](https://github.com/raptoreum/raptoreum/commit/e9f7142ed) Bump PROTOCOL_VERSION and DMN_PROTO_VERSION to 70213 (#2557) -- [`818f0f464`](https://github.com/raptoreum/raptoreum/commit/818f0f464) Allow consuming specific UTXO in gobject prepare command (#2482) -- [`1270b7122`](https://github.com/raptoreum/raptoreum/commit/1270b7122) Use a verbosity instead of two verbose parameters (#2506) -- [`f6f6d075d`](https://github.com/raptoreum/raptoreum/commit/f6f6d075d) Still support "protx list" and "protx diff" when wallet is disabled at compile time (#2511) -- [`5a3f64310`](https://github.com/raptoreum/raptoreum/commit/5a3f64310) Deserialize CFinalCommitmentTxPayload instead of CFinalCommitment in TxToJSON (#2510) -- [`5da4c9728`](https://github.com/raptoreum/raptoreum/commit/5da4c9728) Use "registered" as default for "protx list" (#2513) -- [`fc6d651c4`](https://github.com/raptoreum/raptoreum/commit/fc6d651c4) Fix crashes in "protx" RPCs when wallet is disabled (#2509) -- [`ba49a4a16`](https://github.com/raptoreum/raptoreum/commit/ba49a4a16) Trivial: protx fund_register RPC help corrections (#2502) -- [`45421b1a3`](https://github.com/raptoreum/raptoreum/commit/45421b1a3) Add IS parameter for gobject prepare (#2452) -- [`2ba1ff521`](https://github.com/raptoreum/raptoreum/commit/2ba1ff521) Use ParseFixedPoint instead of ParseDoubleV in "protx register" commands (#2458) -- [`e049f9c1e`](https://github.com/raptoreum/raptoreum/commit/e049f9c1e) fix protx register rpc help (#2461) -- [`eb2103760`](https://github.com/raptoreum/raptoreum/commit/eb2103760) trivail, clarifies help text for protx register (#2462) -- [`76e93c7d7`](https://github.com/raptoreum/raptoreum/commit/76e93c7d7) Corrections to incorrect syntax in RPC help (#2466) -- [`3c1f44c3a`](https://github.com/raptoreum/raptoreum/commit/3c1f44c3a) Make sure protx_update_registrar adds enough funds for the fees -- [`d130f25ac`](https://github.com/raptoreum/raptoreum/commit/d130f25ac) Fix check for number of params to protx_update_service (#2443) -- [`adf9c87e2`](https://github.com/raptoreum/raptoreum/commit/adf9c87e2) Fix protx/bls rpc help (#2438) -- [`579c83e88`](https://github.com/raptoreum/raptoreum/commit/579c83e88) Add coinbase_payload to getblocktemplate help (#2437) -- [`3685c85e7`](https://github.com/raptoreum/raptoreum/commit/3685c85e7) Show BIP9 progress in getblockchaininfo (#2435) -- [`da3e3db4d`](https://github.com/raptoreum/raptoreum/commit/da3e3db4d) Fix sub-command help for smartnode, gobject and protx rpcs (#2425) -- [`adad3fcfe`](https://github.com/raptoreum/raptoreum/commit/adad3fcfe) RPC: protx help corrections (#2422) -- [`1d56dffda`](https://github.com/raptoreum/raptoreum/commit/1d56dffda) Unify help display logic for various "complex" rpc commands (#2415) -- [`02442673d`](https://github.com/raptoreum/raptoreum/commit/02442673d) Trivial: Correct protx diff RPC help (#2410) -- [`1f56600c4`](https://github.com/raptoreum/raptoreum/commit/1f56600c4) Trivial: Protx operator reward clarification (#2407) -- [`7011fec1b`](https://github.com/raptoreum/raptoreum/commit/7011fec1b) RPC: Add help details for the bls RPC (#2403) -- [`50f133ad0`](https://github.com/raptoreum/raptoreum/commit/50f133ad0) Add merkle tree and coinbase transaction to the `protx diff` rpc command (#2392) -- [`25b6dae9e`](https://github.com/raptoreum/raptoreum/commit/25b6dae9e) Code style and RPC help string cleanups for DIP2/DIP3 (#2379) -- [`0ad2906c5`](https://github.com/raptoreum/raptoreum/commit/0ad2906c5) Clarify addlocked description in getbalance RPC (#2364) -- [`547b81dd0`](https://github.com/raptoreum/raptoreum/commit/547b81dd0) log `gobject prepare` params (#2317) -- [`d932d2c4e`](https://github.com/raptoreum/raptoreum/commit/d932d2c4e) Add instantlock field to getrawtransaction rpc output (#2314) -- [`c3d6b0651`](https://github.com/raptoreum/raptoreum/commit/c3d6b0651) Remove redundant check for unknown commands in smartnode RPC (#2279) -- [`44706dc88`](https://github.com/raptoreum/raptoreum/commit/44706dc88) Implement projection of MN reward winners in "smartnode winners" -- [`2d8f1244c`](https://github.com/raptoreum/raptoreum/commit/2d8f1244c) Implement 'smartnode info ' RPC -- [`e2a9dbbce`](https://github.com/raptoreum/raptoreum/commit/e2a9dbbce) Better "smartnode status" for deterministic smartnodes -- [`50ac6fb3a`](https://github.com/raptoreum/raptoreum/commit/50ac6fb3a) Throw exception when trying to invoke start-xxx RPC in deterministic mode -- [`58aa81364`](https://github.com/raptoreum/raptoreum/commit/58aa81364) Implement "protx revoke" RPC -- [`185416b97`](https://github.com/raptoreum/raptoreum/commit/185416b97) Implement "protx update_registrar" RPC -- [`32951f795`](https://github.com/raptoreum/raptoreum/commit/32951f795) Implement "protx update_service" RPC -- [`5e3abeca2`](https://github.com/raptoreum/raptoreum/commit/5e3abeca2) Implement "protx list" RPC -- [`c77242346`](https://github.com/raptoreum/raptoreum/commit/c77242346) Implement "protx register" RPC -- [`1c2565804`](https://github.com/raptoreum/raptoreum/commit/1c2565804) Refactor `smartnode` and `gobject` RPCs to support `help command subCommand` syntax (#2240) -- [`fb4d301a2`](https://github.com/raptoreum/raptoreum/commit/fb4d301a2) Add extraPayloadSize/extraPayload fields to RPC help -- [`2997d6d26`](https://github.com/raptoreum/raptoreum/commit/2997d6d26) add compressed option to `smartnode genkey` (#2232) -- [`98ed90cbb`](https://github.com/raptoreum/raptoreum/commit/98ed90cbb) adds rpc calls for `setprivatesendrounds` and `setprivatesendamount` (#2230) -- [`50eb98d90`](https://github.com/raptoreum/raptoreum/commit/50eb98d90) Prepare for DIP3 operator reward payments and switch to array in getblocktemplate (#2216) -- [`a959f60aa`](https://github.com/raptoreum/raptoreum/commit/a959f60aa) De-duplicate "gobject vote-alias" and "gobject "vote-many" code (#2217) -- [`566fa5ec3`](https://github.com/raptoreum/raptoreum/commit/566fa5ec3) Add support for "help command subCommand" (#2210) -- [`4cd969e3d`](https://github.com/raptoreum/raptoreum/commit/4cd969e3d) Add `previousbits` field to `getblocktemplate` output (#2201) -- [`ac30196bc`](https://github.com/raptoreum/raptoreum/commit/ac30196bc) Show some info about the wallet dumped via dumpwallet (#2191) - -### LLMQ and Deterministic Smartnodes -- [`a3b01dfbe`](https://github.com/raptoreum/raptoreum/commit/a3b01dfbe) Gracefully shutdown on evodb inconsistency instead of crashing (#2611) (#2620) -- [`3861c6a82`](https://github.com/raptoreum/raptoreum/commit/3861c6a82) Add BIP9 deployment for DIP3 on mainnet (#2585) -- [`587911b36`](https://github.com/raptoreum/raptoreum/commit/587911b36) Fix IsBlockPayeeValid (#2577) -- [`3c30a6aff`](https://github.com/raptoreum/raptoreum/commit/3c30a6aff) Add missing smartnodeblsprivkey help text (#2569) -- [`378dadd0f`](https://github.com/raptoreum/raptoreum/commit/378dadd0f) Ensure EvoDB consistency for quorum commitments by storing the best block hash (#2537) -- [`2127a426b`](https://github.com/raptoreum/raptoreum/commit/2127a426b) Further refactoring of CQuorumBlockProcessor (#2545) -- [`1522656d6`](https://github.com/raptoreum/raptoreum/commit/1522656d6) Correctly handle spent collaterals for MNs that were registered in the same block (#2553) -- [`583035337`](https://github.com/raptoreum/raptoreum/commit/583035337) Track operator key changes in mempool and handle conflicts (#2540) -- [`88f7bf0d8`](https://github.com/raptoreum/raptoreum/commit/88f7bf0d8) Don't delete/add values to the unique property map when it's null (#2538) -- [`15414dac2`](https://github.com/raptoreum/raptoreum/commit/15414dac2) Refactor CQuorumBlockProcessor and CDeterministicMNManager (#2536) -- [`d9b28fe1a`](https://github.com/raptoreum/raptoreum/commit/d9b28fe1a) Introduce dummy (ping-like) contributions for the dummy DKG (#2542) -- [`df0d0cce7`](https://github.com/raptoreum/raptoreum/commit/df0d0cce7) Watch for changes in operator key and disable local MN (#2541) -- [`511dc3714`](https://github.com/raptoreum/raptoreum/commit/511dc3714) Remove ProTxs from mempool that refer to a ProRegTx for which the collateral was spent (#2539) -- [`225c2135e`](https://github.com/raptoreum/raptoreum/commit/225c2135e) Allow skipping of MN payments with zero duffs (#2534) -- [`60867978d`](https://github.com/raptoreum/raptoreum/commit/60867978d) Avoid printing DIP3/DIP4 related logs twice (#2525) -- [`7037f7c99`](https://github.com/raptoreum/raptoreum/commit/7037f7c99) Bail out from GetBlockTxOuts in case nBlockHeight is above tip+1 (#2523) -- [`022491420`](https://github.com/raptoreum/raptoreum/commit/022491420) Print the state object when ProcessSpecialTxsInBlock fails in ConnectBlock (#2516) -- [`812834dc5`](https://github.com/raptoreum/raptoreum/commit/812834dc5) Put height into mined commitments and use it instead of the special handling of quorumVvecHash (#2501) -- [`a4f5ba38b`](https://github.com/raptoreum/raptoreum/commit/a4f5ba38b) Implement CDummyDKG and CDummyCommitment until we have the real DKG merged (#2492) -- [`66612cc4b`](https://github.com/raptoreum/raptoreum/commit/66612cc4b) Add 0 entry to vTxSigOps when adding quorum commitments (#2489) -- [`f5beeafa1`](https://github.com/raptoreum/raptoreum/commit/f5beeafa1) Also restart MNs which didn't have the collateral moved, but do it later (#2483) -- [`0123517b4`](https://github.com/raptoreum/raptoreum/commit/0123517b4) Implement PoSe based on information from LLMQ commitments (#2478) -- [`22b5952c5`](https://github.com/raptoreum/raptoreum/commit/22b5952c5) Implement and enforce DIP6 commitments (#2477) -- [`d40a5ce31`](https://github.com/raptoreum/raptoreum/commit/d40a5ce31) Properly initialize confirmedHash in CSimplifiedMNListEntry (#2479) -- [`5ffc31bce`](https://github.com/raptoreum/raptoreum/commit/5ffc31bce) Forbid version=0 in special TXs (#2473) -- [`85157f9a9`](https://github.com/raptoreum/raptoreum/commit/85157f9a9) Few trivial fixes for DIP2/DIP3 (#2474) -- [`b5947f299`](https://github.com/raptoreum/raptoreum/commit/b5947f299) Implement BuildSimplifiedDiff in CDeterministicMNList -- [`6edad3745`](https://github.com/raptoreum/raptoreum/commit/6edad3745) Use ForEachMN and GetMN in BuildDiff instead of directly accessing mnMap -- [`83aac461b`](https://github.com/raptoreum/raptoreum/commit/83aac461b) Allow P2SH/multisig addresses for operator rewards -- [`f5864254c`](https://github.com/raptoreum/raptoreum/commit/f5864254c) Do not use keyIDCollateralAddress anymore when spork15 is active -- [`5ccf556f3`](https://github.com/raptoreum/raptoreum/commit/5ccf556f3) GetSmartnodeInfo with payee argument should do nothing when DIP3 is active -- [`927e8bd79`](https://github.com/raptoreum/raptoreum/commit/927e8bd79) Also forbid reusing collateral key for owner/voting keys -- [`826e7d063`](https://github.com/raptoreum/raptoreum/commit/826e7d063) Move internal collateral check to the else branch of the external collateral check -- [`dc404e755`](https://github.com/raptoreum/raptoreum/commit/dc404e755) Allow P2SH for payout scripts -- [`9adf8ad73`](https://github.com/raptoreum/raptoreum/commit/9adf8ad73) Remove restriction that forced use of same addresses for payout and collateral -- [`7c1f11089`](https://github.com/raptoreum/raptoreum/commit/7c1f11089) Revert #2441 and retry fixing (#2444) -- [`6761fa49f`](https://github.com/raptoreum/raptoreum/commit/6761fa49f) More checks for tx type -- [`b84369663`](https://github.com/raptoreum/raptoreum/commit/b84369663) Be more specific about tx version in conditions -- [`c975a986b`](https://github.com/raptoreum/raptoreum/commit/c975a986b) no cs_main in specialtxes -- [`8bd5b231b`](https://github.com/raptoreum/raptoreum/commit/8bd5b231b) Log mempool payload errors instead of crashing via assert -- [`658b7afd1`](https://github.com/raptoreum/raptoreum/commit/658b7afd1) Make error messages re payload a bit more specific -- [`153afb906`](https://github.com/raptoreum/raptoreum/commit/153afb906) Restart MNs in DIP3 tests even if collateral has not moved (#2441) -- [`4ad2f647c`](https://github.com/raptoreum/raptoreum/commit/4ad2f647c) Use proTxHash instead of outpoint when calculating smartnode scores (#2440) -- [`c27e62935`](https://github.com/raptoreum/raptoreum/commit/c27e62935) Allow reusing of external collaterals in DIP3 (#2427) -- [`9da9d575a`](https://github.com/raptoreum/raptoreum/commit/9da9d575a) Allow collaterals for non-DIP3 MNs which were created after DIP3/BIP9 activation (#2412) -- [`30a2b283a`](https://github.com/raptoreum/raptoreum/commit/30a2b283a) Sign ProRegTx collaterals with a string message instead of payload hash, split `protx register` into `prepare`/`submit` (#2395) -- [`e34701295`](https://github.com/raptoreum/raptoreum/commit/e34701295) Fix crash when deterministic MN list is empty and keep paying superblocks in this case (#2387) -- [`28a6007a4`](https://github.com/raptoreum/raptoreum/commit/28a6007a4) Prepare DIP3 for testnet and reuse DIP3 deployment for autoix deployment (#2389) -- [`e3df91082`](https://github.com/raptoreum/raptoreum/commit/e3df91082) Allow referencing other TX outputs for ProRegTx collateral (#2366) -- [`fdfb07742`](https://github.com/raptoreum/raptoreum/commit/fdfb07742) Update ProRegTx serialization order (#2378) -- [`eaa856eb7`](https://github.com/raptoreum/raptoreum/commit/eaa856eb7) Remove nProtocolVersion and add mode/type fields to DIP3 (#2358) -- [`c9d274518`](https://github.com/raptoreum/raptoreum/commit/c9d274518) Use BLS keys for the DIP3 operator key (#2352) -- [`eaef90202`](https://github.com/raptoreum/raptoreum/commit/eaef90202) Don't use boost range adaptors in CDeterministicMNList (#2327) -- [`6adc236d0`](https://github.com/raptoreum/raptoreum/commit/6adc236d0) Only use dataDir in CEvoDB when not in-memory (#2291) -- [`8a878bfcf`](https://github.com/raptoreum/raptoreum/commit/8a878bfcf) Call InitializeCurrentBlockTip and activeSmartnodeManager->Init after importing has finished (#2286) -- [`6b3d65028`](https://github.com/raptoreum/raptoreum/commit/6b3d65028) After DIP3 activation, allow voting with voting keys stored in your wallet (#2281) -- [`d8247dfff`](https://github.com/raptoreum/raptoreum/commit/d8247dfff) Use refactored payment logic when spork15 is active -- [`60002b7dd`](https://github.com/raptoreum/raptoreum/commit/60002b7dd) Payout and enforce operator reward payments -- [`2c481f0f8`](https://github.com/raptoreum/raptoreum/commit/2c481f0f8) Implement deterministic version of CSmartnodePayments::IsScheduled -- [`19fbf8ab7`](https://github.com/raptoreum/raptoreum/commit/19fbf8ab7) Move cs_main lock from CSmartnode::UpdateLastPaid to CSmartnodeMan -- [`dc7292afa`](https://github.com/raptoreum/raptoreum/commit/dc7292afa) Implement new MN payments logic and add compatibility code -- [`d4530eb7d`](https://github.com/raptoreum/raptoreum/commit/d4530eb7d) Put all smartnodes in SMARTNODE_ENABLED state when spork15 is active -- [`31b4f8354`](https://github.com/raptoreum/raptoreum/commit/31b4f8354) Forbid starting of legacy smartnodes with non matching ProTx collateral values -- [`5050a9205`](https://github.com/raptoreum/raptoreum/commit/5050a9205) Add compatibility code for FindRandomNotInVec and GetSmartnodeScores -- [`cc73422f8`](https://github.com/raptoreum/raptoreum/commit/cc73422f8) Add methods to add/remove (non-)deterministic MNs -- [`7d14566bc`](https://github.com/raptoreum/raptoreum/commit/7d14566bc) Add compatibility code to CSmartnodeMan so that old code is still compatible -- [`27e8b48a6`](https://github.com/raptoreum/raptoreum/commit/27e8b48a6) Stop executing legacy MN list code when spork 15 is activated -- [`d90b13996`](https://github.com/raptoreum/raptoreum/commit/d90b13996) Implement CActiveDeterministicSmartnodeManager -- [`a5e65aa37`](https://github.com/raptoreum/raptoreum/commit/a5e65aa37) Erase mnListCache entry on UndoBlock (#2254) -- [`88e7888de`](https://github.com/raptoreum/raptoreum/commit/88e7888de) Try using cache in GetListForBlock before reading from disk (#2253) -- [`9653af2f3`](https://github.com/raptoreum/raptoreum/commit/9653af2f3) Classes, validation and update logic for CProUpRevTX -- [`1c68d1107`](https://github.com/raptoreum/raptoreum/commit/1c68d1107) Classes, validation and update logic for CProUpRegTX -- [`8aca3b040`](https://github.com/raptoreum/raptoreum/commit/8aca3b040) Also check duplicate addresses for CProUpServTX in CTxMemPool -- [`923fd6739`](https://github.com/raptoreum/raptoreum/commit/923fd6739) Implement CProUpServTx logic in CDeterministicMNManager -- [`6ec0d7aea`](https://github.com/raptoreum/raptoreum/commit/6ec0d7aea) Classes and basic validation of ProUpServTx -- [`255403e92`](https://github.com/raptoreum/raptoreum/commit/255403e92) Include proTx data in json formatted transactions -- [`25545fc1e`](https://github.com/raptoreum/raptoreum/commit/25545fc1e) Split keyIDSmartnode into keyIDOwner/keyIDOperator/keyIDVoting (#2248) -- [`2c172873a`](https://github.com/raptoreum/raptoreum/commit/2c172873a) Don't allow non-ProTx smartnode collaterals after DIP3 activation -- [`9e8a86714`](https://github.com/raptoreum/raptoreum/commit/9e8a86714) Implementation of deterministic MNs list -- [`76fd30894`](https://github.com/raptoreum/raptoreum/commit/76fd30894) Automatically lock ProTx collaterals when TX is added/loaded to wallet -- [`cdd723ede`](https://github.com/raptoreum/raptoreum/commit/cdd723ede) Conflict handling for ProRegTx in mempool -- [`958b84ace`](https://github.com/raptoreum/raptoreum/commit/958b84ace) Implementation of ProRegTx with basic validation (no processing) -- [`c9a72e888`](https://github.com/raptoreum/raptoreum/commit/c9a72e888) Introduce CEvoDB for all evo related things, e.g. DIP3 -- [`4531f6b89`](https://github.com/raptoreum/raptoreum/commit/4531f6b89) Implement CDBTransaction and CScopedDBTransaction -- [`e225cebcd`](https://github.com/raptoreum/raptoreum/commit/e225cebcd) Use previous block for CheckSpecialTx (#2243) -- [`b92bd8997`](https://github.com/raptoreum/raptoreum/commit/b92bd8997) Fix mninfo search by payee (#2233) -- [`8af7f6223`](https://github.com/raptoreum/raptoreum/commit/8af7f6223) Account for extraPayload when calculating fees in FundTransaction -- [`b606bde9a`](https://github.com/raptoreum/raptoreum/commit/b606bde9a) Support version 3 transaction serialization in mininode.py -- [`61bbe54ab`](https://github.com/raptoreum/raptoreum/commit/61bbe54ab) Add Get-/SetTxPayload helpers -- [`cebf71bbc`](https://github.com/raptoreum/raptoreum/commit/cebf71bbc) Stubs for special TX validation and processing -- [`d6c5a72e2`](https://github.com/raptoreum/raptoreum/commit/d6c5a72e2) Basic validation of version 3 TXs in CheckTransaction -- [`a3c4ee3fd`](https://github.com/raptoreum/raptoreum/commit/a3c4ee3fd) DIP2 changes to CTransaction and CMutableTransaction -- [`d20100ecd`](https://github.com/raptoreum/raptoreum/commit/d20100ecd) DIP0003 deployment -- [`4d3518fe0`](https://github.com/raptoreum/raptoreum/commit/4d3518fe0) Refactor MN payee logic in preparation for DIP3 (#2215) -- [`d946f21bd`](https://github.com/raptoreum/raptoreum/commit/d946f21bd) Smartnode related refactorings in preparation of DIP3 (#2212) - -### PrivateSend -- [`07309f0ec`](https://github.com/raptoreum/raptoreum/commit/07309f0ec) Allow up to SMARTNODE_MAX_MIXING_TXES (5) DSTXes per MN in a row (#2552) -- [`ed53fce47`](https://github.com/raptoreum/raptoreum/commit/ed53fce47) Revert "Apply similar logic to vecSmartnodesUsed" (#2503) -- [`69bffed72`](https://github.com/raptoreum/raptoreum/commit/69bffed72) Do not sort resulting vector in SelectCoinsGroupedByAddresses (#2493) -- [`bb11f1a63`](https://github.com/raptoreum/raptoreum/commit/bb11f1a63) Fix recent changes in DSA conditions (#2494) -- [`6480ad1d5`](https://github.com/raptoreum/raptoreum/commit/6480ad1d5) Should check dsq queue regardless of the mixing state (#2491) -- [`67483cd34`](https://github.com/raptoreum/raptoreum/commit/67483cd34) Fix dsq/dsa conditions (#2487) -- [`9d4df466b`](https://github.com/raptoreum/raptoreum/commit/9d4df466b) Fix CreateDenominated failure for addresses with huge amount of inputs (#2486) -- [`2b400f74b`](https://github.com/raptoreum/raptoreum/commit/2b400f74b) Base dsq/dstx thresholold on total number of up to date smartnodes (#2465) -- [`262454791`](https://github.com/raptoreum/raptoreum/commit/262454791) Add 5th denom, drop deprecated logic and bump min PS version (#2318) -- [`23f169c44`](https://github.com/raptoreum/raptoreum/commit/23f169c44) Drop custom PS logic for guessing fees etc. from SelectCoins (#2371) -- [`f7b0b5759`](https://github.com/raptoreum/raptoreum/commit/f7b0b5759) Pick rounds with the most inputs available to mix first (#2278) -- [`727e940c0`](https://github.com/raptoreum/raptoreum/commit/727e940c0) Fix recently introduced PS bugs (#2330) -- [`85a958a36`](https://github.com/raptoreum/raptoreum/commit/85a958a36) Drop dummy copy constructors in CPrivateSend*Session (#2305) -- [`c6a0c5541`](https://github.com/raptoreum/raptoreum/commit/c6a0c5541) A couple of small fixes for mixing collaterals (#2294) -- [`d192d642f`](https://github.com/raptoreum/raptoreum/commit/d192d642f) Move heavy coin selection out of the loop in SubmitDenominate (#2274) -- [`28e0476f4`](https://github.com/raptoreum/raptoreum/commit/28e0476f4) Squash two logic branches in SubmitDenominate into one (#2270) -- [`9b6eb4765`](https://github.com/raptoreum/raptoreum/commit/9b6eb4765) Include inputs with max rounds in SelectCoinsDark/SelectCoinsByDenominations (#2277) -- [`55d7bb900`](https://github.com/raptoreum/raptoreum/commit/55d7bb900) Add an option to disable popups for PS mixing txes (#2272) -- [`38ccfef3b`](https://github.com/raptoreum/raptoreum/commit/38ccfef3b) Identify PS collateral payments in transaction list a bit more accurate (#2271) -- [`ad31dbbd7`](https://github.com/raptoreum/raptoreum/commit/ad31dbbd7) Add more variance to coin selection in PS mixing (#2261) -- [`8c9cb2909`](https://github.com/raptoreum/raptoreum/commit/8c9cb2909) Revert 2075 (#2259) -- [`b164bcc7a`](https://github.com/raptoreum/raptoreum/commit/b164bcc7a) Split PS into Manager and Session and allow running multiple mixing sessions in parallel (client side) (#2203) -- [`d4d11476a`](https://github.com/raptoreum/raptoreum/commit/d4d11476a) Fix typo and grammar in PS error message (#2199) -- [`a83ab5501`](https://github.com/raptoreum/raptoreum/commit/a83ab5501) Fix wallet lock check in DoAutomaticDenominating (#2196) -- [`30fa8bc33`](https://github.com/raptoreum/raptoreum/commit/30fa8bc33) Make sure pwalletMain is not null whenever it's used in PS client (#2190) -- [`3c89983db`](https://github.com/raptoreum/raptoreum/commit/3c89983db) Remove DarksendConfig (#2132) -- [`43091a3ef`](https://github.com/raptoreum/raptoreum/commit/43091a3ef) PrivateSend Enhancement: Up default round count to 4 and allow user to mix up to 16 rounds (#2128) - -### InstantSend -- [`35550a3f9`](https://github.com/raptoreum/raptoreum/commit/35550a3f9) Add quorumModifierHash to instant send lock vote (#2505) -- [`fa8f4a10c`](https://github.com/raptoreum/raptoreum/commit/fa8f4a10c) Include smartnodeProTxHash in CTxLockVote (#2484) -- [`624e50949`](https://github.com/raptoreum/raptoreum/commit/624e50949) Remove few leftovers of `-instantsenddepth` -- [`733cd9512`](https://github.com/raptoreum/raptoreum/commit/733cd9512) Remove global fDIP0003ActiveAtTip and fix wrong use of VersionBitsState in auto IX (#2380) -- [`5454bea37`](https://github.com/raptoreum/raptoreum/commit/5454bea37) Automatic InstantSend locks for "simple" transactions (#2140) -- [`1e74bcace`](https://github.com/raptoreum/raptoreum/commit/1e74bcace) [ZMQ] Notify when an IS double spend is attempted (#2262) -- [`6bcd868de`](https://github.com/raptoreum/raptoreum/commit/6bcd868de) Fix lockedByInstantSend initialization (#2197) -- [`0a6f47323`](https://github.com/raptoreum/raptoreum/commit/0a6f47323) Remove dummy confirmations in RPC API and GUI for InstantSend transactions (#2040) -- [`ace980834`](https://github.com/raptoreum/raptoreum/commit/ace980834) Extend Bloom Filter support to InstantSend related messages (#2184) -- [`2c0d4c9d7`](https://github.com/raptoreum/raptoreum/commit/2c0d4c9d7) Save/load InstantSend cache (#2051) - -### Sporks -- [`33f78d70e`](https://github.com/raptoreum/raptoreum/commit/33f78d70e) Do not accept sporks with nTimeSigned way too far into the future (#2578) -- [`6c4b3ed8d`](https://github.com/raptoreum/raptoreum/commit/6c4b3ed8d) Load sporks before checking blockchain (#2573) -- [`d94092b60`](https://github.com/raptoreum/raptoreum/commit/d94092b60) Fix spork propagation while in IBD and fix spork integration tests (#2533) -- [`43e757bee`](https://github.com/raptoreum/raptoreum/commit/43e757bee) Amend SERIALIZATION_VERSION_STRING string for spork cache (#2339) -- [`f7ab6c469`](https://github.com/raptoreum/raptoreum/commit/f7ab6c469) M-of-N-like sporks (#2288) -- [`c2958733e`](https://github.com/raptoreum/raptoreum/commit/c2958733e) CSporkManager::Clear() should not alter sporkPubKeyID and sporkPrivKey (#2313) -- [`8c0dca282`](https://github.com/raptoreum/raptoreum/commit/8c0dca282) Add versioning to spork cache (#2312) -- [`5461e92bf`](https://github.com/raptoreum/raptoreum/commit/5461e92bf) Add spork to control deterministic MN lists activation -- [`73c2ddde7`](https://github.com/raptoreum/raptoreum/commit/73c2ddde7) extract sporkmanager from sporkmessage (#2234) -- [`1767e3457`](https://github.com/raptoreum/raptoreum/commit/1767e3457) Save/load spork cache (#2206) -- [`075ca0903`](https://github.com/raptoreum/raptoreum/commit/075ca0903) Protect CSporkManager with critical section (#2213) - -### Governance -- [`222e5b4f7`](https://github.com/raptoreum/raptoreum/commit/222e5b4f7) Remove proposal/funding votes from MNs that changed the voting key (#2570) -- [`5185dd5b7`](https://github.com/raptoreum/raptoreum/commit/5185dd5b7) Use correct time field when removing pre-DIP3 votes (#2535) -- [`d2ca9edde`](https://github.com/raptoreum/raptoreum/commit/d2ca9edde) Fix multiple issues with governance voting after spork15 activation (#2526) -- [`08dc17871`](https://github.com/raptoreum/raptoreum/commit/08dc17871) Drop pre-DIP3 votes from current votes per MN per object (#2524) -- [`0c1b683a0`](https://github.com/raptoreum/raptoreum/commit/0c1b683a0) Clear votes which were created before spork15 activation and use operator key for non-funding votes (#2512) -- [`da4b5fb16`](https://github.com/raptoreum/raptoreum/commit/da4b5fb16) Remove an unused function from governance object collateral code (#2480) -- [`8deb8e90f`](https://github.com/raptoreum/raptoreum/commit/8deb8e90f) Modernize Gov Methods (#2326) -- [`0471fa884`](https://github.com/raptoreum/raptoreum/commit/0471fa884) Drop MAX_GOVERNANCE_OBJECT_DATA_SIZE (and maxgovobjdatasize in rpc) (#2298) -- [`737353c84`](https://github.com/raptoreum/raptoreum/commit/737353c84) Fix IsBlockValueValid/IsOldBudgetBlockValueValid (#2276) -- [`a5643f899`](https://github.com/raptoreum/raptoreum/commit/a5643f899) Switch RequestGovernanceObjectVotes from pointers to hashes (#2189) -- [`0e689341d`](https://github.com/raptoreum/raptoreum/commit/0e689341d) Implement Governance ZMQ notification messages (#2160) - -### GUI -- [`858bb52ad`](https://github.com/raptoreum/raptoreum/commit/858bb52ad) Show correct operator payee address in DIP3 MN list GUI (#2563) -- [`190863722`](https://github.com/raptoreum/raptoreum/commit/190863722) Remove legacy MN list tabs on spork15 activation (#2567) -- [`3e97b0cbd`](https://github.com/raptoreum/raptoreum/commit/3e97b0cbd) Make sure that we can get inputType and fUseInstantSend regardless of the way recipients are sorted (#2550) -- [`1a7c29b97`](https://github.com/raptoreum/raptoreum/commit/1a7c29b97) Revert "Sort recipients in SendCoins dialog via BIP69 rule (#2546)" (#2549) -- [`ca0aec2a3`](https://github.com/raptoreum/raptoreum/commit/ca0aec2a3) Match recipients with txouts by scriptPubKey in reassignAmounts() (#2548) -- [`09730e1c5`](https://github.com/raptoreum/raptoreum/commit/09730e1c5) Bail out from update methods in SmartnodeList when shutdown is requested (#2551) -- [`18cd5965c`](https://github.com/raptoreum/raptoreum/commit/18cd5965c) Sort recipients in SendCoins dialog via BIP69 rule (#2546) -- [`9100c69eb`](https://github.com/raptoreum/raptoreum/commit/9100c69eb) Allow filtering by proTxHash on DIP3 MN tab (#2532) -- [`216119921`](https://github.com/raptoreum/raptoreum/commit/216119921) Fix wrong total MN count in UI and "smartnode count" RPC (#2527) -- [`8f8878a94`](https://github.com/raptoreum/raptoreum/commit/8f8878a94) Add dummy/hidden column to carry the proTxHash per MN list entry... (#2530) -- [`a4ea816b2`](https://github.com/raptoreum/raptoreum/commit/a4ea816b2) use aqua gui theme (#2472) -- [`aa495405b`](https://github.com/raptoreum/raptoreum/commit/aa495405b) [GUI] Realign tx filter widgets (#2485) -- [`f4ef388de`](https://github.com/raptoreum/raptoreum/commit/f4ef388de) Update PS help text for the new denom (#2471) -- [`7cabbadef`](https://github.com/raptoreum/raptoreum/commit/7cabbadef) Implement context menu and extra info on double-click for DIP3 smartnode list (#2459) -- [`9232a455c`](https://github.com/raptoreum/raptoreum/commit/9232a455c) Do not hold cs_main while emitting messages in WalletModel::prepareTransaction (#2463) -- [`cf2b547b7`](https://github.com/raptoreum/raptoreum/commit/cf2b547b7) Implement tab for DIP3 MN list (#2454) -- [`46462d682`](https://github.com/raptoreum/raptoreum/commit/46462d682) Add a column for IS lock status on Transactions tab (#2433) -- [`5ecd91b05`](https://github.com/raptoreum/raptoreum/commit/5ecd91b05) Fix ps collateral/denom creation tx category confusion (#2430) -- [`4a78b161f`](https://github.com/raptoreum/raptoreum/commit/4a78b161f) PrivateSend spending txes should have "outgoing" icon on overview screen (#2396) -- [`d7e210341`](https://github.com/raptoreum/raptoreum/commit/d7e210341) Fixes inaccurate round count in CoinControlDialog (#2137) - -### Cleanups/Tests/Docs/Other -- [`b5670c475`](https://github.com/raptoreum/raptoreum/commit/b5670c475) Set CLIENT_VERSION_IS_RELEASE to true (#2591) -- [`a05eeb21e`](https://github.com/raptoreum/raptoreum/commit/a05eeb21e) Update immer to c89819df92191d6969a6a22c88c72943b8e25016 (#2626) -- [`10b3736bd`](https://github.com/raptoreum/raptoreum/commit/10b3736bd) [0.13.0.x] Translations201901 (#2592) -- [`34d2a6038`](https://github.com/raptoreum/raptoreum/commit/34d2a6038) Release notes 0.13.0.0 draft (#2583) -- [`c950a8f51`](https://github.com/raptoreum/raptoreum/commit/c950a8f51) Merge v0.12.3.4 commits into develop (#2582) -- [`6dfceaba5`](https://github.com/raptoreum/raptoreum/commit/6dfceaba5) Force FlushStateToDisk on ConnectTip/DisconnectTip while not in IBD (#2560) -- [`552d9089e`](https://github.com/raptoreum/raptoreum/commit/552d9089e) Update testnet seeds to point to MNs that are on the new chain (#2558) -- [`63b58b1e9`](https://github.com/raptoreum/raptoreum/commit/63b58b1e9) Reintroduce BLSInit to correctly set secure alloctor callbacks (#2543) -- [`cbd030352`](https://github.com/raptoreum/raptoreum/commit/cbd030352) Serialize the block header in CBlockHeader::GetHash() (#2531) -- [`3a6bd8d23`](https://github.com/raptoreum/raptoreum/commit/3a6bd8d23) Call ProcessTick every second, handle tick cooldown inside (#2522) -- [`973a7f6dd`](https://github.com/raptoreum/raptoreum/commit/973a7f6dd) Fix GUI warnings in debug.log (#2521) -- [`c248c48e4`](https://github.com/raptoreum/raptoreum/commit/c248c48e4) Try to fix a few sporadic instant send failures in DIP3 tests (#2500) -- [`7a709b81d`](https://github.com/raptoreum/raptoreum/commit/7a709b81d) Perform less instant send tests in DIP3 tests (#2499) -- [`245c3220e`](https://github.com/raptoreum/raptoreum/commit/245c3220e) Sync blocks before creating TXs (#2496) -- [`65528e9e7`](https://github.com/raptoreum/raptoreum/commit/65528e9e7) Bump smartnodeman cache version (#2467) -- [`6c190d1bb`](https://github.com/raptoreum/raptoreum/commit/6c190d1bb) Fix make deploy error on macos (#2475) -- [`df7d12b41`](https://github.com/raptoreum/raptoreum/commit/df7d12b41) Add univalue test for real numbers (#2460) -- [`614ff70b4`](https://github.com/raptoreum/raptoreum/commit/614ff70b4) Let ccache compress the cache by itself instead of compressing ccache.tar (#2456) -- [`40fa1bb49`](https://github.com/raptoreum/raptoreum/commit/40fa1bb49) Add platform dependent include_directories in CMakeLists.txt (#2455) -- [`12aba2592`](https://github.com/raptoreum/raptoreum/commit/12aba2592) Updating translations for de, es, fi, nl, pt, sk, zh_CN, zh_TW (#2451) -- [`52bf5a6b0`](https://github.com/raptoreum/raptoreum/commit/52bf5a6b0) Install libxkbcommon0 in gitian-linux.yml -- [`fefe34250`](https://github.com/raptoreum/raptoreum/commit/fefe34250) Update manpages -- [`c60687fe6`](https://github.com/raptoreum/raptoreum/commit/c60687fe6) Sleep longer between attempts in sync_blocks -- [`88498ba13`](https://github.com/raptoreum/raptoreum/commit/88498ba13) Apply suggestions from code review -- [`91af72b18`](https://github.com/raptoreum/raptoreum/commit/91af72b18) Allow to specify how log to sleep between attempts in wait_until -- [`f65e74682`](https://github.com/raptoreum/raptoreum/commit/f65e74682) Pass "-parallel=3" to reduce load on Travis nodes while testing -- [`3c99d9e35`](https://github.com/raptoreum/raptoreum/commit/3c99d9e35) Fix test_fail_create_protx in DIP3 tests -- [`4de70f0ac`](https://github.com/raptoreum/raptoreum/commit/4de70f0ac) Test P2SH/multisig payee addresses in DIP3 tests -- [`5fc4072ca`](https://github.com/raptoreum/raptoreum/commit/5fc4072ca) Parallel ASN resolve and allow passing of input file names to makeseeds.py (#2432) -- [`76a38f6ce`](https://github.com/raptoreum/raptoreum/commit/76a38f6ce) Update defaultAssumeValid, nMinimumChainWork and checkpoints (#2428) -- [`0e9ad207a`](https://github.com/raptoreum/raptoreum/commit/0e9ad207a) Update hardcoded seeds (#2429) -- [`42ee369b1`](https://github.com/raptoreum/raptoreum/commit/42ee369b1) [Formatting] smartnodelist.* clang+manual format (#2426) -- [`e961c7134`](https://github.com/raptoreum/raptoreum/commit/e961c7134) Translations 201811 (#2249) -- [`f0df5bffa`](https://github.com/raptoreum/raptoreum/commit/f0df5bffa) Clang evo folder and activesmartnode.* (#2418) -- [`98bdf35f9`](https://github.com/raptoreum/raptoreum/commit/98bdf35f9) bump PS copyright (#2417) -- [`e9bb822c1`](https://github.com/raptoreum/raptoreum/commit/e9bb822c1) Clang format PrivateSend files (#2373) -- [`bea590958`](https://github.com/raptoreum/raptoreum/commit/bea590958) Fix auto-IS tests (#2414) -- [`f03629d6d`](https://github.com/raptoreum/raptoreum/commit/f03629d6d) Explicitly specify which branch of Wine to install (#2411) -- [`5e829a3b1`](https://github.com/raptoreum/raptoreum/commit/5e829a3b1) Update Chia bls-signature to latest version (#2409) -- [`51addf9a0`](https://github.com/raptoreum/raptoreum/commit/51addf9a0) Fix p2p-instantsend.py test (#2408) -- [`7e8f07bb9`](https://github.com/raptoreum/raptoreum/commit/7e8f07bb9) A couple of fixes for shutdown sequence (#2406) -- [`9c455caea`](https://github.com/raptoreum/raptoreum/commit/9c455caea) A couple of fixes for init steps (#2405) -- [`6560ac64b`](https://github.com/raptoreum/raptoreum/commit/6560ac64b) Properly escape $ in Jenkinsfile.gitian (#2404) -- [`70eb710b1`](https://github.com/raptoreum/raptoreum/commit/70eb710b1) Undefine DOUBLE after include Chia BLS headers (#2400) -- [`052af81b4`](https://github.com/raptoreum/raptoreum/commit/052af81b4) Ensure correct order of destruction for BLS secure allocator (#2401) -- [`c8804ea5a`](https://github.com/raptoreum/raptoreum/commit/c8804ea5a) Do not ignore patches in depends (#2399) -- [`13f2eb449`](https://github.com/raptoreum/raptoreum/commit/13f2eb449) Force fvisibility=hidden when compiling on macos (#2398) -- [`9eb9c99d5`](https://github.com/raptoreum/raptoreum/commit/9eb9c99d5) Bump version to 0.13.0 (#2386) -- [`8f9b004ca`](https://github.com/raptoreum/raptoreum/commit/8f9b004ca) Support "fast" mode when calling sync_smartnodes (#2383) -- [`fcea333ba`](https://github.com/raptoreum/raptoreum/commit/fcea333ba) Rewrite handling of too long depends builds in .travis.yml (#2385) -- [`d1debfc26`](https://github.com/raptoreum/raptoreum/commit/d1debfc26) Implement mt_pooled_secure_allocator and use it for BLS secure allocation (#2375) -- [`0692de1c5`](https://github.com/raptoreum/raptoreum/commit/0692de1c5) Fix prepare_smartnodes/create_smartnodes in RaptoreumTestFramework (#2382) -- [`6433a944a`](https://github.com/raptoreum/raptoreum/commit/6433a944a) [Trivial] typo Groupped -> Grouped (#2374) -- [`59932401b`](https://github.com/raptoreum/raptoreum/commit/59932401b) Change internal references of Darksend to PrivateSend (#2372) -- [`e3046adb3`](https://github.com/raptoreum/raptoreum/commit/e3046adb3) Clear devNetParams and mimic behavior of other param types (#2367) -- [`de426e962`](https://github.com/raptoreum/raptoreum/commit/de426e962) Give tail calls enough time to print errors (#2376) -- [`0402240a2`](https://github.com/raptoreum/raptoreum/commit/0402240a2) Bump CMAKE_CXX_STANDARD to 14 in CMakeLists.txt (#2377) -- [`3c9237aa4`](https://github.com/raptoreum/raptoreum/commit/3c9237aa4) Use VersionBitsState instead of VersionBitsTipState to avoid cs_main lock (#2370) -- [`c4351fd32`](https://github.com/raptoreum/raptoreum/commit/c4351fd32) revert 737, DEFAULT_TRANSACTION_MAXFEE = 0.1 * COIN (#2362) -- [`1c9ed7806`](https://github.com/raptoreum/raptoreum/commit/1c9ed7806) GDB automation with Python script to measure memory usage in raptoreumd (#1609) -- [`d998dc13e`](https://github.com/raptoreum/raptoreum/commit/d998dc13e) Add cmake to non-mac gitian descriptors (#2360) -- [`266dd3232`](https://github.com/raptoreum/raptoreum/commit/266dd3232) mkdir -p to allow re-start of failed chia build (#2359) -- [`11a0cbf84`](https://github.com/raptoreum/raptoreum/commit/11a0cbf84) InstantSend-related tests refactoring (#2333) -- [`3313bbd51`](https://github.com/raptoreum/raptoreum/commit/3313bbd51) Backport bitcoin #13623 Migrate gitian-build.sh to python (#2319) -- [`7b76bbb57`](https://github.com/raptoreum/raptoreum/commit/7b76bbb57) Update Chia BLS libs to latest master (#2357) -- [`e2de632f8`](https://github.com/raptoreum/raptoreum/commit/e2de632f8) Move handling of `size != SerSize` into SetBuf/GetBuf (#2356) -- [`81d60bc28`](https://github.com/raptoreum/raptoreum/commit/81d60bc28) Fix the issue with transaction amount precision in IS tests (#2353) -- [`a45055384`](https://github.com/raptoreum/raptoreum/commit/a45055384) Fix qt configure to detect clang version correctly (#2344) -- [`b99d94a0f`](https://github.com/raptoreum/raptoreum/commit/b99d94a0f) Minor build documentation updates (#2343) -- [`464191698`](https://github.com/raptoreum/raptoreum/commit/464191698) Review fixes -- [`9c8e4ac76`](https://github.com/raptoreum/raptoreum/commit/9c8e4ac76) Move bls stuff from crypto/ to bls/ -- [`bed1ded8b`](https://github.com/raptoreum/raptoreum/commit/bed1ded8b) Remove duplicated check (#2336) -- [`89f744d06`](https://github.com/raptoreum/raptoreum/commit/89f744d06) pack of small cleanup fixes / optimizations (#2334) -- [`9603c5290`](https://github.com/raptoreum/raptoreum/commit/9603c5290) Trivial: Codestyle fixes in InstantSend code (#2332) -- [`90ad75911`](https://github.com/raptoreum/raptoreum/commit/90ad75911) Fix auto-IS and tests (#2331) -- [`b3fc236af`](https://github.com/raptoreum/raptoreum/commit/b3fc236af) Fix mnodeman.cs vs cs_vPendingSmartnodes vs cs_main deadlock (#2200) -- [`80fd096b0`](https://github.com/raptoreum/raptoreum/commit/80fd096b0) Add ECDSA benchmarks -- [`78675d9bb`](https://github.com/raptoreum/raptoreum/commit/78675d9bb) Add BLS and DKG benchmarks -- [`3ee27c168`](https://github.com/raptoreum/raptoreum/commit/3ee27c168) Add highly parallelized worker/helper for BLS/DKG calculations -- [`aa3b0aa8a`](https://github.com/raptoreum/raptoreum/commit/aa3b0aa8a) Add simple helpers/wrappers for BLS+AES based integrated encryption schemes (IES) -- [`9ccf6f584`](https://github.com/raptoreum/raptoreum/commit/9ccf6f584) Implement wrappers around Chia BLS lib -- [`3039d44d3`](https://github.com/raptoreum/raptoreum/commit/3039d44d3) Add Chia bls-signatures library to depends -- [`f3dcb6916`](https://github.com/raptoreum/raptoreum/commit/f3dcb6916) Add cmake to ci/Dockerfile.builder -- [`057d7445e`](https://github.com/raptoreum/raptoreum/commit/057d7445e) Add libgmp to depends -- [`b0d0093d7`](https://github.com/raptoreum/raptoreum/commit/b0d0093d7) Add helper to rename all threads of a ctpl::thread_pool -- [`47a162255`](https://github.com/raptoreum/raptoreum/commit/47a162255) Add ctpl header only library -- [`407baccec`](https://github.com/raptoreum/raptoreum/commit/407baccec) Remove obsolete build-openbsd.md (#2328) -- [`8a1b51356`](https://github.com/raptoreum/raptoreum/commit/8a1b51356) Backport: Fix Qt build with XCode (for depends) (#2325) -- [`a5aca049d`](https://github.com/raptoreum/raptoreum/commit/a5aca049d) rename vars in mnsync to make more sense (#2308) -- [`ee6a5a33b`](https://github.com/raptoreum/raptoreum/commit/ee6a5a33b) Gov cleanup + copyright bump (#2324) -- [`d7e5f02ea`](https://github.com/raptoreum/raptoreum/commit/d7e5f02ea) Update build documentation (#2323) -- [`bd8c54d12`](https://github.com/raptoreum/raptoreum/commit/bd8c54d12) A bit more verbosity for some critical errors (#2316) -- [`a4ff2a19a`](https://github.com/raptoreum/raptoreum/commit/a4ff2a19a) Fix some warnings and do a couple of other trivial cleanups (#2315) -- [`07208a4ae`](https://github.com/raptoreum/raptoreum/commit/07208a4ae) document spork system with doxygen comments (#2301) -- [`2c1a17909`](https://github.com/raptoreum/raptoreum/commit/2c1a17909) cleanup: remove unused vars, includes, functions (#2306) -- [`3d48824b4`](https://github.com/raptoreum/raptoreum/commit/3d48824b4) Update .clang-format to more accurately show the actual style (#2299) -- [`8ea40102c`](https://github.com/raptoreum/raptoreum/commit/8ea40102c) Remove leftover RBF code from BTC (#2297) -- [`76599aad3`](https://github.com/raptoreum/raptoreum/commit/76599aad3) Drop (pre-)70208 compatibility code (#2295) -- [`016681cd3`](https://github.com/raptoreum/raptoreum/commit/016681cd3) Add support for serialization of bitsets and tuples (#2293) -- [`2a95dd30c`](https://github.com/raptoreum/raptoreum/commit/2a95dd30c) Fix locking issues in DIP3 unit tests (#2285) -- [`47ca06ab3`](https://github.com/raptoreum/raptoreum/commit/47ca06ab3) DIP3 integration tests (#2280) -- [`ad6c2893c`](https://github.com/raptoreum/raptoreum/commit/ad6c2893c) Docs - Update Core version number in readme files (#2267) -- [`bc7924d41`](https://github.com/raptoreum/raptoreum/commit/bc7924d41) Add unit tests for DIP3 and DIP4 -- [`d653ace99`](https://github.com/raptoreum/raptoreum/commit/d653ace99) Update CbTx in TestChainSetup -- [`9674be8f9`](https://github.com/raptoreum/raptoreum/commit/9674be8f9) Refactor TestChain100Setup to allow different test chain setups -- [`cb37c3972`](https://github.com/raptoreum/raptoreum/commit/cb37c3972) Bump PROTOCOL_VERSION to 70211, bump MIN_* protocols to 70210 (#2256) -- [`b99886532`](https://github.com/raptoreum/raptoreum/commit/b99886532) add link for developer-notes in contributing (#2260) -- [`fded838c9`](https://github.com/raptoreum/raptoreum/commit/fded838c9) RPC folder: Cleaned up brackets on if, while, for, BOOST_FOREACH. Some whitespace fixes (#2257) -- [`5295c78cc`](https://github.com/raptoreum/raptoreum/commit/5295c78cc) Fix typo in "penalty" (#2247) -- [`c566ce75d`](https://github.com/raptoreum/raptoreum/commit/c566ce75d) Update copyright in specialtx.h/cpp -- [`e002c50b0`](https://github.com/raptoreum/raptoreum/commit/e002c50b0) Add "immer" functional/immutable containers library (#2244) -- [`799e3c312`](https://github.com/raptoreum/raptoreum/commit/799e3c312) Perform Jenkins builds in /raptoreum-src all the time to fix caching issues (#2242) -- [`b6896387a`](https://github.com/raptoreum/raptoreum/commit/b6896387a) Move DIP1 transaction size checks out of ContextualCheckBlock and use ContextualCheckTransaction instead (#2238) -- [`e415fd049`](https://github.com/raptoreum/raptoreum/commit/e415fd049) Revert CSmartnodePayments::IsTransactionValid to the logic before the recent refactorings (#2237) -- [`8da88ecf6`](https://github.com/raptoreum/raptoreum/commit/8da88ecf6) Don't crash when formatting in logging throws exceptions (#2231) -- [`2e06f8133`](https://github.com/raptoreum/raptoreum/commit/2e06f8133) fix missed format parameter (#2229) -- [`3d654b981`](https://github.com/raptoreum/raptoreum/commit/3d654b981) Build bionic base image in Jenkinsfile.gitian & update docs (#2226) -- [`c09f57bd7`](https://github.com/raptoreum/raptoreum/commit/c09f57bd7) Backport move to Ubuntu Bionic and GCC7 in Gitian builds (#2225) -- [`7cf9572c2`](https://github.com/raptoreum/raptoreum/commit/7cf9572c2) Backport Bitcoin #11881: Remove Python2 support (#2224) -- [`633879cd2`](https://github.com/raptoreum/raptoreum/commit/633879cd2) Only use version 1 and 2 transactions for sighash_tests (#2219) -- [`2d4e18537`](https://github.com/raptoreum/raptoreum/commit/2d4e18537) Some useful commits from the DIP3 PR in regard to integration tests (#2218) -- [`106bab1ae`](https://github.com/raptoreum/raptoreum/commit/106bab1ae) Add new ParseXXX methods to easily parse UniValue values (#2211) -- [`c4c610783`](https://github.com/raptoreum/raptoreum/commit/c4c610783) Use C++14 standard when building (#2209) -- [`589a77013`](https://github.com/raptoreum/raptoreum/commit/589a77013) Correction to release date for 0.12.0 (#2205) -- [`96435288f`](https://github.com/raptoreum/raptoreum/commit/96435288f) Move block template specific stuff from CBlock to CBlockTemplate (#2195) -- [`3d002c946`](https://github.com/raptoreum/raptoreum/commit/3d002c946) Fix active smartnode task schedule (#2193) -- [`65b904526`](https://github.com/raptoreum/raptoreum/commit/65b904526) Add helpers GetSentinelString() and GetDaemonString() to CSmartnodePing (#2192) -- [`eb202e812`](https://github.com/raptoreum/raptoreum/commit/eb202e812) Use ccache in gitian builds (#2185) -- [`b47617325`](https://github.com/raptoreum/raptoreum/commit/b47617325) Install python3 in gitian builds (#2182) -- [`7a85e24c3`](https://github.com/raptoreum/raptoreum/commit/7a85e24c3) Remove deprecated gitian-rpi2.yml descriptor (#2183) -- [`1681d6366`](https://github.com/raptoreum/raptoreum/commit/1681d6366) Replace Raptoreum-specific threads with Raptoreum-specific scheduled tasks (#2043) -- [`dac090964`](https://github.com/raptoreum/raptoreum/commit/dac090964) remove raptoreum.io dns seed entry (#2181) -- [`753c2436b`](https://github.com/raptoreum/raptoreum/commit/753c2436b) Fix MissingPropertyException on Jenkins when no cache was found (#2180) -- [`f3e380659`](https://github.com/raptoreum/raptoreum/commit/f3e380659) Move to in-docker CI builds and add Jenkins support (#2178) -- [`23dde9f12`](https://github.com/raptoreum/raptoreum/commit/23dde9f12) Remove a few annoying debug prints from CSmartnodeMan (#2179) -- [`5036d7dfc`](https://github.com/raptoreum/raptoreum/commit/5036d7dfc) depends: Update Qt download url (#2177) -- [`e23339d6f`](https://github.com/raptoreum/raptoreum/commit/e23339d6f) use nullptr in Raptoreum-specific code (#2166) -- [`42c193df0`](https://github.com/raptoreum/raptoreum/commit/42c193df0) replace map count/insert w/emplace in instantx.cpp (#2165) -- [`fd70a1eb9`](https://github.com/raptoreum/raptoreum/commit/fd70a1eb9) iterator cleanup in several places (#2164) -- [`df1be90ce`](https://github.com/raptoreum/raptoreum/commit/df1be90ce) Update links to obsolete documentation (#2162) -- [`448e92f4a`](https://github.com/raptoreum/raptoreum/commit/448e92f4a) GetOutPointPrivateSendRounds readability (#2149) -- [`6da2837bd`](https://github.com/raptoreum/raptoreum/commit/6da2837bd) InstantSend Integration tests (#2141) -- [`8ee9333bc`](https://github.com/raptoreum/raptoreum/commit/8ee9333bc) remove boost dependency from Raptoreum-specific code (#2072) -- [`a527845e4`](https://github.com/raptoreum/raptoreum/commit/a527845e4) Bump to 0.12.4.0 pre-release (#2167) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alexander Block -- UdjinM6 -- PastaPastaPasta -- gladcow -- Nathan Marley -- thephez -- strophy -- PaulieD -- InhumanPerfection -- Spencer Lievens -- -k -- Salisbury -- Solar Designer -- Oleg Girko -- Anton Suprunchuk - -As well as everyone that submitted issues, reviewed pull requests or helped translating on -[Transifex](https://www.transifex.com/projects/p/raptoreum/). - -Older releases -============== - -Raptoreum was previously known as Darkcoin. - -Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin -which was first released on Jan/18/2014. - -Darkcoin tree 0.9.x was the open source implementation of smartnodes based on -the 0.8.x tree and was first released on Mar/13/2014. - -Darkcoin tree 0.10.x used to be the closed source implementation of Darksend -which was released open source on Sep/25/2014. - -Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, -Darkcoin was rebranded to Raptoreum. - -Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. - -Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. - -These release are considered obsolete. Old release notes can be found here: - -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 - diff --git a/doc/release-notes/raptoreum/release-notes-0.14.0.2.md b/doc/release-notes/raptoreum/release-notes-0.14.0.2.md deleted file mode 100644 index 8773560709..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.14.0.2.md +++ /dev/null @@ -1,133 +0,0 @@ -Raptoreum Core version 0.14.0.2 -========================== - -Release is now available from: - - - -This is a new minor version release, bringing various bugfixes. - -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/Raptoreum-Qt (on Mac) or -raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation and you were -using version < 0.13 you will have to reindex (start with -reindex-chainstate -or -reindex) to make sure your wallet has all the new data synced. Upgrading from -version 0.13 should not require any additional actions. - -Downgrade warning ------------------ - -### Downgrade to a version < 0.14.0.0 - -Downgrading to a version smaller than 0.14 is not supported anymore as DIP8 has -activated on mainnet and testnet. - -### Downgrade to versions 0.14.0.0 - 0.14.0.1 - -Downgrading to older 0.14 releases is fully supported but is not -recommended unless you have some serious issues with version 0.14.0.2. - -Notable changes -=============== - -Performance improvements ------------------------- -Slow startup times were observed in older versions. This was due to sub-optimal handling of old -deterministic smartnode lists which caused the loading of too many lists into memory. This should be -fixed now. - -Fixed excessive memory use --------------------------- -Multiple issues were found which caused excessive use of memory in some situations, especially when -a full reindex was performed, causing the node to crash even when enough RAM was available. This should -be fixed now. - -Fixed out-of-sync smartnode list UI ------------------------------------- -The smartnode tab, which shows the smartnode list, was not always up-to-date as it missed some internal -updates. This should be fixed now. - -0.14.0.2 Change log -=================== - -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.14.0.1...raptoreum:v0.14.0.2). - -- [`d2ff63e8d`](https://github.com/raptoreum/raptoreum/commit/d2ff63e8d) Use std::unique_ptr for mnList in CSimplifiedMNList (#3014) -- [`321bbf5af`](https://github.com/raptoreum/raptoreum/commit/321bbf5af) Fix excessive memory use when flushing chainstate and EvoDB (#3008) -- [`0410259dd`](https://github.com/raptoreum/raptoreum/commit/0410259dd) Fix 2 common Travis failures which happen when Travis has network issues (#3003) -- [`8d763c144`](https://github.com/raptoreum/raptoreum/commit/8d763c144) Only load signingActiveQuorumCount + 1 quorums into cache (#3002) -- [`2dc1b06ec`](https://github.com/raptoreum/raptoreum/commit/2dc1b06ec) Remove skipped denom from the list on tx commit (#2997) -- [`dff2c851d`](https://github.com/raptoreum/raptoreum/commit/dff2c851d) Update manpages for 0.14.0.2 (#2999) -- [`46c4f5844`](https://github.com/raptoreum/raptoreum/commit/46c4f5844) Use Travis stages instead of custom timeouts (#2948) -- [`49c37b82a`](https://github.com/raptoreum/raptoreum/commit/49c37b82a) Back off for 1m when connecting to quorum smartnodes (#2975) -- [`c1f756fd9`](https://github.com/raptoreum/raptoreum/commit/c1f756fd9) Multiple speed optimizations for deterministic MN list handling (#2972) -- [`11699f540`](https://github.com/raptoreum/raptoreum/commit/11699f540) Process/keep messages/connections from PoSe-banned MNs (#2967) -- [`c5415e746`](https://github.com/raptoreum/raptoreum/commit/c5415e746) Fix UI smartnode list (#2966) -- [`fb6f0e04d`](https://github.com/raptoreum/raptoreum/commit/fb6f0e04d) Bump version to 0.14.0.2 and copy release notes (#2991) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alexander Block (codablock) -- UdjinM6 - -As well as everyone that submitted issues and reviewed pull requests. - -Older releases -============== - -Raptoreum was previously known as Darkcoin. - -Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin -which was first released on Jan/18/2014. - -Darkcoin tree 0.9.x was the open source implementation of smartnodes based on -the 0.8.x tree and was first released on Mar/13/2014. - -Darkcoin tree 0.10.x used to be the closed source implementation of Darksend -which was released open source on Sep/25/2014. - -Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, -Darkcoin was rebranded to Raptoreum. - -Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. - -Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. - -These release are considered obsolete. Old release notes can be found here: - -- [v0.14.0.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.1.md) released May/31/2019 -- [v0.14.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 -- [v0.13.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 -- [v0.13.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 -- [v0.13.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 - diff --git a/doc/release-notes/raptoreum/release-notes-0.14.0.4.md b/doc/release-notes/raptoreum/release-notes-0.14.0.4.md deleted file mode 100644 index 8e5722d2de..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.14.0.4.md +++ /dev/null @@ -1,177 +0,0 @@ -Raptoreum Core version 0.14.0.4 -========================== - -Release is now available from: - - - -This is a new minor version release, bringing various bugfixes and 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/Raptoreum-Qt (on Mac) or -raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation and you were -using version < 0.13 you will have to reindex (start with -reindex-chainstate -or -reindex) to make sure your wallet has all the new data synced. Upgrading from -version 0.13 should not require any additional actions. - -When upgrading from a version prior to 0.14.0.3, the -first startup of Raptoreum Core will run a migration process which can take a few minutes -to finish. After the migration, a downgrade to an older version is only possible with -a reindex (or reindex-chainstate). - -Downgrade warning ------------------ - -### Downgrade to a version < 0.14.0.3 - -Downgrading to a version smaller than 0.14.0.3 is not supported anymore due to changes -in the "evodb" database format. If you need to use an older version, you have to perform -a reindex or re-sync the whole chain. - -Notable changes -=============== - -Fix respends of freshly received InstantSend transactions ---------------------------------------------------------- - -A bug in Raptoreum Core caused respends to not work before a received InstantSend transaction was confirmed in at least -one block. This is fixed in this release, so that InstantSend locked mempool transactions can be -respent immediately in Raptoreum Core (other wallets were not affected). - -Deprecation of SPORK_16_INSTANTSEND_AUTOLOCKS ---------------------------------------------- - -With the activation of SPORK_20_INSTANTSEND_LLMQ_BASED a few month ago, all transactions started to be locked via -InstantSend, which already partly deprecated SPORK_16_INSTANTSEND_AUTOLOCKS. This release removes the last use -of SPORK_16_INSTANTSEND_AUTOLOCKS, which caused InstantSend to stop working when the mempool got too large. - -Improve orphan transaction limit handling ------------------------------------------ - -Instead of limiting orphan transaction by number of transaction, we limit orphans by total size in bytes -now. This allows to have thousands of orphan transactions before hitting the limit. - -Discrepancies in orphan sets between nodes and handling of those was one of the major limiting factors in -the stress tests performed by an unknown entity on mainnet. - -Improve re-requesting for already known transactions ----------------------------------------------------- - -Previously, Raptoreum would re-request old transactions even though they were already known locally. This -happened when the outputs were respent very shortly after confirmation of the transaction. This lead to -wrongly handling these transactions as orphans, filling up the orphan set and hitting limits very fast. -This release fixes this for nodes which have txindex enabled, which is the case for all smartnodes. Normal -nodes (without txindex) can ignore the issue as they are not involved in active InstantSend locking. - -Another issue fixed in this release is the re-requesting of transactions after an InstantSend lock invalidated -a conflicting transaction. - -Multiple improvements to PrivateSend ------------------------------------- - -Multiple improvements to PrivateSend are introduced in this release, leading to faster mixing and more -reasonable selection of UTXOs when sending PrivateSend funds. - -Fix for CVE-2017-18350 ----------------------- - -Bitcoin silently implemented a hidden fix for [CVE-2017-18350](https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-November/017453.html). -in Bitcoin v0.15.1. This release of Raptoreum Core includes a backport of this fix. - - -0.14.0.4 Change log -=================== - -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.14.0.3...raptoreum:v0.14.0.4). - -- [`5f98ed7a5`](https://github.com/raptoreum/raptoreum/commit/5f98ed7a5) [v0.14.0.x] Bump version to 0.14.0.4 and draft release notes (#3203) -- [`c0dda38fe`](https://github.com/raptoreum/raptoreum/commit/c0dda38fe) Circumvent BIP69 sorting in fundrawtransaction.py test (#3100) -- [`64ae6365f`](https://github.com/raptoreum/raptoreum/commit/64ae6365f) Fix compile issues -- [`36473015b`](https://github.com/raptoreum/raptoreum/commit/36473015b) Merge #11397: net: Improve and document SOCKS code -- [`66e298728`](https://github.com/raptoreum/raptoreum/commit/66e298728) Slightly optimize ApproximateBestSubset and its usage for PS txes (#3184) -- [`16b6b6f7c`](https://github.com/raptoreum/raptoreum/commit/16b6b6f7c) Update activemn if protx info changed (#3176) -- [`ce6687130`](https://github.com/raptoreum/raptoreum/commit/ce6687130) Actually update spent index on DisconnectBlock (#3167) -- [`9b49bfda8`](https://github.com/raptoreum/raptoreum/commit/9b49bfda8) Only track last seen time instead of first and last seen time (#3165) -- [`ad720eef1`](https://github.com/raptoreum/raptoreum/commit/ad720eef1) Merge #17118: build: depends macOS: point --sysroot to SDK (#3161) -- [`909d6a4ba`](https://github.com/raptoreum/raptoreum/commit/909d6a4ba) Simulate BlockConnected/BlockDisconnected for PS caches -- [`db7f471c7`](https://github.com/raptoreum/raptoreum/commit/db7f471c7) Few fixes related to SelectCoinsGroupedByAddresses (#3144) -- [`1acd4742c`](https://github.com/raptoreum/raptoreum/commit/1acd4742c) Various fixes for mixing queues (#3138) -- [`0031d6b04`](https://github.com/raptoreum/raptoreum/commit/0031d6b04) Also consider txindex for transactions in AlreadyHave() (#3126) -- [`c4be5ac4d`](https://github.com/raptoreum/raptoreum/commit/c4be5ac4d) Ignore recent rejects filter for locked txes (#3124) -- [`f2d401aa8`](https://github.com/raptoreum/raptoreum/commit/f2d401aa8) Make orphan TX map limiting dependent on total TX size instead of TX count (#3121) -- [`87ff566a0`](https://github.com/raptoreum/raptoreum/commit/87ff566a0) Update/modernize macOS plist (#3074) -- [`2141d5f9d`](https://github.com/raptoreum/raptoreum/commit/2141d5f9d) Fix bip69 vs change position issue (#3063) -- [`75fddde67`](https://github.com/raptoreum/raptoreum/commit/75fddde67) Partially revert 3061 (#3150) -- [`c74f2cd8b`](https://github.com/raptoreum/raptoreum/commit/c74f2cd8b) Fix SelectCoinsMinConf to allow instant respends (#3061) -- [`2e7ec2369`](https://github.com/raptoreum/raptoreum/commit/2e7ec2369) [0.14.0.x] Remove check for mempool size in CInstantSendManager::CheckCanLock (#3119) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alexander Block (codablock) -- Nathan Marley (nmarley) -- PastaPastaPasta -- UdjinM6 - -As well as everyone that submitted issues and reviewed pull requests. - -Older releases -============== - -Raptoreum was previously known as Darkcoin. - -Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin -which was first released on Jan/18/2014. - -Darkcoin tree 0.9.x was the open source implementation of smartnodes based on -the 0.8.x tree and was first released on Mar/13/2014. - -Darkcoin tree 0.10.x used to be the closed source implementation of Darksend -which was released open source on Sep/25/2014. - -Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, -Darkcoin was rebranded to Raptoreum. - -Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. - -Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. - -These release are considered obsolete. Old release notes can be found here: - -- [v0.14.0.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.3.md) released August/15/2019 -- [v0.14.0.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.2.md) released July/4/2019 -- [v0.14.0.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.1.md) released May/31/2019 -- [v0.14.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 -- [v0.13.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 -- [v0.13.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 -- [v0.13.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 - diff --git a/doc/release-notes/raptoreum/release-notes-0.14.0.5.md b/doc/release-notes/raptoreum/release-notes-0.14.0.5.md deleted file mode 100644 index 4c36048052..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.14.0.5.md +++ /dev/null @@ -1,141 +0,0 @@ -Raptoreum Core version 0.14.0.5 -========================== - -Release is now available from: - - - -This is a new minor version release, bringing various bugfixes and improvements. -It is highly recommended to upgrade to this release as it contains a critical -fix for a possible DoS vector. - -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/Raptoreum-Qt (on Mac) or -raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation and you were -using version < 0.13 you will have to reindex (start with -reindex-chainstate -or -reindex) to make sure your wallet has all the new data synced. Upgrading from -version 0.13 should not require any additional actions. - -When upgrading from a version prior to 0.14.0.3, the -first startup of Raptoreum Core will run a migration process which can take a few minutes -to finish. After the migration, a downgrade to an older version is only possible with -a reindex (or reindex-chainstate). - -Downgrade warning ------------------ - -### Downgrade to a version < 0.14.0.3 - -Downgrading to a version smaller than 0.14.0.3 is not supported anymore due to changes -in the "evodb" database format. If you need to use an older version, you have to perform -a reindex or re-sync the whole chain. - -Notable changes -=============== - -Fix for a DoS vector --------------------- - -This release fixes a serious DoS vector which allows to cause memory exhaustion until the point of -out-of-memory related crashes. We highly recommend upgrading all nodes. Thanks to Bitcoin ABC -developers for finding and reporting this issue to us. - -Better handling of non-locked transactions in mined blocks ----------------------------------------------------------- - -We observed multiple cases of ChainLocks failing on mainnet. We tracked this down to a situation where -PrivateSend mixing transactions were first rejected by parts of the network (0.14.0.4 nodes) while other parts -(<=0.14.0.3) accepted the transaction into the mempool. This caused InstantSend locking to fail for these -transactions, while non-upgraded miners still included the transactions into blocks after 10 minutes. -This caused blocks to not get ChainLocked for at least 10 minutes. This release improves an already existent -fallback mechanism (retroactive InstantSend locking) to also work for transaction which are already partially -known in the network. This should cause ChainLocks to succeed in such situations. - -0.14.0.5 Change log -=================== - -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.14.0.4...raptoreum:v0.14.0.5). - -- [`20d4a27778`](https://github.com/raptoreum/raptoreum/commit/dc07a0c5e1) Make sure mempool txes are properly processed by CChainLocksHandler despite node restarts (#3230) -- [`dc07a0c5e1`](https://github.com/raptoreum/raptoreum/commit/dc07a0c5e1) [v0.14.0.x] Bump version and prepare release notes (#3228) -- [`401da32090`](https://github.com/raptoreum/raptoreum/commit/401da32090) More fixes in llmq-is-retroactive tests -- [`33721eaa11`](https://github.com/raptoreum/raptoreum/commit/33721eaa11) Make llmq-is-retroactive test compatible with 0.14.0.x -- [`85bd162a3e`](https://github.com/raptoreum/raptoreum/commit/85bd162a3e) Make wait_for_xxx methods compatible with 0.14.0.x -- [`22cfddaf12`](https://github.com/raptoreum/raptoreum/commit/22cfddaf12) Allow re-signing of IS locks when performing retroactive signing (#3219) -- [`a8b8891a1d`](https://github.com/raptoreum/raptoreum/commit/a8b8891a1d) Add wait_for_xxx methods as found in develop -- [`8dae12cc60`](https://github.com/raptoreum/raptoreum/commit/8dae12cc60) More/better logging for InstantSend -- [`fdd19cf667`](https://github.com/raptoreum/raptoreum/commit/fdd19cf667) Tests: Fix the way nodes are connected to each other in setup_network/start_smartnodes (#3221) -- [`41f0e9d028`](https://github.com/raptoreum/raptoreum/commit/41f0e9d028) More fixes related to extra_args -- [`5213118601`](https://github.com/raptoreum/raptoreum/commit/5213118601) Tests: Allow specifying different cmd-line params for each smartnode (#3222) -- [`2fef21fd80`](https://github.com/raptoreum/raptoreum/commit/2fef21fd80) Don't join thread in CQuorum::~CQuorum when called from within the thread (#3223) -- [`e69c6c3207`](https://github.com/raptoreum/raptoreum/commit/e69c6c3207) Merge #12392: Fix ignoring tx data requests when fPauseSend is set on a peer (#3225) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alexander Block (codablock) -- UdjinM6 - -As well as everyone that submitted issues and reviewed pull requests. - -Older releases -============== - -Raptoreum was previously known as Darkcoin. - -Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin -which was first released on Jan/18/2014. - -Darkcoin tree 0.9.x was the open source implementation of smartnodes based on -the 0.8.x tree and was first released on Mar/13/2014. - -Darkcoin tree 0.10.x used to be the closed source implementation of Darksend -which was released open source on Sep/25/2014. - -Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, -Darkcoin was rebranded to Raptoreum. - -Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. - -Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. - -These release are considered obsolete. Old release notes can be found here: - -- [v0.14.0.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.4.md) released November/22/2019 -- [v0.14.0.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.3.md) released August/15/2019 -- [v0.14.0.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.2.md) released July/4/2019 -- [v0.14.0.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.1.md) released May/31/2019 -- [v0.14.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.14.0.md) released May/22/2019 -- [v0.13.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 -- [v0.13.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 -- [v0.13.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 - diff --git a/doc/release-notes/raptoreum/release-notes-0.14.0.md b/doc/release-notes/raptoreum/release-notes-0.14.0.md deleted file mode 100644 index 31014711b3..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.14.0.md +++ /dev/null @@ -1,756 +0,0 @@ -Raptoreum Core version 0.14.0.0 -========================== - -Release is now available from: - - - -This is a new major version release, bringing new features, various bugfixes 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/Raptoreum-Qt (on Mac) or -raptoreumd/raptoreum-qt (on Linux). If you upgrade after DIP0003 activation and you were -using version < 0.13 you will have to reindex (start with -reindex-chainstate -or -reindex) to make sure your wallet has all the new data synced. Upgrading from -version 0.13 should not require any additional actions. - -Downgrade warning ------------------ - -### Downgrade to a version < 0.13.0.0 - -Downgrading to a version smaller than 0.13 is not supported anymore as DIP2/DIP3 has -activated on mainnet and testnet. - -### Downgrade to versions 0.13.0.0 - 0.13.3.0 - -Downgrading to 0.13 releases is fully supported until DIP0008 activation but is not -recommended unless you have some serious issues with version 0.14. - -Notable changes -=============== - -DIP0004 - Coinbase Payload v2 ------------------------------ -Coinbase Payload v2 introduces new field `merkleRootQuorums` which represents the merkle root of -all the hashes of the final quorum commitments of all active LLMQ sets. This allows SPV clients -to verify active LLMQ sets and use this information to further verify ChainLocks and LLMQ-based -InstantSend messages. Coinbase Payload v2 relies on DIP0008 (bit 4) activation. - -https://github.com/raptoreum/dips/blob/master/dip-0004.md#calculating-the-merkle-root-of-the-active-llmqs - -DIP0008 - ChainLocks --------------------- -This version introduces ChainLocks, a technology for near-instant confirmation of blocks and -finding near-instant consensus on the longest valid/accepted chain. ChainLocks leverages LLMQ -Signing Requests/Sessions to accomplish this. ChainLocks relies on DIP0008 (bit 4) activation and -`SPORK_19_CHAINLOCKS_ENABLED` spork. - -Read more: https://github.com/raptoreum/dips/blob/master/dip-0008.md - -DIP0010 - LLMQ-based InstantSend --------------------------------- -InstantSend is a feature to allow instant confirmations of payments. It works by locking transaction -inputs through smartnode quorums. It has been present in Raptoreum for a few years and been proven to work. -Nevertheless, there are some limits which could theoretically be removed in the old system but doing so -would have created risks in terms of scalability and security. - -We introduce LLMQ-based InstantSend which is designed to be much more scalable without sacrificing -security and which allows all transactions to be treated as InstantSend transactions. The old system -differentiated transactions as InstantSend transactions by using the P2P message “ix” instead of “tx”. -Since this distinction is not required in the new system, the P2P message “ix” will be removed after -DIP0008 deployment (for now, transactions sent via "ix" message will be relayed further via "tx" message). - -Read more: https://github.com/raptoreum/dips/blob/master/dip-0010.md - -Network ------- -Legacy messages `mnw`, `mnwb`, `mnget`, `mnb`, `mnp`, `dseg`, `mnv`, `qdcommit` and their corresponding -inventory types (7, 10, 14, 15, 19, 22) are no longer suported. - -Message `version` is extended with a 256 bit field - a challenge sent to a smartnode. Smartnode which -received such a challenge must reply with new p2p message `mnauth` directly after `verack`. This `mnauth` -message must include a signed challenge that was previously sent via `version`. - -Mining ------- -Due to changes in coinbase payload this version requires for miners to signal their readiness via -BIP9-like mechanism - by setting bit 4 of the block version to 1. Note that if your mining software -simply uses `coinbase_payload` field from `getblocktemplate` RPC and doesn't construct coinbase payload -manually then there should be no changes to your mining software required. We however encourage pools -and solo-miners to check their software compatibility on testnet to ensure flawless migration. - -PrivateSend ------------ -The wallet will try to create and consume denoms a bit more accurately now. It will also only create a -limited number of inputs for each denominated amount to prevent bloating itself with mostly the smallest -denoms. You can control this number of inputs via new `-privatesenddenoms` cmd-line option (default is 300). - -InstantSend ------------ -Legacy InstantSend is going to be superseded by the newly implemented LLMQ-based one once DIP0008 (bit 4) -is active and `SPORK_20_INSTANTSEND_LLMQ_BASED` spork is ON. - -Sporks ------- -There are two new sporks introduced in this version - `SPORK_19_CHAINLOCKS_ENABLED` and -`SPORK_20_INSTANTSEND_LLMQ_BASED`. `SPORK_17_QUORUM_DKG_ENABLED` was introduced in v0.13 but was kept OFF. -It will be turned on once 80% smartnodes are upgraded to v0.14 which will enable DKG and DKG-based PoSe. - -QR codes --------- -Wallet can now show QR codes for addresses in the address book, receiving addresses and addresses identified -in transactions list (right click -> "Show QR-code"). - -RPC changes ------------ -There are a few changes in existing RPC interfaces in this release: -- for blockchain based RPC commands `instantlock` will say `true` if the transaction -was locked via LLMQ based ChainLocks (for backwards compatibility reasons) -- `prioritisetransaction` no longer allows adjusting priority -- `getgovernanceinfo` no longer has `smartnodewatchdogmaxseconds` and `sentinelpingmaxseconds` fields -- `smartnodelist` no longer supports `activeseconds`, `daemon`, `lastseen`, `protocol`, `keyid`, `rank` -and `sentinel` modes, new mode - `pubkeyoperator` -- `smartnode count` no longer has `ps_compatible` and `qualify` fields and `ps` and `qualify` modes -- `smartnode winner` and `smartnode current` no longer have `protocol`, `lastseen` and `activeseconds` -fields, new field - `proTxHash` -- `debug` supports new categories: `chainlocks`, `llmq`, `llmq-dkg`, `llmq-sigs` -- `mnsync` no longer has `IsSmartnodeListSynced` and `IsWinnersListSynced` fields -- various RPCs that had `instantlock` field have `chainlock` (excluding mempool RPCs) and -`instantlock_internal` fields now - -There are also new RPC commands: -- `bls fromsecret` parses a BLS secret key and returns the secret/public key pair -- `quorum` is a set of commands for quorums/LLMQs e.g. `list` to show active quorums (by default, -can specify different `count`) or `info` to shows detailed information about some specific quorum -etc., see `help quorum` - -Few RPC commands are no longer supported: `estimatepriority`, `estimatesmartpriority`, -`gobject getvotes`, `smartnode start-*`, `smartnode genkey`, `smartnode list-conf`, `smartnode check`, -`smartnodebroadcast`, `sentinelping` - -See `help command` in rpc for more info. - -ZMQ changes ------------ -Added two new messages `hashchainlock` and `rawchainlock` which return the hash of the chainlocked block -or the raw block itself respectively. - -Command-line options --------------------- - -Changes in existing cmd-line options: -- `-bip9params` supports optional `window` and `threshold` values now - -New cmd-line options: -- `-watchquorums` -- `-privatesenddenoms` -- `-dip3params` (regtest-only) -- `-llmqchainlocks` (devnet-only) - -Few cmd-line options are no longer supported: `-limitfreerelay`, `-relaypriority`, `-blockprioritysize`, -`-sendfreetransactions`, `-mnconf`, `-mnconflock`, `-smartnodeprivkey` - -See `Help -> Command-line options` in Qt wallet or `raptoreumd --help` for more info. - -Miscellaneous -------------- - -A lot of refactoring, backports, code cleanups and other small fixes were done in this release. - - 0.14.0.0 Change log -=================== - -See detailed [set of changes](https://github.com/raptoreum/raptoreum/compare/v0.13.3.0...raptoreum:v0.14.0.0). - -- [`612a90e8c`](https://github.com/raptoreum/raptoreum/commit/612a90e8c) Set CLIENT_VERSION_IS_RELEASE to true (#2926) -- [`9482f77e5`](https://github.com/raptoreum/raptoreum/commit/9482f77e5) Update help text via gen-manpages.sh (#2929) -- [`211a39d19`](https://github.com/raptoreum/raptoreum/commit/211a39d19) 0.14 release notes draft (#2896) -- [`84162021a`](https://github.com/raptoreum/raptoreum/commit/84162021a) Fix duplicate `-instantsendnotify` invocation (#2925) -- [`38aab0c5e`](https://github.com/raptoreum/raptoreum/commit/38aab0c5e) Add blocks conflicting with ChainLocks to block index (#2923) -- [`394bec483`](https://github.com/raptoreum/raptoreum/commit/394bec483) Skip processing in SyncTransaction when chain is not synced yet (#2920) -- [`c8a80b279`](https://github.com/raptoreum/raptoreum/commit/c8a80b279) Set DIP0008 mainnet activation params (#2915) -- [`040abafe3`](https://github.com/raptoreum/raptoreum/commit/040abafe3) [0.14] Bump chainparams (#2910) -- [`240238b19`](https://github.com/raptoreum/raptoreum/commit/240238b19) Fix db leaks in LLMQ db (#2914) -- [`56f31195d`](https://github.com/raptoreum/raptoreum/commit/56f31195d) Fall back to ReadBlockFromDisk when blockTxs is not filled yet (#2908) -- [`4dc5c0e9e`](https://github.com/raptoreum/raptoreum/commit/4dc5c0e9e) Bump "keepOldConnections" by one for all LLMQ types (#2909) -- [`7696a6fc8`](https://github.com/raptoreum/raptoreum/commit/7696a6fc8) Print inputs on which we voted and quorums used for signing (#2907) -- [`a173e6836`](https://github.com/raptoreum/raptoreum/commit/a173e6836) Implement integration tests for DKG error handling (#2905) -- [`89f6f7591`](https://github.com/raptoreum/raptoreum/commit/89f6f7591) Implement zmq notifications for chainlocked blocks (#2899) -- [`66a2cdeaf`](https://github.com/raptoreum/raptoreum/commit/66a2cdeaf) Properly handle conflicts between ChainLocks and InstantSend (#2904) -- [`b63f7dd39`](https://github.com/raptoreum/raptoreum/commit/b63f7dd39) Fix a crash in `smartnode winners` when `count` is too large (#2902) -- [`357b7279d`](https://github.com/raptoreum/raptoreum/commit/357b7279d) Implement isolate_node/reconnect_isolated_node in tests (#2901) -- [`7fdc66dd8`](https://github.com/raptoreum/raptoreum/commit/7fdc66dd8) Ask for locked TXs after removing conflicting TXs (#2898) -- [`5d05ab17a`](https://github.com/raptoreum/raptoreum/commit/5d05ab17a) Fix PrivateSend log (#2892) -- [`53827a376`](https://github.com/raptoreum/raptoreum/commit/53827a376) Remove code for QDEBUGSTATUS propagation (#2891) -- [`783cb9ca6`](https://github.com/raptoreum/raptoreum/commit/783cb9ca6) Skip CheckCbTxMerkleRoots until assumeValid block (#2890) -- [`4dee7c4a2`](https://github.com/raptoreum/raptoreum/commit/4dee7c4a2) Cache heavy parts of `CalcCbTxMerkleRoot*` (#2885) -- [`b3ed6410f`](https://github.com/raptoreum/raptoreum/commit/b3ed6410f) Be more accurate with denom creation/consumption (#2853) -- [`3d993ee8f`](https://github.com/raptoreum/raptoreum/commit/3d993ee8f) Translations v14 (#2638) -- [`fbd244dde`](https://github.com/raptoreum/raptoreum/commit/fbd244dde) Bail out in few more places when blockchain is not synced yet (#2888) -- [`fd6aaae7f`](https://github.com/raptoreum/raptoreum/commit/fd6aaae7f) Add proTxHash to smartnode list rpc response (#2887) -- [`dd3977523`](https://github.com/raptoreum/raptoreum/commit/dd3977523) More "bench" log for Raptoreum specific parts (#2884) -- [`8ffdcbf99`](https://github.com/raptoreum/raptoreum/commit/8ffdcbf99) A bunch of mostly trivial tweaks/fixes (#2889) -- [`195100161`](https://github.com/raptoreum/raptoreum/commit/195100161) New LLMQ-based IS should have no legacy IS strings in UI and no legacy restrictions (#2883) -- [`7f419ae7f`](https://github.com/raptoreum/raptoreum/commit/7f419ae7f) Accept non-spent LLMQ IS locked outpoints from mempool in PS mixing (#2878) -- [`2652030a2`](https://github.com/raptoreum/raptoreum/commit/2652030a2) Use larger nPruneAfterSizeIn parameter for mapAlreadyAskedFor (#2882) -- [`03021fa53`](https://github.com/raptoreum/raptoreum/commit/03021fa53) Harden DIP3 activation (#2881) -- [`dcdb9dba1`](https://github.com/raptoreum/raptoreum/commit/dcdb9dba1) Add NotifySmartnodeListChanged signal to CClientUIInterface (#2880) -- [`19a9e2f4c`](https://github.com/raptoreum/raptoreum/commit/19a9e2f4c) Report `instantlock: true` for transactions locked via ChainLocks (#2877) -- [`5cfceab86`](https://github.com/raptoreum/raptoreum/commit/5cfceab86) Refactor IS-lock GUI notification and implement a similar one for ChainLocks (#2875) -- [`ed30db713`](https://github.com/raptoreum/raptoreum/commit/ed30db713) Ensure wallet is available and unlocked for some `governance` and `evo` RPCs (#2874) -- [`0c2fdf4da`](https://github.com/raptoreum/raptoreum/commit/0c2fdf4da) Refactor some Raptoreum/mixing-specific wallet functions (#2850) -- [`22ae0bc21`](https://github.com/raptoreum/raptoreum/commit/22ae0bc21) Archive islock hashes when removing confirmed islocks (#2872) -- [`b322b4828`](https://github.com/raptoreum/raptoreum/commit/b322b4828) Wait longer until re-requesting recovered sigs and ISLOCKs from other peers (#2871) -- [`2502aadd7`](https://github.com/raptoreum/raptoreum/commit/2502aadd7) Fix infinite loop in CDBTransactionIterator::SkipDeletedAndOverwritten (#2870) -- [`cd94cbe6f`](https://github.com/raptoreum/raptoreum/commit/cd94cbe6f) Track which TXs are not locked yet and use this info in ProcessPendingRetryLockTxs (#2869) -- [`c4549aca2`](https://github.com/raptoreum/raptoreum/commit/c4549aca2) Change `quorum list` behaviour to list active quorums by default (#2866) -- [`cff9f9717`](https://github.com/raptoreum/raptoreum/commit/cff9f9717) Prefix all bls/quorum threads with `raptoreum-` (#2865) -- [`5e865f9c8`](https://github.com/raptoreum/raptoreum/commit/5e865f9c8) Bump mempool counter on each successful IS lock (#2864) -- [`a67e66143`](https://github.com/raptoreum/raptoreum/commit/a67e66143) Don't disconnect peers on MNAUTH verification failure (#2868) -- [`1d8c7226d`](https://github.com/raptoreum/raptoreum/commit/1d8c7226d) Fix race condition in sendheaders.py (#2862) -- [`0c54e41f2`](https://github.com/raptoreum/raptoreum/commit/0c54e41f2) Retry locking of child TXs in batches instead of per locked parent (#2858) -- [`fbe44761c`](https://github.com/raptoreum/raptoreum/commit/fbe44761c) Don't wake up select if it was already woken up (#2863) -- [`7fe1a4a78`](https://github.com/raptoreum/raptoreum/commit/7fe1a4a78) Also invoke WriteInstantSendLockMined when IS lock comes after the mined block (#2861) -- [`f32f9523b`](https://github.com/raptoreum/raptoreum/commit/f32f9523b) Use lazy BLS signatures more often and don't always verify self-recovered sigs (#2860) -- [`5e8ae2ceb`](https://github.com/raptoreum/raptoreum/commit/5e8ae2ceb) Disable optimistic send in PushMessage by default (#2859) -- [`90b1b7196`](https://github.com/raptoreum/raptoreum/commit/90b1b7196) Move processing of InstantSend locks into its own worker thread (#2857) -- [`ae78360e5`](https://github.com/raptoreum/raptoreum/commit/ae78360e5) Add cache to CQuorumManager::ScanQuorums (#2856) -- [`241f76f9b`](https://github.com/raptoreum/raptoreum/commit/241f76f9b) Collection of minor performance optimizations (#2855) -- [`82a47f543`](https://github.com/raptoreum/raptoreum/commit/82a47f543) Allow testing ChainLocks enforcement with spork19 == 1 (#2854) -- [`e67618ac5`](https://github.com/raptoreum/raptoreum/commit/e67618ac5) Clean up a few GUI related items (#2846) -- [`225c3898d`](https://github.com/raptoreum/raptoreum/commit/225c3898d) Don't skip "safe TX" check when ChainLocks are not enforced yet (#2851) -- [`27b2cd2cc`](https://github.com/raptoreum/raptoreum/commit/27b2cd2cc) Skip required services and port checks when outgoing connections is a MN (#2847) -- [`aeb4c60c8`](https://github.com/raptoreum/raptoreum/commit/aeb4c60c8) Reimplement CMNAuth::NotifySmartnodeListChanged to work with new interface -- [`fa90c0204`](https://github.com/raptoreum/raptoreum/commit/fa90c0204) Also call NotifySmartnodeListChanged when MNs have been updated -- [`db781b32d`](https://github.com/raptoreum/raptoreum/commit/db781b32d) Pass oldList and diff instead of newList into NotifySmartnodeListChanged -- [`b0260e970`](https://github.com/raptoreum/raptoreum/commit/b0260e970) Do not maintain CService in smartnodeQuorumNodes -- [`60788ce32`](https://github.com/raptoreum/raptoreum/commit/60788ce32) Connect to most recently updated address in ThreadOpenSmartnodeConnections -- [`93b1b3d73`](https://github.com/raptoreum/raptoreum/commit/93b1b3d73) Fix shadowing of "addr" -- [`5bebdda71`](https://github.com/raptoreum/raptoreum/commit/5bebdda71) Add GetValidMNByService to CDeterministicMNList -- [`5d94d6bdf`](https://github.com/raptoreum/raptoreum/commit/5d94d6bdf) Remove unused CConnman::ForEachQuorumMember -- [`1ba8694cd`](https://github.com/raptoreum/raptoreum/commit/1ba8694cd) Various fixes for RemoveInvalidVotes() (#2845) -- [`b5bc7c9da`](https://github.com/raptoreum/raptoreum/commit/b5bc7c9da) Call HandleFullyConfirmedBlock when ChainLocks are enabled but not enforced (#2844) -- [`9fa09b974`](https://github.com/raptoreum/raptoreum/commit/9fa09b974) CBLSWrapper::SetHexStr() should not accept non-hex strings (#2843) -- [`0f0d8eaf4`](https://github.com/raptoreum/raptoreum/commit/0f0d8eaf4) Add RPC for BLS secret to public key (#2841) -- [`6982d9854`](https://github.com/raptoreum/raptoreum/commit/6982d9854) Ignore cache files on reindex (#2840) -- [`f8bedba7c`](https://github.com/raptoreum/raptoreum/commit/f8bedba7c) Don't retry locks when new IS system is disabled (#2837) -- [`92feade81`](https://github.com/raptoreum/raptoreum/commit/92feade81) Remove unused forward declaration (#2838) -- [`206e5a1b4`](https://github.com/raptoreum/raptoreum/commit/206e5a1b4) Use big endian inversed height in CInstantSendDb -- [`4b9f6cd3a`](https://github.com/raptoreum/raptoreum/commit/4b9f6cd3a) Use big endian inversed height in BuildInversedHeightKey -- [`53656b3e8`](https://github.com/raptoreum/raptoreum/commit/53656b3e8) Compare CDataStream internal vector with unsigned comparison -- [`dd21d046f`](https://github.com/raptoreum/raptoreum/commit/dd21d046f) Avoid unnecessary calls to parentIt->GetKey -- [`d34ec7866`](https://github.com/raptoreum/raptoreum/commit/d34ec7866) Update wallet transactions when confirmed IS locks are removed -- [`b897505f8`](https://github.com/raptoreum/raptoreum/commit/b897505f8) Remove the need for maintaining the last ChainLocked block in the DB -- [`8e7083cb8`](https://github.com/raptoreum/raptoreum/commit/8e7083cb8) Use db.RemoveConfirmedISLocks() in NotifyChainLock to remove confirmed locks -- [`4577438e8`](https://github.com/raptoreum/raptoreum/commit/4577438e8) Implement RemoveConfirmedInstantSendLocks to prune confirmed IS locks from DB -- [`d6e775851`](https://github.com/raptoreum/raptoreum/commit/d6e775851) Keep track of when IS locks were mined -- [`0a6416e06`](https://github.com/raptoreum/raptoreum/commit/0a6416e06) Wipe llmq db on reindex (#2835) -- [`4af5ea8a7`](https://github.com/raptoreum/raptoreum/commit/4af5ea8a7) Remove netfulfilledman.h duplicate (#2834) -- [`208406df7`](https://github.com/raptoreum/raptoreum/commit/208406df7) Re-introduce nInstantSendKeepLock check for LLMQ-based IS when spork19 is OFF (#2829) -- [`7d765a0fc`](https://github.com/raptoreum/raptoreum/commit/7d765a0fc) Track best block to later know if a DB upgrade is needed -- [`1a25c2084`](https://github.com/raptoreum/raptoreum/commit/1a25c2084) Apply suggestions from code review -- [`282cb697a`](https://github.com/raptoreum/raptoreum/commit/282cb697a) Use version 2 CCbTx in create_coinbase to fix test failures -- [`adc101a11`](https://github.com/raptoreum/raptoreum/commit/adc101a11) Implement quorum commitment merkle root tests in dip4-coinbasemerkleroots.py -- [`40ad06e77`](https://github.com/raptoreum/raptoreum/commit/40ad06e77) Return the fresh quorum hash from mine_quorum -- [`17b9318a0`](https://github.com/raptoreum/raptoreum/commit/17b9318a0) Mine SIGN_HEIGHT_OFFSET additional blocks after the quorum commitment -- [`5e832e2fa`](https://github.com/raptoreum/raptoreum/commit/5e832e2fa) Implement support for CbTx version 2 (with quorum merkle root) -- [`b1b41f02a`](https://github.com/raptoreum/raptoreum/commit/b1b41f02a) Fix a crash in mininode.py when inventory type is unknown -- [`44a3b9c90`](https://github.com/raptoreum/raptoreum/commit/44a3b9c90) Don't use pindex->GetBlockHash() in ProcessCommitment -- [`f9dbe3ed5`](https://github.com/raptoreum/raptoreum/commit/f9dbe3ed5) Track in which block a quorum commitment was mined -- [`ba459663b`](https://github.com/raptoreum/raptoreum/commit/ba459663b) Add deletedQuorums and newQuorums to CSimplifiedMNListEntry -- [`8f7929bed`](https://github.com/raptoreum/raptoreum/commit/8f7929bed) Implement and enforce quorum commitment merkle roots in coinbases -- [`07620746a`](https://github.com/raptoreum/raptoreum/commit/07620746a) Implement GetMined(AndActive)CommitmentsUntilBlock and use it in ScanQuorums -- [`d5250a333`](https://github.com/raptoreum/raptoreum/commit/d5250a333) Track at which height a quorum commitment was mined -- [`806948f90`](https://github.com/raptoreum/raptoreum/commit/806948f90) Store the full commitment in CQuorum -- [`b67f6a0dc`](https://github.com/raptoreum/raptoreum/commit/b67f6a0dc) Implement CDBTransactionIterator -- [`6d1599bc6`](https://github.com/raptoreum/raptoreum/commit/6d1599bc6) Change CDBTransaction to compare keys by their serialized form -- [`5482083eb`](https://github.com/raptoreum/raptoreum/commit/5482083eb) Support passing CDataStream as key into CDBWrapper/CDBBatch/CDBIterator -- [`c23dfaf57`](https://github.com/raptoreum/raptoreum/commit/c23dfaf57) Update qa/rpc-tests/dip4-coinbasemerkleroots.py -- [`9f2e5d085`](https://github.com/raptoreum/raptoreum/commit/9f2e5d085) Use FromHex to deserialize block header -- [`999848432`](https://github.com/raptoreum/raptoreum/commit/999848432) Implement dip4-coinbasemerkleroots.py integration tests -- [`ade5760a9`](https://github.com/raptoreum/raptoreum/commit/ade5760a9) Allow registering MNs without actually starting them -- [`ef6b6a1e6`](https://github.com/raptoreum/raptoreum/commit/ef6b6a1e6) Implement support for GETMNLISTD and MNLISTDIFF P2P message in mininode.py -- [`585b9c281`](https://github.com/raptoreum/raptoreum/commit/585b9c281) Make CBlock.get_merkle_root static -- [`1e0bdbc9b`](https://github.com/raptoreum/raptoreum/commit/1e0bdbc9b) Implement CPartialMerkleTree and CMerkleBlock in mininode.py -- [`d8778f555`](https://github.com/raptoreum/raptoreum/commit/d8778f555) Implement CService in mininode.py -- [`02480402b`](https://github.com/raptoreum/raptoreum/commit/02480402b) Implement deser_dyn_bitset and ser_dyn_bitset in mininode.py -- [`b0850fad0`](https://github.com/raptoreum/raptoreum/commit/b0850fad0) Do not skip pushing of vMatch and vHashes in CMerkleBlock (#2826) -- [`58589fb50`](https://github.com/raptoreum/raptoreum/commit/58589fb50) Trivial: Fix a couple typos (#2818) -- [`992922c49`](https://github.com/raptoreum/raptoreum/commit/992922c49) Specify DIP3 enforcement block height/hash for mainnet params -- [`a370bbfe3`](https://github.com/raptoreum/raptoreum/commit/a370bbfe3) Update immer library to current master (0a718d2d76bab6ebdcf43de943bd6c7d2dbfe2f9) (#2821) -- [`9f04855ae`](https://github.com/raptoreum/raptoreum/commit/9f04855ae) Fix blsWorker (#2820) -- [`377dd3b82`](https://github.com/raptoreum/raptoreum/commit/377dd3b82) There can be no two votes which differ by the outcome only (#2819) -- [`a87909ec3`](https://github.com/raptoreum/raptoreum/commit/a87909ec3) Keep the most recent gobject votes only (#2815) -- [`010752d4e`](https://github.com/raptoreum/raptoreum/commit/010752d4e) Set fAllowMultiplePorts to true for testnet (#2817) -- [`74d999e56`](https://github.com/raptoreum/raptoreum/commit/74d999e56) Remove watchdogs from existence (#2816) -- [`bfc288afb`](https://github.com/raptoreum/raptoreum/commit/bfc288afb) Update getblock rpc help text (#2814) -- [`aeba4afce`](https://github.com/raptoreum/raptoreum/commit/aeba4afce) Fix vote ratecheck (#2813) -- [`ad7defba9`](https://github.com/raptoreum/raptoreum/commit/ad7defba9) Drop all kind of invalid votes from all types of gobjects (#2812) -- [`e75760fa7`](https://github.com/raptoreum/raptoreum/commit/e75760fa7) Update "listtransactions" and "listsinceblock" RPC help (#2811) -- [`8987a6c3e`](https://github.com/raptoreum/raptoreum/commit/8987a6c3e) Update "debug" rpc help text (#2810) -- [`4b4234f39`](https://github.com/raptoreum/raptoreum/commit/4b4234f39) Refactor: fix layer violation for LLMQ based IS in UI (#2808) -- [`614cb6c2e`](https://github.com/raptoreum/raptoreum/commit/614cb6c2e) Fix getgovernanceinfo rpc help text (#2809) -- [`39ba45f3c`](https://github.com/raptoreum/raptoreum/commit/39ba45f3c) Show chainlocked txes as fully confirmed (#2807) -- [`f87035d14`](https://github.com/raptoreum/raptoreum/commit/f87035d14) Fix qt tests and actually run them (#2801) -- [`162acc5a0`](https://github.com/raptoreum/raptoreum/commit/162acc5a0) Fix potential deadlock in LoadWallet() (#2806) -- [`81eeff1c5`](https://github.com/raptoreum/raptoreum/commit/81eeff1c5) Fix devnet genesis check in InitBlockIndex() (#2805) -- [`4d8ef3512`](https://github.com/raptoreum/raptoreum/commit/4d8ef3512) Reset local/static cache in LogAcceptCategory when categories change (#2804) -- [`4a79f7a70`](https://github.com/raptoreum/raptoreum/commit/4a79f7a70) Few trivial cleanups (#2803) -- [`5057ad511`](https://github.com/raptoreum/raptoreum/commit/5057ad511) Drop DBG macros uses from governance modules (#2802) -- [`29a9e24b4`](https://github.com/raptoreum/raptoreum/commit/29a9e24b4) Prepare Raptoreum-related stuff before starting ThreadImport (#2800) -- [`8f280f346`](https://github.com/raptoreum/raptoreum/commit/8f280f346) Split "llmq" debug category into "llmq", "llmq-dkg" and "llmq-sigs" (#2799) -- [`15c720dd4`](https://github.com/raptoreum/raptoreum/commit/15c720dd4) Stop tracking interested/participating nodes and send/announce to MNAUTH peers (#2798) -- [`f20620b0a`](https://github.com/raptoreum/raptoreum/commit/f20620b0a) Also handle MNAUTH on non-smartnodes (#2797) -- [`b18f8cb77`](https://github.com/raptoreum/raptoreum/commit/b18f8cb77) Implement MNAUTH and allow unlimited inbound MN connections (#2790) -- [`aae985746`](https://github.com/raptoreum/raptoreum/commit/aae985746) Update log categories in help message and in decomposition of "raptoreum" category (#2792) -- [`7b76e7abb`](https://github.com/raptoreum/raptoreum/commit/7b76e7abb) Implement BIP9 style deployment for DIP8/ChainLocks and fix a bug with late headers (#2793) -- [`3ead8cd85`](https://github.com/raptoreum/raptoreum/commit/3ead8cd85) Fix potential travis failures due to network failures (#2795) -- [`02db06658`](https://github.com/raptoreum/raptoreum/commit/02db06658) Fix loop in CLLMQUtils::GetQuorumConnections to add at least 2 connections (#2796) -- [`071b60ded`](https://github.com/raptoreum/raptoreum/commit/071b60ded) Bump MAX_OUTBOUND_SMARTNODE_CONNECTIONS to 250 on smartnodes (#2791) -- [`0ed5ae05a`](https://github.com/raptoreum/raptoreum/commit/0ed5ae05a) Fix bug in GetNextSmartnodeForPayment (#2789) -- [`7135f01a1`](https://github.com/raptoreum/raptoreum/commit/7135f01a1) Fix revoke reason check for ProUpRevTx (#2787) -- [`658ce9eff`](https://github.com/raptoreum/raptoreum/commit/658ce9eff) Apply Bloom filters to DIP2 transactions extra payload (#2786) -- [`a1e4ac21f`](https://github.com/raptoreum/raptoreum/commit/a1e4ac21f) Disable logging of libevent debug messages (#2794) -- [`9a1362abd`](https://github.com/raptoreum/raptoreum/commit/9a1362abd) Introduce SENDDSQUEUE to indicate that a node is interested in DSQ messages (#2785) -- [`9e70209e4`](https://github.com/raptoreum/raptoreum/commit/9e70209e4) Honor bloom filters when announcing LLMQ based IS locks (#2784) -- [`12274e578`](https://github.com/raptoreum/raptoreum/commit/12274e578) Introduce "qsendrecsigs" to indicate that plain recovered sigs should be sent (#2783) -- [`60a91848a`](https://github.com/raptoreum/raptoreum/commit/60a91848a) Skip mempool.dat when wallet is starting in "zap" mode (#2782) -- [`b87821047`](https://github.com/raptoreum/raptoreum/commit/b87821047) Make LLMQ/InstantSend/ChainLocks code less spammy (#2781) -- [`591b0185c`](https://github.com/raptoreum/raptoreum/commit/591b0185c) Bump proto version and only send LLMQ related messages to v14 nodes (#2780) -- [`c3602372c`](https://github.com/raptoreum/raptoreum/commit/c3602372c) Implement retroactive IS locking of transactions first seen in blocks instead of mempool (#2770) -- [`9df6acdc2`](https://github.com/raptoreum/raptoreum/commit/9df6acdc2) Disable in-wallet miner for win/macos Travis/Gitian builds (#2778) -- [`5299d3933`](https://github.com/raptoreum/raptoreum/commit/5299d3933) Multiple refactorings/fixes for LLMQ bases InstantSend and ChainLocks (#2779) -- [`a5d2edbe0`](https://github.com/raptoreum/raptoreum/commit/a5d2edbe0) Relay spork after updating internal spork maps (#2777) -- [`e52763d21`](https://github.com/raptoreum/raptoreum/commit/e52763d21) Refactor and fix instantsend tests/utils (#2776) -- [`25205fd46`](https://github.com/raptoreum/raptoreum/commit/25205fd46) RPC - Remove P2PKH message from protx help (#2773) -- [`a69a5cf4a`](https://github.com/raptoreum/raptoreum/commit/a69a5cf4a) Use smaller (3 out of 5) quorums for regtest/Travis (#2774) -- [`396ebc2dc`](https://github.com/raptoreum/raptoreum/commit/396ebc2dc) Fix tests after 2768 (#2772) -- [`6f90cf7a1`](https://github.com/raptoreum/raptoreum/commit/6f90cf7a1) Merge bitcoin#9602: Remove coin age priority and free transactions - implementation (#2768) -- [`6350adf1b`](https://github.com/raptoreum/raptoreum/commit/6350adf1b) Slightly refactor ProcessInstantSendLock (#2767) -- [`3a1aeb000`](https://github.com/raptoreum/raptoreum/commit/3a1aeb000) Multiple fixes/refactorings for ChainLocks (#2765) -- [`152a78eab`](https://github.com/raptoreum/raptoreum/commit/152a78eab) Add compatibility code to P2PFingerprintTest until we catch up with backports -- [`72af215a3`](https://github.com/raptoreum/raptoreum/commit/72af215a3) Fix CreateNewBlock_validity by not holding cs_main when calling createAndProcessEmptyBlock -- [`95192d5b5`](https://github.com/raptoreum/raptoreum/commit/95192d5b5) Require no cs_main lock for ProcessNewBlock/ActivateBestChain -- [`2eb553174`](https://github.com/raptoreum/raptoreum/commit/2eb553174) Avoid cs_main in net_processing ActivateBestChain calls -- [`f69c4370d`](https://github.com/raptoreum/raptoreum/commit/f69c4370d) Refactor ProcessGetData in anticipation of avoiding cs_main for ABC -- [`7f54372bb`](https://github.com/raptoreum/raptoreum/commit/7f54372bb) Create new mutex for orphans, no cs_main in PLV::BlockConnected -- [`6085de378`](https://github.com/raptoreum/raptoreum/commit/6085de378) Add ability to assert a lock is not held in DEBUG_LOCKORDER -- [`9344dee8a`](https://github.com/raptoreum/raptoreum/commit/9344dee8a) Merge #11580: Do not send (potentially) invalid headers in response to getheaders -- [`d1a602260`](https://github.com/raptoreum/raptoreum/commit/d1a602260) Merge #11113: [net] Ignore getheaders requests for very old side blocks -- [`d1db98c67`](https://github.com/raptoreum/raptoreum/commit/d1db98c67) Merge #9665: Use cached [compact] blocks to respond to getdata messages -- [`0905b911d`](https://github.com/raptoreum/raptoreum/commit/0905b911d) Actually use cached most recent compact block -- [`cd0f94fb5`](https://github.com/raptoreum/raptoreum/commit/cd0f94fb5) Give wait_for_quorum_phase more time -- [`4ae52758b`](https://github.com/raptoreum/raptoreum/commit/4ae52758b) Remove size check in CDKGSessionManager::GetVerifiedContributions -- [`e21da2d99`](https://github.com/raptoreum/raptoreum/commit/e21da2d99) Move simple PoSe tests into llmq-simplepose.py -- [`6488135f4`](https://github.com/raptoreum/raptoreum/commit/6488135f4) Track index into self.nodes in mninfo -- [`f30ea6dfd`](https://github.com/raptoreum/raptoreum/commit/f30ea6dfd) Replace BITCOIN_UNORDERED_LRU_CACHE_H with RAPTOREUM_UNORDERED_LRU_CACHE_H -- [`e763310b5`](https://github.com/raptoreum/raptoreum/commit/e763310b5) Add missing LOCK(cs_main) -- [`3a5e7c433`](https://github.com/raptoreum/raptoreum/commit/3a5e7c433) Do not hold cs_vNodes in CSigSharesManager::SendMessages() for too long (#2758) -- [`fbf0dcb08`](https://github.com/raptoreum/raptoreum/commit/fbf0dcb08) Various small cleanups (#2761) -- [`588eb30b8`](https://github.com/raptoreum/raptoreum/commit/588eb30b8) Fix deadlock in CSigSharesManager::SendMessages (#2757) -- [`7b24f9b8b`](https://github.com/raptoreum/raptoreum/commit/7b24f9b8b) Drop --c++11 brew flag in build-osx.md (#2755) -- [`ac00c6628`](https://github.com/raptoreum/raptoreum/commit/ac00c6628) Make InstantSend locks persistent -- [`293c9ad6a`](https://github.com/raptoreum/raptoreum/commit/293c9ad6a) Use unordered_lru_cache in CRecoveredSigsDb -- [`9e4aa1f98`](https://github.com/raptoreum/raptoreum/commit/9e4aa1f98) Implement unordered_lru_cache -- [`609114a80`](https://github.com/raptoreum/raptoreum/commit/609114a80) Code review: re-add string cast in mininode.py -- [`85ffc1d64`](https://github.com/raptoreum/raptoreum/commit/85ffc1d64) drop `swap_outputs_in_rawtx` and `DecimalEncoder` in smartfees.py -- [`bc593c84b`](https://github.com/raptoreum/raptoreum/commit/bc593c84b) Revert "Fix use of missing self.log in blockchain.py" -- [`0e91ebcf4`](https://github.com/raptoreum/raptoreum/commit/0e91ebcf4) Use logging framework in Raptoreum specific tests -- [`dd1245c2a`](https://github.com/raptoreum/raptoreum/commit/dd1245c2a) Update dnsseed-policy.md (#2751) -- [`f351145e6`](https://github.com/raptoreum/raptoreum/commit/f351145e6) Use GetVoteForId instead of maintaining votes on inputs -- [`d4cf78fe2`](https://github.com/raptoreum/raptoreum/commit/d4cf78fe2) Add HasVotedOnId/GetVoteForId to CSigningManager -- [`43e1bf674`](https://github.com/raptoreum/raptoreum/commit/43e1bf674) Add key prefix to "rs_" for CRecoveredSigsDb keys -- [`61e10f651`](https://github.com/raptoreum/raptoreum/commit/61e10f651) Use llmqDb for CRecoveredSigsDb -- [`b2cd1db40`](https://github.com/raptoreum/raptoreum/commit/b2cd1db40) Don't use CEvoDB in CDKGSessionManager and instead use llmqDb -- [`e2cad1bd6`](https://github.com/raptoreum/raptoreum/commit/e2cad1bd6) Introduce global llmq::llmqDb instance of CDBWrapper -- [`acb52f6ec`](https://github.com/raptoreum/raptoreum/commit/acb52f6ec) Don't pass CEvoDB to CDKGSessionHandler and CDKGSession -- [`06fc65559`](https://github.com/raptoreum/raptoreum/commit/06fc65559) Actually remove from finalInstantSendLocks in CInstantSendManager::RemoveFinalISLock -- [`041a1c26d`](https://github.com/raptoreum/raptoreum/commit/041a1c26d) Move safe TX checks into TestForBlock and TestPackageTransactions -- [`4d3365ddb`](https://github.com/raptoreum/raptoreum/commit/4d3365ddb) Completely disable InstantSend while filling mempool in autoix-mempool.py -- [`fae33e03a`](https://github.com/raptoreum/raptoreum/commit/fae33e03a) Let ProcessPendingReconstructedRecoveredSigs return void instead of bool -- [`f8f867a6b`](https://github.com/raptoreum/raptoreum/commit/f8f867a6b) Sync blocks after generating in mine_quorum() -- [`3e60d2d2d`](https://github.com/raptoreum/raptoreum/commit/3e60d2d2d) Adjust LLMQ based InstantSend tests for new spork20 -- [`41a71fe44`](https://github.com/raptoreum/raptoreum/commit/41a71fe44) update autoix-mempool.py to test both "old" and "new" InstantSend (and fix CheckCanLock to respect mempool limits) -- [`843b6d7a9`](https://github.com/raptoreum/raptoreum/commit/843b6d7a9) update p2p-autoinstantsend.py to test both "old" and "new" InstantSend -- [`a8da11ac5`](https://github.com/raptoreum/raptoreum/commit/a8da11ac5) update p2p-instantsend.py to test both "old" and "new" InstantSend -- [`55152cb31`](https://github.com/raptoreum/raptoreum/commit/55152cb31) Move IS block filtering into ConnectBlock -- [`2299ee283`](https://github.com/raptoreum/raptoreum/commit/2299ee283) Rename IXLOCK to ISLOCK and InstantX to InstantSend -- [`f5dcb00ac`](https://github.com/raptoreum/raptoreum/commit/f5dcb00ac) Introduce spork SPORK_20_INSTANTSEND_LLMQ_BASED to switch between new/old system -- [`280690792`](https://github.com/raptoreum/raptoreum/commit/280690792) Combine loops in CChainLocksHandler::NewPoWValidBlock -- [`9e9081110`](https://github.com/raptoreum/raptoreum/commit/9e9081110) Add override keywork to CDSNotificationInterface::NotifyChainLock -- [`e2f99f4ae`](https://github.com/raptoreum/raptoreum/commit/e2f99f4ae) Set llmqForInstantSend for mainnet and testnet -- [`5b8344e8f`](https://github.com/raptoreum/raptoreum/commit/5b8344e8f) Use scheduleFromNow instead of schedule+boost::chrono -- [`f44f09ca0`](https://github.com/raptoreum/raptoreum/commit/f44f09ca0) Fix crash in BlockAssembler::addPackageTxs -- [`baf8b81c4`](https://github.com/raptoreum/raptoreum/commit/baf8b81c4) Fix no-wallet build -- [`2a7a5c633`](https://github.com/raptoreum/raptoreum/commit/2a7a5c633) Only sign ChainLocks when all included TXs are "safe" -- [`96291e7a0`](https://github.com/raptoreum/raptoreum/commit/96291e7a0) Cheaper/Faster bailout from TrySignChainTip when already signed before -- [`0a5e8eb86`](https://github.com/raptoreum/raptoreum/commit/0a5e8eb86) Move ChainLock signing into TrySignChainTip and call it periodically -- [`bd7edc8ae`](https://github.com/raptoreum/raptoreum/commit/bd7edc8ae) Track txids of new blocks and first-seen time of TXs in CChainLocksHandler -- [`7945192ff`](https://github.com/raptoreum/raptoreum/commit/7945192ff) Enforce IX locks from the new system -- [`dc97835ec`](https://github.com/raptoreum/raptoreum/commit/dc97835ec) Disable explicit lock requests when the new IX system is active -- [`68cfdc932`](https://github.com/raptoreum/raptoreum/commit/68cfdc932) Also call ProcessTx from sendrawtransaction and RelayWalletTransaction -- [`1d2d370cd`](https://github.com/raptoreum/raptoreum/commit/1d2d370cd) Whenever we check for locked TXs, also check for the new system having a lock -- [`3a6cc2cc1`](https://github.com/raptoreum/raptoreum/commit/3a6cc2cc1) Show "verified via LLMQ based InstantSend" in GUI TX status -- [`34a8b2997`](https://github.com/raptoreum/raptoreum/commit/34a8b2997) Disable old IX code when the new system is active -- [`5ff4db0a0`](https://github.com/raptoreum/raptoreum/commit/5ff4db0a0) Downgrade TXLOCKREQUEST to TX when new IX system is active -- [`1959f3e4a`](https://github.com/raptoreum/raptoreum/commit/1959f3e4a) Handle incoming TXs by calling CInstantXManager::ProcessTx -- [`83dbcc483`](https://github.com/raptoreum/raptoreum/commit/83dbcc483) Implement CInstantSendManager and related P2P messages -- [`5bbc12274`](https://github.com/raptoreum/raptoreum/commit/5bbc12274) Implement PushReconstructedRecoveredSig in CSigningManager -- [`2bbac8ff7`](https://github.com/raptoreum/raptoreum/commit/2bbac8ff7) Introduce NotifyChainLock signal and invoke it when CLSIGs get processed -- [`e47af29d4`](https://github.com/raptoreum/raptoreum/commit/e47af29d4) Fix "chainlock" in WalletTxToJSON (#2748) -- [`e21d8d6b9`](https://github.com/raptoreum/raptoreum/commit/e21d8d6b9) Fix error message for invalid voting addresses (#2747) -- [`80891ee6f`](https://github.com/raptoreum/raptoreum/commit/80891ee6f) Make -smartnodeblsprivkey mandatory when -smartnode is given (#2745) -- [`521d4ae08`](https://github.com/raptoreum/raptoreum/commit/521d4ae08) Implement 2-stage commit for CEvoDB to avoid inconsistencies after crashes (#2744) -- [`e63cdadc9`](https://github.com/raptoreum/raptoreum/commit/e63cdadc9) Add a button/context menu items to show QR codes for addresses (#2741) -- [`b6177740c`](https://github.com/raptoreum/raptoreum/commit/b6177740c) Add collateraladdress into smartnode/protx list rpc output (#2740) -- [`b5466e20a`](https://github.com/raptoreum/raptoreum/commit/b5466e20a) Add "chainlock" field to more rpcs (#2743) -- [`8dd934922`](https://github.com/raptoreum/raptoreum/commit/8dd934922) Don't be too harsh for invalid CLSIGs (#2742) -- [`a34fb6d6f`](https://github.com/raptoreum/raptoreum/commit/a34fb6d6f) Fix banning when local node doesn't have the vvec (#2739) -- [`4a495c6b4`](https://github.com/raptoreum/raptoreum/commit/4a495c6b4) Only include selected TX types into CMerkleBlock (#2737) -- [`0db2d1596`](https://github.com/raptoreum/raptoreum/commit/0db2d1596) code review and reset file perms -- [`f971da831`](https://github.com/raptoreum/raptoreum/commit/f971da831) Stop g_connman first before deleting it (#2734) -- [`9eb0ca704`](https://github.com/raptoreum/raptoreum/commit/9eb0ca704) Ignore sig share inv messages when we don't have the quorum vvec (#2733) -- [`080b59a57`](https://github.com/raptoreum/raptoreum/commit/080b59a57) Backport bitcoin#14385: qt: avoid system harfbuzz and bz2 (#2732) -- [`2041186f4`](https://github.com/raptoreum/raptoreum/commit/2041186f4) On timeout, print members proTxHashes from members which did not send a share (#2731) -- [`ea90296b6`](https://github.com/raptoreum/raptoreum/commit/ea90296b6) Actually start the timers for sig share and recSig verification (#2730) -- [`5c84cab0f`](https://github.com/raptoreum/raptoreum/commit/5c84cab0f) Send/Receive multiple messages as part of one P2P message in CSigSharesManager (#2729) -- [`d2573c43b`](https://github.com/raptoreum/raptoreum/commit/d2573c43b) Only return from wait_for_chainlock when the block is actually processed (#2728) -- [`6ac49da24`](https://github.com/raptoreum/raptoreum/commit/6ac49da24) Send QSIGSESANN messages when sending first message for a session -- [`8ce8cb9ca`](https://github.com/raptoreum/raptoreum/commit/8ce8cb9ca) Remove MarkXXX methods from CSigSharesNodeState -- [`fa25728ca`](https://github.com/raptoreum/raptoreum/commit/fa25728ca) Use new sessionId based session management in CSigSharesManager -- [`34e3f8eb5`](https://github.com/raptoreum/raptoreum/commit/34e3f8eb5) Implement session management based on session ids and announcements -- [`7372f6f10`](https://github.com/raptoreum/raptoreum/commit/7372f6f10) Move RebuildSigShare from CBatchedSigShares to CSigSharesManager -- [`55a6182b1`](https://github.com/raptoreum/raptoreum/commit/55a6182b1) Introduce QSIGSESANN/CSigSesAnn P2P message -- [`80375a0b4`](https://github.com/raptoreum/raptoreum/commit/80375a0b4) Change CSigSharesInv and CBatchedSigShares to be sessionId based -- [`9b4285b1c`](https://github.com/raptoreum/raptoreum/commit/9b4285b1c) Use salted hashing for keys for unordered maps/sets in LLMQ code -- [`b5462f524`](https://github.com/raptoreum/raptoreum/commit/b5462f524) Implement std::unordered_map/set compatible hasher classes for salted hashes -- [`c52e8402c`](https://github.com/raptoreum/raptoreum/commit/c52e8402c) Remove now obsolete TODO comment above CRecoveredSigsDb -- [`e83e32b95`](https://github.com/raptoreum/raptoreum/commit/e83e32b95) Add in-memory cache for CRecoveredSigsDb::HasRecoveredSigForHash -- [`677c0040c`](https://github.com/raptoreum/raptoreum/commit/677c0040c) Add in-memory cache to CQuorumBlockProcessor::HasMinedCommitment -- [`f305cf77b`](https://github.com/raptoreum/raptoreum/commit/f305cf77b) Multiple fixes and optimizations for LLMQs and ChainLocks (#2724) -- [`c3eb0c788`](https://github.com/raptoreum/raptoreum/commit/c3eb0c788) reset file perms -- [`c17356efc`](https://github.com/raptoreum/raptoreum/commit/c17356efc) Merge #9970: Improve readability of segwit.py, smartfees.py -- [`ee6e5654e`](https://github.com/raptoreum/raptoreum/commit/ee6e5654e) Merge #9505: Prevector Quick Destruct -- [`c4a3cd6a1`](https://github.com/raptoreum/raptoreum/commit/c4a3cd6a1) Merge #8665: Assert all the things! -- [`b09e3e080`](https://github.com/raptoreum/raptoreum/commit/b09e3e080) Merge #9977: QA: getblocktemplate_longpoll.py should always use >0 fee tx -- [`e8df27f8e`](https://github.com/raptoreum/raptoreum/commit/e8df27f8e) Merge #9984: devtools: Make github-merge compute SHA512 from git, instead of worktree -- [`c55e019bf`](https://github.com/raptoreum/raptoreum/commit/c55e019bf) Merge #9940: Fix verify-commits on OSX, update for new bad Tree-SHA512, point travis to different keyservers -- [`f9a2e4c4f`](https://github.com/raptoreum/raptoreum/commit/f9a2e4c4f) Merge #9514: release: Windows signing script -- [`ee2048ae4`](https://github.com/raptoreum/raptoreum/commit/ee2048ae4) Merge #9830: Add safe flag to listunspent result -- [`914bd7877`](https://github.com/raptoreum/raptoreum/commit/914bd7877) Merge #9972: Fix extended rpc tests broken by #9768 -- [`dad8c67d3`](https://github.com/raptoreum/raptoreum/commit/dad8c67d3) Merge #9768: [qa] Add logging to test_framework.py -- [`c75d7dc83`](https://github.com/raptoreum/raptoreum/commit/c75d7dc83) Merge #9962: [trivial] Fix typo in rpc/protocol.h -- [`49b743e39`](https://github.com/raptoreum/raptoreum/commit/49b743e39) Merge #9538: [util] Remove redundant call to get() on smart pointer (thread_specific_ptr) -- [`e5c4a67a2`](https://github.com/raptoreum/raptoreum/commit/e5c4a67a2) Merge #9916: Fix msvc compiler error C4146 (minus operator applied to unsigned type) -- [`fcd3b4fd4`](https://github.com/raptoreum/raptoreum/commit/fcd3b4fd4) Disallow new proposals using legacy serialization (#2722) -- [`668b84b1e`](https://github.com/raptoreum/raptoreum/commit/668b84b1e) Fix stacktraces compilation issues (#2721) -- [`0fd1fb7d5`](https://github.com/raptoreum/raptoreum/commit/0fd1fb7d5) Don't build docker image when running Travis job on some another repo (#2718) -- [`48d92f116`](https://github.com/raptoreum/raptoreum/commit/48d92f116) Implement optional pretty printed stacktraces (#2420) -- [`0b552be20`](https://github.com/raptoreum/raptoreum/commit/0b552be20) Fix file permissions broken in 2682 (#2717) -- [`74bb23cac`](https://github.com/raptoreum/raptoreum/commit/74bb23cac) Add link to bugcrowd in issue template (#2716) -- [`252ee89c3`](https://github.com/raptoreum/raptoreum/commit/252ee89c3) Implement new algo for quorum connections (#2710) -- [`104c6e776`](https://github.com/raptoreum/raptoreum/commit/104c6e776) Cleanup successful sessions before doing timeout check (#2712) -- [`26db020d1`](https://github.com/raptoreum/raptoreum/commit/26db020d1) Separate init/destroy and start/stop steps in LLMQ flow (#2709) -- [`9f5869032`](https://github.com/raptoreum/raptoreum/commit/9f5869032) Avoid using ordered maps in LLMQ signing code (#2708) -- [`bb90eb4bf`](https://github.com/raptoreum/raptoreum/commit/bb90eb4bf) backports-0.15-pr6 code review -- [`7a192e2e4`](https://github.com/raptoreum/raptoreum/commit/7a192e2e4) Optimize sleeping behavior in CSigSharesManager::WorkThreadMain (#2707) -- [`d7bd0954f`](https://github.com/raptoreum/raptoreum/commit/d7bd0954f) Use pipe() together with fcntl instead of pipe2() -- [`742a25898`](https://github.com/raptoreum/raptoreum/commit/742a25898) Implement caching in CRecoveredSigsDb -- [`500b9c89a`](https://github.com/raptoreum/raptoreum/commit/500b9c89a) Use CBLSLazySignature in CBatchedSigShares -- [`02b68885a`](https://github.com/raptoreum/raptoreum/commit/02b68885a) Implement CBLSLazySignature for lazy serialization/deserialization -- [`6e8f50aa5`](https://github.com/raptoreum/raptoreum/commit/6e8f50aa5) Faster default-initialization of BLS primitives by re-using the null-hash -- [`c03480d20`](https://github.com/raptoreum/raptoreum/commit/c03480d20) Disable optimistic sending when pushing sig share related messages -- [`acb87895f`](https://github.com/raptoreum/raptoreum/commit/acb87895f) Implement WakeupSelect() to allow preliminary wakeup after message push -- [`cf2932098`](https://github.com/raptoreum/raptoreum/commit/cf2932098) Allow to disable optimistic send in PushMessage() -- [`bedfc262e`](https://github.com/raptoreum/raptoreum/commit/bedfc262e) Rework handling of CSigSharesManager worker thread (#2703) -- [`3e4286a58`](https://github.com/raptoreum/raptoreum/commit/3e4286a58) Less cs_main locks in quorums (#2702) -- [`3bbc75fc4`](https://github.com/raptoreum/raptoreum/commit/3bbc75fc4) Reintroduce spork15 so that it's relayed by 0.14 nodes (#2701) -- [`b71a3f48d`](https://github.com/raptoreum/raptoreum/commit/b71a3f48d) Remove not used and not implemented methods from net.h (#2700) -- [`c0cb27465`](https://github.com/raptoreum/raptoreum/commit/c0cb27465) Fix incorrect usage of begin() when genesis block is requested in "protx diff" (#2699) -- [`b239bb24a`](https://github.com/raptoreum/raptoreum/commit/b239bb24a) Do not process blocks in CDeterministicMNManager before dip3 activation (#2698) -- [`86fc05049`](https://github.com/raptoreum/raptoreum/commit/86fc05049) Drop no longer used code and bump min protos (#2697) -- [`fef8e5d45`](https://github.com/raptoreum/raptoreum/commit/fef8e5d45) A small overhaul of the way MN list/stats UI and data are tied together (#2696) -- [`90bb3ca2f`](https://github.com/raptoreum/raptoreum/commit/90bb3ca2f) Backport #14701: build: Add CLIENT_VERSION_BUILD to CFBundleGetInfoString (#2687) -- [`00f904ec7`](https://github.com/raptoreum/raptoreum/commit/00f904ec7) Change the way invalid ProTxes are handled in `addUnchecked` and `existsProviderTxConflict` (#2691) -- [`5478183e7`](https://github.com/raptoreum/raptoreum/commit/5478183e7) Call existsProviderTxConflict after CheckSpecialTx (#2690) -- [`1be5a72a9`](https://github.com/raptoreum/raptoreum/commit/1be5a72a9) Merge #9853: Fix error codes from various RPCs -- [`1bfc069e3`](https://github.com/raptoreum/raptoreum/commit/1bfc069e3) Merge #9575: Remove unused, non-working RPC PostCommand signal -- [`e53da66b2`](https://github.com/raptoreum/raptoreum/commit/e53da66b2) Merge #9936: [trivial] Fix three typos introduced into walletdb.h in commit 7184e25 -- [`2121ba776`](https://github.com/raptoreum/raptoreum/commit/2121ba776) Merge #9945: Improve logging in bctest.py if there is a formatting mismatch -- [`b1d64f3a1`](https://github.com/raptoreum/raptoreum/commit/b1d64f3a1) Merge #9548: Remove min reasonable fee -- [`1c08f9a5f`](https://github.com/raptoreum/raptoreum/commit/1c08f9a5f) Merge #9369: Factor out CWallet::nTimeSmart computation into a method. -- [`9a3067115`](https://github.com/raptoreum/raptoreum/commit/9a3067115) fix compile error caused by #9605 -- [`7e4257254`](https://github.com/raptoreum/raptoreum/commit/7e4257254) Allow to override llmqChainLocks with "-llmqchainlocks" on devnet (#2683) -- [`bed57cfbf`](https://github.com/raptoreum/raptoreum/commit/bed57cfbf) Stop checking MN protocol version before signalling DIP3 (#2684) -- [`8d249d4df`](https://github.com/raptoreum/raptoreum/commit/8d249d4df) Merge #9605: Use CScheduler for wallet flushing, remove ThreadFlushWalletDB -- [`9c8c12ed4`](https://github.com/raptoreum/raptoreum/commit/9c8c12ed4) devtools: Fix a syntax error typo -- [`8a436ec36`](https://github.com/raptoreum/raptoreum/commit/8a436ec36) Merge #9932: Fix verify-commits on travis and always check top commit's tree -- [`31267f4c8`](https://github.com/raptoreum/raptoreum/commit/31267f4c8) Merge #9555: [test] Avoid reading a potentially uninitialized variable in tx_invalid-test (transaction_tests.cpp) -- [`a31b2de7a`](https://github.com/raptoreum/raptoreum/commit/a31b2de7a) Merge #9906: Disallow copy constructor CReserveKeys -- [`22cda1a92`](https://github.com/raptoreum/raptoreum/commit/22cda1a92) Merge #9929: tests: Delete unused function `_rpchost_to_args` -- [`6addbe074`](https://github.com/raptoreum/raptoreum/commit/6addbe074) Merge #9880: Verify Tree-SHA512s in merge commits, enforce sigs are not SHA1 -- [`29bbfc58f`](https://github.com/raptoreum/raptoreum/commit/29bbfc58f) Merge #8574: [Wallet] refactor CWallet/CWalletDB/CDB -- [`67a86091a`](https://github.com/raptoreum/raptoreum/commit/67a86091a) Implement and use secure BLS batch verification (#2681) -- [`e2ae2ae63`](https://github.com/raptoreum/raptoreum/commit/e2ae2ae63) Update misspelled Synchronizing in GetSyncStatus (#2680) -- [`721965990`](https://github.com/raptoreum/raptoreum/commit/721965990) Add missing help text for `operatorPayoutAddress` (#2679) -- [`68c0de4ba`](https://github.com/raptoreum/raptoreum/commit/68c0de4ba) Do not send excessive messages in governance sync (#2124) -- [`09e71de80`](https://github.com/raptoreum/raptoreum/commit/09e71de80) Fix bench log for payee and special txes (#2678) -- [`03fa11550`](https://github.com/raptoreum/raptoreum/commit/03fa11550) Speed up CQuorumManager::ScanQuorums (#2677) -- [`071035b93`](https://github.com/raptoreum/raptoreum/commit/071035b93) Apply code review suggestions #2647 -- [`501227dee`](https://github.com/raptoreum/raptoreum/commit/501227dee) Merge #9333: Document CWalletTx::mapValue entries and remove erase of nonexistent "version" entry. -- [`a61b747a2`](https://github.com/raptoreum/raptoreum/commit/a61b747a2) Merge #9547: bench: Assert that division by zero is unreachable -- [`b821dfa7d`](https://github.com/raptoreum/raptoreum/commit/b821dfa7d) Merge #9739: Fix BIP68 activation test -- [`56890f98f`](https://github.com/raptoreum/raptoreum/commit/56890f98f) Merge #9832: [qa] assert_start_raises_init_error -- [`31755267a`](https://github.com/raptoreum/raptoreum/commit/31755267a) Missing `=` characters (#2676) -- [`088525bde`](https://github.com/raptoreum/raptoreum/commit/088525bde) Multiple fixes for LLMQs and BLS batch verification (#2674) -- [`ae70e8a34`](https://github.com/raptoreum/raptoreum/commit/ae70e8a34) Fix negative "keys left since backup" (#2671) -- [`2a330f17a`](https://github.com/raptoreum/raptoreum/commit/2a330f17a) Fix endless wait in RenameThreadPool (#2675) -- [`1400df2e5`](https://github.com/raptoreum/raptoreum/commit/1400df2e5) Invoke CheckSpecialTx after all normal TX checks have passed (#2673) -- [`18950f923`](https://github.com/raptoreum/raptoreum/commit/18950f923) Optimize DKG debug message processing for performance and lower bandwidth (#2672) -- [`4615da99f`](https://github.com/raptoreum/raptoreum/commit/4615da99f) Merge #9576: [wallet] Remove redundant initialization -- [`8944b5a78`](https://github.com/raptoreum/raptoreum/commit/8944b5a78) Merge #9905: [contrib] gh-merge: Move second sha512 check to the end -- [`8dfddf503`](https://github.com/raptoreum/raptoreum/commit/8dfddf503) Merge #9910: Docs: correct and elaborate -rpcbind doc -- [`395b53716`](https://github.com/raptoreum/raptoreum/commit/395b53716) Merge #9774: Enable host lookups for -proxy and -onion parameters -- [`2c3dde75c`](https://github.com/raptoreum/raptoreum/commit/2c3dde75c) Merge #9828: Avoid -Wshadow warnings in wallet_tests -- [`3d3443b6a`](https://github.com/raptoreum/raptoreum/commit/3d3443b6a) Merge #8808: Do not shadow variables (gcc set) -- [`053b97c94`](https://github.com/raptoreum/raptoreum/commit/053b97c94) Merge #9903: Docs: add details to -rpcclienttimeout doc -- [`5d1c97da1`](https://github.com/raptoreum/raptoreum/commit/5d1c97da1) Add getspecialtxes rpc (#2668) -- [`ca6c8f547`](https://github.com/raptoreum/raptoreum/commit/ca6c8f547) Add missing default value for SPORK_19_CHAINLOCKS_ENABLED (#2670) -- [`6da341379`](https://github.com/raptoreum/raptoreum/commit/6da341379) Use smaller LLMQs for ChainLocks on testnet and devnet (#2669) -- [`54f576ea7`](https://github.com/raptoreum/raptoreum/commit/54f576ea7) Fix LLMQ related test failures on Travis (#2666) -- [`6fe479aa1`](https://github.com/raptoreum/raptoreum/commit/6fe479aa1) Don't leak skShare in logs (#2662) -- [`559bdfc6e`](https://github.com/raptoreum/raptoreum/commit/559bdfc6e) ProcessSpecialTxsInBlock should respect fJustCheck (#2653) -- [`805aeaa16`](https://github.com/raptoreum/raptoreum/commit/805aeaa16) Drop cs_main from UpdatedBlockTip in CDKGSessionManager/CDKGSessionHandler (#2655) -- [`2a4fbb6e4`](https://github.com/raptoreum/raptoreum/commit/2a4fbb6e4) Bump block stats when adding commitment tx into block (#2654) -- [`25cb14b61`](https://github.com/raptoreum/raptoreum/commit/25cb14b61) Fix confusion between dip3 activation and enforcement (#2651) -- [`7caf9394e`](https://github.com/raptoreum/raptoreum/commit/7caf9394e) drop raptoreum-docs folder and instead link to raptoreum-docs.github.io in README (#2650) -- [`70a9e905c`](https://github.com/raptoreum/raptoreum/commit/70a9e905c) Use helper function to produce help text for params of `protx` rpcs (#2649) -- [`f123248f1`](https://github.com/raptoreum/raptoreum/commit/f123248f1) update copyright (#2648) -- [`d398bf052`](https://github.com/raptoreum/raptoreum/commit/d398bf052) reverse order from jsonRequest, strSubCommand -- [`ad4b3cda3`](https://github.com/raptoreum/raptoreum/commit/ad4b3cda3) Instead of asserting signatures once, wait for them to change to the expected state -- [`3237668b1`](https://github.com/raptoreum/raptoreum/commit/3237668b1) Rename inInvalidate->inEnforceBestChainLock and make it atomic -- [`5033d5ef4`](https://github.com/raptoreum/raptoreum/commit/5033d5ef4) Don't check for conflicting ChainLocks when phashBlock is not set -- [`08d915dc2`](https://github.com/raptoreum/raptoreum/commit/08d915dc2) Increase waiting time in LLMQ signing tests -- [`886299a40`](https://github.com/raptoreum/raptoreum/commit/886299a40) Implement llmq-chainlocks.py integration tests -- [`3413ff917`](https://github.com/raptoreum/raptoreum/commit/3413ff917) Add info about ChainLocks to block and transaction RPCs -- [`135829dc4`](https://github.com/raptoreum/raptoreum/commit/135829dc4) Add SPORK_19_CHAINLOCKS_ENABLED -- [`29532ba19`](https://github.com/raptoreum/raptoreum/commit/29532ba19) Implement and enforce ChainLocks -- [`2bf6eb1c7`](https://github.com/raptoreum/raptoreum/commit/2bf6eb1c7) Track parent->child relations for blocks -- [`04a51c9ef`](https://github.com/raptoreum/raptoreum/commit/04a51c9ef) Use a block that is 8 blocks in the past for SelectQuorumForSigning -- [`cf33efc9e`](https://github.com/raptoreum/raptoreum/commit/cf33efc9e) Move SelectQuorumForSigning into CSigningManager and make it height based -- [`4026ea203`](https://github.com/raptoreum/raptoreum/commit/4026ea203) Implement VerifyRecoveredSig to allow verifcation of sigs found in P2P messages -- [`9f211ef12`](https://github.com/raptoreum/raptoreum/commit/9f211ef12) Add listener interface to listen for recovered sigs -- [`189cee210`](https://github.com/raptoreum/raptoreum/commit/189cee210) Don't pass poolSize to SelectQuorum and instead use consensus params -- [`13855674d`](https://github.com/raptoreum/raptoreum/commit/13855674d) Add missing new-line character in log output -- [`d31edf66a`](https://github.com/raptoreum/raptoreum/commit/d31edf66a) Wait for script checks to finish before messing with txes in Raptoreum-specific way (#2652) -- [`2c477b0d4`](https://github.com/raptoreum/raptoreum/commit/2c477b0d4) Fix no_wallet for rpcsmartnode/rpcevo -- [`fc00b7bae`](https://github.com/raptoreum/raptoreum/commit/fc00b7bae) add import to rpcevo fixing backport 8775 -- [`30b03863e`](https://github.com/raptoreum/raptoreum/commit/30b03863e) Apply suggestions from code review #2646 -- [`c70aa6079`](https://github.com/raptoreum/raptoreum/commit/c70aa6079) change #8775 to keep raptoreum codebase improvement, but still backport #9908 -- [`afdb0a267`](https://github.com/raptoreum/raptoreum/commit/afdb0a267) Merge #9908: Define 7200 second timestamp window constant -- [`c094d4bbe`](https://github.com/raptoreum/raptoreum/commit/c094d4bbe) fix #8775 backport -- [`f9147466f`](https://github.com/raptoreum/raptoreum/commit/f9147466f) remove other rpc references to pwalletMain -- [`d7474fd56`](https://github.com/raptoreum/raptoreum/commit/d7474fd56) remove all references to pwalletMain in rpc folder -- [`87af11781`](https://github.com/raptoreum/raptoreum/commit/87af11781) Merge #8775: RPC refactoring: Access wallet using new GetWalletForJSONRPCRequest -- [`1fa7f7e74`](https://github.com/raptoreum/raptoreum/commit/1fa7f7e74) stop test failures -- [`444f671ab`](https://github.com/raptoreum/raptoreum/commit/444f671ab) Update src/miner.cpp -- [`514769940`](https://github.com/raptoreum/raptoreum/commit/514769940) fix 9868 -- [`7ee31cbd6`](https://github.com/raptoreum/raptoreum/commit/7ee31cbd6) Speed up integration tests with smartnodes (#2642) -- [`fda16f1fe`](https://github.com/raptoreum/raptoreum/commit/fda16f1fe) Fix off-by-1 in phase calculations and the rest of llmq-signing.py issues (#2641) -- [`b595f9e6a`](https://github.com/raptoreum/raptoreum/commit/b595f9e6a) Fix LLMQ signing integration tests (#2640) -- [`597748689`](https://github.com/raptoreum/raptoreum/commit/597748689) Bring back ResetLocalSessionStatus call (#2639) -- [`682a3b993`](https://github.com/raptoreum/raptoreum/commit/682a3b993) Merge #9904: test: Fail if InitBlockIndex fails -- [`55a656c24`](https://github.com/raptoreum/raptoreum/commit/55a656c24) Merge #9359: Add test for CWalletTx::GetImmatureCredit() returning stale values. -- [`68f6b43d1`](https://github.com/raptoreum/raptoreum/commit/68f6b43d1) fix #9143 backport -- [`bba55e262`](https://github.com/raptoreum/raptoreum/commit/bba55e262) Merge #9143: Refactor ZapWalletTxes to avoid layer violations -- [`02f4661b3`](https://github.com/raptoreum/raptoreum/commit/02f4661b3) fix #9894 backport -- [`07b50aefa`](https://github.com/raptoreum/raptoreum/commit/07b50aefa) Merge #9894: remove 'label' filter for rpc command help -- [`8035769d4`](https://github.com/raptoreum/raptoreum/commit/8035769d4) remove removed argument from #9834 -- [`904e56fb1`](https://github.com/raptoreum/raptoreum/commit/904e56fb1) Merge #9834: qt: clean up initialize/shutdown signals -- [`2df84c6f1`](https://github.com/raptoreum/raptoreum/commit/2df84c6f1) fix merge error from #9821 -- [`21e00e905`](https://github.com/raptoreum/raptoreum/commit/21e00e905) Merge #9821: util: Specific GetOSRandom for Linux/FreeBSD/OpenBSD -- [`f9c585776`](https://github.com/raptoreum/raptoreum/commit/f9c585776) manual fixes on #9868 -- [`3ddf3dc62`](https://github.com/raptoreum/raptoreum/commit/3ddf3dc62) Merge #9868: Abstract out the command line options for block assembly -- [`397792355`](https://github.com/raptoreum/raptoreum/commit/397792355) Merge #9861: Trivial: Debug log ambiguity fix for peer addrs -- [`3d1a0b3ab`](https://github.com/raptoreum/raptoreum/commit/3d1a0b3ab) Merge #9871: Add a tree sha512 hash to merge commits -- [`8264e15cd`](https://github.com/raptoreum/raptoreum/commit/8264e15cd) Merge #9822: Remove block file location upgrade code -- [`f51d2e094`](https://github.com/raptoreum/raptoreum/commit/f51d2e094) Merge #9732: [Trivial] Remove nonsense #undef foreach -- [`3e10ff63f`](https://github.com/raptoreum/raptoreum/commit/3e10ff63f) Merge #9867: Replace remaining sprintf with snprintf -- [`0d38c16e7`](https://github.com/raptoreum/raptoreum/commit/0d38c16e7) Merge #9350: [Trivial] Adding label for amount inside of tx_valid/tx_invalid.json -- [`d2ddc2a00`](https://github.com/raptoreum/raptoreum/commit/d2ddc2a00) A couple of fixes/refactorings for CDKGSessionHandler (#2637) -- [`b2b97f258`](https://github.com/raptoreum/raptoreum/commit/b2b97f258) Fix some strings, docs and cmd-line/rpc help messages (#2632) -- [`e7981e468`](https://github.com/raptoreum/raptoreum/commit/e7981e468) Remove fLLMQAllowDummyCommitments from consensus params (#2636) -- [`8cd7287ba`](https://github.com/raptoreum/raptoreum/commit/8cd7287ba) Fix missing lupdate in depends (#2633) -- [`b0ad1425e`](https://github.com/raptoreum/raptoreum/commit/b0ad1425e) Review fixes (mostly if/else related but no change in logic) -- [`c905f1fe1`](https://github.com/raptoreum/raptoreum/commit/c905f1fe1) Initialize g_connman before initializing the LLMQ system -- [`b8d069bcd`](https://github.com/raptoreum/raptoreum/commit/b8d069bcd) fix/cleanup qt rpcnestedtests -- [`b970c20a9`](https://github.com/raptoreum/raptoreum/commit/b970c20a9) Avoid using immature coinbase UTXOs for dummy TXins -- [`4d25148c0`](https://github.com/raptoreum/raptoreum/commit/4d25148c0) Add llmq-signing.py tests -- [`d020ffa00`](https://github.com/raptoreum/raptoreum/commit/d020ffa00) Add wait_for_sporks_same and mine_quorum to RaptoreumTestFramework -- [`0cc1cf279`](https://github.com/raptoreum/raptoreum/commit/0cc1cf279) Add receivedFinalCommitment flag to CDKGDebugSessionStatus -- [`23d7ed80d`](https://github.com/raptoreum/raptoreum/commit/23d7ed80d) Implement "quorum sign/hasrecsig/isconflicting" RPCs -- [`316b6bf0d`](https://github.com/raptoreum/raptoreum/commit/316b6bf0d) Faster re-requesting of recovered sigs -- [`c38f889e7`](https://github.com/raptoreum/raptoreum/commit/c38f889e7) Implement processing, verifcation and propagation of signature shares -- [`43fd1b352`](https://github.com/raptoreum/raptoreum/commit/43fd1b352) Implement CSigningManager to process and propagage recovered signatures -- [`56ee83a76`](https://github.com/raptoreum/raptoreum/commit/56ee83a76) Add ReadDataStream to CDBWrapper to allow manual deserialization -- [`b6346a2f6`](https://github.com/raptoreum/raptoreum/commit/b6346a2f6) Implement CBLSInsecureBatchVerifier for convenient batch verification -- [`dd8f24588`](https://github.com/raptoreum/raptoreum/commit/dd8f24588) Implement IsBanned to allow checking for banned nodes outside of net_processing.cpp -- [`49de41726`](https://github.com/raptoreum/raptoreum/commit/49de41726) Implement CFixedVarIntsBitSet and CAutoBitSet -- [`76a58f5a4`](https://github.com/raptoreum/raptoreum/commit/76a58f5a4) Add `src/bls/*.h` and .cpp to CMakeLists.txt -- [`b627528ce`](https://github.com/raptoreum/raptoreum/commit/b627528ce) Use void as return type for WriteContributions -- [`edac100f5`](https://github.com/raptoreum/raptoreum/commit/edac100f5) Fix "quorum" RPCs help and unify logic in the sub-commands RPC entry point -- [`217f3941d`](https://github.com/raptoreum/raptoreum/commit/217f3941d) Skip starting of cache populator thread in case we don't have a valid vvec -- [`679a9895b`](https://github.com/raptoreum/raptoreum/commit/679a9895b) Add comments about why it's ok to ignore some failures -- [`15c34ccbd`](https://github.com/raptoreum/raptoreum/commit/15c34ccbd) Implement CQuorum and CQuorumManager -- [`8e4fe3660`](https://github.com/raptoreum/raptoreum/commit/8e4fe3660) [PrivateSend] Fallback to less participants if possible, fix too long timeouts on server side (#2616) -- [`ee808d819`](https://github.com/raptoreum/raptoreum/commit/ee808d819) Add checkbox to show only smartnodes the wallet has keys for (#2627) -- [`fff50af3c`](https://github.com/raptoreum/raptoreum/commit/fff50af3c) Revert "Set CLIENT_VERSION_IS_RELEASE to true (#2591)" -- [`fed4716c0`](https://github.com/raptoreum/raptoreum/commit/fed4716c0) Remove support for "0" as an alternative to "" when the default is requested (#2622) -- [`8b7771a31`](https://github.com/raptoreum/raptoreum/commit/8b7771a31) Add some `const`s -- [`0b1347c0d`](https://github.com/raptoreum/raptoreum/commit/0b1347c0d) Pass self-created message to CDKGPendingMessages instead of processing them -- [`02c7932f4`](https://github.com/raptoreum/raptoreum/commit/02c7932f4) Add owner and voting addresses to rpc output, unify it across different methods (#2618) -- [`c948c0ff3`](https://github.com/raptoreum/raptoreum/commit/c948c0ff3) Fix help for optional parameters in "quorum dkgstatus" -- [`957652bf3`](https://github.com/raptoreum/raptoreum/commit/957652bf3) Fix help for "quorum dkgstatus" and remove support for "0" proTxHash -- [`b7b436b7d`](https://github.com/raptoreum/raptoreum/commit/b7b436b7d) Apply review suggestions to rpcquorums.cpp -- [`3fe991063`](https://github.com/raptoreum/raptoreum/commit/3fe991063) Drop unused overload of GetSmartnodeQuorums -- [`5daeedabf`](https://github.com/raptoreum/raptoreum/commit/5daeedabf) Batched logger should not break log parsing -- [`2aed51c55`](https://github.com/raptoreum/raptoreum/commit/2aed51c55) Give nodes more time per phase when doing PoSe tests -- [`5958f8b81`](https://github.com/raptoreum/raptoreum/commit/5958f8b81) Remove dkgRndSleepTime from consensus params and make sleeping it non-random -- [`0dae46c2f`](https://github.com/raptoreum/raptoreum/commit/0dae46c2f) Move RandBool() into random.h/cpp -- [`e1901d24a`](https://github.com/raptoreum/raptoreum/commit/e1901d24a) Handle review suggestions -- [`352edbd33`](https://github.com/raptoreum/raptoreum/commit/352edbd33) Introduce SPORK_18_QUORUM_DEBUG_ENABLED to enable/disable LLMQ debug messages -- [`324406bfe`](https://github.com/raptoreum/raptoreum/commit/324406bfe) Implement debugging messages and RPC for LLMQ DKGs -- [`098b09495`](https://github.com/raptoreum/raptoreum/commit/098b09495) Pass scheduler to InitLLMQSystem -- [`a1f4853d6`](https://github.com/raptoreum/raptoreum/commit/a1f4853d6) Use LLMQ DKGs for PoSe testing in DIP3 tests -- [`6836f8c38`](https://github.com/raptoreum/raptoreum/commit/6836f8c38) Implement LLMQ DKG -- [`318b59813`](https://github.com/raptoreum/raptoreum/commit/318b59813) Prepare inter-quorum smartnode connections -- [`4bf736f33`](https://github.com/raptoreum/raptoreum/commit/4bf736f33) Add cxxtimer header only libraries -- [`c6be8cfcd`](https://github.com/raptoreum/raptoreum/commit/c6be8cfcd) Allow to skip malleability check when deserializing BLS primitives -- [`9d25bb1d8`](https://github.com/raptoreum/raptoreum/commit/9d25bb1d8) Add batched logger -- [`0df3871d1`](https://github.com/raptoreum/raptoreum/commit/0df3871d1) Remove dummy DKG -- [`55f205eba`](https://github.com/raptoreum/raptoreum/commit/55f205eba) A couple of fixes for `smartnode list` rpc (#2615) -- [`fa18d3e10`](https://github.com/raptoreum/raptoreum/commit/fa18d3e10) More fixes for PrivateSend after 2612 (#2614) -- [`bade33273`](https://github.com/raptoreum/raptoreum/commit/bade33273) Fix 2612 (#2613) -- [`5c5932eb9`](https://github.com/raptoreum/raptoreum/commit/5c5932eb9) [PrivateSend] Allow more than 3 mixing participants (#2612) -- [`0acfbf640`](https://github.com/raptoreum/raptoreum/commit/0acfbf640) Gracefully shutdown on evodb inconsistency instead of crashing (#2611) -- [`07dcddb4c`](https://github.com/raptoreum/raptoreum/commit/07dcddb4c) Backports 0.15 pr2 (#2597) -- [`04d1671b9`](https://github.com/raptoreum/raptoreum/commit/04d1671b9) armv7l build support (#2601) -- [`7d58d87f4`](https://github.com/raptoreum/raptoreum/commit/7d58d87f4) Remove a few sporks which are not used anymore (#2607) -- [`d1910eaff`](https://github.com/raptoreum/raptoreum/commit/d1910eaff) Refactor remains of CSmartnode/-Man into CSmartnodeMeta/-Man (#2606) -- [`cdc8ae943`](https://github.com/raptoreum/raptoreum/commit/cdc8ae943) Don't hold CDeterministicMNManager::cs while calling signals (#2608) -- [`968eb3fc5`](https://github.com/raptoreum/raptoreum/commit/968eb3fc5) Add real timestamp to log output when mock time is enabled (#2604) -- [`0648496e2`](https://github.com/raptoreum/raptoreum/commit/0648496e2) Fix flaky p2p-fullblocktest (#2605) -- [`96d4f7459`](https://github.com/raptoreum/raptoreum/commit/96d4f7459) Try to fix flaky IX tests in DIP3 tests (#2602) -- [`896733223`](https://github.com/raptoreum/raptoreum/commit/896733223) Raptoreumify copyright_header.py (#2598) -- [`c58f775cc`](https://github.com/raptoreum/raptoreum/commit/c58f775cc) De-raptoreumify env vars and raptoreumify help text in tests instead (#2603) -- [`a49f4123e`](https://github.com/raptoreum/raptoreum/commit/a49f4123e) Backports 0.15 pr1 (#2590) -- [`f95aae2b3`](https://github.com/raptoreum/raptoreum/commit/f95aae2b3) Remove all legacy/compatibility MN code (#2600) -- [`0e28f0aa9`](https://github.com/raptoreum/raptoreum/commit/0e28f0aa9) Fix flaky autoix tests by disabling autoix while filling mempool (#2595) -- [`78c22ad0f`](https://github.com/raptoreum/raptoreum/commit/78c22ad0f) Multiple fixes for "smartnode list" -- [`e54f6b274`](https://github.com/raptoreum/raptoreum/commit/e54f6b274) Use ban score of 10 for invalid DSQ sigs -- [`536229d17`](https://github.com/raptoreum/raptoreum/commit/536229d17) Apply suggestions from code review -- [`75024e117`](https://github.com/raptoreum/raptoreum/commit/75024e117) Merge #10365: [tests] increase timeouts in sendheaders test -- [`1efd77358`](https://github.com/raptoreum/raptoreum/commit/1efd77358) Remove non-DIP3 code path in CSmartnodePayments::IsScheduled -- [`4c749b7e9`](https://github.com/raptoreum/raptoreum/commit/4c749b7e9) Directly use deterministicMNManager in "smartnode list" -- [`0fe97a045`](https://github.com/raptoreum/raptoreum/commit/0fe97a045) Remove support for "smartnode list rank" -- [`adc2ec225`](https://github.com/raptoreum/raptoreum/commit/adc2ec225) Remove unsupported types/fields from "smartnode list" -- [`4b150e72f`](https://github.com/raptoreum/raptoreum/commit/4b150e72f) Directly use deterministicMNManager instead of mnodeman.CountXXX -- [`4c3bb7304`](https://github.com/raptoreum/raptoreum/commit/4c3bb7304) Remove call to mnodeman.PoSeBan -- [`0594cd719`](https://github.com/raptoreum/raptoreum/commit/0594cd719) Remove code that is incompatible now due to GetSmartnodeRanks returning DMNs now -- [`37541ee00`](https://github.com/raptoreum/raptoreum/commit/37541ee00) Change GetSmartnodeScores and GetSmartnodeRank/s to use CDeterministicMNCPtr -- [`17c792cd3`](https://github.com/raptoreum/raptoreum/commit/17c792cd3) Remove MN upgrade check in ComputeBlockVersion -- [`71a695100`](https://github.com/raptoreum/raptoreum/commit/71a695100) Move logic from FindRandomNotInVec into GetRandomNotUsedSmartnode -- [`2f66d6ada`](https://github.com/raptoreum/raptoreum/commit/2f66d6ada) Replace uses of mnodeman in PS code when deterministicMNManager can be used directly -- [`eedb15845`](https://github.com/raptoreum/raptoreum/commit/eedb15845) Remove use of mnodeman.GetSmartnodeInfo from IX code -- [`fb13b000b`](https://github.com/raptoreum/raptoreum/commit/fb13b000b) Remove support for legacy operator keys in CPrivateSendBroadcastTx -- [`5f5fcc49c`](https://github.com/raptoreum/raptoreum/commit/5f5fcc49c) Remove legacy signatures support in CPrivateSendQueue -- [`da924519a`](https://github.com/raptoreum/raptoreum/commit/da924519a) Remove support for legacy signatures in CTxLockVote -- [`2b2e4f45d`](https://github.com/raptoreum/raptoreum/commit/2b2e4f45d) Remove a few uses of mnodeman from governance code -- [`14d8ce03c`](https://github.com/raptoreum/raptoreum/commit/14d8ce03c) Don't use GetSmartnodeInfo in CTxLockVote::IsValid -- [`1ff241881`](https://github.com/raptoreum/raptoreum/commit/1ff241881) Directly use deterministicMNManager in some places -- [`45f34e130`](https://github.com/raptoreum/raptoreum/commit/45f34e130) Implement HasValidMN, HasValidMNByCollateral and GetValidMNByCollateral -- [`bc29fe160`](https://github.com/raptoreum/raptoreum/commit/bc29fe160) Remove compatibility code from governance RPCs and directly use deterministicMNManager -- [`b49ef5d71`](https://github.com/raptoreum/raptoreum/commit/b49ef5d71) Directly use deterministicMNManager when processing DSTX -- [`ae229e283`](https://github.com/raptoreum/raptoreum/commit/ae229e283) Directly use deterministicMNManager in CGovernanceManager::GetCurrentVotes -- [`96e0385db`](https://github.com/raptoreum/raptoreum/commit/96e0385db) Let "smartnode winner/current" directly use deterministicMNManager -- [`82745dd07`](https://github.com/raptoreum/raptoreum/commit/82745dd07) Use DIP3 MNs in auto-IX tests (#2588) -- [`ce5a51134`](https://github.com/raptoreum/raptoreum/commit/ce5a51134) Speed up stopping of nodes in tests by splitting up stop and wait (#2587) -- [`0c9fb6968`](https://github.com/raptoreum/raptoreum/commit/0c9fb6968) Harden spork15 on testnet (#2586) -- [`361900e46`](https://github.com/raptoreum/raptoreum/commit/361900e46) Bump version to 0.14 (#2589) - -Credits -======= - -Thanks to everyone who directly contributed to this release: - -- Alexander Block (codablock) -- Amir Abrams (AmirAbrams) -- Daniel Hoffmann (dhoffmann) -- Duke Leto (leto) -- fish-en -- gladcow -- -k (charlesrocket) -- Nathan Marley (nmarley) -- PastaPastaPasta -- Peter Bushnell (Bushstar) -- strophy -- thephez -- UdjinM6 - -As well as everyone that submitted issues and reviewed pull requests. - -Older releases -============== - -Raptoreum was previously known as Darkcoin. - -Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin -which was first released on Jan/18/2014. - -Darkcoin tree 0.9.x was the open source implementation of smartnodes based on -the 0.8.x tree and was first released on Mar/13/2014. - -Darkcoin tree 0.10.x used to be the closed source implementation of Darksend -which was released open source on Sep/25/2014. - -Raptoreum Core tree 0.11.x was a fork of Bitcoin Core tree 0.9, -Darkcoin was rebranded to Raptoreum. - -Raptoreum Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10. - -Raptoreum Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12. - -These release are considered obsolete. Old release notes can be found here: - -- [v0.13.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.3.md) released Apr/04/2019 -- [v0.13.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.2.md) released Mar/15/2019 -- [v0.13.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.1.md) released Feb/9/2019 -- [v0.13.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.13.0.md) released Jan/14/2019 -- [v0.12.3.4](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.4.md) released Dec/14/2018 -- [v0.12.3.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.3.md) released Sep/19/2018 -- [v0.12.3.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.2.md) released Jul/09/2018 -- [v0.12.3.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.3.1.md) released Jul/03/2018 -- [v0.12.2.3](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.3.md) released Jan/12/2018 -- [v0.12.2.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.2.md) released Dec/17/2017 -- [v0.12.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.2.md) released Nov/08/2017 -- [v0.12.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.1.md) released Feb/06/2017 -- [v0.12.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.12.0.md) released Aug/15/2015 -- [v0.11.2](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.2.md) released Mar/04/2015 -- [v0.11.1](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.1.md) released Feb/10/2015 -- [v0.11.0](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.11.0.md) released Jan/15/2015 -- [v0.10.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.10.0.md) released Sep/25/2014 -- [v0.9.x](https://github.com/raptoreum/raptoreum/blob/master/doc/release-notes/raptoreum/release-notes-0.9.0.md) released Mar/13/2014 - diff --git a/doc/release-notes/raptoreum/release-notes-0.15-backports.md b/doc/release-notes/raptoreum/release-notes-0.15-backports.md deleted file mode 100644 index 343d0943ef..0000000000 --- a/doc/release-notes/raptoreum/release-notes-0.15-backports.md +++ /dev/null @@ -1,755 +0,0 @@ -### 0.15 backports and related fixes: -- [`cbf9c54a1`](https://github.com/raptoreum/raptoreum/commit/cbf9c54a1) Backport osslsigncode 2.0 - bitcoin#16669 and bitcoin#17671 (#3258) -- [`697d289eb`](https://github.com/raptoreum/raptoreum/commit/697d289eb) Merge #12392: Fix ignoring tx data requests when fPauseSend is set on a peer (#3225) -- [`8c17c8163`](https://github.com/raptoreum/raptoreum/commit/8c17c8163) Remove light-hires theme as it's not required anymore -- [`d9741fc63`](https://github.com/raptoreum/raptoreum/commit/d9741fc63) Merge #16254: qt: Set AA_EnableHighDpiScaling attribute early -- [`df04cdcd2`](https://github.com/raptoreum/raptoreum/commit/df04cdcd2) Fix Raptoreum specific docs and scripts -- [`1ef70ac9e`](https://github.com/raptoreum/raptoreum/commit/1ef70ac9e) Merge #12607: depends: Remove ccache -- [`5107582f2`](https://github.com/raptoreum/raptoreum/commit/5107582f2) Merge #11252: [P2P] When clearing addrman clear mapInfo and mapAddr. (#3171) -- [`cf632029b`](https://github.com/raptoreum/raptoreum/commit/cf632029b) Merge #12804: [tests] Fix intermittent rpc_net.py failure. -- [`1d8eb903a`](https://github.com/raptoreum/raptoreum/commit/1d8eb903a) Merge #12545: test: Use wait_until to ensure ping goes out -- [`0f7d8f898`](https://github.com/raptoreum/raptoreum/commit/0f7d8f898) Merge #17118: build: depends macOS: point --sysroot to SDK -- [`21d33dd56`](https://github.com/raptoreum/raptoreum/commit/21d33dd56) Merge #14413: tests: Allow closed rpc handler in assert_start_raises_init_error (#3157) -- [`17151daa2`](https://github.com/raptoreum/raptoreum/commit/17151daa2) Fix compilation -- [`fefe07003`](https://github.com/raptoreum/raptoreum/commit/fefe07003) Merge #14670: http: Fix HTTP server shutdown -- [`a8e49d33e`](https://github.com/raptoreum/raptoreum/commit/a8e49d33e) Merge #11006: Improve shutdown process -- [`00cbfac3c`](https://github.com/raptoreum/raptoreum/commit/00cbfac3c) Merge #12366: http: Join worker threads before deleting work queue -- [`a12b03e5c`](https://github.com/raptoreum/raptoreum/commit/a12b03e5c) Run orphan TX handling tests twice, once by resolving via mempool and once via block -- [`e76207024`](https://github.com/raptoreum/raptoreum/commit/e76207024) Also handle/resolve orphan TXs when parents appear in a block -- [`7e257a4e6`](https://github.com/raptoreum/raptoreum/commit/7e257a4e6) Remove RBF related code -- [`e89844d60`](https://github.com/raptoreum/raptoreum/commit/e89844d60) Interrupt orphan processing after every transaction -- [`306d2366d`](https://github.com/raptoreum/raptoreum/commit/306d2366d) [MOVEONLY] Move processing of orphan queue to ProcessOrphanTx -- [`079f22af1`](https://github.com/raptoreum/raptoreum/commit/079f22af1) Simplify orphan processing in preparation for interruptibility -- [`30767ffc4`](https://github.com/raptoreum/raptoreum/commit/30767ffc4) Remove unnecessary time imports -- [`8bcba5d4e`](https://github.com/raptoreum/raptoreum/commit/8bcba5d4e) Merge #8498: Near-Bugfix: Optimization: Minimize the number of times it is checked that no money... -- [`ed65d5126`](https://github.com/raptoreum/raptoreum/commit/ed65d5126) Merge #13003: qa: Add test for orphan handling -- [`3e72a09c1`](https://github.com/raptoreum/raptoreum/commit/3e72a09c1) Merge #11772: [tests] Change invalidblockrequest to use BitcoinTestFramework -- [`573d1da16`](https://github.com/raptoreum/raptoreum/commit/573d1da16) Use NodeConnCB as base for P2PDataStore -- [`01c138e86`](https://github.com/raptoreum/raptoreum/commit/01c138e86) Merge #11771: [tests] Change invalidtxrequest to use BitcoinTestFramework -- [`f4ea83674`](https://github.com/raptoreum/raptoreum/commit/f4ea83674) Merge #11849: [tests] Assert that only one NetworkThread exists -- [`6e6e950fc`](https://github.com/raptoreum/raptoreum/commit/6e6e950fc) Merge #11641: qa: Only allow disconnecting all NodeConns -- [`7c163b1ff`](https://github.com/raptoreum/raptoreum/commit/7c163b1ff) Merge #11182: [tests] Add P2P interface to TestNode -- [`bdfc303d2`](https://github.com/raptoreum/raptoreum/commit/bdfc303d2) Temporarily remove arguments to BENCHMARK -- [`2be67c760`](https://github.com/raptoreum/raptoreum/commit/2be67c760) Merge #12324: speed up Unserialize_impl for prevector -- [`595826ad6`](https://github.com/raptoreum/raptoreum/commit/595826ad6) Merge #12549: Make prevector::resize() and other prevector operations much faster -- [`a1bd147bc`](https://github.com/raptoreum/raptoreum/commit/a1bd147bc) Raptoreumify -- [`f7b71f660`](https://github.com/raptoreum/raptoreum/commit/f7b71f660) Merge #13611: [bugfix] Use `__cpuid_count` for gnu C to avoid gitian build fail. -- [`4bfc6ab30`](https://github.com/raptoreum/raptoreum/commit/4bfc6ab30) Merge #13788: Fix --disable-asm for newer assembly checks/code -- [`1b2252c28`](https://github.com/raptoreum/raptoreum/commit/1b2252c28) Merge #13386: SHA256 implementations based on Intel SHA Extensions -- [`1df17c02e`](https://github.com/raptoreum/raptoreum/commit/1df17c02e) Merge #13393: Enable double-SHA256-for-64-byte code on 32-bit x86 -- [`d07f54b96`](https://github.com/raptoreum/raptoreum/commit/d07f54b96) Merge #13471: For AVX2 code, also check for AVX, XSAVE, and OS support -- [`e44b6c7e5`](https://github.com/raptoreum/raptoreum/commit/e44b6c7e5) Merge #13438: Improve coverage of SHA256 SelfTest code -- [`adfd2e1a8`](https://github.com/raptoreum/raptoreum/commit/adfd2e1a8) Merge #13408: crypto: cleanup sha256 build -- [`5a23934df`](https://github.com/raptoreum/raptoreum/commit/5a23934df) Merge #13191: Specialized double-SHA256 with 64 byte inputs with SSE4.1 and AVX2 -- [`ad55048a6`](https://github.com/raptoreum/raptoreum/commit/ad55048a6) Merge #11176: build: Rename --enable-experimental-asm to --enable-asm and enable by default -- [`e2b4b205e`](https://github.com/raptoreum/raptoreum/commit/e2b4b205e) Remove now redundant and actually erroneous throwing of "Invalid blockhash" -- [`f38caa988`](https://github.com/raptoreum/raptoreum/commit/f38caa988) Merge #11676: contrib/init: Update openrc-run filename -- [`617c88623`](https://github.com/raptoreum/raptoreum/commit/617c88623) Merge #11289: Add wallet backup text to import* and add* RPCs -- [`d7119e648`](https://github.com/raptoreum/raptoreum/commit/d7119e648) Merge #11277: Fix uninitialized URI in batch RPC requests -- [`18f104b97`](https://github.com/raptoreum/raptoreum/commit/18f104b97) Merge #11590: [Wallet] always show help-line of wallet encryption calls -- [`569a11fef`](https://github.com/raptoreum/raptoreum/commit/569a11fef) Merge #11554: Sanity-check script sizes in bitcoin-tx -- [`7919c9681`](https://github.com/raptoreum/raptoreum/commit/7919c9681) Merge #11539: [verify-commits] Allow revoked keys to expire -- [`55550b8dd`](https://github.com/raptoreum/raptoreum/commit/55550b8dd) Add missing comment -- [`46373f5ee`](https://github.com/raptoreum/raptoreum/commit/46373f5ee) Merge #11565: Make listsinceblock refuse unknown block hash -- [`4096433ad`](https://github.com/raptoreum/raptoreum/commit/4096433ad) Update OpenBSD build docs as in bitcoin#11442 -- [`c6c337152`](https://github.com/raptoreum/raptoreum/commit/c6c337152) Merge #11530: Add share/rpcuser to dist. source code archive -- [`f8aca185b`](https://github.com/raptoreum/raptoreum/commit/f8aca185b) Merge #11521: travis: move back to the minimal image -- [`424ed32db`](https://github.com/raptoreum/raptoreum/commit/424ed32db) Few assert_raises_jsonrpc -> assert_raises_rpc_error fixes -- [`60ef97cc4`](https://github.com/raptoreum/raptoreum/commit/60ef97cc4) Adjust STALE_CHECK_INTERVAL to be 2.5 minutes instead of 10 minutes -- [`71d39e6a4`](https://github.com/raptoreum/raptoreum/commit/71d39e6a4) Don't disconnect smartnodes just because they were slow in block announcement -- [`438a972a7`](https://github.com/raptoreum/raptoreum/commit/438a972a7) Fix minchainwork.py -- [`9a96c0605`](https://github.com/raptoreum/raptoreum/commit/9a96c0605) Remove uses of NODE_WITNESS -- [`3e8962323`](https://github.com/raptoreum/raptoreum/commit/3e8962323) Merge #11593: rpc: work-around an upstream libevent bug -- [`58cb7e38f`](https://github.com/raptoreum/raptoreum/commit/58cb7e38f) Merge #11560: Connect to a new outbound peer if our tip is stale -- [`859b962a2`](https://github.com/raptoreum/raptoreum/commit/859b962a2) Move DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN up -- [`7d21a78fa`](https://github.com/raptoreum/raptoreum/commit/7d21a78fa) Merge #11531: Check that new headers are not a descendant of an invalid block (more effeciently) -- [`c743111c6`](https://github.com/raptoreum/raptoreum/commit/c743111c6) Merge #11578: net: Add missing lock in ProcessHeadersMessage(...) -- [`2e980018c`](https://github.com/raptoreum/raptoreum/commit/2e980018c) Merge #11568: Disconnect outbound peers on invalid chains -- [`b451094e2`](https://github.com/raptoreum/raptoreum/commit/b451094e2) Merge #11490: Disconnect from outbound peers with bad headers chains -- [`c35aa663b`](https://github.com/raptoreum/raptoreum/commit/c35aa663b) Merge #11326: Fix crash on shutdown with invalid wallet -- [`38a45a53d`](https://github.com/raptoreum/raptoreum/commit/38a45a53d) Make CDBEnv::IsMock() const -- [`bf7485213`](https://github.com/raptoreum/raptoreum/commit/bf7485213) More "connman." to "connman->" changes -- [`2edc29ee3`](https://github.com/raptoreum/raptoreum/commit/2edc29ee3) Merge #10756: net processing: swap out signals for an interface class -- [`f8c310a97`](https://github.com/raptoreum/raptoreum/commit/f8c310a97) Merge #11456: Replace relevant services logic with a function suite. -- [`35d60de2b`](https://github.com/raptoreum/raptoreum/commit/35d60de2b) Merge #11458: Don't process unrequested, low-work blocks -- [`9938dd83d`](https://github.com/raptoreum/raptoreum/commit/9938dd83d) Merge #10357: Allow setting nMinimumChainWork on command line -- [`f18fa576b`](https://github.com/raptoreum/raptoreum/commit/f18fa576b) Merge #11472: qa: Make tmpdir option an absolute path, misc cleanup -- [`b15513022`](https://github.com/raptoreum/raptoreum/commit/b15513022) Merge #11476: Avoid opening copied wallet databases simultaneously -- [`d05801c8a`](https://github.com/raptoreum/raptoreum/commit/d05801c8a) Merge #11492: [wallet] Fix leak in CDB constructor -- [`b6116b20c`](https://github.com/raptoreum/raptoreum/commit/b6116b20c) Merge #11376: Ensure backupwallet fails when attempting to backup to source file -- [`fa57eafd0`](https://github.com/raptoreum/raptoreum/commit/fa57eafd0) scripted-diff: rename assert_raises_jsonrpc to assert_raises_rpc error -- [`58a946c6b`](https://github.com/raptoreum/raptoreum/commit/58a946c6b) [tests] do not allow assert_raises_message to be called with JSONRPCException -- [`3602d3139`](https://github.com/raptoreum/raptoreum/commit/3602d3139) [tests] remove direct testing on JSONRPCException from individual test cases -- [`297e9a018`](https://github.com/raptoreum/raptoreum/commit/297e9a018) Remove more SegWit related tests from script_standard_tests.cpp -- [`f76d53d73`](https://github.com/raptoreum/raptoreum/commit/f76d53d73) Raptoreumify a few strings in tests -- [`4770830bb`](https://github.com/raptoreum/raptoreum/commit/4770830bb) Drop accidently added lines in release-notes.md -- [`1c65e0859`](https://github.com/raptoreum/raptoreum/commit/1c65e0859) Fix "os" import in wallet-dump.py -- [`f61698937`](https://github.com/raptoreum/raptoreum/commit/f61698937) Merge #11483: Fix importmulti bug when importing an already imported key -- [`f8f55c25c`](https://github.com/raptoreum/raptoreum/commit/f8f55c25c) Merge #11465: rpc: Update named args documentation for importprivkey -- [`1313ee3d4`](https://github.com/raptoreum/raptoreum/commit/1313ee3d4) Merge #11397: net: Improve and document SOCKS code -- [`08513bfff`](https://github.com/raptoreum/raptoreum/commit/08513bfff) Merge #11437: [Docs] Update Windows build instructions for using WSL and Ubuntu 17.04 -- [`9e3cb7599`](https://github.com/raptoreum/raptoreum/commit/9e3cb7599) Merge #9937: rpc: Prevent `dumpwallet` from overwriting files -- [`1d3ac9a76`](https://github.com/raptoreum/raptoreum/commit/1d3ac9a76) Merge #11440: Fix validationinterface build on super old boost/clang -- [`6ab680959`](https://github.com/raptoreum/raptoreum/commit/6ab680959) Merge #11338: qt: Backup former GUI settings on `-resetguisettings` -- [`3b0df3422`](https://github.com/raptoreum/raptoreum/commit/3b0df3422) Merge #11318: Put back inadvertently removed copyright notices -- [`b6e7a4b61`](https://github.com/raptoreum/raptoreum/commit/b6e7a4b61) Merge #11335: Replace save|restoreWindowGeometry with Qt functions -- [`61c5fb9ef`](https://github.com/raptoreum/raptoreum/commit/61c5fb9ef) Merge #11015: [Qt] Add delay before filtering transactions -- [`654c78fa2`](https://github.com/raptoreum/raptoreum/commit/654c78fa2) Merge #11267: rpc: update cli for `estimate*fee` argument rename -- [`cbf59efef`](https://github.com/raptoreum/raptoreum/commit/cbf59efef) Implement WalletModel::IsSpendable for CScript -- [`a88e000fe`](https://github.com/raptoreum/raptoreum/commit/a88e000fe) Merge #11247: qt: Use IsMine to validate custom change address -- [`6ec77c0a7`](https://github.com/raptoreum/raptoreum/commit/6ec77c0a7) Merge #11131: rpc: Write authcookie atomically -- [`9a5b798e9`](https://github.com/raptoreum/raptoreum/commit/9a5b798e9) Merge #10957: Avoid returning a BIP9Stats object with uninitialized values -- [`76776fb62`](https://github.com/raptoreum/raptoreum/commit/76776fb62) Merge #11017: [wallet] Close DB on error. -- [`b93785d8d`](https://github.com/raptoreum/raptoreum/commit/b93785d8d) Fix maxuploadtarget.py -- [`e37bd6d96`](https://github.com/raptoreum/raptoreum/commit/e37bd6d96) Fix zmq_test.py -- [`7a44dc195`](https://github.com/raptoreum/raptoreum/commit/7a44dc195) Fix hash256() imports -- [`7b80cc804`](https://github.com/raptoreum/raptoreum/commit/7b80cc804) Allow ignoring of known messages in mininode.py -- [`9ef73e6ad`](https://github.com/raptoreum/raptoreum/commit/9ef73e6ad) Fix mining.py -- [`5a5953863`](https://github.com/raptoreum/raptoreum/commit/5a5953863) Remove SegWit tests from script_standard_tests.cpp -- [`5291c27ca`](https://github.com/raptoreum/raptoreum/commit/5291c27ca) A few compilation fixes -- [`dc303defc`](https://github.com/raptoreum/raptoreum/commit/dc303defc) qa: Fix lcov for out-of-tree builds -- [`c8e17f1c3`](https://github.com/raptoreum/raptoreum/commit/c8e17f1c3) Merge #11433: qa: Restore bitcoin-util-test py2 compatibility -- [`377a8fae2`](https://github.com/raptoreum/raptoreum/commit/377a8fae2) Merge #11399: Fix bip68-sequence rpc test -- [`5c0e3ea6e`](https://github.com/raptoreum/raptoreum/commit/5c0e3ea6e) Merge #11422: qa: Verify DBWrapper iterators are taking snapshots -- [`8855f4b97`](https://github.com/raptoreum/raptoreum/commit/8855f4b97) qa: Treat mininode p2p exceptions as fatal -- [`7ddd16921`](https://github.com/raptoreum/raptoreum/commit/7ddd16921) Merge #10552: [Test] Tests for zmqpubrawtx and zmqpubrawblock -- [`eb68d88b9`](https://github.com/raptoreum/raptoreum/commit/eb68d88b9) Merge #11116: [script] Unit tests for script/standard and IsMine functions. -- [`bc5918aa1`](https://github.com/raptoreum/raptoreum/commit/bc5918aa1) Merge #11310: [tests] Test listwallets RPC -- [`797b47460`](https://github.com/raptoreum/raptoreum/commit/797b47460) Merge #11230: [tests] fixup dbcrash interaction with add_nodes() -- [`102c3f2ce`](https://github.com/raptoreum/raptoreum/commit/102c3f2ce) [test] Replace check_output with low level version -- [`654815456`](https://github.com/raptoreum/raptoreum/commit/654815456) [test] Add assert_raises_process_error to assert process errors -- [`6245ce95e`](https://github.com/raptoreum/raptoreum/commit/6245ce95e) [test] Add support for custom arguments to TestNodeCLI -- [`d446cc57a`](https://github.com/raptoreum/raptoreum/commit/d446cc57a) [test] Improve assert_raises_jsonrpc docstring -- [`b9599c297`](https://github.com/raptoreum/raptoreum/commit/b9599c297) Partially backport bitcoin#10838 for bitcoin_cli.py -- [`ded01879d`](https://github.com/raptoreum/raptoreum/commit/ded01879d) Merge #11067: [qa] TestNode: Add wait_until_stopped helper method -- [`a2e8cb4f4`](https://github.com/raptoreum/raptoreum/commit/a2e8cb4f4) Merge #11210: Stop test_bitcoin-qt touching ~/.bitcoin -- [`ec892d459`](https://github.com/raptoreum/raptoreum/commit/ec892d459) Merge #11234: Remove redundant testutil.cpp|h files -- [`d643ada80`](https://github.com/raptoreum/raptoreum/commit/d643ada80) Merge #11241: [tests] Improve signmessages functional test -- [`b9ce8480d`](https://github.com/raptoreum/raptoreum/commit/b9ce8480d) Merge #11215: [tests] fixups from set_test_params() -- [`a304d4d47`](https://github.com/raptoreum/raptoreum/commit/a304d4d47) Fix RaptoreumTestFramework and tests depending on it -- [`ac0f483d8`](https://github.com/raptoreum/raptoreum/commit/ac0f483d8) Fix issues with set_test_params and start/stop_node -- [`703f4c77a`](https://github.com/raptoreum/raptoreum/commit/703f4c77a) Fix stderr related issues -- [`39a1c6452`](https://github.com/raptoreum/raptoreum/commit/39a1c6452) Allow to set self.stderr when using vanilla setup_nodes() -- [`8ba042b58`](https://github.com/raptoreum/raptoreum/commit/8ba042b58) Fix dip3-deterministicmns.py -- [`f51a4df5c`](https://github.com/raptoreum/raptoreum/commit/f51a4df5c) Allow calling add_nodes multiple times without reusing datadirs -- [`17bb230d7`](https://github.com/raptoreum/raptoreum/commit/17bb230d7) Merge #11121: TestNode tidyups -- [`37250c02e`](https://github.com/raptoreum/raptoreum/commit/37250c02e) Merge #11150: [tests] Add getmininginfo test -- [`74325db11`](https://github.com/raptoreum/raptoreum/commit/74325db11) Merge #10859: RPC: gettxout: Slightly improve doc and tests -- [`ebfec2218`](https://github.com/raptoreum/raptoreum/commit/ebfec2218) Raptoreumify BITCOINCLI -- [`1adc2001a`](https://github.com/raptoreum/raptoreum/commit/1adc2001a) Merge #10798: [tests] [utils] test bitcoin-cli -- [`1b77cc81a`](https://github.com/raptoreum/raptoreum/commit/1b77cc81a) No need to assert wait_until -- [`956e6bc01`](https://github.com/raptoreum/raptoreum/commit/956e6bc01) Merge #11068: qa: Move wait_until to util -- [`d09f88d98`](https://github.com/raptoreum/raptoreum/commit/d09f88d98) Merge #11077: [tests] fix timeout issues from TestNode -- [`0a8ad8b56`](https://github.com/raptoreum/raptoreum/commit/0a8ad8b56) Merge #11091: test: Increase initial RPC timeout to 60 seconds -- [`1596b1dfa`](https://github.com/raptoreum/raptoreum/commit/1596b1dfa) Move -createwalletbackups=0 into test_node.py -- [`4049754f4`](https://github.com/raptoreum/raptoreum/commit/4049754f4) Raptoreumify test_node.py -- [`96966e5b8`](https://github.com/raptoreum/raptoreum/commit/96966e5b8) Use TestNode.node_encrypt_wallet -- [`cc124c99c`](https://github.com/raptoreum/raptoreum/commit/cc124c99c) Remove Raptoreum specific leftovers of node.stop optimization -- [`f55da3aa5`](https://github.com/raptoreum/raptoreum/commit/f55da3aa5) Merge #10711: [tests] Introduce TestNode -- [`f7a679062`](https://github.com/raptoreum/raptoreum/commit/f7a679062) Merge #10854: Avoid using sizes on non-fixed-width types to derive protocol constants. -- [`3eb0e1463`](https://github.com/raptoreum/raptoreum/commit/3eb0e1463) Fix rawtransaction.py test -- [`93e3294ec`](https://github.com/raptoreum/raptoreum/commit/93e3294ec) Remove unsupported parameter from DecodeHexTx calls -- [`499fcecaf`](https://github.com/raptoreum/raptoreum/commit/499fcecaf) Merge #11334: qt: Remove custom fee radio group and remove nCustomFeeRadio setting -- [`a09370aef`](https://github.com/raptoreum/raptoreum/commit/a09370aef) Merge #11108: Changing -txindex requires -reindex, not -reindex-chainstate -- [`f9453e055`](https://github.com/raptoreum/raptoreum/commit/f9453e055) Merge #11145: Fix rounding bug in calculation of minimum change -- [`10c505cdf`](https://github.com/raptoreum/raptoreum/commit/10c505cdf) Merge #11119: [doc] build-windows: Mention that only trusty works -- [`7e8d1fcc1`](https://github.com/raptoreum/raptoreum/commit/7e8d1fcc1) Merge #11097: gitian: quick hack to fix version string in releases -- [`a31fb063a`](https://github.com/raptoreum/raptoreum/commit/a31fb063a) Merge #11081: Add length check for CExtKey deserialization (jonasschnelli, guidovranken) -- [`124f3dbf2`](https://github.com/raptoreum/raptoreum/commit/124f3dbf2) Merge #11083: Fix combinerawtransaction RPC help result section -- [`8308012e1`](https://github.com/raptoreum/raptoreum/commit/8308012e1) Merge #10571: [RPC]Move transaction combining from signrawtransaction to new RPC -- [`a72fc7c7d`](https://github.com/raptoreum/raptoreum/commit/a72fc7c7d) resolve NIT, remove extra line -- [`f7a9b0df4`](https://github.com/raptoreum/raptoreum/commit/f7a9b0df4) move `deterministicMNManager->UpgradeDBIfNeeded();` to be after LoadChainTip -- [`64dde0f6c`](https://github.com/raptoreum/raptoreum/commit/64dde0f6c) add back the todo -- [`689eff3aa`](https://github.com/raptoreum/raptoreum/commit/689eff3aa) Drop unused GetScriptForWitness -- [`4b579c77a`](https://github.com/raptoreum/raptoreum/commit/4b579c77a) Fix remaining issues -- [`02328ae96`](https://github.com/raptoreum/raptoreum/commit/02328ae96) Merge #11044: [wallet] Keypool topup cleanups -- [`ac07bf609`](https://github.com/raptoreum/raptoreum/commit/ac07bf609) revert unintentional change, 10758 -- [`3d445628a`](https://github.com/raptoreum/raptoreum/commit/3d445628a) remove `LogPrintf("Initializing databases...\n");` -- [`e941c9ba5`](https://github.com/raptoreum/raptoreum/commit/e941c9ba5) Merge #11028: Avoid masking of difficulty adjustment errors by checkpoints -- [`2d922f5d3`](https://github.com/raptoreum/raptoreum/commit/2d922f5d3) fix -- [`c438c9322`](https://github.com/raptoreum/raptoreum/commit/c438c9322) Merge #11022: Basic keypool topup -- [`d5fdf62fa`](https://github.com/raptoreum/raptoreum/commit/d5fdf62fa) Merge #10919: Fix more init bugs. -- [`7662c0b79`](https://github.com/raptoreum/raptoreum/commit/7662c0b79) A couple of fixes -- [`16bd20e57`](https://github.com/raptoreum/raptoreum/commit/16bd20e57) Remove segwit related code -- [`21eca6481`](https://github.com/raptoreum/raptoreum/commit/21eca6481) BIP143: Signing logic -- [`fff708d3a`](https://github.com/raptoreum/raptoreum/commit/fff708d3a) BIP143: Verification logic -- [`8da543f27`](https://github.com/raptoreum/raptoreum/commit/8da543f27) Refactor script validation to observe amounts -- [`1f06ecdd5`](https://github.com/raptoreum/raptoreum/commit/1f06ecdd5) add gargs -- [`9f71ab04b`](https://github.com/raptoreum/raptoreum/commit/9f71ab04b) remove chainparams from method call (10758) -- [`05ad6d2ec`](https://github.com/raptoreum/raptoreum/commit/05ad6d2ec) change nEnd to index (might break the progress bar on wallet creation, should test) -- [`cd5a12f9f`](https://github.com/raptoreum/raptoreum/commit/cd5a12f9f) Merge #10862: Remove unused variable int64_t nEnd. Fix typo: "conditon" → "condition". -- [`714438af4`](https://github.com/raptoreum/raptoreum/commit/714438af4) remove rewinding blocks -- [`dbd499308`](https://github.com/raptoreum/raptoreum/commit/dbd499308) Merge #10758: Fix some chainstate-init-order bugs. -- [`0631cd95d`](https://github.com/raptoreum/raptoreum/commit/0631cd95d) Merge #10789: Punctuation/grammer fixes in rpcwallet.cpp -- [`75e8e0a45`](https://github.com/raptoreum/raptoreum/commit/75e8e0a45) add a zero to the GenerateNewKey call -- [`11e41b90c`](https://github.com/raptoreum/raptoreum/commit/11e41b90c) internal -> fInternal -- [`b8c1d66fb`](https://github.com/raptoreum/raptoreum/commit/b8c1d66fb) Merge #10795: No longer ever reuse keypool indexes -- [`d04633d28`](https://github.com/raptoreum/raptoreum/commit/d04633d28) Merge #10707: Better API for estimatesmartfee RPC -- [`65cd33479`](https://github.com/raptoreum/raptoreum/commit/65cd33479) Tools window: Information - make "InstantSend locks" and "Number of Smartnodes" fields copyable -- [`ddef2025b`](https://github.com/raptoreum/raptoreum/commit/ddef2025b) sat -> duff -- [`a7e20cd4c`](https://github.com/raptoreum/raptoreum/commit/a7e20cd4c) Use chainparams passed into ATMPW -- [`e6df5690a`](https://github.com/raptoreum/raptoreum/commit/e6df5690a) Drop segwit related parts and fix cs_main issues -- [`70e386580`](https://github.com/raptoreum/raptoreum/commit/70e386580) Backport meaningful parts of 8149/2b1f6f9ccf36f1e0a2c9d99154e1642f796d7c2b -- [`6fd35565a`](https://github.com/raptoreum/raptoreum/commit/6fd35565a) Merge #13527: policy: Remove promiscuousmempoolflags -- [`9b8df2f52`](https://github.com/raptoreum/raptoreum/commit/9b8df2f52) add dip3params -- [`6fc928541`](https://github.com/raptoreum/raptoreum/commit/6fc928541) Merge bitcoin#10695: [qa] Rewrite BIP65/BIP66 functional tests -- [`eda5dac9f`](https://github.com/raptoreum/raptoreum/commit/eda5dac9f) Merge #10192: Cache full script execution results in addition to signatures -- [`3e7ff3306`](https://github.com/raptoreum/raptoreum/commit/3e7ff3306) Merge #10835: Rename member field according to the style guide -- [`d2f1259c8`](https://github.com/raptoreum/raptoreum/commit/d2f1259c8) Merge #11029: [RPC] trivial: gettxout no longer shows version of tx -- [`c2e6a2f9c`](https://github.com/raptoreum/raptoreum/commit/c2e6a2f9c) Merge #10949: Clarify help message for -discardfee -- [`ec366d259`](https://github.com/raptoreum/raptoreum/commit/ec366d259) Merge #10817: Redefine Dust and add a discard_rate -- [`443b57793`](https://github.com/raptoreum/raptoreum/commit/443b57793) Merge #10784: Do not allow users to get keys from keypool without reserving them -- [`3b7d3c90d`](https://github.com/raptoreum/raptoreum/commit/3b7d3c90d) Merge #10501: remove some unused functions -- ignoring removal of SetPort due to raptoreum#2168 -- [`3e483659a`](https://github.com/raptoreum/raptoreum/commit/3e483659a) Merge #10914: Add missing lock in CScheduler::AreThreadsServicingQueue() -- [`a80f42eab`](https://github.com/raptoreum/raptoreum/commit/a80f42eab) Still pass the disconect block index -- [`6dce8d273`](https://github.com/raptoreum/raptoreum/commit/6dce8d273) Fix includes -- [`91a4b775a`](https://github.com/raptoreum/raptoreum/commit/91a4b775a) fix some things -- [`e4183b093`](https://github.com/raptoreum/raptoreum/commit/e4183b093) remove extra arg -- [`40617436c`](https://github.com/raptoreum/raptoreum/commit/40617436c) Merge #10179: Give CValidationInterface Support for calling notifications on the CScheduler Thread -- [`9829a6dac`](https://github.com/raptoreum/raptoreum/commit/9829a6dac) Merge #10655: Properly document target_confirmations in listsinceblock -- [`93754f8d8`](https://github.com/raptoreum/raptoreum/commit/93754f8d8) Merge #10799: Prevent user from specifying conflicting parameters to fundrawtx -- [`05bed7009`](https://github.com/raptoreum/raptoreum/commit/05bed7009) Merge #10833: Fix typos -- [`0cccde9df`](https://github.com/raptoreum/raptoreum/commit/0cccde9df) fix all of the problems -- [`791c07fb0`](https://github.com/raptoreum/raptoreum/commit/791c07fb0) add gArgs -- [`19b584c3b`](https://github.com/raptoreum/raptoreum/commit/19b584c3b) remove some rbf -- [`c84970899`](https://github.com/raptoreum/raptoreum/commit/c84970899) Merge #10706: Improve wallet fee logic and fix GUI bugs -- [`c62c7ab6d`](https://github.com/raptoreum/raptoreum/commit/c62c7ab6d) Merge #10662: Initialize randomness in benchmarks -- [`de1342791`](https://github.com/raptoreum/raptoreum/commit/de1342791) Merge #10314: Remove unused forward declaration for non-existent ScriptPubKeyToJSON(...) -- [`f2dcac3a4`](https://github.com/raptoreum/raptoreum/commit/f2dcac3a4) Merge #10757: RPC: Introduce getblockstats to plot things (#3058) -- [`51a4e11d6`](https://github.com/raptoreum/raptoreum/commit/51a4e11d6) raptoreumify what made sense in fuzzing.md -- [`b1970add1`](https://github.com/raptoreum/raptoreum/commit/b1970add1) Code Review fixes -- [`8cadbf622`](https://github.com/raptoreum/raptoreum/commit/8cadbf622) bitcoin -> raptoreum -- [`122da986c`](https://github.com/raptoreum/raptoreum/commit/122da986c) Merge #10415: [tests] Speed up fuzzing by ~200x when using afl-fuzz -- [`2f2a6972d`](https://github.com/raptoreum/raptoreum/commit/2f2a6972d) Merge #9691: Init ECC context for test_bitcoin_fuzzy. -- [`32dc5f1da`](https://github.com/raptoreum/raptoreum/commit/32dc5f1da) Merge #9354: Make fuzzer actually test CTxOutCompressor -- [`f55cf1704`](https://github.com/raptoreum/raptoreum/commit/f55cf1704) Merge #9172: Resurrect pstratem's "Simple fuzzing framework" -- [`6905da5fe`](https://github.com/raptoreum/raptoreum/commit/6905da5fe) Merge #11308: [qa] zapwallettxes: Wait up to 3s for mempool reload (#3051) -- [`0599d3a03`](https://github.com/raptoreum/raptoreum/commit/0599d3a03) Backport bitcoin#10831: Batch flushing operations to the walletdb during top up and increase keypool size (#3045) -- [`c851de999`](https://github.com/raptoreum/raptoreum/commit/c851de999) Resolve merge issues -- [`3d6c5ac27`](https://github.com/raptoreum/raptoreum/commit/3d6c5ac27) More mocktime related fixes -- [`59e57337e`](https://github.com/raptoreum/raptoreum/commit/59e57337e) fix wait_node -- [`cd30d6b44`](https://github.com/raptoreum/raptoreum/commit/cd30d6b44) simplify `stop_node` -- [`a67f5375f`](https://github.com/raptoreum/raptoreum/commit/a67f5375f) remove duplicate import -- [`3980caf20`](https://github.com/raptoreum/raptoreum/commit/3980caf20) re-add import shutil -- [`cb480af01`](https://github.com/raptoreum/raptoreum/commit/cb480af01) Raptoreumify -- [`806da3c6e`](https://github.com/raptoreum/raptoreum/commit/806da3c6e) adjust number of parameters in sendmany -- [`c4094c8de`](https://github.com/raptoreum/raptoreum/commit/c4094c8de) Few more tiny trivial fixes -- [`8c2c2a1ad`](https://github.com/raptoreum/raptoreum/commit/8c2c2a1ad) s/bitcoind/raptoreumd/ in some places -- [`76822dd50`](https://github.com/raptoreum/raptoreum/commit/76822dd50) fix imports -- [`4bfef1daa`](https://github.com/raptoreum/raptoreum/commit/4bfef1daa) Add missing raptoreum-specific parts -- [`9828b624a`](https://github.com/raptoreum/raptoreum/commit/9828b624a) `_wait_for_bitcoind_start` should be a part of BitcoinTestFramework -- [`d0288fba5`](https://github.com/raptoreum/raptoreum/commit/d0288fba5) Refactor/fix mocktime usage in tests -- [`9c8365ee6`](https://github.com/raptoreum/raptoreum/commit/9c8365ee6) Fix GetMinimumFee changes -- [`2e235b4b4`](https://github.com/raptoreum/raptoreum/commit/2e235b4b4) Fix rpcs -- [`00052aa15`](https://github.com/raptoreum/raptoreum/commit/00052aa15) Drop rbf-related parts -- [`00c4046e5`](https://github.com/raptoreum/raptoreum/commit/00c4046e5) Wallet: Refactor FundTransaction to accept parameters via CCoinControl -- [`c9784838a`](https://github.com/raptoreum/raptoreum/commit/c9784838a) Merge #10589: More economical fee estimates for RBF and RPC options to control -- [`c853c012e`](https://github.com/raptoreum/raptoreum/commit/c853c012e) Fix amounts formatting in `decoderawtransaction` and `getsuperblockbudget` -- [`a82f22e52`](https://github.com/raptoreum/raptoreum/commit/a82f22e52) Merge #10556: Move stop/start functions from utils.py into BitcoinTestFramework -- [`746ebf165`](https://github.com/raptoreum/raptoreum/commit/746ebf165) fix indendation in wallet.cpp -- [`3a6b2ce27`](https://github.com/raptoreum/raptoreum/commit/3a6b2ce27) backport part of #10481 -- [`ecfdfa64d`](https://github.com/raptoreum/raptoreum/commit/ecfdfa64d) Merge #10792: Replace MAX_OPCODE for OP_NOP10. -- [`1a0d52814`](https://github.com/raptoreum/raptoreum/commit/1a0d52814) #10483 scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead of the macro NULL -- [`ac80c9012`](https://github.com/raptoreum/raptoreum/commit/ac80c9012) Merge #11012: Make sure to clean up mapBlockSource if we've already seen the block -- [`19a17a58d`](https://github.com/raptoreum/raptoreum/commit/19a17a58d) Merge #10968: Add instructions for parallel gitian builds. -- [`7f3d3deda`](https://github.com/raptoreum/raptoreum/commit/7f3d3deda) Merge #11032: [qa] Fix block message processing error in sendheaders.py -- [`e5c94eea0`](https://github.com/raptoreum/raptoreum/commit/e5c94eea0) Merge #10765: Tests: address placement should be deterministic by default -- [`c2fcf849a`](https://github.com/raptoreum/raptoreum/commit/c2fcf849a) Merge #11025: qa: Fix inv race in example_test -- [`50fee01e3`](https://github.com/raptoreum/raptoreum/commit/50fee01e3) Merge #10963: [bench] Restore format state of cout after printing with std::fixed/setprecision -- [`5f2aef826`](https://github.com/raptoreum/raptoreum/commit/5f2aef826) Merge #11003: Docs: Capitalize bullet points in CONTRIBUTING guide -- [`cd490905b`](https://github.com/raptoreum/raptoreum/commit/cd490905b) Merge #10999: Fix amounts formatting in `decoderawtransaction` -- [`dfd14bf57`](https://github.com/raptoreum/raptoreum/commit/dfd14bf57) Merge #10977: [net] Fix use of uninitialized value in getnetworkinfo(const JSONRPCRequest&) -- [`a0fb110e9`](https://github.com/raptoreum/raptoreum/commit/a0fb110e9) Merge #10971: build: fix missing sse42 in depends builds -- [`cfc697527`](https://github.com/raptoreum/raptoreum/commit/cfc697527) Merge #10985: Add undocumented -forcecompactdb to force LevelDB compactions -- [`e72a2e278`](https://github.com/raptoreum/raptoreum/commit/e72a2e278) Merge #10942: Eliminate fee overpaying edge case when subtracting fee from recipients -- [`707f3ec86`](https://github.com/raptoreum/raptoreum/commit/707f3ec86) Merge #10958: Update to latest Bitcoin patches for LevelDB -- [`ae488ba3d`](https://github.com/raptoreum/raptoreum/commit/ae488ba3d) Merge #10885: Reject invalid wallets -- [`417d95f4e`](https://github.com/raptoreum/raptoreum/commit/417d95f4e) Merge #10931: Fix misleading "Method not found" multiwallet errors -- [`0a0ba2837`](https://github.com/raptoreum/raptoreum/commit/0a0ba2837) Merge #10865: Move CloseSocket out of SetSocketNonBlocking and pass socket as const reference -- [`f39372949`](https://github.com/raptoreum/raptoreum/commit/f39372949) Merge #9622: [rpc] listsinceblock should include lost transactions when parameter is a reorg'd block -- [`d10e4e769`](https://github.com/raptoreum/raptoreum/commit/d10e4e769) Merge #10893: [QA] Avoid running multiwallet.py twice -- [`af4450ffe`](https://github.com/raptoreum/raptoreum/commit/af4450ffe) Merge #10604: [wallet] [tests] Add listwallets RPC, include wallet name in `getwalletinfo` and add multiwallet test -- [`ed8d9a780`](https://github.com/raptoreum/raptoreum/commit/ed8d9a780) Merge #10775: nCheckDepth chain height fix -- [`00ceca621`](https://github.com/raptoreum/raptoreum/commit/00ceca621) Merge #10712: Add change output if necessary to reduce excess fee -- [`e78960872`](https://github.com/raptoreum/raptoreum/commit/e78960872) Merge #10543: Change API to estimaterawfee -- [`50ec76307`](https://github.com/raptoreum/raptoreum/commit/50ec76307) Merge #10598: Supress struct/class mismatch warnings introduced in #10284 -- [`bfa64fd15`](https://github.com/raptoreum/raptoreum/commit/bfa64fd15) Merge #10284: Always log debug information for fee calculation in CreateTransaction -- [`1a75762b5`](https://github.com/raptoreum/raptoreum/commit/1a75762b5) Merge #10769: [Qt] replace fee slider with a Dropdown, extend conf. targets -- [`9d206814c`](https://github.com/raptoreum/raptoreum/commit/9d206814c) Merge #10783: [RPC] Various rpc argument fixes -- [`f66ff6be0`](https://github.com/raptoreum/raptoreum/commit/f66ff6be0) Drop state from DisconnectBlock params (finilize 10297 backport) -- [`42cf74dec`](https://github.com/raptoreum/raptoreum/commit/42cf74dec) add #if ENABLE_MINER to relevant sections -- [`53f046ce2`](https://github.com/raptoreum/raptoreum/commit/53f046ce2) Fix makefile -- [`106fdfa0b`](https://github.com/raptoreum/raptoreum/commit/106fdfa0b) Fix tests -- [`6edcf43fc`](https://github.com/raptoreum/raptoreum/commit/6edcf43fc) Merge #10683: rpc: Move the `generate` RPC call to rpcwallet -- [`f1f9e5dfb`](https://github.com/raptoreum/raptoreum/commit/f1f9e5dfb) Merge #11002: [wallet] return correct error code from resendwallettransaction -- [`a7ef22261`](https://github.com/raptoreum/raptoreum/commit/a7ef22261) Merge #10995: Fix resendwallettransactions assert failure if -walletbroadcast=0 -- [`60b3ae182`](https://github.com/raptoreum/raptoreum/commit/60b3ae182) add gArgs -- [`f3259d0d2`](https://github.com/raptoreum/raptoreum/commit/f3259d0d2) remove DB_PEAK_USAGE_FACTOR -- [`453d75657`](https://github.com/raptoreum/raptoreum/commit/453d75657) Merge #10148: Use non-atomic flushing with block replay -- [`8ed0d522f`](https://github.com/raptoreum/raptoreum/commit/8ed0d522f) disable jni in builds -- [`33807c8ce`](https://github.com/raptoreum/raptoreum/commit/33807c8ce) Merge #11000: test: Add resendwallettransactions functional tests -- [`7f1009ed5`](https://github.com/raptoreum/raptoreum/commit/7f1009ed5) Merge #11023: [tests] Add option to attach a python debugger if functional test fails -- [`52aef4cfe`](https://github.com/raptoreum/raptoreum/commit/52aef4cfe) Merge #10301: Check if sys/random.h is required for getentropy. -- [`8cb2508c9`](https://github.com/raptoreum/raptoreum/commit/8cb2508c9) Merge #10974: Fix typo in sendcoinsdialog. -- [`80bc6df26`](https://github.com/raptoreum/raptoreum/commit/80bc6df26) Merge #10892: Replace traditional for with ranged for in block and transaction primitives -- [`07d08a822`](https://github.com/raptoreum/raptoreum/commit/07d08a822) Merge #10912: [tests] Fix incorrect memory_cleanse(…) call in crypto_tests.cpp -- [`5dc2193d2`](https://github.com/raptoreum/raptoreum/commit/5dc2193d2) Merge #10824: Avoid unnecessary work in SetNetworkActive -- [`8fdf59431`](https://github.com/raptoreum/raptoreum/commit/8fdf59431) Merge #10927: test: Make sure wallet.backup is created in temp path -- [`b2b0bc9b0`](https://github.com/raptoreum/raptoreum/commit/b2b0bc9b0) Merge #10870: [Qt] Use wallet 0 in rpc console if running with multiple wallets -- [`6096212d5`](https://github.com/raptoreum/raptoreum/commit/6096212d5) Merge #10883: Rename -usewallet to -rpcwallet -- [`1a9645228`](https://github.com/raptoreum/raptoreum/commit/1a9645228) add gArgs -- [`fdf34ff65`](https://github.com/raptoreum/raptoreum/commit/fdf34ff65) Merge #10849: Multiwallet: simplest endpoint support -- [`6fb74ead6`](https://github.com/raptoreum/raptoreum/commit/6fb74ead6) Merge #10832: init: Factor out AppInitLockDataDirectory and fix startup core dump issue -- [`d97fd1ca7`](https://github.com/raptoreum/raptoreum/commit/d97fd1ca7) state that getinfo will be deprecated in a future version -- [`d6633b5fb`](https://github.com/raptoreum/raptoreum/commit/d6633b5fb) apply rpcconsole.cpp patch -- [`4a22fb78f`](https://github.com/raptoreum/raptoreum/commit/4a22fb78f) s/raptoreum-util-test.py/bitcoin-util-test.py -- [`e0424c1a0`](https://github.com/raptoreum/raptoreum/commit/e0424c1a0) s/libbitcoin/libraptoreum -- [`316fa1859`](https://github.com/raptoreum/raptoreum/commit/316fa1859) s/bitcoind/raptoreumd -- [`f38ed3c71`](https://github.com/raptoreum/raptoreum/commit/f38ed3c71) #10821 continued -- [`64c195a03`](https://github.com/raptoreum/raptoreum/commit/64c195a03) remove witness/segwit based text -- [`c84636a47`](https://github.com/raptoreum/raptoreum/commit/c84636a47) update commented time estimates for fees -- [`6ce278f56`](https://github.com/raptoreum/raptoreum/commit/6ce278f56) s/149900/140100 -- [`c34ec30b6`](https://github.com/raptoreum/raptoreum/commit/c34ec30b6) s/bitcoin/raptoreum -- [`83af2d8d5`](https://github.com/raptoreum/raptoreum/commit/83af2d8d5) remove redundant wait_node -- [`ae1beffe0`](https://github.com/raptoreum/raptoreum/commit/ae1beffe0) remove boost list_of -- [`d76cd903e`](https://github.com/raptoreum/raptoreum/commit/d76cd903e) Merge #10419: [trivial] Fix three recently introduced typos -- [`b430366dd`](https://github.com/raptoreum/raptoreum/commit/b430366dd) Merge #10199: Better fee estimates -- [`c7dcf79f0`](https://github.com/raptoreum/raptoreum/commit/c7dcf79f0) Merge #10821: Add SSE4 optimized SHA256 -- [`d587fe3f0`](https://github.com/raptoreum/raptoreum/commit/d587fe3f0) Merge #10681: add gdb attach process to test README -- [`b535dfbc4`](https://github.com/raptoreum/raptoreum/commit/b535dfbc4) Merge #10857: [RPC] Add a deprecation warning to getinfo's output -- [`2ada45284`](https://github.com/raptoreum/raptoreum/commit/2ada45284) Merge #10864: Avoid redundant redeclaration of GetWarnings(const string&) -- [`fa2cd234b`](https://github.com/raptoreum/raptoreum/commit/fa2cd234b) \#10193 Introduce src/reverse_iterator.hpp and include it... -- [`96897e51a`](https://github.com/raptoreum/raptoreum/commit/96897e51a) \#10193 Fix const_reverse_iterator constructor (pass const ptr) -- [`d6d462fd7`](https://github.com/raptoreum/raptoreum/commit/d6d462fd7) #10193 scripted-diff: Remove BOOST_REVERSE_FOREACH -- [`c123e10cc`](https://github.com/raptoreum/raptoreum/commit/c123e10cc) #10193 scripted-diff: Remove `#include ` -- [`0fe9f757e`](https://github.com/raptoreum/raptoreum/commit/0fe9f757e) \#10193 clang-format: Delete ForEachMacros -- [`3dddfc6b4`](https://github.com/raptoreum/raptoreum/commit/3dddfc6b4) Merge #9909: tests: Add FindEarliestAtLeast test for edge cases -- [`6320d516b`](https://github.com/raptoreum/raptoreum/commit/6320d516b) Merge #10535: [qa] fundrawtx: Fix shutdown race -- [`e4c41e74a`](https://github.com/raptoreum/raptoreum/commit/e4c41e74a) fix build related to #10760 -- [`ab1120956`](https://github.com/raptoreum/raptoreum/commit/ab1120956) Merge #10844: Use range based for loop -- [`dc97d48bb`](https://github.com/raptoreum/raptoreum/commit/dc97d48bb) Merge #10760: Avoid dereference-of-casted-pointer -- [`cea9e1cf0`](https://github.com/raptoreum/raptoreum/commit/cea9e1cf0) Merge #10855: random: only use getentropy on openbsd -- [`644274fde`](https://github.com/raptoreum/raptoreum/commit/644274fde) Merge #9980: Fix mem access violation merkleblock -- [`083c49e1d`](https://github.com/raptoreum/raptoreum/commit/083c49e1d) Merge #10837: Fix resource leak on error in GetDevURandom -- [`9ad533089`](https://github.com/raptoreum/raptoreum/commit/9ad533089) Merge #10803: Explicitly search for bdb5.3. -- [`ea07a5213`](https://github.com/raptoreum/raptoreum/commit/ea07a5213) Merge #10330: [wallet] fix zapwallettxes interaction with persistent mempool -- [`fc94fac75`](https://github.com/raptoreum/raptoreum/commit/fc94fac75) Merge #10842: Fix incorrect Doxygen tag (@ince → @since). Doxygen parameter name matching. -- [`72fbee959`](https://github.com/raptoreum/raptoreum/commit/72fbee959) Merge #11196: Switch memory_cleanse implementation to BoringSSL's to ensure memory clearing even with -lto -- [`4079942b5`](https://github.com/raptoreum/raptoreum/commit/4079942b5) use old benchmark system -- [`0840ce3a9`](https://github.com/raptoreum/raptoreum/commit/0840ce3a9) Merge #15649: Add ChaCha20Poly1305@Bitcoin AEAD -- [`996b1f078`](https://github.com/raptoreum/raptoreum/commit/996b1f078) include vector in poly1305.cpp -- [`0129a8453`](https://github.com/raptoreum/raptoreum/commit/0129a8453) use old benchmarking system -- [`4493671b8`](https://github.com/raptoreum/raptoreum/commit/4493671b8) Merge #15519: Add Poly1305 implementation -- [`db5f3161f`](https://github.com/raptoreum/raptoreum/commit/db5f3161f) Use old BENCHMARK setup -- [`21ace6629`](https://github.com/raptoreum/raptoreum/commit/21ace6629) Merge #15512: Add ChaCha20 encryption option (XOR) -- [`d9c541e9d`](https://github.com/raptoreum/raptoreum/commit/d9c541e9d) Merge #10704: [tests] nits in dbcrash.py -- [`7e4318dda`](https://github.com/raptoreum/raptoreum/commit/7e4318dda) Merge bitcoin#8329: Consensus: MOVEONLY: Move functions for tx verification (#3030) -- [`a4f046cd0`](https://github.com/raptoreum/raptoreum/commit/a4f046cd0) adjust formatting from review configure.ac -- [`0eae9ed90`](https://github.com/raptoreum/raptoreum/commit/0eae9ed90) remove witness comment/text -- [`2b9216e98`](https://github.com/raptoreum/raptoreum/commit/2b9216e98) /s/BTC/RAPTOREUM -- [`188f4a752`](https://github.com/raptoreum/raptoreum/commit/188f4a752) Merge #10735: Avoid static analyzer warnings regarding uninitialized arguments -- [`c097ab84d`](https://github.com/raptoreum/raptoreum/commit/c097ab84d) Merge #10840: Remove duplicate include -- [`d7057d429`](https://github.com/raptoreum/raptoreum/commit/d7057d429) Merge #10766: Building Environment: Set ARFLAGS to cr -- [`6d856aeb4`](https://github.com/raptoreum/raptoreum/commit/6d856aeb4) Merge #10820: Use cpuid intrinsics instead of asm code -- [`483786a72`](https://github.com/raptoreum/raptoreum/commit/483786a72) Merge #10812: [utils] Allow bitcoin-cli's -rpcconnect option to be used with square brackets -- [`445e8d85c`](https://github.com/raptoreum/raptoreum/commit/445e8d85c) Merge #10807: getbalance example covers at least 6 confirms -- [`38f52f881`](https://github.com/raptoreum/raptoreum/commit/38f52f881) Merge #10816: Properly forbid -salvagewallet and -zapwallettxes for multi wallet. -- [`29760e78b`](https://github.com/raptoreum/raptoreum/commit/29760e78b) Merge #10808: Avoid some new gcc warnings in 15 -- [`b14bd204c`](https://github.com/raptoreum/raptoreum/commit/b14bd204c) Merge #10819: Fix uninitialized atomic variables -- [`17177202a`](https://github.com/raptoreum/raptoreum/commit/17177202a) Merge #10557: Make check to distinguish between orphan txs and old txs more efficient. -- [`a0ff957d1`](https://github.com/raptoreum/raptoreum/commit/a0ff957d1) Merge #10806: build: verify that the assembler can handle crc32 functions -- [`09854d661`](https://github.com/raptoreum/raptoreum/commit/09854d661) Merge #10780: Simplify "!foo || (foo && bar)" as "!foo || bar" -- [`526036ead`](https://github.com/raptoreum/raptoreum/commit/526036ead) Merge #9804: Fixes subscript 0 (&var[0]) where should use (var.data()) instead. -- [`28197ef74`](https://github.com/raptoreum/raptoreum/commit/28197ef74) Merge #10714: Avoid printing incorrect block indexing time due to uninitialized variable -- [`ec01825ba`](https://github.com/raptoreum/raptoreum/commit/ec01825ba) Merge #10786: Add PR description to merge commit in github-merge.py -- [`b195cbb5e`](https://github.com/raptoreum/raptoreum/commit/b195cbb5e) Merge #10651: Verify binaries from bitcoincore.org and bitcoin.org -- [`f1c9b7a89`](https://github.com/raptoreum/raptoreum/commit/f1c9b7a89) Merge #10190: [tests] mining functional tests (including regression test for submitblock) -- [`cf40b5409`](https://github.com/raptoreum/raptoreum/commit/cf40b5409) Merge #10676: document script-based return fields for validateaddress -- [`6e2f77933`](https://github.com/raptoreum/raptoreum/commit/6e2f77933) Merge #10747: [rpc] fix verbose argument for getblock in bitcoin-cli -- [`a60f1e2b5`](https://github.com/raptoreum/raptoreum/commit/a60f1e2b5) Merge #10710: REST/RPC example update -- [`9221e0d3c`](https://github.com/raptoreum/raptoreum/commit/9221e0d3c) Merge #10728: fix typo in help text for removeprunedfunds -- [`184847c2e`](https://github.com/raptoreum/raptoreum/commit/184847c2e) Merge #10673: [qt] Avoid potential null pointer dereference in TransactionView::exportClicked() -- [`0a215695a`](https://github.com/raptoreum/raptoreum/commit/0a215695a) Merge #10685: Clarify CCoinsViewMemPool documentation. -- [`9bcadebf7`](https://github.com/raptoreum/raptoreum/commit/9bcadebf7) Merge #10631: Use the override specifier (C++11) where we expect to be overriding the virtual function of a base class -- [`77088082e`](https://github.com/raptoreum/raptoreum/commit/77088082e) Merge #10684: Remove no longer used mempool.exists(outpoint) -- [`d57cbc615`](https://github.com/raptoreum/raptoreum/commit/d57cbc615) Backport #12783: macOS: disable AppNap during sync (and mixing) (#3024) -- [`2cbf726ab`](https://github.com/raptoreum/raptoreum/commit/2cbf726ab) Backport #8694: Basic multiwallet support (#3022) -- [`8b224e093`](https://github.com/raptoreum/raptoreum/commit/8b224e093) revert the accidental revertion of c1bdf64 -- [`4e46f2511`](https://github.com/raptoreum/raptoreum/commit/4e46f2511) add end commend for all llmq namespace -- [`216cbfdd9`](https://github.com/raptoreum/raptoreum/commit/216cbfdd9) Merge #11792: Trivial: fix comments for ZeroMQ bitcoind args -- [`a38648c91`](https://github.com/raptoreum/raptoreum/commit/a38648c91) Merge #12588: [Utils] Remove deprecated PyZMQ call from Python ZMQ example -- [`b71a187da`](https://github.com/raptoreum/raptoreum/commit/b71a187da) Backport yet another part of 11824 -- [`2f8512b92`](https://github.com/raptoreum/raptoreum/commit/2f8512b92) Merge #11126: Acquire cs_main lock before cs_wallet during wallet initialization -- [`bcef238d0`](https://github.com/raptoreum/raptoreum/commit/bcef238d0) raptoreumify test/functional/README.md -- [`2f5606358`](https://github.com/raptoreum/raptoreum/commit/2f5606358) raptoreumify test/README.md -- [`7e866ed2d`](https://github.com/raptoreum/raptoreum/commit/7e866ed2d) don't use replace-by-fee.py as example -- [`f4736b382`](https://github.com/raptoreum/raptoreum/commit/f4736b382) update seeds emplace_back based on code review -- [`5ac5e66f3`](https://github.com/raptoreum/raptoreum/commit/5ac5e66f3) remove unneeded space wallet.cpp -- [`4c61aedfc`](https://github.com/raptoreum/raptoreum/commit/4c61aedfc) Merge #10659: [qa] blockchain: Pass on closed connection during generate call -- [`e19fc0b9b`](https://github.com/raptoreum/raptoreum/commit/e19fc0b9b) Merge #10118: Util: Remove redundant calls to argsGlobal.IsArgSet() -- [`2708a7be0`](https://github.com/raptoreum/raptoreum/commit/2708a7be0) Merge #10612: The young person's guide to the test_framework -- [`4b2f27070`](https://github.com/raptoreum/raptoreum/commit/4b2f27070) Merge #10496: Add Binds, WhiteBinds, Whitelistedrange to CConnman::Options -- [`f2a477646`](https://github.com/raptoreum/raptoreum/commit/f2a477646) Merge #9544: [trivial] Add end of namespace comments. Improve consistency. -- [`8c998f2f9`](https://github.com/raptoreum/raptoreum/commit/8c998f2f9) fix tests 50 -> 500 -- [`785fa0701`](https://github.com/raptoreum/raptoreum/commit/785fa0701) Merge #10295: [qt] Move some WalletModel functions into CWallet -- [`8677d7599`](https://github.com/raptoreum/raptoreum/commit/8677d7599) Merge #9176: Globals: Pass Consensus::Params through CBlockTreeDB::LoadBlockIndexGuts() -- [`5eca7445a`](https://github.com/raptoreum/raptoreum/commit/5eca7445a) Merge #10412: Improve wallet rescan API -- [`64ef42c79`](https://github.com/raptoreum/raptoreum/commit/64ef42c79) Merge #10446: net: avoid extra dns query per seed -- [`f68c7bc5c`](https://github.com/raptoreum/raptoreum/commit/f68c7bc5c) Merge #10626: doc: Remove outdated minrelaytxfee comment -- [`41b386903`](https://github.com/raptoreum/raptoreum/commit/41b386903) Merge #10400: [RPC] Add an uptime command that displays the amount of time (in seconds) bitcoind has been running -- [`677c78516`](https://github.com/raptoreum/raptoreum/commit/677c78516) Merge #10191: [trivial] Rename unused RPC arguments 'dummy' -- [`f4c0858b4`](https://github.com/raptoreum/raptoreum/commit/f4c0858b4) Merge #10577: Add an explanation of quickly hashing onto a non-power of two range. -- [`3f4d08d36`](https://github.com/raptoreum/raptoreum/commit/3f4d08d36) Merge #10565: [coverage] Remove subtrees and benchmarks from coverage report -- [`5f2c9d730`](https://github.com/raptoreum/raptoreum/commit/5f2c9d730) Merge #10633: doc: Fix various typos -- [`305fd0679`](https://github.com/raptoreum/raptoreum/commit/305fd0679) Merge #10248: Rewrite addrdb with less duplication using CHashVerifier -- [`2116e9301`](https://github.com/raptoreum/raptoreum/commit/2116e9301) Merge #10276: contrib/verifybinaries: allow filtering by platform -- [`31f4a602a`](https://github.com/raptoreum/raptoreum/commit/31f4a602a) Merge #9517: [refactor] Switched httpserver.cpp to use RAII wrapped libevents. -- [`1c4981d71`](https://github.com/raptoreum/raptoreum/commit/1c4981d71) Merge #9343: Don't create change at dust limit -- [`a3abc463f`](https://github.com/raptoreum/raptoreum/commit/a3abc463f) Merge #10530: Fix invalid instantiation and possibly unsafe accesses of array in class base_uint -- [`41302bbae`](https://github.com/raptoreum/raptoreum/commit/41302bbae) Merge #10628: [depends] expat 2.2.1 -- [`6b6ea2461`](https://github.com/raptoreum/raptoreum/commit/6b6ea2461) Merge #10642: Remove obsolete `_MSC_VER` check -- [`43c952d2e`](https://github.com/raptoreum/raptoreum/commit/43c952d2e) Merge #10632: qa: Add stopatheight test -- [`d46aff536`](https://github.com/raptoreum/raptoreum/commit/d46aff536) Merge #10536: Remove unreachable or otherwise redundant code -- [`6489e678c`](https://github.com/raptoreum/raptoreum/commit/6489e678c) Merge #10759: Fix multi_rpc test for hosts that dont default to utf8 -- [`722c373f5`](https://github.com/raptoreum/raptoreum/commit/722c373f5) bitcoin -> raptoreum -- [`eb1b61b36`](https://github.com/raptoreum/raptoreum/commit/eb1b61b36) fix indents -- [`7802c82e3`](https://github.com/raptoreum/raptoreum/commit/7802c82e3) Merge #10533: [tests] Use cookie auth instead of rpcuser and rpcpassword -- [`ed24dbba7`](https://github.com/raptoreum/raptoreum/commit/ed24dbba7) remove Boost_Reverse_foreach -- [`82dcb03e3`](https://github.com/raptoreum/raptoreum/commit/82dcb03e3) REJECT_CONFLICT -> REJECT_DUPLICATE -- [`9d336854f`](https://github.com/raptoreum/raptoreum/commit/9d336854f) Merge #10503: Use REJECT_DUPLICATE for already known and conflicted txn -- [`a8fcc80a1`](https://github.com/raptoreum/raptoreum/commit/a8fcc80a1) Merge #9549: [net] Avoid possibility of NULL pointer dereference in MarkBlockAsInFlight(...) -- [`aa364bf7a`](https://github.com/raptoreum/raptoreum/commit/aa364bf7a) Merge #10555: [tests] various improvements to zmq_test.py -- [`e1a146d95`](https://github.com/raptoreum/raptoreum/commit/e1a146d95) Merge #10592: [trivial] fix indentation for ArgsManager class -- [`5ac6d7c4e`](https://github.com/raptoreum/raptoreum/commit/5ac6d7c4e) Merge #10614: random: fix crash on some 64bit platforms -- [`0647ea656`](https://github.com/raptoreum/raptoreum/commit/0647ea656) Merge #10587: Net: Fix resource leak in ReadBinaryFile(...) -- [`8c4e351c8`](https://github.com/raptoreum/raptoreum/commit/8c4e351c8) Merge #10602: Make clang-format use C++11 features (e.g. `A>` instead of `A >`) -- [`3bae86b62`](https://github.com/raptoreum/raptoreum/commit/3bae86b62) Merge #10582: Pass in smart fee slider value to coin control dialog -- [`c520de239`](https://github.com/raptoreum/raptoreum/commit/c520de239) Merge #9895: Turn TryCreateDirectory() into TryCreateDirectories() -- [`ab02a4335`](https://github.com/raptoreum/raptoreum/commit/ab02a4335) Merge #9738: gettxoutproof() should return consistent result -- [`61ca895c4`](https://github.com/raptoreum/raptoreum/commit/61ca895c4) Merge #10551: [Tests] Wallet encryption functional tests -- [`0cb552a20`](https://github.com/raptoreum/raptoreum/commit/0cb552a20) Merge #10377: Use rdrand as entropy source on supported platforms -- [`e81a28604`](https://github.com/raptoreum/raptoreum/commit/e81a28604) scripted-diff: Remove PAIRTYPE #10502 -- [`0d52db844`](https://github.com/raptoreum/raptoreum/commit/0d52db844) scripted-diff: Remove Q_FOREACH #10502 `-BEGIN VERIFY SCRIPT- sed -i 's/Q_FOREACH *(\(.*\),/for (\1 :/' ./src/*.h ./src/*.cpp ./src/*/*.h ./src/*/*.cpp ./src/*/*/*.h ./src/*/*/*.cpp ; -END VERIFY SCRIPT-` -- [`a15d7405e`](https://github.com/raptoreum/raptoreum/commit/a15d7405e) scripted diff: #10502 Fully remove BOOST_FOREACH `-BEGIN VERIFY SCRIPT- sed -i 's/BOOST_FOREACH *(\(.*\),/for (\1 :/' ./src/*.h ./src/*.cpp ./src/*/*.h ./src/*/*.cpp ./src/*/*/*.h ./src/*/*/*.cpp ; -END VERIFY SCRIPT-` -- [`25008bd38`](https://github.com/raptoreum/raptoreum/commit/25008bd38) Small preparations for Q_FOREACH, PAIRTYPE and `#include ` removal -- [`a0bc91a57`](https://github.com/raptoreum/raptoreum/commit/a0bc91a57) Merge #10480: Improve commit-check-script.sh -- [`946388169`](https://github.com/raptoreum/raptoreum/commit/946388169) Merge #10544: Update to LevelDB 1.20 -- [`10716ea6d`](https://github.com/raptoreum/raptoreum/commit/10716ea6d) Merge #10575: Header include guideline -- [`c1c24205b`](https://github.com/raptoreum/raptoreum/commit/c1c24205b) Merge #10534: Clarify prevector::erase and avoid swap-to-clear -- [`eef9c8ea1`](https://github.com/raptoreum/raptoreum/commit/eef9c8ea1) Merge #10553: Simplify "bool x = y ? true : false". Remove unused function and trailing semicolon. -- [`195d42a28`](https://github.com/raptoreum/raptoreum/commit/195d42a28) Merge #10568: Remove unnecessary forward class declarations in header files -- [`30c5aaead`](https://github.com/raptoreum/raptoreum/commit/30c5aaead) Merge #10578: Add missing include for atomic in db.h -- [`e80ca5361`](https://github.com/raptoreum/raptoreum/commit/e80ca5361) Merge #10549: Avoid printing generic and duplicated "checking for QT" during ./configure -- [`594eb7444`](https://github.com/raptoreum/raptoreum/commit/594eb7444) remove unneeded parenthesises -- [`d93b83732`](https://github.com/raptoreum/raptoreum/commit/d93b83732) Use InsecureRandRange instead of InsecureRandBool -- [`1099c1ad6`](https://github.com/raptoreum/raptoreum/commit/1099c1ad6) Merge #10546: Remove 33 unused Boost includes -- [`80b803250`](https://github.com/raptoreum/raptoreum/commit/80b803250) Merge #10561: Remove duplicate includes -- [`dc5dc4186`](https://github.com/raptoreum/raptoreum/commit/dc5dc4186) Merge #10566: [docs] Use the "domain name setup" image (previously unused) in the gitian docs -- [`6a0f56578`](https://github.com/raptoreum/raptoreum/commit/6a0f56578) Merge #10560: Remove unused constants -- [`2bfa37472`](https://github.com/raptoreum/raptoreum/commit/2bfa37472) Merge #10569: Fix stopatheight -- [`f6400a871`](https://github.com/raptoreum/raptoreum/commit/f6400a871) Merge #10521: Limit variable scope -- [`e9b389d19`](https://github.com/raptoreum/raptoreum/commit/e9b389d19) continued, raptoreum code -- [`b92d2dd66`](https://github.com/raptoreum/raptoreum/commit/b92d2dd66) Merge #10545: Use list initialization (C++11) for maps/vectors instead of boost::assign::map_list_of/list_of -- [`7e7c3ce6c`](https://github.com/raptoreum/raptoreum/commit/7e7c3ce6c) Merge #10548: Use std::unordered_{map,set} (C++11) instead of boost::unordered_{map,set} -- [`b6dc579be`](https://github.com/raptoreum/raptoreum/commit/b6dc579be) Merge #10547: [tests] Use FastRandomContext instead of boost::random::{mt19937,uniform_int_distribution} -- [`20e30fb93`](https://github.com/raptoreum/raptoreum/commit/20e30fb93) Merge #10524: [tests] Remove printf(...) -- [`6318ca636`](https://github.com/raptoreum/raptoreum/commit/6318ca636) insecure_rand() -> InsecureRandBits -- [`57c5cfb0f`](https://github.com/raptoreum/raptoreum/commit/57c5cfb0f) Merge #10321: Use FastRandomContext for all tests -- [`5edec30db`](https://github.com/raptoreum/raptoreum/commit/5edec30db) Merge #10523: Perform member initialization in initialization lists where possible -- [`648848b79`](https://github.com/raptoreum/raptoreum/commit/648848b79) Merge #10331: Share config between util and functional tests -- [`42985c31b`](https://github.com/raptoreum/raptoreum/commit/42985c31b) Merge #10463: Names: BIP9 vs versionbits -- [`37659cd52`](https://github.com/raptoreum/raptoreum/commit/37659cd52) Merge #10431: Prevent shadowing the global dustRelayFee -- [`72a1b6f59`](https://github.com/raptoreum/raptoreum/commit/72a1b6f59) Use sync_with_ping to ensure that we don't start generating blocks too early -- [`3fe858e53`](https://github.com/raptoreum/raptoreum/commit/3fe858e53) wait for node1 in fundrawtransaction(-hd).py tests -- [`6c0b5053b`](https://github.com/raptoreum/raptoreum/commit/6c0b5053b) Fix start_/stop_node-s -- [`493f4336a`](https://github.com/raptoreum/raptoreum/commit/493f4336a) fix tx rate -- [`de33753f0`](https://github.com/raptoreum/raptoreum/commit/de33753f0) Revert "Merge #10376: [tests] fix disconnect_ban intermittency" -- [`b791821c8`](https://github.com/raptoreum/raptoreum/commit/b791821c8) start_node -> self.start_node -- [`3c96b2526`](https://github.com/raptoreum/raptoreum/commit/3c96b2526) stop_node(s) -> self.stop_node(s) in raptoreum specific tests -- [`46dd6a357`](https://github.com/raptoreum/raptoreum/commit/46dd6a357) make mainnetDefaultPort static -- [`a685391c7`](https://github.com/raptoreum/raptoreum/commit/a685391c7) fix AvailableCoins Calls -- [`1bbe050fe`](https://github.com/raptoreum/raptoreum/commit/1bbe050fe) adjust check || -> && -- [`9e2235a4b`](https://github.com/raptoreum/raptoreum/commit/9e2235a4b) add initializing to regtest -- [`4968710a2`](https://github.com/raptoreum/raptoreum/commit/4968710a2) Resolve AvailableCoins method call -- [`9adb72e11`](https://github.com/raptoreum/raptoreum/commit/9adb72e11) remove initialize to 0 in chainparams.h -- [`6ce3e55cb`](https://github.com/raptoreum/raptoreum/commit/6ce3e55cb) add extra params to AvailableCoins calls -- [`6ad8fe0e9`](https://github.com/raptoreum/raptoreum/commit/6ad8fe0e9) adjust CoinType logic -- [`d5d27ad19`](https://github.com/raptoreum/raptoreum/commit/d5d27ad19) s/bitcoind/raptoreumd -- [`39cfd61c0`](https://github.com/raptoreum/raptoreum/commit/39cfd61c0) Merge #9279: Consensus: Move CFeeRate out of libconsensus -- [`535d7d6a8`](https://github.com/raptoreum/raptoreum/commit/535d7d6a8) Merge #10347: Use range-based for loops (C++11) when looping over vector elements -- [`30ad4b8e8`](https://github.com/raptoreum/raptoreum/commit/30ad4b8e8) Merge #8952: Add query options to listunspent RPC call -- [`e7d7ecb6e`](https://github.com/raptoreum/raptoreum/commit/e7d7ecb6e) Set a few param values to 0 by default -- [`e740604f6`](https://github.com/raptoreum/raptoreum/commit/e740604f6) No need for zero initialization of devnet params -- [`50652674b`](https://github.com/raptoreum/raptoreum/commit/50652674b) Merge #8855: Use a proper factory for creating chainparams -- [`175d68ac2`](https://github.com/raptoreum/raptoreum/commit/175d68ac2) Merge #10426: Replace bytes_serialized with bogosize -- [`51525efd6`](https://github.com/raptoreum/raptoreum/commit/51525efd6) Merge #10403: Fix importmulti failure to return rescan errors -- [`35bafa14b`](https://github.com/raptoreum/raptoreum/commit/35bafa14b) Merge #10515: [test] Add test for getchaintxstats -- [`44a55019b`](https://github.com/raptoreum/raptoreum/commit/44a55019b) Merge #10478: rpc: Add listen address to incoming connections in `getpeerinfo` -- [`40cec429b`](https://github.com/raptoreum/raptoreum/commit/40cec429b) Merge #10471: Denote functions CNode::GetRecvVersion() and CNode::GetRefCount() as const -- [`f59e5e67f`](https://github.com/raptoreum/raptoreum/commit/f59e5e67f) Merge #10500: Avoid CWalletTx copies in GetAddressBalances and GetAddressGroupings -- [`e353d271f`](https://github.com/raptoreum/raptoreum/commit/e353d271f) Merge #10359: [tests] functional tests should call BitcoinTestFramework start/stop node methods -- [`70cd81cc8`](https://github.com/raptoreum/raptoreum/commit/70cd81cc8) Merge #10423: [tests] skipped tests should clean up after themselves -- [`c7aa3723c`](https://github.com/raptoreum/raptoreum/commit/c7aa3723c) Merge #10323: Update to latest libsecp256k1 master -- [`b6b486c27`](https://github.com/raptoreum/raptoreum/commit/b6b486c27) Merge #10376: [tests] fix disconnect_ban intermittency -- [`a8c202081`](https://github.com/raptoreum/raptoreum/commit/a8c202081) remove unused import cont. -- [`60475f127`](https://github.com/raptoreum/raptoreum/commit/60475f127) Merge #11831: Always return true if AppInitMain got to the end -- [`a740a0cec`](https://github.com/raptoreum/raptoreum/commit/a740a0cec) remove extra argument from code review -- [`5a760dd90`](https://github.com/raptoreum/raptoreum/commit/5a760dd90) remove duplicate code -- [`dd99dd08c`](https://github.com/raptoreum/raptoreum/commit/dd99dd08c) add gArgs for a couple things not caught by scripted diff -- [`5d5171f47`](https://github.com/raptoreum/raptoreum/commit/5d5171f47) remove unused gArgs wrappers -- [`6bfbe6053`](https://github.com/raptoreum/raptoreum/commit/6bfbe6053) Scripted diff `find src/ -name "*.cpp" ! -wholename "src/util.h" ! -wholename "src/util.cpp" | xargs perl -i -pe 's/(?`fs` and some related cleanup -- [`250195185`](https://github.com/raptoreum/raptoreum/commit/250195185) Adjust CDSNotificationInterface to align with CValidationInterface changes -- [`d180061b8`](https://github.com/raptoreum/raptoreum/commit/d180061b8) Pass block index via BlockDisconnected -- [`282d1554d`](https://github.com/raptoreum/raptoreum/commit/282d1554d) adjust examples/raptoreum.conf -- [`e451325d6`](https://github.com/raptoreum/raptoreum/commit/e451325d6) Merge #10186: Remove SYNC_TRANSACTION_NOT_IN_BLOCK magic number -- [`60438257a`](https://github.com/raptoreum/raptoreum/commit/60438257a) Merge #9725: CValidationInterface Cleanups -- [`f893ac66c`](https://github.com/raptoreum/raptoreum/commit/f893ac66c) Merge #10124: [test] Suppress test logging spam -- [`a54ff70ff`](https://github.com/raptoreum/raptoreum/commit/a54ff70ff) Merge #9902: Lightweight abstraction of boost::filesystem -- [`515343963`](https://github.com/raptoreum/raptoreum/commit/515343963) Merge #10036: Fix init README format to render correctly on github -- [`c8a565d6e`](https://github.com/raptoreum/raptoreum/commit/c8a565d6e) Merge #10090: Update bitcoin.conf with example for pruning -- [`6f558270d`](https://github.com/raptoreum/raptoreum/commit/6f558270d) Merge #10143: [net] Allow disconnectnode RPC to be called with node id -- [`4efa99c2d`](https://github.com/raptoreum/raptoreum/commit/4efa99c2d) Merge #10221: Stop treating coinbase outputs differently in GUI: show them at 1conf -- [`16053cd52`](https://github.com/raptoreum/raptoreum/commit/16053cd52) Merge #10226: wallet: Use boost to more portably ensure -wallet specifies only a filename -- [`7fa60a1c7`](https://github.com/raptoreum/raptoreum/commit/7fa60a1c7) Merge #10219: Tests: Order Python Tests Differently -- [`0b232fd1c`](https://github.com/raptoreum/raptoreum/commit/0b232fd1c) Merge #10208: [wallet] Rescan abortability -- [`55d1251ff`](https://github.com/raptoreum/raptoreum/commit/55d1251ff) Merge #9480: De-duplicate SignatureCacheHasher -- [`29194b1f5`](https://github.com/raptoreum/raptoreum/commit/29194b1f5) Backport Bitcoin#9424, Bitcoin#10123 and Bitcoin#10153 (#2918) -- [`15fa1873d`](https://github.com/raptoreum/raptoreum/commit/15fa1873d) Drop redundant imports and fix related code -- [`6f91144f2`](https://github.com/raptoreum/raptoreum/commit/6f91144f2) Fix p2p-fingerprint.py -- [`92fed9254`](https://github.com/raptoreum/raptoreum/commit/92fed9254) Fix and re-enable pruning.py -- [`bfeb5bca4`](https://github.com/raptoreum/raptoreum/commit/bfeb5bca4) fix txindex.py and add it to extended scripts -- [`c37008a45`](https://github.com/raptoreum/raptoreum/commit/c37008a45) update dip4-coinbasemerkalroots.py and llmq-is-cl-conflicts.py -- [`7fd979cc0`](https://github.com/raptoreum/raptoreum/commit/7fd979cc0) Merge #10114: [tests] sync_with_ping should assert that ping hasn't timed out -- [`4121daba2`](https://github.com/raptoreum/raptoreum/commit/4121daba2) Merge #10098: Make qt wallet test compatible with qt4 -- [`cc06ef551`](https://github.com/raptoreum/raptoreum/commit/cc06ef551) Merge #10109: Remove SingleNodeConnCB -- [`94aa904c0`](https://github.com/raptoreum/raptoreum/commit/94aa904c0) Merge #10107: Remove unused variable. Remove accidental trailing semicolons in Python code -- [`404e244d1`](https://github.com/raptoreum/raptoreum/commit/404e244d1) Merge #10088: Trivial: move several relay options into the relay help group -- [`05cb5a058`](https://github.com/raptoreum/raptoreum/commit/05cb5a058) Merge #10108: ApproximateBestSubset should take inputs by reference, not value -- [`bfd63c179`](https://github.com/raptoreum/raptoreum/commit/bfd63c179) Merge #10076: [qa] combine_logs: Use ordered list for logfiles -- [`e57559a8d`](https://github.com/raptoreum/raptoreum/commit/e57559a8d) Merge #10096: Check that all test scripts in test/functional are being run -- [`c2258978b`](https://github.com/raptoreum/raptoreum/commit/c2258978b) Merge #10057: [init] Deduplicated sigaction() boilerplate -- [`6bb55d547`](https://github.com/raptoreum/raptoreum/commit/6bb55d547) Merge #10056: [zmq] Call va_end() on va_start()ed args. -- [`142b5cba0`](https://github.com/raptoreum/raptoreum/commit/142b5cba0) Merge #10073: Actually run assumevalid.py -- [`14001a3d9`](https://github.com/raptoreum/raptoreum/commit/14001a3d9) Merge #10085: Docs: remove 'noconnect' option -- [`120941793`](https://github.com/raptoreum/raptoreum/commit/120941793) Merge #10083: [QA] Renaming rawTx into rawtx -- [`1781c7a70`](https://github.com/raptoreum/raptoreum/commit/1781c7a70) Merge #10069: [QA] Fix typo in fundrawtransaction test -- [`379312931`](https://github.com/raptoreum/raptoreum/commit/379312931) Merge #9946: Fix build errors if spaces in path or parent directory -- [`ba20c9031`](https://github.com/raptoreum/raptoreum/commit/ba20c9031) Merge #10067: [trivial] Dead code removal -- [`ae05068c5`](https://github.com/raptoreum/raptoreum/commit/ae05068c5) Merge #10053: [test] Allow functional test cases to be skipped -- [`9f07f489d`](https://github.com/raptoreum/raptoreum/commit/9f07f489d) Merge #10047: [tests] Remove unused variables and imports -- [`96a5f5730`](https://github.com/raptoreum/raptoreum/commit/96a5f5730) Merge #9500: [Qt][RPC] Autocomplete commands for 'help' command in debug console -- [`07e0567dc`](https://github.com/raptoreum/raptoreum/commit/07e0567dc) Merge #9558: Clarify assumptions made about when BlockCheck is called -- [`2aa3f890d`](https://github.com/raptoreum/raptoreum/commit/2aa3f890d) Merge #10029: Fix parameter naming inconsistencies between .h and .cpp files -- [`7edb9e15a`](https://github.com/raptoreum/raptoreum/commit/7edb9e15a) Merge #10017: combine_logs.py - aggregates log files from multiple bitcoinds during functional tests. -- [`f2e976a05`](https://github.com/raptoreum/raptoreum/commit/f2e976a05) Merge #10045: [trivial] Fix typos in comments -- [`2c833eff3`](https://github.com/raptoreum/raptoreum/commit/2c833eff3) Merge #10039: Fix compile errors with Qt 5.3.2 and Boost 1.55.0 -- [`a6eee07f2`](https://github.com/raptoreum/raptoreum/commit/a6eee07f2) Merge bitcoin#9963: util: Properly handle errors during log message formatting (#2917) -- [`67c735b15`](https://github.com/raptoreum/raptoreum/commit/67c735b15) s/bitcoin-config.h/raptoreum-config.h/ -- [`2f63322cd`](https://github.com/raptoreum/raptoreum/commit/2f63322cd) raptoreumify "Finding reviewers" section to be more relevant -- [`e7a21faa2`](https://github.com/raptoreum/raptoreum/commit/e7a21faa2) Merge Bitcoin#9960: Trivial: Add const modifier to GetHDChain and IsHDEnabled -- [`eecc72436`](https://github.com/raptoreum/raptoreum/commit/eecc72436) Merge #10564: Return early in IsBanned. -- [`742744f25`](https://github.com/raptoreum/raptoreum/commit/742744f25) Merge #10522: [wallet] Remove unused variables -- [`31bb4622a`](https://github.com/raptoreum/raptoreum/commit/31bb4622a) Merge #10538: [trivial] Fix typo: "occurrences" (misspelled as "occurrances") -- [`f57063155`](https://github.com/raptoreum/raptoreum/commit/f57063155) Merge #10514: Bugfix: missing == 0 after randrange -- [`b708ea819`](https://github.com/raptoreum/raptoreum/commit/b708ea819) Merge #10469: Fixing typo in rpcdump.cpp -- [`55dc3dae5`](https://github.com/raptoreum/raptoreum/commit/55dc3dae5) Merge #10486: devtools: Retry after signing fails in github-merge -- [`0d2f2b361`](https://github.com/raptoreum/raptoreum/commit/0d2f2b361) Merge #10273: [scripts] Minor improvements to `macdeployqtplus` script. -- [`317b797e2`](https://github.com/raptoreum/raptoreum/commit/317b797e2) Merge #9670: contrib: github-merge improvements -- [`a3467dd26`](https://github.com/raptoreum/raptoreum/commit/a3467dd26) Merge #10228: build: regenerate bitcoin-config.h as necessary -- [`a089c9325`](https://github.com/raptoreum/raptoreum/commit/a089c9325) Merge #9827: Improve ScanForWalletTransactions return value -- [`383d1819a`](https://github.com/raptoreum/raptoreum/commit/383d1819a) Merge #10211: [doc] Contributor fixes & new "finding reviewers" section -- [`632956a80`](https://github.com/raptoreum/raptoreum/commit/632956a80) Merge #9693: Prevent integer overflow in ReadVarInt. -- [`0db1328a2`](https://github.com/raptoreum/raptoreum/commit/0db1328a2) Merge #10177: Changed "Send" button default status from true to false -- [`dccd6970b`](https://github.com/raptoreum/raptoreum/commit/dccd6970b) Merge #10164: Wallet: reduce excess logic InMempool() -- [`23530a88a`](https://github.com/raptoreum/raptoreum/commit/23530a88a) Merge #10135: [p2p] Send the correct error code in reject messages -- [`e5ecff6e8`](https://github.com/raptoreum/raptoreum/commit/e5ecff6e8) Merge #9949: [bench] Avoid function call arguments which are pointers to uninitialized values -- [`3dcaf4749`](https://github.com/raptoreum/raptoreum/commit/3dcaf4749) Merge #10166: Ignore Doxyfile generated from Doxyfile.in template. -- [`13cdff498`](https://github.com/raptoreum/raptoreum/commit/13cdff498) Merge #10104: linearize script: Option to use RPC cookie -- [`f471b75ae`](https://github.com/raptoreum/raptoreum/commit/f471b75ae) Merge #9533: Allow non-power-of-2 signature cache sizes -- [`198808894`](https://github.com/raptoreum/raptoreum/commit/198808894) Merge #10058: No need to use OpenSSL malloc/free -- [`22b21f50c`](https://github.com/raptoreum/raptoreum/commit/22b21f50c) Merge #10077: [qa] Add setnetworkactive smoke test -- [`9fa51cc66`](https://github.com/raptoreum/raptoreum/commit/9fa51cc66) Merge #10072: Remove sources of unreliablility in extended functional tests -- [`818ec218d`](https://github.com/raptoreum/raptoreum/commit/818ec218d) Merge #10128: Speed Up CuckooCache tests -- [`07ed44df6`](https://github.com/raptoreum/raptoreum/commit/07ed44df6) Merge #10136: build: Disable Wshadow warning -- [`b5968cd7a`](https://github.com/raptoreum/raptoreum/commit/b5968cd7a) Merge #10129: scheduler: fix sub-second precision with boost < 1.50 -- [`16641e1b1`](https://github.com/raptoreum/raptoreum/commit/16641e1b1) Merge #10095: refactor: Move GetDifficulty out of `rpc/server.h` -- [`6edbc9ceb`](https://github.com/raptoreum/raptoreum/commit/6edbc9ceb) Merge bitcoin#9956: Reorganise qa directory (#2912) -- [`ace96a941`](https://github.com/raptoreum/raptoreum/commit/ace96a941) Drop xvfb and run tests in linux64_nowallet -- [`fc1b3772d`](https://github.com/raptoreum/raptoreum/commit/fc1b3772d) Merge #10899: [test] Qt: Use `_putenv_s` instead of setenv on Windows builds -- [`f8c3f9f7d`](https://github.com/raptoreum/raptoreum/commit/f8c3f9f7d) Merge #10142: Run bitcoin_test-qt under minimal QPA platform -- [`826846f15`](https://github.com/raptoreum/raptoreum/commit/826846f15) Review suggestions -- [`9cef545ac`](https://github.com/raptoreum/raptoreum/commit/9cef545ac) code review -- [`720f13d69`](https://github.com/raptoreum/raptoreum/commit/720f13d69) add a comment linking to xvfb documentation -- [`5f4519804`](https://github.com/raptoreum/raptoreum/commit/5f4519804) Merge #9734: Add updating of chainTxData to release process -- [`1914c2d78`](https://github.com/raptoreum/raptoreum/commit/1914c2d78) Merge #10038: Add mallocinfo mode to `getmemoryinfo` RPC -- [`de0919220`](https://github.com/raptoreum/raptoreum/commit/de0919220) Merge #10027: Set to nullptr after delete -- [`d56322285`](https://github.com/raptoreum/raptoreum/commit/d56322285) Merge #10033: Trivial: Fix typo in key.h comment -- [`22563f369`](https://github.com/raptoreum/raptoreum/commit/22563f369) Merge #10024: [trivial] Use log.info() instead of print() in remaining functional test cases. -- [`dd91bd7b3`](https://github.com/raptoreum/raptoreum/commit/dd91bd7b3) Merge #9911: Wshadow: various gcc fixes -- [`eea802738`](https://github.com/raptoreum/raptoreum/commit/eea802738) Merge #9987: Remove unused code -- [`6376da03f`](https://github.com/raptoreum/raptoreum/commit/6376da03f) Merge #9818: Save watch only key timestamps when reimporting keys -- [`8e0968faf`](https://github.com/raptoreum/raptoreum/commit/8e0968faf) Merge #9690: Change 'Clear' button string to 'Reset' -- [`aee4472ac`](https://github.com/raptoreum/raptoreum/commit/aee4472ac) Merge #9974: Add basic Qt wallet test -- [`ae9ca8459`](https://github.com/raptoreum/raptoreum/commit/ae9ca8459) Merge #10010: util: rename variable to avoid shadowing -- [`594b78fdf`](https://github.com/raptoreum/raptoreum/commit/594b78fdf) Merge #9921: build: Probe MSG_DONTWAIT in the same way as MSG_NOSIGNAL -- [`5ae202da9`](https://github.com/raptoreum/raptoreum/commit/5ae202da9) Merge #9842: Fix RPC failure testing (continuation of #9707) -- [`1cfda206a`](https://github.com/raptoreum/raptoreum/commit/1cfda206a) Merge #9993: Initialize nRelockTime diff --git a/doc/release-notes/raptoreum/release-notes-1.13.17.00.md b/doc/release-notes/raptoreum/release-notes-1.13.17.00.md new file mode 100644 index 0000000000..4a6b7c8c16 --- /dev/null +++ b/doc/release-notes/raptoreum/release-notes-1.13.17.00.md @@ -0,0 +1,23 @@ +Raptoreum Core version 1.13.17.00 +========================== + +Release is now available from: + + + +This is a new major version release, bringing new features, various bugfixes +and other improvements. + +This release is mandatory for all nodes. + +Please report bugs using the issue tracker at github: + + + + +Upgrading and downgrading +========================= + +How to Upgrade +-------------- +TODO \ No newline at end of file diff --git a/doc/release-process.md b/doc/release-process.md index ae37a5348a..9a0a6a154c 100644 --- a/doc/release-process.md +++ b/doc/release-process.md @@ -1,17 +1,18 @@ Release Process ==================== -* Update translations, see [translation_process.md](https://github.com/raptoreum/raptoreum/blob/master/doc/translation_process.md#synchronising-translations). +* Update translations, see [translation_process.md](https://github.com/raptor3um/raptoreum/blob/master/doc/translation_process.md#synchronising-translations). -* Update manpages, see [gen-manpages.sh](https://github.com/raptoreum/raptoreum/blob/master/contrib/devtools/README.md#gen-manpagessh). +* Update manpages, see [gen-manpages.sh](https://github.com/raptor3um/raptoreum/blob/master/contrib/devtools/README.md#gen-manpagessh). +* Update release candidate version in `configure.am` (`CLIENT_VERSION_RC`) Before every minor and major release: * Update [bips.md](bips.md) to account for changes since the last release. -* Update version in `configure.ac` (don't forget to set `CLIENT_VERSION_IS_RELEASE` to `true`) +* Update version in `configure.ac` (don't forget to set `CLIENT_VERSION_IS_RELEASE` to `true`) (don't forget to set `CLIENT_VERSION_RC` to `0`) * Write release notes (see below) * Update `src/chainparams.cpp` nMinimumChainWork with information from the getblockchaininfo rpc. -* Update `src/chainparams.cpp` defaultAssumeValid with information from the getblockhash rpc. +* Update `src/chainparams.cpp` defaultAssumeValid with information from the getblockhash rpc. - The selected value must not be orphaned so it may be useful to set the value two blocks back from the tip. - Testnet should be set some tens of thousands back from the tip due to reorgs there. - This update should be reviewed with a reindex-chainstate with assumevalid=0 to catch any defect @@ -20,8 +21,9 @@ Before every minor and major release: Before every major release: * Update hardcoded [seeds](/contrib/seeds/README.md). TODO: Give example PR for Raptoreum -* Update [`BLOCK_CHAIN_SIZE`](/src/qt/intro.cpp) to the current size plus some overhead. -* Update `src/chainparams.cpp` chainTxData with statistics about the transaction count and rate. +* Update [`src/chainparams.cpp`](/src/chainparams.cpp) m_assumed_blockchain_size and m_assumed_chain_state_size with the current size plus some overhead. +* Update `src/chainparams.cpp` chainTxData with statistics about the transaction count and rate. Use the output of the RPC `getchaintxstats`, see + [this pull request](https://github.com/bitcoin/bitcoin/pull/12270) for an example. Reviewers can verify the results by running `getchaintxstats ` with the `window_block_count` and `window_last_block_hash` from your output. * Update version of `contrib/gitian-descriptors/*.yml`: usually one'd want to do this on master after branching off the release - but be sure to at least do it before a new major release ### First time / New builders @@ -31,10 +33,10 @@ If you're using the automated script (found in [contrib/gitian-build.py](/contri Check out the source code in the following directory hierarchy. cd /path/to/your/toplevel/build - git clone https://github.com/raptoreum/gitian.sigs.git - git clone https://github.com/raptoreum/raptoreum-detached-sigs.git + git clone https://github.com/raptor3um/gitian.sigs.git + git clone https://github.com/raptor3um/raptoreum-detached-sigs.git git clone https://github.com/devrandom/gitian-builder.git - git clone https://github.com/raptoreum/raptoreum.git + git clone https://github.com/raptor3um/raptoreum.git ### Raptoreum Core maintainers/release engineers, suggestion for writing release notes @@ -44,7 +46,7 @@ Write release notes. git shortlog helps a lot, for example: Generate list of authors: - git log --format='%aN' "$*" | sort -ui | sed -e 's/^/- /' + git log --format='- %aN' v(current version, e.g. 0.16.0)..v(new version, e.g. 0.16.1) | sort -fiu Tag version (or release candidate) in git @@ -88,7 +90,9 @@ Create the OS X SDK tarball, see the [OS X readme](README_osx.md) for details, a ### Optional: Seed the Gitian sources cache and offline git repositories -By default, Gitian will fetch source files as needed. To cache them ahead of time: +NOTE: Gitian is sometimes unable to download files. If you have errors, try the step below. + +By default, Gitian will fetch source files as needed. To cache them ahead of time, make sure you have checked out the tag you want to build in raptoreum, then: pushd ./gitian-builder make -C ../raptoreum/depends download SOURCES_PATH=`pwd`/cache/common @@ -108,16 +112,16 @@ The gbuild invocations below DO NOT DO THIS by default. pushd ./gitian-builder ./bin/gbuild --num-make 2 --memory 3000 --commit raptoreum=v${VERSION} ../raptoreum/contrib/gitian-descriptors/gitian-linux.yml - ./bin/gsign --signer $SIGNER --release ${VERSION}-linux --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-linux.yml + ./bin/gsign --signer "$SIGNER" --release ${VERSION}-linux --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-linux.yml mv build/out/raptoreum-*.tar.gz build/out/src/raptoreum-*.tar.gz ../ ./bin/gbuild --num-make 2 --memory 3000 --commit raptoreum=v${VERSION} ../raptoreum/contrib/gitian-descriptors/gitian-win.yml - ./bin/gsign --signer $SIGNER --release ${VERSION}-win-unsigned --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-win.yml + ./bin/gsign --signer "$SIGNER" --release ${VERSION}-win-unsigned --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-win.yml mv build/out/raptoreum-*-win-unsigned.tar.gz inputs/raptoreum-win-unsigned.tar.gz mv build/out/raptoreum-*.zip build/out/raptoreum-*.exe ../ ./bin/gbuild --num-make 2 --memory 3000 --commit raptoreum=v${VERSION} ../raptoreum/contrib/gitian-descriptors/gitian-osx.yml - ./bin/gsign --signer $SIGNER --release ${VERSION}-osx-unsigned --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-osx.yml + ./bin/gsign --signer "$SIGNER" --release ${VERSION}-osx-unsigned --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-osx.yml mv build/out/raptoreum-*-osx-unsigned.tar.gz inputs/raptoreum-osx-unsigned.tar.gz mv build/out/raptoreum-*.tar.gz build/out/raptoreum-*.dmg ../ popd @@ -150,9 +154,9 @@ Verify the signatures Commit your signature to gitian.sigs: pushd gitian.sigs - git add ${VERSION}-linux/${SIGNER} - git add ${VERSION}-win-unsigned/${SIGNER} - git add ${VERSION}-osx-unsigned/${SIGNER} + git add ${VERSION}-linux/"${SIGNER}" + git add ${VERSION}-win-unsigned/"${SIGNER}" + git add ${VERSION}-osx-unsigned/"${SIGNER}" git commit -a git push # Assuming you can push to the gitian.sigs tree popd @@ -191,13 +195,13 @@ Codesigner only: Commit the detached codesign payloads: Non-codesigners: wait for Windows/OS X detached signatures: - Once the Windows/OS X builds each have 3 matching signatures, they will be signed with their respective release keys. -- Detached signatures will then be committed to the [raptoreum-detached-sigs](https://github.com/raptoreum/raptoreum-detached-sigs) repository, which can be combined with the unsigned apps to create signed binaries. +- Detached signatures will then be committed to the [raptoreum-detached-sigs](https://github.com/raptor3um/raptoreum-detached-sigs) repository, which can be combined with the unsigned apps to create signed binaries. Create (and optionally verify) the signed OS X binary: pushd ./gitian-builder ./bin/gbuild -i --commit signature=v${VERSION} ../raptoreum/contrib/gitian-descriptors/gitian-osx-signer.yml - ./bin/gsign --signer $SIGNER --release ${VERSION}-osx-signed --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-osx-signer.yml + ./bin/gsign --signer "$SIGNER" --release ${VERSION}-osx-signed --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-osx-signer.yml ./bin/gverify -v -d ../gitian.sigs/ -r ${VERSION}-osx-signed ../raptoreum/contrib/gitian-descriptors/gitian-osx-signer.yml mv build/out/raptoreum-osx-signed.dmg ../raptoreum-${VERSION}-osx.dmg popd @@ -206,7 +210,7 @@ Create (and optionally verify) the signed Windows binaries: pushd ./gitian-builder ./bin/gbuild -i --commit signature=v${VERSION} ../raptoreum/contrib/gitian-descriptors/gitian-win-signer.yml - ./bin/gsign --signer $SIGNER --release ${VERSION}-win-signed --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-win-signer.yml + ./bin/gsign --signer "$SIGNER" --release ${VERSION}-win-signed --destination ../gitian.sigs/ ../raptoreum/contrib/gitian-descriptors/gitian-win-signer.yml ./bin/gverify -v -d ../gitian.sigs/ -r ${VERSION}-win-signed ../raptoreum/contrib/gitian-descriptors/gitian-win-signer.yml mv build/out/raptoreum-*win64-setup.exe ../raptoreum-${VERSION}-win64-setup.exe mv build/out/raptoreum-*win32-setup.exe ../raptoreum-${VERSION}-win32-setup.exe @@ -215,8 +219,8 @@ Create (and optionally verify) the signed Windows binaries: Commit your signature for the signed OS X/Windows binaries: pushd gitian.sigs - git add ${VERSION}-osx-signed/${SIGNER} - git add ${VERSION}-win-signed/${SIGNER} + git add ${VERSION}-osx-signed/"${SIGNER}" + git add ${VERSION}-win-signed/"${SIGNER}" git commit -a git push # Assuming you can push to the gitian.sigs tree popd @@ -243,9 +247,9 @@ raptoreum-${VERSION}-win32.zip raptoreum-${VERSION}-win64-setup.exe raptoreum-${VERSION}-win64.zip ``` -The `*-debug*` files generated by the gitian build contain debug symbols +The `*-debug*` files generated by the Gitian build contain debug symbols for troubleshooting by developers. It is assumed that anyone that is interested -in debugging can run gitian to generate the files for themselves. To avoid +in debugging can run Gitian to generate the files for themselves. To avoid end-user confusion about which file to pick, as well as save storage space *do not upload these to the raptoreum.org server*. @@ -271,6 +275,6 @@ Note: check that SHA256SUMS itself doesn't end up in SHA256SUMS, which is a spur - Archive release notes for the new version to `doc/release-notes/` (branch `master` and branch of the release) - - Create a [new GitHub release](https://github.com/raptoreum/raptoreum/releases/new) with a link to the archived release notes. + - Create a [new GitHub release](https://github.com/raptor3um/raptoreum/releases/new) with a link to the archived release notes. - Celebrate diff --git a/doc/rips/rip-01.md b/doc/rips/rip-01.md new file mode 100644 index 0000000000..e6b3b55a61 --- /dev/null +++ b/doc/rips/rip-01.md @@ -0,0 +1,244 @@ +
+  Raptoreum Improvement Proposal
+  RIP: 01
+  Title: Round Voting
+  Author: Jami Bradley 
+  Status: Draft
+  Type: Informational
+  Created: 2024-03-14
+  License: BSD-2-Clause
+
+ +# Abstract + +This document specifies an updated voting mechanism, starting with features of Bitcoin's BIP 8 and BIP 9 mechanisms and Dash's dynamic activation thresholds and improving on those. This process provides the capability for miner and node forking (either independently or coordinated) and make the voting process more responsive than previous algorithms. + +Basic features: +- The rules for each update are independent and can be configured as needed for the situation. +- Activation based on block height, not time. +- Parameters for each update determine when a vote starts and ends, number of blocks in voting period, thresholds for acceptance, and grace period. +- An update may be forced at a specified height if the threshold is not reached within some period. +- An update may be scheduled at a specific height with no voting required. +- Voting periods are split into rounds, providing a more responsive threshold check using a sliding period. + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. + +# Motivation + +BIP8 and BIP9 provided a forking mechanism using the nVersion field and a fixed number of blocks to produce a vote. +The number of blocks needs to be large to provide a high confidence to the proportion of upgraded miners and nodes. This +leads to delays in an update even when the threshold may have been reached. + +Smartnodes and miners may need to be updated independently and may require different thresholds to trigger an update. +For example, a quorum consensus change can be done without affecting the miners. + +# Specification + +## Parameters + +Each fork deployment is specified by the following per-chain parameters (further elaborated below): + +| Parameter | Description | +| ----------------- | ---------------------------------------------------------------------------------------- | +| name | Short name of proposed update | +| bit | Bit indicating the vote in version field | +| roundSize | Blocks forming a single round (each round starts at height % roundSize == 0) | +| startHeight | When Voting starts (must be a round starting height) | +| votingPeriod | Number of rounds required for voting threshold check | +| votingMaxRounds | Proposed update expires after startHeight + roundSize * votingMaxRounds | +| graceRounds | After successful vote, state is locked in for this many rounds before going active. | +| forcedUpdate | If the threshold is not reached at expiration, lock it in after the grace period anyway. | +| minerThreshold | Threshold triplet for miners (thresholdStart, thresholdMin, falloffCoeff) | +| nodeThreshold | Threshold triplet for Smartnodes (thresholdStart, thresholdMin, falloffCoeff) | + + +1. `name` specifies a very brief description of the fork, reasonable for use as an identifier. +2. `bit` determines which bit in the nVersion field of the block is to be used to signal the fork lock-in and activation. It is chosen from the set {0,1,2,...,28}. +3. `roundSize` determines the number blocks in a single round. Each round starts at height % roundSize == 0. +4. `startHeight` specifies the height of the first block at which the bit gains its meaning. startHeight % roundSize must be zero. +5. `votingPeriod` specifies the number of rounds that comprise a single vote. +6. `votingMaxRounds` Determines timeout for update voting. Proposed update expires after startHeight + roundSize * votingMaxRounds. +7. `graceRounds` is used after a successful vote. The state is locked in for this many rounds before activation. +8. `forcedUpdate` is used to lock in an update at expiration if the threshold is not reached beforehand. +9. `minerThreshold` is the threshold definition for miners. +10. `nodeThreshold` is the threshold definition for nodes. + +**Threshold**: A threshold (miner and node) is composed of three fields: + +1. `thresholdStart` is the initial requirement for a passing vote. This is an integer [0..99] indicating the minimum percentage required. +2. `thresholdMin` is the minimum requirement for a passing vote. This is an integer [0..99] indicating the minimum percentage required. This is used to keep the threshold above a minimum when computing the falloff. +3. `falloffCoeff` is the multiplier for computing a falloff to lower the threshold during later rounds. + +Using these three fields, the threshold for the current round is as follows: + +`threshold = max(thresholdStart - roundNumber * roundNumber / falloffCoeff, thresholdMin)` + +Where roundNumber == 0 at the round starting at `startHeight`. + +## Selection guidelines + +The following guidelines are suggested for selecting these parameters for a fork: + +1. `name` should be selected such that no two forks, concurrent or otherwise, ever use the same name. For deployments described in a single RIP, it is recommended to use the name "ripN" where N is the appropriate RIP number. +2. `bit` should be selected such that no two concurrent forks use the same bit. The bit chosen should not overlap with active usage (legitimately or otherwise) for other purposes. +3. `roundSize` should be kept balanced - larger sizes improves cache performance but can delay the update waiting for large rounds. If Smartnodes are voting for the update, the round size _must_ be large enough to contain at least a few quorums. If not, the node vote for the round will be zero, likely delaying the update. +4. `startHeight` should be set to some block height in the future. +5. `votingPeriod`, combined with roundSize, should provide enough blocks for strong confidence that the update will go smoothly when activated. +6. `votingMaxRounds` should be chosen to provide sufficient time for upgrades. If there is an urgent update and it must be forced, this can be lowered to activate it sooner, understanding the consequences of possibly not having a solid consensus. +7. `graceRounds` should be chosen to provide reasonable time for any remaining updates to be performed. +8. `forcedUpdate` should be used sparingly in situations where the update is necessary for the long term health of the chain. +9. `minerThreshold` and `nodeThreshold` should be set based on the needs of the two groups (miners and Smartnodes). + + a. `thresholdStart` vote threshold for the first round (the tested threshold may lower over time). For updates that + only involve one group of nodes (e.g., Smartnodes only), this can be set to zero for the other group. + + b. `thresholdMin` allows the threshold to reduce over time. This may be useful for important updates where the update + may lock in early if there is very high adoption but still activate if there is good adoption over a longer term. + + c. `fallofCoeff` determines how quickly we reduce the threshold from the start to the min. Depending on roundSize, + the time for the falloff can be estimated. + +## States + +With each block and update, we associate a deployment state. The possible states are: +| State | Meaning | +| ----------------- | ---------------------------------------------------------------------------------------- | +| `Defined` | Proposed update is defined, but voting has not begun. | +| `Voting` | Voting on proposed update is active. | +| `LockedIn` | Vote was successful, we are in the grace period for remaining miners/nodes to update. | +| `Active` | Update has been enacted - it is active and logic should be in place. | +| `Failed` | Update has failed and will not be enacted. | + +## New consensus rules + +The new consensus rules for each fork are enforced for each block that has Active state. + +## Round Votes + +Within a single round, votes are collected in different ways for miners and Smartnodes. + +#### Miner Vote Representation Within Blocks + +The nVersion block header field is to be interpreted as a 32-bit little-endian integer (as present), and bits are selected within this integer as values (1 << N) where N is the bit number. + +Blocks in the Voting state get an nVersion whose bit position bit is set to 1. The top 3 bits of such blocks must be +001, so the range of actually possible nVersion values is [0x20000000...0x3FFFFFFF], inclusive. + +Due to the constraints set by BIP 34, BIP 66 and BIP 65, we only have 0x7FFFFFFB possible nVersion values available. +This restricts us to at most 30 independent deployments. By restricting the top 3 bits to 001 we get 29 out of those +for the purposes of this proposal, and support two future upgrades for different mechanisms (top bits 010 and 011). +When a block nVersion does not have top bits 001, it is treated as if all +bits are 0 for the purposes of deployments. + +Miners should continue setting the bit in LockedIn phase so uptake is visible, though this has no effect on consensus rules. + +### Miner Round Votes + +Within a single round, the votes for all the blocks is tallied. There are [0..roundSize] votes for all active updates. + +The vote is computed using fixed point math with a scale factor of 1000. Percentages are rounded off. For example, with a roundSize of 200 and 99 "yes" votes, the scaled percentage would be 4950 -> 49.50, rounded off to 50%. + +### Smartnode Vote Representation Within Blocks + +Smartnodes can only vote using Quorums. Individual Quorum members place their votes in the `qcontrib` message. This +message does not contain a version flag, so the llmqType is used to identify the new qcontrib format: + + { + uint8_t zero; // Old llmqType (always set to zer0) + uint8_t llmqType; // Real llmqType + int32_t nVersion; // qcontrib version, processed the same way as the block nVersion. + + // The remaining fields are as before: + quorumHash; + proTxHash; + *vvec; + *contributions; + } + +The quorum's commitment message present totals of all of the signers' vote contributions. In the `qpcommit` and +`qfcommit` messages we use the initial llmqType field the same way as the contribution: + + { + uint8_t zero; // Old llmqType (always set to zer0) + uint8_t llmqType; // Real llmqType + bool roundVoting; // Always True + + // A repeating list of votes, "null" terminated with a zero bit, zero votes pair: + [ + uint8_t bit; // Bit number (0-28) + uint16_t votes; // Number of "yes" votes + ] + uint8_t bit; // Zero - ending list of votes. + uint16_t votes; // Zero - ending list of votes. + + // The remaining fields are as before: + quorumHash + proTxHash + DYNBITSET(validMembers) + quorumPublicKey + quorumVvecHash + quorumSig + sig + } + +If Round Voting is active, node contributions and premature commitments must use the new messages providing vote information. If not, the message will be rejected in the normal fashion, potentially punishing and eventually banning the node. + +### Smartnode Round Votes + +Smartnode round votes are collected from all final quorum commitments within blocks from that round. Due to the varying +size of quorums, when they occur, and how many signers are present, we do not exactly how many votes will appear in the round. + +To determine the node round vote, we look at the sum of all votes and signers present in those quorums. The percentage for +that round is determined using fixed point math in the same way as the miner votes, but in this case it is the +sum(votes) / sum(signers). If there are no quorum final commitments in the round, the vote percentage is zero. + +## Period Votes + +A period vote is the real vote that affects change. It takes the last `votePeriods` round votes and combines them to produce +and overall vote. + +### Miner Period Votes + +The miner period vote is straightforward. It is the sum of all votes divided by the number of blocks in the period, using fixed point math and rounding as defined earlier. + +### Node Period Votes + +Due to the variability of quorums and the number of signers, we need to sum of all votes divided by the sum of all signers in the period, using fixed point math and rounding as defined earlier. + +## State transitions + +All blocks before `startHeight` shall have the state `Defined`. + +All blocks within a round shall have the same state. + +The blocks in the first round (height: startHeight..(startHeight + roundSize - 1)) shall have the state `Active` + +The state for a round is determined by the previous votingPeriod rounds. For example, if the votingPeriod is 10, then the previous 10 rounds are combined to form a vote and this vote determines if the state changes for the following round. + +When looking back at previous rounds to determine a vote, rounds that are before the genesis block or before startHeight are treated as a 0% vote. + +The two main transitions are best describe with pseudo code: + + case Active: + if (nHeight > lastVotingHeight) + { + if (forcedUpdate) { + State = LockedIn; + finalHeight = nHeight + roundSize * graceRounds; + } + else { + State = Failed; + } + } + + if (minerPeriodVote >= minerThreshold && nodePeriodVote >= nodeThreshold) { + State = LockedIn; + finalHeight = nHeight + roundSize * graceRounds; + } + break; + + case LockedIn: + if (nHeight >= finalHeight) { + State = Active; + } + break; diff --git a/doc/tor.md b/doc/tor.md index d8451e11d9..27195a4c45 100644 --- a/doc/tor.md +++ b/doc/tor.md @@ -1,4 +1,4 @@ -TOR SUPPORT IN RAPTOREUM CORE +# TOR SUPPORT IN RAPTOREUM CORE ======================= It is possible to run Raptoreum Core as a Tor hidden service, and connect to such services. @@ -10,7 +10,7 @@ See [Tor Project FAQ:TBBSocksPort](https://www.torproject.org/docs/faq.html.en#T for how to properly configure Tor. -1. Run Raptoreum Core behind a Tor proxy +## 1. Run Raptoreum Core behind a Tor proxy ---------------------------------- The first step is running Raptoreum Core behind a Tor proxy. This will already make all @@ -44,12 +44,13 @@ In a typical situation, this suffices to run behind a Tor proxy: ./raptoreumd -proxy=127.0.0.1:9050 -2. Run a Raptoreum Core hidden server +## 2. Run a Raptoreum Core hidden server ------------------------------- If you configure your Tor system accordingly, it is possible to make your node also reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equivalent -config file): +config file): *Needed for Tor version 0.2.7.0 and older versions of Tor only. For newer +versions of Tor see [Section 4](#4-automatically-listen-on-tor).* HiddenServiceDir /var/lib/tor/raptoreumcore-service/ HiddenServicePort 9999 127.0.0.1:9999 @@ -99,7 +100,7 @@ for normal IPv4/IPv6 communication, use: ./raptoreumd -onion=127.0.0.1:9050 -externalip=ssapp53tmftyjmjb.onion -discover -3. List of known Raptoreum Core Tor relays +## 3. List of known Raptoreum Core Tor relays ------------------------------------ Note: All these nodes are hosted by smartnodehosting.com @@ -116,15 +117,14 @@ Note: All these nodes are hosted by smartnodehosting.com * fijy6aikzxfea54i.onion -4. Automatically listen on Tor --------------------------------- +## 4. Automatically listen on Tor 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. Raptoreum Core has been updated to make use of this. This means that if Tor is running (and proper authentication has been configured), -Raptoreum Core automatically creates a hidden service to listen on. This will positively +Raptoreum Core automatically creates a hidden service to listen on. This will positively affect the number of available .onion nodes. This new feature is enabled by default if Raptoreum Core is listening (`-listen`), and @@ -132,21 +132,27 @@ requires a Tor connection to work. It can be explicitly disabled with `-listenon and, if not disabled, configured using the `-torcontrol` and `-torpassword` settings. To show verbose debugging information, pass `-debug=tor`. -Connecting to Tor's control socket API requires one of two authentication methods to be -configured. For cookie authentication the user running raptoreumd must have write access -to the `CookieAuthFile` specified in Tor configuration. In some cases this is -preconfigured and the creation of a hidden service is automatic. If permission problems -are seen with `-debug=tor` they can be resolved by adding both the user running tor and -the user running raptoreumd to the same group and setting permissions appropriately. On -Debian-based systems the user running raptoreumd can be added to the debian-tor group, -which has the appropriate permissions. An alternative authentication method is the use -of the `-torpassword` flag and a `hash-password` which can be enabled and specified in -Tor configuration. - -5. Privacy recommendations ---------------------------- - -- Do not add anything but bitcoin ports to the hidden service created in section 2. +Connecting to Tor's control socket API requires one of two authentication methods to be +configured. For cookie authentication the user running raptoreumd must have write access +to the `CookieAuthFile` specified in Tor configuration. In some cases this is +preconfigured and the creation of a hidden service is automatic. If permission problems +are seen with `-debug=tor` they can be resolved by adding both the user running Tor and +the user running raptoreumd to the same group and setting permissions appropriately. On +Debian-based systems the user running raptoreumd can be added to the debian-tor group, +which has the appropriate permissions. Before starting raptoreumd you will need to re-login +to allow debian-tor group to be applied. Otherwise you will see the following notice: "tor: +Authentication cookie /run/tor/control.authcookie could not be opened (check permissions)" +on debug.log. + +An alternative authentication method is the use +of the `-torpassword=password` option. The `password` is the clear text form that +was used when generating the hashed password for the `HashedControlPassword` option +in the tor configuration file. The hashed password can be obtained with the command +`tor --hash-password password` (read the tor manual for more details). + +## 5. Privacy recommendations + +- Do not add anything but Raptoreum Core ports to the hidden service created in section 2. If you run a web service too, create a new hidden service for that. Otherwise it is trivial to link them, which may reduce privacy. Hidden services created automatically (as in section 3) always have only one port diff --git a/doc/translation_process.md b/doc/translation_process.md index a949b1e60b..d140c27ea5 100644 --- a/doc/translation_process.md +++ b/doc/translation_process.md @@ -8,7 +8,7 @@ Transifex is setup to monitor the GitHub repo for updates, and when code contain Multiple language support is critical in assisting Raptoreum’s global adoption, and growth. One of Raptoreum’s greatest strengths is cross-border money transfers, any help making that easier is greatly appreciated. -See the [Transifex Raptoreum project](https://www.transifex.com/projects/p/raptoreum/) to assist in translations. You should also join the translation mailing list for announcements - see details below. +See the [Transifex Raptoreum project](https://explore.transifex.com/feathered-inc/) to assist in translations. You should also join the translation mailing list for announcements - see details below. ### Writing code with translations We use automated scripts to help extract translations in both Qt, and non-Qt source files. It is rarely necessary to manually edit the files in `src/qt/locale/`. The translation source files must adhere to the following format: @@ -44,7 +44,7 @@ git commit ### Creating a Transifex account Visit the [Transifex Signup](https://www.transifex.com/signup/) page to create an account. Take note of your username and password, as they will be required to configure the command-line tool. -You can find the Raptoreum translation project at [https://www.transifex.com/projects/p/raptoreum/](https://www.transifex.com/projects/p/raptoreum/). +You can find the Raptoreum translation project at [https://explore.transifex.com/feathered-inc/](https://explore.transifex.com/feathered-inc/). ### Installing the Transifex client command-line tool The client it used to fetch updated translations. If you are having problems, or need more details, see [http://docs.transifex.com/developer/client/setup](http://docs.transifex.com/developer/client/setup) @@ -53,7 +53,7 @@ The client it used to fetch updated translations. If you are having problems, or `pip install transifex-client` -Setup your transifex client config as follows. Please *ignore the token field*. +Setup your Transifex client config as follows. Please *ignore the token field*. ```ini nano ~/.transifexrc diff --git a/doc/translation_strings_policy.md b/doc/translation_strings_policy.md index a848266afe..35bc98663e 100644 --- a/doc/translation_strings_policy.md +++ b/doc/translation_strings_policy.md @@ -21,21 +21,11 @@ On a high level, these strings are to be translated: - GUI strings, anything that appears in a dialog or window -- Command-line option documentation - ### GUI strings Anything that appears to the user in the GUI is to be translated. This includes labels, menu items, button texts, tooltips and window titles. This includes messages passed to the GUI through the UI interface through `InitMessage`, `ThreadSafeMessageBox` or `ShowProgress`. -### Command-line options - -Documentation for the command line options in the output of `--help` should be translated as well. - -Make sure that default values do not end up in the string, but use string formatting like `strprintf(_("Threshold for disconnecting misbehaving peers (default: %u)"), 100)`. Putting default values in strings has led to accidental translations in the past, and forces the string to be retranslated every time the value changes. - -Do not translate messages that are only shown to developers, such as those that only appear when `--help-debug` is used. - General recommendations ------------------------ diff --git a/doc/zmq.md b/doc/zmq.md index 7d12ae5718..9b7a7a16e6 100644 --- a/doc/zmq.md +++ b/doc/zmq.md @@ -45,7 +45,7 @@ operation. By default, the ZeroMQ feature is automatically compiled in if the necessary prerequisites are found. To disable, use --disable-zmq -during the *configure* step of building bitcoind: +during the *configure* step of building raptoreumd: $ ./configure --disable-zmq (other options) @@ -63,6 +63,7 @@ Currently, the following notifications are supported: -zmqpubhashgovernancevote=address -zmqpubhashgovernanceobject=address -zmqpubhashinstantsenddoublespend=address + -zmqpubhashrecoveredsig=address -zmqpubrawblock=address -zmqpubrawchainlock=address -zmqpubrawchainlocksig=address @@ -72,6 +73,7 @@ Currently, the following notifications are supported: -zmqpubrawgovernancevote=address -zmqpubrawgovernanceobject=address -zmqpubrawinstantsenddoublespend=address + -zmqpubrawrecoveredsig=address The socket type is PUB and the address must be a valid ZeroMQ socket address. The same address can be used in more than one notification. @@ -84,7 +86,7 @@ For instance: Each PUB notification has a topic and body, where the header corresponds to the notification type. For instance, for the notification `-zmqpubhashtx` the topic is `hashtx` (no null -terminator) and the body is the hexadecimal transaction hash (32 +terminator) and the body is the transaction hash (32 bytes). These options can also be provided in raptoreum.conf. diff --git a/docker/Dockerfile.GitHubActions b/docker/Dockerfile.GitHubActions new file mode 100644 index 0000000000..ba387dbb3d --- /dev/null +++ b/docker/Dockerfile.GitHubActions @@ -0,0 +1,42 @@ +FROM ubuntu:bionic +LABEL maintainer="Dash Developers " +LABEL description="Dockerised DashCore" + +ARG USER_ID +ARG GROUP_ID +ARG TAG + +ENV HOME /dash + +# add user with specified (or default) user/group ids +ENV USER_ID ${USER_ID:-1000} +ENV GROUP_ID ${GROUP_ID:-1000} +RUN groupadd -g ${GROUP_ID} dash && \ + useradd -u ${USER_ID} -g dash -s /bin/bash -m -d /dash dash && \ + mkdir /dash/.dashcore && \ + chown dash:dash -R /dash + +RUN apt-get update && \ + apt-get -y install --no-install-recommends \ + wget \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +RUN mach=$(uname -m) \ + && case $mach in armv7l) arch="arm-linux-gnueabihf"; ;; aarch64) arch="aarch64-linux-gnu"; ;; x86_64) arch="x86_64-linux-gnu"; ;; *) echo "ERROR: Machine type $mach not supported."; ;; esac \ + && wget https://github.com/dashpay/dash/releases/download/v${TAG}/dashcore-${TAG}-$arch.tar.gz -P /tmp \ + && tar -xvf /tmp/dashcore-*.tar.gz -C /tmp/ \ + && cp /tmp/dashcore*/bin/* /usr/local/bin \ + && rm -rf /tmp/dashcore* \ + && chmod a+x /usr/local/bin/* + +USER dash + +VOLUME ["/dash"] + +COPY docker-entrypoint.sh /docker-entrypoint.sh +ENTRYPOINT ["/docker-entrypoint.sh"] + +EXPOSE 9998 9999 19998 19999 + +WORKDIR /dash diff --git a/docker/build-docker.sh b/docker/build-docker.sh index bb36097082..f344ad58f9 100755 --- a/docker/build-docker.sh +++ b/docker/build-docker.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash +export LC_ALL=C + DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -cd $DIR/.. +cd $DIR/.. || exit DOCKER_IMAGE=${DOCKER_IMAGE:-raptoreum/raptoreumd-develop} DOCKER_TAG=${DOCKER_TAG:-latest} @@ -12,9 +14,7 @@ rm docker/bin/* mkdir docker/bin cp $BUILD_DIR/src/raptoreumd docker/bin/ cp $BUILD_DIR/src/raptoreum-cli docker/bin/ -cp $BUILD_DIR/src/raptoreum-tx docker/bin/ strip docker/bin/raptoreumd strip docker/bin/raptoreum-cli -strip docker/bin/raptoreum-tx docker build --pull -t $DOCKER_IMAGE:$DOCKER_TAG -f docker/Dockerfile docker diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh new file mode 100755 index 0000000000..7d2ede850a --- /dev/null +++ b/docker/docker-entrypoint.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +export LC_ALL=C +set -e + +# Get Tor service IP if running +if [[ "$1" == "raptoreumd" ]]; then + # Because raptoreumd only accept torcontrol= host as an ip only, we resolve it here and add to config + if [[ "$TOR_CONTROL_HOST" ]] && [[ "$TOR_CONTROL_PORT" ]] && [[ "$TOR_PROXY_PORT" ]]; then + TOR_IP=$(getent hosts $TOR_CONTROL_HOST | cut -d ' ' -f 1) + echo "proxy=$TOR_IP:$TOR_PROXY_PORT" >> "$HOME/.raptoreumcore/raptoreum.conf" + echo "Added "proxy=$TOR_IP:$TOR_PROXY_PORT" to $HOME/.raptoreumcore/raptoreum.conf" + echo "torcontrol=$TOR_IP:$TOR_CONTROL_PORT" >> "$HOME/.raptoreumcore/raptoreum.conf" + echo "Added "torcontrol=$TOR_IP:$TOR_CONTROL_PORT" to $HOME/.raptoreumcore/raptoreum.conf" + echo -e "\n" + else + echo "Tor control credentials not provided" + fi +fi + +exec "$@" diff --git a/docker/push-docker.sh b/docker/push-docker.sh index d3371663b9..bd2350c0fc 100755 --- a/docker/push-docker.sh +++ b/docker/push-docker.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash +export LC_ALL=C + DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -cd $DIR/.. +cd $DIR/.. || exit DOCKER_IMAGE=${DOCKER_IMAGE:-raptoreum/raptoreumd-develop} DOCKER_TAG=${DOCKER_TAG:-latest} diff --git a/libraptoreumconsensus.pc.in b/libraptoreumconsensus.pc.in index 2b5b4fa575..3d7358bd30 100644 --- a/libraptoreumconsensus.pc.in +++ b/libraptoreumconsensus.pc.in @@ -4,8 +4,8 @@ libdir=@libdir@ includedir=@includedir@ Name: @PACKAGE_NAME@ consensus library -Description: Library for the Bitcoin consensus protocol. +Description: Library for the Raptoreum consensus protocol. Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lraptoreumconsensus Cflags: -I${includedir} -Requires.private: libcrypto +Requires.private: libcrypto \ No newline at end of file diff --git a/share/certs/BitcoinFoundation_Apple_Cert.pem b/share/certs/BitcoinFoundation_Apple_Cert.pem deleted file mode 100644 index beb0d7073c..0000000000 --- a/share/certs/BitcoinFoundation_Apple_Cert.pem +++ /dev/null @@ -1,37 +0,0 @@ -Bag Attributes - friendlyName: Developer ID Application: BITCOIN FOUNDATION, INC., THE - localKeyID: 6B 9C 6C A8 A5 73 70 70 E2 57 A3 49 D8 62 FB 97 C7 A5 5D 5E -subject=/UID=PBV4GLS9J4/CN=Developer ID Application: BITCOIN FOUNDATION, INC., THE/OU=PBV4GLS9J4/O=BITCOIN FOUNDATION, INC., THE/C=US -issuer=/CN=Developer ID Certification Authority/OU=Apple Certification Authority/O=Apple Inc./C=US ------BEGIN CERTIFICATE----- -MIIFhzCCBG+gAwIBAgIIJ0r1rumyfZAwDQYJKoZIhvcNAQELBQAweTEtMCsGA1UE -AwwkRGV2ZWxvcGVyIElEIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSYwJAYDVQQL -DB1BcHBsZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUg -SW5jLjELMAkGA1UEBhMCVVMwHhcNMTMwMTEwMjIzOTAxWhcNMTgwMTExMjIzOTAx -WjCBqDEaMBgGCgmSJomT8ixkAQEMClBCVjRHTFM5SjQxQDA+BgNVBAMMN0RldmVs -b3BlciBJRCBBcHBsaWNhdGlvbjogQklUQ09JTiBGT1VOREFUSU9OLCBJTkMuLCBU -SEUxEzARBgNVBAsMClBCVjRHTFM5SjQxJjAkBgNVBAoMHUJJVENPSU4gRk9VTkRB -VElPTiwgSU5DLiwgVEhFMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALTd5zURuZVoJviusr119aktXksenb9IN9vq6kBbq38vxEk7 -9wkKMES2XfBRh0HxcEizGzhMNy5OCXuTLMaNMihYdfwYSoBoR2foEU+6kjPUnyJ4 -dQBFLJZJr5/QeQmALmYHEgZ6lwXFD2lU8t92340zeJ4y5LZw5pcEHtH9IummYDut -OGCkCGXDcjL+5nHhNScJiXHhswM+62o6XXsQiP6EWbM1CsgrGTNLtaa0U/UvVDwE -79YKklSC5Bog2LD0jBcTuveI66mFzqu++L9X9u+ZArtebwCl7BPNQ+uboYy5uV2d -zf8lpNNZLfXCFjoLe9bLICKfZ7ub9V5aC8+GhckCAwEAAaOCAeEwggHdMD4GCCsG -AQUFBwEBBDIwMDAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuYXBwbGUuY29tL29j -c3AtZGV2aWQwMTAdBgNVHQ4EFgQUa5xsqKVzcHDiV6NJ2GL7l8elXV4wDAYDVR0T -AQH/BAIwADAfBgNVHSMEGDAWgBRXF+2iz9x8mKEQ4Py+hy0s8uMXVDCCAQ4GA1Ud -IASCAQUwggEBMIH+BgkqhkiG92NkBQEwgfAwKAYIKwYBBQUHAgEWHGh0dHA6Ly93 -d3cuYXBwbGUuY29tL2FwcGxlY2EwgcMGCCsGAQUFBwICMIG2DIGzUmVsaWFuY2Ug -b24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2NlcHRh -bmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNv -bmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRpZmlj -YXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wDgYDVR0PAQH/BAQDAgeAMBYGA1Ud -JQEB/wQMMAoGCCsGAQUFBwMDMBMGCiqGSIb3Y2QGAQ0BAf8EAgUAMA0GCSqGSIb3 -DQEBCwUAA4IBAQAfJ0BjID/1dS2aEeVyhAzPzCBjG8vm0gDf+/qfwRn3+yWeL9vS -nMdbilwM48IyQWTagjGGcojbsAd/vE4N7NhQyHInoCllNoeor1I5xx+blTaGRBK+ -dDhJbbdlGCjsLnH/BczGZi5fyEJds9lUIrp1hJidRcUKO76qb/9gc6qNZpl1vH5k -lDUuJYt7YhAs+L6rTXDyqcK9maeQr0gaOPsRRAQLLwiQCorPeMTUNsbVMdMwZYJs -R+PxiAnk+nyi7rfiFvPoASAYUuI6OzYL/Fa6QU4/gYyPgic944QYVkaQBnc0vEP1 -nXq6LGKwgVGcqJnkr/E2kui5gJoV5C3qll3e ------END CERTIFICATE----- diff --git a/share/certs/BitcoinFoundation_Comodo_Cert.pem b/share/certs/BitcoinFoundation_Comodo_Cert.pem deleted file mode 100644 index dc752d455c..0000000000 --- a/share/certs/BitcoinFoundation_Comodo_Cert.pem +++ /dev/null @@ -1,37 +0,0 @@ -Bag Attributes - friendlyName: The Bitcoin Foundation, Inc.'s COMODO CA Limited ID - localKeyID: 8C 94 64 E3 B5 B0 41 89 5B 89 B0 57 CC 74 B9 44 E5 B2 92 66 -subject=/C=US/postalCode=98104-1444/ST=WA/L=Seattle/street=Suite 300/street=71 Columbia St/O=The Bitcoin Foundation, Inc./CN=The Bitcoin Foundation, Inc. -issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO Code Signing CA 2 ------BEGIN CERTIFICATE----- -MIIFeDCCBGCgAwIBAgIRAJVYMd+waOER7lUqtiz3M2IwDQYJKoZIhvcNAQEFBQAw -ezELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxITAfBgNV -BAMTGENPTU9ETyBDb2RlIFNpZ25pbmcgQ0EgMjAeFw0xMzAxMTYwMDAwMDBaFw0x -NDAxMTYyMzU5NTlaMIG8MQswCQYDVQQGEwJVUzETMBEGA1UEEQwKOTgxMDQtMTQ0 -NDELMAkGA1UECAwCV0ExEDAOBgNVBAcMB1NlYXR0bGUxEjAQBgNVBAkMCVN1aXRl -IDMwMDEXMBUGA1UECQwONzEgQ29sdW1iaWEgU3QxJTAjBgNVBAoMHFRoZSBCaXRj -b2luIEZvdW5kYXRpb24sIEluYy4xJTAjBgNVBAMMHFRoZSBCaXRjb2luIEZvdW5k -YXRpb24sIEluYy4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQChUwLD -u/hu5aFZ/n11B27awONaaDrmHm0pamiWHb01yL4JmTBtaLCrSftF8RhCscQ8jpI0 -UG1Cchmay0e3zH5o5XRs0H9C3x+SM5ozms0TWDmAYiB8aQEghsGovDk0D2nyTQeK -Q0xqyCh0m8ZPOnMnYrakHEmF6WvhLdJvI6Od4KIwbKxgN17cPFIfLVsZ7GrzmmbU -Gdi4wSQCHy5rxzvBxho8Qq/SfBl93uOMUrqOHjOUAPhNuTJG3t/MdhU8Zp24s29M -abHtYkT9W86hMjIiI8RTAR+WHKVglx9SB0cjDabXN8SZ3gME0+H++LyzlySHT8sI -ykepojZ7UBRgp9w3AgMBAAGjggGzMIIBrzAfBgNVHSMEGDAWgBQexbEsfYfaAmh8 -JbwMB4Q/ts/e8TAdBgNVHQ4EFgQUfPf+ZyDWl/4LH0Y5BuJTelkRd/EwDgYDVR0P -AQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYJ -YIZIAYb4QgEBBAQDAgQQMEYGA1UdIAQ/MD0wOwYMKwYBBAGyMQECAQMCMCswKQYI -KwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5uZXQvQ1BTMEEGA1UdHwQ6 -MDgwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0NPTU9ET0NvZGVTaWdu -aW5nQ0EyLmNybDByBggrBgEFBQcBAQRmMGQwPAYIKwYBBQUHMAKGMGh0dHA6Ly9j -cnQuY29tb2RvY2EuY29tL0NPTU9ET0NvZGVTaWduaW5nQ0EyLmNydDAkBggrBgEF -BQcwAYYYaHR0cDovL29jc3AuY29tb2RvY2EuY29tMCgGA1UdEQQhMB+BHWxpbmRz -YXlAYml0Y29pbmZvdW5kYXRpb24ub3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAqibjo -D4HG5XSIIMCmYE5RgQBSEAJfI+EZERk1G9F83ZUWr0yNRZCw4O+RaM7xQhvJhEoD -G2kpk/q2bNOc71/VyZ6SrE1JRVUON41/Flhz4M6cP0BclTicXvh+efVwqZhIz+ws -UxF2hvC/1Xx6rqI7NYAlOYXk2MSUq3HREo+gWUPKM8em4MZZV/7XCH4QbsfxOl1J -xS6EOQmV8hfUN4KRXI5WfGUmedBxq7dM0RSJOSQl8fq2f+JjRLfjQwQucy7LDY+y -pRTsL2TdQV/DuDuI3s0NHRGznQNddoX5jqpXhSQFAAdgrhN1gGkWaaTPzr9IF2TG -qgr6PEp9tIYC+MbM ------END CERTIFICATE----- diff --git a/share/certs/PrivateKeyNotes.md b/share/certs/PrivateKeyNotes.md deleted file mode 100644 index 8d50144c21..0000000000 --- a/share/certs/PrivateKeyNotes.md +++ /dev/null @@ -1,46 +0,0 @@ -Code-signing private key notes -== - -The private keys for these certificates were generated on Gavin's main work machine, -following the certificate authority's recommendations for generating certificate -signing requests. - -For OSX, the private key was generated by Keychain.app on Gavin's main work machine. -The key and certificate is in a separate, passphrase-protected keychain file that is -unlocked to sign the Bitcoin-Qt.app bundle. - -For Windows, the private key was generated by Firefox running on Gavin's main work machine. -The key and certificate were exported into a separate, passphrase-protected PKCS#12 file, and -then deleted from Firefox's keystore. The exported file is used to sign the Windows setup.exe. - -Threat analysis --- - -Gavin is a single point of failure. He could be coerced to divulge the secret signing keys, -allowing somebody to distribute a Bitcoin-Qt.app or bitcoin-qt-setup.exe with a valid -signature but containing a malicious binary. - -Or the machine Gavin uses to sign the binaries could be compromised, either remotely or -by breaking in to his office, allowing the attacker to get the private key files and then -install a keylogger to get the passphrase that protects them. - -Threat Mitigation --- - -"Air gapping" the machine used to do the signing will not work, because the signing -process needs to access a timestamp server over the network. And it would not -prevent the "rubber hose cryptography" threat (coercing Gavin to sign a bad binary -or divulge the private keys). - -Windows binaries are reproducibly 'gitian-built', and the setup.exe file created -by the NSIS installer system is a 7zip archive, so you could check to make sure -that the bitcoin-qt.exe file inside the installer had not been tampered with. -However, an attacker could modify the installer's code, so when the setup.exe -was run it compromised users' systems. A volunteer to write an auditing tool -that checks the setup.exe for tampering, and checks the files in it against -the list of gitian signatures, is needed. - -The long-term solution is something like the 'gitian downloader' system, which -uses signatures from multiple developers to determine whether or not a binary -should be trusted. However, that just pushes the problem to "how will -non-technical users securely get the gitian downloader code to start?" diff --git a/share/genbuild.sh b/share/genbuild.sh index 32ef2a5755..16c7b3868e 100755 --- a/share/genbuild.sh +++ b/share/genbuild.sh @@ -3,8 +3,9 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. +export LC_ALL=C if [ $# -gt 1 ]; then - cd "$2" + cd "$2" || exit 1 fi if [ $# -gt 0 ]; then FILE="$1" @@ -21,8 +22,8 @@ git_check_in_repo() { ! { git status --porcelain -uall --ignored "$@" 2>/dev/null || echo '??'; } | grep -q '?' } -DESC="" -SUFFIX="" +GIT_TAG="" +GIT_COMMIT="" if [ "${BITCOIN_GENBUILD_NO_GIT}" != "1" -a -e "$(which git 2>/dev/null)" -a "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ] && git_check_in_repo share/genbuild.sh; then # clean 'dirty' status of touched files that haven't been modified git diff >/dev/null 2>/dev/null @@ -30,18 +31,18 @@ if [ "${BITCOIN_GENBUILD_NO_GIT}" != "1" -a -e "$(which git 2>/dev/null)" -a "$( # if latest commit is tagged and not dirty, then override using the tag name RAWDESC=$(git describe --abbrev=0 2>/dev/null) if [ "$(git rev-parse HEAD)" = "$(git rev-list -1 $RAWDESC 2>/dev/null)" ]; then - git diff-index --quiet HEAD -- && DESC=$RAWDESC + git diff-index --quiet HEAD -- && GIT_TAG=$RAWDESC fi # otherwise generate suffix from git, i.e. string like "59887e8-dirty" SUFFIX=$(git rev-parse --short HEAD) - git diff-index --quiet HEAD -- || SUFFIX="$SUFFIX-dirty" + git diff-index --quiet HEAD -- || GIT_COMMIT="$GIT_COMMIT-dirty" fi -if [ -n "$DESC" ]; then - NEWINFO="#define BUILD_DESC \"$DESC\"" -elif [ -n "$SUFFIX" ]; then - NEWINFO="#define BUILD_SUFFIX $SUFFIX" +if [ -n "$GIT_TAG" ]; then + NEWINFO="#define BUILD_GIT_TAG \"$GIT_TAG\"" +elif [ -n "$GIT_COMMIT" ]; then + NEWINFO="#define BUILD_GIT_COMMIT \"$GIT_COMMIT\"" else NEWINFO="// No build information available" fi diff --git a/share/pixmaps/dash-HighContrast-128.png b/share/pixmaps/dash-HighContrast-128.png new file mode 100644 index 0000000000..1226a0b7e3 Binary files /dev/null and b/share/pixmaps/dash-HighContrast-128.png differ diff --git a/share/pixmaps/dash-HighContrast-16.png b/share/pixmaps/dash-HighContrast-16.png new file mode 100644 index 0000000000..91ee581ef8 Binary files /dev/null and b/share/pixmaps/dash-HighContrast-16.png differ diff --git a/share/pixmaps/dash-HighContrast-22.png b/share/pixmaps/dash-HighContrast-22.png new file mode 100644 index 0000000000..45cc16f82b Binary files /dev/null and b/share/pixmaps/dash-HighContrast-22.png differ diff --git a/share/pixmaps/dash-HighContrast-24.png b/share/pixmaps/dash-HighContrast-24.png new file mode 100644 index 0000000000..ca3b6c8cf7 Binary files /dev/null and b/share/pixmaps/dash-HighContrast-24.png differ diff --git a/share/pixmaps/dash-HighContrast-256.png b/share/pixmaps/dash-HighContrast-256.png new file mode 100644 index 0000000000..1aecfe37de Binary files /dev/null and b/share/pixmaps/dash-HighContrast-256.png differ diff --git a/share/pixmaps/dash-HighContrast-32.png b/share/pixmaps/dash-HighContrast-32.png new file mode 100644 index 0000000000..9fb56f3726 Binary files /dev/null and b/share/pixmaps/dash-HighContrast-32.png differ diff --git a/share/pixmaps/dash-HighContrast-48.png b/share/pixmaps/dash-HighContrast-48.png new file mode 100644 index 0000000000..eec086b9cd Binary files /dev/null and b/share/pixmaps/dash-HighContrast-48.png differ diff --git a/share/pixmaps/dash-HighContrast-scalable.svg b/share/pixmaps/dash-HighContrast-scalable.svg new file mode 100644 index 0000000000..e599d2ac60 --- /dev/null +++ b/share/pixmaps/dash-HighContrast-scalable.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/share/pixmaps/dash-hicolor-scalable.svg b/share/pixmaps/dash-hicolor-scalable.svg new file mode 100644 index 0000000000..183c70fe60 --- /dev/null +++ b/share/pixmaps/dash-hicolor-scalable.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/share/pixmaps/favicon.png b/share/pixmaps/favicon.png new file mode 100644 index 0000000000..670eee3a34 Binary files /dev/null and b/share/pixmaps/favicon.png differ diff --git a/share/pixmaps/bitcoin.ico b/share/pixmaps/raptoreum.ico similarity index 100% rename from share/pixmaps/bitcoin.ico rename to share/pixmaps/raptoreum.ico diff --git a/share/qt/Info.plist.in b/share/qt/Info.plist.in index 2226dde3fa..26288366fc 100644 --- a/share/qt/Info.plist.in +++ b/share/qt/Info.plist.in @@ -3,47 +3,36 @@ LSMinimumSystemVersion - 10.8.0 - + 10.15.0 LSArchitecturePriority x86_64 - CFBundleIconFile - bitcoin.icns - + raptoreum.icns CFBundlePackageType APPL - CFBundleShortVersionString @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@.@CLIENT_VERSION_BUILD@ - CFBundleVersion @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@.@CLIENT_VERSION_BUILD@ - CFBundleSignature ???? - CFBundleExecutable Raptoreum-Qt - CFBundleName Raptoreum-Qt - LSHasLocalizedDisplayName - CFBundleIdentifier - org.raptoreum.Raptoreum-Qt - + com.raptoreum.Raptoreum-Qt CFBundleURLTypes CFBundleTypeRole Editor CFBundleURLName - org.raptoreum.RaptoreumPayment + com.raptoreum.RaptoreumPayment CFBundleURLSchemes raptoreum @@ -51,43 +40,6 @@ - UTExportedTypeDeclarations - - - UTTypeIdentifier - org.raptoreum.paymentrequest - UTTypeDescription - Raptoreum payment request - UTTypeConformsTo - - public.data - - UTTypeTagSpecification - - public.mime-type - application/x-raptoreum-payment-request - public.filename-extension - - raptoreummentrequest - - - - - - CFBundleDocumentTypes - - - CFBundleTypeRole - Editor - LSItemContentTypes - - org.raptoreum.paymentrequest - - LSHandlerRank - Owner - - - NSPrincipalClass NSApplication diff --git a/share/qt/extract_strings_qt.py b/share/qt/extract_strings_qt.py index f612cdf93b..5e0e2da6d5 100755 --- a/share/qt/extract_strings_qt.py +++ b/share/qt/extract_strings_qt.py @@ -1,7 +1,8 @@ #!/usr/bin/env python3 # Copyright (c) 2012-2016 The Bitcoin Core developers +# Copyright (c) -2022 The Raptoreum developers # Distributed under the MIT software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# file COPYING or https://opensource.org/licenses/mit-license.php. ''' Extract _("...") strings for translation and convert to Qt stringdefs so that they can be picked up by Qt linguist. @@ -57,13 +58,13 @@ def parse_po(text): if not XGETTEXT: print('Cannot extract strings: xgettext utility is not installed or not configured.',file=sys.stderr) print('Please install package "gettext" and re-run \'./configure\'.',file=sys.stderr) - exit(1) + sys.exit(1) child = Popen([XGETTEXT,'--output=-','-n','--keyword=_'] + files, stdout=PIPE) (out, err) = child.communicate() messages = parse_po(out.decode('utf-8')) -f = open(OUT_CPP, 'w') +f = open(OUT_CPP, 'w', encoding="utf8") f.write(""" #include @@ -76,10 +77,7 @@ def parse_po(text): #endif """) f.write('static const char UNUSED *raptoreum_strings[] = {\n') -f.write('QT_TRANSLATE_NOOP("raptoreum-core", "%s"),\n' % (os.getenv('PACKAGE_NAME'),)) f.write('QT_TRANSLATE_NOOP("raptoreum-core", "%s"),\n' % (os.getenv('COPYRIGHT_HOLDERS'),)) -if os.getenv('COPYRIGHT_HOLDERS_SUBSTITUTION') != os.getenv('PACKAGE_NAME'): - f.write('QT_TRANSLATE_NOOP("raptoreum-core", "%s"),\n' % (os.getenv('COPYRIGHT_HOLDERS_SUBSTITUTION'),)) messages.sort(key=operator.itemgetter(0)) for (msgid, msgstr) in messages: if msgid != EMPTY: diff --git a/share/rpcauth/README.md b/share/rpcauth/README.md new file mode 100644 index 0000000000..6f627b867b --- /dev/null +++ b/share/rpcauth/README.md @@ -0,0 +1,18 @@ +RPC Tools +--------------------- + +### [RPCAuth](/share/rpcauth) ### + +``` +usage: rpcauth.py [-h] username [password] + +Create login credentials for a JSON-RPC user + +positional arguments: + username the username for authentication + password leave empty to generate a random password or specify "-" to + prompt for password + +optional arguments: + -h, --help show this help message and exit + ``` diff --git a/share/rpcuser/README.md b/share/rpcuser/README.md deleted file mode 100644 index 12a8e6fb0c..0000000000 --- a/share/rpcuser/README.md +++ /dev/null @@ -1,10 +0,0 @@ -RPC Tools ---------------------- - -### [RPCUser](/share/rpcuser) ### - -Create an RPC user login credential. - -Usage: - - ./rpcuser.py diff --git a/share/rpcuser/rpcuser.py b/share/rpcuser/rpcuser.py deleted file mode 100755 index ab3d8c4ed3..0000000000 --- a/share/rpcuser/rpcuser.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 -# Copyright (c) 2015 The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or http://www.opensource.org/licenses/mit-license.php. - -import hashlib -import sys -import os -from random import SystemRandom -import base64 -import hmac - -if len(sys.argv) < 2: - sys.stderr.write('Please include username as an argument.\n') - sys.exit(0) - -username = sys.argv[1] - -#This uses os.urandom() underneath -cryptogen = SystemRandom() - -#Create 16 byte hex salt -salt_sequence = [cryptogen.randrange(256) for i in range(16)] -hexseq = list(map(hex, salt_sequence)) -salt = "".join([x[2:] for x in hexseq]) - -#Create 32 byte b64 password -password = base64.urlsafe_b64encode(os.urandom(32)) - -digestmod = hashlib.sha256 - -if sys.version_info.major >= 3: - password = password.decode('utf-8') - digestmod = 'SHA256' - -m = hmac.new(bytearray(salt, 'utf-8'), bytearray(password, 'utf-8'), digestmod) -result = m.hexdigest() - -print("String to be appended to bitcoin.conf:") -print("rpcauth="+username+":"+salt+"$"+result) -print("Your password:\n"+password) diff --git a/share/setup.nsi.in b/share/setup.nsi.in index 19af476de2..e3bb4049d1 100644 --- a/share/setup.nsi.in +++ b/share/setup.nsi.in @@ -1,16 +1,17 @@ -Name "@PACKAGE_NAME@ (@WINDOWS_BITS@-bit)" +Name "@PACKAGE_NAME@ (64-bit)" RequestExecutionLevel highest SetCompressor /SOLID lzma +SetDateSave off +Unicode true # General Symbol Definitions !define REGKEY "SOFTWARE\$(^Name)" -!define VERSION @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@ !define COMPANY "@PACKAGE_NAME@ project" !define URL @PACKAGE_URL@ # MUI Symbol Definitions -!define MUI_ICON "@abs_top_srcdir@/share/pixmaps/bitcoin.ico" +!define MUI_ICON "@abs_top_srcdir@/share/pixmaps/raptoreum.ico" !define MUI_WELCOMEFINISHPAGE_BITMAP "@abs_top_srcdir@/share/pixmaps/nsis-wizard.bmp" !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_RIGHT @@ -20,7 +21,8 @@ SetCompressor /SOLID lzma !define MUI_STARTMENUPAGE_REGISTRY_KEY ${REGKEY} !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup !define MUI_STARTMENUPAGE_DEFAULTFOLDER "@PACKAGE_NAME@" -!define MUI_FINISHPAGE_RUN $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@ +!define MUI_FINISHPAGE_RUN "$WINDIR\explorer.exe" +!define MUI_FINISHPAGE_RUN_PARAMETERS $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@ !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" !define MUI_UNWELCOMEFINISHPAGE_BITMAP "@abs_top_srcdir@/share/pixmaps/nsis-wizard.bmp" !define MUI_UNFINISHPAGE_NOAUTOCLOSE @@ -28,9 +30,7 @@ SetCompressor /SOLID lzma # Included files !include Sections.nsh !include MUI2.nsh -!if "@WINDOWS_BITS@" == "64" !include x64.nsh -!endif # Variables Var StartMenuGroup @@ -48,24 +48,19 @@ Var StartMenuGroup !insertmacro MUI_LANGUAGE English # Installer attributes -OutFile @abs_top_srcdir@/@PACKAGE_TARNAME@-${VERSION}-win@WINDOWS_BITS@-setup.exe -!if "@WINDOWS_BITS@" == "64" InstallDir $PROGRAMFILES64\RaptoreumCore -!else -InstallDir $PROGRAMFILES\RaptoreumCore -!endif -CRCCheck on +CRCCheck force XPStyle on BrandingText " " ShowInstDetails show -VIProductVersion ${VERSION}.@CLIENT_VERSION_BUILD@ +VIProductVersion @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@.@CLIENT_VERSION_BUILD@ VIAddVersionKey ProductName "@PACKAGE_NAME@" -VIAddVersionKey ProductVersion "${VERSION}" +VIAddVersionKey ProductVersion "@PACKAGE_VERSION@" VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey CompanyWebsite "${URL}" -VIAddVersionKey FileVersion "${VERSION}" -VIAddVersionKey FileDescription "" -VIAddVersionKey LegalCopyright "" +VIAddVersionKey FileVersion "@PACKAGE_VERSION@" +VIAddVersionKey FileDescription "Installer for @PACKAGE_NAME@" +VIAddVersionKey LegalCopyright "Copyright (C) 2020-@COPYRIGHT_YEAR@ @COPYRIGHT_HOLDERS_FINAL@" InstallDirRegKey HKCU "${REGKEY}" Path ShowUninstDetails show @@ -73,14 +68,15 @@ ShowUninstDetails show Section -Main SEC0000 SetOutPath $INSTDIR SetOverwrite on - File @abs_top_srcdir@/release/@BITCOIN_GUI_NAME@@EXEEXT@ + File @abs_top_builddir@/release/@BITCOIN_GUI_NAME@@EXEEXT@ File /oname=COPYING.txt @abs_top_srcdir@/COPYING File /oname=readme.txt @abs_top_srcdir@/doc/README_windows.txt SetOutPath $INSTDIR\daemon - File @abs_top_srcdir@/release/@BITCOIN_DAEMON_NAME@@EXEEXT@ - File @abs_top_srcdir@/release/@BITCOIN_CLI_NAME@@EXEEXT@ + File @abs_top_builddir@/release/@BITCOIN_DAEMON_NAME@@EXEEXT@ + File @abs_top_builddir@/release/@BITCOIN_CLI_NAME@@EXEEXT@ + File @abs_top_builddir@/release/@BITCOIN_WALLET_TOOL_NAME@@EXEEXT@ SetOutPath $INSTDIR\doc - File /r @abs_top_srcdir@/doc\*.* + File /r /x Makefile* @abs_top_srcdir@/doc\*.* SetOutPath $INSTDIR WriteRegStr HKCU "${REGKEY}\Components" Main 1 SectionEnd @@ -92,14 +88,14 @@ Section -post SEC0001 !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory $SMPROGRAMS\$StartMenuGroup CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" $INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@ - CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@PACKAGE_NAME@ (testnet, @WINDOWS_BITS@-bit).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 1 + CreateShortcut "$SMPROGRAMS\$StartMenuGroup\@PACKAGE_NAME@ (testnet, 64-bit).lnk" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" "-testnet" "$INSTDIR\@BITCOIN_GUI_NAME@@EXEEXT@" 1 CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" $INSTDIR\uninstall.exe !insertmacro MUI_STARTMENU_WRITE_END WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "@PACKAGE_VERSION@" WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" - WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\raptoreum-qt.exe WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 @@ -136,7 +132,7 @@ Section -un.post UNSEC0001 DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall $(^Name).lnk" Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^Name).lnk" - Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@PACKAGE_NAME@ (testnet, @WINDOWS_BITS@-bit).lnk" + Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\@PACKAGE_NAME@ (testnet, 64-bit).lnk" Delete /REBOOTOK "$SMSTARTUP\Raptoreum.lnk" Delete /REBOOTOK $INSTDIR\uninstall.exe Delete /REBOOTOK $INSTDIR\debug.log @@ -158,7 +154,6 @@ 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 @@ -166,7 +161,6 @@ Function .onInit MessageBox MB_OK|MB_ICONSTOP "Cannot install 64-bit version on a 32-bit system." Abort ${EndIf} -!endif FunctionEnd # Uninstaller functions diff --git a/src/.clang-format b/src/.clang-format index a8f45e4ca7..19b06a3be9 100644 --- a/src/.clang-format +++ b/src/.clang-format @@ -13,7 +13,10 @@ AlwaysBreakTemplateDeclarations: true BinPackArguments: true BinPackParameters: false BreakBeforeBinaryOperators: false -BreakBeforeBraces: Linux +BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: true + AfterFunction: true BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false BreakConstructorInitializers: AfterColon diff --git a/src/Makefile.am b/src/Makefile.am index c317402cff..981e527892 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,19 +1,21 @@ # Copyright (c) 2013-2016 The Bitcoin Core developers # Copyright (c) 2014-2018 The Dash Core developers -# Copyright (c) 2020 The Raptoreum developers +# Copyright (c) 2020-2022 The Raptoreum developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. -DIST_SUBDIRS = secp256k1 univalue +DIST_SUBDIRS = secp256k1 -AM_LDFLAGS = $(PTHREAD_CFLAGS) $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) -AM_CXXFLAGS = $(HARDENED_CXXFLAGS) $(ERROR_CXXFLAGS) -AM_CPPFLAGS = $(HARDENED_CPPFLAGS) +AM_LDFLAGS = $(LIBTOOL_LDFLAGS) $(HARDENED_LDFLAGS) $(GPROF_LDFLAGS) $(SANITIZER_LDFLAGS) $(LTO_LDFLAGS) $(CORE_LDFLAGS) +AM_CXXFLAGS = $(DEBUG_CXXFLAGS) $(HARDENED_CXXFLAGS) $(WARN_CXXFLAGS) $(NOWARN_CXXFLAGS) $(ERROR_CXXFLAGS) $(GPROF_CXXFLAGS) $(SANITIZER_CXXFLAGS) $(LTO_CXXFLAGS) $(CORE_CXXFLAGS) +AM_CPPFLAGS = $(DEBUG_CPPFLAGS) $(HARDENED_CPPFLAGS) $(CORE_CPPFLAGS) +AM_LIBTOOLFLAGS = --preserve-dup-deps +PTHREAD_FLAGS = $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) EXTRA_LIBRARIES = +if ENABLE_STACKTRACES if ENABLE_CRASH_HOOKS if CRASH_HOOKS_WRAPPED_CXX_ABI -# Wrap internal C++ ABI's so that we can attach stacktraces to exceptions LDFLAGS_WRAP_EXCEPTIONS = -Wl,-wrap,__cxa_allocate_exception -Wl,-wrap,__cxa_free_exception if TARGET_WINDOWS LDFLAGS_WRAP_EXCEPTIONS += -Wl,-wrap,_assert -Wl,-wrap,_wassert @@ -28,31 +30,19 @@ BACKTRACE_LIB = -ldbghelp -lbacktrace else BACKTRACE_LIB = -lbacktrace endif +endif #ENABLE_STACKTRACES -if EMBEDDED_UNIVALUE -LIBUNIVALUE = univalue/libunivalue.la - -$(LIBUNIVALUE): $(wildcard univalue/lib/*) $(wildcard univalue/include/*) - $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F) -else -LIBUNIVALUE = $(UNIVALUE_LIBS) -endif - -BITCOIN_CONFIG_INCLUDES=-I$(builddir)/config -BITCOIN_INCLUDES=-I$(builddir) -I$(builddir)/obj $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) $(CRYPTO_CFLAGS) $(SSL_CFLAGS) - -BITCOIN_INCLUDES += -I$(srcdir)/secp256k1/include -BITCOIN_INCLUDES += $(UNIVALUE_CFLAGS) - -BLS_LIBS=-lchiabls -lgmp +BITCOIN_INCLUDES=-I$(builddir) -I$(srcdir)/secp256k1/include -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) $(BDB_CPPFLAGS) $(BOOST_CPPFLAGS) $(LEVELDB_CPPFLAGS) +BITCOIN_INCLUDES+=-I$(srcdir)/dashbls/include -I$(srcdir)/dashbls/depends/relic/include -I$(srcdir)/dashbls/depends/minialloc/include LIBBITCOIN_SERVER=libraptoreum_server.a LIBBITCOIN_COMMON=libraptoreum_common.a LIBBITCOIN_CONSENSUS=libraptoreum_consensus.a LIBBITCOIN_CLI=libraptoreum_cli.a LIBBITCOIN_UTIL=libraptoreum_util.a -LIBBITCOIN_CRYPTO_BASE=crypto/libraptoreum_crypto_base.a +LIBBITCOIN_CRYPTO=crypto/libraptoreum_crypto.a LIBBITCOINQT=qt/libraptoreumqt.a +LIBDASHBLS=dashbls/libdashbls.la LIBSECP256K1=secp256k1/libsecp256k1.la if ENABLE_ZMQ @@ -63,9 +53,9 @@ LIBBITCOINCONSENSUS=libraptoreumconsensus.la endif if ENABLE_WALLET LIBBITCOIN_WALLET=libraptoreum_wallet.a +LIBBITCOIN_WALLET_TOOL=libraptoreum_wallet_tool.a endif -LIBBITCOIN_CRYPTO= $(LIBBITCOIN_CRYPTO_BASE) if ENABLE_SSE41 LIBBITCOIN_CRYPTO_SSE41 = crypto/libraptoreum_crypto_sse41.a LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_SSE41) @@ -74,12 +64,19 @@ if ENABLE_AVX2 LIBBITCOIN_CRYPTO_AVX2 = crypto/libraptoreum_crypto_avx2.a LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_AVX2) endif -if ENABLE_SHANI -LIBBITCOIN_CRYPTO_SHANI = crypto/libraptoreum_crypto_shani.a -LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_SHANI) +if ENABLE_X86_SHANI +LIBBITCOIN_CRYPTO_X86_SHANI = crypto/libraptoreum_crypto_x86_shani.a +LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_X86_SHANI) +endif +if ENABLE_ARM_SHANI +LIBBITCOIN_CRYPTO_ARM_SHANI = crypto/libraptoreum_crypto_arm_shani.a +LIBBITCOIN_CRYPTO += $(LIBBITCOIN_CRYPTO_ARM_SHANI) endif -$(LIBSECP256K1): $(wildcard secp256k1/src/*) $(wildcard secp256k1/include/*) +$(LIBDASHBLS): + $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) + +$(LIBSECP256K1): $(wildcard secp256k1/src/*.h) $(wildcard secp256k1/src/*.c) $(wildcard secp256k1/include/*) $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F) # Make is not made aware of per-object dependencies to avoid limiting building parallelization @@ -92,9 +89,11 @@ EXTRA_LIBRARIES += \ $(LIBBITCOIN_SERVER) \ $(LIBBITCOIN_CLI) \ $(LIBBITCOIN_WALLET) \ + $(LIBBITCOIN_WALLET_TOOL) \ $(LIBBITCOIN_ZMQ) lib_LTLIBRARIES = $(LIBBITCOINCONSENSUS) +noinst_LTLIBRARIES = bin_PROGRAMS = noinst_PROGRAMS = @@ -105,8 +104,14 @@ if BUILD_BITCOIND bin_PROGRAMS += raptoreumd endif -if BUILD_BITCOIN_UTILS - bin_PROGRAMS += raptoreum-cli raptoreum-tx +if BUILD_BITCOIN_CLI + bin_PROGRAMS += raptoreum-cli +endif + +if ENABLE_WALLET +if BUILD_BITCOIN_WALLET + bin_PROGRAMS += raptoreum-wallet +endif endif .PHONY: FORCE check-symbols check-security @@ -114,16 +119,22 @@ endif BITCOIN_CORE_H = \ addrdb.h \ addressindex.h \ - spentindex.h \ addrman.h \ + assets/assets.h \ + assets/assetsdb.h \ + assets/assetstype.h \ + attributes.h \ + banman.h \ base58.h \ batchedlogger.h \ + bech32.h \ bip39.h \ bip39_english.h \ blockencodings.h \ bloom.h \ cachemap.h \ cachemultimap.h \ + blockfilter.h \ chain.h \ chainparams.h \ chainparamsbase.h \ @@ -131,18 +142,26 @@ BITCOIN_CORE_H = \ checkpoints.h \ checkqueue.h \ clientversion.h \ + coinjoin/coinjoin.h \ + coinjoin/coinjoin-client.h \ + coinjoin/coinjoin-client-options.h \ + coinjoin/coinjoin-server.h \ + coinjoin/coinjoin-util.h \ coins.h \ compat.h \ + compat/assumptions.h \ compat/byteswap.h \ + compat/cpuid.h \ compat/endian.h \ compat/sanity.h \ compressor.h \ consensus/consensus.h \ + consensus/tx_check.h \ consensus/tx_verify.h \ core_io.h \ core_memusage.h \ cuckoocache.h \ - ctpl.h \ + ctpl_stl.h \ cxxtimer.hpp \ evo/cbtx.h \ evo/deterministicmns.h \ @@ -151,10 +170,6 @@ BITCOIN_CORE_H = \ evo/providertx.h \ evo/simplifiedmns.h \ evo/specialtx.h \ - privatesend/privatesend.h \ - privatesend/privatesend-client.h \ - privatesend/privatesend-server.h \ - privatesend/privatesend-util.h \ dsnotificationinterface.h \ governance/governance.h \ governance/governance-classes.h \ @@ -163,15 +178,27 @@ BITCOIN_CORE_H = \ governance/governance-validators.h \ governance/governance-vote.h \ governance/governance-votedb.h \ + future/fee.h \ + future/utils.h \ flat-database.h \ hdchain.h \ + flatfile.h \ fs.h \ httprpc.h \ httpserver.h \ + indices/spent_index.h \ + indices/future_index.h \ + index/base.h \ + index/disktxpos.h \ + index/txindex.h \ indirectmap.h \ init.h \ + interfaces/chain.h \ + interfaces/handler.h \ + interfaces/node.h \ + interfaces/wallet.h \ key.h \ - keepass.h \ + key_io.h \ keystore.h \ dbwrapper.h \ limitedmap.h \ @@ -188,12 +215,16 @@ BITCOIN_CORE_H = \ llmq/quorums_signing.h \ llmq/quorums_signing_shares.h \ llmq/quorums_utils.h \ + llmq/quorums_parameters.h \ + logging.h \ + logging_timer.h \ smartnode/activesmartnode.h \ smartnode/smartnode-meta.h \ smartnode/smartnode-payments.h \ smartnode/smartnode-sync.h \ smartnode/smartnode-utils.h \ smartnode/smartnode-collaterals.h \ + mapport.h \ memusage.h \ merkleblock.h \ messagesigner.h \ @@ -204,30 +235,43 @@ BITCOIN_CORE_H = \ netbase.h \ netfulfilledman.h \ netmessagemaker.h \ + node/coin.h \ + node/coinstats.h \ + node/context.h \ + node/transaction.h \ + node/utxo_snapshot.h \ noui.h \ + optional.h \ policy/feerate.h \ policy/fees.h \ policy/policy.h \ + policy/settings.h \ pow.h \ protocol.h \ random.h \ + randomenv.h \ reverse_iterator.h \ - reverselock.h \ rpc/blockchain.h \ rpc/client.h \ rpc/mining.h \ rpc/protocol.h \ - rpc/server.h \ + rpc/rawtransaction_util.h \ rpc/register.h \ + rpc/request.h \ + rpc/server.h \ + rpc/util.h \ + rpc/specialtx_utilities.h \ saltedhasher.h \ scheduler.h \ + script/descriptor.h \ script/sigcache.h \ script/sign.h \ script/standard.h \ - script/ismine.h \ + shutdown.h \ spork.h \ stacktraces.h \ streams.h \ + statsd_client.h \ support/allocators/mt_pooled_secure.h \ support/allocators/pooled_secure.h \ support/allocators/secure.h \ @@ -245,23 +289,50 @@ BITCOIN_CORE_H = \ ui_interface.h \ undo.h \ unordered_lru_cache.h \ - util.h \ - utilmoneystr.h \ - utiltime.h \ + update/update.h \ + util/bip32.h \ + util/bytevectorhash.h \ + util/check.h \ + util/error.h \ + util/fees.h \ + util/spanparsing.h \ + util/system.h \ + util/asmap.h \ + util/macro.h \ + util/memory.h \ + util/moneystr.h \ + util/ranges.h \ + util/ref.h \ + util/time.h \ + util/string.h \ + util/threadnames.h \ + util/vector.h \ + util/url.h \ + util/validation.h \ validation.h \ validationinterface.h \ - versionbits.h \ + walletinitinterface.h \ + wallet/bdb.h \ wallet/coincontrol.h \ + wallet/context.h \ wallet/crypter.h \ wallet/db.h \ + wallet/fees.h \ + wallet/ismine.h \ + wallet/load.h \ wallet/rpcwallet.h \ + wallet/salvage.h \ wallet/wallet.h \ wallet/walletdb.h \ + wallet/wallettool.h \ + wallet/walletutil.h \ + wallet/coinselection.h \ warnings.h \ zmq/zmqabstractnotifier.h \ zmq/zmqconfig.h\ zmq/zmqnotificationinterface.h \ - zmq/zmqpublishnotifier.h + zmq/zmqpublishnotifier.h \ + zmq/zmqrpc.h obj/build.h: FORCE @@ -271,17 +342,27 @@ obj/build.h: FORCE libraptoreum_util_a-clientversion.$(OBJEXT): obj/build.h # server: shared between raptoreumd and raptoreum-qt -libraptoreum_server_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(MINIUPNPC_CPPFLAGS) $(EVENT_CFLAGS) $(EVENT_PTHREADS_CFLAGS) +# Contains code accessing mempool and chain state that is meant to be separated +# from wallet and GUI code (see node/README.md). Shared code should go in +# libraptoreum_common or libraptoreum_util libraries instead. +libraptoreum_server_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(MINIUPNPC_CPPFLAGS) $(NATPMP_CPPFLAGS) $(EVENT_CFLAGS) $(EVENT_PTHREADS_CFLAGS) libraptoreum_server_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libraptoreum_server_a_SOURCES = \ addrdb.cpp \ addrman.cpp \ + banman.cpp \ + assets/assets.cpp \ + assets/assetsdb.cpp \ batchedlogger.cpp \ - bloom.cpp \ blockencodings.cpp \ + blockfilter.cpp \ chain.cpp \ checkpoints.cpp \ + coinjoin/coinjoin.cpp \ + coinjoin/coinjoin-client-options.cpp\ + coinjoin/coinjoin-server.cpp \ consensus/tx_verify.cpp \ + dbwrapper.cpp \ dsnotificationinterface.cpp \ evo/cbtx.cpp \ evo/deterministicmns.cpp \ @@ -290,16 +371,22 @@ libraptoreum_server_a_SOURCES = \ evo/providertx.cpp \ evo/simplifiedmns.cpp \ evo/specialtx.cpp \ + flatfile.cpp \ httprpc.cpp \ httpserver.cpp \ + interfaces/chain.cpp \ + interfaces/node.cpp \ + index/base.cpp \ + index/txindex.cpp \ init.cpp \ - dbwrapper.cpp \ + mapport.cpp \ governance/governance.cpp \ governance/governance-classes.cpp \ governance/governance-object.cpp \ governance/governance-validators.cpp \ governance/governance-vote.cpp \ governance/governance-votedb.cpp \ + future/fee.cpp \ llmq/quorums.cpp \ llmq/quorums_blockprocessor.cpp \ llmq/quorums_commitment.cpp \ @@ -318,18 +405,21 @@ libraptoreum_server_a_SOURCES = \ smartnode/smartnode-payments.cpp \ smartnode/smartnode-sync.cpp \ smartnode/smartnode-utils.cpp \ - merkleblock.cpp \ messagesigner.cpp \ miner.cpp \ net.cpp \ netfulfilledman.cpp \ net_processing.cpp \ + node/coin.cpp \ + node/coinstats.cpp \ + node/context.cpp \ + node/transaction.cpp \ + ui_interface.cpp \ noui.cpp \ policy/fees.cpp \ policy/policy.cpp \ + policy/settings.cpp \ pow.cpp \ - privatesend/privatesend.cpp \ - privatesend/privatesend-server.cpp \ rest.cpp \ rpc/blockchain.cpp \ rpc/smartnode.cpp \ @@ -338,13 +428,15 @@ libraptoreum_server_a_SOURCES = \ rpc/misc.cpp \ rpc/net.cpp \ rpc/rawtransaction.cpp \ + rpc/rpcassets.cpp \ rpc/rpcevo.cpp \ rpc/rpcquorums.cpp \ rpc/server.cpp \ - rpc/privatesend.cpp \ + rpc/coinjoin.cpp \ script/sigcache.cpp \ - script/ismine.cpp \ + shutdown.cpp \ spork.cpp \ + statsd_client.cpp \ timedata.cpp \ torcontrol.cpp \ txdb.cpp \ @@ -352,16 +444,23 @@ libraptoreum_server_a_SOURCES = \ ui_interface.cpp \ validation.cpp \ validationinterface.cpp \ - versionbits.cpp \ $(BITCOIN_CORE_H) +if ENABLE_WALLET +libraptoreum_server_a_SOURCES += wallet/init.cpp +endif +if !ENABLE_WALLET +libraptoreum_server_a_SOURCES += dummywallet.cpp +endif + if ENABLE_ZMQ -libraptoreum_zmq_a_CPPFLAGS = $(BITCOIN_INCLUDES) $(ZMQ_CFLAGS) +libraptoreum_zmq_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(ZMQ_CFLAGS) libraptoreum_zmq_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libraptoreum_zmq_a_SOURCES = \ zmq/zmqabstractnotifier.cpp \ zmq/zmqnotificationinterface.cpp \ - zmq/zmqpublishnotifier.cpp + zmq/zmqpublishnotifier.cpp \ + zmq/zmqrpc.cpp endif @@ -370,21 +469,37 @@ endif libraptoreum_wallet_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) libraptoreum_wallet_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libraptoreum_wallet_a_SOURCES = \ - keepass.cpp \ - privatesend/privatesend-client.cpp \ - privatesend/privatesend-util.cpp \ + coinjoin/coinjoin-client.cpp \ + coinjoin/coinjoin-client-options.cpp \ + coinjoin/coinjoin-util.cpp \ + interfaces/wallet.cpp \ + wallet/bdb.cpp \ + wallet/coincontrol.cpp \ + wallet/context.cpp \ wallet/crypter.cpp \ wallet/db.cpp \ + wallet/fees.cpp \ + wallet/ismine.cpp \ + wallet/load.cpp \ wallet/rpcdump.cpp \ wallet/rpcwallet.cpp \ + wallet/salvage.cpp \ wallet/wallet.cpp \ wallet/walletdb.cpp \ + wallet/walletutil.cpp \ + wallet/coinselection.cpp \ + $(BITCOIN_CORE_H) + +libraptoreum_wallet_tool_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) +libraptoreum_wallet_tool_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) +libraptoreum_wallet_tool_a_SOURCES = \ + wallet/wallettool.cpp \ $(BITCOIN_CORE_H) # crypto primitives library -crypto_libraptoreum_crypto_base_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_CONFIG_INCLUDES) $(PIC_FLAGS) -crypto_libraptoreum_crypto_base_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) $(PIC_FLAGS) -crypto_libraptoreum_crypto_base_a_SOURCES = \ +crypto_libraptoreum_crypto_a_CPPFLAGS = $(AM_CPPFLAGS) $(PIC_FLAGS) +crypto_libraptoreum_crypto_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) $(PIC_FLAGS) +crypto_libraptoreum_crypto_a_SOURCES = \ crypto/aes.cpp \ crypto/aes.h \ crypto/chacha_poly_aead.h \ @@ -398,6 +513,8 @@ crypto_libraptoreum_crypto_base_a_SOURCES = \ crypto/hmac_sha512.h \ crypto/poly1305.h \ crypto/poly1305.cpp \ + crypto/pkcs5_pbkdf2_hmac_sha512.cpp \ + crypto/pkcs5_pbkdf2_hmac_sha512.h \ crypto/ripemd160.cpp \ crypto/aes_helper.c \ crypto/blake.c \ @@ -423,7 +540,6 @@ crypto_libraptoreum_crypto_base_a_SOURCES = \ crypto/sha1.h \ crypto/sha256.cpp \ crypto/sha256.h \ - crypto/sha512.h \ crypto/sph_blake.h \ crypto/sph_bmw.h \ crypto/sph_cubehash.h \ @@ -445,7 +561,7 @@ crypto_libraptoreum_crypto_base_a_SOURCES = \ crypto/sha512.h if USE_ASM -crypto_libraptoreum_crypto_base_a_SOURCES += crypto/sha256_sse4.cpp +crypto_libraptoreum_crypto_a_SOURCES += crypto/sha256_sse4.cpp endif crypto_libraptoreum_crypto_sse41_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) @@ -460,22 +576,17 @@ crypto_libraptoreum_crypto_avx2_a_CXXFLAGS += $(AVX2_CXXFLAGS) crypto_libraptoreum_crypto_avx2_a_CPPFLAGS += -DENABLE_AVX2 crypto_libraptoreum_crypto_avx2_a_SOURCES = crypto/sha256_avx2.cpp -crypto_libraptoreum_crypto_shani_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -crypto_libraptoreum_crypto_shani_a_CPPFLAGS = $(AM_CPPFLAGS) -crypto_libraptoreum_crypto_shani_a_CXXFLAGS += $(SHANI_CXXFLAGS) -crypto_libraptoreum_crypto_shani_a_CPPFLAGS += -DENABLE_SHANI -crypto_libraptoreum_crypto_shani_a_SOURCES = crypto/sha256_shani.cpp - -crypto_libraptoreum_crypto_base_a_SOURCES += \ +crypto_libraptoreum_crypto_a_SOURCES += \ cryptonote/aesb.c \ cryptonote/c_blake256.c \ cryptonote/c_groestl.c \ cryptonote/c_jh.c \ cryptonote/c_keccak.c \ cryptonote/c_skein.c \ - cryptonote/slow-hash.c \ - cryptonote/hash-ops.c \ cryptonote/oaes_lib.c \ + cryptonote/hash-ops.c \ + cryptonote/slow-hash.c \ + cryptonote/slow-hash.h \ cryptonote/wild_keccak.cpp \ cryptonote/c_blake256.h \ cryptonote/c_groestl.h \ @@ -484,7 +595,6 @@ crypto_libraptoreum_crypto_base_a_SOURCES += \ cryptonote/crypto.h \ cryptonote/c_skein.h \ cryptonote/groestl_tables.h \ - cryptonote/slow-hash.h \ cryptonote/int-util.h \ cryptonote/oaes_config.h \ cryptonote/hash-ops.h \ @@ -494,27 +604,44 @@ crypto_libraptoreum_crypto_base_a_SOURCES += \ cryptonote/wild_keccak.h \ cryptonote/warnings.h +crypto_libraptoreum_crypto_x86_shani_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) +crypto_libraptoreum_crypto_x86_shani_a_CPPFLAGS = $(AM_CPPFLAGS) +crypto_libraptoreum_crypto_x86_shani_a_CXXFLAGS += $(X86_SHANI_CXXFLAGS) +crypto_libraptoreum_crypto_x86_shani_a_CPPFLAGS += -DENABLE_X86_SHANI +crypto_libraptoreum_crypto_x86_shani_a_SOURCES = crypto/sha256_x86_shani.cpp + +crypto_libraptoreum_crypto_arm_shani_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) +crypto_libraptoreum_crypto_arm_shani_a_CPPFLAGS = $(AM_CPPFLAGS) +crypto_libraptoreum_crypto_arm_shani_a_CXXFLAGS += $(ARM_SHANI_CXXFLAGS) +crypto_libraptoreum_crypto_arm_shani_a_CPPFLAGS += -DENABLE_ARM_SHANI +crypto_libraptoreum_crypto_arm_shani_a_SOURCES = crypto/sha256_arm_shani.cpp + # consensus: shared between all executables that validate any consensus rules. libraptoreum_consensus_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) libraptoreum_consensus_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libraptoreum_consensus_a_SOURCES = \ - amount.h \ - founder_payment.h \ arith_uint256.cpp \ arith_uint256.h \ bls/bls.cpp \ bls/bls.h \ - consensus/merkle.cpp \ - consensus/merkle.h \ - consensus/params.h \ - consensus/validation.h \ + amount.h \ + founder_payment.cpp \ + founder_payment.h \ hash_selection.h \ hash_selection.cpp \ hash.cpp \ hash.h \ + cryptonote/slow-hash.h \ + consensus/merkle.cpp \ + consensus/merkle.h \ + consensus/params.h \ + consensus/tx_check.cpp \ + consensus/validation.h \ prevector.h \ primitives/block.cpp \ primitives/block.h \ + primitives/powcache.cpp \ + primitives/powcache.h \ primitives/transaction.cpp \ primitives/transaction.h \ pubkey.cpp \ @@ -527,44 +654,56 @@ libraptoreum_consensus_a_SOURCES = \ script/script_error.cpp \ script/script_error.h \ serialize.h \ + span.h \ streams.h \ tinyformat.h \ uint256.cpp \ uint256.h \ - utilstrencodings.cpp \ - utilstrencodings.h \ + util/strencodings.cpp \ + util/strencodings.h \ version.h # common: shared between raptoreumd, and raptoreum-qt and non-server tools libraptoreum_common_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) libraptoreum_common_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libraptoreum_common_a_SOURCES = \ + assets/assetstype.cpp \ base58.cpp \ + bech32.cpp \ founder_payment.cpp \ bip39.cpp \ + bloom.cpp \ chainparams.cpp \ smartnode/smartnode-collaterals.cpp \ + future/utils.cpp \ coins.cpp \ compressor.cpp \ core_read.cpp \ core_write.cpp \ hdchain.cpp \ key.cpp \ + key_io.cpp \ keystore.cpp \ + merkleblock.cpp \ netaddress.cpp \ netbase.cpp \ policy/feerate.cpp \ + policy/policy.cpp \ protocol.cpp \ + rpc/rawtransaction_util.cpp \ + rpc/util.cpp \ saltedhasher.cpp \ scheduler.cpp \ + script/descriptor.cpp \ script/sign.cpp \ script/standard.cpp \ + update/update.cpp \ warnings.cpp \ $(BITCOIN_CORE_H) # util: shared between all executables. # This library *must* be included to make sure that the glibc -# backward-compatibility objects and their sanity checks are linked. +# sanity checks are linked. libraptoreum_util_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) libraptoreum_util_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libraptoreum_util_a_SOURCES = \ @@ -578,29 +717,37 @@ libraptoreum_util_a_SOURCES = \ clientversion.cpp \ compat/glibc_sanity.cpp \ compat/glibcxx_sanity.cpp \ - compat/strnlen.cpp \ fs.cpp \ + interfaces/handler.cpp \ + logging.cpp \ random.cpp \ - rpc/protocol.cpp \ + randomenv.cpp \ + rpc/request.cpp \ stacktraces.cpp \ support/cleanse.cpp \ sync.cpp \ threadinterrupt.cpp \ - util.cpp \ - utilmoneystr.cpp \ - utilstrencodings.cpp \ - utiltime.cpp \ + util/bip32.cpp \ + util/system.cpp \ + util/asmap.cpp \ + util/moneystr.cpp \ + util/spanparsing.cpp \ + util/strencodings.cpp \ + util/string.cpp \ + util/time.cpp \ + util/threadnames.cpp \ + util/error.cpp \ + util/fees.cpp \ + util/url.cpp \ + util/validation.cpp \ $(BITCOIN_CORE_H) -if GLIBC_BACK_COMPAT -libraptoreum_util_a_SOURCES += compat/glibc_compat.cpp -AM_LDFLAGS += -Wl,--wrap=log2f -Wl,--wrap=__divmoddi4 -endif - -# cli: shared between raptoreum-cli and raptoreum-qt +# cli: shared between raptoreumd and raptoreum-qt libraptoreum_cli_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) libraptoreum_cli_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libraptoreum_cli_a_SOURCES = \ + compat/stdin.h \ + compat/stdin.cpp \ rpc/client.cpp \ $(BITCOIN_CORE_H) @@ -611,18 +758,19 @@ nodist_libraptoreum_util_a_SOURCES = $(srcdir)/obj/build.h raptoreumd_SOURCES = raptoreumd.cpp raptoreumd_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) raptoreumd_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -raptoreumd_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +raptoreumd_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) if TARGET_WINDOWS raptoreumd_SOURCES += raptoreumd-res.rc endif raptoreumd_LDADD = \ + $(LIBBITCOIN_SERVER) \ + $(LIBBITCOIN_WALLET) \ $(LIBBITCOIN_SERVER) \ $(LIBBITCOIN_COMMON) \ $(LIBUNIVALUE) \ $(LIBBITCOIN_UTIL) \ - $(LIBBITCOIN_WALLET) \ $(LIBBITCOIN_ZMQ) \ $(LIBBITCOIN_CONSENSUS) \ $(LIBBITCOIN_CRYPTO) \ @@ -631,13 +779,13 @@ raptoreumd_LDADD = \ $(LIBMEMENV) \ $(LIBSECP256K1) -raptoreumd_LDADD += $(BACKTRACE_LIB) $(BOOST_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(ZMQ_LIBS) $(BLS_LIBS) +raptoreumd_LDADD += $(BACKTRACE_LIB) $(BOOST_LIBS) $(BDB_LIBS) $(MINIUPNPC_LIBS) $(NATPMP_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(ZMQ_LIBS) $(LIBDASHBLS) $(GMP_LIBS) # raptoreum-cli binary # raptoreum_cli_SOURCES = raptoreum-cli.cpp raptoreum_cli_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(EVENT_CFLAGS) raptoreum_cli_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -raptoreum_cli_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +raptoreum_cli_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) if TARGET_WINDOWS raptoreum_cli_SOURCES += raptoreum-cli-res.rc @@ -648,42 +796,49 @@ raptoreum_cli_LDADD = \ $(LIBUNIVALUE) \ $(LIBBITCOIN_UTIL) \ $(LIBBITCOIN_CRYPTO) -raptoreum_cli_LDADD += $(BACKTRACE_LIB) $(BOOST_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(EVENT_LIBS) $(BLS_LIBS) -# -# raptoreum-tx binary # -raptoreum_tx_SOURCES = raptoreum-tx.cpp -raptoreum_tx_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) -raptoreum_tx_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -raptoreum_tx_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +raptoreum_cli_LDADD += $(BACKTRACE_LIB) $(BOOST_LIBS) $(EVENT_LIBS) $(LIBDASHBLS) $(GMP_LIBS) + +# raptoreum-wallet binary # +raptoreum_wallet_SOURCES = raptoreum-wallet.cpp +raptoreum_wallet_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) +raptoreum_wallet_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) +raptoreum_wallet_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) if TARGET_WINDOWS -raptoreum_tx_SOURCES += raptoreum-tx-res.rc +raptoreum_wallet_SOURCES += raptoreum-wallet-res.rc endif -raptoreum_tx_LDADD = \ - $(LIBUNIVALUE) \ +# Libraries below may be listed more than once to resolve circular dependencies (see +# https://eli.thegreenplace.net/2013/07/09/library-order-in-static-linking#circular-dependency) +raptoreum_wallet_LDADD = \ + $(LIBBITCOIN_WALLET_TOOL) \ + $(LIBBITCOIN_SERVER) \ + $(LIBBITCOIN_WALLET) \ + $(LIBBITCOIN_SERVER) \ $(LIBBITCOIN_COMMON) \ - $(LIBBITCOIN_UTIL) \ $(LIBBITCOIN_CONSENSUS) \ + $(LIBBITCOIN_UTIL) \ $(LIBBITCOIN_CRYPTO) \ - $(LIBSECP256K1) + $(LIBBITCOIN_ZMQ) \ + $(LIBLEVELDB) \ + $(LIBLEVELDB_SSE42) \ + $(LIBMEMENV) \ + $(LIBSECP256K1) \ + $(LIBUNIVALUE) -raptoreum_tx_LDADD += $(BACKTRACE_LIB) $(BOOST_LIBS) $(CRYPTO_LIBS) $(BLS_LIBS) +raptoreum_wallet_LDADD += $(BACKTRACE_LIB) $(BOOST_LIBS) $(BDB_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(MINIUPNPC_LIBS) $(NATPMP_LIBS) $(ZMQ_LIBS) $(LIBDASHBLS) $(GMP_LIBS) # # raptoreumconsensus library # if BUILD_BITCOIN_LIBS include_HEADERS = script/raptoreumconsensus.h -libraptoreumconsensus_la_SOURCES = support/cleanse.cpp $(crypto_libraptoreum_crypto_base_a_SOURCES) $(libraptoreum_consensus_a_SOURCES) - -if GLIBC_BACK_COMPAT - libraptoreumconsensus_la_SOURCES += compat/glibc_compat.cpp -endif +libraptoreumconsensus_la_SOURCES = support/cleanse.cpp $(crypto_libraptoreum_crypto_a_SOURCES) $(libraptoreum_consensus_a_SOURCES) -libraptoreumconsensus_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) -libraptoreumconsensus_la_LIBADD = $(LIBSECP256K1) $(BLS_LIBS) +libraptoreumconsensus_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(RELDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) +libraptoreumconsensus_la_LIBADD = $(LIBSECP256K1) $(LIBDASHBLS) $(GMP_LIBS) libraptoreumconsensus_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/obj -I$(srcdir)/secp256k1/include -DBUILD_BITCOIN_INTERNAL +libraptoreumconsensus_la_CPPFLAGS += -I$(srcdir)/dashbls/include -I$(srcdir)/dashbls/depends/relic/include -I$(srcdir)/dashbls/depends/minialloc/include libraptoreumconsensus_la_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) endif @@ -700,6 +855,7 @@ CLEANFILES = $(EXTRA_LIBRARIES) CLEANFILES += *.gcda *.gcno CLEANFILES += compat/*.gcda compat/*.gcno CLEANFILES += consensus/*.gcda consensus/*.gcno +CLEANFILES += crc32c/src/*.gcda crc32c/src/*.gcno CLEANFILES += crypto/*.gcda crypto/*.gcno CLEANFILES += policy/*.gcda policy/*.gcno CLEANFILES += primitives/*.gcda primitives/*.gcno @@ -709,14 +865,13 @@ CLEANFILES += univalue/*.gcda univalue/*.gcno CLEANFILES += wallet/*.gcda wallet/*.gcno CLEANFILES += wallet/test/*.gcda wallet/test/*.gcno CLEANFILES += zmq/*.gcda zmq/*.gcno +CLEANFILES += obj/build.h -IMMER_DIST = immer - -DISTCLEANFILES = obj/build.h - -EXTRA_DIST = $(CTAES_DIST) -EXTRA_DIST += $(IMMER_DIST) +LIBDASHBLS_DIST = dashbls +EXTRA_DIST = \ + $(CTAES_DIST) \ + $(LIBDASHBLS_DIST) config/raptoreum-config.h: config/stamp-h1 @$(MAKE) -C $(top_builddir) $(subdir)/$(@) @@ -727,8 +882,8 @@ $(top_srcdir)/$(subdir)/config/raptoreum-config.h.in: $(am__configure_deps) clean-local: + -$(MAKE) -C dashbls clean -$(MAKE) -C secp256k1 clean - -$(MAKE) -C univalue clean -rm -f leveldb/*/*.gcda leveldb/*/*.gcno leveldb/helpers/memenv/*.gcda leveldb/helpers/memenv/*.gcno -rm -f config.h -rm -rf test/__pycache__ @@ -739,33 +894,18 @@ clean-local: ## FIXME: How to get the appropriate modulename_CPPFLAGS in here? $(AM_V_GEN) $(WINDRES) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) -DWINDRES_PREPROC -i $< -o $@ -.mm.o: - $(AM_V_CXX) $(OBJCXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CXXFLAGS) $(QT_INCLUDES) $(AM_CXXFLAGS) $(PIE_FLAGS) $(CXXFLAGS) -c -o $@ $< - check-symbols: $(bin_PROGRAMS) -if GLIBC_BACK_COMPAT - @echo "Checking glibc back compat..." - $(AM_V_at) READELF=$(READELF) CPPFILT=$(CPPFILT) $(top_srcdir)/contrib/devtools/symbol-check.py < $(bin_PROGRAMS) -endif + @echo "Running symbol and dynamic library checks..." + $(AM_V_at) $(PYTHON) $(top_srcdir)/contrib/devtools/symbol-check.py $(bin_PROGRAMS) check-security: $(bin_PROGRAMS) if HARDEN @echo "Checking binary security..." - $(AM_V_at) READELF=$(READELF) OBJDUMP=$(OBJDUMP) $(top_srcdir)/contrib/devtools/security-check.py < $(bin_PROGRAMS) + $(AM_V_at) $(PYTHON) $(top_srcdir)/contrib/devtools/security-check.py $(bin_PROGRAMS) endif - -osx_debug: $(bin_PROGRAMS) - for i in $(bin_PROGRAMS); do mkdir -p $$i.dSYM/Contents/Resources/DWARF && $(DSYMUTIL_FLAT) -o $$i.dSYM/Contents/Resources/DWARF/$$(basename $$i) $$i &> /dev/null ; done - -%.pb.cc %.pb.h: %.proto - @test -f $(PROTOC) - $(AM_V_GEN) $(PROTOC) --cpp_out=$(@D) --proto_path=$( forms/ui_foo.h QT_FORMS_H=$(join $(dir $(QT_FORMS_UI)),$(addprefix ui_, $(notdir $(QT_FORMS_UI:.ui=.h)))) @@ -347,62 +444,54 @@ QT_FORMS_H=$(join $(dir $(QT_FORMS_UI)),$(addprefix ui_, $(notdir $(QT_FORMS_UI: $(QT_MOC): $(QT_FORMS_H) $(qt_libraptoreumqt_a_OBJECTS) $(qt_raptoreum_qt_OBJECTS) : | $(QT_MOC) -#Generating these with a half-written protobuf header leads to wacky results. -#This makes sure it's done. -$(QT_MOC): $(PROTOBUF_H) -$(QT_MOC_CPP): $(PROTOBUF_H) - # raptoreum-qt binary # -qt_raptoreum_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \ - $(QT_INCLUDES) $(PROTOBUF_CFLAGS) $(QR_CFLAGS) +qt_raptoreum_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) $(QT_INCLUDES) $(QR_CFLAGS) qt_raptoreum_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS) -qt_raptoreum_qt_SOURCES = qt/raptoreum.cpp -if TARGET_DARWIN - qt_raptoreum_qt_SOURCES += $(BITCOIN_MM) -endif +qt_raptoreum_qt_SOURCES = qt/main.cpp if TARGET_WINDOWS - qt_raptoreum_qt_SOURCES += $(BITCOIN_RC) + qt_raptoreum_qt_SOURCES += $(BITCOIN_QT_RC) endif qt_raptoreum_qt_LDADD = qt/libraptoreumqt.a $(LIBBITCOIN_SERVER) if ENABLE_WALLET -qt_raptoreum_qt_LDADD += $(LIBBITCOIN_WALLET) +qt_raptoreum_qt_LDADD += $(LIBBITCOIN_UTIL) $(LIBBITCOIN_WALLET) endif if ENABLE_ZMQ qt_raptoreum_qt_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS) endif -qt_raptoreum_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) \ - $(BACKTRACE_LIB) $(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) \ - $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(BLS_LIBS) -qt_raptoreum_qt_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -qt_raptoreum_qt_LIBTOOLFLAGS = --tag CXX +qt_raptoreum_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBDASHBLS) \ + $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(BACKTRACE_LIB) $(BOOST_LIBS) $(QT_LIBS) \ + $(QT_DBUS_LIBS) $(QR_LIBS) $(BDB_LIBS) $(MINIUPNPC_LIBS) $(NATPMP_LIBS) $(LIBSECP256K1) \ + $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(BLS_LIBS) $(GMP_LIBS) +qt_raptoreum_qt_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) +qt_raptoreum_qt_LIBTOOLFLAGS = $(AM_LIBTOOLFLAGS) --tag CXX #locale/foo.ts -> locale/foo.qm QT_QM=$(QT_TS:.ts=.qm) SECONDARY: $(QT_QM) -$(srcdir)/qt/raptoreumstrings.cpp: $(libraptoreum_server_a_SOURCES) $(libraptoreum_wallet_a_SOURCES) $(libraptoreum_common_a_SOURCES) $(libraptoreum_zmq_a_SOURCES) $(libraptoreum_consensus_a_SOURCES) $(libraptoreum_util_a_SOURCES) +$(srcdir)/qt/raptoreumstrings.cpp: FORCE @test -n $(XGETTEXT) || echo "xgettext is required for updating translations" - $(AM_V_GEN) cd $(srcdir); XGETTEXT=$(XGETTEXT) PACKAGE_NAME="$(PACKAGE_NAME)" COPYRIGHT_HOLDERS="$(COPYRIGHT_HOLDERS)" COPYRIGHT_HOLDERS_SUBSTITUTION="$(COPYRIGHT_HOLDERS_SUBSTITUTION)" $(PYTHON) ../share/qt/extract_strings_qt.py $^ + $(AM_V_GEN) cd $(srcdir); XGETTEXT=$(XGETTEXT) COPYRIGHT_HOLDERS="$(COPYRIGHT_HOLDERS)" $(PYTHON) ../share/qt/extract_strings_qt.py $(libraptoreum_server_a_SOURCES) $(libraptoreum_wallet_a_SOURCES) $(libraptoreum_common_a_SOURCES) $(libraptoreum_zmq_a_SOURCES) $(libraptoreum_consensus_a_SOURCES) $(libraptoreum_util_a_SOURCES) translate: $(srcdir)/qt/raptoreumstrings.cpp $(QT_FORMS_UI) $(QT_FORMS_UI) $(BITCOIN_QT_BASE_CPP) qt/raptoreum.cpp $(BITCOIN_QT_WINDOWS_CPP) $(BITCOIN_QT_WALLET_CPP) $(BITCOIN_QT_H) $(BITCOIN_MM) @test -n $(LUPDATE) || echo "lupdate is required for updating translations" - $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(LUPDATE) $^ -locations relative -no-obsolete -ts $(srcdir)/qt/locale/raptoreum_en.ts + $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(LUPDATE) $^ -I$(srcdir) -locations relative -no-obsolete -ts $(srcdir)/qt/locale/raptoreum_en.ts + @test -n $(LCONVERT) || echo "lconvert is required for updating translations" + $(AM_V_GEV) QT_SELECT=$(QT_SELECT) $(LCONVERT) -o $(srcdir)/qt/locale/raptoreum_en.xlf -i $(srcdir)/qt/locale/raptoreum_en.ts $(QT_QRC_LOCALE_CPP): $(QT_QRC_LOCALE) $(QT_QM) @test -f $(RCC) @cp -f $< $(@D)/temp_$( $@ + $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) -name raptoreum_locale --format-version 1 $(@D)/temp_$( $@ @rm $(@D)/temp_$( $@ + $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(RCC) -name raptoreum --format-version 1 $< > $@ -CLEAN_QT = $(nodist_qt_libraptoreumqt_a_SOURCES) $(QT_QM) $(QT_FORMS_H) qt/*.gcda qt/*.gcno +CLEAN_QT = $(nodist_qt_libraptoreumqt_a_SOURCES) $(QT_QM) $(QT_FORMS_H) qt/*.gcda qt/*.gcno qt/temp_raptoreum_locale.qrc qt/res/css/colors/* CLEANFILES += $(CLEAN_QT) @@ -411,18 +500,30 @@ raptoreum_qt_clean: FORCE raptoreum_qt : qt/raptoreum-qt$(EXEEXT) +APK_LIB_DIR = qt/android/libs/$(ANDROID_ARCH) +QT_BASE_VERSION = $(lastword $(shell $(MOC) --version)) +QT_BASE_PATH = $(shell find ../depends/sources/ -maxdepth 1 -type f -regex ".*qtbase.*$(QT_BASE_VERSION)\.tar.xz") +QT_BASE_TLD = $(shell tar tf $(QT_BASE_PATH) --exclude='*/*') + +raptoreum_qt_apk: FORCE + mkdir -p $(APK_LIB_DIR) + cp $(dir $(lastword $(CC)))../sysroot/usr/lib/$(host_alias)/libc++_shared.so $(APK_LIB_DIR) + tar xf $(QT_BASE_PATH) -C qt/android/src/ $(QT_BASE_TLD)src/android/jar/src --strip-components=5 + tar xf $(QT_BASE_PATH) -C qt/android/src/ $(QT_BASE_TLD)src/android/java/src --strip-components=5 + cp qt/raptoreum-qt $(APK_LIB_DIR)/libraptoreum-qt_$(ANDROID_ARCH).so + cd qt/android && gradle wrapper --gradle-version=7.0.2 + cd qt/android && ./gradlew build + ui_%.h: %.ui @test -f $(UIC) @$(MKDIR_P) $(@D) $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(UIC) -o $@ $< || (echo "Error creating $@"; false) %.moc: %.cpp - $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(MOC) $(DEFAULT_INCLUDES) $(QT_INCLUDES) $(MOC_DEFS) $< | \ - $(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@ + $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(MOC) $(DEFAULT_INCLUDES) $(QT_INCLUDES_UNSUPPRESSED) $(MOC_DEFS) $< > $@ moc_%.cpp: %.h - $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(MOC) $(DEFAULT_INCLUDES) $(QT_INCLUDES) $(MOC_DEFS) $< | \ - $(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@ + $(AM_V_GEN) QT_SELECT=$(QT_SELECT) $(MOC) $(DEFAULT_INCLUDES) $(QT_INCLUDES_UNSUPPRESSED) $(MOC_DEFS) $< > $@ %.qm: %.ts @test -f $(LRELEASE) diff --git a/src/Makefile.qt_locale.include b/src/Makefile.qt_locale.include new file mode 100644 index 0000000000..990a5f80e6 --- /dev/null +++ b/src/Makefile.qt_locale.include @@ -0,0 +1,22 @@ +QT_TS = \ + qt/locale/raptoreum_ar.ts \ + qt/locale/raptoreum_bg.ts \ + qt/locale/raptoreum_de.ts \ + qt/locale/raptoreum_en.ts \ + qt/locale/raptoreum_es.ts \ + qt/locale/raptoreum_fi.ts \ + qt/locale/raptoreum_fr.ts \ + qt/locale/raptoreum_it.ts \ + qt/locale/raptoreum_ja.ts \ + qt/locale/raptoreum_ko.ts \ + qt/locale/raptoreum_nl.ts \ + qt/locale/raptoreum_pl.ts \ + qt/locale/raptoreum_pt.ts \ + qt/locale/raptoreum_ro.ts \ + qt/locale/raptoreum_ru.ts \ + qt/locale/raptoreum_sk.ts \ + qt/locale/raptoreum_th.ts \ + qt/locale/raptoreum_tr.ts \ + qt/locale/raptoreum_vi.ts \ + qt/locale/raptoreum_zh_CN.ts \ + qt/locale/raptoreum_zh_TW.ts \ No newline at end of file diff --git a/src/Makefile.qttest.include b/src/Makefile.qttest.include index 1c4e361766..d6a3bc7246 100644 --- a/src/Makefile.qttest.include +++ b/src/Makefile.qttest.include @@ -1,6 +1,6 @@ # Copyright (c) 2013-2016 The Bitcoin Core developers # Copyright (c) 2014-2018 The Dash Core developers -# Copyright (c) 2020 The Raptoreum developers +# Copyright (c) 2020-2022 The Raptoreum developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -8,6 +8,7 @@ bin_PROGRAMS += qt/test/test_raptoreum-qt TESTS += qt/test/test_raptoreum-qt TEST_QT_MOC_CPP = \ + qt/test/moc_apptests.cpp \ qt/test/moc_compattests.cpp \ qt/test/moc_rpcnestedtests.cpp \ qt/test/moc_trafficgraphdatatests.cpp \ @@ -15,16 +16,14 @@ TEST_QT_MOC_CPP = \ if ENABLE_WALLET TEST_QT_MOC_CPP += \ - qt/test/moc_paymentservertests.cpp \ qt/test/moc_wallettests.cpp endif TEST_QT_H = \ + qt/test/apptests.h \ qt/test/compattests.h \ qt/test/rpcnestedtests.h \ qt/test/uritests.h \ - qt/test/paymentrequestdata.h \ - qt/test/paymentservertests.h \ qt/test/trafficgraphdatatests.h \ qt/test/wallettests.h @@ -33,10 +32,11 @@ TEST_BITCOIN_CPP = \ TEST_BITCOIN_H = \ test/test_raptoreum.h -qt_test_test_raptoreum_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) \ - $(QT_INCLUDES) $(QT_TEST_INCLUDES) $(PROTOBUF_CFLAGS) + +qt_test_test_raptoreum_qt_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUDES) $(QT_INCLUDES) $(QT_TEST_INCLUDES) qt_test_test_raptoreum_qt_SOURCES = \ + qt/test/apptests.cpp \ qt/test/compattests.cpp \ qt/test/rpcnestedtests.cpp \ qt/test/test_main.cpp \ @@ -47,7 +47,6 @@ qt_test_test_raptoreum_qt_SOURCES = \ $(TEST_BITCOIN_H) if ENABLE_WALLET qt_test_test_raptoreum_qt_SOURCES += \ - qt/test/paymentservertests.cpp \ qt/test/wallettests.cpp \ wallet/test/wallet_test_fixture.cpp endif @@ -56,16 +55,16 @@ nodist_qt_test_test_raptoreum_qt_SOURCES = $(TEST_QT_MOC_CPP) qt_test_test_raptoreum_qt_LDADD = $(LIBBITCOINQT) $(LIBBITCOIN_SERVER) if ENABLE_WALLET -qt_test_test_raptoreum_qt_LDADD += $(LIBBITCOIN_WALLET) +qt_test_test_raptoreum_qt_LDADD += $(LIBBITCOIN_UTIL) $(LIBBITCOIN_WALLET) endif if ENABLE_ZMQ qt_test_test_raptoreum_qt_LDADD += $(LIBBITCOIN_ZMQ) $(ZMQ_LIBS) endif -qt_test_test_raptoreum_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) $(LIBLEVELDB) \ - $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(BACKTRACE_LIB) $(BOOST_LIBS) $(QT_DBUS_LIBS) $(QT_TEST_LIBS) $(QT_LIBS) \ - $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(LIBSECP256K1) \ - $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(BLS_LIBS) -qt_test_test_raptoreum_qt_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +qt_test_test_raptoreum_qt_LDADD += $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBDASHBLS) \ + $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) $(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QT_TEST_LIBS) \ + $(QR_LIBS) $(BDB_LIBS) $(MINIUPNPC_LIBS) $(NATPMP_LIBS) $(LIBSECP256K1) $(EVENT_PTHREADS_LIBS) \ + $(EVENT_LIBS) $(BLS_LIBS) $(GMP_LIBS) $(BACKTRACE_LIB) +qt_test_test_raptoreum_qt_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(QT_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) qt_test_test_raptoreum_qt_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS) CLEAN_BITCOIN_QT_TEST = $(TEST_QT_MOC_CPP) qt/test/*.gcda qt/test/*.gcno diff --git a/src/Makefile.test.include b/src/Makefile.test.include index 87c63fc911..8b871cc904 100644 --- a/src/Makefile.test.include +++ b/src/Makefile.test.include @@ -1,28 +1,30 @@ # Copyright (c) 2013-2016 The Bitcoin Core developers # Copyright (c) 2014-2018 The Dash Core developers -# Copyright (c) 2020 The Raptoreum developers +# Copyright (c) 2020-2022 The Raptoreum developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. TESTS += test/test_raptoreum bin_PROGRAMS += test/test_raptoreum -noinst_PROGRAMS += test/test_raptoreum_fuzzy +#noinst_PROGRAMS += test/test_raptoreum_fuzzy TEST_SRCDIR = test TEST_BINARY=test/test_raptoreum$(EXEEXT) JSON_TEST_FILES = \ - test/data/script_tests.json \ - test/data/base58_keys_valid.json \ + test/data/blockfilters.json \ test/data/base58_encode_decode.json \ - test/data/base58_keys_invalid.json \ test/data/bip39_vectors.json \ + test/data/key_io_valid.json \ + test/data/key_io_invalid.json \ test/data/proposals_valid.json \ test/data/proposals_invalid.json \ + test/data/script_tests.json \ + test/data/sighash.json \ test/data/tx_invalid.json \ - test/data/tx_valid.json \ - test/data/sighash.json + test/data/tx_valid.json -RAW_TEST_FILES = +RAW_TEST_FILES = \ + test/data/asmap.raw GENERATED_TEST_FILES = $(JSON_TEST_FILES:.json=.json.h) $(RAW_TEST_FILES:.raw=.raw.h) @@ -33,34 +35,47 @@ BITCOIN_TESTS =\ test/addrman_tests.cpp \ test/amount_tests.cpp \ test/allocator_tests.cpp \ + test/assets_tests.cpp \ test/base32_tests.cpp \ test/base58_tests.cpp \ test/base64_tests.cpp \ + test/bech32_tests.cpp \ test/bip32_tests.cpp \ test/bip39_tests.cpp \ + test/blockchain_tests.cpp \ test/blockencodings_tests.cpp \ + test/blockfilter_tests.cpp \ test/bloom_tests.cpp \ test/bls_tests.cpp \ test/bswap_tests.cpp \ + test/checkdatasig_tests.cpp \ test/checkqueue_tests.cpp \ test/cachemap_tests.cpp \ test/cachemultimap_tests.cpp \ test/coins_tests.cpp \ test/compress_tests.cpp \ + test/cn_tests.cpp \ test/crypto_tests.cpp \ test/cuckoocache_tests.cpp \ - test/DoS_tests.cpp \ + test/denialofservice_tests.cpp \ + test/dip0020opcodes_tests.cpp \ + test/descriptor_tests.cpp \ test/evo_deterministicmns_tests.cpp \ test/evo_simplifiedmns_tests.cpp \ + test/flatfile_tests.cpp \ + test/fs_tests.cpp \ test/getarg_tests.cpp \ test/governance_validators_tests.cpp \ test/hash_tests.cpp \ + test/key_io_tests.cpp \ test/key_tests.cpp \ + test/lcg.h \ test/limitedmap_tests.cpp \ test/dbwrapper_tests.cpp \ test/main_tests.cpp \ test/mempool_tests.cpp \ test/merkle_tests.cpp \ + test/merkleblock_tests.cpp \ test/miner_tests.cpp \ test/multisig_tests.cpp \ test/net_tests.cpp \ @@ -71,14 +86,15 @@ BITCOIN_TESTS =\ test/prevector_tests.cpp \ test/raii_event_tests.cpp \ test/random_tests.cpp \ + test/ref_tests.cpp \ test/ratecheck_tests.cpp \ test/reverselock_tests.cpp \ test/rpc_tests.cpp \ test/sanity_tests.cpp \ test/scheduler_tests.cpp \ - test/script_P2SH_tests.cpp \ - test/script_P2PK_tests.cpp \ - test/script_P2PKH_tests.cpp \ + test/script_p2sh_tests.cpp \ + test/script_p2pk_tests.cpp \ + test/script_p2pkh_tests.cpp \ test/script_tests.cpp \ test/script_standard_tests.cpp \ test/scriptnum_tests.cpp \ @@ -91,36 +107,39 @@ BITCOIN_TESTS =\ test/test_raptoreum.cpp \ test/test_raptoreum.h \ test/test_raptoreum_main.cpp \ + test/util_threadnames_tests.cpp \ test/timedata_tests.cpp \ test/torcontrol_tests.cpp \ test/transaction_tests.cpp \ + test/txindex_tests.cpp \ + test/txvalidation_tests.cpp \ test/txvalidationcache_tests.cpp \ - test/versionbits_tests.cpp \ test/uint256_tests.cpp \ - test/univalue_tests.cpp \ test/util_tests.cpp if ENABLE_WALLET BITCOIN_TESTS += \ + wallet/test/coinjoin_tests.cpp \ wallet/test/wallet_test_fixture.cpp \ - wallet/test/wallet_test_fixture.h \ - wallet/test/accounting_tests.cpp \ + wallet/test/db_tests.cpp \ wallet/test/wallet_tests.cpp \ - wallet/test/crypto_tests.cpp + wallet/test/wallet_crypto_tests.cpp \ + wallet/test/coinselector_tests.cpp endif test_test_raptoreum_SOURCES = $(BITCOIN_TESTS) $(JSON_TEST_FILES) $(RAW_TEST_FILES) -test_test_raptoreum_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) -I$(builddir)/test/ $(TESTDEFS) $(EVENT_CFLAGS) +test_test_raptoreum_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(TESTDEFS) $(EVENT_CFLAGS) test_test_raptoreum_LDADD = if ENABLE_WALLET test_test_raptoreum_LDADD += $(LIBBITCOIN_WALLET) endif -test_test_raptoreum_LDADD += $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) $(LIBBITCOIN_CRYPTO) $(LIBUNIVALUE) \ - $(LIBLEVELDB) $(LIBLEVELDB_SSE42) $(LIBMEMENV) $(BACKTRACE_LIB) $(BOOST_LIBS) $(BOOST_UNIT_TEST_FRAMEWORK_LIB) $(LIBSECP256K1) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS) +test_test_raptoreum_LDADD += $(LIBBITCOIN_SERVER) $(LIBBITCOIN_CLI) $(LIBBITCOIN_COMMON) $(LIBBITCOIN_UTIL) $(LIBBITCOIN_CONSENSUS) \ + $(LIBBITCOIN_CRYPTO) $(LIBDASHBLS) $(LIBUNIVALUE) $(LIBLEVELDB) $(LIBMEMENV) $(BACKTRACE_LIB) $(BOOST_LIBS) \ + $(LIBSECP256K1) $(EVENT_LIBS) $(EVENT_PTHREADS_LIBS) test_test_raptoreum_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -test_test_raptoreum_LDADD += $(BDB_LIBS) $(SSL_LIBS) $(CRYPTO_LIBS) $(MINIUPNPC_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(BLS_LIBS) -test_test_raptoreum_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) -static +test_test_raptoreum_LDADD += $(BDB_LIBS) $(MINIUPNPC_LIBS) $(NATPMP_LIBS) $(EVENT_PTHREADS_LIBS) $(EVENT_LIBS) $(BLS_LIBS) $(GMP_LIBS) +test_test_raptoreum_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) -static if ENABLE_ZMQ test_test_raptoreum_LDADD += $(ZMQ_LIBS) @@ -128,24 +147,25 @@ endif # # test_raptoreum_fuzzy binary # -test_test_raptoreum_fuzzy_SOURCES = test/test_raptoreum_fuzzy.cpp -test_test_raptoreum_fuzzy_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) -test_test_raptoreum_fuzzy_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) -test_test_raptoreum_fuzzy_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) +#test_test_raptoreum_fuzzy_SOURCES = test/test_raptoreum_fuzzy.cpp +#test_test_raptoreum_fuzzy_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) +#test_test_raptoreum_fuzzy_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) +#test_test_raptoreum_fuzzy_LDFLAGS = $(LDFLAGS_WRAP_EXCEPTIONS) $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS) $(PTHREAD_FLAGS) -test_test_raptoreum_fuzzy_LDADD = \ +#test_test_raptoreum_fuzzy_LDADD = \ $(LIBUNIVALUE) \ $(LIBBITCOIN_SERVER) \ $(LIBBITCOIN_COMMON) \ $(LIBBITCOIN_UTIL) \ $(LIBBITCOIN_CONSENSUS) \ $(LIBBITCOIN_CRYPTO) \ + $(LIBDASHBLS) \ $(LIBBITCOIN_CRYPTO_SSE41) \ $(LIBBITCOIN_CRYPTO_AVX2) \ $(LIBBITCOIN_CRYPTO_SHANI) \ $(LIBSECP256K1) -test_test_raptoreum_fuzzy_LDADD += $(BOOST_LIBS) $(CRYPTO_LIBS) $(BACKTRACE_LIB) +#test_test_raptoreum_fuzzy_LDADD += $(BOOST_LIBS) $(BACKTRACE_LIB) # nodist_test_test_raptoreum_SOURCES = $(GENERATED_TEST_FILES) @@ -167,10 +187,43 @@ raptoreum_test_clean : FORCE check-local: @echo "Running test/util/bitcoin-util-test.py..." $(PYTHON) $(top_builddir)/test/util/bitcoin-util-test.py + @echo "Running test/util/rpcauth-test.py..." + $(PYTHON) $(top_builddir)/test/util/rpcauth-test.py $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C secp256k1 check -if EMBEDDED_UNIVALUE - $(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C univalue check -endif + +UNIVALUE_TESTS = univalue/test/object univalue/test/unitester univalue/test/no_nul +noinst_PROGRAMS += $(UNIVALUE_TESTS) +TESTS += $(UNIVALUE_TESTS) + +univalue_test_unitester_SOURCES = $(UNIVALUE_TEST_UNITESTER_INT) +univalue_test_unitester_LDADD = $(LIBUNIVALUE) +univalue_test_unitester_CPPFLAGS = -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) -DJSON_TEST_SRC=\"$(srcdir)/$(UNIVALUE_TEST_DATA_DIR_INT)\" +univalue_test_unitester_LDFLAGS = -static $(LIBTOOL_APP_LDFLAGS) + +univalue_test_no_nul_SOURCES = $(UNIVALUE_TEST_NO_NUL_INT) +univalue_test_no_nul_LDADD = $(LIBUNIVALUE) +univalue_test_no_nul_CPPFLAGS = -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) +univalue_test_no_nul_LDFLAGS = -static $(LIBTOOL_APP_LDFLAGS) + +univalue_test_object_SOURCES = $(UNIVALUE_TEST_OBJECT_INT) +univalue_test_object_LDADD = $(LIBUNIVALUE) +univalue_test_object_CPPFLAGS = -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) +univalue_test_object_LDFLAGS = -static $(LIBTOOL_APP_LDFLAGS) + +%.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)export TEST_LOGFILE=$(abs_builddir)/$$(\ + echo $< | grep -E -o "(wallet/test/.*\.cpp|test/.*\.cpp)" | $(SED) -e s/\.cpp/.log/ \ + ) && \ + $(TEST_BINARY) --catch_system_errors=no -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\ + )" -- DEBUG_LOG_OUT > "$$TEST_LOGFILE" 2>&1 || (cat "$$TEST_LOGFILE" && false) test/data/%.json.h: test/data/%.json @$(MKDIR_P) $(@D) @@ -190,4 +243,4 @@ test/data/%.raw.h: test/data/%.raw $(HEXDUMP) -v -e '8/1 "0x%02x, "' -e '"\n"' $< | $(SED) -e 's/0x ,//g' && \ echo "};};"; \ } > "$@.new" && mv -f "$@.new" "$@" - @echo "Generated $@" + @echo "Generated $@" \ No newline at end of file diff --git a/src/Makefile.univalue.include b/src/Makefile.univalue.include new file mode 100644 index 0000000000..175993d5b5 --- /dev/null +++ b/src/Makefile.univalue.include @@ -0,0 +1,6 @@ +include univalue/sources.mk + +LIBUNIVALUE = libunivalue.la +noinst_LTLIBRARIES += $(LIBUNIVALUE) +libunivalue_la_SOURCES = $(UNIVALUE_LIB_SOURCES_INT) $(UNIVALUE_DIST_HEADERS_INT) $(UNIVALUE_LIB_HEADERS_INT) $(UNIVALUE_TEST_FILES_INT) +libunivalue_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(srcdir)/$(UNIVALUE_INCLUDE_DIR_INT) \ No newline at end of file diff --git a/src/addrdb.cpp b/src/addrdb.cpp index 5239e89384..32c58b01be 100644 --- a/src/addrdb.cpp +++ b/src/addrdb.cpp @@ -3,140 +3,128 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "addrdb.h" - -#include "addrman.h" -#include "chainparams.h" -#include "clientversion.h" -#include "fs.h" -#include "hash.h" -#include "random.h" -#include "streams.h" -#include "tinyformat.h" -#include "util.h" +#include + +#include +#include +#include +#include +#include +#include +#include +#include namespace { -template -bool SerializeDB(Stream& stream, const Data& data) -{ - // Write and commit header, data - try { - CHashWriter hasher(SER_DISK, CLIENT_VERSION); - stream << FLATDATA(Params().MessageStart()) << data; - hasher << FLATDATA(Params().MessageStart()) << data; - stream << hasher.GetHash(); - } catch (const std::exception& e) { - return error("%s: Serialize or I/O error - %s", __func__, e.what()); - } + template + bool SerializeDB(Stream &stream, const Data &data) { + // Write and commit header, data + try { + CHashWriter hasher(SER_DISK, CLIENT_VERSION); + stream << Params().MessageStart() << data; + hasher << Params().MessageStart() << data; + stream << hasher.GetHash(); + } catch (const std::exception &e) { + return error("%s: Serialize or I/O error - %s", __func__, e.what()); + } - return true; -} + return true; + } -template -bool SerializeFileDB(const std::string& prefix, const fs::path& path, const Data& data) -{ - // Generate random temporary filename - unsigned short randv = 0; - GetRandBytes((unsigned char*)&randv, sizeof(randv)); - std::string tmpfn = strprintf("%s.%04x", prefix, randv); - - // open temp output file, and associate with CAutoFile - fs::path pathTmp = GetDataDir() / tmpfn; - FILE *file = fsbridge::fopen(pathTmp, "wb"); - CAutoFile fileout(file, SER_DISK, CLIENT_VERSION); - if (fileout.IsNull()) - return error("%s: Failed to open file %s", __func__, pathTmp.string()); - - // Serialize - if (!SerializeDB(fileout, data)) return false; - FileCommit(fileout.Get()); - fileout.fclose(); - - // replace existing file, if any, with new file - if (!RenameOver(pathTmp, path)) - return error("%s: Rename-into-place failed", __func__); - - return true; -} + template + bool SerializeFileDB(const std::string &prefix, const fs::path &path, const Data &data) { + // Generate random temporary filename + unsigned short randv = 0; + GetRandBytes((unsigned char *) &randv, sizeof(randv)); + std::string tmpfn = strprintf("%s.%04x", prefix, randv); + + // open temp output file, and associate with CAutoFile + fs::path pathTmp = GetDataDir() / tmpfn; + FILE *file = fsbridge::fopen(pathTmp, "wb"); + CAutoFile fileout(file, SER_DISK, CLIENT_VERSION); + if (fileout.IsNull()) + return error("%s: Failed to open file %s", __func__, pathTmp.string()); + + // Serialize + if (!SerializeDB(fileout, data)) return false; + if (!FileCommit(fileout.Get())) + return error("%s: Failed to flush file %s", __func__, pathTmp.string()); + fileout.fclose(); + + // replace existing file, if any, with new file + if (!RenameOver(pathTmp, path)) + return error("%s: Rename-into-place failed", __func__); + + return true; + } -template -bool DeserializeDB(Stream& stream, Data& data, bool fCheckSum = true) -{ - try { - CHashVerifier verifier(&stream); - // de-serialize file header (network specific magic number) and .. - unsigned char pchMsgTmp[4]; - verifier >> FLATDATA(pchMsgTmp); - // ... verify the network matches ours - if (memcmp(pchMsgTmp, Params().MessageStart(), sizeof(pchMsgTmp))) - return error("%s: Invalid network magic number", __func__); - - // de-serialize data - verifier >> data; - - // verify checksum - if (fCheckSum) { - uint256 hashTmp; - stream >> hashTmp; - if (hashTmp != verifier.GetHash()) { - return error("%s: Checksum mismatch, data corrupted", __func__); + template + bool DeserializeDB(Stream &stream, Data &data, bool fCheckSum = true) { + try { + CHashVerifier verifier(&stream); + // de-serialize file header (network specific magic number) and .. + unsigned char pchMsgTmp[4]; + verifier >> pchMsgTmp; + // ... verify the network matches ours + if (memcmp(pchMsgTmp, Params().MessageStart(), sizeof(pchMsgTmp))) + return error("%s: Invalid network magic number", __func__); + + // de-serialize data + verifier >> data; + + // verify checksum + if (fCheckSum) { + uint256 hashTmp; + stream >> hashTmp; + if (hashTmp != verifier.GetHash()) { + return error("%s: Checksum mismatch, data corrupted", __func__); + } } } - } - catch (const std::exception& e) { - return error("%s: Deserialize or I/O error - %s", __func__, e.what()); - } - - return true; -} - -template -bool DeserializeFileDB(const fs::path& path, Data& data) -{ - // open input file, and associate with CAutoFile - FILE *file = fsbridge::fopen(path, "rb"); - CAutoFile filein(file, SER_DISK, CLIENT_VERSION); - if (filein.IsNull()) - return error("%s: Failed to open file %s", __func__, path.string()); + catch (const std::exception &e) { + return error("%s: Deserialize or I/O error - %s", __func__, e.what()); + } - return DeserializeDB(filein, data); -} + return true; + } -} + template + bool DeserializeFileDB(const fs::path &path, Data &data) { + // open input file, and associate with CAutoFile + FILE *file = fsbridge::fopen(path, "rb"); + CAutoFile filein(file, SER_DISK, CLIENT_VERSION); + if (filein.IsNull()) { + LogPrintf("Missing or invalid file %s\n", path.string()); + return false; + } + return DeserializeDB(filein, data); + } +} // namespace -CBanDB::CBanDB() -{ - pathBanlist = GetDataDir() / "banlist.dat"; +CBanDB::CBanDB(fs::path ban_list_path) : m_ban_list_path(std::move(ban_list_path)) { } -bool CBanDB::Write(const banmap_t& banSet) -{ - return SerializeFileDB("banlist", pathBanlist, banSet); +bool CBanDB::Write(const banmap_t &banSet) { + return SerializeFileDB("banlist", m_ban_list_path, banSet); } -bool CBanDB::Read(banmap_t& banSet) -{ - return DeserializeFileDB(pathBanlist, banSet); +bool CBanDB::Read(banmap_t &banSet) { + return DeserializeFileDB(m_ban_list_path, banSet); } -CAddrDB::CAddrDB() -{ +CAddrDB::CAddrDB() { pathAddr = GetDataDir() / "peers.dat"; } -bool CAddrDB::Write(const CAddrMan& addr) -{ +bool CAddrDB::Write(const CAddrMan &addr) { return SerializeFileDB("peers", pathAddr, addr); } -bool CAddrDB::Read(CAddrMan& addr) -{ +bool CAddrDB::Read(CAddrMan &addr) { return DeserializeFileDB(pathAddr, addr); } -bool CAddrDB::Read(CAddrMan& addr, CDataStream& ssPeers) -{ +bool CAddrDB::Read(CAddrMan &addr, CDataStream &ssPeers) { bool ret = DeserializeDB(ssPeers, addr, false); if (!ret) { // Ensure addrman is left in a clean state diff --git a/src/addrdb.h b/src/addrdb.h index 4e3b45c3f0..c415b6b710 100644 --- a/src/addrdb.h +++ b/src/addrdb.h @@ -6,97 +6,93 @@ #ifndef BITCOIN_ADDRDB_H #define BITCOIN_ADDRDB_H -#include "fs.h" -#include "serialize.h" +#include +#include #include #include class CSubNet; + class CAddrMan; + class CDataStream; -typedef enum BanReason -{ - BanReasonUnknown = 0, - BanReasonNodeMisbehaving = 1, - BanReasonManuallyAdded = 2 +typedef enum BanReason { + BanReasonUnknown = 0, + BanReasonNodeMisbehaving = 1, + BanReasonManuallyAdded = 2 } BanReason; -class CBanEntry -{ +class CBanEntry { public: - static const int CURRENT_VERSION=1; + static const int CURRENT_VERSION = 1; int nVersion; int64_t nCreateTime; int64_t nBanUntil; uint8_t banReason; - CBanEntry() - { + CBanEntry() { SetNull(); } - CBanEntry(int64_t nCreateTimeIn) - { + explicit CBanEntry(int64_t nCreateTimeIn) { SetNull(); nCreateTime = nCreateTimeIn; } - ADD_SERIALIZE_METHODS; - - template - inline void SerializationOp(Stream& s, Operation ser_action) { - READWRITE(this->nVersion); - READWRITE(nCreateTime); - READWRITE(nBanUntil); - READWRITE(banReason); + explicit CBanEntry(int64_t n_create_time_in, BanReason ban_reason_in) : CBanEntry(n_create_time_in) { + banReason = ban_reason_in; } - void SetNull() - { + SERIALIZE_METHODS(CBanEntry, obj + ) { READWRITE(obj.nVersion, obj.nCreateTime, obj.nBanUntil, obj.banReason); } + + void SetNull() { nVersion = CBanEntry::CURRENT_VERSION; nCreateTime = 0; nBanUntil = 0; banReason = BanReasonUnknown; } - std::string banReasonToString() - { + std::string banReasonToString() const { switch (banReason) { - case BanReasonNodeMisbehaving: - return "node misbehaving"; - case BanReasonManuallyAdded: - return "manually added"; - default: - return "unknown"; + case BanReasonNodeMisbehaving: + return "node misbehaving"; + case BanReasonManuallyAdded: + return "manually added"; + default: + return "unknown"; } } }; -typedef std::map banmap_t; +typedef std::map banmap_t; /** Access to the (IP) address database (peers.dat) */ -class CAddrDB -{ +class CAddrDB { private: fs::path pathAddr; public: CAddrDB(); - bool Write(const CAddrMan& addr); - bool Read(CAddrMan& addr); - static bool Read(CAddrMan& addr, CDataStream& ssPeers); + + bool Write(const CAddrMan &addr); + + bool Read(CAddrMan &addr); + + static bool Read(CAddrMan &addr, CDataStream &ssPeers); }; /** Access to the banlist database (banlist.dat) */ -class CBanDB -{ +class CBanDB { private: - fs::path pathBanlist; + const fs::path m_ban_list_path; public: - CBanDB(); - bool Write(const banmap_t& banSet); - bool Read(banmap_t& banSet); + explicit CBanDB(fs::path ban_list_path); + + bool Write(const banmap_t &banSet); + + bool Read(banmap_t &banSet); }; #endif // BITCOIN_ADDRDB_H diff --git a/src/addressindex.h b/src/addressindex.h index 9e734b84dc..a5c7869a4b 100644 --- a/src/addressindex.h +++ b/src/addressindex.h @@ -6,11 +6,10 @@ #ifndef BITCOIN_ADDRESSINDEX_H #define BITCOIN_ADDRESSINDEX_H -#include "uint256.h" -#include "amount.h" +#include +#include -struct CMempoolAddressDelta -{ +struct CMempoolAddressDelta { int64_t time; CAmount amount; uint256 prevhash; @@ -31,10 +30,10 @@ struct CMempoolAddressDelta } }; -struct CMempoolAddressDeltaKey -{ +struct CMempoolAddressDeltaKey { int type; uint160 addressBytes; + std::string asset; uint256 txhash; unsigned int index; int spending; @@ -42,33 +41,56 @@ struct CMempoolAddressDeltaKey CMempoolAddressDeltaKey(int addressType, uint160 addressHash, uint256 hash, unsigned int i, int s) { type = addressType; addressBytes = addressHash; + asset = "RTM"; txhash = hash; index = i; spending = s; } + CMempoolAddressDeltaKey(int addressType, uint160 addressHash, std::string assetId, uint256 hash, unsigned int i, int s) { + type = addressType; + addressBytes = addressHash; + asset = assetId; + txhash = hash; + index = i; + spending = s; + } + + CMempoolAddressDeltaKey(int addressType, uint160 addressHash, std::string assetId) { + type = addressType; + addressBytes = addressHash; + asset = assetId; + txhash.SetNull(); + index = 0; + spending = 0; + } + CMempoolAddressDeltaKey(int addressType, uint160 addressHash) { type = addressType; addressBytes = addressHash; + asset.clear(); txhash.SetNull(); index = 0; spending = 0; } }; -struct CMempoolAddressDeltaKeyCompare -{ - bool operator()(const CMempoolAddressDeltaKey& a, const CMempoolAddressDeltaKey& b) const { +struct CMempoolAddressDeltaKeyCompare { + bool operator()(const CMempoolAddressDeltaKey &a, const CMempoolAddressDeltaKey &b) const { if (a.type == b.type) { if (a.addressBytes == b.addressBytes) { - if (a.txhash == b.txhash) { - if (a.index == b.index) { - return a.spending < b.spending; + if (a.asset == b.asset) { + if (a.txhash == b.txhash) { + if (a.index == b.index) { + return a.spending < b.spending; + } else { + return a.index < b.index; + } } else { - return a.index < b.index; + return a.txhash < b.txhash; } } else { - return a.txhash < b.txhash; + return a.asset < b.asset; } } else { return a.addressBytes < b.addressBytes; diff --git a/src/addrman.cpp b/src/addrman.cpp index b4d4526f77..3e85a6f262 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -3,35 +3,42 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "addrman.h" +#include -#include "hash.h" -#include "serialize.h" -#include "streams.h" +#include +#include +#include +#include -int CAddrInfo::GetTriedBucket(const uint256& nKey) const -{ +int CAddrInfo::GetTriedBucket(const uint256 &nKey, const std::vector &asmap) const { uint64_t hash1 = (CHashWriter(SER_GETHASH, 0) << nKey << GetKey()).GetHash().GetCheapHash(); - uint64_t hash2 = (CHashWriter(SER_GETHASH, 0) << nKey << GetGroup() << (hash1 % ADDRMAN_TRIED_BUCKETS_PER_GROUP)).GetHash().GetCheapHash(); - return hash2 % ADDRMAN_TRIED_BUCKET_COUNT; + uint64_t hash2 = (CHashWriter(SER_GETHASH, 0) << nKey << GetGroup(asmap) << (hash1 % + ADDRMAN_TRIED_BUCKETS_PER_GROUP)).GetHash().GetCheapHash(); + int tried_bucket = hash2 % ADDRMAN_TRIED_BUCKET_COUNT; + uint32_t mapped_as = GetMappedAS(asmap); + LogPrint(BCLog::NET, "IP %s mapped to AS%i belongs to tried bucket %i\n", ToStringIP(), mapped_as, tried_bucket); + return tried_bucket; } -int CAddrInfo::GetNewBucket(const uint256& nKey, const CNetAddr& src) const -{ - std::vector vchSourceGroupKey = src.GetGroup(); - uint64_t hash1 = (CHashWriter(SER_GETHASH, 0) << nKey << GetGroup() << vchSourceGroupKey).GetHash().GetCheapHash(); - uint64_t hash2 = (CHashWriter(SER_GETHASH, 0) << nKey << vchSourceGroupKey << (hash1 % ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP)).GetHash().GetCheapHash(); - return hash2 % ADDRMAN_NEW_BUCKET_COUNT; +int CAddrInfo::GetNewBucket(const uint256 &nKey, const CNetAddr &src, const std::vector &asmap) const { + std::vector vchSourceGroupKey = src.GetGroup(asmap); + uint64_t hash1 = (CHashWriter(SER_GETHASH, 0) << nKey << GetGroup(asmap) + << vchSourceGroupKey).GetHash().GetCheapHash(); + uint64_t hash2 = (CHashWriter(SER_GETHASH, 0) << nKey << vchSourceGroupKey << (hash1 % + ADDRMAN_NEW_BUCKETS_PER_SOURCE_GROUP)).GetHash().GetCheapHash(); + int new_bucket = hash2 % ADDRMAN_NEW_BUCKET_COUNT; + uint32_t mapped_as = GetMappedAS(asmap); + LogPrint(BCLog::NET, "IP %s mapped to AS%i belongs to new bucket %i\n", ToStringIP(), mapped_as, new_bucket); + return new_bucket; } -int CAddrInfo::GetBucketPosition(const uint256 &nKey, bool fNew, int nBucket) const -{ - uint64_t hash1 = (CHashWriter(SER_GETHASH, 0) << nKey << (fNew ? 'N' : 'K') << nBucket << GetKey()).GetHash().GetCheapHash(); +int CAddrInfo::GetBucketPosition(const uint256 &nKey, bool fNew, int nBucket) const { + uint64_t hash1 = (CHashWriter(SER_GETHASH, 0) << nKey << (fNew ? 'N' : 'K') << nBucket + << GetKey()).GetHash().GetCheapHash(); return hash1 % ADDRMAN_BUCKET_SIZE; } -bool CAddrInfo::IsTerrible(int64_t nNow) const -{ +bool CAddrInfo::IsTerrible(int64_t nNow) const { if (nLastTry && nLastTry >= nNow - 60) // never remove things tried in the last minute return false; @@ -44,14 +51,14 @@ bool CAddrInfo::IsTerrible(int64_t nNow) const if (nLastSuccess == 0 && nAttempts >= ADDRMAN_RETRIES) // tried N times and never a success return true; - if (nNow - nLastSuccess > ADDRMAN_MIN_FAIL_DAYS * 24 * 60 * 60 && nAttempts >= ADDRMAN_MAX_FAILURES) // N successive failures in the last week + if (nNow - nLastSuccess > ADDRMAN_MIN_FAIL_DAYS * 24 * 60 * 60 && + nAttempts >= ADDRMAN_MAX_FAILURES) // N successive failures in the last week return true; return false; } -double CAddrInfo::GetChance(int64_t nNow) const -{ +double CAddrInfo::GetChance(int64_t nNow) const { double fChance = 1.0; int64_t nSinceLastTry = std::max(nNow - nLastTry, 0); @@ -65,8 +72,7 @@ double CAddrInfo::GetChance(int64_t nNow) const return fChance; } -CAddrInfo* CAddrMan::Find(const CService& addr, int* pnId) -{ +CAddrInfo *CAddrMan::Find(const CService &addr, int *pnId) { CService addr2 = addr; if (!discriminatePorts) { addr2.SetPort(0); @@ -83,8 +89,7 @@ CAddrInfo* CAddrMan::Find(const CService& addr, int* pnId) return nullptr; } -CAddrInfo* CAddrMan::Create(const CAddress& addr, const CNetAddr& addrSource, int* pnId) -{ +CAddrInfo *CAddrMan::Create(const CAddress &addr, const CNetAddr &addrSource, int *pnId) { CService addr2 = addr; if (!discriminatePorts) { addr2.SetPort(0); @@ -100,8 +105,7 @@ CAddrInfo* CAddrMan::Create(const CAddress& addr, const CNetAddr& addrSource, in return &mapInfo[nId]; } -void CAddrMan::SwapRandom(unsigned int nRndPos1, unsigned int nRndPos2) -{ +void CAddrMan::SwapRandom(unsigned int nRndPos1, unsigned int nRndPos2) { if (nRndPos1 == nRndPos2) return; @@ -120,10 +124,9 @@ void CAddrMan::SwapRandom(unsigned int nRndPos1, unsigned int nRndPos2) vRandom[nRndPos2] = nId1; } -void CAddrMan::Delete(int nId) -{ +void CAddrMan::Delete(int nId) { assert(mapInfo.count(nId) != 0); - CAddrInfo& info = mapInfo[nId]; + CAddrInfo &info = mapInfo[nId]; assert(!info.fInTried); assert(info.nRefCount == 0); @@ -139,12 +142,11 @@ void CAddrMan::Delete(int nId) nNew--; } -void CAddrMan::ClearNew(int nUBucket, int nUBucketPos) -{ +void CAddrMan::ClearNew(int nUBucket, int nUBucketPos) { // if there is an entry in the specified bucket, delete it. if (vvNew[nUBucket][nUBucketPos] != -1) { int nIdDelete = vvNew[nUBucket][nUBucketPos]; - CAddrInfo& infoDelete = mapInfo[nIdDelete]; + CAddrInfo &infoDelete = mapInfo[nIdDelete]; assert(infoDelete.nRefCount > 0); infoDelete.nRefCount--; vvNew[nUBucket][nUBucketPos] = -1; @@ -154,8 +156,7 @@ void CAddrMan::ClearNew(int nUBucket, int nUBucketPos) } } -void CAddrMan::MakeTried(CAddrInfo& info, int nId) -{ +void CAddrMan::MakeTried(CAddrInfo &info, int nId) { // remove the entry from all new buckets for (int bucket = 0; bucket < ADDRMAN_NEW_BUCKET_COUNT; bucket++) { int pos = info.GetBucketPosition(nKey, true, bucket); @@ -169,7 +170,7 @@ void CAddrMan::MakeTried(CAddrInfo& info, int nId) assert(info.nRefCount == 0); // which tried bucket to move the entry to - int nKBucket = info.GetTriedBucket(nKey); + int nKBucket = info.GetTriedBucket(nKey, m_asmap); int nKBucketPos = info.GetBucketPosition(nKey, false, nKBucket); // first make space to add it (the existing tried entry there is moved to new, deleting whatever is there). @@ -177,7 +178,7 @@ void CAddrMan::MakeTried(CAddrInfo& info, int nId) // find an item to evict int nIdEvict = vvTried[nKBucket][nKBucketPos]; assert(mapInfo.count(nIdEvict) == 1); - CAddrInfo& infoOld = mapInfo[nIdEvict]; + CAddrInfo &infoOld = mapInfo[nIdEvict]; // Remove the to-be-evicted item from the tried set. infoOld.fInTried = false; @@ -185,7 +186,7 @@ void CAddrMan::MakeTried(CAddrInfo& info, int nId) nTried--; // find which new bucket it belongs to - int nUBucket = infoOld.GetNewBucket(nKey); + int nUBucket = infoOld.GetNewBucket(nKey, m_asmap); int nUBucketPos = infoOld.GetBucketPosition(nKey, true, nUBucket); ClearNew(nUBucket, nUBucketPos); assert(vvNew[nUBucket][nUBucketPos] == -1); @@ -202,19 +203,18 @@ void CAddrMan::MakeTried(CAddrInfo& info, int nId) info.fInTried = true; } -void CAddrMan::Good_(const CService& addr, int64_t nTime) -{ +void CAddrMan::Good_(const CService &addr, bool test_before_evict, int64_t nTime) { int nId; nLastGood = nTime; - CAddrInfo* pinfo = Find(addr, &nId); + CAddrInfo *pinfo = Find(addr, &nId); // if not found, bail out if (!pinfo) return; - CAddrInfo& info = *pinfo; + CAddrInfo &info = *pinfo; // check whether we are talking about the exact same CService (including same port) if (info != addr) @@ -232,7 +232,7 @@ void CAddrMan::Good_(const CService& addr, int64_t nTime) return; // find a bucket it is in now - int nRnd = RandomInt(ADDRMAN_NEW_BUCKET_COUNT); + int nRnd = insecure_rand.randrange(ADDRMAN_NEW_BUCKET_COUNT); int nUBucket = -1; for (unsigned int n = 0; n < ADDRMAN_NEW_BUCKET_COUNT; n++) { int nB = (n + nRnd) % ADDRMAN_NEW_BUCKET_COUNT; @@ -248,22 +248,34 @@ void CAddrMan::Good_(const CService& addr, int64_t nTime) if (nUBucket == -1) return; - if (fLogIPs) { - LogPrint(BCLog::ADDRMAN, "Moving %s to tried\n", addr.ToString()); - } + // which tried bucket to move the entry to + int tried_bucket = info.GetTriedBucket(nKey, m_asmap); + int tried_bucket_pos = info.GetBucketPosition(nKey, false, tried_bucket); + + // Will moving this address into tried evict another entry? + if (test_before_evict && (vvTried[tried_bucket][tried_bucket_pos] != -1)) { + if (fLogIPs) + LogPrint(BCLog::ADDRMAN, + "Collision inserting element into tried table, moving %s to m_tried_collisions=%d\n", + addr.ToString(), m_tried_collisions.size()); + if (m_tried_collisions.size() < ADDRMAN_SET_TRIED_COLLISION_SIZE) { + m_tried_collisions.insert(nId); + } + } else { + if (fLogIPs) LogPrint(BCLog::ADDRMAN, "Moving %s to tried\n", addr.ToString()); - // move nId to the tried tables - MakeTried(info, nId); + // move nId to the tried tables + MakeTried(info, nId); + } } -bool CAddrMan::Add_(const CAddress& addr, const CNetAddr& source, int64_t nTimePenalty) -{ +bool CAddrMan::Add_(const CAddress &addr, const CNetAddr &source, int64_t nTimePenalty) { if (!addr.IsRoutable()) return false; bool fNew = false; int nId; - CAddrInfo* pinfo = Find(addr, &nId); + CAddrInfo *pinfo = Find(addr, &nId); // Do not set a penalty for a source's self-announcement if (addr == source) { @@ -275,7 +287,7 @@ bool CAddrMan::Add_(const CAddress& addr, const CNetAddr& source, int64_t nTimeP bool fCurrentlyOnline = (GetAdjustedTime() - addr.nTime < 24 * 60 * 60); int64_t nUpdateInterval = (fCurrentlyOnline ? 60 * 60 : 24 * 60 * 60); if (addr.nTime && (!pinfo->nTime || pinfo->nTime < addr.nTime - nUpdateInterval - nTimePenalty)) - pinfo->nTime = std::max((int64_t)0, addr.nTime - nTimePenalty); + pinfo->nTime = std::max((int64_t) 0, addr.nTime - nTimePenalty); // add services pinfo->nServices = ServiceFlags(pinfo->nServices | addr.nServices); @@ -296,21 +308,21 @@ bool CAddrMan::Add_(const CAddress& addr, const CNetAddr& source, int64_t nTimeP int nFactor = 1; for (int n = 0; n < pinfo->nRefCount; n++) nFactor *= 2; - if (nFactor > 1 && (RandomInt(nFactor) != 0)) + if (nFactor > 1 && (insecure_rand.randrange(nFactor) != 0)) return false; } else { pinfo = Create(addr, source, &nId); - pinfo->nTime = std::max((int64_t)0, (int64_t)pinfo->nTime - nTimePenalty); + pinfo->nTime = std::max((int64_t) 0, (int64_t) pinfo->nTime - nTimePenalty); nNew++; fNew = true; } - int nUBucket = pinfo->GetNewBucket(nKey, source); + int nUBucket = pinfo->GetNewBucket(nKey, source, m_asmap); int nUBucketPos = pinfo->GetBucketPosition(nKey, true, nUBucket); if (vvNew[nUBucket][nUBucketPos] != nId) { bool fInsert = vvNew[nUBucket][nUBucketPos] == -1; if (!fInsert) { - CAddrInfo& infoExisting = mapInfo[vvNew[nUBucket][nUBucketPos]]; + CAddrInfo &infoExisting = mapInfo[vvNew[nUBucket][nUBucketPos]]; if (infoExisting.IsTerrible() || (infoExisting.nRefCount > 1 && pinfo->nRefCount == 0)) { // Overwrite the existing new table entry. fInsert = true; @@ -329,15 +341,14 @@ bool CAddrMan::Add_(const CAddress& addr, const CNetAddr& source, int64_t nTimeP return fNew; } -void CAddrMan::Attempt_(const CService& addr, bool fCountFailure, int64_t nTime) -{ - CAddrInfo* pinfo = Find(addr); +void CAddrMan::Attempt_(const CService &addr, bool fCountFailure, int64_t nTime) { + CAddrInfo *pinfo = Find(addr); // if not found, bail out if (!pinfo) return; - CAddrInfo& info = *pinfo; + CAddrInfo &info = *pinfo; // check whether we are talking about the exact same CService (including same port) if (info != addr) @@ -351,8 +362,7 @@ void CAddrMan::Attempt_(const CService& addr, bool fCountFailure, int64_t nTime) } } -CAddrInfo CAddrMan::Select_(bool newOnly) -{ +CAddrInfo CAddrMan::Select_(bool newOnly) { if (size() == 0) return CAddrInfo(); @@ -361,20 +371,21 @@ CAddrInfo CAddrMan::Select_(bool newOnly) // Use a 50% chance for choosing between tried and new table entries. if (!newOnly && - (nTried > 0 && (nNew == 0 || RandomInt(2) == 0))) { + (nTried > 0 && (nNew == 0 || insecure_rand.randbool() == 0))) { // use a tried node double fChanceFactor = 1.0; while (1) { - int nKBucket = RandomInt(ADDRMAN_TRIED_BUCKET_COUNT); - int nKBucketPos = RandomInt(ADDRMAN_BUCKET_SIZE); + int nKBucket = insecure_rand.randrange(ADDRMAN_TRIED_BUCKET_COUNT); + int nKBucketPos = insecure_rand.randrange(ADDRMAN_BUCKET_SIZE); while (vvTried[nKBucket][nKBucketPos] == -1) { - nKBucket = (nKBucket + insecure_rand.randbits(ADDRMAN_TRIED_BUCKET_COUNT_LOG2)) % ADDRMAN_TRIED_BUCKET_COUNT; + nKBucket = (nKBucket + insecure_rand.randbits(ADDRMAN_TRIED_BUCKET_COUNT_LOG2)) % + ADDRMAN_TRIED_BUCKET_COUNT; nKBucketPos = (nKBucketPos + insecure_rand.randbits(ADDRMAN_BUCKET_SIZE_LOG2)) % ADDRMAN_BUCKET_SIZE; } int nId = vvTried[nKBucket][nKBucketPos]; assert(mapInfo.count(nId) == 1); - CAddrInfo& info = mapInfo[nId]; - if (RandomInt(1 << 30) < fChanceFactor * info.GetChance() * (1 << 30)) + CAddrInfo &info = mapInfo[nId]; + if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30)) return info; fChanceFactor *= 1.2; } @@ -382,16 +393,17 @@ CAddrInfo CAddrMan::Select_(bool newOnly) // use a new node double fChanceFactor = 1.0; while (1) { - int nUBucket = RandomInt(ADDRMAN_NEW_BUCKET_COUNT); - int nUBucketPos = RandomInt(ADDRMAN_BUCKET_SIZE); + int nUBucket = insecure_rand.randrange(ADDRMAN_NEW_BUCKET_COUNT); + int nUBucketPos = insecure_rand.randrange(ADDRMAN_BUCKET_SIZE); while (vvNew[nUBucket][nUBucketPos] == -1) { - nUBucket = (nUBucket + insecure_rand.randbits(ADDRMAN_NEW_BUCKET_COUNT_LOG2)) % ADDRMAN_NEW_BUCKET_COUNT; + nUBucket = + (nUBucket + insecure_rand.randbits(ADDRMAN_NEW_BUCKET_COUNT_LOG2)) % ADDRMAN_NEW_BUCKET_COUNT; nUBucketPos = (nUBucketPos + insecure_rand.randbits(ADDRMAN_BUCKET_SIZE_LOG2)) % ADDRMAN_BUCKET_SIZE; } int nId = vvNew[nUBucket][nUBucketPos]; assert(mapInfo.count(nId) == 1); - CAddrInfo& info = mapInfo[nId]; - if (RandomInt(1 << 30) < fChanceFactor * info.GetChance() * (1 << 30)) + CAddrInfo &info = mapInfo[nId]; + if (insecure_rand.randbits(30) < fChanceFactor * info.GetChance() * (1 << 30)) return info; fChanceFactor *= 1.2; } @@ -404,12 +416,12 @@ int CAddrMan::Check_() std::set setTried; std::map mapNew; - if (vRandom.size() != nTried + nNew) + if (vRandom.size() != (size_t)(nTried + nNew)) return -7; - for (std::map::iterator it = mapInfo.begin(); it != mapInfo.end(); it++) { - int n = (*it).first; - CAddrInfo& info = (*it).second; + for (const auto& entry : mapInfo) { + int n = entry.first; + const CAddrInfo& info = entry.second; if (info.fInTried) { if (!info.nLastSuccess) return -1; @@ -425,7 +437,7 @@ int CAddrMan::Check_() } if (mapAddr[info] != n) return -5; - if (info.nRandomPos < 0 || info.nRandomPos >= vRandom.size() || vRandom[info.nRandomPos] != n) + if (info.nRandomPos < 0 || (size_t)info.nRandomPos >= vRandom.size() || vRandom[info.nRandomPos] != n) return -14; if (info.nLastTry < 0) return -6; @@ -433,9 +445,9 @@ int CAddrMan::Check_() return -8; } - if (setTried.size() != nTried) + if (setTried.size() != (size_t)nTried) return -9; - if (mapNew.size() != nNew) + if (mapNew.size() != (size_t)nNew) return -10; for (int n = 0; n < ADDRMAN_TRIED_BUCKET_COUNT; n++) { @@ -443,7 +455,7 @@ int CAddrMan::Check_() if (vvTried[n][i] != -1) { if (!setTried.count(vvTried[n][i])) return -11; - if (mapInfo[vvTried[n][i]].GetTriedBucket(nKey) != n) + if (mapInfo[vvTried[n][i]].GetTriedBucket(nKey, m_asmap) != n) return -17; if (mapInfo[vvTried[n][i]].GetBucketPosition(nKey, false, n) != i) return -18; @@ -476,8 +488,7 @@ int CAddrMan::Check_() } #endif -void CAddrMan::GetAddr_(std::vector& vAddr) -{ +void CAddrMan::GetAddr_(std::vector &vAddr) { unsigned int nNodes = ADDRMAN_GETADDR_MAX_PCT * vRandom.size() / 100; if (nNodes > ADDRMAN_GETADDR_MAX) nNodes = ADDRMAN_GETADDR_MAX; @@ -487,25 +498,24 @@ void CAddrMan::GetAddr_(std::vector& vAddr) if (vAddr.size() >= nNodes) break; - int nRndPos = RandomInt(vRandom.size() - n) + n; + int nRndPos = insecure_rand.randrange(vRandom.size() - n) + n; SwapRandom(n, nRndPos); assert(mapInfo.count(vRandom[n]) == 1); - const CAddrInfo& ai = mapInfo[vRandom[n]]; + const CAddrInfo &ai = mapInfo[vRandom[n]]; if (!ai.IsTerrible()) vAddr.push_back(ai); } } -void CAddrMan::Connected_(const CService& addr, int64_t nTime) -{ - CAddrInfo* pinfo = Find(addr); +void CAddrMan::Connected_(const CService &addr, int64_t nTime) { + CAddrInfo *pinfo = Find(addr); // if not found, bail out if (!pinfo) return; - CAddrInfo& info = *pinfo; + CAddrInfo &info = *pinfo; // check whether we are talking about the exact same CService (including same port) if (info != addr) @@ -517,15 +527,14 @@ void CAddrMan::Connected_(const CService& addr, int64_t nTime) info.nTime = nTime; } -void CAddrMan::SetServices_(const CService& addr, ServiceFlags nServices) -{ - CAddrInfo* pinfo = Find(addr); +void CAddrMan::SetServices_(const CService &addr, ServiceFlags nServices) { + CAddrInfo *pinfo = Find(addr); // if not found, bail out if (!pinfo) return; - CAddrInfo& info = *pinfo; + CAddrInfo &info = *pinfo; // check whether we are talking about the exact same CService (including same port) if (info != addr) @@ -535,15 +544,14 @@ void CAddrMan::SetServices_(const CService& addr, ServiceFlags nServices) info.nServices = nServices; } -CAddrInfo CAddrMan::GetAddressInfo_(const CService& addr) -{ - CAddrInfo* pinfo = Find(addr); +CAddrInfo CAddrMan::GetAddressInfo_(const CService &addr) { + CAddrInfo *pinfo = Find(addr); // if not found, bail out if (!pinfo) return CAddrInfo(); - CAddrInfo& info = *pinfo; + CAddrInfo &info = *pinfo; // check whether we are talking about the exact same CService (including same port) if (info != addr) @@ -552,6 +560,103 @@ CAddrInfo CAddrMan::GetAddressInfo_(const CService& addr) return *pinfo; } -int CAddrMan::RandomInt(int nMax){ - return GetRandInt(nMax); -} \ No newline at end of file +void CAddrMan::ResolveCollisions_() { + for (std::set::iterator it = m_tried_collisions.begin(); it != m_tried_collisions.end();) { + int id_new = *it; + + bool erase_collision = false; + + // If id_new not found in mapInfo remove it from m_tried_collisions + if (mapInfo.count(id_new) != 1) { + erase_collision = true; + } else { + CAddrInfo &info_new = mapInfo[id_new]; + + // Which tried bucket to move the entry to. + int tried_bucket = info_new.GetTriedBucket(nKey, m_asmap); + int tried_bucket_pos = info_new.GetBucketPosition(nKey, false, tried_bucket); + if (!info_new.IsValid()) { // id_new may no longer map to a valid address + erase_collision = true; + } else if (vvTried[tried_bucket][tried_bucket_pos] != -1) { // The position in the tried bucket is not empty + + // Get the to-be-evicted address that is being tested + int id_old = vvTried[tried_bucket][tried_bucket_pos]; + CAddrInfo &info_old = mapInfo[id_old]; + + // Has successfully connected in last X hours + if (GetAdjustedTime() - info_old.nLastSuccess < ADDRMAN_REPLACEMENT_HOURS * (60 * 60)) { + erase_collision = true; + } else if (GetAdjustedTime() - info_old.nLastTry < + ADDRMAN_REPLACEMENT_HOURS * (60 * 60)) { // attempted to connect and failed in last X hours + + // Give address at least 60 seconds to successfully connect + if (GetAdjustedTime() - info_old.nLastTry > 60) { + LogPrint(BCLog::ADDRMAN, "Swapping %s for %s in tried table\n", info_new.ToString(), + info_old.ToString()); + + // Replaces an existing address already in the tried table with the new address + Good_(info_new, false, GetAdjustedTime()); + erase_collision = true; + } + } + } else { // Collision is not actually a collision anymore + Good_(info_new, false, GetAdjustedTime()); + erase_collision = true; + } + } + + if (erase_collision) { + m_tried_collisions.erase(it++); + } else { + it++; + } + } +} + +CAddrInfo CAddrMan::SelectTriedCollision_() { + if (m_tried_collisions.size() == 0) return CAddrInfo(); + + std::set::iterator it = m_tried_collisions.begin(); + + // Selects a random element from m_tried_collisions + std::advance(it, insecure_rand.randrange(m_tried_collisions.size())); + int id_new = *it; + + // If id_new not found in mapInfo remove it from m_tried_collisions + if (mapInfo.count(id_new) != 1) { + m_tried_collisions.erase(it); + return CAddrInfo(); + } + + CAddrInfo &newInfo = mapInfo[id_new]; + + // which tried bucket to move the entry to + int tried_bucket = newInfo.GetTriedBucket(nKey, m_asmap); + int tried_bucket_pos = newInfo.GetBucketPosition(nKey, false, tried_bucket); + + int id_old = vvTried[tried_bucket][tried_bucket_pos]; + + return mapInfo[id_old]; +} + +std::vector CAddrMan::DecodeAsmap(fs::path path) { + std::vector bits; + FILE *filestr = fsbridge::fopen(path, "rb"); + CAutoFile file(filestr, SER_DISK, CLIENT_VERSION); + if (file.IsNull()) { + LogPrintf("Failed to open asmap file from disk\n"); + return bits; + } + fseek(filestr, 0, SEEK_END); + int length = ftell(filestr); + LogPrintf("Opened asmap file %s (%d bytes) from disk\n", path, length); + fseek(filestr, 0, SEEK_SET); + char cur_byte; + for (int i = 0; i < length; ++i) { + file >> cur_byte; + for (int bit = 0; bit < 8; ++bit) { + bits.push_back((cur_byte >> bit) & 1); + } + } + return bits; +} diff --git a/src/addrman.h b/src/addrman.h index 4ba212ab5b..0133d0f3cf 100644 --- a/src/addrman.h +++ b/src/addrman.h @@ -6,23 +6,27 @@ #ifndef BITCOIN_ADDRMAN_H #define BITCOIN_ADDRMAN_H -#include "netaddress.h" -#include "protocol.h" -#include "random.h" -#include "sync.h" -#include "timedata.h" -#include "util.h" - +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include #include #include #include +#include #include /** * Extended statistics about a CAddress */ -class CAddrInfo : public CAddress -{ +class CAddrInfo : public CAddress { public: @@ -55,18 +59,14 @@ class CAddrInfo : public CAddress public: - ADD_SERIALIZE_METHODS; - - template - inline void SerializationOp(Stream& s, Operation ser_action) { - READWRITE(*(CAddress*)this); - READWRITE(source); - READWRITE(nLastSuccess); - READWRITE(nAttempts); + SERIALIZE_METHODS(CAddrInfo, obj + ) + { + READWRITEAS(CAddress, obj); + READWRITE(obj.source, obj.nLastSuccess, obj.nAttempts); } - void Init() - { + void Init() { nLastSuccess = 0; nLastTry = 0; nLastCountAttempt = 0; @@ -76,26 +76,23 @@ class CAddrInfo : public CAddress nRandomPos = -1; } - CAddrInfo(const CAddress &addrIn, const CNetAddr &addrSource) : CAddress(addrIn), source(addrSource) - { + CAddrInfo(const CAddress &addrIn, const CNetAddr &addrSource) : CAddress(addrIn), source(addrSource) { Init(); } - CAddrInfo() : CAddress(), source() - { + CAddrInfo() : CAddress(), source() { Init(); } //! Calculate in which "tried" bucket this entry belongs - int GetTriedBucket(const uint256 &nKey) const; + int GetTriedBucket(const uint256 &nKey, const std::vector &asmap) const; //! Calculate in which "new" bucket this entry belongs, given a certain source - int GetNewBucket(const uint256 &nKey, const CNetAddr& src) const; + int GetNewBucket(const uint256 &nKey, const CNetAddr &src, const std::vector &asmap) const; //! Calculate in which "new" bucket this entry belongs, using its default source - int GetNewBucket(const uint256 &nKey) const - { - return GetNewBucket(nKey, source); + int GetNewBucket(const uint256 &nKey, const std::vector &asmap) const { + return GetNewBucket(nKey, source, asmap); } //! Calculate in which position of a bucket to store this entry. @@ -165,6 +162,9 @@ class CAddrInfo : public CAddress //! ... in at least this many days #define ADDRMAN_MIN_FAIL_DAYS 7 +//! how recent a successful connection should be before we allow an address to be evicted from tried +#define ADDRMAN_REPLACEMENT_HOURS 4 + //! the maximum percentage of nodes to return in a getaddr call #define ADDRMAN_GETADDR_MAX_PCT 23 @@ -176,14 +176,19 @@ class CAddrInfo : public CAddress #define ADDRMAN_NEW_BUCKET_COUNT (1 << ADDRMAN_NEW_BUCKET_COUNT_LOG2) #define ADDRMAN_BUCKET_SIZE (1 << ADDRMAN_BUCKET_SIZE_LOG2) -/** - * Stochastical (IP) address manager +//! the maximum number of tried addr collisions to store +#define ADDRMAN_SET_TRIED_COLLISION_SIZE 10 + +/** + * Stochastical (IP) address manager */ -class CAddrMan -{ +class CAddrMan { private: + friend class CAddrManTest; + +protected: //! critical section to protect the inner data structures - mutable CCriticalSection cs; + mutable RecursiveMutex cs; //! last used nId int nIdCount; @@ -215,6 +220,9 @@ class CAddrMan // discriminate entries based on port. Should be false on mainnet/testnet and can be true on devnet/regtest bool discriminatePorts; + //! Holds addrs inserted into tried table that collide with existing entries. Test-before-evict discipline used to resolve these collisions. + std::set m_tried_collisions; + protected: //! secret key to randomize bucket select with uint256 nKey; @@ -223,17 +231,17 @@ class CAddrMan FastRandomContext insecure_rand; //! Find an entry. - CAddrInfo* Find(const CService& addr, int *pnId = nullptr); + CAddrInfo *Find(const CService &addr, int *pnId = nullptr); //! find an entry, creating it if necessary. //! nTime and nServices of the found node are updated, if necessary. - CAddrInfo* Create(const CAddress &addr, const CNetAddr &addrSource, int *pnId = nullptr); + CAddrInfo *Create(const CAddress &addr, const CNetAddr &addrSource, int *pnId = nullptr); //! Swap two elements in vRandom. void SwapRandom(unsigned int nRandomPos1, unsigned int nRandomPos2); //! Move an entry from the "new" table(s) to the "tried" table - void MakeTried(CAddrInfo& info, int nId); + void MakeTried(CAddrInfo &info, int nId); //! Delete an entry. It must not be in tried, and have refcount 0. void Delete(int nId); @@ -242,10 +250,10 @@ class CAddrMan void ClearNew(int nUBucket, int nUBucketPos); //! Mark an entry "good", possibly moving it from "new" to "tried". - void Good_(const CService &addr, int64_t nTime); + void Good_(const CService &addr, bool test_before_evict, int64_t time); //! Add an entry to the "new" table. - bool Add_(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty); + bool Add_(const CAddress &addr, const CNetAddr &source, int64_t nTimePenalty); //! Mark an entry as attempted to connect. void Attempt_(const CService &addr, bool fCountFailure, int64_t nTime); @@ -253,8 +261,11 @@ class CAddrMan //! Select an address to connect to, if newOnly is set to true, only the new table is selected from. CAddrInfo Select_(bool newOnly); - //! Wraps GetRandInt to allow tests to override RandomInt and make it determinismistic. - virtual int RandomInt(int nMax); + //! See if any to-be-evicted tried table entries have been tested and if so resolve the collisions. + void ResolveCollisions_(); + + //! Return a random to-be-evicted tried table address. + CAddrInfo SelectTriedCollision_(); #ifdef DEBUG_ADDRMAN //! Perform consistency check. Returns an error code or zero. @@ -262,7 +273,7 @@ class CAddrMan #endif //! Select several addresses at once. - void GetAddr_(std::vector &vAddr); + void GetAddr_(std::vector &vAddr); //! Mark an entry as currently-connected-to. void Connected_(const CService &addr, int64_t nTime); @@ -271,12 +282,32 @@ class CAddrMan void SetServices_(const CService &addr, ServiceFlags nServices); //! Get address info for address - CAddrInfo GetAddressInfo_(const CService& addr); + CAddrInfo GetAddressInfo_(const CService &addr); public: + // Compressed IP->ASN mapping, loaded from a file when a node starts. + // Should be always empty if no file was provided. + // This mapping is then used for bucketing nodes in Addrman. + // + // If asmap is provided, nodes will be bucketed by + // AS they belong to, in order to make impossible for a node + // to connect to several nodes hosted in a single AS. + // This is done in response to Erebus attack, but also to generally + // diversify the connections every node creates, + // especially useful when a large fraction of nodes + // operate under a couple of cloud providers. + // + // If a new asmap was provided, the existing records + // would be re-bucketed accordingly. + std::vector m_asmap; + + // Read asmap from provided binary file + static std::vector DecodeAsmap(fs::path path); + + /** * serialized format: - * * version byte (currently 1) + * * version byte (1 for pre-asmap files, 2 for files including asmap version) * * 0x20 + nKey (serialized as if it were a vector, for backward compatibility) * * nNew * * nTried @@ -300,17 +331,16 @@ class CAddrMan * This format is more complex, but significantly smaller (at most 1.5 MiB), and supports * changes to the ADDRMAN_ parameters without breaking the on-disk structure. * - * We don't use ADD_SERIALIZE_METHODS since the serialization and deserialization code has + * We don't use SERIALIZE_METHODS since the serialization and deserialization code has * very little in common. */ template - void Serialize(Stream &s) const - { + void Serialize(Stream &s) const { LOCK(cs); - unsigned char nVersion = 1; + unsigned char nVersion = 2; s << nVersion; - s << ((unsigned char)32); + s << ((unsigned char) 32); s << nKey; s << nNew; s << nTried; @@ -319,9 +349,9 @@ class CAddrMan s << nUBuckets; std::map mapUnkIds; int nIds = 0; - for (std::map::const_iterator it = mapInfo.begin(); it != mapInfo.end(); it++) { - mapUnkIds[(*it).first] = nIds; - const CAddrInfo &info = (*it).second; + for (const auto &entry: mapInfo) { + mapUnkIds[entry.first] = nIds; + const CAddrInfo &info = entry.second; if (info.nRefCount) { assert(nIds != nNew); // this means nNew was wrong, oh ow s << info; @@ -329,8 +359,8 @@ class CAddrMan } } nIds = 0; - for (std::map::const_iterator it = mapInfo.begin(); it != mapInfo.end(); it++) { - const CAddrInfo &info = (*it).second; + for (const auto &entry: mapInfo) { + const CAddrInfo &info = entry.second; if (info.fInTried) { assert(nIds != nTried); // this means nTried was wrong, oh ow s << info; @@ -351,15 +381,20 @@ class CAddrMan } } } + // Store asmap version after bucket entries so that it + // can be ignored by older clients for backward compatibility. + uint256 asmap_version; + if (m_asmap.size() != 0) { + asmap_version = SerializeHash(m_asmap); + } + s << asmap_version; } template - void Unserialize(Stream& s) - { + void Unserialize(Stream &s) { LOCK(cs); Clear(); - unsigned char nVersion; s >> nVersion; unsigned char nKeySize; @@ -389,16 +424,6 @@ class CAddrMan mapAddr[info] = n; info.nRandomPos = vRandom.size(); vRandom.push_back(n); - if (nVersion != 1 || nUBuckets != ADDRMAN_NEW_BUCKET_COUNT) { - // In case the new table data cannot be used (nVersion unknown, or bucket count wrong), - // immediately try to give them a reference based on their primary source address. - int nUBucket = info.GetNewBucket(nKey); - int nUBucketPos = info.GetBucketPosition(nKey, true, nUBucket); - if (vvNew[nUBucket][nUBucketPos] == -1) { - vvNew[nUBucket][nUBucketPos] = n; - info.nRefCount++; - } - } } nIdCount = nNew; @@ -407,7 +432,7 @@ class CAddrMan for (int n = 0; n < nTried; n++) { CAddrInfo info; s >> info; - int nKBucket = info.GetTriedBucket(nKey); + int nKBucket = info.GetTriedBucket(nKey, m_asmap); int nKBucketPos = info.GetBucketPosition(nKey, false, nKBucket); if (vvTried[nKBucket][nKBucketPos] == -1) { info.nRandomPos = vRandom.size(); @@ -423,7 +448,9 @@ class CAddrMan } nTried -= nLost; - // Deserialize positions in the new table (if possible). + // Store positions in the new table buckets to apply later (if possible). + std::map entryToBucket; // Represents which entry belonged to which bucket when serializing + for (int bucket = 0; bucket < nUBuckets; bucket++) { int nSize = 0; s >> nSize; @@ -431,19 +458,46 @@ class CAddrMan int nIndex = 0; s >> nIndex; if (nIndex >= 0 && nIndex < nNew) { - CAddrInfo &info = mapInfo[nIndex]; - int nUBucketPos = info.GetBucketPosition(nKey, true, bucket); - if (nVersion == 1 && nUBuckets == ADDRMAN_NEW_BUCKET_COUNT && vvNew[bucket][nUBucketPos] == -1 && info.nRefCount < ADDRMAN_NEW_BUCKETS_PER_ADDRESS) { - info.nRefCount++; - vvNew[bucket][nUBucketPos] = nIndex; - } + entryToBucket[nIndex] = bucket; + } + } + } + + uint256 supplied_asmap_version; + if (m_asmap.size() != 0) { + supplied_asmap_version = SerializeHash(m_asmap); + } + uint256 serialized_asmap_version; + if (nVersion > 1) { + s >> serialized_asmap_version; + } + + for (int n = 0; n < nNew; n++) { + CAddrInfo &info = mapInfo[n]; + int bucket = entryToBucket[n]; + int nUBucketPos = info.GetBucketPosition(nKey, true, bucket); + if (nVersion == 2 && nUBuckets == ADDRMAN_NEW_BUCKET_COUNT && vvNew[bucket][nUBucketPos] == -1 && + info.nRefCount < ADDRMAN_NEW_BUCKETS_PER_ADDRESS && + serialized_asmap_version == supplied_asmap_version) { + // Bucketing has not changed, using existing bucket positions for the new table + vvNew[bucket][nUBucketPos] = n; + info.nRefCount++; + } else { + // In case the new table data cannot be used (nVersion unknown, bucket count wrong or new asmap), + // try to give them a reference based on their primary source address. + LogPrint(BCLog::ADDRMAN, "Bucketing method was updated, re-bucketing addrman entries from disk\n"); + bucket = info.GetNewBucket(nKey, m_asmap); + nUBucketPos = info.GetBucketPosition(nKey, true, bucket); + if (vvNew[bucket][nUBucketPos] == -1) { + vvNew[bucket][nUBucketPos] = n; + info.nRefCount++; } } } // Prune new entries with refcount 0 (as a result of collisions). int nLostUnk = 0; - for (std::map::const_iterator it = mapInfo.begin(); it != mapInfo.end(); ) { + for (std::map::const_iterator it = mapInfo.begin(); it != mapInfo.end();) { if (it->second.fInTried == false && it->second.nRefCount == 0) { std::map::const_iterator itCopy = it++; Delete(itCopy->first); @@ -459,10 +513,10 @@ class CAddrMan Check(); } - void Clear() - { + void Clear() { + LOCK(cs); std::vector().swap(vRandom); - nKey = GetRandHash(); + nKey = insecure_rand.rand256(); for (size_t bucket = 0; bucket < ADDRMAN_NEW_BUCKET_COUNT; bucket++) { for (size_t entry = 0; entry < ADDRMAN_BUCKET_SIZE; entry++) { vvNew[bucket][entry] = -1; @@ -483,26 +537,22 @@ class CAddrMan } CAddrMan(bool _discriminatePorts = false) : - discriminatePorts(_discriminatePorts) - { + discriminatePorts(_discriminatePorts) { Clear(); } - ~CAddrMan() - { + ~CAddrMan() { nKey.SetNull(); } //! Return the number of (unique) addresses in all tables. - size_t size() const - { + size_t size() const { LOCK(cs); // TODO: Cache this in an atomic to avoid this overhead return vRandom.size(); } //! Consistency check - void Check() - { + void Check() { #ifdef DEBUG_ADDRMAN { LOCK(cs); @@ -514,22 +564,21 @@ class CAddrMan } //! Add a single address. - bool Add(const CAddress &addr, const CNetAddr& source, int64_t nTimePenalty = 0) - { + bool Add(const CAddress &addr, const CNetAddr &source, int64_t nTimePenalty = 0) { LOCK(cs); bool fRet = false; Check(); fRet |= Add_(addr, source, nTimePenalty); Check(); if (fRet) { - LogPrint(BCLog::ADDRMAN, "Added %s from %s: %i tried, %i new\n", addr.ToStringIPPort(), source.ToString(), nTried, nNew); + LogPrint(BCLog::ADDRMAN, "Added %s from %s: %i tried, %i new\n", addr.ToStringIPPort(), source.ToString(), + nTried, nNew); } return fRet; } //! Add multiple addresses. - bool Add(const std::vector &vAddr, const CNetAddr& source, int64_t nTimePenalty = 0) - { + bool Add(const std::vector &vAddr, const CNetAddr &source, int64_t nTimePenalty = 0) { LOCK(cs); int nAdd = 0; Check(); @@ -537,34 +586,52 @@ class CAddrMan nAdd += Add_(*it, source, nTimePenalty) ? 1 : 0; Check(); if (nAdd) { - LogPrint(BCLog::ADDRMAN, "Added %i addresses from %s: %i tried, %i new\n", nAdd, source.ToString(), nTried, nNew); + LogPrint(BCLog::ADDRMAN, "Added %i addresses from %s: %i tried, %i new\n", nAdd, source.ToString(), nTried, + nNew); } return nAdd > 0; } //! Mark an entry as accessible. - void Good(const CService &addr, int64_t nTime = GetAdjustedTime()) - { + void Good(const CService &addr, bool test_before_evict = true, int64_t nTime = GetAdjustedTime()) { LOCK(cs); Check(); - Good_(addr, nTime); + Good_(addr, test_before_evict, nTime); Check(); } //! Mark an entry as connection attempted to. - void Attempt(const CService &addr, bool fCountFailure, int64_t nTime = GetAdjustedTime()) - { + void Attempt(const CService &addr, bool fCountFailure, int64_t nTime = GetAdjustedTime()) { LOCK(cs); Check(); Attempt_(addr, fCountFailure, nTime); Check(); } + //! See if any to-be-evicted tried table entries have been tested and if so resolve the collisions. + void ResolveCollisions() { + LOCK(cs); + Check(); + ResolveCollisions_(); + Check(); + } + + //! Randomly select an address in tried that another address is attempting to evict. + CAddrInfo SelectTriedCollision() { + CAddrInfo ret; + { + LOCK(cs); + Check(); + ret = SelectTriedCollision_(); + Check(); + } + return ret; + } + /** * Choose an address to connect to. */ - CAddrInfo Select(bool newOnly = false) - { + CAddrInfo Select(bool newOnly = false) { CAddrInfo addrRet; { LOCK(cs); @@ -576,10 +643,9 @@ class CAddrMan } //! Return a bunch of addresses, selected at random. - std::vector GetAddr() - { + std::vector GetAddr() { Check(); - std::vector vAddr; + std::vector vAddr; { LOCK(cs); GetAddr_(vAddr); @@ -589,24 +655,21 @@ class CAddrMan } //! Mark an entry as currently-connected-to. - void Connected(const CService &addr, int64_t nTime = GetAdjustedTime()) - { + void Connected(const CService &addr, int64_t nTime = GetAdjustedTime()) { LOCK(cs); Check(); Connected_(addr, nTime); Check(); } - void SetServices(const CService &addr, ServiceFlags nServices) - { + void SetServices(const CService &addr, ServiceFlags nServices) { LOCK(cs); Check(); SetServices_(addr, nServices); Check(); } - CAddrInfo GetAddressInfo(const CService& addr) - { + CAddrInfo GetAddressInfo(const CService &addr) { CAddrInfo addrRet; { LOCK(cs); diff --git a/src/amount.h b/src/amount.h index 3cad29d4e5..d15e4aa3a6 100644 --- a/src/amount.h +++ b/src/amount.h @@ -7,12 +7,14 @@ #define BITCOIN_AMOUNT_H #include +#include /** Amount in satoshis (Can be negative) */ typedef int64_t CAmount; +/**128 bits integer used on assets*/ +typedef boost::multiprecision::int128_t CAmount128; static const CAmount COIN = 100000000; -static const CAmount CENT = 1000000; /** No amount larger than this (in satoshi) is valid. * @@ -23,7 +25,11 @@ static const CAmount CENT = 1000000; * critical; in unusual circumstances like a(nother) overflow bug that allowed * for the creation of coins out of thin air modification could lead to a fork. * */ -static const CAmount MAX_MONEY = 21000000 * COIN; -inline bool MoneyRange(const CAmount& nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); } +static const CAmount MAX_MONEY = 21000000000 * COIN; +static const CAmount OLD_MAX_MONEY = 21000000 * COIN; + +inline bool MoneyRange(const CAmount &nValue) { + return (nValue >= 0 && nValue <= MAX_MONEY); +} #endif // BITCOIN_AMOUNT_H diff --git a/src/arith_uint256.cpp b/src/arith_uint256.cpp index dee707c3d2..d6cfde0015 100644 --- a/src/arith_uint256.cpp +++ b/src/arith_uint256.cpp @@ -1,29 +1,26 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2016 The Bitcoin Core developers // Copyright (c) 2017 The Dash Core developers +// Copyright (c) 2020-2023 The Raptoreum developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "arith_uint256.h" +#include -#include "uint256.h" -#include "utilstrencodings.h" +#include +#include +#include -#include -#include - -template -base_uint::base_uint(const std::string& str) -{ - static_assert(BITS/32 > 0 && BITS%32 == 0, "Template parameter BITS must be a positive multiple of 32."); +template +base_uint::base_uint(const std::string &str) { + static_assert(BITS / 32 > 0 && BITS % 32 == 0, "Template parameter BITS must be a positive multiple of 32."); SetHex(str); } -template -base_uint& base_uint::operator<<=(unsigned int shift) -{ - base_uint a(*this); +template +base_uint &base_uint::operator<<=(unsigned int shift) { + base_uint a(*this); for (int i = 0; i < WIDTH; i++) pn[i] = 0; int k = shift / 32; @@ -37,10 +34,9 @@ base_uint& base_uint::operator<<=(unsigned int shift) return *this; } -template -base_uint& base_uint::operator>>=(unsigned int shift) -{ - base_uint a(*this); +template +base_uint &base_uint::operator>>=(unsigned int shift) { + base_uint a(*this); for (int i = 0; i < WIDTH; i++) pn[i] = 0; int k = shift / 32; @@ -54,39 +50,36 @@ base_uint& base_uint::operator>>=(unsigned int shift) return *this; } -template -base_uint& base_uint::operator*=(uint32_t b32) -{ +template +base_uint &base_uint::operator*=(uint32_t b32) { uint64_t carry = 0; for (int i = 0; i < WIDTH; i++) { - uint64_t n = carry + (uint64_t)b32 * pn[i]; + uint64_t n = carry + (uint64_t) b32 * pn[i]; pn[i] = n & 0xffffffff; carry = n >> 32; } return *this; } -template -base_uint& base_uint::operator*=(const base_uint& b) -{ - base_uint a = *this; - *this = 0; +template +base_uint &base_uint::operator*=(const base_uint &b) { + base_uint a; for (int j = 0; j < WIDTH; j++) { uint64_t carry = 0; for (int i = 0; i + j < WIDTH; i++) { - uint64_t n = carry + pn[i + j] + (uint64_t)a.pn[j] * b.pn[i]; - pn[i + j] = n & 0xffffffff; + uint64_t n = carry + a.pn[i + j] + (uint64_t) pn[j] * b.pn[i]; + a.pn[i + j] = n & 0xffffffff; carry = n >> 32; } } + *this = a; return *this; } -template -base_uint& base_uint::operator/=(const base_uint& b) -{ - base_uint div = b; // make a copy, so we can shift. - base_uint num = *this; // make a copy, so we can subtract. +template +base_uint &base_uint::operator/=(const base_uint &b) { + base_uint div = b; // make a copy, so we can shift. + base_uint num = *this; // make a copy, so we can subtract. *this = 0; // the quotient. int num_bits = num.bits(); int div_bits = div.bits(); @@ -108,9 +101,8 @@ base_uint& base_uint::operator/=(const base_uint& b) return *this; } -template -int base_uint::CompareTo(const base_uint& b) const -{ +template +int base_uint::CompareTo(const base_uint &b) const { for (int i = WIDTH - 1; i >= 0; i--) { if (pn[i] < b.pn[i]) return -1; @@ -120,9 +112,8 @@ int base_uint::CompareTo(const base_uint& b) const return 0; } -template -bool base_uint::EqualTo(uint64_t b) const -{ +template +bool base_uint::EqualTo(uint64_t b) const { for (int i = WIDTH - 1; i >= 2; i--) { if (pn[i]) return false; @@ -134,9 +125,8 @@ bool base_uint::EqualTo(uint64_t b) const return true; } -template -double base_uint::getdouble() const -{ +template +double base_uint::getdouble() const { double ret = 0.0; double fact = 1.0; for (int i = 0; i < WIDTH; i++) { @@ -146,54 +136,57 @@ double base_uint::getdouble() const return ret; } -template +template int base_uint::GET_WIDTH() const { - return this->WIDTH; + return this->WIDTH; } -template + +template uint32_t base_uint::GET_PN(int index) const { - return this->pn[index]; + return this->pn[index]; } -template -std::string base_uint::GetHex() const -{ if(BITS <= 256) { - uint256 b; - for(int x=0; xWIDTH; ++x) - WriteLE32(b.begin() + x*4, this->pn[x]); - return b.GetHex(); - } else { - uint512 b; - for(int x=0; xWIDTH; ++x) - WriteLE32(b.begin() + x*4, this->pn[x]); - return b.trim256().GetHex(); - } + +template +std::string base_uint::GetHex() const { + if (BITS <= 256) { + uint256 b; + for (int x = 0; x < this->WIDTH; ++x) + WriteLE32(b.begin() + x * 4, this->pn[x]); + return b.GetHex(); + } else { + uint512 b; + for (int x = 0; x < this->WIDTH; ++x) + WriteLE32(b.begin() + x * 4, this->pn[x]); + return b.trim256().GetHex(); + } } -//template -//void base_uint::SetHex(const char* psz) -//{ -// *this = UintToArith256(uint256S(psz)); -//} +template<> +void base_uint<256>::SetHex(const char *psz) { + *this = UintToArith256(uint256S(psz)); +} + +template<> +void base_uint<512>::SetHex(const char *psz) { + *this = UintToArith512(uint512S(psz)); +} -template -void base_uint::SetHex(const std::string& str) -{ +template +void base_uint::SetHex(const std::string &str) { SetHex(str.c_str()); } -template -std::string base_uint::ToString() const -{ +template +std::string base_uint::ToString() const { return (GetHex()); } -template -unsigned int base_uint::bits() const -{ +template +unsigned int base_uint::bits() const { for (int pos = WIDTH - 1; pos >= 0; pos--) { if (pn[pos]) { for (int nbits = 31; nbits > 0; nbits--) { - if (pn[pos] & 1 << nbits) + if (pn[pos] & 1U << nbits) return 32 * pos + nbits + 1; } return 32 * pos + 1; @@ -203,27 +196,41 @@ unsigned int base_uint::bits() const } // Explicit instantiations for base_uint<256> -template base_uint<256>::base_uint(const std::string&); -template base_uint<256>& base_uint<256>::operator<<=(unsigned int); -template base_uint<256>& base_uint<256>::operator>>=(unsigned int); -template base_uint<256>& base_uint<256>::operator*=(uint32_t b32); -template base_uint<256>& base_uint<256>::operator*=(const base_uint<256>& b); -template base_uint<256>& base_uint<256>::operator/=(const base_uint<256>& b); -template int base_uint<256>::CompareTo(const base_uint<256>&) const; +template base_uint<256>::base_uint(const std::string &); + +template base_uint<256> &base_uint<256>::operator<<=(unsigned int); + +template base_uint<256> &base_uint<256>::operator>>=(unsigned int); + +template base_uint<256> &base_uint<256>::operator*=(uint32_t b32); + +template base_uint<256> &base_uint<256>::operator*=(const base_uint<256> &b); + +template base_uint<256> &base_uint<256>::operator/=(const base_uint<256> &b); + +template int base_uint<256>::CompareTo(const base_uint<256> &) const; + template bool base_uint<256>::EqualTo(uint64_t) const; + template double base_uint<256>::getdouble() const; + template std::string base_uint<256>::GetHex() const; + template std::string base_uint<256>::ToString() const; -template void base_uint<256>::SetHex(const char*); -template void base_uint<256>::SetHex(const std::string&); + +template void base_uint<256>::SetHex(const char *); + +template void base_uint<256>::SetHex(const std::string &); + template unsigned int base_uint<256>::bits() const; + template int base_uint<256>::GET_WIDTH() const; + template uint32_t base_uint<256>::GET_PN(int index) const; // This implementation directly uses shifts instead of going // through an intermediate MPI representation. -arith_uint256& arith_uint256::SetCompact(uint32_t nCompact, bool* pfNegative, bool* pfOverflow) -{ +arith_uint256 &arith_uint256::SetCompact(uint32_t nCompact, bool *pfNegative, bool *pfOverflow) { int nSize = nCompact >> 24; uint32_t nWord = nCompact & 0x007fffff; if (nSize <= 3) { @@ -242,8 +249,7 @@ arith_uint256& arith_uint256::SetCompact(uint32_t nCompact, bool* pfNegative, bo return *this; } -uint32_t arith_uint256::GetCompact(bool fNegative) const -{ +uint32_t arith_uint256::GetCompact(bool fNegative) const { int nSize = (bits() + 7) / 8; uint32_t nCompact = 0; if (nSize <= 3) { @@ -265,35 +271,31 @@ uint32_t arith_uint256::GetCompact(bool fNegative) const return nCompact; } -uint256 ArithToUint256(const arith_uint256 &a) -{ +uint256 ArithToUint256(const arith_uint256 &a) { uint256 b; - for(int x=0; x -template base_uint<512>::base_uint(const std::string&); -template base_uint<512>& base_uint<512>::operator<<=(unsigned int); -template base_uint<512>& base_uint<512>::operator>>=(unsigned int); -template base_uint<512>& base_uint<512>::operator*=(uint32_t b32); -template base_uint<512>& base_uint<512>::operator*=(const base_uint<512>& b); -template base_uint<512>& base_uint<512>::operator/=(const base_uint<512>& b); -template int base_uint<512>::CompareTo(const base_uint<512>&) const; +template base_uint<512>::base_uint(const std::string &); + +template base_uint<512> &base_uint<512>::operator<<=(unsigned int); + +template base_uint<512> &base_uint<512>::operator>>=(unsigned int); + +template base_uint<512> &base_uint<512>::operator*=(uint32_t b32); + +template base_uint<512> &base_uint<512>::operator*=(const base_uint<512> &b); + +template base_uint<512> &base_uint<512>::operator/=(const base_uint<512> &b); + +template int base_uint<512>::CompareTo(const base_uint<512> &) const; + template bool base_uint<512>::EqualTo(uint64_t) const; + template double base_uint<512>::getdouble() const; -template std::string base_uint<512>::GetHex() const; + template std::string base_uint<512>::ToString() const; -template void base_uint<512>::SetHex(const char*); -template void base_uint<512>::SetHex(const std::string&); + template unsigned int base_uint<512>::bits() const; + template int base_uint<512>::GET_WIDTH() const; -template uint32_t base_uint<512>::GET_PN(int index) const; + +template uint32_t base_uint<512>::GET_PN(int index) const; \ No newline at end of file diff --git a/src/arith_uint256.h b/src/arith_uint256.h index bd0040b9c0..a7780e0aae 100644 --- a/src/arith_uint256.h +++ b/src/arith_uint256.h @@ -1,150 +1,136 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Copyright (c) 2009-2016 The Bitcoin Core developers // Copyright (c) 2017 The Dash Core developers +// Copyright (c) 2020-2023 The Raptoreum developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef RAPTOREUM_ARITH_UINT256_H #define RAPTOREUM_ARITH_UINT256_H -#include "crypto/common.h" -#include + #include +#include #include #include #include -#include class uint256; + class uint512; class uint_error : public std::runtime_error { public: - explicit uint_error(const std::string& str) : std::runtime_error(str) {} + explicit uint_error(const std::string &str) : std::runtime_error(str) {} }; /** Template base class for unsigned big integers. */ template -class base_uint -{ +class base_uint { protected: - enum { WIDTH=BITS/32 }; + static constexpr int WIDTH = BITS / 32; uint32_t pn[WIDTH]; public: - base_uint() - { - static_assert(BITS/32 > 0 && BITS%32 == 0, "Template parameter BITS must be a positive multiple of 32."); + base_uint() { + static_assert(BITS / 32 > 0 && BITS % 32 == 0, "Template parameter BITS must be a positive multiple of 32."); for (int i = 0; i < WIDTH; i++) pn[i] = 0; } - base_uint(const base_uint& b) - { - static_assert(BITS/32 > 0 && BITS%32 == 0, "Template parameter BITS must be a positive multiple of 32."); + base_uint(const base_uint &b) { + static_assert(BITS / 32 > 0 && BITS % 32 == 0, "Template parameter BITS must be a positive multiple of 32."); for (int i = 0; i < WIDTH; i++) pn[i] = b.pn[i]; } - base_uint& operator=(const base_uint& b) - { + base_uint &operator=(const base_uint &b) { for (int i = 0; i < WIDTH; i++) pn[i] = b.pn[i]; return *this; } - base_uint(uint64_t b) - { - static_assert(BITS/32 > 0 && BITS%32 == 0, "Template parameter BITS must be a positive multiple of 32."); + base_uint(uint64_t b) { + static_assert(BITS / 32 > 0 && BITS % 32 == 0, "Template parameter BITS must be a positive multiple of 32."); - pn[0] = (unsigned int)b; - pn[1] = (unsigned int)(b >> 32); + pn[0] = (unsigned int) b; + pn[1] = (unsigned int) (b >> 32); for (int i = 2; i < WIDTH; i++) pn[i] = 0; } - explicit base_uint(const std::string& str); + explicit base_uint(const std::string &str); - bool operator!() const - { + bool operator!() const { for (int i = 0; i < WIDTH; i++) if (pn[i] != 0) return false; return true; } - const base_uint operator~() const - { + const base_uint operator~() const { base_uint ret; for (int i = 0; i < WIDTH; i++) ret.pn[i] = ~pn[i]; return ret; } - const base_uint operator-() const - { + const base_uint operator-() const { base_uint ret; for (int i = 0; i < WIDTH; i++) ret.pn[i] = ~pn[i]; - ret++; + ++ret; return ret; } double getdouble() const; - base_uint& operator=(uint64_t b) - { - pn[0] = (unsigned int)b; - pn[1] = (unsigned int)(b >> 32); + base_uint &operator=(uint64_t b) { + pn[0] = (unsigned int) b; + pn[1] = (unsigned int) (b >> 32); for (int i = 2; i < WIDTH; i++) pn[i] = 0; return *this; } - base_uint& operator^=(const base_uint& b) - { + base_uint &operator^=(const base_uint &b) { for (int i = 0; i < WIDTH; i++) pn[i] ^= b.pn[i]; return *this; } - base_uint& operator&=(const base_uint& b) - { + base_uint &operator&=(const base_uint &b) { for (int i = 0; i < WIDTH; i++) pn[i] &= b.pn[i]; return *this; } - base_uint& operator|=(const base_uint& b) - { + base_uint &operator|=(const base_uint &b) { for (int i = 0; i < WIDTH; i++) pn[i] |= b.pn[i]; return *this; } - base_uint& operator^=(uint64_t b) - { - pn[0] ^= (unsigned int)b; - pn[1] ^= (unsigned int)(b >> 32); + base_uint &operator^=(uint64_t b) { + pn[0] ^= (unsigned int) b; + pn[1] ^= (unsigned int) (b >> 32); return *this; } - base_uint& operator|=(uint64_t b) - { - pn[0] |= (unsigned int)b; - pn[1] |= (unsigned int)(b >> 32); + base_uint &operator|=(uint64_t b) { + pn[0] |= (unsigned int) b; + pn[1] |= (unsigned int) (b >> 32); return *this; } - base_uint& operator<<=(unsigned int shift); - base_uint& operator>>=(unsigned int shift); + base_uint &operator<<=(unsigned int shift); + + base_uint &operator>>=(unsigned int shift); - base_uint& operator+=(const base_uint& b) - { + base_uint &operator+=(const base_uint &b) { uint64_t carry = 0; - for (int i = 0; i < WIDTH; i++) - { + for (int i = 0; i < WIDTH; i++) { uint64_t n = carry + pn[i] + b.pn[i]; pn[i] = n & 0xffffffff; carry = n >> 32; @@ -152,34 +138,32 @@ class base_uint return *this; } - base_uint& operator-=(const base_uint& b) - { + base_uint &operator-=(const base_uint &b) { *this += -b; return *this; } - base_uint& operator+=(uint64_t b64) - { + base_uint &operator+=(uint64_t b64) { base_uint b; b = b64; *this += b; return *this; } - base_uint& operator-=(uint64_t b64) - { + base_uint &operator-=(uint64_t b64) { base_uint b; b = b64; *this += -b; return *this; } - base_uint& operator*=(uint32_t b32); - base_uint& operator*=(const base_uint& b); - base_uint& operator/=(const base_uint& b); + base_uint &operator*=(uint32_t b32); + + base_uint &operator*=(const base_uint &b); + + base_uint &operator/=(const base_uint &b); - base_uint& operator++() - { + base_uint &operator++() { // prefix operator int i = 0; while (i < WIDTH && ++pn[i] == 0) @@ -187,69 +171,85 @@ class base_uint return *this; } - const base_uint operator++(int) - { + const base_uint operator++(int) { // postfix operator const base_uint ret = *this; ++(*this); return ret; } - base_uint& operator--() - { + base_uint &operator--() { // prefix operator int i = 0; - while (i < WIDTH && --pn[i] == (uint32_t)-1) + while (i < WIDTH && --pn[i] == (uint32_t) - 1) i++; return *this; } - const base_uint operator--(int) - { + const base_uint operator--(int) { // postfix operator const base_uint ret = *this; --(*this); return ret; } - void SetHex(const char* psz) { - base_uint b; - for(int x=0; x>(const base_uint& a, int shift) { return base_uint(a) >>= shift; } - friend inline const base_uint operator<<(const base_uint& a, int shift) { return base_uint(a) <<= shift; } - friend inline const base_uint operator*(const base_uint& a, uint32_t b) { return base_uint(a) *= b; } - friend inline bool operator==(const base_uint& a, const base_uint& b) { return memcmp(a.pn, b.pn, sizeof(a.pn)) == 0; } - friend inline bool operator!=(const base_uint& a, const base_uint& b) { return memcmp(a.pn, b.pn, sizeof(a.pn)) != 0; } - friend inline bool operator>(const base_uint& a, const base_uint& b) { return a.CompareTo(b) > 0; } - friend inline bool operator<(const base_uint& a, const base_uint& b) { return a.CompareTo(b) < 0; } - friend inline bool operator>=(const base_uint& a, const base_uint& b) { return a.CompareTo(b) >= 0; } - friend inline bool operator<=(const base_uint& a, const base_uint& b) { return a.CompareTo(b) <= 0; } - friend inline bool operator==(const base_uint& a, uint64_t b) { return a.EqualTo(b); } - friend inline bool operator!=(const base_uint& a, uint64_t b) { return !a.EqualTo(b); } + friend inline const base_uint operator+(const base_uint &a, const base_uint &b) { return base_uint(a) += b; } + + friend inline const base_uint operator-(const base_uint &a, const base_uint &b) { return base_uint(a) -= b; } + + friend inline const base_uint operator*(const base_uint &a, const base_uint &b) { return base_uint(a) *= b; } + + friend inline const base_uint operator/(const base_uint &a, const base_uint &b) { return base_uint(a) /= b; } + + friend inline const base_uint operator|(const base_uint &a, const base_uint &b) { return base_uint(a) |= b; } + + friend inline const base_uint operator&(const base_uint &a, const base_uint &b) { return base_uint(a) &= b; } + + friend inline const base_uint operator^(const base_uint &a, const base_uint &b) { return base_uint(a) ^= b; } + + friend inline const base_uint operator>>(const base_uint &a, int shift) { return base_uint(a) >>= shift; } + + friend inline const base_uint operator<<(const base_uint &a, int shift) { return base_uint(a) <<= shift; } + + friend inline const base_uint operator*(const base_uint &a, uint32_t b) { return base_uint(a) *= b; } + + friend inline bool operator==(const base_uint &a, const base_uint &b) { + return memcmp(a.pn, b.pn, sizeof(a.pn)) == 0; + } + + friend inline bool operator!=(const base_uint &a, const base_uint &b) { + return memcmp(a.pn, b.pn, sizeof(a.pn)) != 0; + } + + friend inline bool operator>(const base_uint &a, const base_uint &b) { return a.CompareTo(b) > 0; } + + friend inline bool operator<(const base_uint &a, const base_uint &b) { return a.CompareTo(b) < 0; } + + friend inline bool operator>=(const base_uint &a, const base_uint &b) { return a.CompareTo(b) >= 0; } + + friend inline bool operator<=(const base_uint &a, const base_uint &b) { return a.CompareTo(b) <= 0; } + + friend inline bool operator==(const base_uint &a, uint64_t b) { return a.EqualTo(b); } + + friend inline bool operator!=(const base_uint &a, uint64_t b) { return !a.EqualTo(b); } int GET_WIDTH() const; + uint32_t GET_PN(int index) const; + std::string GetHex() const; - void SetHex(const std::string& str); + + void SetHex(const char *str); + + void SetHex(const std::string &str); + std::string ToString() const; - unsigned int size() const - { + unsigned int size() const { return sizeof(pn); } @@ -259,10 +259,9 @@ class base_uint */ unsigned int bits() const; - uint64_t GetLow64() const - { + uint64_t GetLow64() const { static_assert(WIDTH >= 2, "Assertion WIDTH >= 2 failed (WIDTH = BITS / 32). BITS is a template parameter."); - return pn[0] | (uint64_t)pn[1] << 32; + return pn[0] | (uint64_t) pn[1] << 32; } }; @@ -270,9 +269,12 @@ class base_uint class arith_uint256 : public base_uint<256> { public: arith_uint256() {} - arith_uint256(const base_uint<256>& b) : base_uint<256>(b) {} + + arith_uint256(const base_uint<256> &b) : base_uint<256>(b) {} + arith_uint256(uint64_t b) : base_uint<256>(b) {} - explicit arith_uint256(const std::string& str) : base_uint<256>(str) {} + + explicit arith_uint256(const std::string &str) : base_uint<256>(str) {} /** * The "compact" format is a representation of a whole @@ -294,40 +296,50 @@ class arith_uint256 : public base_uint<256> { * complexities of the sign bit and using base 256 are probably an * implementation accident. */ - arith_uint256& SetCompact(uint32_t nCompact, bool *pfNegative = nullptr, bool *pfOverflow = nullptr); + arith_uint256 &SetCompact(uint32_t nCompact, bool *pfNegative = nullptr, bool *pfOverflow = nullptr); + uint32_t GetCompact(bool fNegative = false) const; friend uint256 ArithToUint256(const arith_uint256 &); + friend arith_uint256 UintToArith256(const uint256 &); //std::string GetHex() const; }; uint256 ArithToUint256(const arith_uint256 &); + arith_uint256 UintToArith256(const uint256 &); class arith_uint512 : public base_uint<512> { public: - arith_uint512() {} - arith_uint512(const base_uint<512>& b) : base_uint<512>(b) {} - arith_uint512(const arith_uint256& b) { - for (int i = 0; i < b.GET_WIDTH(); i++) - pn[i] = b.GET_PN(i); - } - arith_uint512(uint64_t b) : base_uint<512>(b) {} - explicit arith_uint512(const std::string& str) : base_uint<512>(str) {} - - arith_uint256 trim256() const { - arith_uint256 result; - memcpy((void*)&result, (void*)pn, 32); - return result; - } - friend uint512 ArithToUint512(const arith_uint512 &); - friend arith_uint512 UintToArith512(const uint512 &); - //std::string GetHex() const; + arith_uint512() {} + + arith_uint512(const base_uint<512> &b) : base_uint<512>(b) {} + + arith_uint512(const arith_uint256 &b) { + for (int i = 0; i < b.GET_WIDTH(); i++) + pn[i] = b.GET_PN(i); + } + + arith_uint512(uint64_t b) : base_uint<512>(b) {} + + explicit arith_uint512(const std::string &str) : base_uint<512>(str) {} + + arith_uint256 trim256() const { + arith_uint256 result; + memcpy((void *) &result, (void *) pn, 32); + return result; + } + + friend uint512 ArithToUint512(const arith_uint512 &); + + friend arith_uint512 UintToArith512(const uint512 &); + //std::string GetHex() const; }; uint512 ArithToUint512(const arith_uint512 &); + arith_uint512 UintToArith512(const uint512 &); #endif // RAPTOREUM_ARITH_UINT256_H diff --git a/src/assetTransaction.json b/src/assetTransaction.json new file mode 100644 index 0000000000..63eb721df9 --- /dev/null +++ b/src/assetTransaction.json @@ -0,0 +1,36 @@ +{ +// + "txid" : "id", (string) The transaction id (same as provided) + "type" : n, (numeric) The type of transaction + "version" : n, (numeric) The version + "locktime" : ttt, (numeric) The lock time + "vin" : [ (array of json objects) + ... + ], + "vout" : [ (array of json objects) + ... + ], + "extraPayloadSize" : n (numeric) Size of DIP2 extra payload. Only present if it's a special TX + "assets" : [ + { + "name": "string", + "txid" : "assetId", + "type" : "type of asset transaction", + "version" : "transaction version of this asset", + "locktime" : "locktime", + "vin" : [ + ... + ], + "vout" : [ + ... + ], + "extraPayloadSize" : n + } + ,... + ] +} + +Create Asset Transaction, + +the vin of create asset transaction would be a coinbase vin +the vout of create asset transaction would be the initial mint asset amount, can be empty if no asset is mint during token creation \ No newline at end of file diff --git a/src/assets/assets.cpp b/src/assets/assets.cpp new file mode 100644 index 0000000000..1b4658dd60 --- /dev/null +++ b/src/assets/assets.cpp @@ -0,0 +1,640 @@ +// Copyright (c) 2021-2023 The Raptoreum developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static const std::regex name_root_characters("^[A-Z0-9._]{3,}$"); +static const std::regex name_sub_characters("^[a-zA-Z0-9 ]{3,}$"); +static const std::regex rtm_names("^RTM$|^RAPTOREUM$|^wRTM$|^WRTM$|^RTMcoin$|^RTMCOIN$"); + + +bool IsAssetNameValid(std::string name, bool isRoot) { + if (name.length() < 3 || name.length() > 128) return false; + if (isRoot) + return std::regex_match(name, name_root_characters) && !std::regex_match(name, rtm_names); + else + return std::regex_match(name, name_sub_characters) && !std::regex_match(name, rtm_names); +} + +CAmount getAssetsFeesCoin() { + return getAssetsFees() * COIN; +} + +uint16_t getAssetsFees() { + if (!sporkManager.IsSporkActive(SPORK_22_SPECIAL_TX_FEE)) { + return 0; + } + int64_t specialTxValue = sporkManager.GetSporkValue(SPORK_22_SPECIAL_TX_FEE); + return specialTxValue >> 8 & 0xff; +} + +bool GetAssetId(const CScript &script, std::string &assetId) { + CAssetTransfer assetTransfer; + if (GetTransferAsset(script, assetTransfer)) { + assetId = assetTransfer.assetId; + return true; + } + return false; +} + +CAssetMetaData::CAssetMetaData(const std::string txid, const CNewAssetTx assetTx) { + assetId = txid; + circulatingSupply = 0; + mintCount = 0; + if (!assetTx.isRoot){ + CAssetMetaData rootAsset; + passetsCache->GetAssetMetaData(assetTx.rootId, rootAsset); + name = rootAsset.name + "|" + assetTx.name; + } else { + name = assetTx.name; + } + isRoot = assetTx.isRoot; + updatable = assetTx.updatable; + isUnique = assetTx.isUnique; + decimalPoint = assetTx.decimalPoint; + referenceHash = assetTx.referenceHash; + maxMintCount = assetTx.maxMintCount; + fee = assetTx.fee; + type = assetTx.type; + targetAddress = assetTx.targetAddress; + issueFrequency = assetTx.issueFrequency; + amount = assetTx.amount; + ownerAddress = assetTx.ownerAddress; + collateralAddress = assetTx.collateralAddress; +} + +static std::string GetDistributionType(int t) { + switch (t) { + case 0: + return "manual"; + case 1: + return "coinbase"; + case 2: + return "address"; + case 3: + return "schedule"; + } + return "invalid"; +} + +void CAssetMetaData::ToJson(UniValue &obj) const { + obj.clear(); + obj.setObject(); + obj.pushKV("Asset_id", assetId); + obj.pushKV("Asset_name", name); + obj.pushKV("Circulating_supply", circulatingSupply); + obj.pushKV("MintCount", mintCount); + obj.pushKV("maxMintCount", maxMintCount); + obj.pushKV("owner", EncodeDestination(ownerAddress)); + obj.pushKV("Isunique", isUnique); + obj.pushKV("Updatable", updatable); + obj.pushKV("Decimalpoint", (int) decimalPoint); + obj.pushKV("ReferenceHash", referenceHash); + UniValue dist(UniValue::VOBJ); + dist.pushKV("Type", GetDistributionType(type)); + dist.pushKV("TargetAddress", EncodeDestination(targetAddress)); + //tmp.pushKV("collateralAddress", EncodeDestination(collateralAddress)); + dist.pushKV("IssueFrequency", issueFrequency); + dist.pushKV("Amount", amount / COIN); + obj.pushKV("Distribution", dist); +} + +CDatabaseAssetData::CDatabaseAssetData(const CAssetMetaData &asset, const int &nHeight, const uint256 &blockHash) { + SetNull(); + this->asset = asset; + this->blockHeight = nHeight; + this->blockHash = blockHash; +} + +CDatabaseAssetData::CDatabaseAssetData() { + SetNull(); +} + +bool CAssetsCache::InsertAsset(CNewAssetTx newAsset, std::string assetId, int nHeight) { + if (CheckIfAssetExists(assetId)) + return error("%s: Tried adding new asset, but it already existed in the map of assets: %s", __func__, assetId); + CAssetMetaData test(assetId, newAsset); + CDatabaseAssetData newAssetData(test, nHeight, uint256()); + + if (NewAssetsToRemove.count(newAssetData)) + NewAssetsToRemove.erase(newAssetData); + + NewAssetsToAdd.insert(newAssetData); + + mapAsset.insert(std::make_pair(assetId, newAssetData)); + mapAssetId.insert(std::make_pair(newAssetData.asset.name, assetId)); + + return true; +} + +bool CAssetsCache::UpdateAsset(CUpdateAssetTx upAsset) { + CAssetMetaData assetData; + if (!GetAssetMetaData(upAsset.assetId, assetData)) { + return false; + } + + if (NewAssetsToAdd.count(mapAsset[upAsset.assetId])) + NewAssetsToAdd.erase(mapAsset[upAsset.assetId]); + + NewAssetsToRemove.insert(mapAsset[upAsset.assetId]); + + assetData.updatable = upAsset.updatable; + assetData.referenceHash = upAsset.referenceHash; + assetData.type = upAsset.type; + assetData.targetAddress = upAsset.targetAddress; + assetData.issueFrequency = upAsset.issueFrequency; + assetData.amount = upAsset.amount; + assetData.maxMintCount = upAsset.maxMintCount; + assetData.ownerAddress = upAsset.ownerAddress; + assetData.collateralAddress = upAsset.collateralAddress; + //update cache + mapAsset[upAsset.assetId].asset = assetData; + //update db + NewAssetsToAdd.insert(mapAsset[upAsset.assetId]); + return true; +} + +bool CAssetsCache::UpdateAsset(std::string assetId, CAmount amount) { + if (mapAsset.count(assetId) > 0) { + if (NewAssetsToAdd.count(mapAsset[assetId])) + NewAssetsToAdd.erase(mapAsset[assetId]); + + NewAssetsToRemove.insert(mapAsset[assetId]); + mapAsset[assetId].asset.circulatingSupply += amount / COIN; + mapAsset[assetId].asset.mintCount += 1; + NewAssetsToAdd.insert(mapAsset[assetId]); + return true; + } + return false; +} + +bool CAssetsCache::RemoveAsset(std::string assetId) { + if (mapAsset.count(assetId) > 0) { + if (NewAssetsToAdd.count(mapAsset[assetId])) + NewAssetsToAdd.erase(mapAsset[assetId]); + + NewAssetsToRemove.insert(mapAsset[assetId]); + return true; + } + return false; +} + +bool CAssetsCache::UndoUpdateAsset(const CUpdateAssetTx upAsset, + const std::vector > &vUndoData) { + if (mapAsset.count(upAsset.assetId) > 0) { + CAssetMetaData assetData; + if (!GetAssetMetaData(upAsset.assetId, assetData)) { + return false; + } + + if (NewAssetsToAdd.count(mapAsset[upAsset.assetId])) + NewAssetsToAdd.erase(mapAsset[upAsset.assetId]); + + NewAssetsToRemove.insert(mapAsset[upAsset.assetId]); + + for (auto item: vUndoData) { + if (item.first == upAsset.assetId) { + assetData.updatable = item.second.updatable; + assetData.referenceHash = item.second.referenceHash; + assetData.type = item.second.type; + assetData.targetAddress = item.second.targetAddress; + assetData.issueFrequency = item.second.issueFrequency; + assetData.amount = item.second.amount; + assetData.ownerAddress = item.second.ownerAddress; + assetData.collateralAddress = item.second.collateralAddress; + } + } + + //update cache + mapAsset[upAsset.assetId].asset = assetData; + //update db + NewAssetsToAdd.insert(mapAsset[upAsset.assetId]); + return true; + } + return false; +} + +bool CAssetsCache::UndoMintAsset(const CMintAssetTx assetTx, + const std::vector > &vUndoData) { + if (mapAsset.count(assetTx.assetId) > 0) { + CAssetMetaData assetData; + if (!GetAssetMetaData(assetTx.assetId, assetData)) { + return false; + } + + if (NewAssetsToAdd.count(mapAsset[assetTx.assetId])) + NewAssetsToAdd.erase(mapAsset[assetTx.assetId]); + + NewAssetsToRemove.insert(mapAsset[assetTx.assetId]); + + for (auto item: vUndoData) { + if (item.first == assetTx.assetId) { + assetData.circulatingSupply = item.second.circulatingSupply; + assetData.mintCount = item.second.mintCount; + } + } + + //update cache + mapAsset[assetTx.assetId].asset = assetData; + //update db + NewAssetsToAdd.insert(mapAsset[assetTx.assetId]); + return true; + } + return false; +} + +bool CAssetsCache::CheckIfAssetExists(std::string assetId) { + //check if the asset is removed + CAssetMetaData tempAsset; + tempAsset.assetId = assetId; + CDatabaseAssetData cachedAsset(tempAsset, 0, uint256()); + if (NewAssetsToRemove.count(cachedAsset)) { + return false; + } + + if (mapAsset.count(assetId) > 0) { + return true; + } + + //check if the asset exist on the db + int nHeight; + uint256 blockHash; + CAssetMetaData asset; + if (passetsdb->ReadAssetData(assetId, asset, nHeight, blockHash)) { + CDatabaseAssetData newAsset(asset, nHeight, blockHash); + mapAsset.insert(std::make_pair(assetId, newAsset)); + return true; + } + return false; +} + +bool CAssetsCache::GetAssetId(std::string name, std::string &assetId) { + //try to get assetId by asset name + auto it = mapAssetId.find(name); + if (it != mapAssetId.end()) { + assetId = it->second; + return true; + } + //try to get asset id from the db + if (passetsdb->ReadAssetId(name, assetId)) { + mapAssetId.insert(std::make_pair(name, assetId)); + return true; + } + return false; +} + +bool CAssetsCache::GetAssetMetaData(std::string assetId, CAssetMetaData &asset) { + auto it = mapAsset.find(assetId); + if (it != mapAsset.end()) { + asset = it->second.asset; + return true; + } + + auto it2 = passetsCache->mapAsset.find(assetId); + if (it2 != passetsCache->mapAsset.end()) { + mapAsset.insert(std::make_pair(assetId, it2->second)); + asset = it2->second.asset; + return true; + } + + int nHeight; + uint256 blockHash; + if (passetsdb->ReadAssetData(assetId, asset, nHeight, blockHash)) { + CDatabaseAssetData newAsset(asset, nHeight, blockHash); + mapAsset.insert(std::make_pair(assetId, newAsset)); + return true; + } + return false; +} + +//! This will get the amount that an address for a certain asset contains from the database if they cache doesn't already have it +bool GetBestAssetAddressAmount(CAssetsCache& cache, const std::string& assetId, const std::string& address) +{ + if (fAssetIndex) { + auto pair = make_pair(assetId, address); + + // If the caches map has the pair, return true because the map already contains the best dirty amount + if (cache.mapAssetAddressAmount.count(pair)) + return true; + + // If the caches map has the pair, return true because the map already contains the best dirty amount + if (passetsCache->mapAssetAddressAmount.count(pair)) { + cache.mapAssetAddressAmount[pair] = passetsCache->mapAssetAddressAmount.at(pair); + return true; + } + + // If the database contains the assets address amount, insert it into the database and return true + CAmount128 nDBAmount; + if (passetsdb->ReadAssetAddressAmount(pair.first, pair.second, nDBAmount)) { + cache.mapAssetAddressAmount.insert(make_pair(pair, nDBAmount)); + return true; + } + } + + // The amount wasn't found return false + return false; +} + +void CAssetsCache::AddAssetBlance(const CScript &script, const COutPoint &out) { + if (fAssetIndex) { + CAssetTransfer assetTransfer; + if (GetTransferAsset(script, assetTransfer)) { + CTxDestination dest; + ExtractDestination(script, dest); + std::string address = EncodeDestination(dest); + auto pair = std::make_pair(assetTransfer.assetId, address); + // Get the best amount + if (!GetBestAssetAddressAmount(*this, assetTransfer.assetId, address)) + mapAssetAddressAmount.insert(std::make_pair(pair, 0)); + //else + mapAssetAddressAmount[pair] += assetTransfer.nAmount; + + // Add to cache so we can save to database + CAssetTransferEntry newTransfer(assetTransfer, address, out); + + if (NewAssetsTranferToRemove.count(newTransfer)) + NewAssetsTranferToRemove.erase(newTransfer); + + NewAssetsTransferToAdd.insert(newTransfer); + } + } +} + +void CAssetsCache::RemoveAddressBalance(const CScript &script, const COutPoint &out) { + if (fAssetIndex) { + CAssetTransfer assetTransfer; + if (GetTransferAsset(script, assetTransfer)) { + CTxDestination dest; + ExtractDestination(script, dest); + std::string address = EncodeDestination(dest); + + auto pair = make_pair(assetTransfer.assetId, address); + if (GetBestAssetAddressAmount(*this, assetTransfer.assetId, address)){ + + if (mapAssetAddressAmount.count(pair)) + mapAssetAddressAmount[pair] -= assetTransfer.nAmount; + + if (mapAssetAddressAmount.at(pair) < 0) + mapAssetAddressAmount.at(pair) = 0; + } + // Add to cache so we can save to database + CAssetTransferEntry newTransfer(assetTransfer, address, out); + + if (NewAssetsTransferToAdd.count(newTransfer)) + NewAssetsTransferToAdd.erase(newTransfer); + + NewAssetsTranferToRemove.insert(newTransfer); + } + } +} + +bool CAssetsCache::DumpCacheToDatabase() { + try { + //remove assets from db + for (auto newAsset: NewAssetsToRemove) { + if (!passetsdb->EraseAssetData(newAsset.asset.assetId)) { + return error("%s : %s", __func__, "_Failed Erasing Asset Data from database"); + } + if (!passetsdb->EraseAssetId(newAsset.asset.name)) { + return error("%s : %s", __func__, "_Failed Erasing Asset Data from database"); + } + } + //add assets to db + for (auto newAsset: NewAssetsToAdd) { + if (!passetsdb->WriteAssetData(newAsset.asset, newAsset.blockHeight, newAsset.blockHash)) { + return error("%s : %s", __func__, "_Failed Writing New Asset Data to database"); + } + if (!passetsdb->WriteAssetId(newAsset.asset.name, newAsset.asset.assetId)) { + return error("%s : %s", __func__, "_Failed Writing New Asset Data to database"); + } + } + // Undo the transfering by updating the balances in the database + for (auto transferToRemove: NewAssetsTranferToRemove) { + auto pair = std::make_pair(transferToRemove.transfer.assetId, transferToRemove.address); + if (mapAssetAddressAmount.count(pair)) { + if (mapAssetAddressAmount.at(pair) == 0) { + if (!passetsdb->EraseAssetAddressAmount(transferToRemove.transfer.assetId, transferToRemove.address)) { + return error("%s : %s", __func__, "_Failed Erasing address balance from database"); + } + if (!passetsdb->EraseAddressAssetAmount(transferToRemove.address, transferToRemove.transfer.assetId)) { + return error("%s : %s", __func__, "_Failed Erasing address balance from database"); + } + } else { + if (!passetsdb->WriteAssetAddressAmount(transferToRemove.transfer.assetId, transferToRemove.address, mapAssetAddressAmount.at(pair))) { + return error("%s : %s", __func__, "_Failed Writing address balance to database"); + } + if (!passetsdb->WriteAddressAssetAmount(transferToRemove.address, transferToRemove.transfer.assetId, mapAssetAddressAmount.at(pair))) { + return error("%s : %s", __func__, "_Failed Writing address balance to database"); + } + } + } + } + for (auto newTransfer: NewAssetsTransferToAdd) { + auto pair = std::make_pair(newTransfer.transfer.assetId, newTransfer.address); + if (mapAssetAddressAmount.count(pair)) { + if (!passetsdb->WriteAssetAddressAmount(newTransfer.transfer.assetId, newTransfer.address, mapAssetAddressAmount.at(pair))) { + return error("%s : %s", __func__, "_Failed Writing address balance to database"); + } + if (!passetsdb->WriteAddressAssetAmount(newTransfer.address, newTransfer.transfer.assetId, mapAssetAddressAmount.at(pair))) { + return error("%s : %s", __func__, "_Failed Writing address balance to database"); + } + } + } + ClearDirtyCache(); + return true; + } catch (const std::runtime_error &e) { + return error("%s : %s ", __func__, std::string("System error while flushing assets: ") + e.what()); + } +} + +bool CAssetsCache::Flush() { + if (!passetsCache) + return error("%s: Couldn't find passetsCache pointer while trying to flush assets cache", __func__); + + try { + for (auto &item: NewAssetsToRemove) { + if (passetsCache->NewAssetsToAdd.count(item)) + passetsCache->NewAssetsToAdd.erase(item); + passetsCache->NewAssetsToRemove.insert(item); + } + + for (auto &item: NewAssetsToAdd) { + if (passetsCache->NewAssetsToRemove.count(item)) + passetsCache->NewAssetsToRemove.erase(item); + passetsCache->NewAssetsToAdd.insert(item); + } + + for (auto &item: NewAssetsTransferToAdd) { + if (passetsCache->NewAssetsTranferToRemove.count(item)) + passetsCache->NewAssetsTranferToRemove.erase(item); + passetsCache->NewAssetsTransferToAdd.insert(item); + } + + for (auto &item: NewAssetsTranferToRemove) { + if (passetsCache->NewAssetsTransferToAdd.count(item)) + passetsCache->NewAssetsTransferToAdd.erase(item); + passetsCache->NewAssetsTranferToRemove.insert(item); + } + + for (auto &item : mapAssetAddressAmount) + passetsCache->mapAssetAddressAmount[item.first] = item.second; + + for (auto &item: mapAsset) + passetsCache->mapAsset[item.first] = item.second; + + for (auto &item: mapAssetId) + passetsCache->mapAssetId[item.first] = item.second; + + return true; + + } catch (const std::runtime_error &e) { + return error("%s : %s ", __func__, std::string("System error while flushing assets: ") + e.what()); + } +} + +void AddAssets(const CTransaction &tx, int nHeight, CAssetsCache *assetCache, + std::pair *undoAssetData) { + if (Updates().IsAssetsActive(::ChainActive().Tip()) && assetCache) { + if (tx.nType == TRANSACTION_NEW_ASSET) { + CNewAssetTx assetTx; + if (GetTxPayload(tx, assetTx)) { + assetCache->InsertAsset(assetTx, tx.GetHash().ToString(), nHeight); + } + } else if (tx.nType == TRANSACTION_UPDATE_ASSET) { + CUpdateAssetTx assetTx; + if (GetTxPayload(tx, assetTx)) { + CAssetMetaData asset; + if (!assetCache->GetAssetMetaData(assetTx.assetId, asset)) + return; + assetCache->UpdateAsset(assetTx); + undoAssetData->first = assetTx.assetId; // Asset Name + undoAssetData->second = CBlockAssetUndo{false, asset.circulatingSupply, + asset.mintCount, + asset.updatable, + asset.referenceHash, + asset.type, + asset.targetAddress, + asset.issueFrequency, + asset.amount, + asset.ownerAddress, + asset.collateralAddress}; + } + } else if (tx.nType == TRANSACTION_MINT_ASSET) { + CMintAssetTx assetTx; + if (GetTxPayload(tx, assetTx)) { + CAmount amount = 0; + for (auto out: tx.vout) { + if (out.scriptPubKey.IsAssetScript()) { + CAssetTransfer assetTransfer; + if (GetTransferAsset(out.scriptPubKey, assetTransfer)) + amount += assetTransfer.nAmount; + } + } + CAssetMetaData asset; + if (!assetCache->GetAssetMetaData(assetTx.assetId, asset)) + return; + assetCache->UpdateAsset(assetTx.assetId, amount); // Update circulating supply + undoAssetData->first = assetTx.assetId; // Asset Name + undoAssetData->second = CBlockAssetUndo{true, asset.circulatingSupply, + asset.mintCount, + asset.updatable, + asset.referenceHash, + asset.type, + asset.targetAddress, + asset.issueFrequency, + asset.amount, + asset.ownerAddress, + asset.collateralAddress}; + } + } + //process asset transaction in order to track address balances + if (fAssetIndex) { + for (size_t i = 0; i < tx.vout.size(); ++i) { + if (tx.vout[i].scriptPubKey.IsAssetScript()) { + COutPoint out(tx.GetHash(), i); + assetCache->AddAssetBlance(tx.vout[i].scriptPubKey, out); + } + } + } + } +} + +bool GetAssetData(const CScript &script, CAssetOutputEntry &data) { + if (!script.IsAssetScript()) { + return false; + } + CAssetTransfer transfer; + if (GetTransferAsset(script, transfer)) { + data.nAmount = transfer.nAmount; + ExtractDestination(script, data.destination); + data.assetId = transfer.assetId; + data.isUnique = transfer.isUnique; + data.uniqueId = transfer.uniqueId; + return true; + } + return false; +} + +bool validateAmount(const CAmount nAmount, const uint16_t decimalPoint) { + if (nAmount % int64_t(pow(10, (8 - decimalPoint))) != 0) { + return false; + } + return true; +} + +bool validateAmount(const std::string &assetId, const CAmount nAmount) { + CAssetMetaData asset; + if (!passetsCache->GetAssetMetaData(assetId, asset)) + return false; //this should never happen + + return validateAmount(nAmount, asset.decimalPoint); +} + +// Combine two pairs if their elements match +inline bool combineEntry(std::pair entry, std::vector> &newUniqueIds) { + for (auto &it : newUniqueIds) { + if (it.first == entry.second){ + it.first = entry.first; + return true; + } + if (it.second == entry.first){ + it.second = entry.second; + return true; + } + } + return false; +} + +// Function to combine pairs with matching starts or ends +std::vector> combineUniqueIdPairs(const std::vector>& UniqueIds) { + std::vector> newUniqueIds = UniqueIds; + bool hasChanges = true; + + while(hasChanges){ + hasChanges = false; + + std::vector> tmpUniqueIds = newUniqueIds; + newUniqueIds.clear(); + while (!tmpUniqueIds.empty()){ + std::pair entry = tmpUniqueIds.back(); + tmpUniqueIds.pop_back(); + if (combineEntry(entry, newUniqueIds)){ + hasChanges = true; + } else { + newUniqueIds.push_back(entry); + } + } + } + + return newUniqueIds; +} \ No newline at end of file diff --git a/src/assets/assets.h b/src/assets/assets.h new file mode 100644 index 0000000000..a99a36db75 --- /dev/null +++ b/src/assets/assets.h @@ -0,0 +1,243 @@ +// Copyright (c) 2021-2023 The Raptoreum developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef RAPTOREUM_ASSETS_H +#define RAPTOREUM_ASSETS_H + +#include +#include +#include +#include +#include + +class CNewAssetTx; + +class CUpdateAssetTx; + +class CMintAssetTx; + +class UniValue; + +struct CAssetOutputEntry; +struct CBlockAssetUndo; + +#define MAX_CACHE_ASSETS_SIZE 2500 + +CAmount getAssetsFeesCoin(); + +uint16_t getAssetsFees(); + +bool IsAssetNameValid(std::string name, bool isRoot=false); + +bool GetAssetId(const CScript &script, std::string &assetId); + +bool validateAmount(const CAmount nAmount, const uint16_t decimalPoint); + +bool validateAmount(const std::string &assetId, const CAmount nAmount); + +class CAssetMetaData { +public: + std::string assetId; //Transaction hash of asset creation + CAmount circulatingSupply; //update every mint transaction. + uint16_t mintCount; + std::string name; + bool isRoot = false; + bool updatable = false; //if true this asset meta can be modify using assetTx update process. + bool isUnique = false; //true if this is asset is unique it has an identity per token (NFT flag) + uint8_t decimalPoint = 0; + uint16_t maxMintCount; + std::string referenceHash; //hash of the underlying physical or digital assets, IPFS hash can be used here. + uint16_t fee; // fee was paid for this asset creation in addition to miner fee. it is a whole non-decimal point value. + // distribution + uint8_t type; //manual, coinbase, address, schedule + CKeyID targetAddress; + uint8_t issueFrequency; + CAmount amount; + CKeyID ownerAddress; + CKeyID collateralAddress; + + CAssetMetaData() { + SetNull(); + } + + CAssetMetaData(const std::string txid, const CNewAssetTx assetTx); + + SERIALIZE_METHODS(CAssetMetaData, obj + ) + { + READWRITE(obj.assetId, obj.circulatingSupply, obj.mintCount, obj.name, obj.isRoot, obj.updatable, + obj.isUnique, obj.maxMintCount, obj.decimalPoint, obj.referenceHash, obj.fee, + obj.type, obj.targetAddress, obj.issueFrequency, obj.amount, obj.ownerAddress, + obj.collateralAddress); + } + + void SetNull() { + assetId = ""; + circulatingSupply = CAmount(-1); + mintCount = uint16_t(-1); + name = ""; + isRoot = false; + updatable = false; + isUnique = false; + decimalPoint = uint8_t(-1); + referenceHash = ""; + maxMintCount = uint16_t(-1); + fee = uint8_t(-1); + type = uint8_t(-1); + targetAddress = CKeyID(); + issueFrequency = uint8_t(-1); + amount = 0; + ownerAddress = CKeyID(); + collateralAddress = CKeyID(); + } + + void ToJson(UniValue &obj) const; +}; + +class CDatabaseAssetData { +public: + CAssetMetaData asset; + int blockHeight; + uint256 blockHash; + + CDatabaseAssetData(const CAssetMetaData &asset, const int &nHeight, const uint256 &blockHash); + + CDatabaseAssetData(); + + void SetNull() { + asset.SetNull(); + blockHeight = -1; + blockHash = uint256(); + } + + bool operator<(const CDatabaseAssetData &rhs) const { + return asset.assetId < rhs.asset.assetId; + } + + SERIALIZE_METHODS(CDatabaseAssetData, obj + ) + { + READWRITE(obj.asset, obj.blockHeight, obj.blockHash); + } +}; + +struct CAssetTransferEntry +{ + CAssetTransfer transfer; + std::string address; + COutPoint out; + + CAssetTransferEntry(const CAssetTransfer& transfer, const std::string& address, const COutPoint& out) + { + this->transfer = transfer; + this->address = address; + this->out = out; + } + + bool operator<(const CAssetTransferEntry& rhs ) const + { + return out < rhs.out; + } +}; + +class CAssets { +public: + std::map mapAsset; + std::map mapAssetId; + + std::map , CAmount128> mapAssetAddressAmount; + + CAssets(const CAssets &assets) { + this->mapAsset = assets.mapAsset; + this->mapAssetId = assets.mapAssetId; + this->mapAssetAddressAmount = assets.mapAssetAddressAmount; + } + + CAssets &operator=(const CAssets &other) { + mapAsset = other.mapAsset; + mapAssetId = other.mapAssetId; + mapAssetAddressAmount = other.mapAssetAddressAmount; + return *this; + } + + CAssets() { + SetNull(); + } + + void SetNull() { + mapAsset.clear(); + mapAssetId.clear(); + mapAssetAddressAmount.clear(); + } +}; + +class CAssetsCache : public CAssets { +public: + std::set NewAssetsToRemove; + std::set NewAssetsToAdd; + + std::set NewAssetsTranferToRemove; + std::set NewAssetsTransferToAdd; + + CAssetsCache() : + CAssets() { + SetNull(); + ClearDirtyCache(); + } + + CAssetsCache(CAssetsCache &cache) : + CAssets(cache) { + this->NewAssetsToRemove = cache.NewAssetsToRemove; + this->NewAssetsToAdd = cache.NewAssetsToAdd; + + this->NewAssetsTranferToRemove = cache.NewAssetsTranferToRemove; + this->NewAssetsTransferToAdd = cache.NewAssetsTransferToAdd; + } + + bool InsertAsset(CNewAssetTx newAsset, std::string assetId, int nHeight); + + bool UpdateAsset(CUpdateAssetTx upAsset); + + bool UpdateAsset(std::string assetId, CAmount amount); + + void AddAssetBlance(const CScript &script, const COutPoint &out); + //undo asset + bool RemoveAsset(std::string assetId); + + void RemoveAddressBalance(const CScript &script, const COutPoint &out); + + bool UndoUpdateAsset(const CUpdateAssetTx upAsset, + const std::vector > &vUndoData); + + bool + UndoMintAsset(const CMintAssetTx assetTx, const std::vector > &vUndoData); + + bool CheckIfAssetExists(std::string assetId); + + bool GetAssetMetaData(std::string assetId, CAssetMetaData &asset); + + bool GetAssetId(std::string name, std::string &assetId); + + bool Flush(); + + bool DumpCacheToDatabase(); + + void ClearDirtyCache() { + NewAssetsToAdd.clear(); + NewAssetsToRemove.clear(); + + NewAssetsTransferToAdd.clear(); + NewAssetsTranferToRemove.clear(); + } +}; + +void AddAssets(const CTransaction &tx, int nHeight, CAssetsCache *assetCache = nullptr, + std::pair *undoAssetData = nullptr); + +bool GetAssetData(const CScript &script, CAssetOutputEntry &data); + +//common function used by tx_verify and wallet +std::vector> combineUniqueIdPairs(const std::vector>& UniqueIds); + +#endif //RAPTOREUM_ASSETS_H diff --git a/src/assets/assetsdb.cpp b/src/assets/assetsdb.cpp new file mode 100644 index 0000000000..2125529d6b --- /dev/null +++ b/src/assets/assetsdb.cpp @@ -0,0 +1,333 @@ +// Copyright (c) 2017-2019 The Raven Core developers +// Copyright (c) 2021-2023 The Raptoreum developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "validation.h" +#include +#include +#include +#include + + + +
+ + + +)DELIM"; +} + +char const* json() noexcept { + return R"DELIM({ + "results": [ +{{#result}} { + "title": "{{title}}", + "name": "{{name}}", + "unit": "{{unit}}", + "batch": {{batch}}, + "complexityN": {{complexityN}}, + "epochs": {{epochs}}, + "clockResolution": {{clockResolution}}, + "clockResolutionMultiple": {{clockResolutionMultiple}}, + "maxEpochTime": {{maxEpochTime}}, + "minEpochTime": {{minEpochTime}}, + "minEpochIterations": {{minEpochIterations}}, + "epochIterations": {{epochIterations}}, + "warmup": {{warmup}}, + "relative": {{relative}}, + "median(elapsed)": {{median(elapsed)}}, + "medianAbsolutePercentError(elapsed)": {{medianAbsolutePercentError(elapsed)}}, + "median(instructions)": {{median(instructions)}}, + "medianAbsolutePercentError(instructions)": {{medianAbsolutePercentError(instructions)}}, + "median(cpucycles)": {{median(cpucycles)}}, + "median(contextswitches)": {{median(contextswitches)}}, + "median(pagefaults)": {{median(pagefaults)}}, + "median(branchinstructions)": {{median(branchinstructions)}}, + "median(branchmisses)": {{median(branchmisses)}}, + "totalTime": {{sumProduct(iterations, elapsed)}}, + "measurements": [ +{{#measurement}} { + "iterations": {{iterations}}, + "elapsed": {{elapsed}}, + "pagefaults": {{pagefaults}}, + "cpucycles": {{cpucycles}}, + "contextswitches": {{contextswitches}}, + "instructions": {{instructions}}, + "branchinstructions": {{branchinstructions}}, + "branchmisses": {{branchmisses}} + }{{^-last}},{{/-last}} +{{/measurement}} ] + }{{^-last}},{{/-last}} +{{/result}} ] +})DELIM"; +} + +ANKERL_NANOBENCH(IGNORE_PADDED_PUSH) +struct Node { + enum class Type { tag, content, section, inverted_section }; + + char const* begin; + char const* end; + std::vector children; + Type type; + + template + // NOLINTNEXTLINE(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays) + bool operator==(char const (&str)[N]) const noexcept { + return static_cast(std::distance(begin, end) + 1) == N && 0 == strncmp(str, begin, N - 1); + } +}; +ANKERL_NANOBENCH(IGNORE_PADDED_POP) + +static std::vector parseMustacheTemplate(char const** tpl) { + std::vector nodes; + + while (true) { + auto begin = std::strstr(*tpl, "{{"); + auto end = begin; + if (begin != nullptr) { + begin += 2; + end = std::strstr(begin, "}}"); + } + + if (begin == nullptr || end == nullptr) { + // nothing found, finish node + nodes.emplace_back(Node{*tpl, *tpl + std::strlen(*tpl), std::vector{}, Node::Type::content}); + return nodes; + } + + nodes.emplace_back(Node{*tpl, begin - 2, std::vector{}, Node::Type::content}); + + // we found a tag + *tpl = end + 2; + switch (*begin) { + case '/': + // finished! bail out + return nodes; + + case '#': + nodes.emplace_back(Node{begin + 1, end, parseMustacheTemplate(tpl), Node::Type::section}); + break; + + case '^': + nodes.emplace_back(Node{begin + 1, end, parseMustacheTemplate(tpl), Node::Type::inverted_section}); + break; + + default: + nodes.emplace_back(Node{begin, end, std::vector{}, Node::Type::tag}); + break; + } + } +} + +static bool generateFirstLast(Node const& n, size_t idx, size_t size, std::ostream& out) { + bool matchFirst = n == "-first"; + bool matchLast = n == "-last"; + if (!matchFirst && !matchLast) { + return false; + } + + bool doWrite = false; + if (n.type == Node::Type::section) { + doWrite = (matchFirst && idx == 0) || (matchLast && idx == size - 1); + } else if (n.type == Node::Type::inverted_section) { + doWrite = (matchFirst && idx != 0) || (matchLast && idx != size - 1); + } + + if (doWrite) { + for (auto const& child : n.children) { + if (child.type == Node::Type::content) { + out.write(child.begin, std::distance(child.begin, child.end)); + } + } + } + return true; +} + +static bool matchCmdArgs(std::string const& str, std::vector& matchResult) { + matchResult.clear(); + auto idxOpen = str.find('('); + auto idxClose = str.find(')', idxOpen); + if (idxClose == std::string::npos) { + return false; + } + + matchResult.emplace_back(str.substr(0, idxOpen)); + + // split by comma + matchResult.emplace_back(std::string{}); + for (size_t i = idxOpen + 1; i != idxClose; ++i) { + if (str[i] == ' ' || str[i] == '\t') { + // skip whitespace + continue; + } + if (str[i] == ',') { + // got a comma => new string + matchResult.emplace_back(std::string{}); + continue; + } + // no whitespace no comma, append + matchResult.back() += str[i]; + } + return true; +} + +static bool generateConfigTag(Node const& n, Config const& config, std::ostream& out) { + using detail::d; + + if (n == "title") { + out << config.mBenchmarkTitle; + return true; + } else if (n == "name") { + out << config.mBenchmarkName; + return true; + } else if (n == "unit") { + out << config.mUnit; + return true; + } else if (n == "batch") { + out << config.mBatch; + return true; + } else if (n == "complexityN") { + out << config.mComplexityN; + return true; + } else if (n == "epochs") { + out << config.mNumEpochs; + return true; + } else if (n == "clockResolution") { + out << d(detail::clockResolution()); + return true; + } else if (n == "clockResolutionMultiple") { + out << config.mClockResolutionMultiple; + return true; + } else if (n == "maxEpochTime") { + out << d(config.mMaxEpochTime); + return true; + } else if (n == "minEpochTime") { + out << d(config.mMinEpochTime); + return true; + } else if (n == "minEpochIterations") { + out << config.mMinEpochIterations; + return true; + } else if (n == "epochIterations") { + out << config.mEpochIterations; + return true; + } else if (n == "warmup") { + out << config.mWarmup; + return true; + } else if (n == "relative") { + out << config.mIsRelative; + return true; + } + return false; +} + +static std::ostream& generateResultTag(Node const& n, Result const& r, std::ostream& out) { + if (generateConfigTag(n, r.config(), out)) { + return out; + } + // match e.g. "median(elapsed)" + // g++ 4.8 doesn't implement std::regex :( + // static std::regex const regOpArg1("^([a-zA-Z]+)\\(([a-zA-Z]*)\\)$"); + // std::cmatch matchResult; + // if (std::regex_match(n.begin, n.end, matchResult, regOpArg1)) { + std::vector matchResult; + if (matchCmdArgs(std::string(n.begin, n.end), matchResult)) { + if (matchResult.size() == 2) { + auto m = Result::fromString(matchResult[1]); + if (m == Result::Measure::_size) { + return out << 0.0; + } + + if (matchResult[0] == "median") { + return out << r.median(m); + } + if (matchResult[0] == "average") { + return out << r.average(m); + } + if (matchResult[0] == "medianAbsolutePercentError") { + return out << r.medianAbsolutePercentError(m); + } + if (matchResult[0] == "sum") { + return out << r.sum(m); + } + if (matchResult[0] == "minimum") { + return out << r.minimum(m); + } + if (matchResult[0] == "maximum") { + return out << r.maximum(m); + } + } else if (matchResult.size() == 3) { + auto m1 = Result::fromString(matchResult[1]); + auto m2 = Result::fromString(matchResult[2]); + if (m1 == Result::Measure::_size || m2 == Result::Measure::_size) { + return out << 0.0; + } + + if (matchResult[0] == "sumProduct") { + return out << r.sumProduct(m1, m2); + } + } + } + + // match e.g. "sumProduct(elapsed, iterations)" + // static std::regex const regOpArg2("^([a-zA-Z]+)\\(([a-zA-Z]*)\\s*,\\s+([a-zA-Z]*)\\)$"); + + // nothing matches :( + throw std::runtime_error("command '" + std::string(n.begin, n.end) + "' not understood"); +} + +static void generateResultMeasurement(std::vector const& nodes, size_t idx, Result const& r, std::ostream& out) { + for (auto const& n : nodes) { + if (!generateFirstLast(n, idx, r.size(), out)) { + ANKERL_NANOBENCH_LOG("n.type=" << static_cast(n.type)); + switch (n.type) { + case Node::Type::content: + out.write(n.begin, std::distance(n.begin, n.end)); + break; + + case Node::Type::inverted_section: + throw std::runtime_error("got a inverted section inside measurement"); + + case Node::Type::section: + throw std::runtime_error("got a section inside measurement"); + + case Node::Type::tag: { + auto m = Result::fromString(std::string(n.begin, n.end)); + if (m == Result::Measure::_size || !r.has(m)) { + out << 0.0; + } else { + out << r.get(idx, m); + } + break; + } + } + } + } +} + +static void generateResult(std::vector const& nodes, size_t idx, std::vector const& results, std::ostream& out) { + auto const& r = results[idx]; + for (auto const& n : nodes) { + if (!generateFirstLast(n, idx, results.size(), out)) { + ANKERL_NANOBENCH_LOG("n.type=" << static_cast(n.type)); + switch (n.type) { + case Node::Type::content: + out.write(n.begin, std::distance(n.begin, n.end)); + break; + + case Node::Type::inverted_section: + throw std::runtime_error("got a inverted section inside result"); + + case Node::Type::section: + if (n == "measurement") { + for (size_t i = 0; i < r.size(); ++i) { + generateResultMeasurement(n.children, i, r, out); + } + } else { + throw std::runtime_error("got a section inside result"); + } + break; + + case Node::Type::tag: + generateResultTag(n, r, out); + break; + } + } + } +} + +} // namespace templates + +// helper stuff that only intended to be used internally +namespace detail { + +char const* getEnv(char const* name); +bool isEndlessRunning(std::string const& name); + +template +T parseFile(std::string const& filename); + +void gatherStabilityInformation(std::vector& warnings, std::vector& recommendations); +void printStabilityInformationOnce(std::ostream* os); + +// remembers the last table settings used. When it changes, a new table header is automatically written for the new entry. +uint64_t& singletonHeaderHash() noexcept; + +// determines resolution of the given clock. This is done by measuring multiple times and returning the minimum time difference. +Clock::duration calcClockResolution(size_t numEvaluations) noexcept; + +// formatting utilities +namespace fmt { + +// adds thousands separator to numbers +ANKERL_NANOBENCH(IGNORE_PADDED_PUSH) +class NumSep : public std::numpunct { +public: + explicit NumSep(char sep); + char do_thousands_sep() const override; + std::string do_grouping() const override; + +private: + char mSep; +}; +ANKERL_NANOBENCH(IGNORE_PADDED_POP) + +// RAII to save & restore a stream's state +ANKERL_NANOBENCH(IGNORE_PADDED_PUSH) +class StreamStateRestorer { +public: + explicit StreamStateRestorer(std::ostream& s); + ~StreamStateRestorer(); + + // sets back all stream info that we remembered at construction + void restore(); + + // don't allow copying / moving + StreamStateRestorer(StreamStateRestorer const&) = delete; + StreamStateRestorer& operator=(StreamStateRestorer const&) = delete; + StreamStateRestorer(StreamStateRestorer&&) = delete; + StreamStateRestorer& operator=(StreamStateRestorer&&) = delete; + +private: + std::ostream& mStream; + std::locale mLocale; + std::streamsize const mPrecision; + std::streamsize const mWidth; + std::ostream::char_type const mFill; + std::ostream::fmtflags const mFmtFlags; +}; +ANKERL_NANOBENCH(IGNORE_PADDED_POP) + +// Number formatter +class Number { +public: + Number(int width, int precision, double value); + Number(int width, int precision, int64_t value); + std::string to_s() const; + +private: + friend std::ostream& operator<<(std::ostream& os, Number const& n); + std::ostream& write(std::ostream& os) const; + + int mWidth; + int mPrecision; + double mValue; +}; + +// helper replacement for std::to_string of signed/unsigned numbers so we are locale independent +std::string to_s(uint64_t s); + +std::ostream& operator<<(std::ostream& os, Number const& n); + +class MarkDownColumn { +public: + MarkDownColumn(int w, int prec, std::string const& tit, std::string const& suff, double val); + std::string title() const; + std::string separator() const; + std::string invalid() const; + std::string value() const; + +private: + int mWidth; + int mPrecision; + std::string mTitle; + std::string mSuffix; + double mValue; +}; + +// Formats any text as markdown code, escaping backticks. +class MarkDownCode { +public: + explicit MarkDownCode(std::string const& what); + +private: + friend std::ostream& operator<<(std::ostream& os, MarkDownCode const& mdCode); + std::ostream& write(std::ostream& os) const; + + std::string mWhat{}; +}; + +std::ostream& operator<<(std::ostream& os, MarkDownCode const& mdCode); + +} // namespace fmt +} // namespace detail +} // namespace nanobench +} // namespace ankerl + +// implementation ///////////////////////////////////////////////////////////////////////////////// + +namespace ankerl { +namespace nanobench { + +void render(char const* mustacheTemplate, std::vector const& results, std::ostream& out) { + detail::fmt::StreamStateRestorer restorer(out); + + out.precision(std::numeric_limits::digits10); + auto nodes = templates::parseMustacheTemplate(&mustacheTemplate); + + for (auto const& n : nodes) { + ANKERL_NANOBENCH_LOG("n.type=" << static_cast(n.type)); + switch (n.type) { + case templates::Node::Type::content: + out.write(n.begin, std::distance(n.begin, n.end)); + break; + + case templates::Node::Type::inverted_section: + throw std::runtime_error("unknown list '" + std::string(n.begin, n.end) + "'"); + + case templates::Node::Type::section: + if (n == "result") { + const size_t nbResults = results.size(); + for (size_t i = 0; i < nbResults; ++i) { + generateResult(n.children, i, results, out); + } + } else { + throw std::runtime_error("unknown section '" + std::string(n.begin, n.end) + "'"); + } + break; + + case templates::Node::Type::tag: + // This just uses the last result's config. + if (!generateConfigTag(n, results.back().config(), out)) { + throw std::runtime_error("unknown tag '" + std::string(n.begin, n.end) + "'"); + } + break; + } + } +} + +void render(char const* mustacheTemplate, const Bench& bench, std::ostream& out) { + render(mustacheTemplate, bench.results(), out); +} + +namespace detail { + +PerformanceCounters& performanceCounters() { +# if defined(__clang__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wexit-time-destructors" +# endif + static PerformanceCounters pc; +# if defined(__clang__) +# pragma clang diagnostic pop +# endif + return pc; +} + +// Windows version of doNotOptimizeAway +// see https://github.com/google/benchmark/blob/master/include/benchmark/benchmark.h#L307 +// see https://github.com/facebook/folly/blob/master/folly/Benchmark.h#L280 +// see https://docs.microsoft.com/en-us/cpp/preprocessor/optimize +# if defined(_MSC_VER) +# pragma optimize("", off) +void doNotOptimizeAwaySink(void const*) {} +# pragma optimize("", on) +# endif + +template +T parseFile(std::string const& filename) { + std::ifstream fin(filename); + T num{}; + fin >> num; + return num; +} + +char const* getEnv(char const* name) { +# if defined(_MSC_VER) +# pragma warning(push) +# pragma warning(disable : 4996) // getenv': This function or variable may be unsafe. +# endif + return std::getenv(name); +# if defined(_MSC_VER) +# pragma warning(pop) +# endif +} + +bool isEndlessRunning(std::string const& name) { + auto endless = getEnv("NANOBENCH_ENDLESS"); + return nullptr != endless && endless == name; +} + +void gatherStabilityInformation(std::vector& warnings, std::vector& recommendations) { + warnings.clear(); + recommendations.clear(); + + bool recommendCheckFlags = false; + +# if defined(DEBUG) + warnings.emplace_back("DEBUG defined"); + recommendCheckFlags = true; +# endif + + bool recommendPyPerf = false; +# if defined(__linux__) + auto nprocs = sysconf(_SC_NPROCESSORS_CONF); + if (nprocs <= 0) { + warnings.emplace_back("couldn't figure out number of processors - no governor, turbo check possible"); + } else { + + // check frequency scaling + for (long id = 0; id < nprocs; ++id) { + auto idStr = detail::fmt::to_s(static_cast(id)); + auto sysCpu = "/sys/devices/system/cpu/cpu" + idStr; + auto minFreq = parseFile(sysCpu + "/cpufreq/scaling_min_freq"); + auto maxFreq = parseFile(sysCpu + "/cpufreq/scaling_max_freq"); + if (minFreq != maxFreq) { + auto minMHz = static_cast(minFreq) / 1000.0; + auto maxMHz = static_cast(maxFreq) / 1000.0; + warnings.emplace_back("CPU frequency scaling enabled: CPU " + idStr + " between " + + detail::fmt::Number(1, 1, minMHz).to_s() + " and " + detail::fmt::Number(1, 1, maxMHz).to_s() + + " MHz"); + recommendPyPerf = true; + break; + } + } + + auto currentGovernor = parseFile("/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"); + if ("performance" != currentGovernor) { + warnings.emplace_back("CPU governor is '" + currentGovernor + "' but should be 'performance'"); + recommendPyPerf = true; + } + + if (0 == parseFile("/sys/devices/system/cpu/intel_pstate/no_turbo")) { + warnings.emplace_back("Turbo is enabled, CPU frequency will fluctuate"); + recommendPyPerf = true; + } + } +# endif + + if (recommendCheckFlags) { + recommendations.emplace_back("Make sure you compile for Release"); + } + if (recommendPyPerf) { + recommendations.emplace_back("Use 'pyperf system tune' before benchmarking. See https://github.com/vstinner/pyperf"); + } +} + +void printStabilityInformationOnce(std::ostream* outStream) { + static bool shouldPrint = true; + if (shouldPrint && outStream) { + auto& os = *outStream; + shouldPrint = false; + std::vector warnings; + std::vector recommendations; + gatherStabilityInformation(warnings, recommendations); + if (warnings.empty()) { + return; + } + + os << "Warning, results might be unstable:" << std::endl; + for (auto const& w : warnings) { + os << "* " << w << std::endl; + } + + os << std::endl << "Recommendations" << std::endl; + for (auto const& r : recommendations) { + os << "* " << r << std::endl; + } + } +} + +// remembers the last table settings used. When it changes, a new table header is automatically written for the new entry. +uint64_t& singletonHeaderHash() noexcept { + static uint64_t sHeaderHash{}; + return sHeaderHash; +} + +ANKERL_NANOBENCH_NO_SANITIZE("integer") +inline uint64_t fnv1a(std::string const& str) noexcept { + auto val = UINT64_C(14695981039346656037); + for (auto c : str) { + val = (val ^ static_cast(c)) * UINT64_C(1099511628211); + } + return val; +} + +ANKERL_NANOBENCH_NO_SANITIZE("integer") +inline uint64_t hash_combine(uint64_t seed, uint64_t val) { + return seed ^ (val + UINT64_C(0x9e3779b9) + (seed << 6U) + (seed >> 2U)); +} + +// determines resolution of the given clock. This is done by measuring multiple times and returning the minimum time difference. +Clock::duration calcClockResolution(size_t numEvaluations) noexcept { + auto bestDuration = Clock::duration::max(); + Clock::time_point tBegin; + Clock::time_point tEnd; + for (size_t i = 0; i < numEvaluations; ++i) { + tBegin = Clock::now(); + do { + tEnd = Clock::now(); + } while (tBegin == tEnd); + bestDuration = (std::min)(bestDuration, tEnd - tBegin); + } + return bestDuration; +} + +// Calculates clock resolution once, and remembers the result +Clock::duration clockResolution() noexcept { + static Clock::duration sResolution = calcClockResolution(20); + return sResolution; +} + +ANKERL_NANOBENCH(IGNORE_PADDED_PUSH) +struct IterationLogic::Impl { + enum class State { warmup, upscaling_runtime, measuring, endless }; + + explicit Impl(Bench const& bench) + : mBench(bench) + , mResult(bench.config()) { + printStabilityInformationOnce(mBench.output()); + + // determine target runtime per epoch + mTargetRuntimePerEpoch = detail::clockResolution() * mBench.clockResolutionMultiple(); + if (mTargetRuntimePerEpoch > mBench.maxEpochTime()) { + mTargetRuntimePerEpoch = mBench.maxEpochTime(); + } + if (mTargetRuntimePerEpoch < mBench.minEpochTime()) { + mTargetRuntimePerEpoch = mBench.minEpochTime(); + } + + if (isEndlessRunning(mBench.name())) { + std::cerr << "NANOBENCH_ENDLESS set: running '" << mBench.name() << "' endlessly" << std::endl; + mNumIters = (std::numeric_limits::max)(); + mState = State::endless; + } else if (0 != mBench.warmup()) { + mNumIters = mBench.warmup(); + mState = State::warmup; + } else if (0 != mBench.epochIterations()) { + // exact number of iterations + mNumIters = mBench.epochIterations(); + mState = State::measuring; + } else { + mNumIters = mBench.minEpochIterations(); + mState = State::upscaling_runtime; + } + } + + // directly calculates new iters based on elapsed&iters, and adds a 10% noise. Makes sure we don't underflow. + ANKERL_NANOBENCH(NODISCARD) uint64_t calcBestNumIters(std::chrono::nanoseconds elapsed, uint64_t iters) noexcept { + auto doubleElapsed = d(elapsed); + auto doubleTargetRuntimePerEpoch = d(mTargetRuntimePerEpoch); + auto doubleNewIters = doubleTargetRuntimePerEpoch / doubleElapsed * d(iters); + + auto doubleMinEpochIters = d(mBench.minEpochIterations()); + if (doubleNewIters < doubleMinEpochIters) { + doubleNewIters = doubleMinEpochIters; + } + doubleNewIters *= 1.0 + 0.2 * mRng.uniform01(); + + // +0.5 for correct rounding when casting + // NOLINTNEXTLINE(bugprone-incorrect-roundings) + return static_cast(doubleNewIters + 0.5); + } + + ANKERL_NANOBENCH_NO_SANITIZE("integer") void upscale(std::chrono::nanoseconds elapsed) { + if (elapsed * 10 < mTargetRuntimePerEpoch) { + // we are far below the target runtime. Multiply iterations by 10 (with overflow check) + if (mNumIters * 10 < mNumIters) { + // overflow :-( + showResult("iterations overflow. Maybe your code got optimized away?"); + mNumIters = 0; + return; + } + mNumIters *= 10; + } else { + mNumIters = calcBestNumIters(elapsed, mNumIters); + } + } + + void add(std::chrono::nanoseconds elapsed, PerformanceCounters const& pc) noexcept { +# if defined(ANKERL_NANOBENCH_LOG_ENABLED) + auto oldIters = mNumIters; +# endif + + switch (mState) { + case State::warmup: + if (isCloseEnoughForMeasurements(elapsed)) { + // if elapsed is close enough, we can skip upscaling and go right to measurements + // still, we don't add the result to the measurements. + mState = State::measuring; + mNumIters = calcBestNumIters(elapsed, mNumIters); + } else { + // not close enough: switch to upscaling + mState = State::upscaling_runtime; + upscale(elapsed); + } + break; + + case State::upscaling_runtime: + if (isCloseEnoughForMeasurements(elapsed)) { + // if we are close enough, add measurement and switch to always measuring + mState = State::measuring; + mTotalElapsed += elapsed; + mTotalNumIters += mNumIters; + mResult.add(elapsed, mNumIters, pc); + mNumIters = calcBestNumIters(mTotalElapsed, mTotalNumIters); + } else { + upscale(elapsed); + } + break; + + case State::measuring: + // just add measurements - no questions asked. Even when runtime is low. But we can't ignore + // that fluctuation, or else we would bias the result + mTotalElapsed += elapsed; + mTotalNumIters += mNumIters; + mResult.add(elapsed, mNumIters, pc); + if (0 != mBench.epochIterations()) { + mNumIters = mBench.epochIterations(); + } else { + mNumIters = calcBestNumIters(mTotalElapsed, mTotalNumIters); + } + break; + + case State::endless: + mNumIters = (std::numeric_limits::max)(); + break; + } + + if (static_cast(mResult.size()) == mBench.epochs()) { + // we got all the results that we need, finish it + showResult(""); + mNumIters = 0; + } + + ANKERL_NANOBENCH_LOG(mBench.name() << ": " << detail::fmt::Number(20, 3, static_cast(elapsed.count())) << " elapsed, " + << detail::fmt::Number(20, 3, static_cast(mTargetRuntimePerEpoch.count())) + << " target. oldIters=" << oldIters << ", mNumIters=" << mNumIters + << ", mState=" << static_cast(mState)); + } + + void showResult(std::string const& errorMessage) const { + ANKERL_NANOBENCH_LOG(errorMessage); + + if (mBench.output() != nullptr) { + // prepare column data /////// + std::vector columns; + + auto rMedian = mResult.median(Result::Measure::elapsed); + + if (mBench.relative()) { + double d = 100.0; + if (!mBench.results().empty()) { + d = rMedian <= 0.0 ? 0.0 : mBench.results().front().median(Result::Measure::elapsed) / rMedian * 100.0; + } + columns.emplace_back(11, 1, "relative", "%", d); + } + + if (mBench.complexityN() > 0) { + columns.emplace_back(14, 0, "complexityN", "", mBench.complexityN()); + } + + columns.emplace_back(22, 2, "ns/" + mBench.unit(), "", 1e9 * rMedian / mBench.batch()); + columns.emplace_back(22, 2, mBench.unit() + "/s", "", rMedian <= 0.0 ? 0.0 : mBench.batch() / rMedian); + + double rErrorMedian = mResult.medianAbsolutePercentError(Result::Measure::elapsed); + columns.emplace_back(10, 1, "err%", "%", rErrorMedian * 100.0); + + double rInsMedian = -1.0; + if (mResult.has(Result::Measure::instructions)) { + rInsMedian = mResult.median(Result::Measure::instructions); + columns.emplace_back(18, 2, "ins/" + mBench.unit(), "", rInsMedian / mBench.batch()); + } + + double rCycMedian = -1.0; + if (mResult.has(Result::Measure::cpucycles)) { + rCycMedian = mResult.median(Result::Measure::cpucycles); + columns.emplace_back(18, 2, "cyc/" + mBench.unit(), "", rCycMedian / mBench.batch()); + } + if (rInsMedian > 0.0 && rCycMedian > 0.0) { + columns.emplace_back(9, 3, "IPC", "", rCycMedian <= 0.0 ? 0.0 : rInsMedian / rCycMedian); + } + if (mResult.has(Result::Measure::branchinstructions)) { + double rBraMedian = mResult.median(Result::Measure::branchinstructions); + columns.emplace_back(17, 2, "bra/" + mBench.unit(), "", rBraMedian / mBench.batch()); + if (mResult.has(Result::Measure::branchmisses)) { + double p = 0.0; + if (rBraMedian >= 1e-9) { + p = 100.0 * mResult.median(Result::Measure::branchmisses) / rBraMedian; + } + columns.emplace_back(10, 1, "miss%", "%", p); + } + } + + columns.emplace_back(12, 2, "total", "", mResult.sum(Result::Measure::elapsed)); + + // write everything + auto& os = *mBench.output(); + + uint64_t hash = 0; + hash = hash_combine(fnv1a(mBench.unit()), hash); + hash = hash_combine(fnv1a(mBench.title()), hash); + hash = hash_combine(mBench.relative(), hash); + hash = hash_combine(mBench.performanceCounters(), hash); + + if (hash != singletonHeaderHash()) { + singletonHeaderHash() = hash; + + // no result yet, print header + os << std::endl; + for (auto const& col : columns) { + os << col.title(); + } + os << "| " << mBench.title() << std::endl; + + for (auto const& col : columns) { + os << col.separator(); + } + os << "|:" << std::string(mBench.title().size() + 1U, '-') << std::endl; + } + + if (!errorMessage.empty()) { + for (auto const& col : columns) { + os << col.invalid(); + } + os << "| :boom: " << fmt::MarkDownCode(mBench.name()) << " (" << errorMessage << ')' << std::endl; + } else { + for (auto const& col : columns) { + os << col.value(); + } + os << "| "; + auto showUnstable = rErrorMedian >= 0.05; + if (showUnstable) { + os << ":wavy_dash: "; + } + os << fmt::MarkDownCode(mBench.name()); + if (showUnstable) { + auto avgIters = static_cast(mTotalNumIters) / static_cast(mBench.epochs()); + // NOLINTNEXTLINE(bugprone-incorrect-roundings) + auto suggestedIters = static_cast(avgIters * 10 + 0.5); + + os << " (Unstable with ~" << detail::fmt::Number(1, 1, avgIters) + << " iters. Increase `minEpochIterations` to e.g. " << suggestedIters << ")"; + } + os << std::endl; + } + } + } + + ANKERL_NANOBENCH(NODISCARD) bool isCloseEnoughForMeasurements(std::chrono::nanoseconds elapsed) const noexcept { + return elapsed * 3 >= mTargetRuntimePerEpoch * 2; + } + + uint64_t mNumIters = 1; + Bench const& mBench; + std::chrono::nanoseconds mTargetRuntimePerEpoch{}; + Result mResult; + Rng mRng{123}; + std::chrono::nanoseconds mTotalElapsed{}; + uint64_t mTotalNumIters = 0; + + State mState = State::upscaling_runtime; +}; +ANKERL_NANOBENCH(IGNORE_PADDED_POP) + +IterationLogic::IterationLogic(Bench const& bench) noexcept + : mPimpl(new Impl(bench)) {} + +IterationLogic::~IterationLogic() { + if (mPimpl) { + delete mPimpl; + } +} + +uint64_t IterationLogic::numIters() const noexcept { + ANKERL_NANOBENCH_LOG(mPimpl->mBench.name() << ": mNumIters=" << mPimpl->mNumIters); + return mPimpl->mNumIters; +} + +void IterationLogic::add(std::chrono::nanoseconds elapsed, PerformanceCounters const& pc) noexcept { + mPimpl->add(elapsed, pc); +} + +void IterationLogic::moveResultTo(std::vector& results) noexcept { + results.emplace_back(std::move(mPimpl->mResult)); +} + +# if ANKERL_NANOBENCH(PERF_COUNTERS) + +ANKERL_NANOBENCH(IGNORE_PADDED_PUSH) +class LinuxPerformanceCounters { +public: + struct Target { + Target(uint64_t* targetValue_, bool correctMeasuringOverhead_, bool correctLoopOverhead_) + : targetValue(targetValue_) + , correctMeasuringOverhead(correctMeasuringOverhead_) + , correctLoopOverhead(correctLoopOverhead_) {} + + uint64_t* targetValue{}; + bool correctMeasuringOverhead{}; + bool correctLoopOverhead{}; + }; + + ~LinuxPerformanceCounters(); + + // quick operation + inline void start() {} + + inline void stop() {} + + bool monitor(perf_sw_ids swId, Target target); + bool monitor(perf_hw_id hwId, Target target); + + bool hasError() const noexcept { + return mHasError; + } + + // Just reading data is faster than enable & disabling. + // we subtract data ourselves. + inline void beginMeasure() { + if (mHasError) { + return; + } + + // NOLINTNEXTLINE(hicpp-signed-bitwise) + mHasError = -1 == ioctl(mFd, PERF_EVENT_IOC_RESET, PERF_IOC_FLAG_GROUP); + if (mHasError) { + return; + } + + // NOLINTNEXTLINE(hicpp-signed-bitwise) + mHasError = -1 == ioctl(mFd, PERF_EVENT_IOC_ENABLE, PERF_IOC_FLAG_GROUP); + } + + inline void endMeasure() { + if (mHasError) { + return; + } + + // NOLINTNEXTLINE(hicpp-signed-bitwise) + mHasError = (-1 == ioctl(mFd, PERF_EVENT_IOC_DISABLE, PERF_IOC_FLAG_GROUP)); + if (mHasError) { + return; + } + + auto const numBytes = sizeof(uint64_t) * mCounters.size(); + auto ret = read(mFd, mCounters.data(), numBytes); + mHasError = ret != static_cast(numBytes); + } + + void updateResults(uint64_t numIters); + + // rounded integer division + template + static inline T divRounded(T a, T divisor) { + return (a + divisor / 2) / divisor; + } + + template + ANKERL_NANOBENCH_NO_SANITIZE("integer") + void calibrate(Op&& op) { + // clear current calibration data, + for (auto& v : mCalibratedOverhead) { + v = UINT64_C(0); + } + + // create new calibration data + auto newCalibration = mCalibratedOverhead; + for (auto& v : newCalibration) { + v = (std::numeric_limits::max)(); + } + for (size_t iter = 0; iter < 100; ++iter) { + beginMeasure(); + op(); + endMeasure(); + if (mHasError) { + return; + } + + for (size_t i = 0; i < newCalibration.size(); ++i) { + auto diff = mCounters[i]; + if (newCalibration[i] > diff) { + newCalibration[i] = diff; + } + } + } + + mCalibratedOverhead = std::move(newCalibration); + + { + // calibrate loop overhead. For branches & instructions this makes sense, not so much for everything else like cycles. + // marsaglia's xorshift: mov, sal/shr, xor. Times 3. + // This has the nice property that the compiler doesn't seem to be able to optimize multiple calls any further. + // see https://godbolt.org/z/49RVQ5 + uint64_t const numIters = 100000U + (std::random_device{}() & 3); + uint64_t n = numIters; + uint32_t x = 1234567; + auto fn = [&]() { + x ^= x << 13; + x ^= x >> 17; + x ^= x << 5; + }; + + beginMeasure(); + while (n-- > 0) { + fn(); + } + endMeasure(); + detail::doNotOptimizeAway(x); + auto measure1 = mCounters; + + n = numIters; + beginMeasure(); + while (n-- > 0) { + // we now run *twice* so we can easily calculate the overhead + fn(); + fn(); + } + endMeasure(); + detail::doNotOptimizeAway(x); + auto measure2 = mCounters; + + for (size_t i = 0; i < mCounters.size(); ++i) { + // factor 2 because we have two instructions per loop + auto m1 = measure1[i] > mCalibratedOverhead[i] ? measure1[i] - mCalibratedOverhead[i] : 0; + auto m2 = measure2[i] > mCalibratedOverhead[i] ? measure2[i] - mCalibratedOverhead[i] : 0; + auto overhead = m1 * 2 > m2 ? m1 * 2 - m2 : 0; + + mLoopOverhead[i] = divRounded(overhead, numIters); + } + } + } + +private: + bool monitor(uint32_t type, uint64_t eventid, Target target); + + std::map mIdToTarget{}; + + // start with minimum size of 3 for read_format + std::vector mCounters{3}; + std::vector mCalibratedOverhead{3}; + std::vector mLoopOverhead{3}; + + uint64_t mTimeEnabledNanos = 0; + uint64_t mTimeRunningNanos = 0; + int mFd = -1; + bool mHasError = false; +}; +ANKERL_NANOBENCH(IGNORE_PADDED_POP) + +LinuxPerformanceCounters::~LinuxPerformanceCounters() { + if (-1 != mFd) { + close(mFd); + } +} + +bool LinuxPerformanceCounters::monitor(perf_sw_ids swId, LinuxPerformanceCounters::Target target) { + return monitor(PERF_TYPE_SOFTWARE, swId, target); +} + +bool LinuxPerformanceCounters::monitor(perf_hw_id hwId, LinuxPerformanceCounters::Target target) { + return monitor(PERF_TYPE_HARDWARE, hwId, target); +} + +// overflow is ok, it's checked +ANKERL_NANOBENCH_NO_SANITIZE("integer") +void LinuxPerformanceCounters::updateResults(uint64_t numIters) { + // clear old data + for (auto& id_value : mIdToTarget) { + *id_value.second.targetValue = UINT64_C(0); + } + + if (mHasError) { + return; + } + + mTimeEnabledNanos = mCounters[1] - mCalibratedOverhead[1]; + mTimeRunningNanos = mCounters[2] - mCalibratedOverhead[2]; + + for (uint64_t i = 0; i < mCounters[0]; ++i) { + auto idx = static_cast(3 + i * 2 + 0); + auto id = mCounters[idx + 1U]; + + auto it = mIdToTarget.find(id); + if (it != mIdToTarget.end()) { + + auto& tgt = it->second; + *tgt.targetValue = mCounters[idx]; + if (tgt.correctMeasuringOverhead) { + if (*tgt.targetValue >= mCalibratedOverhead[idx]) { + *tgt.targetValue -= mCalibratedOverhead[idx]; + } else { + *tgt.targetValue = 0U; + } + } + if (tgt.correctLoopOverhead) { + auto correctionVal = mLoopOverhead[idx] * numIters; + if (*tgt.targetValue >= correctionVal) { + *tgt.targetValue -= correctionVal; + } else { + *tgt.targetValue = 0U; + } + } + } + } +} + +bool LinuxPerformanceCounters::monitor(uint32_t type, uint64_t eventid, Target target) { + *target.targetValue = (std::numeric_limits::max)(); + if (mHasError) { + return false; + } + + auto pea = perf_event_attr(); + std::memset(&pea, 0, sizeof(perf_event_attr)); + pea.type = type; + pea.size = sizeof(perf_event_attr); + pea.config = eventid; + pea.disabled = 1; // start counter as disabled + pea.exclude_kernel = 1; + pea.exclude_hv = 1; + + // NOLINTNEXTLINE(hicpp-signed-bitwise) + pea.read_format = PERF_FORMAT_GROUP | PERF_FORMAT_ID | PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_TOTAL_TIME_RUNNING; + + const int pid = 0; // the current process + const int cpu = -1; // all CPUs +# if defined(PERF_FLAG_FD_CLOEXEC) // since Linux 3.14 + const unsigned long flags = PERF_FLAG_FD_CLOEXEC; +# else + const unsigned long flags = 0; +# endif + + auto fd = static_cast(syscall(__NR_perf_event_open, &pea, pid, cpu, mFd, flags)); + if (-1 == fd) { + return false; + } + if (-1 == mFd) { + // first call: set to fd, and use this from now on + mFd = fd; + } + uint64_t id = 0; + // NOLINTNEXTLINE(hicpp-signed-bitwise) + if (-1 == ioctl(fd, PERF_EVENT_IOC_ID, &id)) { + // couldn't get id + return false; + } + + // insert into map, rely on the fact that map's references are constant. + mIdToTarget.emplace(id, target); + + // prepare readformat with the correct size (after the insert) + auto size = 3 + 2 * mIdToTarget.size(); + mCounters.resize(size); + mCalibratedOverhead.resize(size); + mLoopOverhead.resize(size); + + return true; +} + +PerformanceCounters::PerformanceCounters() + : mPc(new LinuxPerformanceCounters()) + , mVal() + , mHas() { + + mHas.pageFaults = mPc->monitor(PERF_COUNT_SW_PAGE_FAULTS, LinuxPerformanceCounters::Target(&mVal.pageFaults, true, false)); + mHas.cpuCycles = mPc->monitor(PERF_COUNT_HW_REF_CPU_CYCLES, LinuxPerformanceCounters::Target(&mVal.cpuCycles, true, false)); + mHas.contextSwitches = + mPc->monitor(PERF_COUNT_SW_CONTEXT_SWITCHES, LinuxPerformanceCounters::Target(&mVal.contextSwitches, true, false)); + mHas.instructions = mPc->monitor(PERF_COUNT_HW_INSTRUCTIONS, LinuxPerformanceCounters::Target(&mVal.instructions, true, true)); + mHas.branchInstructions = + mPc->monitor(PERF_COUNT_HW_BRANCH_INSTRUCTIONS, LinuxPerformanceCounters::Target(&mVal.branchInstructions, true, false)); + mHas.branchMisses = mPc->monitor(PERF_COUNT_HW_BRANCH_MISSES, LinuxPerformanceCounters::Target(&mVal.branchMisses, true, false)); + // mHas.branchMisses = false; + + mPc->start(); + mPc->calibrate([] { + auto before = ankerl::nanobench::Clock::now(); + auto after = ankerl::nanobench::Clock::now(); + (void)before; + (void)after; + }); + + if (mPc->hasError()) { + // something failed, don't monitor anything. + mHas = PerfCountSet{}; + } +} + +PerformanceCounters::~PerformanceCounters() { + if (nullptr != mPc) { + delete mPc; + } +} + +void PerformanceCounters::beginMeasure() { + mPc->beginMeasure(); +} + +void PerformanceCounters::endMeasure() { + mPc->endMeasure(); +} + +void PerformanceCounters::updateResults(uint64_t numIters) { + mPc->updateResults(numIters); +} + +# else + +PerformanceCounters::PerformanceCounters() = default; +PerformanceCounters::~PerformanceCounters() = default; +void PerformanceCounters::beginMeasure() {} +void PerformanceCounters::endMeasure() {} +void PerformanceCounters::updateResults(uint64_t) {} + +# endif + +ANKERL_NANOBENCH(NODISCARD) PerfCountSet const& PerformanceCounters::val() const noexcept { + return mVal; +} +ANKERL_NANOBENCH(NODISCARD) PerfCountSet const& PerformanceCounters::has() const noexcept { + return mHas; +} + +// formatting utilities +namespace fmt { + +// adds thousands separator to numbers +NumSep::NumSep(char sep) + : mSep(sep) {} + +char NumSep::do_thousands_sep() const { + return mSep; +} + +std::string NumSep::do_grouping() const { + return "\003"; +} + +// RAII to save & restore a stream's state +StreamStateRestorer::StreamStateRestorer(std::ostream& s) + : mStream(s) + , mLocale(s.getloc()) + , mPrecision(s.precision()) + , mWidth(s.width()) + , mFill(s.fill()) + , mFmtFlags(s.flags()) {} + +StreamStateRestorer::~StreamStateRestorer() { + restore(); +} + +// sets back all stream info that we remembered at construction +void StreamStateRestorer::restore() { + mStream.imbue(mLocale); + mStream.precision(mPrecision); + mStream.width(mWidth); + mStream.fill(mFill); + mStream.flags(mFmtFlags); +} + +Number::Number(int width, int precision, int64_t value) + : mWidth(width) + , mPrecision(precision) + , mValue(static_cast(value)) {} + +Number::Number(int width, int precision, double value) + : mWidth(width) + , mPrecision(precision) + , mValue(value) {} + +std::ostream& Number::write(std::ostream& os) const { + StreamStateRestorer restorer(os); + os.imbue(std::locale(os.getloc(), new NumSep(','))); + os << std::setw(mWidth) << std::setprecision(mPrecision) << std::fixed << mValue; + return os; +} + +std::string Number::to_s() const { + std::stringstream ss; + write(ss); + return ss.str(); +} + +std::string to_s(uint64_t n) { + std::string str; + do { + str += static_cast('0' + static_cast(n % 10)); + n /= 10; + } while (n != 0); + std::reverse(str.begin(), str.end()); + return str; +} + +std::ostream& operator<<(std::ostream& os, Number const& n) { + return n.write(os); +} + +MarkDownColumn::MarkDownColumn(int w, int prec, std::string const& tit, std::string const& suff, double val) + : mWidth(w) + , mPrecision(prec) + , mTitle(tit) + , mSuffix(suff) + , mValue(val) {} + +std::string MarkDownColumn::title() const { + std::stringstream ss; + ss << '|' << std::setw(mWidth - 2) << std::right << mTitle << ' '; + return ss.str(); +} + +std::string MarkDownColumn::separator() const { + std::string sep(static_cast(mWidth), '-'); + sep.front() = '|'; + sep.back() = ':'; + return sep; +} + +std::string MarkDownColumn::invalid() const { + std::string sep(static_cast(mWidth), ' '); + sep.front() = '|'; + sep[sep.size() - 2] = '-'; + return sep; +} + +std::string MarkDownColumn::value() const { + std::stringstream ss; + auto width = mWidth - 2 - static_cast(mSuffix.size()); + ss << '|' << Number(width, mPrecision, mValue) << mSuffix << ' '; + return ss.str(); +} + +// Formats any text as markdown code, escaping backticks. +MarkDownCode::MarkDownCode(std::string const& what) { + mWhat.reserve(what.size() + 2); + mWhat.push_back('`'); + for (char c : what) { + mWhat.push_back(c); + if ('`' == c) { + mWhat.push_back('`'); + } + } + mWhat.push_back('`'); +} + +std::ostream& MarkDownCode::write(std::ostream& os) const { + return os << mWhat; +} + +std::ostream& operator<<(std::ostream& os, MarkDownCode const& mdCode) { + return mdCode.write(os); +} +} // namespace fmt +} // namespace detail + +// provide implementation here so it's only generated once +Config::Config() = default; +Config::~Config() = default; +Config& Config::operator=(Config const&) = default; +Config& Config::operator=(Config&&) = default; +Config::Config(Config const&) = default; +Config::Config(Config&&) noexcept = default; + +// provide implementation here so it's only generated once +Result::~Result() = default; +Result& Result::operator=(Result const&) = default; +Result& Result::operator=(Result&&) = default; +Result::Result(Result const&) = default; +Result::Result(Result&&) noexcept = default; + +namespace detail { +template +inline constexpr typename std::underlying_type::type u(T val) noexcept { + return static_cast::type>(val); +} +} // namespace detail + +// Result returned after a benchmark has finished. Can be used as a baseline for relative(). +Result::Result(Config const& benchmarkConfig) + : mConfig(benchmarkConfig) + , mNameToMeasurements{detail::u(Result::Measure::_size)} {} + +void Result::add(Clock::duration totalElapsed, uint64_t iters, detail::PerformanceCounters const& pc) { + using detail::d; + using detail::u; + + double dIters = d(iters); + mNameToMeasurements[u(Result::Measure::iterations)].push_back(dIters); + + mNameToMeasurements[u(Result::Measure::elapsed)].push_back(d(totalElapsed) / dIters); + if (pc.has().pageFaults) { + mNameToMeasurements[u(Result::Measure::pagefaults)].push_back(d(pc.val().pageFaults) / dIters); + } + if (pc.has().cpuCycles) { + mNameToMeasurements[u(Result::Measure::cpucycles)].push_back(d(pc.val().cpuCycles) / dIters); + } + if (pc.has().contextSwitches) { + mNameToMeasurements[u(Result::Measure::contextswitches)].push_back(d(pc.val().contextSwitches) / dIters); + } + if (pc.has().instructions) { + mNameToMeasurements[u(Result::Measure::instructions)].push_back(d(pc.val().instructions) / dIters); + } + if (pc.has().branchInstructions) { + double branchInstructions = 0.0; + // correcting branches: remove branch introduced by the while (...) loop for each iteration. + if (pc.val().branchInstructions > iters + 1U) { + branchInstructions = d(pc.val().branchInstructions - (iters + 1U)); + } + mNameToMeasurements[u(Result::Measure::branchinstructions)].push_back(branchInstructions / dIters); + + if (pc.has().branchMisses) { + // correcting branch misses + double branchMisses = d(pc.val().branchMisses); + if (branchMisses > branchInstructions) { + // can't have branch misses when there were branches... + branchMisses = branchInstructions; + } + + // assuming at least one missed branch for the loop + branchMisses -= 1.0; + if (branchMisses < 1.0) { + branchMisses = 1.0; + } + mNameToMeasurements[u(Result::Measure::branchmisses)].push_back(branchMisses / dIters); + } + } +} + +Config const& Result::config() const noexcept { + return mConfig; +} + +inline double calcMedian(std::vector& data) { + if (data.empty()) { + return 0.0; + } + std::sort(data.begin(), data.end()); + + auto midIdx = data.size() / 2U; + if (1U == (data.size() & 1U)) { + return data[midIdx]; + } + return (data[midIdx - 1U] + data[midIdx]) / 2U; +} + +double Result::median(Measure m) const { + // create a copy so we can sort + auto data = mNameToMeasurements[detail::u(m)]; + return calcMedian(data); +} + +double Result::average(Measure m) const { + using detail::d; + auto const& data = mNameToMeasurements[detail::u(m)]; + if (data.empty()) { + return 0.0; + } + + // create a copy so we can sort + return sum(m) / d(data.size()); +} + +double Result::medianAbsolutePercentError(Measure m) const { + // create copy + auto data = mNameToMeasurements[detail::u(m)]; + + // calculates MdAPE which is the median of percentage error + // see https://www.spiderfinancial.com/support/documentation/numxl/reference-manual/forecasting-performance/mdape + auto med = calcMedian(data); + + // transform the data to absolute error + for (auto& x : data) { + x = (x - med) / x; + if (x < 0) { + x = -x; + } + } + return calcMedian(data); +} + +double Result::sum(Measure m) const noexcept { + auto const& data = mNameToMeasurements[detail::u(m)]; + return std::accumulate(data.begin(), data.end(), 0.0); +} + +double Result::sumProduct(Measure m1, Measure m2) const noexcept { + auto const& data1 = mNameToMeasurements[detail::u(m1)]; + auto const& data2 = mNameToMeasurements[detail::u(m2)]; + + if (data1.size() != data2.size()) { + return 0.0; + } + + double result = 0.0; + for (size_t i = 0, s = data1.size(); i != s; ++i) { + result += data1[i] * data2[i]; + } + return result; +} + +bool Result::has(Measure m) const noexcept { + return !mNameToMeasurements[detail::u(m)].empty(); +} + +double Result::get(size_t idx, Measure m) const { + auto const& data = mNameToMeasurements[detail::u(m)]; + return data.at(idx); +} + +bool Result::empty() const noexcept { + return 0U == size(); +} + +size_t Result::size() const noexcept { + auto const& data = mNameToMeasurements[detail::u(Measure::elapsed)]; + return data.size(); +} + +double Result::minimum(Measure m) const noexcept { + auto const& data = mNameToMeasurements[detail::u(m)]; + if (data.empty()) { + return 0.0; + } + + // here its save to assume that at least one element is there + return *std::min_element(data.begin(), data.end()); +} + +double Result::maximum(Measure m) const noexcept { + auto const& data = mNameToMeasurements[detail::u(m)]; + if (data.empty()) { + return 0.0; + } + + // here its save to assume that at least one element is there + return *std::max_element(data.begin(), data.end()); +} + +Result::Measure Result::fromString(std::string const& str) { + if (str == "elapsed") { + return Measure::elapsed; + } else if (str == "iterations") { + return Measure::iterations; + } else if (str == "pagefaults") { + return Measure::pagefaults; + } else if (str == "cpucycles") { + return Measure::cpucycles; + } else if (str == "contextswitches") { + return Measure::contextswitches; + } else if (str == "instructions") { + return Measure::instructions; + } else if (str == "branchinstructions") { + return Measure::branchinstructions; + } else if (str == "branchmisses") { + return Measure::branchmisses; + } else { + // not found, return _size + return Measure::_size; + } +} + +// Configuration of a microbenchmark. +Bench::Bench() { + mConfig.mOut = &std::cout; +} + +Bench::Bench(Bench&&) = default; +Bench& Bench::operator=(Bench&&) = default; +Bench::Bench(Bench const&) = default; +Bench& Bench::operator=(Bench const&) = default; +Bench::~Bench() noexcept = default; + +double Bench::batch() const noexcept { + return mConfig.mBatch; +} + +double Bench::complexityN() const noexcept { + return mConfig.mComplexityN; +} + +// Set a baseline to compare it to. 100% it is exactly as fast as the baseline, >100% means it is faster than the baseline, <100% +// means it is slower than the baseline. +Bench& Bench::relative(bool isRelativeEnabled) noexcept { + mConfig.mIsRelative = isRelativeEnabled; + return *this; +} +bool Bench::relative() const noexcept { + return mConfig.mIsRelative; +} + +Bench& Bench::performanceCounters(bool showPerformanceCounters) noexcept { + mConfig.mShowPerformanceCounters = showPerformanceCounters; + return *this; +} +bool Bench::performanceCounters() const noexcept { + return mConfig.mShowPerformanceCounters; +} + +// Operation unit. Defaults to "op", could be e.g. "byte" for string processing. +// If u differs from currently set unit, the stored results will be cleared. +// Use singular (byte, not bytes). +Bench& Bench::unit(char const* u) { + if (u != mConfig.mUnit) { + mResults.clear(); + } + mConfig.mUnit = u; + return *this; +} + +Bench& Bench::unit(std::string const& u) { + return unit(u.c_str()); +} + +std::string const& Bench::unit() const noexcept { + return mConfig.mUnit; +} + +// If benchmarkTitle differs from currently set title, the stored results will be cleared. +Bench& Bench::title(const char* benchmarkTitle) { + if (benchmarkTitle != mConfig.mBenchmarkTitle) { + mResults.clear(); + } + mConfig.mBenchmarkTitle = benchmarkTitle; + return *this; +} +Bench& Bench::title(std::string const& benchmarkTitle) { + if (benchmarkTitle != mConfig.mBenchmarkTitle) { + mResults.clear(); + } + mConfig.mBenchmarkTitle = benchmarkTitle; + return *this; +} + +std::string const& Bench::title() const noexcept { + return mConfig.mBenchmarkTitle; +} + +Bench& Bench::name(const char* benchmarkName) { + mConfig.mBenchmarkName = benchmarkName; + return *this; +} + +Bench& Bench::name(std::string const& benchmarkName) { + mConfig.mBenchmarkName = benchmarkName; + return *this; +} + +std::string const& Bench::name() const noexcept { + return mConfig.mBenchmarkName; +} + +// Number of epochs to evaluate. The reported result will be the median of evaluation of each epoch. +Bench& Bench::epochs(size_t numEpochs) noexcept { + mConfig.mNumEpochs = numEpochs; + return *this; +} +size_t Bench::epochs() const noexcept { + return mConfig.mNumEpochs; +} + +// Desired evaluation time is a multiple of clock resolution. Default is to be 1000 times above this measurement precision. +Bench& Bench::clockResolutionMultiple(size_t multiple) noexcept { + mConfig.mClockResolutionMultiple = multiple; + return *this; +} +size_t Bench::clockResolutionMultiple() const noexcept { + return mConfig.mClockResolutionMultiple; +} + +// Sets the maximum time each epoch should take. Default is 100ms. +Bench& Bench::maxEpochTime(std::chrono::nanoseconds t) noexcept { + mConfig.mMaxEpochTime = t; + return *this; +} +std::chrono::nanoseconds Bench::maxEpochTime() const noexcept { + return mConfig.mMaxEpochTime; +} + +// Sets the maximum time each epoch should take. Default is 100ms. +Bench& Bench::minEpochTime(std::chrono::nanoseconds t) noexcept { + mConfig.mMinEpochTime = t; + return *this; +} +std::chrono::nanoseconds Bench::minEpochTime() const noexcept { + return mConfig.mMinEpochTime; +} + +Bench& Bench::minEpochIterations(uint64_t numIters) noexcept { + mConfig.mMinEpochIterations = (numIters == 0) ? 1 : numIters; + return *this; +} +uint64_t Bench::minEpochIterations() const noexcept { + return mConfig.mMinEpochIterations; +} + +Bench& Bench::epochIterations(uint64_t numIters) noexcept { + mConfig.mEpochIterations = numIters; + return *this; +} +uint64_t Bench::epochIterations() const noexcept { + return mConfig.mEpochIterations; +} + +Bench& Bench::warmup(uint64_t numWarmupIters) noexcept { + mConfig.mWarmup = numWarmupIters; + return *this; +} +uint64_t Bench::warmup() const noexcept { + return mConfig.mWarmup; +} + +Bench& Bench::config(Config const& benchmarkConfig) { + mConfig = benchmarkConfig; + return *this; +} +Config const& Bench::config() const noexcept { + return mConfig; +} + +Bench& Bench::output(std::ostream* outstream) noexcept { + mConfig.mOut = outstream; + return *this; +} + +ANKERL_NANOBENCH(NODISCARD) std::ostream* Bench::output() const noexcept { + return mConfig.mOut; +} + +std::vector const& Bench::results() const noexcept { + return mResults; +} + +Bench& Bench::render(char const* templateContent, std::ostream& os) { + ::ankerl::nanobench::render(templateContent, *this, os); + return *this; +} + +std::vector Bench::complexityBigO() const { + std::vector bigOs; + auto rangeMeasure = BigO::collectRangeMeasure(mResults); + bigOs.emplace_back("O(1)", rangeMeasure, [](double) { + return 1.0; + }); + bigOs.emplace_back("O(n)", rangeMeasure, [](double n) { + return n; + }); + bigOs.emplace_back("O(log n)", rangeMeasure, [](double n) { + return std::log2(n); + }); + bigOs.emplace_back("O(n log n)", rangeMeasure, [](double n) { + return n * std::log2(n); + }); + bigOs.emplace_back("O(n^2)", rangeMeasure, [](double n) { + return n * n; + }); + bigOs.emplace_back("O(n^3)", rangeMeasure, [](double n) { + return n * n * n; + }); + std::sort(bigOs.begin(), bigOs.end()); + return bigOs; +} + +Rng::Rng() + : mX(0) + , mY(0) { + std::random_device rd; + std::uniform_int_distribution dist; + do { + mX = dist(rd); + mY = dist(rd); + } while (mX == 0 && mY == 0); +} + +ANKERL_NANOBENCH_NO_SANITIZE("integer") +uint64_t splitMix64(uint64_t& state) noexcept { + uint64_t z = (state += UINT64_C(0x9e3779b97f4a7c15)); + z = (z ^ (z >> 30U)) * UINT64_C(0xbf58476d1ce4e5b9); + z = (z ^ (z >> 27U)) * UINT64_C(0x94d049bb133111eb); + return z ^ (z >> 31U); +} + +// Seeded as described in romu paper (update april 2020) +Rng::Rng(uint64_t seed) noexcept + : mX(splitMix64(seed)) + , mY(splitMix64(seed)) { + for (size_t i = 0; i < 10; ++i) { + operator()(); + } +} + +// only internally used to copy the RNG. +Rng::Rng(uint64_t x, uint64_t y) noexcept + : mX(x) + , mY(y) {} + +Rng Rng::copy() const noexcept { + return Rng{mX, mY}; +} + +BigO::RangeMeasure BigO::collectRangeMeasure(std::vector const& results) { + BigO::RangeMeasure rangeMeasure; + for (auto const& result : results) { + if (result.config().mComplexityN > 0.0) { + rangeMeasure.emplace_back(result.config().mComplexityN, result.median(Result::Measure::elapsed)); + } + } + return rangeMeasure; +} + +BigO::BigO(std::string const& bigOName, RangeMeasure const& rangeMeasure) + : mName(bigOName) { + + // estimate the constant factor + double sumRangeMeasure = 0.0; + double sumRangeRange = 0.0; + + for (size_t i = 0; i < rangeMeasure.size(); ++i) { + sumRangeMeasure += rangeMeasure[i].first * rangeMeasure[i].second; + sumRangeRange += rangeMeasure[i].first * rangeMeasure[i].first; + } + mConstant = sumRangeMeasure / sumRangeRange; + + // calculate root mean square + double err = 0.0; + double sumMeasure = 0.0; + for (size_t i = 0; i < rangeMeasure.size(); ++i) { + auto diff = mConstant * rangeMeasure[i].first - rangeMeasure[i].second; + err += diff * diff; + + sumMeasure += rangeMeasure[i].second; + } + + auto n = static_cast(rangeMeasure.size()); + auto mean = sumMeasure / n; + mNormalizedRootMeanSquare = std::sqrt(err / n) / mean; +} + +BigO::BigO(const char* bigOName, RangeMeasure const& rangeMeasure) + : BigO(std::string(bigOName), rangeMeasure) {} + +std::string const& BigO::name() const noexcept { + return mName; +} + +double BigO::constant() const noexcept { + return mConstant; +} + +double BigO::normalizedRootMeanSquare() const noexcept { + return mNormalizedRootMeanSquare; +} + +bool BigO::operator<(BigO const& other) const noexcept { + return std::tie(mNormalizedRootMeanSquare, mName) < std::tie(other.mNormalizedRootMeanSquare, other.mName); +} + +std::ostream& operator<<(std::ostream& os, BigO const& bigO) { + return os << bigO.constant() << " * " << bigO.name() << ", rms=" << bigO.normalizedRootMeanSquare(); +} + +std::ostream& operator<<(std::ostream& os, std::vector const& bigOs) { + detail::fmt::StreamStateRestorer restorer(os); + os << std::endl << "| coefficient | err% | complexity" << std::endl << "|--------------:|-------:|------------" << std::endl; + for (auto const& bigO : bigOs) { + os << "|" << std::setw(14) << std::setprecision(7) << std::scientific << bigO.constant() << " "; + os << "|" << detail::fmt::Number(6, 1, bigO.normalizedRootMeanSquare() * 100.0) << "% "; + os << "| " << bigO.name(); + os << std::endl; + } + return os; +} + +} // namespace nanobench +} // namespace ankerl + +#endif // ANKERL_NANOBENCH_IMPLEMENT +#endif // ANKERL_NANOBENCH_H_INCLUDED diff --git a/src/bench/perf.cpp b/src/bench/perf.cpp deleted file mode 100644 index a549ec29ea..0000000000 --- a/src/bench/perf.cpp +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2016 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "perf.h" - -#if defined(__i386__) || defined(__x86_64__) - -/* These architectures support querying the cycle counter - * from user space, no need for any syscall overhead. - */ -void perf_init(void) { } -void perf_fini(void) { } - -#elif defined(__linux__) - -#include -#include -#include - -static int fd = -1; -static struct perf_event_attr attr; - -void perf_init(void) -{ - attr.type = PERF_TYPE_HARDWARE; - attr.config = PERF_COUNT_HW_CPU_CYCLES; - fd = syscall(__NR_perf_event_open, &attr, 0, -1, -1, 0); -} - -void perf_fini(void) -{ - if (fd != -1) { - close(fd); - } -} - -uint64_t perf_cpucycles(void) -{ - uint64_t result = 0; - if (fd == -1 || read(fd, &result, sizeof(result)) < (ssize_t)sizeof(result)) { - return 0; - } - return result; -} - -#else /* Unhandled platform */ - -void perf_init(void) { } -void perf_fini(void) { } -uint64_t perf_cpucycles(void) { return 0; } - -#endif diff --git a/src/bench/perf.h b/src/bench/perf.h deleted file mode 100644 index 681bd0c8a2..0000000000 --- a/src/bench/perf.h +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2016 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -/** Functions for measurement of CPU cycles */ -#ifndef H_PERF -#define H_PERF - -#include - -#if defined(__i386__) - -static inline uint64_t perf_cpucycles(void) -{ - uint64_t x; - __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x)); - return x; -} - -#elif defined(__x86_64__) - -static inline uint64_t perf_cpucycles(void) -{ - uint32_t hi, lo; - __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi)); - return ((uint64_t)lo)|(((uint64_t)hi)<<32); -} -#else - -uint64_t perf_cpucycles(void); - -#endif - -void perf_init(void); -void perf_fini(void); - -#endif // H_PERF diff --git a/src/bench/poly1305.cpp b/src/bench/poly1305.cpp index 5701b9c6a4..38f26e3219 100644 --- a/src/bench/poly1305.cpp +++ b/src/bench/poly1305.cpp @@ -2,42 +2,40 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include #include #include #include /* Number of bytes to process per iteration */ -static constexpr uint64_t BUFFER_SIZE_TINY = 64; -static constexpr uint64_t BUFFER_SIZE_SMALL = 256; -static constexpr uint64_t BUFFER_SIZE_LARGE = 1024*1024; - -static void POLY1305(benchmark::State& state, size_t buffersize) -{ +static constexpr uint64_t +BUFFER_SIZE_TINY = 64; +static constexpr uint64_t +BUFFER_SIZE_SMALL = 256; +static constexpr uint64_t +BUFFER_SIZE_LARGE = 1024 * 1024; + +static void POLY1305(benchmark::Bench &bench, size_t buffersize) { std::vector tag(POLY1305_TAGLEN, 0); std::vector key(POLY1305_KEYLEN, 0); std::vector in(buffersize, 0); - while (state.KeepRunning()) + bench.batch(in.size()).unit("byte").run([&] { poly1305_auth(tag.data(), in.data(), in.size(), key.data()); + }); } -static void POLY1305_64BYTES(benchmark::State& state) -{ - POLY1305(state, BUFFER_SIZE_TINY); +static void POLY1305_64BYTES(benchmark::Bench &bench) { + POLY1305(bench, BUFFER_SIZE_TINY); } -static void POLY1305_256BYTES(benchmark::State& state) -{ - POLY1305(state, BUFFER_SIZE_SMALL); +static void POLY1305_256BYTES(benchmark::Bench &bench) { + POLY1305(bench, BUFFER_SIZE_SMALL); } -static void POLY1305_1MB(benchmark::State& state) -{ - POLY1305(state, BUFFER_SIZE_LARGE); +static void POLY1305_1MB(benchmark::Bench &bench) { + POLY1305(bench, BUFFER_SIZE_LARGE); } -//TODO add back below once benchmarking backports are done -BENCHMARK(POLY1305_64BYTES/*, 500000*/); -BENCHMARK(POLY1305_256BYTES/*, 250000*/); -BENCHMARK(POLY1305_1MB/*, 340*/); +BENCHMARK(POLY1305_64BYTES); +BENCHMARK(POLY1305_256BYTES); +BENCHMARK(POLY1305_1MB); diff --git a/src/bench/prevector.cpp b/src/bench/prevector.cpp index 0931d19c9f..91858f22a1 100644 --- a/src/bench/prevector.cpp +++ b/src/bench/prevector.cpp @@ -2,76 +2,111 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "compat.h" -#include "prevector.h" +#include +#include +#include +#include +#include -#include "bench/bench.h" +#include + +// GCC 4.8 is missing some C++11 type_traits, +// https://www.gnu.org/software/gcc/gcc-5/changes.html +#if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 5 +#define IS_TRIVIALLY_CONSTRUCTIBLE std::has_trivial_default_constructor +#else +#define IS_TRIVIALLY_CONSTRUCTIBLE std::is_trivially_default_constructible +#endif struct nontrivial_t { int x; - nontrivial_t() :x(-1) {} + + nontrivial_t() : x(-1) {} + + SERIALIZE_METHODS(nontrivial_t, obj + ) { READWRITE(obj.x); } }; -static_assert(!IS_TRIVIALLY_CONSTRUCTIBLE::value, - "expected nontrivial_t to not be trivially constructible"); + +typedef prevector<28, unsigned char> prevec; + +static_assert(!std::is_trivially_default_constructible::value, +"expected nontrivial_t to not be trivially constructible"); typedef unsigned char trivial_t; -static_assert(IS_TRIVIALLY_CONSTRUCTIBLE::value, - "expected trivial_t to be trivially constructible"); +static_assert(std::is_trivially_default_constructible::value, +"expected trivial_t to be trivially constructible"); -template -static void PrevectorDestructor(benchmark::State& state) -{ - while (state.KeepRunning()) { - for (auto x = 0; x < 1000; ++x) { - prevector<28, T> t0; - prevector<28, T> t1; - t0.resize(28); - t1.resize(29); - } - } +template +static void PrevectorDestructor(benchmark::Bench &bench) { + bench.batch(2).run([&] { + prevector<28, T> t0; + prevector<28, T> t1; + t0.resize(28); + t1.resize(29); + }); } -template -static void PrevectorClear(benchmark::State& state) -{ +template +static void PrevectorClear(benchmark::Bench &bench) { + prevector<28, T> t0; + prevector<28, T> t1; + bench.batch(2).run([&] { + t0.resize(28); + t0.clear(); + t1.resize(29); + t1.clear(); + }); +} - while (state.KeepRunning()) { - for (auto x = 0; x < 1000; ++x) { - prevector<28, T> t0; - prevector<28, T> t1; - t0.resize(28); - t0.clear(); - t1.resize(29); - t0.clear(); - } - } +template +void PrevectorResize(benchmark::Bench &bench) { + prevector<28, T> t0; + prevector<28, T> t1; + bench.batch(4).run([&] { + t0.resize(28); + t0.resize(0); + t1.resize(29); + t1.resize(0); + }); } -template -void PrevectorResize(benchmark::State& state) -{ - while (state.KeepRunning()) { - prevector<28, T> t0; +template +static void PrevectorDeserialize(benchmark::Bench &bench) { + CDataStream s0(SER_NETWORK, 0); + prevector<28, T> t0; + t0.resize(28); + for (auto x = 0; x < 900; ++x) { + s0 << t0; + } + t0.resize(100); + for (auto x = 0; x < 101; ++x) { + s0 << t0; + } + bench.batch(1000).run([&] { prevector<28, T> t1; for (auto x = 0; x < 1000; ++x) { - t0.resize(28); - t0.resize(0); - t1.resize(29); - t1.resize(0); + s0 >> t1; } - } + s0.Init(SER_NETWORK, 0); + }); } -#define PREVECTOR_TEST(name, nontrivops, trivops) \ - static void Prevector ## name ## Nontrivial(benchmark::State& state) { \ - PrevectorResize(state); \ - } \ - BENCHMARK(Prevector ## name ## Nontrivial/*, nontrivops*/); \ - static void Prevector ## name ## Trivial(benchmark::State& state) { \ - PrevectorResize(state); \ - } \ - BENCHMARK(Prevector ## name ## Trivial/*, trivops*/); - -PREVECTOR_TEST(Clear, 28300, 88600) -PREVECTOR_TEST(Destructor, 28800, 88900) -PREVECTOR_TEST(Resize, 28900, 90300) +#define PREVECTOR_TEST(name) \ + static void Prevector##name##Nontrivial(benchmark::Bench& bench) \ + { \ + Prevector##name(bench); \ + } \ + BENCHMARK(Prevector##name##Nontrivial); \ + static void Prevector##name##Trivial(benchmark::Bench& bench) \ + { \ + Prevector##name(bench); \ + } \ + BENCHMARK(Prevector##name##Trivial); + +PREVECTOR_TEST(Clear) + +PREVECTOR_TEST(Destructor) + +PREVECTOR_TEST(Resize) + +PREVECTOR_TEST(Deserialize) diff --git a/src/bench/rollingbloom.cpp b/src/bench/rollingbloom.cpp index 73c02cf718..fd56ba4fe9 100644 --- a/src/bench/rollingbloom.cpp +++ b/src/bench/rollingbloom.cpp @@ -2,42 +2,35 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include +#include +#include -#include "bench.h" -#include "bloom.h" -#include "utiltime.h" - -static void RollingBloom(benchmark::State& state) -{ +static void RollingBloom(benchmark::Bench &bench) { CRollingBloomFilter filter(120000, 0.000001); std::vector data(32); uint32_t count = 0; - uint32_t nEntriesPerGeneration = (120000 + 1) / 2; - uint32_t countnow = 0; - uint64_t match = 0; - while (state.KeepRunning()) { + bench.run([&] { count++; data[0] = count; data[1] = count >> 8; data[2] = count >> 16; data[3] = count >> 24; - if (countnow == nEntriesPerGeneration) { - int64_t b = GetTimeMicros(); - filter.insert(data); - int64_t e = GetTimeMicros(); - std::cout << "RollingBloom-refresh,1," << (e-b)*0.000001 << "," << (e-b)*0.000001 << "," << (e-b)*0.000001 << "\n"; - countnow = 0; - } else { - filter.insert(data); - } - countnow++; + filter.insert(data); + data[0] = count >> 24; data[1] = count >> 16; data[2] = count >> 8; data[3] = count; - match += filter.contains(data); - } + filter.contains(data); + }); +} + +static void RollingBloomReset(benchmark::Bench &bench) { + CRollingBloomFilter filter(120000, 0.000001); + bench.run([&] { + filter.reset(); + }); } BENCHMARK(RollingBloom); +BENCHMARK(RollingBloomReset); diff --git a/src/bench/string_cast.cpp b/src/bench/string_cast.cpp index 571b3af14d..c37ec261e8 100644 --- a/src/bench/string_cast.cpp +++ b/src/bench/string_cast.cpp @@ -1,109 +1,107 @@ -// Copyright (c) 2018 The Dash Core developers -// Copyright (c) 2020 The Raptoreum developers +// Copyright (c) 2018-2020 The Dash Core developers +// Copyright (c) 2020-2023 The Raptoreum developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "bench.h" -#include "tinyformat.h" -#include "utilstrencodings.h" +#include +#include +#include #include #include -template -std::string NumberToString(T Number){ +template +std::string NumberToString(T Number) { std::ostringstream oss; oss << Number; return oss.str(); } -static void int_atoi(benchmark::State& state) -{ - while (state.KeepRunning()) - atoi("1"); +static void int_atoi(benchmark::Bench &bench) { + int value; + bench.run([&] { + value = atoi("1"); + }); } -static void int_lexical_cast(benchmark::State& state) -{ - while (state.KeepRunning()) +static void int_lexical_cast(benchmark::Bench &bench) { + bench.run([&] { boost::lexical_cast("1"); + }); } -static void strings_1_itostr(benchmark::State& state) -{ +static void strings_1_itostr(benchmark::Bench &bench) { int i{0}; - while (state.KeepRunning()) + bench.run([&] { itostr(++i); + }); } -static void strings_1_lexical_cast(benchmark::State& state) -{ +static void strings_1_lexical_cast(benchmark::Bench &bench) { int i{0}; - while (state.KeepRunning()) + bench.run([&] { boost::lexical_cast(++i); + }); } -static void strings_1_numberToString(benchmark::State& state) -{ +static void strings_1_numberToString(benchmark::Bench &bench) { int i{0}; - while (state.KeepRunning()) + bench.run([&] { NumberToString(++i); + }); } -static void strings_1_to_string(benchmark::State& state) -{ +static void strings_1_to_string(benchmark::Bench &bench) { int i{0}; - while (state.KeepRunning()) + bench.run([&] { std::to_string(++i); + }); } -static void strings_2_multi_itostr(benchmark::State& state) -{ +static void strings_2_multi_itostr(benchmark::Bench &bench) { int i{0}; - while (state.KeepRunning()) { - itostr(i) + itostr(i+1) + itostr(i+2) + itostr(i+3) + itostr(i+4); + bench.run([&] { + itostr(i) + itostr(i + 1) + itostr(i + 2) + itostr(i + 3) + itostr(i + 4); ++i; - } + }); } -static void strings_2_multi_lexical_cast(benchmark::State& state) -{ +static void strings_2_multi_lexical_cast(benchmark::Bench &bench) { int i{0}; - while (state.KeepRunning()) { + bench.run([&] { boost::lexical_cast(i) + - boost::lexical_cast(i+1) + - boost::lexical_cast(i+2) + - boost::lexical_cast(i+3) + - boost::lexical_cast(i+4); + boost::lexical_cast(i + 1) + + boost::lexical_cast(i + 2) + + boost::lexical_cast(i + 3) + + boost::lexical_cast(i + 4); ++i; - } + }); } -static void strings_2_multi_numberToString(benchmark::State& state) -{ +static void strings_2_multi_numberToString(benchmark::Bench &bench) { int i{0}; - while (state.KeepRunning()) { - NumberToString(i) + NumberToString(i+1) + NumberToString(i+2) + NumberToString(i+3) + NumberToString(i+4); + bench.run([&] { + NumberToString(i) + NumberToString(i + 1) + NumberToString(i + 2) + NumberToString(i + 3) + + NumberToString(i + 4); ++i; - } + }); } -static void strings_2_multi_to_string(benchmark::State& state) -{ +static void strings_2_multi_to_string(benchmark::Bench &bench) { int i{0}; - while (state.KeepRunning()) { - std::to_string(i) + std::to_string(i+1) + std::to_string(i+2) + std::to_string(i+3) + std::to_string(i+4); + bench.run([&] { + std::to_string(i) + std::to_string(i + 1) + std::to_string(i + 2) + std::to_string(i + 3) + + std::to_string(i + 4); ++i; - } + }); } -static void strings_2_strptintf(benchmark::State& state) -{ +static void strings_2_strptintf(benchmark::Bench &bench) { int i{0}; - while (state.KeepRunning()) { - strprintf("%d|%d|%d|%d|%d", i, i+1, i+2, i+3, i+4); + bench.run([&] { + strprintf("%d|%d|%d|%d|%d", i, i + 1, i + 2, i + 3, i + 4); ++i; - } + }); } BENCHMARK(int_atoi); diff --git a/src/bench/util_time.cpp b/src/bench/util_time.cpp new file mode 100644 index 0000000000..f9393f3042 --- /dev/null +++ b/src/bench/util_time.cpp @@ -0,0 +1,38 @@ +// Copyright (c) 2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include + +#include + +static void BenchTimeDeprecated(benchmark::Bench &bench) { + bench.run([&] { + (void) GetTime(); + }); +} + +static void BenchTimeMock(benchmark::Bench &bench) { + SetMockTime(111); + bench.run([&] { + (void) GetTime(); + }); + SetMockTime(0); +} + +static void BenchTimeMillis(benchmark::Bench &bench) { + bench.run([&] { + (void) GetTime(); + }); +} + +static void BenchTimeMillisSys(benchmark::Bench &bench) { + bench.run([&] { + (void) GetTimeMillis(); + }); +} + +BENCHMARK(BenchTimeDeprecated); +BENCHMARK(BenchTimeMillis); +BENCHMARK(BenchTimeMillisSys); +BENCHMARK(BenchTimeMock); diff --git a/src/bench/wallet_balance.cpp b/src/bench/wallet_balance.cpp new file mode 100644 index 0000000000..96afd4e67a --- /dev/null +++ b/src/bench/wallet_balance.cpp @@ -0,0 +1,69 @@ +// Copyright (c) 2012-2019 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +static void WalletBalance(benchmark::Bench &bench, const bool set_dirty, const bool add_watchonly, const bool add_mine, + const uint32_t epoch_iters) { + RegTestingSetup test_setup; + const auto &ADDRESS_WATCHONLY = ADDRESS_B58T_UNSPENDABLE; + + NodeContext node; + std::unique_ptr chain = interfaces::MakeChain(node); + CWallet wallet{chain.get(), WalletLocation(), CreateMockWalletDatabase()}; + { + bool first_run; + if (wallet.LoadWallet(first_run) != DBErrors::LOAD_OK) assert(false); + } + auto handler = chain->handleNotifications({&wallet, [](CWallet *) {}}); + + const std::optional address_mine{ + add_mine ? std::optional < std::string > {getnewaddress(wallet)} : std::nullopt}; + if (add_watchonly) importaddress(wallet, ADDRESS_WATCHONLY); + + for (int i = 0; i < 100; ++i) { + generatetoaddress(test_setup.m_node, address_mine.value_or(ADDRESS_WATCHONLY)); + generatetoaddress(test_setup.m_node, ADDRESS_WATCHONLY); + } + SyncWithValidationInterfaceQueue(); + + auto bal = wallet.GetBalance(); // Cache + + bench.minEpochIterations(epoch_iters).run([&] { + if (set_dirty) wallet.MarkDirty(); + bal = wallet.GetBalance(); + if (add_mine) assert(bal.m_mine_trusted > 0); + if (add_watchonly) assert(bal.m_watchonly_trusted > 0); + }); +} + +static void WalletBalanceDirty(benchmark::Bench &bench) { + WalletBalance(bench, /* set_dirty */ true, /* add_watchonly */true, /* add_mine */ true, 2500); +} + +static void WalletBalanceClean(benchmark::Bench &bench) { + WalletBalance(bench, /* set_dirty */false, /* add_watchonly */ true, /* add_mine */true, 8000); +} + +static void WalletBalanceMine(benchmark::Bench &bench) { + WalletBalance(bench, /* set_dirty */ false, /* add_watchonly */false, /* add_mine */ true, 16000); +} + +static void WalletBalanceWatch(benchmark::Bench &bench) { + WalletBalance(bench, /* set_dirty */false, /* add_watchonly */ true, /* add_mine */false, 8000); +} + +BENCHMARK(WalletBalanceDirty); +BENCHMARK(WalletBalanceClean); +BENCHMARK(WalletBalanceMine); +BENCHMARK(WalletBalanceWatch); diff --git a/src/bip39.cpp b/src/bip39.cpp index 7a8f5fb346..745b34aba4 100644 --- a/src/bip39.cpp +++ b/src/bip39.cpp @@ -24,37 +24,34 @@ // Source: // https://github.com/trezor/trezor-crypto -#include "bip39.h" -#include "bip39_english.h" -#include "crypto/sha256.h" -#include "random.h" +#include +#include +#include +#include +#include -#include - -SecureString CMnemonic::Generate(int strength) -{ +SecureString CMnemonic::Generate(int strength) { if (strength % 32 || strength < 128 || strength > 256) { return SecureString(); } SecureVector data(32); - GetStrongRandBytes(&data[0], 32); + GetStrongRandBytes(data.data(), 32); SecureString mnemonic = FromData(data, strength / 8); return mnemonic; } // SecureString CMnemonic::FromData(const uint8_t *data, int len) -SecureString CMnemonic::FromData(const SecureVector& data, int len) -{ +SecureString CMnemonic::FromData(const SecureVector &data, int len) { if (len % 4 || len < 16 || len > 32) { return SecureString(); } SecureVector checksum(32); - CSHA256().Write(&data[0], len).Finalize(&checksum[0]); + CSHA256().Write(data.data(), len).Finalize(checksum.data()); // data SecureVector bits(len); - memcpy(&bits[0], &data[0], len); + memcpy(bits.data(), data.data(), len); // checksum bits.push_back(checksum[0]); @@ -77,8 +74,7 @@ SecureString CMnemonic::FromData(const SecureVector& data, int len) return mnemonic; } -bool CMnemonic::Check(SecureString mnemonic) -{ +bool CMnemonic::Check(SecureString mnemonic) { if (mnemonic.empty()) { return false; } @@ -101,8 +97,7 @@ bool CMnemonic::Check(SecureString mnemonic) uint32_t nWordIndex, ki, nBitsCount{}; - for (size_t i = 0; i < mnemonic.size(); ++i) - { + for (size_t i = 0; i < mnemonic.size(); ++i) { ssCurrentWord = ""; while (i + ssCurrentWord.size() < mnemonic.size() && mnemonic[i + ssCurrentWord.size()] != ' ') { if (ssCurrentWord.size() >= 9) { @@ -132,16 +127,14 @@ bool CMnemonic::Check(SecureString mnemonic) return false; } bits[32] = bits[nWordCount * 4 / 3]; - CSHA256().Write(&bits[0], nWordCount * 4 / 3).Finalize(&bits[0]); + CSHA256().Write(bits.data(), nWordCount * 4 / 3).Finalize(bits.data()); bool fResult = 0; if (nWordCount == 12) { fResult = (bits[0] & 0xF0) == (bits[32] & 0xF0); // compare first 4 bits - } else - if (nWordCount == 18) { + } else if (nWordCount == 18) { fResult = (bits[0] & 0xFC) == (bits[32] & 0xFC); // compare first 6 bits - } else - if (nWordCount == 24) { + } else if (nWordCount == 24) { fResult = bits[0] == bits[32]; // compare 8 bits } @@ -149,14 +142,10 @@ bool CMnemonic::Check(SecureString mnemonic) } // passphrase must be at most 256 characters or code may crash -void CMnemonic::ToSeed(SecureString mnemonic, SecureString passphrase, SecureVector& seedRet) -{ +void CMnemonic::ToSeed(SecureString mnemonic, SecureString passphrase, SecureVector &seedRet) { SecureString ssSalt = SecureString("mnemonic") + passphrase; SecureVector vchSalt(ssSalt.begin(), ssSalt.end()); seedRet.resize(64); - // int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, - // const unsigned char *salt, int saltlen, int iter, - // const EVP_MD *digest, - // int keylen, unsigned char *out); - PKCS5_PBKDF2_HMAC(mnemonic.c_str(), mnemonic.size(), &vchSalt[0], vchSalt.size(), 2048, EVP_sha512(), 64, &seedRet[0]); + PKCS5_PBKDF2_HMAC_SHA512(mnemonic.c_str(), mnemonic.size(), vchSalt.data(), vchSalt.size(), 2048, 64, + seedRet.data()); } diff --git a/src/bip39.h b/src/bip39.h index f5fe0dfcff..e65878e984 100644 --- a/src/bip39.h +++ b/src/bip39.h @@ -21,19 +21,20 @@ * OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef RAPTOREUM_BIP39_H -#define RAPTOREUM_BIP39_H +#ifndef BITCOIN_BIP39_H +#define BITCOIN_BIP39_H -#include "support/allocators/secure.h" +#include -class CMnemonic -{ +class CMnemonic { public: static SecureString Generate(int strength); // strength in bits - static SecureString FromData(const SecureVector& data, int len); + static SecureString FromData(const SecureVector &data, int len); + static bool Check(SecureString mnemonic); + // passphrase must be at most 256 characters or code may crash - static void ToSeed(SecureString mnemonic, SecureString passphrase, SecureVector& seedRet); + static void ToSeed(SecureString mnemonic, SecureString passphrase, SecureVector &seedRet); }; -#endif +#endif // BITCOIN_BIP39_H diff --git a/src/bip39_english.h b/src/bip39_english.h index 090444c0ef..436dcb114d 100644 --- a/src/bip39_english.h +++ b/src/bip39_english.h @@ -21,2054 +21,2059 @@ * OTHER DEALINGS IN THE SOFTWARE. */ -const char * const wordlist[] = { -"abandon", -"ability", -"able", -"about", -"above", -"absent", -"absorb", -"abstract", -"absurd", -"abuse", -"access", -"accident", -"account", -"accuse", -"achieve", -"acid", -"acoustic", -"acquire", -"across", -"act", -"action", -"actor", -"actress", -"actual", -"adapt", -"add", -"addict", -"address", -"adjust", -"admit", -"adult", -"advance", -"advice", -"aerobic", -"affair", -"afford", -"afraid", -"again", -"age", -"agent", -"agree", -"ahead", -"aim", -"air", -"airport", -"aisle", -"alarm", -"album", -"alcohol", -"alert", -"alien", -"all", -"alley", -"allow", -"almost", -"alone", -"alpha", -"already", -"also", -"alter", -"always", -"amateur", -"amazing", -"among", -"amount", -"amused", -"analyst", -"anchor", -"ancient", -"anger", -"angle", -"angry", -"animal", -"ankle", -"announce", -"annual", -"another", -"answer", -"antenna", -"antique", -"anxiety", -"any", -"apart", -"apology", -"appear", -"apple", -"approve", -"april", -"arch", -"arctic", -"area", -"arena", -"argue", -"arm", -"armed", -"armor", -"army", -"around", -"arrange", -"arrest", -"arrive", -"arrow", -"art", -"artefact", -"artist", -"artwork", -"ask", -"aspect", -"assault", -"asset", -"assist", -"assume", -"asthma", -"athlete", -"atom", -"attack", -"attend", -"attitude", -"attract", -"auction", -"audit", -"august", -"aunt", -"author", -"auto", -"autumn", -"average", -"avocado", -"avoid", -"awake", -"aware", -"away", -"awesome", -"awful", -"awkward", -"axis", -"baby", -"bachelor", -"bacon", -"badge", -"bag", -"balance", -"balcony", -"ball", -"bamboo", -"banana", -"banner", -"bar", -"barely", -"bargain", -"barrel", -"base", -"basic", -"basket", -"battle", -"beach", -"bean", -"beauty", -"because", -"become", -"beef", -"before", -"begin", -"behave", -"behind", -"believe", -"below", -"belt", -"bench", -"benefit", -"best", -"betray", -"better", -"between", -"beyond", -"bicycle", -"bid", -"bike", -"bind", -"biology", -"bird", -"birth", -"bitter", -"black", -"blade", -"blame", -"blanket", -"blast", -"bleak", -"bless", -"blind", -"blood", -"blossom", -"blouse", -"blue", -"blur", -"blush", -"board", -"boat", -"body", -"boil", -"bomb", -"bone", -"bonus", -"book", -"boost", -"border", -"boring", -"borrow", -"boss", -"bottom", -"bounce", -"box", -"boy", -"bracket", -"brain", -"brand", -"brass", -"brave", -"bread", -"breeze", -"brick", -"bridge", -"brief", -"bright", -"bring", -"brisk", -"broccoli", -"broken", -"bronze", -"broom", -"brother", -"brown", -"brush", -"bubble", -"buddy", -"budget", -"buffalo", -"build", -"bulb", -"bulk", -"bullet", -"bundle", -"bunker", -"burden", -"burger", -"burst", -"bus", -"business", -"busy", -"butter", -"buyer", -"buzz", -"cabbage", -"cabin", -"cable", -"cactus", -"cage", -"cake", -"call", -"calm", -"camera", -"camp", -"can", -"canal", -"cancel", -"candy", -"cannon", -"canoe", -"canvas", -"canyon", -"capable", -"capital", -"captain", -"car", -"carbon", -"card", -"cargo", -"carpet", -"carry", -"cart", -"case", -"cash", -"casino", -"castle", -"casual", -"cat", -"catalog", -"catch", -"category", -"cattle", -"caught", -"cause", -"caution", -"cave", -"ceiling", -"celery", -"cement", -"census", -"century", -"cereal", -"certain", -"chair", -"chalk", -"champion", -"change", -"chaos", -"chapter", -"charge", -"chase", -"chat", -"cheap", -"check", -"cheese", -"chef", -"cherry", -"chest", -"chicken", -"chief", -"child", -"chimney", -"choice", -"choose", -"chronic", -"chuckle", -"chunk", -"churn", -"cigar", -"cinnamon", -"circle", -"citizen", -"city", -"civil", -"claim", -"clap", -"clarify", -"claw", -"clay", -"clean", -"clerk", -"clever", -"click", -"client", -"cliff", -"climb", -"clinic", -"clip", -"clock", -"clog", -"close", -"cloth", -"cloud", -"clown", -"club", -"clump", -"cluster", -"clutch", -"coach", -"coast", -"coconut", -"code", -"coffee", -"coil", -"coin", -"collect", -"color", -"column", -"combine", -"come", -"comfort", -"comic", -"common", -"company", -"concert", -"conduct", -"confirm", -"congress", -"connect", -"consider", -"control", -"convince", -"cook", -"cool", -"copper", -"copy", -"coral", -"core", -"corn", -"correct", -"cost", -"cotton", -"couch", -"country", -"couple", -"course", -"cousin", -"cover", -"coyote", -"crack", -"cradle", -"craft", -"cram", -"crane", -"crash", -"crater", -"crawl", -"crazy", -"cream", -"credit", -"creek", -"crew", -"cricket", -"crime", -"crisp", -"critic", -"crop", -"cross", -"crouch", -"crowd", -"crucial", -"cruel", -"cruise", -"crumble", -"crunch", -"crush", -"cry", -"crystal", -"cube", -"culture", -"cup", -"cupboard", -"curious", -"current", -"curtain", -"curve", -"cushion", -"custom", -"cute", -"cycle", -"dad", -"damage", -"damp", -"dance", -"danger", -"daring", -"raptoreum", -"daughter", -"dawn", -"day", -"deal", -"debate", -"debris", -"decade", -"december", -"decide", -"decline", -"decorate", -"decrease", -"deer", -"defense", -"define", -"defy", -"degree", -"delay", -"deliver", -"demand", -"demise", -"denial", -"dentist", -"deny", -"depart", -"depend", -"deposit", -"depth", -"deputy", -"derive", -"describe", -"desert", -"design", -"desk", -"despair", -"destroy", -"detail", -"detect", -"develop", -"device", -"devote", -"diagram", -"dial", -"diamond", -"diary", -"dice", -"diesel", -"diet", -"differ", -"digital", -"dignity", -"dilemma", -"dinner", -"dinosaur", -"direct", -"dirt", -"disagree", -"discover", -"disease", -"dish", -"dismiss", -"disorder", -"display", -"distance", -"divert", -"divide", -"divorce", -"dizzy", -"doctor", -"document", -"dog", -"doll", -"dolphin", -"domain", -"donate", -"donkey", -"donor", -"door", -"dose", -"double", -"dove", -"draft", -"dragon", -"drama", -"drastic", -"draw", -"dream", -"dress", -"drift", -"drill", -"drink", -"drip", -"drive", -"drop", -"drum", -"dry", -"duck", -"dumb", -"dune", -"during", -"dust", -"dutch", -"duty", -"dwarf", -"dynamic", -"eager", -"eagle", -"early", -"earn", -"earth", -"easily", -"east", -"easy", -"echo", -"ecology", -"economy", -"edge", -"edit", -"educate", -"effort", -"egg", -"eight", -"either", -"elbow", -"elder", -"electric", -"elegant", -"element", -"elephant", -"elevator", -"elite", -"else", -"embark", -"embody", -"embrace", -"emerge", -"emotion", -"employ", -"empower", -"empty", -"enable", -"enact", -"end", -"endless", -"endorse", -"enemy", -"energy", -"enforce", -"engage", -"engine", -"enhance", -"enjoy", -"enlist", -"enough", -"enrich", -"enroll", -"ensure", -"enter", -"entire", -"entry", -"envelope", -"episode", -"equal", -"equip", -"era", -"erase", -"erode", -"erosion", -"error", -"erupt", -"escape", -"essay", -"essence", -"estate", -"eternal", -"ethics", -"evidence", -"evil", -"evoke", -"evolve", -"exact", -"example", -"excess", -"exchange", -"excite", -"exclude", -"excuse", -"execute", -"exercise", -"exhaust", -"exhibit", -"exile", -"exist", -"exit", -"exotic", -"expand", -"expect", -"expire", -"explain", -"expose", -"express", -"extend", -"extra", -"eye", -"eyebrow", -"fabric", -"face", -"faculty", -"fade", -"faint", -"faith", -"fall", -"false", -"fame", -"family", -"famous", -"fan", -"fancy", -"fantasy", -"farm", -"fashion", -"fat", -"fatal", -"father", -"fatigue", -"fault", -"favorite", -"feature", -"february", -"federal", -"fee", -"feed", -"feel", -"female", -"fence", -"festival", -"fetch", -"fever", -"few", -"fiber", -"fiction", -"field", -"figure", -"file", -"film", -"filter", -"final", -"find", -"fine", -"finger", -"finish", -"fire", -"firm", -"first", -"fiscal", -"fish", -"fit", -"fitness", -"fix", -"flag", -"flame", -"flash", -"flat", -"flavor", -"flee", -"flight", -"flip", -"float", -"flock", -"floor", -"flower", -"fluid", -"flush", -"fly", -"foam", -"focus", -"fog", -"foil", -"fold", -"follow", -"food", -"foot", -"force", -"forest", -"forget", -"fork", -"fortune", -"forum", -"forward", -"fossil", -"foster", -"found", -"fox", -"fragile", -"frame", -"frequent", -"fresh", -"friend", -"fringe", -"frog", -"front", -"frost", -"frown", -"frozen", -"fruit", -"fuel", -"fun", -"funny", -"furnace", -"fury", -"future", -"gadget", -"gain", -"galaxy", -"gallery", -"game", -"gap", -"garage", -"garbage", -"garden", -"garlic", -"garment", -"gas", -"gasp", -"gate", -"gather", -"gauge", -"gaze", -"general", -"genius", -"genre", -"gentle", -"genuine", -"gesture", -"ghost", -"giant", -"gift", -"giggle", -"ginger", -"giraffe", -"girl", -"give", -"glad", -"glance", -"glare", -"glass", -"glide", -"glimpse", -"globe", -"gloom", -"glory", -"glove", -"glow", -"glue", -"goat", -"goddess", -"gold", -"good", -"goose", -"gorilla", -"gospel", -"gossip", -"govern", -"gown", -"grab", -"grace", -"grain", -"grant", -"grape", -"grass", -"gravity", -"great", -"green", -"grid", -"grief", -"grit", -"grocery", -"group", -"grow", -"grunt", -"guard", -"guess", -"guide", -"guilt", -"guitar", -"gun", -"gym", -"habit", -"hair", -"half", -"hammer", -"hamster", -"hand", -"happy", -"harbor", -"hard", -"harsh", -"harvest", -"hat", -"have", -"hawk", -"hazard", -"head", -"health", -"heart", -"heavy", -"hedgehog", -"height", -"hello", -"helmet", -"help", -"hen", -"hero", -"hidden", -"high", -"hill", -"hint", -"hip", -"hire", -"history", -"hobby", -"hockey", -"hold", -"hole", -"holiday", -"hollow", -"home", -"honey", -"hood", -"hope", -"horn", -"horror", -"horse", -"hospital", -"host", -"hotel", -"hour", -"hover", -"hub", -"huge", -"human", -"humble", -"humor", -"hundred", -"hungry", -"hunt", -"hurdle", -"hurry", -"hurt", -"husband", -"hybrid", -"ice", -"icon", -"idea", -"identify", -"idle", -"ignore", -"ill", -"illegal", -"illness", -"image", -"imitate", -"immense", -"immune", -"impact", -"impose", -"improve", -"impulse", -"inch", -"include", -"income", -"increase", -"index", -"indicate", -"indoor", -"industry", -"infant", -"inflict", -"inform", -"inhale", -"inherit", -"initial", -"inject", -"injury", -"inmate", -"inner", -"innocent", -"input", -"inquiry", -"insane", -"insect", -"inside", -"inspire", -"install", -"intact", -"interest", -"into", -"invest", -"invite", -"involve", -"iron", -"island", -"isolate", -"issue", -"item", -"ivory", -"jacket", -"jaguar", -"jar", -"jazz", -"jealous", -"jeans", -"jelly", -"jewel", -"job", -"join", -"joke", -"journey", -"joy", -"judge", -"juice", -"jump", -"jungle", -"junior", -"junk", -"just", -"kangaroo", -"keen", -"keep", -"ketchup", -"key", -"kick", -"kid", -"kidney", -"kind", -"kingdom", -"kiss", -"kit", -"kitchen", -"kite", -"kitten", -"kiwi", -"knee", -"knife", -"knock", -"know", -"lab", -"label", -"labor", -"ladder", -"lady", -"lake", -"lamp", -"language", -"laptop", -"large", -"later", -"latin", -"laugh", -"laundry", -"lava", -"law", -"lawn", -"lawsuit", -"layer", -"lazy", -"leader", -"leaf", -"learn", -"leave", -"lecture", -"left", -"leg", -"legal", -"legend", -"leisure", -"lemon", -"lend", -"length", -"lens", -"leopard", -"lesson", -"letter", -"level", -"liar", -"liberty", -"library", -"license", -"life", -"lift", -"light", -"like", -"limb", -"limit", -"link", -"lion", -"liquid", -"list", -"little", -"live", -"lizard", -"load", -"loan", -"lobster", -"local", -"lock", -"logic", -"lonely", -"long", -"loop", -"lottery", -"loud", -"lounge", -"love", -"loyal", -"lucky", -"luggage", -"lumber", -"lunar", -"lunch", -"luxury", -"lyrics", -"machine", -"mad", -"magic", -"magnet", -"maid", -"mail", -"main", -"major", -"make", -"mammal", -"man", -"manage", -"mandate", -"mango", -"mansion", -"manual", -"maple", -"marble", -"march", -"margin", -"marine", -"market", -"marriage", -"mask", -"mass", -"master", -"match", -"material", -"math", -"matrix", -"matter", -"maximum", -"maze", -"meadow", -"mean", -"measure", -"meat", -"mechanic", -"medal", -"media", -"melody", -"melt", -"member", -"memory", -"mention", -"menu", -"mercy", -"merge", -"merit", -"merry", -"mesh", -"message", -"metal", -"method", -"middle", -"midnight", -"milk", -"million", -"mimic", -"mind", -"minimum", -"minor", -"minute", -"miracle", -"mirror", -"misery", -"miss", -"mistake", -"mix", -"mixed", -"mixture", -"mobile", -"model", -"modify", -"mom", -"moment", -"monitor", -"monkey", -"monster", -"month", -"moon", -"moral", -"more", -"morning", -"mosquito", -"mother", -"motion", -"motor", -"mountain", -"mouse", -"move", -"movie", -"much", -"muffin", -"mule", -"multiply", -"muscle", -"museum", -"mushroom", -"music", -"must", -"mutual", -"myself", -"mystery", -"myth", -"naive", -"name", -"napkin", -"narrow", -"nasty", -"nation", -"nature", -"near", -"neck", -"need", -"negative", -"neglect", -"neither", -"nephew", -"nerve", -"nest", -"net", -"network", -"neutral", -"never", -"news", -"next", -"nice", -"night", -"noble", -"noise", -"nominee", -"noodle", -"normal", -"north", -"nose", -"notable", -"note", -"nothing", -"notice", -"novel", -"now", -"nuclear", -"number", -"nurse", -"nut", -"oak", -"obey", -"object", -"oblige", -"obscure", -"observe", -"obtain", -"obvious", -"occur", -"ocean", -"october", -"odor", -"off", -"offer", -"office", -"often", -"oil", -"okay", -"old", -"olive", -"olympic", -"omit", -"once", -"one", -"onion", -"online", -"only", -"open", -"opera", -"opinion", -"oppose", -"option", -"orange", -"orbit", -"orchard", -"order", -"ordinary", -"organ", -"orient", -"original", -"orphan", -"ostrich", -"other", -"outdoor", -"outer", -"output", -"outside", -"oval", -"oven", -"over", -"own", -"owner", -"oxygen", -"oyster", -"ozone", -"pact", -"paddle", -"page", -"pair", -"palace", -"palm", -"panda", -"panel", -"panic", -"panther", -"paper", -"parade", -"parent", -"park", -"parrot", -"party", -"pass", -"patch", -"path", -"patient", -"patrol", -"pattern", -"pause", -"pave", -"payment", -"peace", -"peanut", -"pear", -"peasant", -"pelican", -"pen", -"penalty", -"pencil", -"people", -"pepper", -"perfect", -"permit", -"person", -"pet", -"phone", -"photo", -"phrase", -"physical", -"piano", -"picnic", -"picture", -"piece", -"pig", -"pigeon", -"pill", -"pilot", -"pink", -"pioneer", -"pipe", -"pistol", -"pitch", -"pizza", -"place", -"planet", -"plastic", -"plate", -"play", -"please", -"pledge", -"pluck", -"plug", -"plunge", -"poem", -"poet", -"point", -"polar", -"pole", -"police", -"pond", -"pony", -"pool", -"popular", -"portion", -"position", -"possible", -"post", -"potato", -"pottery", -"poverty", -"powder", -"power", -"practice", -"praise", -"predict", -"prefer", -"prepare", -"present", -"pretty", -"prevent", -"price", -"pride", -"primary", -"print", -"priority", -"prison", -"private", -"prize", -"problem", -"process", -"produce", -"profit", -"program", -"project", -"promote", -"proof", -"property", -"prosper", -"protect", -"proud", -"provide", -"public", -"pudding", -"pull", -"pulp", -"pulse", -"pumpkin", -"punch", -"pupil", -"puppy", -"purchase", -"purity", -"purpose", -"purse", -"push", -"put", -"puzzle", -"pyramid", -"quality", -"quantum", -"quarter", -"question", -"quick", -"quit", -"quiz", -"quote", -"rabbit", -"raccoon", -"race", -"rack", -"radar", -"radio", -"rail", -"rain", -"raise", -"rally", -"ramp", -"ranch", -"random", -"range", -"rapid", -"rare", -"rate", -"rather", -"raven", -"raw", -"razor", -"ready", -"real", -"reason", -"rebel", -"rebuild", -"recall", -"receive", -"recipe", -"record", -"recycle", -"reduce", -"reflect", -"reform", -"refuse", -"region", -"regret", -"regular", -"reject", -"relax", -"release", -"relief", -"rely", -"remain", -"remember", -"remind", -"remove", -"render", -"renew", -"rent", -"reopen", -"repair", -"repeat", -"replace", -"report", -"require", -"rescue", -"resemble", -"resist", -"resource", -"response", -"result", -"retire", -"retreat", -"return", -"reunion", -"reveal", -"review", -"reward", -"rhythm", -"rib", -"ribbon", -"rice", -"rich", -"ride", -"ridge", -"rifle", -"right", -"rigid", -"ring", -"riot", -"ripple", -"risk", -"ritual", -"rival", -"river", -"road", -"roast", -"robot", -"robust", -"rocket", -"romance", -"roof", -"rookie", -"room", -"rose", -"rotate", -"rough", -"round", -"route", -"royal", -"rubber", -"rude", -"rug", -"rule", -"run", -"runway", -"rural", -"sad", -"saddle", -"sadness", -"safe", -"sail", -"salad", -"salmon", -"salon", -"salt", -"salute", -"same", -"sample", -"sand", -"satisfy", -"satoshi", -"sauce", -"sausage", -"save", -"say", -"scale", -"scan", -"scare", -"scatter", -"scene", -"scheme", -"school", -"science", -"scissors", -"scorpion", -"scout", -"scrap", -"screen", -"script", -"scrub", -"sea", -"search", -"season", -"seat", -"second", -"secret", -"section", -"security", -"seed", -"seek", -"segment", -"select", -"sell", -"seminar", -"senior", -"sense", -"sentence", -"series", -"service", -"session", -"settle", -"setup", -"seven", -"shadow", -"shaft", -"shallow", -"share", -"shed", -"shell", -"sheriff", -"shield", -"shift", -"shine", -"ship", -"shiver", -"shock", -"shoe", -"shoot", -"shop", -"short", -"shoulder", -"shove", -"shrimp", -"shrug", -"shuffle", -"shy", -"sibling", -"sick", -"side", -"siege", -"sight", -"sign", -"silent", -"silk", -"silly", -"silver", -"similar", -"simple", -"since", -"sing", -"siren", -"sister", -"situate", -"six", -"size", -"skate", -"sketch", -"ski", -"skill", -"skin", -"skirt", -"skull", -"slab", -"slam", -"sleep", -"slender", -"slice", -"slide", -"slight", -"slim", -"slogan", -"slot", -"slow", -"slush", -"small", -"smart", -"smile", -"smoke", -"smooth", -"snack", -"snake", -"snap", -"sniff", -"snow", -"soap", -"soccer", -"social", -"sock", -"soda", -"soft", -"solar", -"soldier", -"solid", -"solution", -"solve", -"someone", -"song", -"soon", -"sorry", -"sort", -"soul", -"sound", -"soup", -"source", -"south", -"space", -"spare", -"spatial", -"spawn", -"speak", -"special", -"speed", -"spell", -"spend", -"sphere", -"spice", -"spider", -"spike", -"spin", -"spirit", -"split", -"spoil", -"sponsor", -"spoon", -"sport", -"spot", -"spray", -"spread", -"spring", -"spy", -"square", -"squeeze", -"squirrel", -"stable", -"stadium", -"staff", -"stage", -"stairs", -"stamp", -"stand", -"start", -"state", -"stay", -"steak", -"steel", -"stem", -"step", -"stereo", -"stick", -"still", -"sting", -"stock", -"stomach", -"stone", -"stool", -"story", -"stove", -"strategy", -"street", -"strike", -"strong", -"struggle", -"student", -"stuff", -"stumble", -"style", -"subject", -"submit", -"subway", -"success", -"such", -"sudden", -"suffer", -"sugar", -"suggest", -"suit", -"summer", -"sun", -"sunny", -"sunset", -"super", -"supply", -"supreme", -"sure", -"surface", -"surge", -"surprise", -"surround", -"survey", -"suspect", -"sustain", -"swallow", -"swamp", -"swap", -"swarm", -"swear", -"sweet", -"swift", -"swim", -"swing", -"switch", -"sword", -"symbol", -"symptom", -"syrup", -"system", -"table", -"tackle", -"tag", -"tail", -"talent", -"talk", -"tank", -"tape", -"target", -"task", -"taste", -"tattoo", -"taxi", -"teach", -"team", -"tell", -"ten", -"tenant", -"tennis", -"tent", -"term", -"test", -"text", -"thank", -"that", -"theme", -"then", -"theory", -"there", -"they", -"thing", -"this", -"thought", -"three", -"thrive", -"throw", -"thumb", -"thunder", -"ticket", -"tide", -"tiger", -"tilt", -"timber", -"time", -"tiny", -"tip", -"tired", -"tissue", -"title", -"toast", -"tobacco", -"today", -"toddler", -"toe", -"together", -"toilet", -"token", -"tomato", -"tomorrow", -"tone", -"tongue", -"tonight", -"tool", -"tooth", -"top", -"topic", -"topple", -"torch", -"tornado", -"tortoise", -"toss", -"total", -"tourist", -"toward", -"tower", -"town", -"toy", -"track", -"trade", -"traffic", -"tragic", -"train", -"transfer", -"trap", -"trash", -"travel", -"tray", -"treat", -"tree", -"trend", -"trial", -"tribe", -"trick", -"trigger", -"trim", -"trip", -"trophy", -"trouble", -"truck", -"true", -"truly", -"trumpet", -"trust", -"truth", -"try", -"tube", -"tuition", -"tumble", -"tuna", -"tunnel", -"turkey", -"turn", -"turtle", -"twelve", -"twenty", -"twice", -"twin", -"twist", -"two", -"type", -"typical", -"ugly", -"umbrella", -"unable", -"unaware", -"uncle", -"uncover", -"under", -"undo", -"unfair", -"unfold", -"unhappy", -"uniform", -"unique", -"unit", -"universe", -"unknown", -"unlock", -"until", -"unusual", -"unveil", -"update", -"upgrade", -"uphold", -"upon", -"upper", -"upset", -"urban", -"urge", -"usage", -"use", -"used", -"useful", -"useless", -"usual", -"utility", -"vacant", -"vacuum", -"vague", -"valid", -"valley", -"valve", -"van", -"vanish", -"vapor", -"various", -"vast", -"vault", -"vehicle", -"velvet", -"vendor", -"venture", -"venue", -"verb", -"verify", -"version", -"very", -"vessel", -"veteran", -"viable", -"vibrant", -"vicious", -"victory", -"video", -"view", -"village", -"vintage", -"violin", -"virtual", -"virus", -"visa", -"visit", -"visual", -"vital", -"vivid", -"vocal", -"voice", -"void", -"volcano", -"volume", -"vote", -"voyage", -"wage", -"wagon", -"wait", -"walk", -"wall", -"walnut", -"want", -"warfare", -"warm", -"warrior", -"wash", -"wasp", -"waste", -"water", -"wave", -"way", -"wealth", -"weapon", -"wear", -"weasel", -"weather", -"web", -"wedding", -"weekend", -"weird", -"welcome", -"west", -"wet", -"whale", -"what", -"wheat", -"wheel", -"when", -"where", -"whip", -"whisper", -"wide", -"width", -"wife", -"wild", -"will", -"win", -"window", -"wine", -"wing", -"wink", -"winner", -"winter", -"wire", -"wisdom", -"wise", -"wish", -"witness", -"wolf", -"woman", -"wonder", -"wood", -"wool", -"word", -"work", -"world", -"worry", -"worth", -"wrap", -"wreck", -"wrestle", -"wrist", -"write", -"wrong", -"yard", -"year", -"yellow", -"you", -"young", -"youth", -"zebra", -"zero", -"zone", -"zoo", -0, +#ifndef BITCOIN_BIP39_ENGLISH_H +#define BITCOIN_BIP39_ENGLISH_H + +const char *const wordlist[] = { + "abandon", + "ability", + "able", + "about", + "above", + "absent", + "absorb", + "abstract", + "absurd", + "abuse", + "access", + "accident", + "account", + "accuse", + "achieve", + "acid", + "acoustic", + "acquire", + "across", + "act", + "action", + "actor", + "actress", + "actual", + "adapt", + "add", + "addict", + "address", + "adjust", + "admit", + "adult", + "advance", + "advice", + "aerobic", + "affair", + "afford", + "afraid", + "again", + "age", + "agent", + "agree", + "ahead", + "aim", + "air", + "airport", + "aisle", + "alarm", + "album", + "alcohol", + "alert", + "alien", + "all", + "alley", + "allow", + "almost", + "alone", + "alpha", + "already", + "also", + "alter", + "always", + "amateur", + "amazing", + "among", + "amount", + "amused", + "analyst", + "anchor", + "ancient", + "anger", + "angle", + "angry", + "animal", + "ankle", + "announce", + "annual", + "another", + "answer", + "antenna", + "antique", + "anxiety", + "any", + "apart", + "apology", + "appear", + "apple", + "approve", + "april", + "arch", + "arctic", + "area", + "arena", + "argue", + "arm", + "armed", + "armor", + "army", + "around", + "arrange", + "arrest", + "arrive", + "arrow", + "art", + "artefact", + "artist", + "artwork", + "ask", + "aspect", + "assault", + "asset", + "assist", + "assume", + "asthma", + "athlete", + "atom", + "attack", + "attend", + "attitude", + "attract", + "auction", + "audit", + "august", + "aunt", + "author", + "auto", + "autumn", + "average", + "avocado", + "avoid", + "awake", + "aware", + "away", + "awesome", + "awful", + "awkward", + "axis", + "baby", + "bachelor", + "bacon", + "badge", + "bag", + "balance", + "balcony", + "ball", + "bamboo", + "banana", + "banner", + "bar", + "barely", + "bargain", + "barrel", + "base", + "basic", + "basket", + "battle", + "beach", + "bean", + "beauty", + "because", + "become", + "beef", + "before", + "begin", + "behave", + "behind", + "believe", + "below", + "belt", + "bench", + "benefit", + "best", + "betray", + "better", + "between", + "beyond", + "bicycle", + "bid", + "bike", + "bind", + "biology", + "bird", + "birth", + "bitter", + "black", + "blade", + "blame", + "blanket", + "blast", + "bleak", + "bless", + "blind", + "blood", + "blossom", + "blouse", + "blue", + "blur", + "blush", + "board", + "boat", + "body", + "boil", + "bomb", + "bone", + "bonus", + "book", + "boost", + "border", + "boring", + "borrow", + "boss", + "bottom", + "bounce", + "box", + "boy", + "bracket", + "brain", + "brand", + "brass", + "brave", + "bread", + "breeze", + "brick", + "bridge", + "brief", + "bright", + "bring", + "brisk", + "broccoli", + "broken", + "bronze", + "broom", + "brother", + "brown", + "brush", + "bubble", + "buddy", + "budget", + "buffalo", + "build", + "bulb", + "bulk", + "bullet", + "bundle", + "bunker", + "burden", + "burger", + "burst", + "bus", + "business", + "busy", + "butter", + "buyer", + "buzz", + "cabbage", + "cabin", + "cable", + "cactus", + "cage", + "cake", + "call", + "calm", + "camera", + "camp", + "can", + "canal", + "cancel", + "candy", + "cannon", + "canoe", + "canvas", + "canyon", + "capable", + "capital", + "captain", + "car", + "carbon", + "card", + "cargo", + "carpet", + "carry", + "cart", + "case", + "cash", + "casino", + "castle", + "casual", + "cat", + "catalog", + "catch", + "category", + "cattle", + "caught", + "cause", + "caution", + "cave", + "ceiling", + "celery", + "cement", + "census", + "century", + "cereal", + "certain", + "chair", + "chalk", + "champion", + "change", + "chaos", + "chapter", + "charge", + "chase", + "chat", + "cheap", + "check", + "cheese", + "chef", + "cherry", + "chest", + "chicken", + "chief", + "child", + "chimney", + "choice", + "choose", + "chronic", + "chuckle", + "chunk", + "churn", + "cigar", + "cinnamon", + "circle", + "citizen", + "city", + "civil", + "claim", + "clap", + "clarify", + "claw", + "clay", + "clean", + "clerk", + "clever", + "click", + "client", + "cliff", + "climb", + "clinic", + "clip", + "clock", + "clog", + "close", + "cloth", + "cloud", + "clown", + "club", + "clump", + "cluster", + "clutch", + "coach", + "coast", + "coconut", + "code", + "coffee", + "coil", + "coin", + "collect", + "color", + "column", + "combine", + "come", + "comfort", + "comic", + "common", + "company", + "concert", + "conduct", + "confirm", + "congress", + "connect", + "consider", + "control", + "convince", + "cook", + "cool", + "copper", + "copy", + "coral", + "core", + "corn", + "correct", + "cost", + "cotton", + "couch", + "country", + "couple", + "course", + "cousin", + "cover", + "coyote", + "crack", + "cradle", + "craft", + "cram", + "crane", + "crash", + "crater", + "crawl", + "crazy", + "cream", + "credit", + "creek", + "crew", + "cricket", + "crime", + "crisp", + "critic", + "crop", + "cross", + "crouch", + "crowd", + "crucial", + "cruel", + "cruise", + "crumble", + "crunch", + "crush", + "cry", + "crystal", + "cube", + "culture", + "cup", + "cupboard", + "curious", + "current", + "curtain", + "curve", + "cushion", + "custom", + "cute", + "cycle", + "dad", + "damage", + "damp", + "dance", + "danger", + "daring", + "raptoreum", + "daughter", + "dawn", + "day", + "deal", + "debate", + "debris", + "decade", + "december", + "decide", + "decline", + "decorate", + "decrease", + "deer", + "defense", + "define", + "defy", + "degree", + "delay", + "deliver", + "demand", + "demise", + "denial", + "dentist", + "deny", + "depart", + "depend", + "deposit", + "depth", + "deputy", + "derive", + "describe", + "desert", + "design", + "desk", + "despair", + "destroy", + "detail", + "detect", + "develop", + "device", + "devote", + "diagram", + "dial", + "diamond", + "diary", + "dice", + "diesel", + "diet", + "differ", + "digital", + "dignity", + "dilemma", + "dinner", + "dinosaur", + "direct", + "dirt", + "disagree", + "discover", + "disease", + "dish", + "dismiss", + "disorder", + "display", + "distance", + "divert", + "divide", + "divorce", + "dizzy", + "doctor", + "document", + "dog", + "doll", + "dolphin", + "domain", + "donate", + "donkey", + "donor", + "door", + "dose", + "double", + "dove", + "draft", + "dragon", + "drama", + "drastic", + "draw", + "dream", + "dress", + "drift", + "drill", + "drink", + "drip", + "drive", + "drop", + "drum", + "dry", + "duck", + "dumb", + "dune", + "during", + "dust", + "dutch", + "duty", + "dwarf", + "dynamic", + "eager", + "eagle", + "early", + "earn", + "earth", + "easily", + "east", + "easy", + "echo", + "ecology", + "economy", + "edge", + "edit", + "educate", + "effort", + "egg", + "eight", + "either", + "elbow", + "elder", + "electric", + "elegant", + "element", + "elephant", + "elevator", + "elite", + "else", + "embark", + "embody", + "embrace", + "emerge", + "emotion", + "employ", + "empower", + "empty", + "enable", + "enact", + "end", + "endless", + "endorse", + "enemy", + "energy", + "enforce", + "engage", + "engine", + "enhance", + "enjoy", + "enlist", + "enough", + "enrich", + "enroll", + "ensure", + "enter", + "entire", + "entry", + "envelope", + "episode", + "equal", + "equip", + "era", + "erase", + "erode", + "erosion", + "error", + "erupt", + "escape", + "essay", + "essence", + "estate", + "eternal", + "ethics", + "evidence", + "evil", + "evoke", + "evolve", + "exact", + "example", + "excess", + "exchange", + "excite", + "exclude", + "excuse", + "execute", + "exercise", + "exhaust", + "exhibit", + "exile", + "exist", + "exit", + "exotic", + "expand", + "expect", + "expire", + "explain", + "expose", + "express", + "extend", + "extra", + "eye", + "eyebrow", + "fabric", + "face", + "faculty", + "fade", + "faint", + "faith", + "fall", + "false", + "fame", + "family", + "famous", + "fan", + "fancy", + "fantasy", + "farm", + "fashion", + "fat", + "fatal", + "father", + "fatigue", + "fault", + "favorite", + "feature", + "february", + "federal", + "fee", + "feed", + "feel", + "female", + "fence", + "festival", + "fetch", + "fever", + "few", + "fiber", + "fiction", + "field", + "figure", + "file", + "film", + "filter", + "final", + "find", + "fine", + "finger", + "finish", + "fire", + "firm", + "first", + "fiscal", + "fish", + "fit", + "fitness", + "fix", + "flag", + "flame", + "flash", + "flat", + "flavor", + "flee", + "flight", + "flip", + "float", + "flock", + "floor", + "flower", + "fluid", + "flush", + "fly", + "foam", + "focus", + "fog", + "foil", + "fold", + "follow", + "food", + "foot", + "force", + "forest", + "forget", + "fork", + "fortune", + "forum", + "forward", + "fossil", + "foster", + "found", + "fox", + "fragile", + "frame", + "frequent", + "fresh", + "friend", + "fringe", + "frog", + "front", + "frost", + "frown", + "frozen", + "fruit", + "fuel", + "fun", + "funny", + "furnace", + "fury", + "future", + "gadget", + "gain", + "galaxy", + "gallery", + "game", + "gap", + "garage", + "garbage", + "garden", + "garlic", + "garment", + "gas", + "gasp", + "gate", + "gather", + "gauge", + "gaze", + "general", + "genius", + "genre", + "gentle", + "genuine", + "gesture", + "ghost", + "giant", + "gift", + "giggle", + "ginger", + "giraffe", + "girl", + "give", + "glad", + "glance", + "glare", + "glass", + "glide", + "glimpse", + "globe", + "gloom", + "glory", + "glove", + "glow", + "glue", + "goat", + "goddess", + "gold", + "good", + "goose", + "gorilla", + "gospel", + "gossip", + "govern", + "gown", + "grab", + "grace", + "grain", + "grant", + "grape", + "grass", + "gravity", + "great", + "green", + "grid", + "grief", + "grit", + "grocery", + "group", + "grow", + "grunt", + "guard", + "guess", + "guide", + "guilt", + "guitar", + "gun", + "gym", + "habit", + "hair", + "half", + "hammer", + "hamster", + "hand", + "happy", + "harbor", + "hard", + "harsh", + "harvest", + "hat", + "have", + "hawk", + "hazard", + "head", + "health", + "heart", + "heavy", + "hedgehog", + "height", + "hello", + "helmet", + "help", + "hen", + "hero", + "hidden", + "high", + "hill", + "hint", + "hip", + "hire", + "history", + "hobby", + "hockey", + "hold", + "hole", + "holiday", + "hollow", + "home", + "honey", + "hood", + "hope", + "horn", + "horror", + "horse", + "hospital", + "host", + "hotel", + "hour", + "hover", + "hub", + "huge", + "human", + "humble", + "humor", + "hundred", + "hungry", + "hunt", + "hurdle", + "hurry", + "hurt", + "husband", + "hybrid", + "ice", + "icon", + "idea", + "identify", + "idle", + "ignore", + "ill", + "illegal", + "illness", + "image", + "imitate", + "immense", + "immune", + "impact", + "impose", + "improve", + "impulse", + "inch", + "include", + "income", + "increase", + "index", + "indicate", + "indoor", + "industry", + "infant", + "inflict", + "inform", + "inhale", + "inherit", + "initial", + "inject", + "injury", + "inmate", + "inner", + "innocent", + "input", + "inquiry", + "insane", + "insect", + "inside", + "inspire", + "install", + "intact", + "interest", + "into", + "invest", + "invite", + "involve", + "iron", + "island", + "isolate", + "issue", + "item", + "ivory", + "jacket", + "jaguar", + "jar", + "jazz", + "jealous", + "jeans", + "jelly", + "jewel", + "job", + "join", + "joke", + "journey", + "joy", + "judge", + "juice", + "jump", + "jungle", + "junior", + "junk", + "just", + "kangaroo", + "keen", + "keep", + "ketchup", + "key", + "kick", + "kid", + "kidney", + "kind", + "kingdom", + "kiss", + "kit", + "kitchen", + "kite", + "kitten", + "kiwi", + "knee", + "knife", + "knock", + "know", + "lab", + "label", + "labor", + "ladder", + "lady", + "lake", + "lamp", + "language", + "laptop", + "large", + "later", + "latin", + "laugh", + "laundry", + "lava", + "law", + "lawn", + "lawsuit", + "layer", + "lazy", + "leader", + "leaf", + "learn", + "leave", + "lecture", + "left", + "leg", + "legal", + "legend", + "leisure", + "lemon", + "lend", + "length", + "lens", + "leopard", + "lesson", + "letter", + "level", + "liar", + "liberty", + "library", + "license", + "life", + "lift", + "light", + "like", + "limb", + "limit", + "link", + "lion", + "liquid", + "list", + "little", + "live", + "lizard", + "load", + "loan", + "lobster", + "local", + "lock", + "logic", + "lonely", + "long", + "loop", + "lottery", + "loud", + "lounge", + "love", + "loyal", + "lucky", + "luggage", + "lumber", + "lunar", + "lunch", + "luxury", + "lyrics", + "machine", + "mad", + "magic", + "magnet", + "maid", + "mail", + "main", + "major", + "make", + "mammal", + "man", + "manage", + "mandate", + "mango", + "mansion", + "manual", + "maple", + "marble", + "march", + "margin", + "marine", + "market", + "marriage", + "mask", + "mass", + "master", + "match", + "material", + "math", + "matrix", + "matter", + "maximum", + "maze", + "meadow", + "mean", + "measure", + "meat", + "mechanic", + "medal", + "media", + "melody", + "melt", + "member", + "memory", + "mention", + "menu", + "mercy", + "merge", + "merit", + "merry", + "mesh", + "message", + "metal", + "method", + "middle", + "midnight", + "milk", + "million", + "mimic", + "mind", + "minimum", + "minor", + "minute", + "miracle", + "mirror", + "misery", + "miss", + "mistake", + "mix", + "mixed", + "mixture", + "mobile", + "model", + "modify", + "mom", + "moment", + "monitor", + "monkey", + "monster", + "month", + "moon", + "moral", + "more", + "morning", + "mosquito", + "mother", + "motion", + "motor", + "mountain", + "mouse", + "move", + "movie", + "much", + "muffin", + "mule", + "multiply", + "muscle", + "museum", + "mushroom", + "music", + "must", + "mutual", + "myself", + "mystery", + "myth", + "naive", + "name", + "napkin", + "narrow", + "nasty", + "nation", + "nature", + "near", + "neck", + "need", + "negative", + "neglect", + "neither", + "nephew", + "nerve", + "nest", + "net", + "network", + "neutral", + "never", + "news", + "next", + "nice", + "night", + "noble", + "noise", + "nominee", + "noodle", + "normal", + "north", + "nose", + "notable", + "note", + "nothing", + "notice", + "novel", + "now", + "nuclear", + "number", + "nurse", + "nut", + "oak", + "obey", + "object", + "oblige", + "obscure", + "observe", + "obtain", + "obvious", + "occur", + "ocean", + "october", + "odor", + "off", + "offer", + "office", + "often", + "oil", + "okay", + "old", + "olive", + "olympic", + "omit", + "once", + "one", + "onion", + "online", + "only", + "open", + "opera", + "opinion", + "oppose", + "option", + "orange", + "orbit", + "orchard", + "order", + "ordinary", + "organ", + "orient", + "original", + "orphan", + "ostrich", + "other", + "outdoor", + "outer", + "output", + "outside", + "oval", + "oven", + "over", + "own", + "owner", + "oxygen", + "oyster", + "ozone", + "pact", + "paddle", + "page", + "pair", + "palace", + "palm", + "panda", + "panel", + "panic", + "panther", + "paper", + "parade", + "parent", + "park", + "parrot", + "party", + "pass", + "patch", + "path", + "patient", + "patrol", + "pattern", + "pause", + "pave", + "payment", + "peace", + "peanut", + "pear", + "peasant", + "pelican", + "pen", + "penalty", + "pencil", + "people", + "pepper", + "perfect", + "permit", + "person", + "pet", + "phone", + "photo", + "phrase", + "physical", + "piano", + "picnic", + "picture", + "piece", + "pig", + "pigeon", + "pill", + "pilot", + "pink", + "pioneer", + "pipe", + "pistol", + "pitch", + "pizza", + "place", + "planet", + "plastic", + "plate", + "play", + "please", + "pledge", + "pluck", + "plug", + "plunge", + "poem", + "poet", + "point", + "polar", + "pole", + "police", + "pond", + "pony", + "pool", + "popular", + "portion", + "position", + "possible", + "post", + "potato", + "pottery", + "poverty", + "powder", + "power", + "practice", + "praise", + "predict", + "prefer", + "prepare", + "present", + "pretty", + "prevent", + "price", + "pride", + "primary", + "print", + "priority", + "prison", + "private", + "prize", + "problem", + "process", + "produce", + "profit", + "program", + "project", + "promote", + "proof", + "property", + "prosper", + "protect", + "proud", + "provide", + "public", + "pudding", + "pull", + "pulp", + "pulse", + "pumpkin", + "punch", + "pupil", + "puppy", + "purchase", + "purity", + "purpose", + "purse", + "push", + "put", + "puzzle", + "pyramid", + "quality", + "quantum", + "quarter", + "question", + "quick", + "quit", + "quiz", + "quote", + "rabbit", + "raccoon", + "race", + "rack", + "radar", + "radio", + "rail", + "rain", + "raise", + "rally", + "ramp", + "ranch", + "random", + "range", + "rapid", + "rare", + "rate", + "rather", + "raven", + "raw", + "razor", + "ready", + "real", + "reason", + "rebel", + "rebuild", + "recall", + "receive", + "recipe", + "record", + "recycle", + "reduce", + "reflect", + "reform", + "refuse", + "region", + "regret", + "regular", + "reject", + "relax", + "release", + "relief", + "rely", + "remain", + "remember", + "remind", + "remove", + "render", + "renew", + "rent", + "reopen", + "repair", + "repeat", + "replace", + "report", + "require", + "rescue", + "resemble", + "resist", + "resource", + "response", + "result", + "retire", + "retreat", + "return", + "reunion", + "reveal", + "review", + "reward", + "rhythm", + "rib", + "ribbon", + "rice", + "rich", + "ride", + "ridge", + "rifle", + "right", + "rigid", + "ring", + "riot", + "ripple", + "risk", + "ritual", + "rival", + "river", + "road", + "roast", + "robot", + "robust", + "rocket", + "romance", + "roof", + "rookie", + "room", + "rose", + "rotate", + "rough", + "round", + "route", + "royal", + "rubber", + "rude", + "rug", + "rule", + "run", + "runway", + "rural", + "sad", + "saddle", + "sadness", + "safe", + "sail", + "salad", + "salmon", + "salon", + "salt", + "salute", + "same", + "sample", + "sand", + "satisfy", + "satoshi", + "sauce", + "sausage", + "save", + "say", + "scale", + "scan", + "scare", + "scatter", + "scene", + "scheme", + "school", + "science", + "scissors", + "scorpion", + "scout", + "scrap", + "screen", + "script", + "scrub", + "sea", + "search", + "season", + "seat", + "second", + "secret", + "section", + "security", + "seed", + "seek", + "segment", + "select", + "sell", + "seminar", + "senior", + "sense", + "sentence", + "series", + "service", + "session", + "settle", + "setup", + "seven", + "shadow", + "shaft", + "shallow", + "share", + "shed", + "shell", + "sheriff", + "shield", + "shift", + "shine", + "ship", + "shiver", + "shock", + "shoe", + "shoot", + "shop", + "short", + "shoulder", + "shove", + "shrimp", + "shrug", + "shuffle", + "shy", + "sibling", + "sick", + "side", + "siege", + "sight", + "sign", + "silent", + "silk", + "silly", + "silver", + "similar", + "simple", + "since", + "sing", + "siren", + "sister", + "situate", + "six", + "size", + "skate", + "sketch", + "ski", + "skill", + "skin", + "skirt", + "skull", + "slab", + "slam", + "sleep", + "slender", + "slice", + "slide", + "slight", + "slim", + "slogan", + "slot", + "slow", + "slush", + "small", + "smart", + "smile", + "smoke", + "smooth", + "snack", + "snake", + "snap", + "sniff", + "snow", + "soap", + "soccer", + "social", + "sock", + "soda", + "soft", + "solar", + "soldier", + "solid", + "solution", + "solve", + "someone", + "song", + "soon", + "sorry", + "sort", + "soul", + "sound", + "soup", + "source", + "south", + "space", + "spare", + "spatial", + "spawn", + "speak", + "special", + "speed", + "spell", + "spend", + "sphere", + "spice", + "spider", + "spike", + "spin", + "spirit", + "split", + "spoil", + "sponsor", + "spoon", + "sport", + "spot", + "spray", + "spread", + "spring", + "spy", + "square", + "squeeze", + "squirrel", + "stable", + "stadium", + "staff", + "stage", + "stairs", + "stamp", + "stand", + "start", + "state", + "stay", + "steak", + "steel", + "stem", + "step", + "stereo", + "stick", + "still", + "sting", + "stock", + "stomach", + "stone", + "stool", + "story", + "stove", + "strategy", + "street", + "strike", + "strong", + "struggle", + "student", + "stuff", + "stumble", + "style", + "subject", + "submit", + "subway", + "success", + "such", + "sudden", + "suffer", + "sugar", + "suggest", + "suit", + "summer", + "sun", + "sunny", + "sunset", + "super", + "supply", + "supreme", + "sure", + "surface", + "surge", + "surprise", + "surround", + "survey", + "suspect", + "sustain", + "swallow", + "swamp", + "swap", + "swarm", + "swear", + "sweet", + "swift", + "swim", + "swing", + "switch", + "sword", + "symbol", + "symptom", + "syrup", + "system", + "table", + "tackle", + "tag", + "tail", + "talent", + "talk", + "tank", + "tape", + "target", + "task", + "taste", + "tattoo", + "taxi", + "teach", + "team", + "tell", + "ten", + "tenant", + "tennis", + "tent", + "term", + "test", + "text", + "thank", + "that", + "theme", + "then", + "theory", + "there", + "they", + "thing", + "this", + "thought", + "three", + "thrive", + "throw", + "thumb", + "thunder", + "ticket", + "tide", + "tiger", + "tilt", + "timber", + "time", + "tiny", + "tip", + "tired", + "tissue", + "title", + "toast", + "tobacco", + "today", + "toddler", + "toe", + "together", + "toilet", + "token", + "tomato", + "tomorrow", + "tone", + "tongue", + "tonight", + "tool", + "tooth", + "top", + "topic", + "topple", + "torch", + "tornado", + "tortoise", + "toss", + "total", + "tourist", + "toward", + "tower", + "town", + "toy", + "track", + "trade", + "traffic", + "tragic", + "train", + "transfer", + "trap", + "trash", + "travel", + "tray", + "treat", + "tree", + "trend", + "trial", + "tribe", + "trick", + "trigger", + "trim", + "trip", + "trophy", + "trouble", + "truck", + "true", + "truly", + "trumpet", + "trust", + "truth", + "try", + "tube", + "tuition", + "tumble", + "tuna", + "tunnel", + "turkey", + "turn", + "turtle", + "twelve", + "twenty", + "twice", + "twin", + "twist", + "two", + "type", + "typical", + "ugly", + "umbrella", + "unable", + "unaware", + "uncle", + "uncover", + "under", + "undo", + "unfair", + "unfold", + "unhappy", + "uniform", + "unique", + "unit", + "universe", + "unknown", + "unlock", + "until", + "unusual", + "unveil", + "update", + "upgrade", + "uphold", + "upon", + "upper", + "upset", + "urban", + "urge", + "usage", + "use", + "used", + "useful", + "useless", + "usual", + "utility", + "vacant", + "vacuum", + "vague", + "valid", + "valley", + "valve", + "van", + "vanish", + "vapor", + "various", + "vast", + "vault", + "vehicle", + "velvet", + "vendor", + "venture", + "venue", + "verb", + "verify", + "version", + "very", + "vessel", + "veteran", + "viable", + "vibrant", + "vicious", + "victory", + "video", + "view", + "village", + "vintage", + "violin", + "virtual", + "virus", + "visa", + "visit", + "visual", + "vital", + "vivid", + "vocal", + "voice", + "void", + "volcano", + "volume", + "vote", + "voyage", + "wage", + "wagon", + "wait", + "walk", + "wall", + "walnut", + "want", + "warfare", + "warm", + "warrior", + "wash", + "wasp", + "waste", + "water", + "wave", + "way", + "wealth", + "weapon", + "wear", + "weasel", + "weather", + "web", + "wedding", + "weekend", + "weird", + "welcome", + "west", + "wet", + "whale", + "what", + "wheat", + "wheel", + "when", + "where", + "whip", + "whisper", + "wide", + "width", + "wife", + "wild", + "will", + "win", + "window", + "wine", + "wing", + "wink", + "winner", + "winter", + "wire", + "wisdom", + "wise", + "wish", + "witness", + "wolf", + "woman", + "wonder", + "wood", + "wool", + "word", + "work", + "world", + "worry", + "worth", + "wrap", + "wreck", + "wrestle", + "wrist", + "write", + "wrong", + "yard", + "year", + "yellow", + "you", + "young", + "youth", + "zebra", + "zero", + "zone", + "zoo", + 0, }; + +#endif // BITCOIN_BIP39_ENGLISH_H diff --git a/src/blockencodings.cpp b/src/blockencodings.cpp index 48d8e9dd1f..d98f9b1cc7 100644 --- a/src/blockencodings.cpp +++ b/src/blockencodings.cpp @@ -2,29 +2,29 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "blockencodings.h" -#include "consensus/consensus.h" -#include "consensus/validation.h" -#include "chainparams.h" -#include "hash.h" -#include "random.h" -#include "streams.h" -#include "txmempool.h" -#include "validation.h" -#include "util.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #define MIN_TRANSACTION_SIZE (::GetSerializeSize(CTransaction(), SER_NETWORK, PROTOCOL_VERSION)) -CBlockHeaderAndShortTxIDs::CBlockHeaderAndShortTxIDs(const CBlock& block) : +CBlockHeaderAndShortTxIDs::CBlockHeaderAndShortTxIDs(const CBlock &block) : nonce(GetRand(std::numeric_limits::max())), shorttxids(block.vtx.size() - 1), prefilledtxn(1), header(block) { FillShortTxIDSelector(); //TODO: Use our mempool prior to block acceptance to predictively fill more than just the coinbase prefilledtxn[0] = {0, block.vtx[0]}; for (size_t i = 1; i < block.vtx.size(); i++) { - const CTransaction& tx = *block.vtx[i]; + const CTransaction &tx = *block.vtx[i]; shorttxids[i - 1] = GetShortID(tx.GetHash()); } } @@ -33,24 +33,24 @@ void CBlockHeaderAndShortTxIDs::FillShortTxIDSelector() const { CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); stream << header << nonce; CSHA256 hasher; - hasher.Write((unsigned char*)&(*stream.begin()), stream.end() - stream.begin()); + hasher.Write((unsigned char *) &(*stream.begin()), stream.end() - stream.begin()); uint256 shorttxidhash; hasher.Finalize(shorttxidhash.begin()); shorttxidk0 = shorttxidhash.GetUint64(0); shorttxidk1 = shorttxidhash.GetUint64(1); } -uint64_t CBlockHeaderAndShortTxIDs::GetShortID(const uint256& txhash) const { +uint64_t CBlockHeaderAndShortTxIDs::GetShortID(const uint256 &txhash) const { static_assert(SHORTTXIDS_LENGTH == 6, "shorttxids calculation assumes 6-byte shorttxids"); return SipHashUint256(shorttxidk0, shorttxidk1, txhash) & 0xffffffffffffL; } - -ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& cmpctblock, const std::vector>& extra_txn) { +ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs &cmpctblock, + const std::vector > &extra_txn) { if (cmpctblock.header.IsNull() || (cmpctblock.shorttxids.empty() && cmpctblock.prefilledtxn.empty())) return READ_STATUS_INVALID; - if (cmpctblock.shorttxids.size() + cmpctblock.prefilledtxn.size() > MaxBlockSize(true) / MIN_TRANSACTION_SIZE) + if (cmpctblock.shorttxids.size() + cmpctblock.prefilledtxn.size() > MaxBlockSize() / MIN_TRANSACTION_SIZE) return READ_STATUS_INVALID; assert(header.IsNull() && txn_available.empty()); @@ -65,7 +65,7 @@ ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& c lastprefilledindex += cmpctblock.prefilledtxn[i].index + 1; //index is a uint16_t, so can't overflow here if (lastprefilledindex > std::numeric_limits::max()) return READ_STATUS_INVALID; - if ((uint32_t)lastprefilledindex > cmpctblock.shorttxids.size() + i) { + if ((uint32_t) lastprefilledindex > cmpctblock.shorttxids.size() + i) { // If we are inserting a tx at an index greater than our full list of shorttxids // plus the number of prefilled txn we've inserted, then we have txn for which we // have neither a prefilled txn or a shorttxid! @@ -79,7 +79,7 @@ ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& c // Because well-formed cmpctblock messages will have a (relatively) uniform distribution // of short IDs, any highly-uneven distribution of elements can be safely treated as a // READ_STATUS_FAILED. - std::unordered_map shorttxids(cmpctblock.shorttxids.size()); + std::unordered_map shorttxids(cmpctblock.shorttxids.size()); uint16_t index_offset = 0; for (size_t i = 0; i < cmpctblock.shorttxids.size(); i++) { while (txn_available[i + index_offset]) @@ -105,32 +105,31 @@ ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& c std::vector have_txn(txn_available.size()); { - LOCK(pool->cs); - const std::vector >& vTxHashes = pool->vTxHashes; - for (size_t i = 0; i < vTxHashes.size(); i++) { - uint64_t shortid = cmpctblock.GetShortID(vTxHashes[i].first); - std::unordered_map::iterator idit = shorttxids.find(shortid); - if (idit != shorttxids.end()) { - if (!have_txn[idit->second]) { - txn_available[idit->second] = vTxHashes[i].second->GetSharedTx(); - have_txn[idit->second] = true; - mempool_count++; - } else { - // If we find two mempool txn that match the short id, just request it. - // This should be rare enough that the extra bandwidth doesn't matter, - // but eating a round-trip due to FillBlock failure would be annoying - if (txn_available[idit->second]) { - txn_available[idit->second].reset(); - mempool_count--; + LOCK(pool->cs); + for (size_t i = 0; i < pool->vTxHashes.size(); i++) { + uint64_t shortid = cmpctblock.GetShortID(pool->vTxHashes[i].first); + std::unordered_map::iterator idit = shorttxids.find(shortid); + if (idit != shorttxids.end()) { + if (!have_txn[idit->second]) { + txn_available[idit->second] = pool->vTxHashes[i].second->GetSharedTx(); + have_txn[idit->second] = true; + mempool_count++; + } else { + // If we find two mempool txn that match the short id, just request it. + // This should be rare enough that the extra bandwidth doesn't matter, + // but eating a round-trip due to FillBlock failure would be annoying + if (txn_available[idit->second]) { + txn_available[idit->second].reset(); + mempool_count--; + } } } + // Though ideally we'd continue scanning for the two-txn-match-shortid case, + // the performance win of an early exit here is too good to pass up and worth + // the extra risk. + if (mempool_count == shorttxids.size()) + break; } - // Though ideally we'd continue scanning for the two-txn-match-shortid case, - // the performance win of an early exit here is too good to pass up and worth - // the extra risk. - if (mempool_count == shorttxids.size()) - break; - } } for (size_t i = 0; i < extra_txn.size(); i++) { @@ -139,7 +138,7 @@ ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& c if (idit != shorttxids.end()) { if (!have_txn[idit->second]) { txn_available[idit->second] = extra_txn[i].second; - have_txn[idit->second] = true; + have_txn[idit->second] = true; mempool_count++; extra_count++; } else { @@ -150,7 +149,7 @@ ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& c // Note that we don't want duplication between extra_txn and mempool to // trigger this case, so we compare hashes first if (txn_available[idit->second] && - txn_available[idit->second]->GetHash() != extra_txn[i].second->GetHash()) { + txn_available[idit->second]->GetHash() != extra_txn[i].second->GetHash()) { txn_available[idit->second].reset(); mempool_count--; extra_count--; @@ -164,7 +163,8 @@ ReadStatus PartiallyDownloadedBlock::InitData(const CBlockHeaderAndShortTxIDs& c break; } - LogPrint(BCLog::CMPCTBLOCK, "Initialized PartiallyDownloadedBlock for block %s using a cmpctblock of size %lu\n", cmpctblock.header.GetHash().ToString(), GetSerializeSize(cmpctblock, SER_NETWORK, PROTOCOL_VERSION)); + LogPrint(BCLog::CMPCTBLOCK, "Initialized PartiallyDownloadedBlock for block %s using a cmpctblock of size %lu\n", + cmpctblock.header.GetHash().ToString(), GetSerializeSize(cmpctblock, SER_NETWORK, PROTOCOL_VERSION)); return READ_STATUS_OK; } @@ -175,7 +175,7 @@ bool PartiallyDownloadedBlock::IsTxAvailable(size_t index) const { return txn_available[index] != nullptr; } -ReadStatus PartiallyDownloadedBlock::FillBlock(CBlock& block, const std::vector& vtx_missing) { +ReadStatus PartiallyDownloadedBlock::FillBlock(CBlock &block, const std::vector &vtx_missing) { assert(!header.IsNull()); uint256 hash = header.GetHash(); block = header; @@ -199,8 +199,8 @@ ReadStatus PartiallyDownloadedBlock::FillBlock(CBlock& block, const std::vector< return READ_STATUS_INVALID; CValidationState state; - //skip founder check - if (!CheckBlock(block, state, Params().GetConsensus(), 0)) { + int currentHeight = ::ChainActive().Height() + 1; + if (!CheckBlock(block, state, Params().GetConsensus(), currentHeight)) { // TODO: We really want to just check merkle tree manually here, // but that is expensive, and CheckBlock caches a block's // "checked-status" (in the CBlock?). CBlock should be able to @@ -210,10 +210,13 @@ ReadStatus PartiallyDownloadedBlock::FillBlock(CBlock& block, const std::vector< return READ_STATUS_CHECKBLOCK_FAILED; } - LogPrint(BCLog::CMPCTBLOCK, "Successfully reconstructed block %s with %lu txn prefilled, %lu txn from mempool (incl at least %lu from extra pool) and %lu txn requested\n", hash.ToString(), prefilled_count, mempool_count, extra_count, vtx_missing.size()); + LogPrint(BCLog::CMPCTBLOCK, + "Successfully reconstructed block %s with %lu txn prefilled, %lu txn from mempool (incl at least %lu from extra pool) and %lu txn requested\n", + hash.ToString(), prefilled_count, mempool_count, extra_count, vtx_missing.size()); if (vtx_missing.size() < 5) { - for (const auto& tx : vtx_missing) { - LogPrint(BCLog::CMPCTBLOCK, "Reconstructed block %s required tx %s\n", hash.ToString(), tx->GetHash().ToString()); + for (const auto &tx: vtx_missing) { + LogPrint(BCLog::CMPCTBLOCK, "Reconstructed block %s required tx %s\n", hash.ToString(), + tx->GetHash().ToString()); } } diff --git a/src/blockencodings.h b/src/blockencodings.h index a768a753f5..c5c3e0f4fd 100644 --- a/src/blockencodings.h +++ b/src/blockencodings.h @@ -2,27 +2,37 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef BITCOIN_BLOCK_ENCODINGS_H -#define BITCOIN_BLOCK_ENCODINGS_H +#ifndef BITCOIN_BLOCKENCODINGS_H +#define BITCOIN_BLOCKENCODINGS_H -#include "primitives/block.h" - -#include +#include class CTxMemPool; -// Dumb helper to handle CTransaction compression at serialize-time -struct TransactionCompressor { -private: - CTransactionRef& tx; -public: - TransactionCompressor(CTransactionRef& txIn) : tx(txIn) {} +// Transaction compression schemes for compact block relay +// can be introduced by writing an actual formatter here. +using TransactionCompression = DefaultFormatter; - ADD_SERIALIZE_METHODS; +class DifferenceFormatter { + uint64_t m_shift = 0; - template - inline void SerializationOp(Stream& s, Operation ser_action) { - READWRITE(tx); //TODO: Compress tx encoding +public: + template + void Ser(Stream &s, I v) { + if (v < m_shift || v >= std::numeric_limits::max()) + throw std::ios_base::failure("differential value overflow"); + WriteCompactSize(s, v - m_shift); + m_shift = uint64_t(v) + 1; + } + + template + void Unser(Stream &s, I &v) { + uint64_t n = ReadCompactSize(s); + m_shift += n; + if (m_shift < n || m_shift >= std::numeric_limits::max() || m_shift < std::numeric_limits::min() || + m_shift > std::numeric_limits::max()) + throw std::ios_base::failure("differential value overflow"); + v = I(m_shift++); } }; @@ -30,41 +40,12 @@ class BlockTransactionsRequest { public: // A BlockTransactionsRequest message uint256 blockhash; - std::vector indexes; - - ADD_SERIALIZE_METHODS; + std::vector indexes; - template - inline void SerializationOp(Stream& s, Operation ser_action) { - READWRITE(blockhash); - uint64_t indexes_size = (uint64_t)indexes.size(); - READWRITE(COMPACTSIZE(indexes_size)); - if (ser_action.ForRead()) { - size_t i = 0; - while (indexes.size() < indexes_size) { - indexes.resize(std::min((uint64_t)(1000 + indexes.size()), indexes_size)); - for (; i < indexes.size(); i++) { - uint64_t index = 0; - READWRITE(COMPACTSIZE(index)); - if (index > std::numeric_limits::max()) - throw std::ios_base::failure("index overflowed 16 bits"); - indexes[i] = index; - } - } - - uint16_t offset = 0; - for (size_t j = 0; j < indexes.size(); j++) { - if (uint64_t(indexes[j]) + uint64_t(offset) > std::numeric_limits::max()) - throw std::ios_base::failure("indexes overflowed 16 bits"); - indexes[j] = indexes[j] + offset; - offset = indexes[j] + 1; - } - } else { - for (size_t i = 0; i < indexes.size(); i++) { - uint64_t index = indexes[i] - (i == 0 ? 0 : (indexes[i - 1] + 1)); - READWRITE(COMPACTSIZE(index)); - } - } + SERIALIZE_METHODS(BlockTransactionsRequest, obj + ) + { + READWRITE(obj.blockhash, Using < VectorFormatter < DifferenceFormatter >> (obj.indexes)); } }; @@ -72,30 +53,17 @@ class BlockTransactions { public: // A BlockTransactions message uint256 blockhash; - std::vector txn; + std::vector txn; BlockTransactions() {} - BlockTransactions(const BlockTransactionsRequest& req) : - blockhash(req.blockhash), txn(req.indexes.size()) {} - ADD_SERIALIZE_METHODS; + explicit BlockTransactions(const BlockTransactionsRequest &req) : + blockhash(req.blockhash), txn(req.indexes.size()) {} - template - inline void SerializationOp(Stream& s, Operation ser_action) { - READWRITE(blockhash); - uint64_t txn_size = (uint64_t)txn.size(); - READWRITE(COMPACTSIZE(txn_size)); - if (ser_action.ForRead()) { - size_t i = 0; - while (txn.size() < txn_size) { - txn.resize(std::min((uint64_t)(1000 + txn.size()), txn_size)); - for (; i < txn.size(); i++) - READWRITE(REF(TransactionCompressor(txn[i]))); - } - } else { - for (size_t i = 0; i < txn.size(); i++) - READWRITE(REF(TransactionCompressor(txn[i]))); - } + SERIALIZE_METHODS(BlockTransactions, obj + ) + { + READWRITE(obj.blockhash, Using < VectorFormatter < TransactionCompression >> (obj.txn)); } }; @@ -106,26 +74,17 @@ struct PrefilledTransaction { uint16_t index; CTransactionRef tx; - ADD_SERIALIZE_METHODS; - - template - inline void SerializationOp(Stream& s, Operation ser_action) { - uint64_t idx = index; - READWRITE(COMPACTSIZE(idx)); - if (idx > std::numeric_limits::max()) - throw std::ios_base::failure("index overflowed 16-bits"); - index = idx; - READWRITE(REF(TransactionCompressor(tx))); + SERIALIZE_METHODS(PrefilledTransaction, obj) { + READWRITE(COMPACTSIZE(obj.index), Using(obj.tx)); } }; -typedef enum ReadStatus_t -{ +typedef enum ReadStatus_t { READ_STATUS_OK, READ_STATUS_INVALID, // Invalid object, peer is sending bogus crap READ_STATUS_FAILED, // Failed to process object READ_STATUS_CHECKBLOCK_FAILED, // Used only by FillBlock to indicate a - // failure in CheckBlock. + // failure in CheckBlock. } ReadStatus; class CBlockHeaderAndShortTxIDs { @@ -137,73 +96,54 @@ class CBlockHeaderAndShortTxIDs { friend class PartiallyDownloadedBlock; - static const int SHORTTXIDS_LENGTH = 6; protected: - std::vector shorttxids; - std::vector prefilledtxn; + std::vector shorttxids; + std::vector prefilledtxn; public: + static constexpr int SHORTTXIDS_LENGTH = 6; CBlockHeader header; // Dummy for deserialization CBlockHeaderAndShortTxIDs() {} - CBlockHeaderAndShortTxIDs(const CBlock& block); + CBlockHeaderAndShortTxIDs(const CBlock &block); - uint64_t GetShortID(const uint256& txhash) const; + uint64_t GetShortID(const uint256 &txhash) const; size_t BlockTxCount() const { return shorttxids.size() + prefilledtxn.size(); } - ADD_SERIALIZE_METHODS; - - template - inline void SerializationOp(Stream& s, Operation ser_action) { - READWRITE(header); - READWRITE(nonce); - - uint64_t shorttxids_size = (uint64_t)shorttxids.size(); - READWRITE(COMPACTSIZE(shorttxids_size)); + SERIALIZE_METHODS(CBlockHeaderAndShortTxIDs, obj + ) + { + READWRITE(obj.header, obj.nonce, Using < VectorFormatter < CustomUintFormatter < + SHORTTXIDS_LENGTH>>>(obj.shorttxids), obj.prefilledtxn); if (ser_action.ForRead()) { - size_t i = 0; - while (shorttxids.size() < shorttxids_size) { - shorttxids.resize(std::min((uint64_t)(1000 + shorttxids.size()), shorttxids_size)); - for (; i < shorttxids.size(); i++) { - uint32_t lsb = 0; uint16_t msb = 0; - READWRITE(lsb); - READWRITE(msb); - shorttxids[i] = (uint64_t(msb) << 32) | uint64_t(lsb); - static_assert(SHORTTXIDS_LENGTH == 6, "shorttxids serialization assumes 6-byte shorttxids"); - } - } - } else { - for (size_t i = 0; i < shorttxids.size(); i++) { - uint32_t lsb = shorttxids[i] & 0xffffffff; - uint16_t msb = (shorttxids[i] >> 32) & 0xffff; - READWRITE(lsb); - READWRITE(msb); + if (obj.BlockTxCount() > std::numeric_limits::max()) { + throw std::ios_base::failure("indexes overflowed 16 bits"); } + obj.FillShortTxIDSelector(); } - - READWRITE(prefilledtxn); - - if (ser_action.ForRead()) - FillShortTxIDSelector(); } }; class PartiallyDownloadedBlock { protected: - std::vector txn_available; + std::vector txn_available; size_t prefilled_count = 0, mempool_count = 0, extra_count = 0; - CTxMemPool* pool; + const CTxMemPool *pool; public: CBlockHeader header; - PartiallyDownloadedBlock(CTxMemPool* poolIn) : pool(poolIn) {} + + explicit PartiallyDownloadedBlock(CTxMemPool *poolIn) : pool(poolIn) {} // extra_txn is a list of extra transactions to look at, in form - ReadStatus InitData(const CBlockHeaderAndShortTxIDs& cmpctblock, const std::vector>& extra_txn); + ReadStatus InitData(const CBlockHeaderAndShortTxIDs &cmpctblock, + const std::vector > &extra_txn); + bool IsTxAvailable(size_t index) const; - ReadStatus FillBlock(CBlock& block, const std::vector& vtx_missing); + + ReadStatus FillBlock(CBlock &block, const std::vector &vtx_missing); }; -#endif +#endif // BITCOIN_BLOCKENCODINGS_H diff --git a/src/blockfilter.cpp b/src/blockfilter.cpp new file mode 100644 index 0000000000..31dd2bada0 --- /dev/null +++ b/src/blockfilter.cpp @@ -0,0 +1,246 @@ +// Copyright (c) 2018 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include +#include +#include +#include