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