Compare commits

..

36 Commits

Author SHA1 Message Date
SChernykh 458c7a3389 p2pool v4.11 2025-09-27 12:29:52 +02:00
SChernykh 82f3982175 Fixed wallet payout log message for subaddresses 2025-09-27 10:13:37 +02:00
SChernykh 0184a3139c CI: revised clang-tidy list of checks 2025-09-25 18:46:22 +02:00
SChernykh 26357f44ec Merge pull request #376 from SChernykh/subaddress
Subaddress support
2025-09-25 14:51:43 +02:00
SChernykh 85931f564a Build scripts: updated versions, moved downloads to the beginning 2025-09-25 13:23:27 +02:00
SChernykh 1e8e6c1010 Added filter for late txpool notifications 2025-09-24 09:56:53 +02:00
SChernykh f6a1612ff1 Fixed build errors 2025-09-23 17:17:17 +02:00
SChernykh 1eb22109b5 Fixed m_mergeMiningExtra format description 2025-09-23 12:53:50 +02:00
SChernykh c0b99ac6fd Refactored BlockTemplate::update() - removed the use of pointers as parameters 2025-09-23 11:45:56 +02:00
SChernykh cff1210761 Store public viewkey of the subaddress 2025-09-22 19:00:43 +02:00
SChernykh bae7c65126 Reproducible builds: fixed clang version display 2025-09-22 17:59:30 +02:00
SChernykh 04d195d5cd Added support for mining to a subaddress 2025-09-22 14:24:11 +02:00
SChernykh a4e1f00993 Wallet: added subaddress detection 2025-09-21 15:50:08 +02:00
SChernykh 0d101f0ae6 Fixed MSVC build 2025-09-20 19:23:25 +02:00
SChernykh 2ae77e5b71 MSVC: disable permissive mode 2025-09-20 18:02:57 +02:00
SChernykh 2e32d14d5f CI: tweaked msan parameters 2025-09-19 21:19:43 +02:00
SChernykh 415ad70e2f CI: lighter parameters for msan 2025-09-19 10:09:40 +02:00
SChernykh 6380e204dd CI: increased time limit for msan 2025-09-19 08:05:03 +02:00
SChernykh 12993dfe19 Fixed FreeBSD build 2025-09-18 22:29:30 +02:00
SChernykh a64753ecd0 clang-21, one more time 2025-09-18 21:37:49 +02:00
SChernykh e9c7367b92 Reverted back to clang-20 for msan 2025-09-17 19:16:49 +02:00
SChernykh 9f7dc5b768 CI: use clang-21 for msan 2025-09-17 14:12:10 +02:00
SChernykh f141bef4b5 Fixed TLS init order 2025-09-17 09:14:32 +02:00
SChernykh 32e940577e Tari: track gRPC channel state and display it in logs/status/API 2025-09-15 15:53:35 +02:00
SChernykh 012d148080 Added git mailmap 2025-09-15 14:31:15 +02:00
SChernykh d64b4ea2dc Updated recommended Monero version 2025-09-15 14:21:26 +02:00
sech1 a9e0b834d9 Reproducible builds: shortened clang version display 2025-09-15 09:39:30 +02:00
sech1 3a8ec27d93 Reproducible builds: fix git commit display 2025-09-14 17:58:48 +02:00
sech1 b69de65e78 Display git commit in version 2025-09-14 16:27:26 +02:00
sech1 44f8d941a7 Refactored background job shutdown logic 2025-09-14 14:41:31 +02:00
sech1 8c1c5fd8e1 P2PServer: check PoW in background to not stall the P2P loop 2025-09-14 12:55:23 +02:00
sech1 bbfdeeaff5 Log submit_block RPC performance 2025-09-14 00:25:15 +02:00
sech1 f12e43bb79 CI: use the latest cppcheck again 2025-09-13 12:02:16 +02:00
sech1 a1544022cf Build scripts: updated tool versions 2025-09-13 10:04:43 +02:00
sech1 e2008578da Updated Tari gRPC proto files 2025-09-10 21:11:43 +02:00
sech1 9b5a43580e Updated curl to 8.16.0 2025-09-10 14:19:06 +02:00
77 changed files with 2563 additions and 1317 deletions
+1 -9
View File
@@ -46,7 +46,6 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto ${{ matrix.config.flags }}" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
shell: alpine.sh {0}
@@ -199,7 +198,6 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto ${{ matrix.config.flags }}" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
run: |
@@ -277,7 +275,6 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto=auto ${{ matrix.config.flags }}" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
run: |
@@ -362,7 +359,6 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../cmake/riscv64_toolchain.cmake -DCMAKE_C_FLAGS="-Os -flto=auto ${{ matrix.config.flags }}" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
run: |
@@ -461,7 +457,6 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_C_FLAGS="-Os ${{ matrix.config.flags }}" -DCURL_TARGET_WINDOWS_VERSION=0x0600 -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
run: |
@@ -601,7 +596,6 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@15)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@15)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j4
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
run: |
@@ -669,7 +663,6 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@15)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@15)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="-Os -target arm64-apple-macos-11" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j3
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
run: |
@@ -759,8 +752,7 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS="-Os -flto" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j4
cd lib && mkdir .libs && cp libcurl.a .libs
cd ../../libuv
cd ../libuv
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
+1 -1
View File
@@ -37,4 +37,4 @@ jobs:
- name: Run clang-tidy
run: |
cd src
clang-tidy-21 *.cpp -p ../build -checks=-clang-diagnostic-undefined-internal,-clang-analyzer-optin.performance.Padding,-clang-diagnostic-nan-infinity-disabled -warnings-as-errors=* -header-filter=^[^\.]
clang-tidy-21 *.cpp -p ../build -checks=bugprone-*,clang-analyzer-*,llvm-*,cppcoreguidelines-pro-type-cstyle-cast,cppcoreguidelines-rvalue-reference-param-not-moved,hicpp-use-emplace,hicpp-use-override,-bugprone-easily-swappable-parameters,-bugprone-empty-catch,-llvm-include-order -warnings-as-errors=* -header-filter=^[^\./]
-1
View File
@@ -32,7 +32,6 @@ jobs:
- name: Build cppcheck
run: |
cd cppcheck-main
git checkout 1d9ea2ffcca587f99c68f0b6a4c37d5b3e046c28
make -j$(nproc) cppcheck
- name: cmake p2pool
+8 -11
View File
@@ -36,7 +36,6 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_C_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
run: |
@@ -98,14 +97,14 @@ jobs:
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 20 all
sudo ./llvm.sh 21 all
- name: Build libcxx_msan
run: |
git clone --depth=1 https://github.com/llvm/llvm-project -b release/20.x
git clone --depth=1 https://github.com/llvm/llvm-project -b release/21.x
cd llvm-project
mkdir build
cmake -G Ninja -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -DLLVM_USE_SANITIZER=MemoryWithOrigins -DLIBCXXABI_USE_LLVM_UNWINDER=OFF
cmake -G Ninja -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" -DCMAKE_C_COMPILER=clang-21 -DCMAKE_CXX_COMPILER=clang++-21 -DLLVM_USE_SANITIZER=MemoryWithOrigins -DLIBCXXABI_USE_LLVM_UNWINDER=OFF
ninja -C build cxx cxxabi
cd build
mkdir /tmp/libcxx_msan
@@ -120,16 +119,15 @@ jobs:
- name: Build libcurl
run: |
cd external/src/curl
cmake . -DCMAKE_C_COMPILER=clang-20 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -Og -fno-omit-frame-pointer -g' -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
cmake . -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -O0 -fno-omit-frame-pointer -g3' -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
run: |
cd external/src/libuv
mkdir build
cd build
cmake .. -DCMAKE_C_COMPILER=clang-20 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -Og -fno-omit-frame-pointer -g' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -O0 -fno-omit-frame-pointer -g3' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
make -j$(nproc)
- name: Build libzmq
@@ -137,14 +135,14 @@ jobs:
cd external/src/libzmq
mkdir build
cd build
cmake .. -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -Og -fno-omit-frame-pointer -g' -DCMAKE_CXX_FLAGS='-nostdinc++ -nostdlib++ -fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -Og -fno-omit-frame-pointer -g -isystem /tmp/libcxx_msan/include/c++/v1 -L/tmp/libcxx_msan/lib -lc++ -lc++abi -Wno-unused-command-line-argument' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_CXX_COMPILER=clang++-21 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -O0 -fno-omit-frame-pointer -g3' -DCMAKE_CXX_FLAGS='-nostdinc++ -nostdlib++ -fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -isystem /tmp/libcxx_msan/include/c++/v1 -O0 -fno-omit-frame-pointer -g3' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
make -j$(nproc)
- name: Build p2pool
run: |
mkdir build
cd build
cmake .. -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -fno-omit-frame-pointer -g' -DCMAKE_CXX_FLAGS='-nostdinc++ -nostdlib++ -fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -isystem /tmp/libcxx_msan/include/c++/v1 -L/tmp/libcxx_msan/lib -Wl,-rpath /tmp/libcxx_msan/lib -lc++ -lc++abi -Wno-unused-command-line-argument -fuse-ld=lld-20 -fno-omit-frame-pointer -g' -DDEV_TEST_SYNC=ON -DDEV_WITH_MSAN=ON -DWITH_LTO=OFF -DSTATIC_LIBS=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-21 -DCMAKE_CXX_COMPILER=clang++-21 -DCMAKE_C_FLAGS='-fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -fno-omit-frame-pointer' -DCMAKE_CXX_FLAGS='-nostdinc++ -nostdlib++ -fsanitize=memory -fsanitize-recover -fsanitize-memory-track-origins -isystem /tmp/libcxx_msan/include/c++/v1 -L/tmp/libcxx_msan/lib -Wl,-rpath /tmp/libcxx_msan/lib -lc++ -lc++abi -Wno-unused-command-line-argument -fuse-ld=lld-21 -fno-omit-frame-pointer' -DDEV_TEST_SYNC=ON -DDEV_WITH_MSAN=ON -DWITH_LTO=OFF -DSTATIC_LIBS=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
make -j$(nproc) p2pool
- name: Run p2pool
@@ -155,7 +153,7 @@ jobs:
python ../tests/src/stratum_dummy.py 2 &
python ../tests/src/stratum_dummy.py 3 &
sudo sysctl vm.mmap_rnd_bits=28
MSAN_OPTIONS="halt_on_error=1" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg ${{ secrets.MM_PARAMS }} --mini --out-peers 200 --data-api data --local-api --loglevel 6
MSAN_OPTIONS="halt_on_error=1" ./p2pool --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg ${{ secrets.MM_PARAMS }} --out-peers 50 --data-api data --local-api --loglevel 6
- name: Check p2pool.log
run: |
@@ -286,7 +284,6 @@ jobs:
cd external/src/curl
cmake . -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_AR="$(brew --prefix llvm@15)/bin/llvm-ar" -DCMAKE_RANLIB="$(brew --prefix llvm@15)/bin/llvm-ranlib" -DCMAKE_C_FLAGS="${{ matrix.config.flags }}" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DCURL_DISABLE_TESTS=ON -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j4
cd lib && mkdir .libs && cp libcurl.a .libs
- name: Build libuv
run: |
+1
View File
@@ -0,0 +1 @@
SChernykh <15806605+SChernykh@users.noreply.github.com> sech1 <sech1@sech1>
+6 -3
View File
@@ -257,14 +257,14 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU OR CMAKE_CXX_COMPILER_ID MATCHES Clang)
find_library(UV_LIBRARY_DEBUG NAMES uv libuv.a)
find_library(UV_LIBRARY NAMES uv libuv.a)
if (WIN32)
find_library(CURL_LIBRARY_DEBUG NAMES libcurl.a PATHS "external/src/curl/lib" NO_DEFAULT_PATH)
find_library(CURL_LIBRARY_DEBUG NAMES libcurl-d.a PATHS "external/src/curl/lib" NO_DEFAULT_PATH)
find_library(CURL_LIBRARY NAMES libcurl.a PATHS "external/src/curl/lib" NO_DEFAULT_PATH)
else()
if (CURL_LIBRARIES)
set(CURL_LIBRARY_DEBUG ${CURL_LIBRARIES})
set(CURL_LIBRARY ${CURL_LIBRARIES})
else()
find_library(CURL_LIBRARY_DEBUG NAMES curl)
find_library(CURL_LIBRARY_DEBUG NAMES curl-d)
find_library(CURL_LIBRARY NAMES curl)
endif()
endif()
@@ -394,6 +394,8 @@ if (WIN32 AND (CMAKE_BUILD_TYPE STREQUAL "Release"))
add_definitions(-DNDEBUG)
endif()
include(cmake/git.cmake)
add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES})
if (STATIC_BINARY OR STATIC_LIBS)
@@ -448,7 +450,8 @@ if (STATIC_BINARY OR STATIC_LIBS)
target_link_libraries(${CMAKE_PROJECT_NAME}
"${CMAKE_SOURCE_DIR}/external/src/libzmq/build/lib/libzmq.a"
"${CMAKE_SOURCE_DIR}/external/src/libuv/build/libuv.a"
"${CMAKE_SOURCE_DIR}/external/src/curl/lib/libcurl.a"
debug "${CMAKE_SOURCE_DIR}/external/src/curl/lib/libcurl-d.a"
optimized "${CMAKE_SOURCE_DIR}/external/src/curl/lib/libcurl.a"
${STATIC_LIBS}
)
else()
+1 -1
View File
@@ -82,7 +82,7 @@ In order to continue mining on P2Pool, you must update both Monero and P2Pool so
|Monero protocol version|Required Monero software version|Required P2Pool version
|-|-|-|
|v15, v16 (active after August 13th, 2022)|v0.18.0.0 or newer, v0.18.4.1 is recommended|v4.0 or newer
|v15, v16 (active after August 13th, 2022)|v0.18.0.0 or newer, v0.18.4.2 is recommended|v4.0 or newer
## How to mine on P2Pool
+1 -1
View File
@@ -73,7 +73,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
endif()
endif()
elseif (CMAKE_CXX_COMPILER_ID MATCHES MSVC)
set(GENERAL_FLAGS "/MP /EHa")
set(GENERAL_FLAGS "/MP /EHa /permissive-")
set(WARNING_FLAGS "/Wall /WX /sdl")
set(SECURITY_FLAGS "/GS /guard:cf")
set(OPTIMIZATION_FLAGS "/O2 /Oi /Ob2 /Ot /Oy /DNDEBUG /GL")
+33
View File
@@ -0,0 +1,33 @@
if (GIT_COMMIT)
message(STATUS "GIT_COMMIT is set to ${GIT_COMMIT}")
else()
set(GIT_COMMIT "unknown")
find_program(GIT_EXECUTABLE git)
if (GIT_EXECUTABLE)
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short=7 HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
RESULT_VARIABLE RET
OUTPUT_VARIABLE COMMIT
OUTPUT_STRIP_TRAILING_WHITESPACE)
if (RET EQUAL 0)
set(GIT_COMMIT "${COMMIT}")
execute_process(COMMAND git status --porcelain
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
RESULT_VARIABLE RET
OUTPUT_VARIABLE GIT_UNSTAGED
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(GIT_UNSTAGED OR RET)
set(GIT_COMMIT "${GIT_COMMIT} (dirty)")
endif()
endif()
endif()
message(STATUS "You are currently on commit ${GIT_COMMIT}")
endif()
add_compile_definitions(GIT_COMMIT="${GIT_COMMIT}")
+2 -1
View File
@@ -1,7 +1,8 @@
### P2Pool command line options
```
--wallet Wallet address to mine to. Subaddresses and integrated addresses are not supported!
--wallet Main wallet address (the one that starts with 4...). To mine to a subaddress of this wallet, use it together with --subaddress
--subaddress Subaddress to mine to. It must belong to the same wallet that was specified with --wallet parameter
--host IP address of your Monero node, default is 127.0.0.1
--rpc-port monerod RPC API port number, default is 18081
--zmq-port monerod ZMQ pub port number, default is 18083 (same port as in monerod's "--zmq-pub" command line parameter)
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+6 -2
View File
@@ -262,8 +262,9 @@ message NetworkDifficultyResponse {
uint64 sha3x_estimated_hash_rate = 6;
uint64 monero_randomx_estimated_hash_rate = 7;
uint64 tari_randomx_estimated_hash_rate = 10;
UDecimalValue cuckaroo_estimated_hash_rate = 11;
uint64 num_coinbases = 8;
repeated bytes coinbase_extras = 9;
repeated bytes coinbase_extras = 9;
}
// A generic single value response for a specific height
@@ -626,9 +627,12 @@ message GetNetworkStateResponse {
uint64 reward = 5;
// estimate sha3x hash rate
uint64 sha3x_estimated_hash_rate = 6;
// estimate randomx hash rate
// estimate monero randomx hash rate
uint64 monero_randomx_estimated_hash_rate = 7;
// estimate tari randomx hash rate
uint64 tari_randomx_estimated_hash_rate = 10;
// estimate cuckaroo hash rate
UDecimalValue cuckaroo_estimated_hash_rate = 12;
// number of connections
uint64 num_connections = 8;
//liveness results
+18 -17
View File
@@ -384,22 +384,23 @@ const char descriptor_table_protodef_block_2eproto[] ABSL_ATTRIBUTE_SECTION_VARI
"tal_script_offset\030\017 \001(\014\022\031\n\021validator_nod"
"e_mr\030\020 \001(\014\022\033\n\023validator_node_size\030\021 \001(\004\""
"1\n\013ProofOfWork\022\020\n\010pow_algo\030\001 \001(\004\022\020\n\010pow_"
"data\030\004 \001(\014\"\210\001\n\007PowAlgo\022,\n\010pow_algo\030\001 \001(\016"
"2\032.tari.rpc.PowAlgo.PowAlgos\"O\n\010PowAlgos"
"data\030\004 \001(\014\"\240\001\n\007PowAlgo\022,\n\010pow_algo\030\001 \001(\016"
"2\032.tari.rpc.PowAlgo.PowAlgos\"g\n\010PowAlgos"
"\022\026\n\022POW_ALGOS_RANDOMXM\020\000\022\023\n\017POW_ALGOS_SH"
"A3X\020\001\022\026\n\022POW_ALGOS_RANDOMXT\020\002\"U\n\005Block\022%"
"\n\006header\030\001 \001(\0132\025.tari.rpc.BlockHeader\022%\n"
"\004body\030\002 \001(\0132\027.tari.rpc.AggregateBody\"H\n\017"
"HistoricalBlock\022\025\n\rconfirmations\030\001 \001(\004\022\036"
"\n\005block\030\002 \001(\0132\017.tari.rpc.Block\"\252\001\n\026NewBl"
"ockHeaderTemplate\022\017\n\007version\030\001 \001(\r\022\016\n\006he"
"ight\030\002 \001(\004\022\021\n\tprev_hash\030\003 \001(\014\022\033\n\023total_k"
"ernel_offset\030\004 \001(\014\022\"\n\003pow\030\005 \001(\0132\025.tari.r"
"pc.ProofOfWork\022\033\n\023total_script_offset\030\007 "
"\001(\014\"\207\001\n\020NewBlockTemplate\0220\n\006header\030\001 \001(\013"
"2 .tari.rpc.NewBlockHeaderTemplate\022%\n\004bo"
"dy\030\002 \001(\0132\027.tari.rpc.AggregateBody\022\032\n\022is_"
"mempool_in_sync\030\003 \001(\010b\006proto3"
"A3X\020\001\022\026\n\022POW_ALGOS_RANDOMXT\020\002\022\026\n\022POW_ALG"
"OS_CUCKAROO\020\003\"U\n\005Block\022%\n\006header\030\001 \001(\0132\025"
".tari.rpc.BlockHeader\022%\n\004body\030\002 \001(\0132\027.ta"
"ri.rpc.AggregateBody\"H\n\017HistoricalBlock\022"
"\025\n\rconfirmations\030\001 \001(\004\022\036\n\005block\030\002 \001(\0132\017."
"tari.rpc.Block\"\252\001\n\026NewBlockHeaderTemplat"
"e\022\017\n\007version\030\001 \001(\r\022\016\n\006height\030\002 \001(\004\022\021\n\tpr"
"ev_hash\030\003 \001(\014\022\033\n\023total_kernel_offset\030\004 \001"
"(\014\022\"\n\003pow\030\005 \001(\0132\025.tari.rpc.ProofOfWork\022\033"
"\n\023total_script_offset\030\007 \001(\014\"\207\001\n\020NewBlock"
"Template\0220\n\006header\030\001 \001(\0132 .tari.rpc.NewB"
"lockHeaderTemplate\022%\n\004body\030\002 \001(\0132\027.tari."
"rpc.AggregateBody\022\032\n\022is_mempool_in_sync\030"
"\003 \001(\010b\006proto3"
};
static const ::_pbi::DescriptorTable* PROTOBUF_NONNULL const
descriptor_table_block_2eproto_deps[1] = {
@@ -409,7 +410,7 @@ static ::absl::once_flag descriptor_table_block_2eproto_once;
PROTOBUF_CONSTINIT const ::_pbi::DescriptorTable descriptor_table_block_2eproto = {
false,
false,
1109,
1133,
descriptor_table_protodef_block_2eproto,
"block.proto",
&descriptor_table_block_2eproto_once,
@@ -429,7 +430,7 @@ const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL PowAlgo_PowAlgos_desc
return file_level_enum_descriptors_block_2eproto[0];
}
PROTOBUF_CONSTINIT const uint32_t PowAlgo_PowAlgos_internal_data_[] = {
196608u, 0u, };
262144u, 0u, };
// ===================================================================
class BlockHeader::_Internal {
+6 -4
View File
@@ -102,6 +102,7 @@ enum PowAlgo_PowAlgos : int {
PowAlgo_PowAlgos_POW_ALGOS_RANDOMXM = 0,
PowAlgo_PowAlgos_POW_ALGOS_SHA3X = 1,
PowAlgo_PowAlgos_POW_ALGOS_RANDOMXT = 2,
PowAlgo_PowAlgos_POW_ALGOS_CUCKAROO = 3,
PowAlgo_PowAlgos_PowAlgo_PowAlgos_INT_MIN_SENTINEL_DO_NOT_USE_ =
::std::numeric_limits<::int32_t>::min(),
PowAlgo_PowAlgos_PowAlgo_PowAlgos_INT_MAX_SENTINEL_DO_NOT_USE_ =
@@ -112,11 +113,11 @@ extern const uint32_t PowAlgo_PowAlgos_internal_data_[];
inline constexpr PowAlgo_PowAlgos PowAlgo_PowAlgos_PowAlgos_MIN =
static_cast<PowAlgo_PowAlgos>(0);
inline constexpr PowAlgo_PowAlgos PowAlgo_PowAlgos_PowAlgos_MAX =
static_cast<PowAlgo_PowAlgos>(2);
static_cast<PowAlgo_PowAlgos>(3);
inline bool PowAlgo_PowAlgos_IsValid(int value) {
return 0 <= value && value <= 2;
return 0 <= value && value <= 3;
}
inline constexpr int PowAlgo_PowAlgos_PowAlgos_ARRAYSIZE = 2 + 1;
inline constexpr int PowAlgo_PowAlgos_PowAlgos_ARRAYSIZE = 3 + 1;
const ::google::protobuf::EnumDescriptor* PROTOBUF_NONNULL PowAlgo_PowAlgos_descriptor();
template <typename T>
const ::std::string& PowAlgo_PowAlgos_Name(T value) {
@@ -127,7 +128,7 @@ const ::std::string& PowAlgo_PowAlgos_Name(T value) {
}
template <>
inline const ::std::string& PowAlgo_PowAlgos_Name(PowAlgo_PowAlgos value) {
return ::google::protobuf::internal::NameOfDenseEnum<PowAlgo_PowAlgos_descriptor, 0, 2>(
return ::google::protobuf::internal::NameOfDenseEnum<PowAlgo_PowAlgos_descriptor, 0, 3>(
static_cast<int>(value));
}
inline bool PowAlgo_PowAlgos_Parse(
@@ -493,6 +494,7 @@ class PowAlgo final : public ::google::protobuf::Message
static constexpr PowAlgos POW_ALGOS_RANDOMXM = PowAlgo_PowAlgos_POW_ALGOS_RANDOMXM;
static constexpr PowAlgos POW_ALGOS_SHA3X = PowAlgo_PowAlgos_POW_ALGOS_SHA3X;
static constexpr PowAlgos POW_ALGOS_RANDOMXT = PowAlgo_PowAlgos_POW_ALGOS_RANDOMXT;
static constexpr PowAlgos POW_ALGOS_CUCKAROO = PowAlgo_PowAlgos_POW_ALGOS_CUCKAROO;
static inline bool PowAlgos_IsValid(int value) {
return PowAlgo_PowAlgos_IsValid(value);
}
+6 -3
View File
@@ -68,8 +68,10 @@ message BlockHeader {
// The proof of work data structure that is included in the block header.
message ProofOfWork {
// The algorithm used to mine this block
// 0 = Monero
// 0 = Monero RandomX
// 1 = Sha3X
// 2 = Tari RandomX
// 3 = Cuckaroo
uint64 pow_algo = 1;
// Supplemental proof of work data. For example for Sha3x, this would be empty (only the block header is
// required), but for Monero merge mining we need the Monero block header and RandomX seed hash.
@@ -80,9 +82,10 @@ message ProofOfWork {
message PowAlgo {
// The permitted pow algorithms
enum PowAlgos {
POW_ALGOS_RANDOMXM = 0; // Accessible as `grpc::pow_algo::PowAlgos::RandomxM`
POW_ALGOS_RANDOMXM = 0; // Accessible as `grpc::pow_algo::PowAlgos::RandomxM`
POW_ALGOS_SHA3X = 1; // Accessible as `grpc::pow_algo::PowAlgos::Sha3x`
POW_ALGOS_RANDOMXT = 2; // Accessible as `grpc::pow_algo::PowAlgos::RandomxT`
POW_ALGOS_RANDOMXT = 2; // Accessible as `grpc::pow_algo::PowAlgos::RandomxT`
POW_ALGOS_CUCKAROO = 3; // Accessible as `grpc::pow_algo::PowAlgos::Cuckaroo`
}
// The pow algo to use
PowAlgos pow_algo = 1;
+1 -1
View File
@@ -66,7 +66,7 @@ message NetworkStatusResponse {
uint32 num_node_connections = 3;
}
message Address{
message Address {
bytes address =1;
string last_seen = 2;
uint32 connection_attempts = 3;
+323 -8
View File
@@ -55,6 +55,32 @@ struct WeightParamsDefaultTypeInternal {
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 WeightParamsDefaultTypeInternal _WeightParams_default_instance_;
inline constexpr UDecimalValue::Impl_::Impl_(
::_pbi::ConstantInitialized) noexcept
: _cached_size_{0},
units_{::uint64_t{0u}},
nanos_{0u} {}
template <typename>
PROTOBUF_CONSTEXPR UDecimalValue::UDecimalValue(::_pbi::ConstantInitialized)
#if defined(PROTOBUF_CUSTOM_VTABLE)
: ::google::protobuf::Message(UDecimalValue_class_data_.base()),
#else // PROTOBUF_CUSTOM_VTABLE
: ::google::protobuf::Message(),
#endif // PROTOBUF_CUSTOM_VTABLE
_impl_(::_pbi::ConstantInitialized()) {
}
struct UDecimalValueDefaultTypeInternal {
PROTOBUF_CONSTEXPR UDecimalValueDefaultTypeInternal() : _instance(::_pbi::ConstantInitialized{}) {}
~UDecimalValueDefaultTypeInternal() {}
union {
UDecimalValue _instance;
};
};
PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT
PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 UDecimalValueDefaultTypeInternal _UDecimalValue_default_instance_;
inline constexpr Signature::Impl_::Impl_(
::_pbi::ConstantInitialized) noexcept
: _cached_size_{0},
@@ -581,6 +607,13 @@ const ::uint32_t
29,
21,
30,
0x081, // bitmap
PROTOBUF_FIELD_OFFSET(::tari::rpc::UDecimalValue, _impl_._has_bits_),
5, // hasbit index offset
PROTOBUF_FIELD_OFFSET(::tari::rpc::UDecimalValue, _impl_.units_),
PROTOBUF_FIELD_OFFSET(::tari::rpc::UDecimalValue, _impl_.nanos_),
0,
1,
};
static const ::_pbi::MigrationSchema
@@ -598,6 +631,7 @@ static const ::_pbi::MigrationSchema
{76, sizeof(::tari::rpc::RangeProof)},
{81, sizeof(::tari::rpc::ConsensusConstants_ProofOfWorkEntry_DoNotUse)},
{88, sizeof(::tari::rpc::ConsensusConstants)},
{161, sizeof(::tari::rpc::UDecimalValue)},
};
static const ::_pb::Message* PROTOBUF_NONNULL const file_default_instances[] = {
&::tari::rpc::_Range_default_instance_._instance,
@@ -613,6 +647,7 @@ static const ::_pb::Message* PROTOBUF_NONNULL const file_default_instances[] = {
&::tari::rpc::_RangeProof_default_instance_._instance,
&::tari::rpc::_ConsensusConstants_ProofOfWorkEntry_DoNotUse_default_instance_._instance,
&::tari::rpc::_ConsensusConstants_default_instance_._instance,
&::tari::rpc::_UDecimalValue_default_instance_._instance,
};
const char descriptor_table_protodef_types_2eproto[] ABSL_ATTRIBUTE_SECTION_VARIABLE(
protodesc_cold) = {
@@ -672,24 +707,25 @@ const char descriptor_table_protodef_types_2eproto[] ABSL_ATTRIBUTE_SECTION_VARI
"ial_epoch\030& \001(\r\022)\n!vn_registration_max_v"
"ns_per_epoch\030\' \001(\r\032S\n\020ProofOfWorkEntry\022\013"
"\n\003key\030\001 \001(\r\022.\n\005value\030\002 \001(\0132\037.tari.rpc.Po"
"wAlgorithmConstants:\0028\001*s\n\nOutputType\022\014\n"
"\010STANDARD\020\000\022\014\n\010COINBASE\020\001\022\010\n\004BURN\020\002\022\037\n\033V"
"ALIDATOR_NODE_REGISTRATION\020\003\022\036\n\032CODE_TEM"
"PLATE_REGISTRATION\020\004*:\n\016RangeProofType\022\024"
"\n\020BULLETPROOF_PLUS\020\000\022\022\n\016REVEALED_VALUE\020\001"
"b\006proto3"
"wAlgorithmConstants:\0028\001\"-\n\rUDecimalValue"
"\022\r\n\005units\030\001 \001(\004\022\r\n\005nanos\030\002 \001(\007*s\n\nOutput"
"Type\022\014\n\010STANDARD\020\000\022\014\n\010COINBASE\020\001\022\010\n\004BURN"
"\020\002\022\037\n\033VALIDATOR_NODE_REGISTRATION\020\003\022\036\n\032C"
"ODE_TEMPLATE_REGISTRATION\020\004*:\n\016RangeProo"
"fType\022\024\n\020BULLETPROOF_PLUS\020\000\022\022\n\016REVEALED_"
"VALUE\020\001b\006proto3"
};
static ::absl::once_flag descriptor_table_types_2eproto_once;
PROTOBUF_CONSTINIT const ::_pbi::DescriptorTable descriptor_table_types_2eproto = {
false,
false,
2448,
2495,
descriptor_table_protodef_types_2eproto,
"types.proto",
&descriptor_table_types_2eproto_once,
nullptr,
0,
13,
14,
schemas,
file_default_instances,
TableStruct_types_2eproto::offsets,
@@ -5280,6 +5316,285 @@ void ConsensusConstants::InternalSwap(ConsensusConstants* PROTOBUF_RESTRICT PROT
::google::protobuf::Metadata ConsensusConstants::GetMetadata() const {
return ::google::protobuf::Message::GetMetadataImpl(GetClassData()->full());
}
// ===================================================================
class UDecimalValue::_Internal {
public:
using HasBits =
decltype(::std::declval<UDecimalValue>()._impl_._has_bits_);
static constexpr ::int32_t kHasBitsOffset =
8 * PROTOBUF_FIELD_OFFSET(UDecimalValue, _impl_._has_bits_);
};
UDecimalValue::UDecimalValue(::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
#if defined(PROTOBUF_CUSTOM_VTABLE)
: ::google::protobuf::Message(arena, UDecimalValue_class_data_.base()) {
#else // PROTOBUF_CUSTOM_VTABLE
: ::google::protobuf::Message(arena) {
#endif // PROTOBUF_CUSTOM_VTABLE
SharedCtor(arena);
// @@protoc_insertion_point(arena_constructor:tari.rpc.UDecimalValue)
}
UDecimalValue::UDecimalValue(
::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const UDecimalValue& from)
#if defined(PROTOBUF_CUSTOM_VTABLE)
: ::google::protobuf::Message(arena, UDecimalValue_class_data_.base()),
#else // PROTOBUF_CUSTOM_VTABLE
: ::google::protobuf::Message(arena),
#endif // PROTOBUF_CUSTOM_VTABLE
_impl_(from._impl_) {
_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(
from._internal_metadata_);
}
PROTOBUF_NDEBUG_INLINE UDecimalValue::Impl_::Impl_(
::google::protobuf::internal::InternalVisibility visibility,
::google::protobuf::Arena* PROTOBUF_NULLABLE arena)
: _cached_size_{0} {}
inline void UDecimalValue::SharedCtor(::_pb::Arena* PROTOBUF_NULLABLE arena) {
new (&_impl_) Impl_(internal_visibility(), arena);
::memset(reinterpret_cast<char *>(&_impl_) +
offsetof(Impl_, units_),
0,
offsetof(Impl_, nanos_) -
offsetof(Impl_, units_) +
sizeof(Impl_::nanos_));
}
UDecimalValue::~UDecimalValue() {
// @@protoc_insertion_point(destructor:tari.rpc.UDecimalValue)
SharedDtor(*this);
}
inline void UDecimalValue::SharedDtor(MessageLite& self) {
UDecimalValue& this_ = static_cast<UDecimalValue&>(self);
this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
ABSL_DCHECK(this_.GetArena() == nullptr);
this_._impl_.~Impl_();
}
inline void* PROTOBUF_NONNULL UDecimalValue::PlacementNew_(
const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
::google::protobuf::Arena* PROTOBUF_NULLABLE arena) {
return ::new (mem) UDecimalValue(arena);
}
constexpr auto UDecimalValue::InternalNewImpl_() {
return ::google::protobuf::internal::MessageCreator::ZeroInit(sizeof(UDecimalValue),
alignof(UDecimalValue));
}
constexpr auto UDecimalValue::InternalGenerateClassData_() {
return ::google::protobuf::internal::ClassDataFull{
::google::protobuf::internal::ClassData{
&_UDecimalValue_default_instance_._instance,
&_table_.header,
nullptr, // OnDemandRegisterArenaDtor
nullptr, // IsInitialized
&UDecimalValue::MergeImpl,
::google::protobuf::Message::GetNewImpl<UDecimalValue>(),
#if defined(PROTOBUF_CUSTOM_VTABLE)
&UDecimalValue::SharedDtor,
::google::protobuf::Message::GetClearImpl<UDecimalValue>(), &UDecimalValue::ByteSizeLong,
&UDecimalValue::_InternalSerialize,
#endif // PROTOBUF_CUSTOM_VTABLE
PROTOBUF_FIELD_OFFSET(UDecimalValue, _impl_._cached_size_),
false,
},
&UDecimalValue::kDescriptorMethods,
&descriptor_table_types_2eproto,
nullptr, // tracker
};
}
PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1 const
::google::protobuf::internal::ClassDataFull UDecimalValue_class_data_ =
UDecimalValue::InternalGenerateClassData_();
PROTOBUF_ATTRIBUTE_WEAK const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL
UDecimalValue::GetClassData() const {
::google::protobuf::internal::PrefetchToLocalCache(&UDecimalValue_class_data_);
::google::protobuf::internal::PrefetchToLocalCache(UDecimalValue_class_data_.tc_table);
return UDecimalValue_class_data_.base();
}
PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
const ::_pbi::TcParseTable<1, 2, 0, 0, 2>
UDecimalValue::_table_ = {
{
PROTOBUF_FIELD_OFFSET(UDecimalValue, _impl_._has_bits_),
0, // no _extensions_
2, 8, // max_field_number, fast_idx_mask
offsetof(decltype(_table_), field_lookup_table),
4294967292, // skipmap
offsetof(decltype(_table_), field_entries),
2, // num_field_entries
0, // num_aux_entries
offsetof(decltype(_table_), field_names), // no aux_entries
UDecimalValue_class_data_.base(),
nullptr, // post_loop_handler
::_pbi::TcParser::GenericFallback, // fallback
#ifdef PROTOBUF_PREFETCH_PARSE_TABLE
::_pbi::TcParser::GetTable<::tari::rpc::UDecimalValue>(), // to_prefetch
#endif // PROTOBUF_PREFETCH_PARSE_TABLE
}, {{
// fixed32 nanos = 2;
{::_pbi::TcParser::FastF32S1,
{21, 1, 0, PROTOBUF_FIELD_OFFSET(UDecimalValue, _impl_.nanos_)}},
// uint64 units = 1;
{::_pbi::TcParser::SingularVarintNoZag1<::uint64_t, offsetof(UDecimalValue, _impl_.units_), 0>(),
{8, 0, 0, PROTOBUF_FIELD_OFFSET(UDecimalValue, _impl_.units_)}},
}}, {{
65535, 65535
}}, {{
// uint64 units = 1;
{PROTOBUF_FIELD_OFFSET(UDecimalValue, _impl_.units_), _Internal::kHasBitsOffset + 0, 0,
(0 | ::_fl::kFcOptional | ::_fl::kUInt64)},
// fixed32 nanos = 2;
{PROTOBUF_FIELD_OFFSET(UDecimalValue, _impl_.nanos_), _Internal::kHasBitsOffset + 1, 0,
(0 | ::_fl::kFcOptional | ::_fl::kFixed32)},
}},
// no aux_entries
{{
}},
};
PROTOBUF_NOINLINE void UDecimalValue::Clear() {
// @@protoc_insertion_point(message_clear_start:tari.rpc.UDecimalValue)
::google::protobuf::internal::TSanWrite(&_impl_);
::uint32_t cached_has_bits = 0;
// Prevent compiler warnings about cached_has_bits being unused
(void) cached_has_bits;
cached_has_bits = _impl_._has_bits_[0];
if ((cached_has_bits & 0x00000003u) != 0) {
::memset(&_impl_.units_, 0, static_cast<::size_t>(
reinterpret_cast<char*>(&_impl_.nanos_) -
reinterpret_cast<char*>(&_impl_.units_)) + sizeof(_impl_.nanos_));
}
_impl_._has_bits_.Clear();
_internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
}
#if defined(PROTOBUF_CUSTOM_VTABLE)
::uint8_t* PROTOBUF_NONNULL UDecimalValue::_InternalSerialize(
const ::google::protobuf::MessageLite& base, ::uint8_t* PROTOBUF_NONNULL target,
::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) {
const UDecimalValue& this_ = static_cast<const UDecimalValue&>(base);
#else // PROTOBUF_CUSTOM_VTABLE
::uint8_t* PROTOBUF_NONNULL UDecimalValue::_InternalSerialize(
::uint8_t* PROTOBUF_NONNULL target,
::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
const UDecimalValue& this_ = *this;
#endif // PROTOBUF_CUSTOM_VTABLE
// @@protoc_insertion_point(serialize_to_array_start:tari.rpc.UDecimalValue)
::uint32_t cached_has_bits = 0;
(void)cached_has_bits;
// uint64 units = 1;
if ((this_._impl_._has_bits_[0] & 0x00000001u) != 0) {
if (this_._internal_units() != 0) {
target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteUInt64ToArray(
1, this_._internal_units(), target);
}
}
// fixed32 nanos = 2;
if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
if (this_._internal_nanos() != 0) {
target = stream->EnsureSpace(target);
target = ::_pbi::WireFormatLite::WriteFixed32ToArray(
2, this_._internal_nanos(), target);
}
}
if (ABSL_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
target =
::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
}
// @@protoc_insertion_point(serialize_to_array_end:tari.rpc.UDecimalValue)
return target;
}
#if defined(PROTOBUF_CUSTOM_VTABLE)
::size_t UDecimalValue::ByteSizeLong(const MessageLite& base) {
const UDecimalValue& this_ = static_cast<const UDecimalValue&>(base);
#else // PROTOBUF_CUSTOM_VTABLE
::size_t UDecimalValue::ByteSizeLong() const {
const UDecimalValue& this_ = *this;
#endif // PROTOBUF_CUSTOM_VTABLE
// @@protoc_insertion_point(message_byte_size_start:tari.rpc.UDecimalValue)
::size_t total_size = 0;
::uint32_t cached_has_bits = 0;
// Prevent compiler warnings about cached_has_bits being unused
(void)cached_has_bits;
::_pbi::Prefetch5LinesFrom7Lines(&this_);
cached_has_bits = this_._impl_._has_bits_[0];
if ((cached_has_bits & 0x00000003u) != 0) {
// uint64 units = 1;
if ((cached_has_bits & 0x00000001u) != 0) {
if (this_._internal_units() != 0) {
total_size += ::_pbi::WireFormatLite::UInt64SizePlusOne(
this_._internal_units());
}
}
// fixed32 nanos = 2;
if ((cached_has_bits & 0x00000002u) != 0) {
if (this_._internal_nanos() != 0) {
total_size += 5;
}
}
}
return this_.MaybeComputeUnknownFieldsSize(total_size,
&this_._impl_._cached_size_);
}
void UDecimalValue::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
auto* const _this = static_cast<UDecimalValue*>(&to_msg);
auto& from = static_cast<const UDecimalValue&>(from_msg);
// @@protoc_insertion_point(class_specific_merge_from_start:tari.rpc.UDecimalValue)
ABSL_DCHECK_NE(&from, _this);
::uint32_t cached_has_bits = 0;
(void) cached_has_bits;
cached_has_bits = from._impl_._has_bits_[0];
if ((cached_has_bits & 0x00000003u) != 0) {
if ((cached_has_bits & 0x00000001u) != 0) {
if (from._internal_units() != 0) {
_this->_impl_.units_ = from._impl_.units_;
}
}
if ((cached_has_bits & 0x00000002u) != 0) {
if (from._internal_nanos() != 0) {
_this->_impl_.nanos_ = from._impl_.nanos_;
}
}
}
_this->_impl_._has_bits_[0] |= cached_has_bits;
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
}
void UDecimalValue::CopyFrom(const UDecimalValue& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:tari.rpc.UDecimalValue)
if (&from == this) return;
Clear();
MergeFrom(from);
}
void UDecimalValue::InternalSwap(UDecimalValue* PROTOBUF_RESTRICT PROTOBUF_NONNULL other) {
using ::std::swap;
_internal_metadata_.InternalSwap(&other->_internal_metadata_);
swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
::google::protobuf::internal::memswap<
PROTOBUF_FIELD_OFFSET(UDecimalValue, _impl_.nanos_)
+ sizeof(UDecimalValue::_impl_.nanos_)
- PROTOBUF_FIELD_OFFSET(UDecimalValue, _impl_.units_)>(
reinterpret_cast<char*>(&_impl_.units_),
reinterpret_cast<char*>(&other->_impl_.units_));
}
::google::protobuf::Metadata UDecimalValue::GetMetadata() const {
return ::google::protobuf::Message::GetMetadataImpl(GetClassData()->full());
}
// @@protoc_insertion_point(namespace_scope)
} // namespace rpc
} // namespace tari
+259
View File
@@ -112,6 +112,10 @@ class Signature;
struct SignatureDefaultTypeInternal;
extern SignatureDefaultTypeInternal _Signature_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull Signature_class_data_;
class UDecimalValue;
struct UDecimalValueDefaultTypeInternal;
extern UDecimalValueDefaultTypeInternal _UDecimalValue_default_instance_;
extern const ::google::protobuf::internal::ClassDataFull UDecimalValue_class_data_;
class WeightParams;
struct WeightParamsDefaultTypeInternal;
extern WeightParamsDefaultTypeInternal _WeightParams_default_instance_;
@@ -439,6 +443,209 @@ class WeightParams final : public ::google::protobuf::Message
extern const ::google::protobuf::internal::ClassDataFull WeightParams_class_data_;
// -------------------------------------------------------------------
class UDecimalValue final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:tari.rpc.UDecimalValue) */ {
public:
inline UDecimalValue() : UDecimalValue(nullptr) {}
~UDecimalValue() PROTOBUF_FINAL;
#if defined(PROTOBUF_CUSTOM_VTABLE)
void operator delete(UDecimalValue* PROTOBUF_NONNULL msg, std::destroying_delete_t) {
SharedDtor(*msg);
::google::protobuf::internal::SizedDelete(msg, sizeof(UDecimalValue));
}
#endif
template <typename = void>
explicit PROTOBUF_CONSTEXPR UDecimalValue(::google::protobuf::internal::ConstantInitialized);
inline UDecimalValue(const UDecimalValue& from) : UDecimalValue(nullptr, from) {}
inline UDecimalValue(UDecimalValue&& from) noexcept
: UDecimalValue(nullptr, ::std::move(from)) {}
inline UDecimalValue& operator=(const UDecimalValue& from) {
CopyFrom(from);
return *this;
}
inline UDecimalValue& operator=(UDecimalValue&& from) noexcept {
if (this == &from) return *this;
if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
InternalSwap(&from);
} else {
CopyFrom(from);
}
return *this;
}
inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const
ABSL_ATTRIBUTE_LIFETIME_BOUND {
return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
}
inline ::google::protobuf::UnknownFieldSet* PROTOBUF_NONNULL mutable_unknown_fields()
ABSL_ATTRIBUTE_LIFETIME_BOUND {
return _internal_metadata_.mutable_unknown_fields<::google::protobuf::UnknownFieldSet>();
}
static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL descriptor() {
return GetDescriptor();
}
static const ::google::protobuf::Descriptor* PROTOBUF_NONNULL GetDescriptor() {
return default_instance().GetMetadata().descriptor;
}
static const ::google::protobuf::Reflection* PROTOBUF_NONNULL GetReflection() {
return default_instance().GetMetadata().reflection;
}
static const UDecimalValue& default_instance() {
return *reinterpret_cast<const UDecimalValue*>(
&_UDecimalValue_default_instance_);
}
static constexpr int kIndexInFileMessages = 13;
friend void swap(UDecimalValue& a, UDecimalValue& b) { a.Swap(&b); }
inline void Swap(UDecimalValue* PROTOBUF_NONNULL other) {
if (other == this) return;
if (::google::protobuf::internal::CanUseInternalSwap(GetArena(), other->GetArena())) {
InternalSwap(other);
} else {
::google::protobuf::internal::GenericSwap(this, other);
}
}
void UnsafeArenaSwap(UDecimalValue* PROTOBUF_NONNULL other) {
if (other == this) return;
ABSL_DCHECK(GetArena() == other->GetArena());
InternalSwap(other);
}
// implements Message ----------------------------------------------
UDecimalValue* PROTOBUF_NONNULL New(::google::protobuf::Arena* PROTOBUF_NULLABLE arena = nullptr) const {
return ::google::protobuf::Message::DefaultConstruct<UDecimalValue>(arena);
}
using ::google::protobuf::Message::CopyFrom;
void CopyFrom(const UDecimalValue& from);
using ::google::protobuf::Message::MergeFrom;
void MergeFrom(const UDecimalValue& from) { UDecimalValue::MergeImpl(*this, from); }
private:
static void MergeImpl(::google::protobuf::MessageLite& to_msg,
const ::google::protobuf::MessageLite& from_msg);
public:
bool IsInitialized() const {
return true;
}
ABSL_ATTRIBUTE_REINITIALIZES void Clear() PROTOBUF_FINAL;
#if defined(PROTOBUF_CUSTOM_VTABLE)
private:
static ::size_t ByteSizeLong(const ::google::protobuf::MessageLite& msg);
static ::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
const ::google::protobuf::MessageLite& msg, ::uint8_t* PROTOBUF_NONNULL target,
::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream);
public:
::size_t ByteSizeLong() const { return ByteSizeLong(*this); }
::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
::uint8_t* PROTOBUF_NONNULL target,
::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const {
return _InternalSerialize(*this, target, stream);
}
#else // PROTOBUF_CUSTOM_VTABLE
::size_t ByteSizeLong() const final;
::uint8_t* PROTOBUF_NONNULL _InternalSerialize(
::uint8_t* PROTOBUF_NONNULL target,
::google::protobuf::io::EpsCopyOutputStream* PROTOBUF_NONNULL stream) const final;
#endif // PROTOBUF_CUSTOM_VTABLE
int GetCachedSize() const { return _impl_._cached_size_.Get(); }
private:
void SharedCtor(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
static void SharedDtor(MessageLite& self);
void InternalSwap(UDecimalValue* PROTOBUF_NONNULL other);
private:
template <typename T>
friend ::absl::string_view(::google::protobuf::internal::GetAnyMessageName)();
static ::absl::string_view FullMessageName() { return "tari.rpc.UDecimalValue"; }
protected:
explicit UDecimalValue(::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
UDecimalValue(::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const UDecimalValue& from);
UDecimalValue(
::google::protobuf::Arena* PROTOBUF_NULLABLE arena, UDecimalValue&& from) noexcept
: UDecimalValue(arena) {
*this = ::std::move(from);
}
const ::google::protobuf::internal::ClassData* PROTOBUF_NONNULL GetClassData() const PROTOBUF_FINAL;
static void* PROTOBUF_NONNULL PlacementNew_(
const void* PROTOBUF_NONNULL, void* PROTOBUF_NONNULL mem,
::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
static constexpr auto InternalNewImpl_();
public:
static constexpr auto InternalGenerateClassData_();
::google::protobuf::Metadata GetMetadata() const;
// nested types ----------------------------------------------------
// accessors -------------------------------------------------------
enum : int {
kUnitsFieldNumber = 1,
kNanosFieldNumber = 2,
};
// uint64 units = 1;
void clear_units() ;
::uint64_t units() const;
void set_units(::uint64_t value);
private:
::uint64_t _internal_units() const;
void _internal_set_units(::uint64_t value);
public:
// fixed32 nanos = 2;
void clear_nanos() ;
::uint32_t nanos() const;
void set_nanos(::uint32_t value);
private:
::uint32_t _internal_nanos() const;
void _internal_set_nanos(::uint32_t value);
public:
// @@protoc_insertion_point(class_scope:tari.rpc.UDecimalValue)
private:
class _Internal;
friend class ::google::protobuf::internal::TcParser;
static const ::google::protobuf::internal::TcParseTable<1, 2,
0, 0,
2>
_table_;
friend class ::google::protobuf::MessageLite;
friend class ::google::protobuf::Arena;
template <typename T>
friend class ::google::protobuf::Arena::InternalHelper;
using InternalArenaConstructable_ = void;
using DestructorSkippable_ = void;
struct Impl_ {
inline explicit constexpr Impl_(::google::protobuf::internal::ConstantInitialized) noexcept;
inline explicit Impl_(
::google::protobuf::internal::InternalVisibility visibility,
::google::protobuf::Arena* PROTOBUF_NULLABLE arena);
inline explicit Impl_(
::google::protobuf::internal::InternalVisibility visibility,
::google::protobuf::Arena* PROTOBUF_NULLABLE arena, const Impl_& from,
const UDecimalValue& from_msg);
::google::protobuf::internal::HasBits<1> _has_bits_;
::google::protobuf::internal::CachedSize _cached_size_;
::uint64_t units_;
::uint32_t nanos_;
PROTOBUF_TSAN_DECLARE_MEMBER
};
union { Impl_ _impl_; };
friend struct ::TableStruct_types_2eproto;
};
extern const ::google::protobuf::internal::ClassDataFull UDecimalValue_class_data_;
// -------------------------------------------------------------------
class Signature final : public ::google::protobuf::Message
/* @@protoc_insertion_point(class_definition:tari.rpc.Signature) */ {
public:
@@ -5787,6 +5994,58 @@ inline void ConsensusConstants::_internal_set_vn_registration_max_vns_per_epoch(
_impl_.vn_registration_max_vns_per_epoch_ = value;
}
// -------------------------------------------------------------------
// UDecimalValue
// uint64 units = 1;
inline void UDecimalValue::clear_units() {
::google::protobuf::internal::TSanWrite(&_impl_);
_impl_.units_ = ::uint64_t{0u};
_impl_._has_bits_[0] &= ~0x00000001u;
}
inline ::uint64_t UDecimalValue::units() const {
// @@protoc_insertion_point(field_get:tari.rpc.UDecimalValue.units)
return _internal_units();
}
inline void UDecimalValue::set_units(::uint64_t value) {
_internal_set_units(value);
_impl_._has_bits_[0] |= 0x00000001u;
// @@protoc_insertion_point(field_set:tari.rpc.UDecimalValue.units)
}
inline ::uint64_t UDecimalValue::_internal_units() const {
::google::protobuf::internal::TSanRead(&_impl_);
return _impl_.units_;
}
inline void UDecimalValue::_internal_set_units(::uint64_t value) {
::google::protobuf::internal::TSanWrite(&_impl_);
_impl_.units_ = value;
}
// fixed32 nanos = 2;
inline void UDecimalValue::clear_nanos() {
::google::protobuf::internal::TSanWrite(&_impl_);
_impl_.nanos_ = 0u;
_impl_._has_bits_[0] &= ~0x00000002u;
}
inline ::uint32_t UDecimalValue::nanos() const {
// @@protoc_insertion_point(field_get:tari.rpc.UDecimalValue.nanos)
return _internal_nanos();
}
inline void UDecimalValue::set_nanos(::uint32_t value) {
_internal_set_nanos(value);
_impl_._has_bits_[0] |= 0x00000002u;
// @@protoc_insertion_point(field_set:tari.rpc.UDecimalValue.nanos)
}
inline ::uint32_t UDecimalValue::_internal_nanos() const {
::google::protobuf::internal::TSanRead(&_impl_);
return _impl_.nanos_;
}
inline void UDecimalValue::_internal_set_nanos(::uint32_t value) {
::google::protobuf::internal::TSanWrite(&_impl_);
_impl_.nanos_ = value;
}
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif // __GNUC__
+10
View File
@@ -146,3 +146,13 @@ message ConsensusConstants {
uint32 vn_registration_max_vns_initial_epoch = 38;
uint32 vn_registration_max_vns_per_epoch = 39;
}
// Unsigned decimal value, examples:
// 12345.6789 -> { units = 12345, nanos = 678900000 }
// 12345.0006789 -> { units = 12345, nanos = 678900 }
message UDecimalValue {
// Whole units part of the amount
uint64 units = 1;
// Nano units of the amount (10^-9)
fixed32 nanos = 2;
}
@@ -22,7 +22,6 @@ flags_p2pool="--target=aarch64-unknown-freebsd12.0 --sysroot=/usr/local/cross-fr
cd /p2pool/external/src/curl
cmake . -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../../../cmake/freebsd_aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && cp -f libcurl.a .libs
cd /p2pool/external/src/libuv
rm -rf build
@@ -38,7 +37,7 @@ make -j$(nproc)
cd /p2pool
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/freebsd_aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=aarch64
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/freebsd_aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=aarch64 -DGIT_COMMIT="$(git rev-parse --short=7 HEAD)"
make -j$(nproc) p2pool
mkdir $1
@@ -22,7 +22,6 @@ flags_p2pool="--target=x86_64-unknown-freebsd12.0 --sysroot=/usr/local/cross-fre
cd /p2pool/external/src/curl
cmake . -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../../../cmake/freebsd_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && cp -f libcurl.a .libs
cd /p2pool/external/src/libuv
rm -rf build
@@ -38,7 +37,7 @@ make -j$(nproc)
cd /p2pool
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/freebsd_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=x86_64
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/freebsd_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=x86_64 -DGIT_COMMIT="$(git rev-parse --short=7 HEAD)"
make -j$(nproc) p2pool
mkdir $1
+1 -1
View File
@@ -1,3 +1,3 @@
FROM ubuntu:24.04
ADD prepare.sh /
ADD prepare.sh clang_version.patch /
RUN /prepare.sh
@@ -0,0 +1,15 @@
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index cce839295..b87fe998e 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -873,9 +873,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
Builder.defineMacro("__clang_patchlevel__", TOSTR(CLANG_VERSION_PATCHLEVEL));
#undef TOSTR
#undef TOSTR2
- Builder.defineMacro("__clang_version__",
- "\"" CLANG_VERSION_STRING " "
- + getClangFullRepositoryVersion() + "\"");
+ Builder.defineMacro("__clang_version__", "\"" CLANG_VERSION_STRING "\"");
if (LangOpts.GNUCVersion != 0) {
// Major, minor, patch, are given two decimal places each, so 4.2.1 becomes
+138 -129
View File
@@ -5,12 +5,12 @@ set -e
_7ZIP_VERSION=2501
BINUTILS_VERSION=2_45
CLANG_VERSION=20.1.8
CLANG_VERSION=21.1.2
CMAKE_VERSION=4.1.1
FREEBSD_VERSION=12.4
GCC_VERSION=15.2.0
GLIBC_VERSION=2.42
LINUX_HEADERS_VERSION=6.16.3
LINUX_HEADERS_VERSION=6.16.8
MACOSX_SDK_VERSION=15.5
MAKE_VERSION=4.4.1
MINGW_VERSION=13.0.0
@@ -22,7 +22,7 @@ CMAKE_SHA256="5a6c61cb62b38e153148a2c8d4af7b3d387f0c8c32b6dbceb5eb4af113efd65a"
FREEBSD_AARCH64_SHA256="6c401819bfb93e810c9f9aa670a1e4685f924df5e7e0c9c6397dd6c16c954fa2"
FREEBSD_X86_64_SHA256="581c7edacfd2fca2bdf5791f667402d22fccd8a5e184635e0cac075564d57aa8"
GLIBC_SHA256="d1775e32e4628e64ef930f435b67bb63af7599acb6be2b335b9f19f16509f17f"
HEADERS_SHA256="80439ba055c12f541abf44b8fc3c9b825a8f42fc25ce67462ec7e556c5790b85"
HEADERS_SHA256="231311bd7084dc3129944d26bb43be6ff837da82fb2104a67704aebca8bfa69f"
MACOSX_SDK_SHA256="c15cf0f3f17d714d1aa5a642da8e118db53d79429eb015771ba816aa7c6c1cbd"
MAKE_SHA256="dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3"
TAR_SHA256="4d62ff37342ec7aed748535323930c7cf94acf71c3591882b26a7ea50f3edc16"
@@ -32,15 +32,59 @@ echo "Install prerequisites"
export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get upgrade -yq --no-install-recommends
apt-get install -yq --no-install-recommends ca-certificates curl bzip2 flex texinfo bison ninja-build python3 file rsync xz-utils gawk gettext patch git gcc g++ make
apt-get install -yq --no-install-recommends ca-certificates curl bzip2 flex texinfo bison ninja-build python3 file rsync xz-utils gawk gettext patch git gcc g++
echo "Install 7-zip"
echo "Cloning the P2Pool repository in background"
cd /
git clone --recursive --jobs $(nproc) https://github.com/SChernykh/p2pool &
echo "Download archives"
cd /root
MAKE_NAME=make-$MAKE_VERSION
MAKE_FILE=$MAKE_NAME.tar.gz
_7ZIP_FILE=7z$_7ZIP_VERSION-linux-x64.tar.xz
curl -L -O https://7-zip.org/a/$_7ZIP_FILE
CMAKE_NAME=cmake-$CMAKE_VERSION-linux-x86_64
CMAKE_FILE=$CMAKE_NAME.tar.gz
HEADERS_FILE=linux-$LINUX_HEADERS_VERSION.tar.xz
GLIBC_FILE=glibc-$GLIBC_VERSION.tar.xz
MACOSX_SDK_FILE=MacOSX$MACOSX_SDK_VERSION.sdk.tar.xz
FREEBSD_FILE=base.txz
TAR_FILE=tar-$TAR_VERSION.tar.xz
mkdir /usr/local/cross-freebsd-x86_64
mkdir /usr/local/cross-freebsd-aarch64
curl -L -Z \
-O https://ftpmirror.gnu.org/make/$MAKE_FILE \
-O https://7-zip.org/a/$_7ZIP_FILE \
-O https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/$CMAKE_FILE \
-O https://www.kernel.org/pub/linux/kernel/v6.x/$HEADERS_FILE \
-O https://ftpmirror.gnu.org/glibc/$GLIBC_FILE \
-O https://github.com/joseluisq/macosx-sdks/releases/download/$MACOSX_SDK_VERSION/$MACOSX_SDK_FILE \
-o /usr/local/cross-freebsd-x86_64/$FREEBSD_FILE https://archive.freebsd.org/old-releases/amd64/$FREEBSD_VERSION-RELEASE/$FREEBSD_FILE \
-o /usr/local/cross-freebsd-aarch64/$FREEBSD_FILE https://archive.freebsd.org/old-releases/arm64/$FREEBSD_VERSION-RELEASE/$FREEBSD_FILE \
-O https://ftpmirror.gnu.org/tar/$TAR_FILE
echo "Verifying checksums"
cd /root
MAKE_FILE_SHA256="$(sha256sum $MAKE_FILE | awk '{ print $1 }')"
if [ $MAKE_FILE_SHA256 != $MAKE_SHA256 ]; then
echo "Error: SHA256 sum does not match for $MAKE_FILE - expected $MAKE_SHA256, got $MAKE_FILE_SHA256"
exit 1
fi
_7ZIP_FILE_SHA256="$(sha256sum $_7ZIP_FILE | awk '{ print $1 }')"
@@ -49,6 +93,88 @@ if [ $_7ZIP_FILE_SHA256 != $_7ZIP_SHA256 ]; then
exit 1
fi
CMAKE_FILE_SHA256="$(sha256sum $CMAKE_FILE | awk '{ print $1 }')"
if [ $CMAKE_FILE_SHA256 != $CMAKE_SHA256 ]; then
echo "Error: SHA256 sum does not match for $CMAKE_FILE - expected $CMAKE_SHA256, got $CMAKE_FILE_SHA256"
exit 1
fi
HEADERS_FILE_SHA256="$(sha256sum $HEADERS_FILE | awk '{ print $1 }')"
if [ $HEADERS_FILE_SHA256 != $HEADERS_SHA256 ]; then
echo "Error: SHA256 sum does not match for $HEADERS_FILE - expected $HEADERS_SHA256, got $HEADERS_FILE_SHA256"
exit 1
fi
GLIBC_FILE_SHA256="$(sha256sum $GLIBC_FILE | awk '{ print $1 }')"
if [ $GLIBC_FILE_SHA256 != $GLIBC_SHA256 ]; then
echo "Error: SHA256 sum does not match for $GLIBC_FILE - expected $GLIBC_SHA256, got $GLIBC_FILE_SHA256"
exit 1
fi
MACOSX_SDK_FILE_SHA256="$(sha256sum $MACOSX_SDK_FILE | awk '{ print $1 }')"
if [ $MACOSX_SDK_FILE_SHA256 != $MACOSX_SDK_SHA256 ]; then
echo "Error: SHA256 sum does not match for $MACOSX_SDK_FILE - expected $MACOSX_SDK_SHA256, got $MACOSX_SDK_FILE_SHA256"
exit 1
fi
cd /usr/local/cross-freebsd-x86_64
FREEBSD_X86_64_FILE_SHA256="$(sha256sum $FREEBSD_FILE | awk '{ print $1 }')"
if [ $FREEBSD_X86_64_FILE_SHA256 != $FREEBSD_X86_64_SHA256 ]; then
echo "Error: SHA256 sum does not match for $FREEBSD_FILE - expected $FREEBSD_X86_64_SHA256, got $FREEBSD_X86_64_FILE_SHA256"
exit 1
fi
cd /usr/local/cross-freebsd-aarch64
FREEBSD_AARCH64_FILE_SHA256="$(sha256sum $FREEBSD_FILE | awk '{ print $1 }')"
if [ $FREEBSD_AARCH64_FILE_SHA256 != $FREEBSD_AARCH64_SHA256 ]; then
echo "Error: SHA256 sum does not match for $FREEBSD_FILE - expected $FREEBSD_AARCH64_SHA256, got $FREEBSD_AARCH64_FILE_SHA256"
exit 1
fi
cd /root
TAR_FILE_SHA256="$(sha256sum $TAR_FILE | awk '{ print $1 }')"
if [ $TAR_FILE_SHA256 != $TAR_SHA256 ]; then
echo "Error: SHA256 sum does not match for $TAR_FILE - expected $TAR_SHA256, got $TAR_FILE_SHA256"
exit 1
fi
echo "Cloning repositories"
cd /root
git clone --depth 1 --branch releases/gcc-$GCC_VERSION git://gcc.gnu.org/git/gcc.git
git clone --depth 1 --branch binutils-$BINUTILS_VERSION git://sourceware.org/git/binutils-gdb.git
git clone --depth 1 --branch llvmorg-$CLANG_VERSION https://github.com/llvm/llvm-project.git
git clone --depth=1 --branch v$MINGW_VERSION https://git.code.sf.net/p/mingw-w64/mingw-w64 mingw-w64-v$MINGW_VERSION
git clone --branch 2.0-llvm-based https://github.com/tpoechtrager/osxcross
git clone --depth=1 --branch v$XZ_VERSION https://github.com/tukaani-project/xz
mv /root/$MACOSX_SDK_FILE osxcross/tarballs
echo "Install make"
cd /root
tar xvf $MAKE_FILE
cd $MAKE_NAME
CFLAGS='-O2' ./configure --disable-dependency-tracking
./build.sh
./make install
echo "Install 7-zip"
cd /root
tar xf $_7ZIP_FILE
cp -f 7zz /usr/local/bin/7z
@@ -56,7 +182,6 @@ echo "Install GCC"
cd /root
git clone --depth 1 --branch releases/gcc-$GCC_VERSION git://gcc.gnu.org/git/gcc.git
rm -rf gcc/.git
cd gcc
@@ -83,7 +208,6 @@ echo "Install binutils"
cd /root
git clone --depth 1 --branch binutils-$BINUTILS_VERSION git://sourceware.org/git/binutils-gdb.git
rm -rf binutils-gdb/.git
cp -r binutils-gdb binutils-gdb-aarch64
@@ -100,53 +224,20 @@ echo "Install cmake"
cd /root
CMAKE_NAME=cmake-$CMAKE_VERSION-linux-x86_64
CMAKE_FILE=$CMAKE_NAME.tar.gz
curl -L -O https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/$CMAKE_FILE
CMAKE_FILE_SHA256="$(sha256sum $CMAKE_FILE | awk '{ print $1 }')"
if [ $CMAKE_FILE_SHA256 != $CMAKE_SHA256 ]; then
echo "Error: SHA256 sum does not match for $CMAKE_FILE - expected $CMAKE_SHA256, got $CMAKE_FILE_SHA256"
exit 1
fi
tar xvf $CMAKE_FILE
cp $CMAKE_NAME/bin/* /usr/local/bin
cp -r $CMAKE_NAME/share/cmake-4.1 /usr/local/share
echo "Install make"
cd /root
MAKE_NAME=make-$MAKE_VERSION
MAKE_FILE=$MAKE_NAME.tar.gz
curl -L -O https://ftpmirror.gnu.org/make/$MAKE_FILE
MAKE_FILE_SHA256="$(sha256sum $MAKE_FILE | awk '{ print $1 }')"
if [ $MAKE_FILE_SHA256 != $MAKE_SHA256 ]; then
echo "Error: SHA256 sum does not match for $MAKE_FILE - expected $MAKE_SHA256, got $MAKE_FILE_SHA256"
exit 1
fi
tar xvf $MAKE_FILE
cd $MAKE_NAME
CFLAGS='-O2' ./configure
make
cp -f make /usr/bin
echo "Install clang"
cd /root
git clone --depth 1 --branch llvmorg-$CLANG_VERSION https://github.com/llvm/llvm-project.git
cd llvm-project
mv /clang_version.patch .
git apply --verbose --ignore-whitespace clang_version.patch
mkdir build && cd build
cmake -G Ninja -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DLLVM_ENABLE_PROJECTS="clang;lld;libc" -DCMAKE_BUILD_TYPE=Release -DLLVM_VERSION_SUFFIX="_p2pool" ../llvm
cmake -G Ninja -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DLLVM_ENABLE_PROJECTS="clang;lld;libc" -DCMAKE_BUILD_TYPE=Release -DLLVM_VERSION_SUFFIX="_p2pool" -DLIBC_WNO_ERROR=ON -DLLVM_APPEND_VC_REV=OFF ../llvm
ninja
ninja install
@@ -168,17 +259,6 @@ echo "Install Linux headers for aarch64-linux-gnu"
cd /root
HEADERS_FILE=linux-$LINUX_HEADERS_VERSION.tar.xz
curl -L -O https://www.kernel.org/pub/linux/kernel/v6.x/$HEADERS_FILE
HEADERS_FILE_SHA256="$(sha256sum $HEADERS_FILE | awk '{ print $1 }')"
if [ $HEADERS_FILE_SHA256 != $HEADERS_SHA256 ]; then
echo "Error: SHA256 sum does not match for $HEADERS_FILE - expected $HEADERS_SHA256, got $HEADERS_FILE_SHA256"
exit 1
fi
tar xf linux-$LINUX_HEADERS_VERSION.tar.xz
cd linux-$LINUX_HEADERS_VERSION
make ARCH=arm64 INSTALL_HDR_PATH=/usr/local/aarch64-linux-gnu headers_install
@@ -196,17 +276,6 @@ echo "Install glibc for aarch64-linux-gnu"
cd /root
GLIBC_FILE=glibc-$GLIBC_VERSION.tar.xz
curl -L -O https://ftpmirror.gnu.org/glibc/$GLIBC_FILE
GLIBC_FILE_SHA256="$(sha256sum $GLIBC_FILE | awk '{ print $1 }')"
if [ $GLIBC_FILE_SHA256 != $GLIBC_SHA256 ]; then
echo "Error: SHA256 sum does not match for $GLIBC_FILE - expected $GLIBC_SHA256, got $GLIBC_FILE_SHA256"
exit 1
fi
tar xf $GLIBC_FILE
mkdir glibc_build_aarch64 && cd glibc_build_aarch64
@@ -299,7 +368,6 @@ echo "Install mingw-w64 headers"
cd /root
git clone --depth=1 --branch v$MINGW_VERSION https://git.code.sf.net/p/mingw-w64/mingw-w64 mingw-w64-v$MINGW_VERSION
rm -rf mingw-w64-v$MINGW_VERSION/.git
cd mingw-w64-v$MINGW_VERSION/mingw-w64-headers
@@ -350,66 +418,24 @@ gcc -nostdlib -nostartfiles -shared -x c /dev/null -o /usr/local/x86_64-pc-linux
make -j$(nproc)
make install
echo "Get osxcross"
cd /root
git clone --branch 2.0-llvm-based https://github.com/tpoechtrager/osxcross
cd osxcross
git checkout cb444e230e815c06202bef1c30eca5d353235a05
echo "Get MacOSX $MACOSX_SDK_VERSION SDK"
cd /root/osxcross/tarballs
MACOSX_SDK_FILE=MacOSX$MACOSX_SDK_VERSION.sdk.tar.xz
curl -L -O https://github.com/joseluisq/macosx-sdks/releases/download/$MACOSX_SDK_VERSION/$MACOSX_SDK_FILE
MACOSX_SDK_FILE_SHA256="$(sha256sum $MACOSX_SDK_FILE | awk '{ print $1 }')"
if [ $MACOSX_SDK_FILE_SHA256 != $MACOSX_SDK_SHA256 ]; then
echo "Error: SHA256 sum does not match for $MACOSX_SDK_FILE - expected $MACOSX_SDK_SHA256, got $MACOSX_SDK_FILE_SHA256"
exit 1
fi
echo "Build MacOSX cross compilers"
cd /root/osxcross
git checkout cb444e230e815c06202bef1c30eca5d353235a05
TARGET_DIR=/usr/local OSX_VERSION_MIN=10.15 UNATTENDED=1 ./build.sh
./build_compiler_rt.sh
echo "Install FreeBSD $FREEBSD_VERSION SDK"
cd /usr/local
FREEBSD_FILE=base.txz
mkdir cross-freebsd-x86_64 && mkdir cross-freebsd-aarch64
curl -L -Z -o cross-freebsd-x86_64/$FREEBSD_FILE -o cross-freebsd-aarch64/$FREEBSD_FILE https://archive.freebsd.org/old-releases/amd64/$FREEBSD_VERSION-RELEASE/$FREEBSD_FILE https://archive.freebsd.org/old-releases/arm64/$FREEBSD_VERSION-RELEASE/$FREEBSD_FILE
cd /usr/local/cross-freebsd-x86_64
FREEBSD_X86_64_FILE_SHA256="$(sha256sum $FREEBSD_FILE | awk '{ print $1 }')"
if [ $FREEBSD_X86_64_FILE_SHA256 != $FREEBSD_X86_64_SHA256 ]; then
echo "Error: SHA256 sum does not match for $FREEBSD_FILE - expected $FREEBSD_X86_64_SHA256, got $FREEBSD_X86_64_FILE_SHA256"
exit 1
fi
tar -xf $FREEBSD_FILE ./lib/ ./usr/lib/ ./usr/include/
rm $FREEBSD_FILE
#find /usr/local/cross-freebsd-x86_64/usr/lib -xtype l|xargs ls -l|grep ' /lib/'|awk '{print "ln -sf /usr/local/cross-freebsd-x86_64"$11 " " $9}'|/bin/sh
cd /usr/local/cross-freebsd-aarch64
FREEBSD_AARCH64_FILE_SHA256="$(sha256sum $FREEBSD_FILE | awk '{ print $1 }')"
if [ $FREEBSD_AARCH64_FILE_SHA256 != $FREEBSD_AARCH64_SHA256 ]; then
echo "Error: SHA256 sum does not match for $FREEBSD_FILE - expected $FREEBSD_AARCH64_SHA256, got $FREEBSD_AARCH64_FILE_SHA256"
exit 1
fi
tar -xf $FREEBSD_FILE ./lib/ ./usr/lib/ ./usr/include/
rm $FREEBSD_FILE
#find /usr/local/cross-freebsd-aarch64/usr/lib -xtype l|xargs ls -l|grep ' /lib/'|awk '{print "ln -sf /usr/local/cross-freebsd-aarch64"$11 " " $9}'|/bin/sh
@@ -420,7 +446,6 @@ apt-get remove -yq xz-utils
cd /root
git clone --depth=1 --branch v$XZ_VERSION https://github.com/tukaani-project/xz
cd xz
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang
@@ -433,17 +458,6 @@ echo "Install tar"
cd /root
TAR_FILE=tar-$TAR_VERSION.tar.xz
curl -L -O https://ftpmirror.gnu.org/tar/$TAR_FILE
TAR_FILE_SHA256="$(sha256sum $TAR_FILE | awk '{ print $1 }')"
if [ $TAR_FILE_SHA256 != $TAR_SHA256 ]; then
echo "Error: SHA256 sum does not match for $TAR_FILE - expected $TAR_SHA256, got $TAR_FILE_SHA256"
exit 1
fi
tar xvf $TAR_FILE
cd tar-$TAR_VERSION
FORCE_UNSAFE_CONFIGURE=1 ./configure
@@ -462,9 +476,4 @@ echo "Deleting temporary files"
cd /root
rm -rf *
echo "Cloning the repository"
cd /
git clone --recursive --jobs $(nproc) https://github.com/SChernykh/p2pool
echo "All done"
@@ -22,7 +22,6 @@ flags_p2pool="--target=aarch64-linux-gnu -fuse-ld=lld -Wno-unused-command-line-a
cd /p2pool/external/src/curl
cmake . -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../../../cmake/aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && cp -f libcurl.a .libs
cd /p2pool/external/src/libuv
rm -rf build
@@ -38,7 +37,7 @@ make -j$(nproc)
cd /p2pool
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=aarch64
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=aarch64 -DGIT_COMMIT="$(git rev-parse --short=7 HEAD)"
make -j$(nproc) p2pool
mkdir $1
@@ -22,7 +22,6 @@ flags_p2pool="--target=riscv64-linux-gnu -fuse-ld=lld -Wno-unused-command-line-a
cd /p2pool/external/src/curl
cmake . -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../../../cmake/riscv64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && cp -f libcurl.a .libs
cd /p2pool/external/src/libuv
rm -rf build
@@ -38,7 +37,7 @@ make -j$(nproc)
cd /p2pool
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/riscv64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=riscv64
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/riscv64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=riscv64 -DGIT_COMMIT="$(git rev-parse --short=7 HEAD)"
make -j$(nproc) p2pool
mkdir $1
@@ -22,7 +22,6 @@ flags_p2pool="-fuse-ld=lld -Wno-unused-command-line-argument $flags_size $flags_
cd /p2pool/external/src/curl
cmake . -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_C_COMPILER=clang -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && cp -f libcurl.a .libs
cd /p2pool/external/src/libuv
rm -rf build
@@ -38,7 +37,7 @@ make -j$(nproc)
cd /p2pool
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DSTATIC_BINARY=ON -DARCH_ID=x86_64
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DSTATIC_BINARY=ON -DARCH_ID=x86_64 -DGIT_COMMIT="$(git rev-parse --short=7 HEAD)"
make -j$(nproc) p2pool
mkdir $1
@@ -22,7 +22,6 @@ flags_p2pool="$flags_size $flags_datetime"
cd /p2pool/external/src/curl
cmake . -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../../../cmake/macos_aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && cp -f libcurl.a .libs
cd /p2pool/external/src/libuv
rm -rf build
@@ -38,7 +37,7 @@ make -j$(nproc)
cd /p2pool
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/macos_aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_LIBS=ON -DARCH_ID=aarch64
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/macos_aarch64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_LIBS=ON -DARCH_ID=aarch64 -DGIT_COMMIT="$(git rev-parse --short=7 HEAD)"
make -j$(nproc) p2pool
mkdir $1
@@ -22,7 +22,6 @@ flags_p2pool="$flags_size $flags_datetime"
cd /p2pool/external/src/curl
cmake . -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../../../cmake/macos_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && cp -f libcurl.a .libs
cd /p2pool/external/src/libuv
rm -rf build
@@ -38,7 +37,7 @@ make -j$(nproc)
cd /p2pool
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/macos_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_LIBS=ON -DARCH_ID=x86_64
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/macos_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool" -DOPENSSL_NO_ASM=ON -DSTATIC_LIBS=ON -DARCH_ID=x86_64 -DGIT_COMMIT="$(git rev-parse --short=7 HEAD)"
make -j$(nproc) p2pool
mkdir $1
@@ -27,7 +27,6 @@ git apply --verbose --ignore-whitespace --directory=external/src/grpc/third_part
cd /p2pool/external/src/curl
cmake . -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../../../cmake/windows_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_libs" -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF -DCURL_DISABLE_INSTALL=ON -DCURL_ENABLE_EXPORT_TARGET=OFF -DCURL_DISABLE_HEADERS_API=ON -DCURL_DISABLE_BINDLOCAL=ON -DBUILD_LIBCURL_DOCS=OFF -DBUILD_MISC_DOCS=OFF -DENABLE_CURL_MANUAL=OFF -DCURL_ZLIB=OFF -DCURL_BROTLI=OFF -DCURL_ZSTD=OFF -DCURL_DISABLE_ALTSVC=ON -DCURL_DISABLE_COOKIES=ON -DCURL_DISABLE_DOH=ON -DCURL_DISABLE_GETOPTIONS=ON -DCURL_DISABLE_HSTS=ON -DCURL_DISABLE_LIBCURL_OPTION=ON -DCURL_DISABLE_MIME=ON -DCURL_DISABLE_NETRC=ON -DCURL_DISABLE_NTLM=ON -DCURL_DISABLE_PARSEDATE=ON -DCURL_DISABLE_PROGRESS_METER=ON -DCURL_DISABLE_SHUFFLE_DNS=ON -DCURL_DISABLE_SOCKETPAIR=ON -DCURL_DISABLE_VERBOSE_STRINGS=ON -DCURL_DISABLE_WEBSOCKETS=ON -DHTTP_ONLY=ON -DCURL_ENABLE_SSL=OFF -DUSE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF -DCURL_USE_LIBSSH2=OFF -DENABLE_UNIX_SOCKETS=OFF -DBUILD_TESTING=OFF -DUSE_NGHTTP2=OFF -DBUILD_EXAMPLES=OFF -DP2POOL_BORINGSSL=ON -DCURL_DISABLE_SRP=ON -DCURL_DISABLE_AWS=ON -DCURL_DISABLE_BASIC_AUTH=ON -DCURL_DISABLE_BEARER_AUTH=ON -DCURL_DISABLE_KERBEROS_AUTH=ON -DCURL_DISABLE_NEGOTIATE_AUTH=ON -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
make -j$(nproc)
cd lib && cp -f libcurl.a .libs
cd /p2pool/external/src/libuv
rm -rf build
@@ -43,7 +42,7 @@ make -j$(nproc)
cd /p2pool
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/windows_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool $flags_cxx_headers" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=x86_64
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5" -DCMAKE_TOOLCHAIN_FILE=../cmake/windows_x86_64_toolchain_clang.cmake -DCMAKE_C_FLAGS="$flags_p2pool" -DCMAKE_CXX_FLAGS="$flags_p2pool $flags_cxx_headers" -DOPENSSL_NO_ASM=ON -DSTATIC_BINARY=ON -DARCH_ID=x86_64 -DGIT_COMMIT="$(git rev-parse --short=7 HEAD)"
make -j$(nproc) p2pool
mkdir $1
+4 -4
View File
@@ -44,16 +44,16 @@ struct BlockCache::Impl : public nocopy_nomove
return;
}
int result = lseek(m_fd, static_cast<off_t>(CACHE_SIZE) - 1, SEEK_SET);
if (result == -1) {
auto result1 = lseek(m_fd, static_cast<off_t>(CACHE_SIZE) - 1, SEEK_SET);
if (result1 == -1) {
LOGERR(1, "lseek failed");
close(m_fd);
m_fd = -1;
return;
}
result = write(m_fd, "", 1);
if (result != 1) {
auto result2 = write(m_fd, "", 1);
if (result2 != 1) {
LOGERR(1, "write failed");
close(m_fd);
m_fd = -1;
+16 -5
View File
@@ -27,7 +27,6 @@
#include "p2pool.h"
#include "side_chain.h"
#include "pool_block.h"
#include "params.h"
#include "merkle.h"
#include <zmq.hpp>
#include <ctime>
@@ -205,7 +204,7 @@ void BlockTemplate::shuffle_tx_order()
}
}
void BlockTemplate::update(const MinerData& data, const Mempool& mempool, const Wallet* miner_wallet)
void BlockTemplate::update(const MinerData& data, const Mempool& mempool, const Wallet& miner_wallet, const Wallet& subaddress)
{
if (data.major_version > HARDFORK_SUPPORTED_VERSION) {
LOGERR(1, "got hardfork version " << data.major_version << ", expected <= " << HARDFORK_SUPPORTED_VERSION);
@@ -270,7 +269,7 @@ void BlockTemplate::update(const MinerData& data, const Mempool& mempool, const
m_blockHeaderSize = m_blockHeader.size();
m_poolBlockTemplate->m_minerWallet = *miner_wallet;
m_poolBlockTemplate->m_minerWallet = miner_wallet;
m_sidechain->fill_sidechain_data(*m_poolBlockTemplate, m_shares);
@@ -591,7 +590,7 @@ void BlockTemplate::update(const MinerData& data, const Mempool& mempool, const
m_poolBlockTemplate->m_transactions.push_back(m_mempoolTxs[m_mempoolTxsOrder[i]].id);
}
m_poolBlockTemplate->m_minerWallet = *miner_wallet;
m_poolBlockTemplate->m_minerWallet = miner_wallet;
// Layout: [software id, version, random number, sidechain extra_nonce]
uint32_t* sidechain_extra = m_poolBlockTemplate->m_sidechainExtraBuf;
@@ -626,6 +625,18 @@ void BlockTemplate::update(const MinerData& data, const Mempool& mempool, const
m_poolBlockTemplate->m_mergeMiningExtra.emplace(c.unique_id, std::move(v));
}
if (subaddress.valid()) {
std::vector<uint8_t> v;
v.reserve(HASH_SIZE + 2);
const hash& key = subaddress.view_public_key();
v.insert(v.end(), key.h, key.h + HASH_SIZE);
v.push_back(0);
v.push_back(0);
m_poolBlockTemplate->m_mergeMiningExtra.emplace(keccak_subaddress_viewpub, std::move(v));
}
init_merge_mining_merkle_proof();
const std::vector<uint8_t> sidechain_data = m_poolBlockTemplate->serialize_sidechain_data();
@@ -854,7 +865,7 @@ void BlockTemplate::select_mempool_transactions(const Mempool& mempool)
k += r / 34359738368ULL;
}
const size_t max_transactions = (MAX_BLOCK_SIZE > k) ? ((MAX_BLOCK_SIZE - k) / HASH_SIZE) : 0;
const uint32_t max_transactions = static_cast<uint32_t>((MAX_BLOCK_SIZE > k) ? ((MAX_BLOCK_SIZE - k) / HASH_SIZE) : 0);
LOGINFO(6, max_transactions << " transactions can be taken with current block size limit");
if (max_transactions == 0) {
+1 -1
View File
@@ -39,7 +39,7 @@ public:
BlockTemplate(const BlockTemplate& b);
BlockTemplate& operator=(const BlockTemplate& b);
void update(const MinerData& data, const Mempool& mempool, const Wallet* miner_wallet);
void update(const MinerData& data, const Mempool& mempool, const Wallet& miner_wallet, const Wallet& subaddress);
uint64_t last_updated() const { return m_lastUpdated.load(); }
bool get_difficulties(const uint32_t template_id, uint64_t& height, uint64_t& sidechain_height, difficulty_type& mainchain_difficulty, difficulty_type& aux_diff, difficulty_type& sidechain_difficulty) const;
+2 -3
View File
@@ -91,7 +91,7 @@ ConsoleCommands::ConsoleCommands(p2pool* pool)
rng.discard(10000);
for (int i = 0; i < 10; ++i) {
if (start_listening(false, "127.0.0.1", 49152 + (rng() % 16384))) {
if (start_listening(false, "127.0.0.1", 49152 + static_cast<int>(rng() % 16384))) {
break;
}
}
@@ -293,7 +293,7 @@ static void do_status(p2pool *m_pool, const char * /* args */)
static void do_loglevel(p2pool * /* m_pool */, const char *args)
{
int level = strtol(args, nullptr, 10);
int level = static_cast<int>(strtol(args, nullptr, 10));
level = std::min(std::max(level, 0), log::MAX_GLOBAL_LOG_LEVEL);
log::GLOBAL_LOG_LEVEL = level;
LOGINFO(0, "log level set to " << level);
@@ -388,7 +388,6 @@ static void do_stop_mining(p2pool* m_pool, const char* /*args*/)
static void do_exit(p2pool *m_pool, const char * /* args */)
{
bkg_jobs_tracker->wait();
m_pool->stop();
}
+4 -4
View File
@@ -66,7 +66,7 @@ private:
static RandomBytes* randomBytes = nullptr;
}
} // namespace
static FORCEINLINE bool less32(const uint8_t* k0, const uint8_t* k1)
{
@@ -390,7 +390,7 @@ private:
m_viewTags1[i] = k; \
return; \
} \
else if (t == k) { \
if (t == k) { \
return; \
} \
} while (0)
@@ -481,12 +481,12 @@ void init_crypto_cache()
void destroy_crypto_cache()
{
{
auto p = randomBytes;
auto* p = randomBytes;
randomBytes = nullptr;
delete p;
}
{
auto p = cache;
auto* p = cache;
cache = nullptr;
delete p;
}
+5 -1
View File
@@ -97,6 +97,8 @@ CurlContext::CurlContext(const std::string& address, int port, const std::string
, m_connectedTime(0)
, m_proxy(proxy)
{
BACKGROUND_JOB_START(CurlContext);
m_pollHandles.reserve(2);
{
@@ -124,7 +126,7 @@ CurlContext::CurlContext(const std::string& address, int port, const std::string
m_req.clear();
}
else {
s << "/json_rpc\0";
s << "/json_rpc" << '\0';
}
m_url = buf;
@@ -266,6 +268,8 @@ CurlContext::~CurlContext()
delete m_closeCallback;
curl_slist_free_all(m_headers);
BACKGROUND_JOB_STOP(CurlContext);
}
int CurlContext::on_socket(CURL* /*easy*/, curl_socket_t s, int action)
+16 -16
View File
@@ -50,12 +50,12 @@ NOINLINE void keccakf_plain(std::array<uint64_t, 25>& st)
bc[4] = st[4] ^ st[9] ^ st[14] ^ st[19] ^ st[24];
#define THETA(i) { \
const uint64_t t = bc[(i + 4) % 5] ^ ROTL64(bc[(i + 1) % 5], 1); \
st[i + 0 ] ^= t; \
st[i + 5] ^= t; \
st[i + 10] ^= t; \
st[i + 15] ^= t; \
st[i + 20] ^= t; \
const uint64_t t = bc[((i) + 4) % 5] ^ ROTL64(bc[((i) + 1) % 5], 1); \
st[(i) + 0 ] ^= t; \
st[(i) + 5] ^= t; \
st[(i) + 10] ^= t; \
st[(i) + 15] ^= t; \
st[(i) + 20] ^= t; \
}
THETA(0);
@@ -93,16 +93,16 @@ NOINLINE void keccakf_plain(std::array<uint64_t, 25>& st)
// Chi
#define CHI(j) { \
const uint64_t st0 = st[j ]; \
const uint64_t st1 = st[j + 1]; \
const uint64_t st2 = st[j + 2]; \
const uint64_t st3 = st[j + 3]; \
const uint64_t st4 = st[j + 4]; \
st[j ] ^= ~st1 & st2; \
st[j + 1] ^= ~st2 & st3; \
st[j + 2] ^= ~st3 & st4; \
st[j + 3] ^= ~st4 & st0; \
st[j + 4] ^= ~st0 & st1; \
const uint64_t st0 = st[(j) ]; \
const uint64_t st1 = st[(j) + 1]; \
const uint64_t st2 = st[(j) + 2]; \
const uint64_t st3 = st[(j) + 3]; \
const uint64_t st4 = st[(j) + 4]; \
st[(j) ] ^= ~st1 & st2; \
st[(j) + 1] ^= ~st2 & st3; \
st[(j) + 2] ^= ~st3 & st4; \
st[(j) + 3] ^= ~st4 & st0; \
st[(j) + 4] ^= ~st0 & st1; \
}
CHI( 0);
+3
View File
@@ -29,6 +29,9 @@ extern const uint64_t keccakf_rndc[24];
// keccak hash of a single 0x00 byte
constexpr hash keccak_0x00{ 0xbc, 0x36, 0x78, 0x9e, 0x7a, 0x1e, 0x28, 0x14, 0x36, 0x46, 0x42, 0x29, 0x82, 0x8f, 0x81, 0x7d, 0x66, 0x12, 0xf7, 0xb4, 0x77, 0xd6, 0x65, 0x91, 0xff, 0x96, 0xa9, 0xe0, 0x64, 0xbc, 0xc9, 0x8a };
// keccak hash of "subaddress_viewpub"
constexpr hash keccak_subaddress_viewpub{ 0x40, 0xb2, 0x0e, 0x14, 0xc5, 0x9e, 0xdc, 0x32, 0x57, 0xb1, 0x71, 0xb0, 0xf3, 0x76, 0x27, 0x01, 0x8e, 0x92, 0x45, 0xed, 0xd5, 0x2a, 0x69, 0x0b, 0xf6, 0xd9, 0xe6, 0x21, 0xa0, 0x98, 0xb9, 0x6a };
typedef void (*keccakf_func)(std::array<uint64_t, 25>&);
extern keccakf_func keccakf;
+16 -16
View File
@@ -43,12 +43,12 @@ NOINLINE void keccakf_bmi(std::array<uint64_t, 25>& st)
bc[4] = st[4] ^ st[9] ^ st[14] ^ st[19] ^ st[24];
#define THETA(i) { \
const uint64_t t = bc[(i + 4) % 5] ^ ROTL64(bc[(i + 1) % 5], 1); \
st[i + 0 ] ^= t; \
st[i + 5] ^= t; \
st[i + 10] ^= t; \
st[i + 15] ^= t; \
st[i + 20] ^= t; \
const uint64_t t = bc[((i) + 4) % 5] ^ ROTL64(bc[((i) + 1) % 5], 1); \
st[(i) + 0 ] ^= t; \
st[(i) + 5] ^= t; \
st[(i) + 10] ^= t; \
st[(i) + 15] ^= t; \
st[(i) + 20] ^= t; \
}
THETA(0);
@@ -86,16 +86,16 @@ NOINLINE void keccakf_bmi(std::array<uint64_t, 25>& st)
// Chi
#define CHI(j) { \
const uint64_t st0 = st[j ]; \
const uint64_t st1 = st[j + 1]; \
const uint64_t st2 = st[j + 2]; \
const uint64_t st3 = st[j + 3]; \
const uint64_t st4 = st[j + 4]; \
st[j ] ^= _andn_u64(st1, st2); \
st[j + 1] ^= _andn_u64(st2, st3); \
st[j + 2] ^= _andn_u64(st3, st4); \
st[j + 3] ^= _andn_u64(st4, st0); \
st[j + 4] ^= _andn_u64(st0, st1); \
const uint64_t st0 = st[(j) ]; \
const uint64_t st1 = st[(j) + 1]; \
const uint64_t st2 = st[(j) + 2]; \
const uint64_t st3 = st[(j) + 3]; \
const uint64_t st4 = st[(j) + 4]; \
st[(j) ] ^= _andn_u64(st1, st2); \
st[(j) + 1] ^= _andn_u64(st2, st3); \
st[(j) + 2] ^= _andn_u64(st3, st4); \
st[(j) + 3] ^= _andn_u64(st4, st0); \
st[(j) + 4] ^= _andn_u64(st0, st1); \
}
CHI(0);
+4 -4
View File
@@ -211,7 +211,7 @@ public:
#endif
// Mark that everything is written into this log slot
p[0] = buf[0] + 1;
p[0] = static_cast<char>(buf[0] + 1);
// Signal the worker thread
uv_cond_signal(&m_cond);
@@ -453,7 +453,7 @@ static FORCEINLINE void writeCurrentTime(Stream& s)
s.setNumberWidth(2);
s << (t.tm_year + 1900) << '-' << (t.tm_mon + 1) << '-' << t.tm_mday << ' ' << t.tm_hour << ':' << t.tm_min << ':' << t.tm_sec << '.';
const int32_t mcs = time_point_cast<microseconds>(now).time_since_epoch().count() % 1000000;
const int32_t mcs = static_cast<int32_t>(time_point_cast<microseconds>(now).time_since_epoch().count() % 1000000);
s.setNumberWidth(4);
s << (mcs / 100);
@@ -474,8 +474,8 @@ NOINLINE Writer::Writer(Severity severity) : Stream(m_stackBuf)
NOINLINE Writer::~Writer()
{
const uint32_t size = static_cast<uint32_t>(m_pos + 1);
m_buf[1] = static_cast<uint8_t>(size & 255);
m_buf[2] = static_cast<uint8_t>(size >> 8);
m_buf[1] = static_cast<char>(static_cast<uint8_t>(size & 255));
m_buf[2] = static_cast<char>(static_cast<uint8_t>(size >> 8));
m_buf[m_pos] = '\n';
#ifndef P2POOL_LOG_DISABLE
worker->write(m_buf, size);
+14 -2
View File
@@ -44,6 +44,10 @@
#include "randomx.h"
#endif
#ifdef WITH_TLS
#include "tls.h"
#endif
#if defined(_WIN32) && defined(_MSC_VER) && !defined(NDEBUG)
#include <DbgHelp.h>
@@ -56,7 +60,8 @@ void p2pool_usage()
{
printf("P2Pool %s\n"
"\nUsage:\n\n" \
"--wallet Wallet address to mine to. Subaddresses and integrated addresses are not supported!\n"
"--wallet Main wallet address (the one that starts with 4...). To mine to a subaddress of this wallet, use it together with --subaddress\n"
"--subaddress Subaddress to mine to. It must belong to the same wallet that was specified with --wallet parameter\n"
"--host IP address of your Monero node, default is 127.0.0.1\n"
"--rpc-port monerod RPC API port number, default is 18081\n"
"--zmq-port monerod ZMQ pub port number, default is 18083 (same port as in monerod's \"--zmq-pub\" command line parameter)\n"
@@ -202,7 +207,7 @@ int p2pool_test()
constexpr char expected_hash[] = "3b5ecc2bb14f467161a04fe476b541194fba82dbbbfc7c320961f922a0294dee";
if (memcmp(buf, expected_hash, RANDOMX_HASH_SIZE * 2) != 0) {
if (memcmp(buf, expected_hash, static_cast<int>(RANDOMX_HASH_SIZE * 2)) != 0) {
printf("Invalid hash calculated: expected %s, got %s\n", expected_hash, buf);
return 1;
}
@@ -312,6 +317,13 @@ int main(int argc, char* argv[])
grpc_init();
#endif
#ifdef WITH_TLS
if (!p2pool::ServerTls::global_init()) {
printf("ServerTls::global_init failed\n");
return 1;
}
#endif
try {
p2pool::p2pool pool(argc, argv);
result = pool.run();
+1 -1
View File
@@ -395,5 +395,5 @@ char* strdup_hook(const char* s) noexcept
#endif
}
}
} // namespace p2pool
#endif
+15 -1
View File
@@ -41,7 +41,7 @@ void Mempool::add(const TxMempoolData& tx)
}
}
void Mempool::swap(std::vector<TxMempoolData>& transactions)
void Mempool::swap_transactions(std::vector<TxMempoolData>& transactions)
{
const uint64_t cur_time = seconds_since_epoch();
@@ -59,10 +59,24 @@ void Mempool::swap(std::vector<TxMempoolData>& transactions)
}
m_transactions.clear();
m_transactions.reserve(transactions.size());
for (TxMempoolData& data : transactions) {
m_transactions.emplace(data.id, data);
}
}
void Mempool::remove(const std::vector<hash>& tx_hashes)
{
if (tx_hashes.empty()) {
return;
}
WriteLock lock(m_lock);
for (const hash& h : tx_hashes) {
m_transactions.erase(h);
}
}
} // namespace p2pool
+3 -1
View File
@@ -32,7 +32,7 @@ public:
~Mempool();
void add(const TxMempoolData& tx);
void swap(std::vector<TxMempoolData>& transactions);
void swap_transactions(std::vector<TxMempoolData>& transactions);
size_t size() const
{
@@ -56,6 +56,8 @@ public:
m_transactions.clear();
}
void remove(const std::vector<hash>& tx_hashes);
private:
mutable uv_rwlock_t m_lock;
unordered_map<hash, TxMempoolData> m_transactions;
+1 -4
View File
@@ -34,11 +34,8 @@ IMergeMiningClient* IMergeMiningClient::create(p2pool* pool, const std::string&
if (host.find(MergeMiningClientTari::TARI_PREFIX) == 0) {
return new MergeMiningClientTari(pool, host, wallet);
}
else
#endif
{
return new MergeMiningClientJSON_RPC(pool, host, wallet);
}
return new MergeMiningClientJSON_RPC(pool, host, wallet);
}
catch (...) {
LOGERR(1, "Failed to create merge mining client for " << host);
+4 -6
View File
@@ -44,10 +44,10 @@ MergeMiningClientJSON_RPC::MergeMiningClientJSON_RPC(p2pool* pool, const std::st
const size_t k = host.find_last_of(':');
if (k != std::string::npos) {
m_host = host.substr(0, k);
m_port = std::stoul(host.substr(k + 1), nullptr, 10);
m_port = static_cast<int32_t>(std::stol(host.substr(k + 1), nullptr, 10));
}
if (m_host.empty() || (m_port == 0) || (m_port >= 65536)) {
if (m_host.empty() || (m_port <= 0) || (m_port >= 65536)) {
LOGERR(1, "Invalid host " << host);
throw std::exception();
}
@@ -390,12 +390,10 @@ bool MergeMiningClientJSON_RPC::parse_merge_mining_submit_solution(const char* d
if (error_result.IsString()) {
return err(error_result.GetString());
}
else if (error_result.IsObject() && error_result.HasMember("message") && error_result["message"].IsString()) {
if (error_result.IsObject() && error_result.HasMember("message") && error_result["message"].IsString()) {
return err(error_result["message"].GetString());
}
else {
return err("an unknown error occurred");
}
return err("an unknown error occurred");
}
if (!doc.HasMember("result")) {
+1 -1
View File
@@ -52,7 +52,7 @@ private:
bool parse_merge_mining_submit_solution(const char* data, size_t size) const;
std::string m_host;
uint32_t m_port;
int32_t m_port;
mutable uv_rwlock_t m_lock;
ChainParameters m_chainParams;
+84 -39
View File
@@ -96,7 +96,8 @@ MergeMiningClientTari::MergeMiningClientTari(p2pool* pool, std::string host, con
m_channelArgs.SetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH, -1);
m_channelArgs.SetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH, -1);
m_TariNode = new BaseNode::Stub(grpc::CreateCustomChannel(buf, grpc::InsecureChannelCredentials(), m_channelArgs));
m_channel = grpc::CreateCustomChannel(buf, grpc::InsecureChannelCredentials(), m_channelArgs);
m_TariNode.reset(new BaseNode::Stub(m_channel));
uv_mutex_init_checked(&m_workerLock);
uv_cond_init_checked(&m_workerCond);
@@ -166,7 +167,8 @@ MergeMiningClientTari::~MergeMiningClientTari()
m_server->shutdown_tcp();
delete m_server;
delete m_TariNode;
m_TariNode.reset();
m_channel.reset();
uv_rwlock_destroy(&m_chainParamsLock);
@@ -181,6 +183,13 @@ MergeMiningClientTari::~MergeMiningClientTari()
bool MergeMiningClientTari::get_params(ChainParameters& out_params) const
{
const grpc_connectivity_state channel_state = m_channel->GetState(false);
if (channel_state != GRPC_CHANNEL_READY) {
LOGWARN(4, m_hostStr << " is not ready (" << channel_state << ')');
return false;
}
const uint64_t t = seconds_since_epoch();
ReadLock lock(m_chainParamsLock);
@@ -226,41 +235,54 @@ void MergeMiningClientTari::on_external_block(const PoolBlock& block)
return;
}
std::vector<std::pair<hash, std::vector<uint8_t>>> mm_extra;
mm_extra.reserve(block.m_mergeMiningExtra.size());
// Filter aux chain data only
for (const auto& i : block.m_mergeMiningExtra) {
if (i.first != keccak_subaddress_viewpub) {
mm_extra.emplace_back(i.first, i.second);
}
}
std::vector<hash> aux_ids;
std::vector<AuxChainData> aux_chains;
// All aux chains in this block + the P2Pool sidechain
aux_ids.reserve(block.m_mergeMiningExtra.size() + 1);
aux_ids.reserve(mm_extra.size() + 1);
// All aux chains in this block
aux_chains.reserve(block.m_mergeMiningExtra.size());
for (const auto& i : block.m_mergeMiningExtra) {
const std::vector<uint8_t>& v = i.second;
const uint8_t* p = v.data();
const uint8_t* e = v.data() + v.size();
if (p + HASH_SIZE > e) {
LOGWARN(3, "on_external_block: sanity check failed - invalid merge mining extra data " << '1');
return;
}
aux_chains.reserve(mm_extra.size());
for (const auto& i : mm_extra) {
hash data;
memcpy(data.h, p, HASH_SIZE);
p += HASH_SIZE;
difficulty_type diff;
p = readVarint(p, e, diff.lo);
if (!p) {
LOGWARN(3, "on_external_block: sanity check failed - invalid merge mining extra data " << '2');
return;
}
{
const std::vector<uint8_t>& v = i.second;
p = readVarint(p, e, diff.hi);
if (!p) {
LOGWARN(3, "on_external_block: sanity check failed - invalid merge mining extra data " << '3');
return;
const uint8_t* p = v.data();
const uint8_t* e = v.data() + v.size();
if (p + HASH_SIZE > e) {
LOGWARN(3, "on_external_block: sanity check failed - invalid merge mining extra data " << '1');
return;
}
memcpy(data.h, p, HASH_SIZE);
p += HASH_SIZE;
p = readVarint(p, e, diff.lo);
if (!p) {
LOGWARN(3, "on_external_block: sanity check failed - invalid merge mining extra data " << '2');
diff.lo = 0;
}
else {
p = readVarint(p, e, diff.hi);
if (!p) {
LOGWARN(3, "on_external_block: sanity check failed - invalid merge mining extra data " << '3');
diff.hi = 0;
}
}
}
// If it's our aux chain, check that it's the same job and that there is enough PoW
@@ -281,11 +303,10 @@ void MergeMiningClientTari::on_external_block(const PoolBlock& block)
LOGINFO(4, "External aux job solution found, but it's for another miner");
return;
}
else {
LOGINFO(4, "External aux job solution found, but it's stale");
chain_params.aux_hash = data;
chain_params.aux_diff = diff;
}
LOGINFO(4, "External aux job solution found, but it's stale");
chain_params.aux_hash = data;
chain_params.aux_diff = diff;
}
else {
m_previousAuxHashesFoundIndex = std::numeric_limits<uint32_t>::max();
@@ -347,7 +368,7 @@ void MergeMiningClientTari::on_external_block(const PoolBlock& block)
uint32_t aux_merkle_proof_path = 0;
const hash sidechain_id = block.m_sidechainId;
const uint32_t n_aux_chains = static_cast<uint32_t>(block.m_mergeMiningExtra.size() + 1);
const uint32_t n_aux_chains = static_cast<uint32_t>(mm_extra.size() + 1);
std::vector<hash> hashes(n_aux_chains);
@@ -490,10 +511,10 @@ void MergeMiningClientTari::submit_solution(const std::vector<uint8_t>& coinbase
data.append(reinterpret_cast<const char*>(keccak_state.data()), sizeof(keccak_state));
// coinbase_tx_hasher.offset
data.append(1, static_cast<uint8_t>(offset));
data.append(1, static_cast<char>(static_cast<uint8_t>(offset)));
// coinbase_tx_hasher.rate
data.append(1, static_cast<uint8_t>(KeccakParams::HASH_DATA_AREA));
data.append(1, static_cast<char>(static_cast<uint8_t>(KeccakParams::HASH_DATA_AREA)));
// coinbase_tx_hasher.mode
data.append(1, 1);
@@ -505,7 +526,7 @@ void MergeMiningClientTari::submit_solution(const std::vector<uint8_t>& coinbase
// aux_chain_merkle_proof
data.append(1, static_cast<char>(merkle_proof.size()));
data.append(reinterpret_cast<const char*>(merkle_proof.data()), merkle_proof.size() * HASH_SIZE);
writeVarint(merkle_proof_path, [&data](uint8_t value) { data.append(1, value); });
writeVarint(merkle_proof_path, [&data](uint8_t value) { data.append(1, static_cast<char>(value)); });
pow->set_pow_data(data);
}
@@ -606,12 +627,31 @@ template<> struct log::Stream::Entry<TariAmount>
}
};
template<> struct log::Stream::Entry<grpc_connectivity_state>
{
static NOINLINE void put(grpc_connectivity_state value, Stream* wrapper)
{
switch (value) {
#define X(name) case GRPC_CHANNEL_##name: *wrapper << #name; return;
X(IDLE)
X(CONNECTING)
X(READY)
X(TRANSIENT_FAILURE)
X(SHUTDOWN)
#undef X
}
*wrapper << "unknown (" << static_cast<int>(value) << ')';
}
};
void MergeMiningClientTari::print_status() const
{
const grpc_connectivity_state channel_state = m_channel->GetState(false);
ReadLock lock(m_chainParamsLock);
LOGINFO(0, "status" <<
"\nHost = " << m_hostStr <<
"\nHost = " << m_hostStr << " (" << channel_state << ')' <<
"\nWallet = " << m_auxWallet <<
"\nHeight = " << m_tariJobParams.height <<
"\nDifficulty = " << m_tariJobParams.diff <<
@@ -622,12 +662,15 @@ void MergeMiningClientTari::print_status() const
void MergeMiningClientTari::api_status(log::Stream& s) const
{
const grpc_connectivity_state channel_state = m_channel->GetState(false);
ReadLock lock(m_chainParamsLock);
s << '{'
<< "\"api\":\"Tari gRPC\","
<< "\"id\":\"" << m_chainParams.aux_id << "\","
<< "\"host\":\"" << m_hostStr << "\","
<< "\"channel_state\":\"" << channel_state << "\","
<< "\"wallet\":\"" << m_auxWallet << "\","
<< "\"height\":" << m_tariJobParams.height << ","
<< "\"difficulty\":" << m_tariJobParams.diff << ","
@@ -681,7 +724,9 @@ void MergeMiningClientTari::run()
const grpc::Status get_tip_info_status = m_TariNode->GetTipInfo(&get_tip_info_ctx, get_tip_info_request, &cur_tip_info);
if (!get_tip_info_status.ok()) {
LOGWARN(4, "GetTipInfo failed: " << get_tip_info_status.error_message());
const grpc_connectivity_state channel_state = m_channel->GetState(false);
LOGWARN(4, "GetTipInfo failed: " << get_tip_info_status.error_message() << ", channel state = " << channel_state);
if (!get_tip_info_status.error_details().empty()) {
LOGWARN(4, "GetTipInfo failed: " << get_tip_info_status.error_details());
}
@@ -819,7 +864,7 @@ bool MergeMiningClientTari::TariServer::start()
std::mt19937_64 rng(rd());
for (size_t i = 0; i < 10; ++i) {
if (start_listening(false, "127.0.0.1", 49152 + (rng() % 16384))) {
if (start_listening(false, "127.0.0.1", 49152 + static_cast<int>((rng() % 16384)))) {
break;
}
}
+2 -1
View File
@@ -103,7 +103,8 @@ private:
const std::string m_hostStr;
grpc::ChannelArguments m_channelArgs;
tari::rpc::BaseNode::Stub* m_TariNode;
std::shared_ptr<grpc::Channel> m_channel;
std::unique_ptr<tari::rpc::BaseNode::Stub> m_TariNode;
struct TariClient : public TCPServer::Client
{
+2 -1
View File
@@ -153,7 +153,8 @@ bool get_merkle_proof(const std::vector<std::vector<hash>>& tree, const hash& h,
if (count == 1) {
return true;
}
else if (count == 2) {
if (count == 2) {
proof.emplace_back(hashes[index ^ 1]);
path = index & 1;
}
+1 -1
View File
@@ -121,7 +121,7 @@ void Miner::on_block(const BlockTemplate& block)
m_totalHashes += hash_count;
if (m_pool->api() && m_pool->params().m_localStats && !m_pool->stopped()) {
const double block_reward_share_percent = m_pool->side_chain().get_reward_share(m_pool->params().m_wallet) * 100.0;
const double block_reward_share_percent = m_pool->side_chain().get_reward_share(m_pool->params().m_miningWallet) * 100.0;
m_pool->api()->set(p2pool_api::Category::LOCAL, "miner",
[cur_ts, hash_count, dt, block_reward_share_percent, this](log::Stream& s)
+106 -28
View File
@@ -867,7 +867,7 @@ P2PServer::Broadcast::Broadcast(const PoolBlock& block, const PoolBlock* parent)
data->compact_blob.reserve(data->pruned_blob.capacity() + (N - 1));
// Copy pruned_blob without the transaction list
data->compact_blob.assign(data->pruned_blob.begin(), data->pruned_blob.end() - (N - 1) * HASH_SIZE);
data->compact_blob.assign(data->pruned_blob.begin(), data->pruned_blob.end() - static_cast<uint32_t>((N - 1) * HASH_SIZE));
// Process transaction hashes one by one
size_t num_found = 0;
@@ -1602,7 +1602,7 @@ void P2PServer::clean_aux_job_messages()
for (auto it = m_auxJobMessages.begin(); it != m_auxJobMessages.end();) {
// Delete old messages only after 3x the timeout to give some leeway for system clock adjustments
if (cur_time > it->second + AUX_JOB_TIMEOUT * 3) {
if (cur_time > it->second + static_cast<uint64_t>(AUX_JOB_TIMEOUT * 3)) {
it = m_auxJobMessages.erase(it);
}
else {
@@ -1645,6 +1645,8 @@ void P2PServer::submit_monero_blocks()
const Params::Host& host = m_pool->current_host();
const uint64_t t1 = microseconds_since_epoch();
JSONRPCRequest::call(
host.m_address,
host.m_rpcPort,
@@ -1654,10 +1656,13 @@ void P2PServer::submit_monero_blocks()
host.m_rpcSSL,
host.m_rpcSSL_Fingerprint,
JSONRPCRequest::dummy_callback,
[this](const char* data, size_t size, double)
[this, t1](const char* data, size_t size, double)
{
if (size > 0) {
LOGERR(3, "on_monero_block_broadcast: submit_block RPC request failed, error " << log::const_buf(data, size));
LOGERR(3, "submit_monero_blocks: submit_block RPC request failed, error " << log::const_buf(data, size));
}
else {
LOGINFO(4, "submit_monero_blocks: submit_block RPC completed in " << static_cast<double>(microseconds_since_epoch() - t1) / 1e3 << " ms");
}
if (!m_MoneroBlocksToSubmit.empty()) {
@@ -3005,7 +3010,7 @@ bool P2PServer::P2PClient::on_aux_job_donation(const uint8_t* buf, uint32_t size
return true;
}
bool P2PServer::P2PClient::on_monero_block_broadcast(const uint8_t* buf, uint32_t size) const
bool P2PServer::P2PClient::on_monero_block_broadcast(const uint8_t* buf, uint32_t size)
{
P2PServer* server = static_cast<P2PServer*>(m_owner);
@@ -3110,37 +3115,110 @@ bool P2PServer::P2PClient::on_monero_block_broadcast(const uint8_t* buf, uint32_
blob.insert(blob.end(), root.h, root.h + HASH_SIZE);
writeVarint(num_transactions + 1, blob);
hash pow_hash;
if (!pool->hasher()->calculate(blob.data(), blob.size(), height, seed, pow_hash, false)) {
LOGWARN(3, "Invalid MONERO_BLOCK_BROADCAST: failed to calculate PoW hash");
return false;
}
struct Work
{
uv_work_t req;
if (!diff.check_pow(pow_hash)) {
LOGWARN(3, "Invalid MONERO_BLOCK_BROADCAST: diff check failed, PoW hash = " << pow_hash);
return false;
}
P2PServer* server;
P2PClient* client;
server->broadcast_monero_block(buf0, size0, this, true);
uint32_t reset_counter;
bool is_v6;
raw_ip addr;
std::string request;
request.reserve(size * 2 + 128);
RandomX_Hasher_Base* hasher;
request.append("{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"submit_block\",\"params\":[\"");
std::vector<uint8_t> blob;
uint64_t height;
hash seed;
difficulty_type diff;
for (size_t i = 0; i < size; ++i) {
request.append(1, "0123456789abcdef"[buf[i] >> 4]);
request.append(1, "0123456789abcdef"[buf[i] & 15]);
}
std::vector<uint8_t> message;
request.append("\"]}");
bool pow_check_passed;
};
server->m_MoneroBlocksToSubmit.emplace_back(std::move(request));
Work* work = new Work{ {}, server, this, m_resetCounter, m_isV6, m_addr, pool->hasher(), std::move(blob), height, seed, diff, { buf0, buf0 + size0 }, false };
work->req.data = work;
// Kick the JSON RPC request loop only when the first request arrives
// The other requests will be queued and submit_monero_blocks() will process them one by one
if (server->m_MoneroBlocksToSubmit.size() == 1) {
server->submit_monero_blocks();
const int err = uv_queue_work(&server->m_loop, &work->req,
[](uv_work_t* req)
{
BACKGROUND_JOB_START(P2PServer::on_monero_block_broadcast);
Work* work = reinterpret_cast<Work*>(req->data);
hash pow_hash;
if (!work->hasher->calculate(work->blob.data(), work->blob.size(), work->height, work->seed, pow_hash, false)) {
LOGWARN(3, "Invalid MONERO_BLOCK_BROADCAST: failed to calculate PoW hash for height = " << work->height);
return;
}
if (!work->diff.check_pow(pow_hash)) {
LOGWARN(3, "Invalid MONERO_BLOCK_BROADCAST: diff check failed for height = " << work->height << ", PoW hash = " << pow_hash);
return;
}
LOGINFO(6, "on_monero_block_broadcast: PoW check passed for height = " << work->height);
work->pow_check_passed = true;
},
[](uv_work_t* req, int /*status*/)
{
Work* work = reinterpret_cast<Work*>(req->data);
P2PServer* server = work->server;
if (work->pow_check_passed) {
const uint8_t* buf0 = work->message.data();
const uint32_t size0 = static_cast<uint32_t>(work->message.size());
const uint8_t* buf = buf0 + sizeof(MoneroBlockBroadcastHeader);
const uint32_t size = static_cast<uint32_t>(size0 - sizeof(MoneroBlockBroadcastHeader));
server->broadcast_monero_block(buf0, size0, work->client, true);
std::string request;
request.reserve(size * 2 + 128);
request.append("{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"submit_block\",\"params\":[\"");
for (size_t i = 0; i < size; ++i) {
request.append(1, "0123456789abcdef"[buf[i] >> 4]);
request.append(1, "0123456789abcdef"[buf[i] & 15]);
}
request.append("\"]}");
server->m_MoneroBlocksToSubmit.emplace_back(std::move(request));
// Kick the JSON RPC request loop only when the first request arrives
// The other requests will be queued and submit_monero_blocks() will process them one by one
if (server->m_MoneroBlocksToSubmit.size() == 1) {
server->submit_monero_blocks();
}
}
else {
P2PClient* client = work->client;
if (client->m_resetCounter == work->reset_counter) {
client->close();
LOGWARN(3, "peer " << static_cast<const char*>(client->m_addrString) << " banned for " << DEFAULT_BAN_TIME << " seconds");
}
else {
LOGWARN(3, work->addr << " banned for " << DEFAULT_BAN_TIME << " seconds");
}
server->ban(work->is_v6, work->addr, DEFAULT_BAN_TIME);
server->remove_peer_from_list(work->addr);
}
delete work;
BACKGROUND_JOB_STOP(P2PServer::on_monero_block_broadcast);
});
if (err) {
LOGERR(1, "on_monero_block_broadcast: uv_queue_work failed, error " << uv_err_name(err));
delete work;
}
return true;
+1 -1
View File
@@ -121,7 +121,7 @@ public:
void on_peer_list_response(const uint8_t* buf);
void on_block_notify(const uint8_t* buf);
[[nodiscard]] bool on_aux_job_donation(const uint8_t* buf, uint32_t size);
[[nodiscard]] bool on_monero_block_broadcast(const uint8_t* buf, uint32_t size) const;
[[nodiscard]] bool on_monero_block_broadcast(const uint8_t* buf, uint32_t size);
[[nodiscard]] bool handle_incoming_block_async(const PoolBlock* block, uint64_t max_time_delta = 0);
static void handle_incoming_block(p2pool* pool, PoolBlock& block, std::vector<hash>& missing_blocks, bool& result);
+53 -21
View File
@@ -109,12 +109,12 @@ p2pool::p2pool(int argc, char* argv[])
generate_keys(pub, sec);
uint8_t view_tag;
if (!p->m_wallet.get_eph_public_key(sec, 0, eph_public_key, view_tag)) {
if (!p->m_miningWallet.get_eph_public_key(sec, 0, eph_public_key, view_tag)) {
LOGERR(1, "Invalid wallet address: get_eph_public_key failed");
throw std::exception();
}
const NetworkType type = p->m_wallet.type();
const NetworkType type = p->m_miningWallet.type();
if (type == NetworkType::Testnet) {
LOGWARN(1, "Mining to a testnet wallet address");
@@ -188,6 +188,13 @@ p2pool::p2pool(int argc, char* argv[])
uv_mutex_init_checked(&m_missingHeightsLock);
err = uv_timer_init(uv_default_loop_checked(), &m_timer);
if (err) {
LOGERR(1, "uv_timer_init failed, error " << uv_err_name(err));
throw std::exception();
}
m_timer.data = this;
m_api = p->m_apiPath.empty() ? nullptr : new p2pool_api(p->m_apiPath, p->m_localStats);
if (p->m_localStats && !m_api) {
@@ -283,12 +290,12 @@ p2pool::~p2pool()
delete m_params;
{
auto p = bkg_jobs_tracker;
auto* p = bkg_jobs_tracker;
bkg_jobs_tracker = nullptr;
delete p;
}
{
auto p = PoolBlock::s_precalculatedSharesLock;
auto* p = PoolBlock::s_precalculatedSharesLock;
PoolBlock::s_precalculatedSharesLock = nullptr;
delete p;
}
@@ -415,7 +422,7 @@ void p2pool::handle_miner_data(MinerData& data)
m_mempool->swap(data.tx_backlog);
}
#else
m_mempool->swap(data.tx_backlog);
m_mempool->swap_transactions(data.tx_backlog);
#endif
{
@@ -538,7 +545,7 @@ void p2pool::get_missing_heights()
char buf[log::Stream::BUF_SIZE + 1] = {};
log::Stream s(buf);
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_header_by_height\",\"params\":{\"height\":" << h << "}}\0";
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_header_by_height\",\"params\":{\"height\":" << h << "}}" << '\0';
const Params::Host& host = current_host();
@@ -577,8 +584,11 @@ const char* BLOCK_FOUND = "\n\
| ###### ####### ####### ##### # # # ####### ##### # # ###### |\n\
-----------------------------------------------------------------------------------------------";
void p2pool::handle_chain_main(ChainMain& data, const char* extra)
void p2pool::handle_chain_main(ChainMain& data, const char* extra, const std::vector<hash>& tx_hashes_in_block)
{
// These transactions were already mined, so remove them from mempool if any of them slipped through
m_mempool->remove(tx_hashes_in_block);
{
WriteLock lock(m_mainchainLock);
@@ -618,17 +628,17 @@ void p2pool::handle_chain_main(ChainMain& data, const char* extra)
if (!merkle_root.empty()) {
const PoolBlock* block = side_chain().find_block_by_merkle_root(merkle_root);
if (block) {
const Wallet& w = params().m_wallet;
const Wallet& w = params().m_miningWallet;
const char* who = (block->m_minerWallet == w) ? "you" : "someone else in this p2pool";
LOGINFO(0, log::LightGreen() << "BLOCK FOUND: main chain block at height " << data.height << " was mined by " << who << BLOCK_FOUND);
const uint64_t payout = block->get_payout(w);
if (payout) {
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightGreen() << w << log::LightCyan() << " got a payout of " << log::LightGreen() << log::XMRAmount(payout) << log::LightCyan() << " in block " << log::LightGreen() << data.height);
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightGreen() << params().m_displayWallet << log::LightCyan() << " got a payout of " << log::LightGreen() << log::XMRAmount(payout) << log::LightCyan() << " in block " << log::LightGreen() << data.height);
}
else {
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightYellow() << w << log::LightCyan() << " didn't get a payout in block " << log::LightYellow() << data.height << log::LightCyan() << " because you had no shares in PPLNS window");
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightYellow() << params().m_displayWallet << log::LightCyan() << " didn't get a payout in block " << log::LightYellow() << data.height << log::LightCyan() << " because you had no shares in PPLNS window");
}
api_update_block_found(&data, block, false);
@@ -1023,6 +1033,22 @@ void p2pool::on_stop(uv_async_t* async)
{
p2pool* pool = reinterpret_cast<p2pool*>(async->data);
const std::vector<std::pair<const char*, int32_t>> bkg_jobs = bkg_jobs_tracker->get_jobs();
if (!bkg_jobs.empty()) {
for (const auto& job : bkg_jobs) {
LOGINFO(1, "waiting for " << job.second << " \"" << job.first << "\" jobs to finish");
}
// There are still some background jobs running. Wait for 1 second and call on_stop again.
uv_timer_start(&pool->m_timer, [](uv_timer_t* timer) {
p2pool* pool = reinterpret_cast<p2pool*>(timer->data);
pool->on_stop(&pool->m_stopAsync);
}, 1000, 0);
return;
}
#ifndef P2POOL_UNIT_TESTS
delete pool->m_consoleCommands;
#endif
@@ -1038,6 +1064,9 @@ void p2pool::on_stop(uv_async_t* async)
uv_close(reinterpret_cast<uv_handle_t*>(&pool->m_reconnectToHostAsync), nullptr);
uv_close(reinterpret_cast<uv_handle_t*>(&pool->m_getMissingHeightsAsync), nullptr);
uv_timer_stop(&pool->m_timer);
uv_close(reinterpret_cast<uv_handle_t*>(&pool->m_timer), nullptr);
init_signals(pool, false);
DeleteLoopUserData(uv_default_loop_checked());
@@ -1121,6 +1150,8 @@ void p2pool::submit_block() const
const Params::Host& host = current_host();
const uint64_t t1 = microseconds_since_epoch();
JSONRPCRequest::call(host.m_address, host.m_rpcPort, request, host.m_rpcLogin, m_params->m_socks5Proxy, host.m_rpcSSL, host.m_rpcSSL_Fingerprint,
[height, diff, template_id, nonce, extra_nonce, merge_mining_root, is_external](const char* data, size_t size, double)
{
@@ -1166,7 +1197,7 @@ void p2pool::submit_block() const
LOGWARN(0, "submit_block: daemon sent unrecognizable reply: " << log::const_buf(data, size));
},
[is_external](const char* data, size_t size, double)
[is_external, t1](const char* data, size_t size, double)
{
if (size > 0) {
if (is_external) {
@@ -1176,6 +1207,9 @@ void p2pool::submit_block() const
LOGERR(0, "submit_block: RPC request failed, error " << log::const_buf(data, size));
}
}
else {
LOGINFO(4, "submit_block RPC completed in " << static_cast<double>(microseconds_since_epoch() - t1) / 1e3 << " ms");
}
});
}
@@ -1209,7 +1243,7 @@ void p2pool::update_block_template()
if (m_updateSeed.exchange(false)) {
m_hasher->set_seed_async(data.seed_hash);
}
m_blockTemplate->update(data, *m_mempool, &m_params->m_wallet);
m_blockTemplate->update(data, *m_mempool, m_params->m_miningWallet, m_params->m_subaddress);
stratum_on_block();
api_update_pool_stats();
@@ -1235,7 +1269,7 @@ void p2pool::download_block_headers1(uint64_t current_height)
const Params::Host& host = current_host();
s.m_pos = 0;
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_header_by_height\",\"params\":{\"height\":" << prev_seed_height << "}}\0";
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_header_by_height\",\"params\":{\"height\":" << prev_seed_height << "}}" << '\0';
JSONRPCRequest::call(host.m_address, host.m_rpcPort, buf, host.m_rpcLogin, m_params->m_socks5Proxy, host.m_rpcSSL, host.m_rpcSSL_Fingerprint,
[this, prev_seed_height, current_height](const char* data, size_t size, double) {
@@ -1268,7 +1302,7 @@ void p2pool::download_block_headers2(uint64_t current_height)
const Params::Host& host = current_host();
s.m_pos = 0;
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_header_by_height\",\"params\":{\"height\":" << seed_height << "}}\0";
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_header_by_height\",\"params\":{\"height\":" << seed_height << "}}" << '\0';
JSONRPCRequest::call(host.m_address, host.m_rpcPort, buf, host.m_rpcLogin, m_params->m_socks5Proxy, host.m_rpcSSL, host.m_rpcSSL_Fingerprint,
[this, seed_height, current_height](const char* data, size_t size, double) {
@@ -1304,10 +1338,10 @@ void p2pool::download_block_headers3(uint64_t start_height, uint64_t current_hei
const uint64_t next_height = start_height + RESTRICTED_BLOCK_HEADER_RANGE;
s.m_pos = 0;
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_headers_range\",\"params\":{\"start_height\":" << start_height << ",\"end_height\":" << next_height << "}}\0";
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_headers_range\",\"params\":{\"start_height\":" << start_height << ",\"end_height\":" << next_height << "}}" << '\0';
JSONRPCRequest::call(host.m_address, host.m_rpcPort, buf, host.m_rpcLogin, m_params->m_socks5Proxy, host.m_rpcSSL, host.m_rpcSSL_Fingerprint,
[this, start_height, next_height, host, current_height](const char* data, size_t size, double) {
[this, start_height, next_height, current_height](const char* data, size_t size, double) {
if (parse_block_headers_range(data, size) == next_height - start_height + 1) {
download_block_headers3(next_height + 1, current_height);
}
@@ -1337,7 +1371,7 @@ void p2pool::download_block_headers4(uint64_t start_height, uint64_t current_hei
const Params::Host& host = current_host();
s.m_pos = 0;
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_headers_range\",\"params\":{\"start_height\":" << start_height << ",\"end_height\":" << current_height - 1 << "}}\0";
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"get_block_headers_range\",\"params\":{\"start_height\":" << start_height << ",\"end_height\":" << current_height - 1 << "}}" << '\0';
JSONRPCRequest::call(host.m_address, host.m_rpcPort, buf, host.m_rpcLogin, m_params->m_socks5Proxy, host.m_rpcSSL, host.m_rpcSSL_Fingerprint,
[this, start_height, current_height, host](const char* data, size_t size, double)
@@ -1829,7 +1863,7 @@ uint32_t p2pool::parse_block_headers_range(const char* data, size_t size)
auto headers = it2->value.GetArray();
uint64_t min_height = std::numeric_limits<uint64_t>::max();
uint64_t max_height = 0;
for (auto i = headers.begin(); i != headers.end(); ++i) {
for (auto* i = headers.begin(); i != headers.end(); ++i) {
if (!i->IsObject()) {
continue;
}
@@ -2059,7 +2093,7 @@ void p2pool::api_update_block_found(const ChainMain* data, const PoolBlock* bloc
if (data) {
m_foundBlocks.emplace_back(cur_time, data->height, data->id, diff, total_hashes);
}
found_blocks.assign(m_foundBlocks.end() - std::min<size_t>(m_foundBlocks.size(), 51), m_foundBlocks.end());
found_blocks.assign(m_foundBlocks.end() - std::min<int>(static_cast<int>(m_foundBlocks.size()), 51), m_foundBlocks.end());
}
m_api->set(p2pool_api::Category::POOL, "blocks",
@@ -2334,8 +2368,6 @@ int p2pool::run()
m_stopped = true;
bkg_jobs_tracker->wait();
#if defined(WITH_RANDOMX) && !defined(P2POOL_UNIT_TESTS)
{
MutexLock lock(m_minerLock);
+3 -1
View File
@@ -85,7 +85,7 @@ public:
virtual void handle_tx(TxMempoolData& tx) override;
virtual void handle_miner_data(MinerData& data) override;
virtual void handle_chain_main(ChainMain& data, const char* extra) override;
virtual void handle_chain_main(ChainMain& data, const char* extra, const std::vector<hash>& tx_hashes_in_block) override;
virtual void handle_monero_block_broadcast(std::vector<std::vector<uint8_t>>&& blobs) override;
#ifdef WITH_MERGE_MINING_DONATION
@@ -291,6 +291,8 @@ private:
bool m_getMinerDataPending = false;
std::atomic<uint64_t> m_lastMinerDataReceived;
uv_timer_t m_timer;
};
} // namespace p2pool
+1 -1
View File
@@ -106,7 +106,7 @@ void p2pool_api::on_stop()
uv_close(reinterpret_cast<uv_handle_t*>(&m_dumpToFileAsync), nullptr);
}
void p2pool_api::dump_to_file_async_internal(Category category, const char* filename, Callback<void, log::Stream&>::Base&& callback)
void p2pool_api::dump_to_file_async_internal(Category category, const char* filename, const Callback<void, log::Stream&>::Base& callback)
{
std::vector<char> buf(1024);
log::Stream s(buf.data(), buf.size());
+1 -1
View File
@@ -54,7 +54,7 @@ private:
std::vector<char> buf;
};
void dump_to_file_async_internal(Category category, const char* filename, Callback<void, log::Stream&>::Base&& callback);
void dump_to_file_async_internal(Category category, const char* filename, const Callback<void, log::Stream&>::Base& callback);
void dump_to_file();
static void on_fs_open(uv_fs_t* req);
static void on_fs_write(uv_fs_t* req);
+47 -13
View File
@@ -38,7 +38,7 @@ Params::Params(int argc, char* const argv[])
const char* address = argv[++i];
if (m_hosts.empty()) {
m_hosts.emplace_back(Host());
m_hosts.emplace_back();
m_hosts.back().m_address = address;
}
else {
@@ -51,19 +51,19 @@ Params::Params(int argc, char* const argv[])
if ((strcmp(argv[i], "--rpc-port") == 0) && (i + 1 < argc)) {
if (m_hosts.empty()) {
m_hosts.emplace_back(Host());
m_hosts.emplace_back();
}
m_hosts.back().m_rpcPort = std::min(std::max(strtoul(argv[++i], nullptr, 10), 1UL), 65535UL);
m_hosts.back().m_rpcPort = static_cast<int32_t>(std::min(std::max(strtoul(argv[++i], nullptr, 10), 1UL), 65535UL));
ok = true;
}
if ((strcmp(argv[i], "--zmq-port") == 0) && (i + 1 < argc)) {
if (m_hosts.empty()) {
m_hosts.emplace_back(Host());
m_hosts.emplace_back();
}
m_hosts.back().m_zmqPort = std::min(std::max(strtoul(argv[++i], nullptr, 10), 1UL), 65535UL);
m_hosts.back().m_zmqPort = static_cast<int32_t>(std::min(std::max(strtoul(argv[++i], nullptr, 10), 1UL), 65535UL));
ok = true;
}
@@ -73,7 +73,12 @@ Params::Params(int argc, char* const argv[])
}
if ((strcmp(argv[i], "--wallet") == 0) && (i + 1 < argc)) {
m_wallet.decode(argv[++i]);
m_mainWallet.decode(argv[++i]);
ok = true;
}
if ((strcmp(argv[i], "--subaddress") == 0) && (i + 1 < argc)) {
m_subaddress.decode(argv[++i]);
ok = true;
}
@@ -98,7 +103,7 @@ Params::Params(int argc, char* const argv[])
}
if ((strcmp(argv[i], "--loglevel") == 0) && (i + 1 < argc)) {
const int level = std::min(std::max<int>(strtol(argv[++i], nullptr, 10), 0), log::MAX_GLOBAL_LOG_LEVEL);
const int level = std::min(std::max<int>(static_cast<int>(strtol(argv[++i], nullptr, 10)), 0), log::MAX_GLOBAL_LOG_LEVEL);
log::GLOBAL_LOG_LEVEL = level;
ok = true;
}
@@ -173,7 +178,7 @@ Params::Params(int argc, char* const argv[])
if ((strcmp(argv[i], "--rpc-login") == 0) && (i + 1 < argc)) {
if (m_hosts.empty()) {
m_hosts.emplace_back(Host());
m_hosts.emplace_back();
}
m_hosts.back().m_rpcLogin = argv[++i];
@@ -183,7 +188,7 @@ Params::Params(int argc, char* const argv[])
#ifdef WITH_TLS
if (strcmp(argv[i], "--rpc-ssl") == 0) {
if (m_hosts.empty()) {
m_hosts.emplace_back(Host());
m_hosts.emplace_back();
}
m_hosts.back().m_rpcSSL = true;
@@ -192,7 +197,7 @@ Params::Params(int argc, char* const argv[])
if ((strcmp(argv[i], "--rpc-ssl-fingerprint") == 0) && (i + 1 < argc)) {
if (m_hosts.empty()) {
m_hosts.emplace_back(Host());
m_hosts.emplace_back();
}
m_hosts.back().m_rpcSSL_Fingerprint = argv[++i];
@@ -212,7 +217,7 @@ Params::Params(int argc, char* const argv[])
}
if ((strcmp(argv[i], "--p2p-external-port") == 0) && (i + 1 < argc)) {
m_p2pExternalPort = std::min(std::max(strtoul(argv[++i], nullptr, 10), 1UL), 65535UL);
m_p2pExternalPort = static_cast<int32_t>(std::min(std::max(strtoul(argv[++i], nullptr, 10), 1UL), 65535UL));
ok = true;
}
@@ -285,7 +290,7 @@ Params::Params(int argc, char* const argv[])
m_hosts.erase(std::remove_if(m_hosts.begin(), m_hosts.end(), invalid_host), m_hosts.end());
if (m_hosts.empty()) {
m_hosts.emplace_back(Host());
m_hosts.emplace_back();
}
if (m_stratumAddresses.empty()) {
@@ -305,15 +310,44 @@ Params::Params(int argc, char* const argv[])
LOGWARN(1, "Value for --stratum-ban-time is too high, adjusting to " << MAX_STRATUM_BAN_TIME);
m_stratumBanTime = MAX_STRATUM_BAN_TIME;
}
char display_wallet_buf[Wallet::ADDRESS_LENGTH] = {};
if (m_mainWallet.valid() && m_subaddress.valid()) {
m_miningWallet.assign(m_subaddress.spend_public_key(), m_mainWallet.view_public_key(), m_mainWallet.type(), false);
m_subaddress.encode(display_wallet_buf);
}
else if (m_mainWallet.valid()) {
m_miningWallet = m_mainWallet;
m_mainWallet.encode(display_wallet_buf);
}
m_displayWallet.assign(display_wallet_buf, Wallet::ADDRESS_LENGTH);
}
bool Params::valid() const
{
if (!m_wallet.valid()) {
if (!m_mainWallet.valid() || !m_miningWallet.valid()) {
LOGERR(1, "Invalid wallet address. Try \"p2pool --help\".");
return false;
}
if (m_mainWallet.is_subaddress()) {
LOGERR(1, "Wallet address must be a main address (starting with 4...). Try \"p2pool --help\".");
return false;
}
if (m_subaddress.valid()) {
if (!m_subaddress.is_subaddress()) {
LOGERR(1, "Subaddress must start with 8... Try \"p2pool --help\".");
return false;
}
if (m_subaddress.type() != m_mainWallet.type()) {
LOGERR(1, "Subaddress must belong to the same network type as the main wallet address. Try \"p2pool --help\".");
return false;
}
}
if (m_mergeMiningHosts.size() > 10) {
LOGERR(1, "Too many merge mining blockchains.");
return false;
+12 -5
View File
@@ -33,7 +33,7 @@ struct Params
{
Host() : m_address("127.0.0.1"), m_rpcPort(18081), m_zmqPort(18083), m_rpcSSL(false) {}
Host(const char* address, uint32_t rpcPort, uint32_t zmqPort, const char* rpcLogin)
Host(const char* address, int32_t rpcPort, int32_t zmqPort, const char* rpcLogin)
: m_address(address)
, m_rpcPort(rpcPort)
, m_zmqPort(zmqPort)
@@ -46,8 +46,8 @@ struct Params
bool init_display_name(const Params& p);
std::string m_address;
uint32_t m_rpcPort;
uint32_t m_zmqPort;
int32_t m_rpcPort;
int32_t m_zmqPort;
std::string m_rpcLogin;
@@ -70,7 +70,14 @@ struct Params
std::vector<MergeMiningHost> m_mergeMiningHosts;
bool m_lightMode = false;
Wallet m_wallet{ nullptr };
Wallet m_mainWallet{ nullptr };
Wallet m_subaddress{ nullptr };
Wallet m_miningWallet{ nullptr };
std::string m_displayWallet;
std::string m_stratumAddresses;
std::string m_p2pAddresses;
std::string m_p2pPeerList;
@@ -92,7 +99,7 @@ struct Params
bool m_autoDiff = true;
std::string m_socks5Proxy;
bool m_dns = true;
uint32_t m_p2pExternalPort = 0;
int32_t m_p2pExternalPort = 0;
#ifdef WITH_UPNP
bool m_upnp = true;
bool m_upnpStratum = false;
+8 -1
View File
@@ -143,8 +143,15 @@ struct PoolBlock
uint32_t m_merkleProofPath;
// Merge mining extra data
//
// Format: vector of (chain ID, chain data) pairs
// Chain data always has merge mining hash and difficulty in the beginning, the rest is arbitrary and depends on the merge mined chain's requirements
//
// Chain data always has merge mining hash and difficulty (two varints for low and high 64 bits) in the beginning, the rest is arbitrary and depends on the merge mined chain's requirements
//
// Some chain IDs are used for other purposes:
//
// - keccak("subaddress_viewpub") stores the public viewkey part of the subaddress, if it's used for mining ("merge mining hash" = viewkey, "difficulty" = 0,0)
//
std::map<hash, std::vector<uint8_t>> m_mergeMiningExtra;
// Arbitrary extra data
+1 -1
View File
@@ -284,7 +284,7 @@ int PoolBlock::deserialize(const uint8_t* data, size_t size, const SideChain& si
hash view_pub_key;
READ_BUF(spend_pub_key.h, HASH_SIZE);
READ_BUF(view_pub_key.h, HASH_SIZE);
if (!m_minerWallet.assign(spend_pub_key, view_pub_key, sidechain.network_type())) {
if (!m_minerWallet.assign(spend_pub_key, view_pub_key, sidechain.network_type(), false)) {
return __LINE__;
}
+2 -2
View File
@@ -71,7 +71,7 @@ RandomX_Hasher::RandomX_Hasher(p2pool* pool)
PANIC_STOP();
}
}
memory_allocated += RANDOMX_ARGON_MEMORY * 1024;
memory_allocated += static_cast<uint64_t>(RANDOMX_ARGON_MEMORY * 1024);
}
uv_rwlock_init_checked(&m_datasetLock);
@@ -456,7 +456,7 @@ bool RandomX_Hasher_RPC::calculate(const void* data_ptr, size_t size, uint64_t h
s << "{\"jsonrpc\":\"2.0\",\"id\":\"0\",\"method\":\"calc_pow\",\"params\":{\"major_version\":" << major_version <<
",\"height\":" << height <<
",\"block_blob\":\"" << log::hex_buf(data, size) << '"' <<
",\"seed_hash\":\"\"}}\0";
",\"seed_hash\":\"\"}}" << '\0';
std::atomic<int> result{ 0 };
std::atomic<bool> done{ false };
+14 -16
View File
@@ -161,7 +161,7 @@ SideChain::SideChain(p2pool* pool, NetworkType type, const char* pool_name)
rx_vec_i128* scratchpad_ptr = scratchpad;
rx_vec_i128* cache_ptr = scratchpad_end;
for (uint64_t i = scratchpad_size, n = RANDOMX_ARGON_MEMORY * 1024 / sizeof(rx_vec_i128); i < n; ++i) {
for (uint64_t i = scratchpad_size, n = static_cast<uint64_t>(RANDOMX_ARGON_MEMORY * 1024) / sizeof(rx_vec_i128); i < n; ++i) {
*scratchpad_ptr = rx_xor_vec_i128(*scratchpad_ptr, *cache_ptr);
++cache_ptr;
++scratchpad_ptr;
@@ -523,7 +523,7 @@ void SideChain::cleanup_incoming_blocks()
// Forget seen blocks that were added more than 10 minutes ago
for (auto i = m_incomingBlocks.begin(); i != m_incomingBlocks.end();) {
if (cur_time < i->second + 10 * 60) {
if (cur_time < i->second + 10ul * 60ul) {
++i;
}
else {
@@ -662,7 +662,7 @@ bool SideChain::add_external_block(PoolBlock& block, std::vector<hash>& missing_
WriteLock lock(m_watchBlockLock);
if (block.m_merkleRoot == m_watchBlockMerkleRoot) {
const Wallet& w = m_pool->params().m_wallet;
const Wallet& w = m_pool->params().m_miningWallet;
const char* who = (block.m_minerWallet == w) ? "you" : "someone else in this p2pool";
LOGINFO(0, log::LightGreen() << "BLOCK FOUND: main chain block at height " << m_watchBlock.height << " was mined by " << who << BLOCK_FOUND);
@@ -673,10 +673,10 @@ bool SideChain::add_external_block(PoolBlock& block, std::vector<hash>& missing_
const uint64_t payout = block.get_payout(w);
if (payout) {
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightGreen() << w << log::LightCyan() << " got a payout of " << log::LightGreen() << log::XMRAmount(payout) << log::LightCyan() << " in block " << log::LightGreen() << data.height);
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightGreen() << m_pool->params().m_displayWallet << log::LightCyan() << " got a payout of " << log::LightGreen() << log::XMRAmount(payout) << log::LightCyan() << " in block " << log::LightGreen() << data.height);
}
else {
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightYellow() << w << log::LightCyan() << " didn't get a payout in block " << log::LightYellow() << data.height << log::LightCyan() << " because you had no shares in PPLNS window");
LOGINFO(0, log::LightCyan() << "Your wallet " << log::LightYellow() << m_pool->params().m_displayWallet << log::LightCyan() << " didn't get a payout in block " << log::LightYellow() << data.height << log::LightCyan() << " because you had no shares in PPLNS window");
}
}
}
@@ -971,7 +971,7 @@ void SideChain::print_status(bool obtain_sidechain_lock) const
std::array<uint64_t, N> our_blocks_in_window{};
std::array<uint64_t, N> our_uncles_in_window{};
const Wallet& w = m_pool->params().m_wallet;
const Wallet& w = m_pool->params().m_miningWallet;
while (cur) {
blocks_in_window.emplace(cur->m_sidechainId);
@@ -1079,7 +1079,7 @@ void SideChain::print_status(bool obtain_sidechain_lock) const
(hashrate_est ? "\nYour hashrate (pool-side) = " : "") << (hashrate_est ? log::Hashrate(hashrate_est) : log::Hashrate()) <<
"\nPPLNS window = " << total_blocks_in_window << " blocks (+" << total_uncles_in_window << " uncles, " << total_orphans << " orphans)" <<
"\nPPLNS window duration = " << log::Duration((pplns_weight / pool_hashrate).lo) <<
"\nYour wallet address = " << w <<
"\nYour wallet address = " << m_pool->params().m_displayWallet <<
"\nYour shares = " << our_blocks_in_window_total << " blocks (+" << our_uncles_in_window_total << " uncles, " << our_orphans << " orphans)"
<< our_blocks_in_window_chart << our_uncles_in_window_chart <<
"\nBlock reward share = " << block_share << "% (" << log::XMRAmount(your_reward) << ')'
@@ -1165,9 +1165,9 @@ uint64_t SideChain::miner_count()
MutexLock lock(m_seenWalletsLock);
// Every 5 minutes, delete wallets that weren't seen for more than 72 hours
if (m_seenWalletsLastPruneTime + 5 * 60 <= cur_time) {
if (m_seenWalletsLastPruneTime + 5ul * 60ul <= cur_time) {
for (auto it = m_seenWallets.begin(); it != m_seenWallets.end();) {
if (it->second + 72 * 60 * 60 < cur_time) {
if (it->second + 72ul * 60ul * 60ul < cur_time) {
it = m_seenWallets.erase(it);
}
else {
@@ -1314,10 +1314,10 @@ bool SideChain::get_difficulty(const PoolBlock* tip, std::vector<DifficultyData>
const uint64_t index1 = cut_size - 1;
const uint64_t index2 = difficultyData.size() - cut_size;
std::nth_element(tmpTimestamps.begin(), tmpTimestamps.begin() + index1, tmpTimestamps.end());
std::nth_element(tmpTimestamps.begin(), tmpTimestamps.begin() + static_cast<int32_t>(index1), tmpTimestamps.end());
const uint64_t timestamp1 = oldest_timestamp + tmpTimestamps[index1];
std::nth_element(tmpTimestamps.begin(), tmpTimestamps.begin() + index2, tmpTimestamps.end());
std::nth_element(tmpTimestamps.begin(), tmpTimestamps.begin() + static_cast<int32_t>(index2), tmpTimestamps.end());
const uint64_t timestamp2 = oldest_timestamp + tmpTimestamps[index2];
// Make a reasonable assumption that each block has higher timestamp, so delta_t can't be less than delta_index
@@ -1425,7 +1425,7 @@ void SideChain::verify_loop(PoolBlock* block)
if (block->m_wantBroadcast && !block->m_broadcasted) {
block->m_broadcasted = true;
if (server && (block->m_depth < UNCLE_BLOCK_DEPTH)) {
if (m_pool && (block->m_minerWallet == m_pool->params().m_wallet)) {
if (m_pool && (block->m_minerWallet == m_pool->params().m_miningWallet)) {
LOGINFO(0, log::Green() << "SHARE ADDED: height = " << block->m_sidechainHeight << ", id = " << block->m_sidechainId << ", mainchain height = " << block->m_txinGenHeight);
}
server->broadcast(*block, get_parent(block));
@@ -2047,9 +2047,7 @@ void SideChain::update_depths(PoolBlock* block)
LOGWARN(3, "Block " << block->m_sidechainId << ": m_sidechainHeight is inconsistent with child's m_sidechainHeight.");
return;
}
else {
update_depth(block, child->m_depth + 1);
}
update_depth(block, child->m_depth + 1);
}
if (std::find(child->m_uncles.begin(), child->m_uncles.end(), block->m_sidechainId) != child->m_uncles.end()) {
@@ -2090,7 +2088,7 @@ void SideChain::update_depths(PoolBlock* block)
LOGWARN(3, "Block " << block->m_sidechainId << ": m_sidechainHeight is inconsistent with child's m_sidechainHeight.");
return;
}
else if (block->m_depth > 0) {
if (block->m_depth > 0) {
update_depth(child, block->m_depth - 1);
}
}
+9 -13
View File
@@ -362,7 +362,7 @@ bool StratumServer::on_submit(StratumClient* client, uint32_t id, const char* jo
for (int i = static_cast<int>(sizeof(uint32_t)) - 1; i >= 0; --i) {
uint32_t d[2];
if (!from_hex(nonce_str[i * 2], d[0]) || !from_hex(nonce_str[i * 2 + 1], d[1])) {
if (!from_hex(nonce_str[i * 2 + 0], d[0]) || !from_hex(nonce_str[i * 2 + 1], d[1])) {
LOGWARN(4, "client " << static_cast<char*>(client->m_addrString) << " invalid params ('nonce' is not a hex integer)");
return false;
}
@@ -373,7 +373,7 @@ bool StratumServer::on_submit(StratumClient* client, uint32_t id, const char* jo
for (size_t i = 0; i < HASH_SIZE; ++i) {
uint32_t d[2];
if (!from_hex(result_str[i * 2], d[0]) || !from_hex(result_str[i * 2 + 1], d[1])) {
if (!from_hex(result_str[i * 2 + 0], d[0]) || !from_hex(result_str[i * 2 + 1], d[1])) {
LOGWARN(4, "client " << static_cast<char*>(client->m_addrString) << " invalid params ('result' is not a hex value)");
return false;
}
@@ -684,8 +684,6 @@ void StratumServer::print_stratum_status() const
}
// Compresses 64-bit hashes value into 16-bit value (5 bits for shift, 11 bits for data)
namespace {
enum HashValue : uint64_t {
bits = 11,
mask = (1 << bits) - 1,
@@ -714,8 +712,6 @@ static FORCEINLINE uint16_t hash_compress(uint64_t h)
return static_cast<uint16_t>((shift << HashValue::bits) | (h >> shift));
}
}
void StratumServer::update_auto_diff(StratumClient* client, const uint64_t timestamp, const uint64_t hashes)
{
const uint16_t hashes_compressed = hash_compress(hashes);
@@ -928,15 +924,15 @@ void StratumServer::update_hashrate_data(uint64_t hashes, uint64_t timestamp)
data[m_hashrateDataHead] = { timestamp, m_cumulativeHashes };
}
while (data[m_hashrateDataTail_15m].m_timestamp + 15 * 60 < timestamp) {
while (data[m_hashrateDataTail_15m].m_timestamp + 15ul * 60ul < timestamp) {
m_hashrateDataTail_15m = (m_hashrateDataTail_15m + 1) % N;
}
while (data[m_hashrateDataTail_1h].m_timestamp + 60 * 60 < timestamp) {
while (data[m_hashrateDataTail_1h].m_timestamp + 60ul * 60ul < timestamp) {
m_hashrateDataTail_1h = (m_hashrateDataTail_1h + 1) % N;
}
while (data[m_hashrateDataTail_24h].m_timestamp + 60 * 60 * 24 < timestamp) {
while (data[m_hashrateDataTail_24h].m_timestamp + 60ul * 60ul * 24ul < timestamp) {
m_hashrateDataTail_24h = (m_hashrateDataTail_24h + 1) % N;
}
}
@@ -1348,11 +1344,11 @@ bool StratumServer::StratumClient::process_request(char* data, uint32_t size)
LOGINFO(6, "incoming login from " << log::Gray() << static_cast<char*>(m_addrString));
return process_login(doc, id.GetUint());
}
else if (strcmp(s, "submit") == 0) {
if (strcmp(s, "submit") == 0) {
LOGINFO(6, "incoming share from " << log::Gray() << static_cast<char*>(m_addrString));
return process_submit(doc, id.GetUint());
}
else if (strcmp(s, "keepalived") == 0) {
if (strcmp(s, "keepalived") == 0) {
LOGINFO(6, "incoming keepalive from " << log::Gray() << static_cast<char*>(m_addrString));
return true;
}
@@ -1555,7 +1551,7 @@ void StratumServer::api_update_local_stats(uint64_t timestamp)
uint32_t connections = m_numConnections;
uint32_t incoming_connections = m_numIncomingConnections;
const double block_reward_share_percent = m_pool->side_chain().get_reward_share(m_pool->params().m_wallet) * 100.0;
const double block_reward_share_percent = m_pool->side_chain().get_reward_share(m_pool->params().m_miningWallet) * 100.0;
CallOnLoop(&m_loop, [=]() {
m_pool->api()->set(p2pool_api::Category::LOCAL, "stratum", [=](log::Stream& s) {
@@ -1572,7 +1568,7 @@ void StratumServer::api_update_local_stats(uint64_t timestamp)
<< ",\"connections\":" << connections
<< ",\"incoming_connections\":" << incoming_connections
<< ",\"block_reward_share_percent\":" << block_reward_share_percent
<< ",\"wallet\":\"" << m_pool->params().m_wallet << '"'
<< ",\"wallet\":\"" << m_pool->params().m_displayWallet << '"'
<< ",\"workers\":[";
const difficulty_type pool_diff = m_pool->side_chain().difficulty();
+5 -6
View File
@@ -97,7 +97,7 @@ TCPServer::~TCPServer()
delete m_connectedClientsList;
}
void TCPServer::parse_address_list_internal(const std::string& address_list, Callback<void, bool, const std::string&, const std::string&, int>::Base&& callback)
void TCPServer::parse_address_list_internal(const std::string& address_list, const Callback<void, bool, const std::string&, const std::string&, int>::Base& callback)
{
if (address_list.empty()) {
return;
@@ -128,7 +128,7 @@ void TCPServer::parse_address_list_internal(const std::string& address_list, Cal
const uint32_t port = std::stoul(address.substr(k2 + 1), nullptr, 10);
if ((port > 0) && (port < 65536)) {
callback(is_v6, address, ip, port);
callback(is_v6, address, ip, static_cast<int>(port));
}
else {
error_invalid_ip(address);
@@ -420,10 +420,8 @@ bool TCPServer::connect_to_peer(Client* client)
uv_close(reinterpret_cast<uv_handle_t*>(&client->m_socket), on_connection_error);
return false;
}
else {
LOGINFO(5, "connecting to " << log::Gray() << static_cast<const char*>(client->m_addrString));
}
LOGINFO(5, "connecting to " << log::Gray() << static_cast<const char*>(client->m_addrString));
return true;
}
@@ -538,7 +536,7 @@ void TCPServer::print_bans()
}
}
bool TCPServer::send_internal(Client* client, Callback<size_t, uint8_t*, size_t>::Base&& callback, bool raw)
bool TCPServer::send_internal(Client* client, const Callback<size_t, uint8_t*, size_t>::Base& callback, bool raw)
{
check_event_loop_thread(__func__);
@@ -627,6 +625,7 @@ void TCPServer::loop(void* data)
if (n < sizeof(buf)) {
// Set the thread name as is
memcpy(buf, log_category_prefix, n);
buf[n] = '\0';
}
else {
// Thread name is too long, use the "first 7 characters - last 7 characters" format
+2 -2
View File
@@ -152,7 +152,7 @@ private:
void on_new_client(uv_stream_t* server);
void on_new_client(uv_stream_t* server, Client* client);
[[nodiscard]] bool send_internal(Client* client, Callback<size_t, uint8_t*, size_t>::Base&& callback, bool raw);
[[nodiscard]] bool send_internal(Client* client, const Callback<size_t, uint8_t*, size_t>::Base& callback, bool raw);
allocate_client_callback m_allocateNewClient;
@@ -173,7 +173,7 @@ protected:
static void loop(void* data);
static void parse_address_list_internal(const std::string& address_list, Callback<void, bool, const std::string&, const std::string&, int>::Base&& callback);
static void parse_address_list_internal(const std::string& address_list, const Callback<void, bool, const std::string&, const std::string&, int>::Base& callback);
void start_listening(const std::string& listen_addresses, bool upnp);
bool start_listening(bool is_v6, const std::string& ip, int port, std::string address = std::string());
+15 -6
View File
@@ -49,7 +49,7 @@ static bssl::UniquePtr<EVP_PKEY> init_evp_pkey()
return evp_pkey;
}
static bssl::UniquePtr<EVP_PKEY> s_evp_pkey = init_evp_pkey();
static bssl::UniquePtr<EVP_PKEY> s_evp_pkey;
static bssl::UniquePtr<X509> init_cert()
{
@@ -115,7 +115,7 @@ static bssl::UniquePtr<X509> init_cert()
return x509;
}
static bssl::UniquePtr<X509> s_cert = init_cert();
static bssl::UniquePtr<X509> s_cert;
static bssl::UniquePtr<SSL_CTX> init_ctx()
{
@@ -140,7 +140,15 @@ static bssl::UniquePtr<SSL_CTX> init_ctx()
return ctx;
}
static bssl::UniquePtr<SSL_CTX> s_ctx = init_ctx();
static bssl::UniquePtr<SSL_CTX> s_ctx;
bool ServerTls::global_init()
{
s_evp_pkey = init_evp_pkey();
s_cert = init_cert();
s_ctx = init_ctx();
return s_evp_pkey && s_cert && s_ctx;
}
bool ServerTls::load_from_files(const char* cert, const char* cert_key)
{
@@ -217,7 +225,7 @@ bool ServerTls::init()
return true;
}
bool ServerTls::on_read_internal(const char* data, uint32_t size, ReadCallback::Base&& read_callback, WriteCallback::Base&& write_callback)
bool ServerTls::on_read_internal(const char* data, uint32_t size, const ReadCallback::Base& read_callback, const WriteCallback::Base& write_callback)
{
SSL* ssl = m_ssl.get();
if (!ssl) {
@@ -262,7 +270,8 @@ bool ServerTls::on_read_internal(const char* data, uint32_t size, ReadCallback::
// Continue handshake, nothing to read yet
return true;
}
else if (result == 1) {
if (result == 1) {
// Handshake finished, skip to "SSL_read" further down
}
else {
@@ -283,7 +292,7 @@ bool ServerTls::on_read_internal(const char* data, uint32_t size, ReadCallback::
return true;
}
bool ServerTls::on_write_internal(const uint8_t* data, size_t size, WriteCallback::Base&& write_callback)
bool ServerTls::on_write_internal(const uint8_t* data, size_t size, const WriteCallback::Base& write_callback)
{
SSL* ssl = m_ssl.get();
if (!ssl) {
+3 -2
View File
@@ -37,6 +37,7 @@ class ServerTls
public:
FORCEINLINE ServerTls() { reset(); }
[[nodiscard]] static bool global_init();
[[nodiscard]] static bool load_from_files(const char* cert, const char* cert_key);
void reset();
@@ -60,8 +61,8 @@ private:
typedef Callback<bool, char*, uint32_t> ReadCallback;
typedef Callback<bool, const uint8_t*, size_t> WriteCallback;
[[nodiscard]] bool on_read_internal(const char* data, uint32_t size, ReadCallback::Base&& read_callback, WriteCallback::Base&& write_callback);
[[nodiscard]] bool on_write_internal(const uint8_t* data, size_t size, WriteCallback::Base&& write_callback);
[[nodiscard]] bool on_read_internal(const char* data, uint32_t size, const ReadCallback::Base& read_callback, const WriteCallback::Base& write_callback);
[[nodiscard]] bool on_write_internal(const uint8_t* data, size_t size, const WriteCallback::Base& write_callback);
private:
bssl::UniquePtr<SSL> m_ssl;
+20 -25
View File
@@ -74,6 +74,9 @@ const char* VERSION = "v" STR2(P2POOL_VERSION_MAJOR) "." STR2(P2POOL_VERSION_MIN
#elif defined(_MSC_VER)
" with MSVC/" STR2(_MSC_VER)
#endif
#ifdef GIT_COMMIT
" from " GIT_COMMIT
#endif
" on " __DATE__ ")";
std::string p2pool_version()
@@ -441,26 +444,19 @@ struct BackgroundJobTracker::Impl
}
}
void wait()
std::vector<std::pair<const char*, int32_t>> get_jobs()
{
uint64_t last_msg_time = 0;
do {
{
MutexLock lock(m_lock);
// cppcheck-suppress knownConditionTrueFalse
if (m_jobs.empty()) {
return;
}
const uint64_t t = seconds_since_epoch();
if (t != last_msg_time) {
last_msg_time = t;
for (const auto& job : m_jobs) {
LOGINFO(1, "waiting for " << job.second << " \"" << job.first << "\" jobs to finish");
}
}
std::vector<std::pair<const char*, int32_t>> result;
{
MutexLock lock(m_lock);
result.reserve(m_jobs.size());
for (const auto& job : m_jobs) {
result.emplace_back(job.first, job.second);
}
std::this_thread::sleep_for(std::chrono::milliseconds(1));
} while (1);
}
return result;
}
void print_status()
@@ -507,9 +503,9 @@ void BackgroundJobTracker::stop_internal(const char* name)
m_impl->stop(name);
}
void BackgroundJobTracker::wait()
std::vector<std::pair<const char*, int32_t>> BackgroundJobTracker::get_jobs()
{
m_impl->wait();
return m_impl->get_jobs();
}
void BackgroundJobTracker::print_status()
@@ -573,7 +569,7 @@ bool resolve_host(std::string& host, bool& is_v6)
return true;
}
bool get_dns_txt_records_base(const std::string& host, Callback<void, const char*, size_t>::Base&& callback)
bool get_dns_txt_records_base(const std::string& host, const Callback<void, const char*, size_t>::Base& callback)
{
if (disable_resolve_host) {
LOGERR(1, "get_dns_txt_records was called with DNS disabled for host " << host);
@@ -853,10 +849,9 @@ int add_portmapping(int external_port, int internal_port)
LOGWARN(1, "UPNP_DeletePortMapping returned error " << result);
return 0;
}
else {
LOGINFO(1, "UPnP: Deleted mapping for external port " << external_port);
result = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, eport, iport, local_addr, "P2Pool", "TCP", nullptr, nullptr);
}
LOGINFO(1, "UPnP: Deleted mapping for external port " << external_port);
result = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, eport, iport, local_addr, "P2Pool", "TCP", nullptr, nullptr);
}
if (result) {
+7 -7
View File
@@ -35,8 +35,8 @@
namespace p2pool {
#define P2POOL_VERSION_MAJOR 4
#define P2POOL_VERSION_MINOR 10
#define P2POOL_VERSION_PATCH 1
#define P2POOL_VERSION_MINOR 11
#define P2POOL_VERSION_PATCH 0
constexpr uint32_t P2POOL_VERSION = (P2POOL_VERSION_MAJOR << 16) | (P2POOL_VERSION_MINOR << 8) | P2POOL_VERSION_PATCH;
@@ -91,7 +91,7 @@ struct MinerCallbackHandler
virtual void handle_tx(TxMempoolData& tx) = 0;
virtual void handle_miner_data(MinerData& data) = 0;
virtual void handle_chain_main(ChainMain& data, const char* extra) = 0;
virtual void handle_chain_main(ChainMain& data, const char* extra, const std::vector<hash>& tx_hashes_in_block) = 0;
virtual void handle_monero_block_broadcast(std::vector<std::vector<uint8_t>>&& blobs) = 0;
};
@@ -243,7 +243,7 @@ public:
template<size_t N> FORCEINLINE void start(const char (&name)[N]) { start_internal(name); }
template<size_t N> FORCEINLINE void stop (const char (&name)[N]) { stop_internal (name); }
void wait();
std::vector<std::pair<const char*, int32_t>> get_jobs();
void print_status();
private:
@@ -357,14 +357,14 @@ struct Callback
struct Base
{
virtual ~Base() {}
virtual R operator()(Args...) = 0;
virtual R operator()(Args...) const = 0;
};
template<typename T>
struct Derived : public Base
{
explicit FORCEINLINE Derived(T&& cb) : m_cb(std::move(cb)) {}
R operator()(Args... args) override { return m_cb(args...); }
R operator()(Args... args) const override { return m_cb(args...); }
private:
Derived& operator=(Derived&&) = delete;
@@ -372,7 +372,7 @@ struct Callback
};
};
bool get_dns_txt_records_base(const std::string& host, Callback<void, const char*, size_t>::Base&& callback);
bool get_dns_txt_records_base(const std::string& host, const Callback<void, const char*, size_t>::Base& callback);
template<typename T>
FORCEINLINE bool get_dns_txt_records(const std::string& host, T&& callback) { return get_dns_txt_records_base(host, Callback<void, const char*, size_t>::Derived<T>(std::move(callback))); }
+19 -11
View File
@@ -33,6 +33,8 @@ namespace {
// Values taken from cryptonote_config.h (CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX)
constexpr uint64_t valid_prefixes[] = { 18, 53, 24 };
constexpr uint64_t valid_prefixes_subaddress[] = { 42, 63, 36 };
constexpr std::array<int, 9> block_sizes{ 0, 2, 3, 5, 6, 7, 9, 10, 11 };
constexpr int num_full_blocks = p2pool::Wallet::ADDRESS_LENGTH / block_sizes.back();
constexpr int last_block_size = p2pool::Wallet::ADDRESS_LENGTH % block_sizes.back();
@@ -59,8 +61,8 @@ struct ReverseAlphabet
result.num_symbols = 0;
for (size_t i = 0; i < alphabet_size; ++i) {
if (result.data[static_cast<int>(alphabet[i])] < 0) {
result.data[static_cast<int>(alphabet[i])] = static_cast<int8_t>(i);
if (result.data[static_cast<uint8_t>(alphabet[i])] < 0) {
result.data[static_cast<uint8_t>(alphabet[i])] = static_cast<int8_t>(i);
++result.num_symbols;
}
}
@@ -73,11 +75,11 @@ constexpr ReverseAlphabet rev_alphabet = ReverseAlphabet::init();
static_assert(rev_alphabet.num_symbols == 58, "Check alphabet");
}
} // namespace
namespace p2pool {
Wallet::Wallet(const char* address) : m_prefix(0), m_checksum(0), m_type(NetworkType::Invalid)
Wallet::Wallet(const char* address) : m_prefix(0), m_checksum(0), m_type(NetworkType::Invalid), m_subaddress(false)
{
decode(address);
}
@@ -98,6 +100,7 @@ Wallet& Wallet::operator=(const Wallet& w)
m_viewPublicKey = w.m_viewPublicKey;
m_checksum = w.m_checksum;
m_type = w.m_type;
m_subaddress = w.m_subaddress;
return *this;
}
@@ -122,7 +125,7 @@ bool Wallet::decode(const char* address)
uint64_t order = 1;
for (int j = ((i < num_full_blocks) ? block_sizes.back() : last_block_size) - 1; j >= 0; --j) {
const int digit = rev_alphabet.data[static_cast<int>(address[j])];
const int8_t digit = rev_alphabet.data[static_cast<uint8_t>(address[j])];
if (digit < 0) {
return false;
}
@@ -139,7 +142,7 @@ bool Wallet::decode(const char* address)
address += block_sizes.back();
for (int j = ((i < num_full_blocks) ? sizeof(num) : last_block_size_index) - 1; j >= 0; --j) {
for (int j = static_cast<int>((i < num_full_blocks) ? sizeof(num) : last_block_size_index) - 1; j >= 0; --j) {
data[data_index++] = static_cast<uint8_t>(num >> (j * 8));
}
}
@@ -152,6 +155,10 @@ bool Wallet::decode(const char* address)
case valid_prefixes[1]: m_type = NetworkType::Testnet; break;
case valid_prefixes[2]: m_type = NetworkType::Stagenet; break;
case valid_prefixes_subaddress[0]: m_type = NetworkType::Mainnet; m_subaddress = true; break;
case valid_prefixes_subaddress[1]: m_type = NetworkType::Testnet; m_subaddress = true; break;
case valid_prefixes_subaddress[2]: m_type = NetworkType::Stagenet; m_subaddress = true; break;
default:
return false;
}
@@ -175,7 +182,7 @@ bool Wallet::decode(const char* address)
return valid();
}
bool Wallet::assign(const hash& spend_pub_key, const hash& view_pub_key, NetworkType type)
bool Wallet::assign(const hash& spend_pub_key, const hash& view_pub_key, NetworkType type, bool subaddress)
{
ge_p3 point;
if ((ge_frombytes_vartime(&point, spend_pub_key.h) != 0) || (ge_frombytes_vartime(&point, view_pub_key.h) != 0)) {
@@ -184,9 +191,9 @@ bool Wallet::assign(const hash& spend_pub_key, const hash& view_pub_key, Network
switch (type)
{
case NetworkType::Mainnet: m_prefix = valid_prefixes[0]; break;
case NetworkType::Testnet: m_prefix = valid_prefixes[1]; break;
case NetworkType::Stagenet: m_prefix = valid_prefixes[2]; break;
case NetworkType::Mainnet: m_prefix = subaddress ? valid_prefixes_subaddress[0] : valid_prefixes[0]; break;
case NetworkType::Testnet: m_prefix = subaddress ? valid_prefixes_subaddress[1] : valid_prefixes[1]; break;
case NetworkType::Stagenet: m_prefix = subaddress ? valid_prefixes_subaddress[2] : valid_prefixes[2]; break;
default: m_prefix = 0; break;
}
@@ -204,6 +211,7 @@ bool Wallet::assign(const hash& spend_pub_key, const hash& view_pub_key, Network
memcpy(&m_checksum, md, sizeof(m_checksum));
m_type = type;
m_subaddress = subaddress;
return true;
}
@@ -223,7 +231,7 @@ void Wallet::encode(char (&buf)[ADDRESS_LENGTH]) const
n = (n << 8) | data[i * sizeof(uint64_t) + j];
}
for (int j = ((i < num_full_blocks) ? block_sizes.back() : last_block_size) - 1; j >= 0; --j) {
const int digit = n % alphabet_size;
const int digit = static_cast<int>(n % alphabet_size);
n /= alphabet_size;
buf[i * block_sizes.back() + j] = alphabet[digit];
}
+3 -1
View File
@@ -37,7 +37,7 @@ public:
FORCEINLINE bool valid() const { return m_type != NetworkType::Invalid; }
bool decode(const char* address);
bool assign(const hash& spend_pub_key, const hash& view_pub_key, NetworkType type);
bool assign(const hash& spend_pub_key, const hash& view_pub_key, NetworkType type, bool subaddress);
void encode(char (&buf)[ADDRESS_LENGTH]) const;
@@ -58,6 +58,7 @@ public:
FORCEINLINE const hash& view_public_key() const { return m_viewPublicKey; }
FORCEINLINE uint32_t checksum() const { return m_checksum; }
FORCEINLINE NetworkType type() const { return m_type; }
FORCEINLINE bool is_subaddress() const { return m_subaddress; }
private:
uint64_t m_prefix;
@@ -65,6 +66,7 @@ private:
hash m_viewPublicKey;
uint32_t m_checksum;
NetworkType m_type;
bool m_subaddress;
};
} // namespace p2pool
+11 -6
View File
@@ -253,8 +253,10 @@ bool ZMQReader::connect(const std::string& address, bool keep_monitor)
return true;
}
static std::vector<uint8_t> construct_monero_block_blob(rapidjson::Value* value)
static std::vector<uint8_t> construct_monero_block_blob(rapidjson::Value* value, std::vector<hash>& out_transaction_hashes)
{
out_transaction_hashes.clear();
std::vector<uint8_t> empty_blob;
#define X(type, name) type name; if (!parseValue(*value, #name, name)) return empty_blob;
@@ -345,7 +347,7 @@ static std::vector<uint8_t> construct_monero_block_blob(rapidjson::Value* value)
writeVarint(arr.Size(), blob);
for (auto i = arr.begin(); i != arr.end(); ++i) {
for (auto* i = arr.begin(); i != arr.end(); ++i) {
auto amount = i->FindMember("amount");
if ((amount == i->MemberEnd()) || !amount->value.IsUint64()) {
LOGWARN(3, "construct_monero_block_blob: amount not found or is not UInt64");
@@ -405,8 +407,9 @@ static std::vector<uint8_t> construct_monero_block_blob(rapidjson::Value* value)
auto arr2 = tx_hashes->value.GetArray();
writeVarint(arr2.Size(), blob);
out_transaction_hashes.reserve(arr2.Size());
for (auto i = arr2.begin(); i != arr2.end(); ++i) {
for (auto* i = arr2.begin(); i != arr2.end(); ++i) {
if (!i->IsString()) {
LOGWARN(3, "construct_monero_block_blob: tx_hash is not a string");
return empty_blob;
@@ -416,6 +419,7 @@ static std::vector<uint8_t> construct_monero_block_blob(rapidjson::Value* value)
return empty_blob;
}
blob.insert(blob.end(), h.h, h.h + HASH_SIZE);
out_transaction_hashes.emplace_back(h);
}
const uint8_t* p = reinterpret_cast<const uint8_t*>(&data);
@@ -524,8 +528,9 @@ void ZMQReader::parse(char* data, size_t size)
std::vector<std::vector<uint8_t>> blobs;
blobs.reserve(arr.Size());
for (auto i = arr.begin(); i != arr.end(); ++i) {
blobs.emplace_back(construct_monero_block_blob(i));
for (auto* i = arr.begin(); i != arr.end(); ++i) {
std::vector<hash> tx_hashes;
blobs.emplace_back(construct_monero_block_blob(i, tx_hashes));
if (!PARSE(*i, m_chainmainData, timestamp)) {
LOGWARN(1, "json-full-chain_main timestamp failed to parse, skipping it");
@@ -586,7 +591,7 @@ void ZMQReader::parse(char* data, size_t size)
continue;
}
m_handler->handle_chain_main(m_chainmainData, extra_it->value.GetString());
m_handler->handle_chain_main(m_chainmainData, extra_it->value.GetString(), tx_hashes);
}
m_handler->handle_monero_block_broadcast(std::move(blobs));
+28 -9
View File
@@ -53,9 +53,10 @@ TEST(block_template, update)
Mempool mempool;
Wallet wallet("44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg");
Wallet subaddress{ nullptr };
// Test 1: empty template
tpl.update(data, mempool, &wallet);
tpl.update(data, mempool, wallet, subaddress);
ASSERT_EQ(tpl.get_reward(), 600000000000ULL);
const PoolBlock* b = tpl.pool_block_template();
@@ -81,16 +82,33 @@ TEST(block_template, update)
ASSERT_EQ(blobs_hash, H("da11e1ee86779a559df63a55e0b238ce5a67b977e0f68a0b347a39d37096a4bc"));
// Test 2: mempool with high fee and low fee transactions, it must choose high fee transactions
for (uint64_t i = 0; i < 512; ++i) {
for (uint64_t i = 0; i < 513; ++i) {
TxMempoolData tx;
*reinterpret_cast<uint64_t*>(tx.id.h) = i;
tx.fee = (i < 256) ? 30000000 : 60000000;
tx.weight = 1500;
mempool.add(tx);
}
ASSERT_EQ(mempool.size(), 513);
// Test transaction removing from mempool
{
std::vector<hash> tx_hashes;
// Empty list, should do nothing
mempool.remove(tx_hashes);
ASSERT_EQ(mempool.size(), 513);
hash h;
*reinterpret_cast<uint64_t*>(h.h) = 512;
tx_hashes.push_back(h);
// Should remove a single hash
mempool.remove(tx_hashes);
}
ASSERT_EQ(mempool.size(), 512);
tpl.update(data, mempool, &wallet);
tpl.update(data, mempool, wallet, subaddress);
ASSERT_EQ(tpl.get_reward(), 612054770773ULL);
ASSERT_EQ(b->m_sidechainId, H("c9df4853003ab436416b9fc9a5a072d16b4dede849e697a8be2ebb9c88c8ec72"));
@@ -123,12 +141,12 @@ TEST(block_template, update)
tx.weight = 1500;
transactions.push_back(tx);
}
mempool.swap(transactions);
mempool.swap_transactions(transactions);
ASSERT_EQ(mempool.size(), 10);
data.aux_chains.emplace_back(H("01f0cf665bd4cd31cbb2b2470236389c483522b350335e10a4a5dca34cb85990"), H("d9de1cfba7cdbd47f12f77addcb39b24c1ae7a16c35372bf28d6aee5d7579ee6"), difficulty_type(1000000));
tpl.update(data, mempool, &wallet);
tpl.update(data, mempool, wallet, subaddress);
ASSERT_EQ(tpl.get_reward(), 600300000000ULL);
ASSERT_EQ(b->m_sidechainId, H("c32abac2cad40e263a94f5f43f90e0a7d7d4b151305b79951dbc8c88c3180613"));
@@ -164,7 +182,7 @@ TEST(block_template, update)
}
ASSERT_EQ(mempool.size(), 10000);
tpl.update(data, mempool, &wallet);
tpl.update(data, mempool, wallet, subaddress);
ASSERT_EQ(tpl.get_reward(), 619742028747ULL);
ASSERT_EQ(b->m_sidechainId, H("69e7dd43dd99ac6be3f57ca333cc0d814189e83aee1773c99a341aca085c0d46"));
@@ -214,17 +232,18 @@ TEST(block_template, submit_sidechain_block)
Mempool mempool;
Wallet wallet("44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg");
Wallet subaddress{ nullptr };
std::mt19937_64 rng(101112);
for (uint64_t i = 0, i2 = 0, i3 = 0; i < sidechain.chain_window_size() * 3; ++i) {
tpl.update(data, mempool, &wallet);
tpl.update(data, mempool, wallet, subaddress);
if ((rng() % 31) == 0) {
tpl2.update(data, mempool, &wallet);
tpl2.update(data, mempool, wallet, subaddress);
if ((rng() % 11) == 0) {
tpl3.update(data, mempool, &wallet);
tpl3.update(data, mempool, wallet, subaddress);
++i3;
ASSERT_TRUE(tpl3.submit_sidechain_block(i3, 0, 0));
}
+30 -17
View File
@@ -53,17 +53,13 @@ TEST(wallet, input_output)
ASSERT_EQ(w.valid(), false);
}
// Subaddress (not supported)
{
Wallet w("8BE7uo9kWR6fFekhGHKJt87pkTzzNj2ikZMNmN7DUJf81y6Zygzbsk1CFzGMbS7fB7E2qr6A6EZfLYgxUfYvdDxEHrMPMA5");
ASSERT_EQ(w.valid(), false);
}
auto check = [](NetworkType t, uint64_t prefix, uint32_t checksum, const char* address, const char* spendkey, const char* viewkey)
auto check = [](NetworkType t, bool subaddress, uint64_t prefix, uint32_t checksum, const char* address, const char* spendkey, const char* viewkey)
{
// Test Wallet::decode()
Wallet w(address);
ASSERT_TRUE(w.valid());
ASSERT_EQ(w.type(), t);
ASSERT_EQ(w.is_subaddress(), subaddress);
ASSERT_EQ(w.prefix(), prefix);
ASSERT_EQ(w.checksum(), checksum);
@@ -85,16 +81,18 @@ TEST(wallet, input_output)
ASSERT_EQ(w1.view_public_key(), w.view_public_key());
ASSERT_EQ(w1.checksum(), w.checksum());
ASSERT_EQ(w1.type(), w.type());
ASSERT_EQ(w1.is_subaddress(), w.is_subaddress());
// Test Wallet::assign()
Wallet w2(nullptr);
w2.assign(w.spend_public_key(), w.view_public_key(), w.type());
w2.assign(w.spend_public_key(), w.view_public_key(), w.type(), w.is_subaddress());
ASSERT_EQ(w2.prefix(), w.prefix());
ASSERT_EQ(w2.spend_public_key(), w.spend_public_key());
ASSERT_EQ(w2.view_public_key(), w.view_public_key());
ASSERT_EQ(w2.checksum(), w.checksum());
ASSERT_EQ(w2.type(), w.type());
ASSERT_EQ(w2.is_subaddress(), w.is_subaddress());
// Test Wallet::encode()
const std::string s0 = address;
@@ -115,51 +113,66 @@ TEST(wallet, input_output)
// Correct mainnet addresses
check(
NetworkType::Mainnet, 18, 0xA345C1C9UL, "49ccoSmrBTPJd5yf8VYCULh4J5rHQaXP1TeC8Cnqhd5H9Y2cMwkJ9w42euLmMghKtCiQcgZEiGYW1K6Ae4biZ7w1HLSexS6",
NetworkType::Mainnet, false, 18, 0xA345C1C9UL, "49ccoSmrBTPJd5yf8VYCULh4J5rHQaXP1TeC8Cnqhd5H9Y2cMwkJ9w42euLmMghKtCiQcgZEiGYW1K6Ae4biZ7w1HLSexS6",
"d2e232e441546a695b27187692d035ef7be5c54692700c9f470dcd706753a833", "06f68970da46f709e2b4d0ffabd0d1f78ea6717786b5766c25c259111f212490"
);
check(
NetworkType::Mainnet, 18, 0x8C8FB6E6UL, "45JHuqGBSqUXUyZx95H4C2J5aEL4zFjM3jpTmMTESPXPa3jmtSQWYezHX7r4A2xPQNBGsQupJqmPhRZb2QgBcEWRDQ9ywwR",
NetworkType::Mainnet, false, 18, 0x8C8FB6E6UL, "45JHuqGBSqUXUyZx95H4C2J5aEL4zFjM3jpTmMTESPXPa3jmtSQWYezHX7r4A2xPQNBGsQupJqmPhRZb2QgBcEWRDQ9ywwR",
"60fe176eaf3cffb63df130bc25036b661b947900941052fffe6ff4b51fc4f2c5", "9387910b0a2e4f62c32621b77ddbeb3d6c0054e5ed9bc492d87bab1a1eef366d"
);
check(
NetworkType::Mainnet, 18, 0x0E705A56UL, "43S5vhReDY4fJs99DBZtFS8JoJVNG17iaAVAARvRT8xzSYZqnJfXfTACLrZUzoBHQKhiJZCWCpqB4Kf3c64CEagdSRXd5D7",
NetworkType::Mainnet, false, 18, 0x0E705A56UL, "43S5vhReDY4fJs99DBZtFS8JoJVNG17iaAVAARvRT8xzSYZqnJfXfTACLrZUzoBHQKhiJZCWCpqB4Kf3c64CEagdSRXd5D7",
"2fc2f902659541e50753853ddb96912baf55f26bebe7d338b5c2239c437ddb98", "b814951166253543cfb0e1b8bdea58f366de824fddb8ef6f895fcf631873f6e1"
);
check(
NetworkType::Mainnet, true, 42, 0x832DB4D1UL, "86eQxzSW4AZfvsWRSop755WZUsog6L3x32NRZukeeShnS4mBGVpcqQhS6pCNxj44usPKNwesZ45ooHyjDku6nVZdT3Q9qrz",
"6ea1b3ea41038ee8bd793d4d31851cb0ba4e4605213fe8082fdb51393c51b995", "da5d41e01f57c6961083bd6a0f779e856c8054e7cea82265815714b0bd7aece6"
);
// Correct testnet addresses
check(
NetworkType::Testnet, 53, 0x6F896672UL, "9x6aEN1yd2WhPMPw89LV5LLK1ZFe6N8xiAm18Ay4q1U4LKMde7MpDdPRN6GiiGCJMVTHuptGGmfj2Qfp2vcKSRSG79HJrQn",
NetworkType::Testnet, false, 53, 0x6F896672UL, "9x6aEN1yd2WhPMPw89LV5LLK1ZFe6N8xiAm18Ay4q1U4LKMde7MpDdPRN6GiiGCJMVTHuptGGmfj2Qfp2vcKSRSG79HJrQn",
"821623ac165f07f172c86980254a43737332fd89ca36d33a57dc02d8026d9173", "7c55413e672f8691a9211eac6003109d2fdf224ba72c4d8d82353427a02bc136"
);
check(
NetworkType::Testnet, 53, 0x4124092AUL, "9zsJP6KFF6ZGern5UkR7gyRXHFRTba6jG8JKnfzDySeqEdwPZaD8MNYGkjyADdVpWs7rXgyeu712JdxhX2k7d9SNB4TdRdS",
NetworkType::Testnet, false, 53, 0x4124092AUL, "9zsJP6KFF6ZGern5UkR7gyRXHFRTba6jG8JKnfzDySeqEdwPZaD8MNYGkjyADdVpWs7rXgyeu712JdxhX2k7d9SNB4TdRdS",
"cb366a3b44f6aa5d94e03db06325b6929b9e75dbf19dcf2ba2d14eb2efa53651", "8789afa33dca295e301baef826cec028fa22b831822c1bdcf8a847a43a3bff59"
);
check(
NetworkType::Testnet, 53, 0x0AC6459FUL, "A1SqL5oPjh8Km1At7mao7U1fNjWkzeSwvQ39GimMqvhBF3FUoJhx1zxL2i6XbHzzAXDhKetiwSmYQeVwG6sUgwJuEqPyjWq",
NetworkType::Testnet, false, 53, 0x0AC6459FUL, "A1SqL5oPjh8Km1At7mao7U1fNjWkzeSwvQ39GimMqvhBF3FUoJhx1zxL2i6XbHzzAXDhKetiwSmYQeVwG6sUgwJuEqPyjWq",
"da78298fb6eb8f702698bec873bad703f4a51e1377a66d89ba977ca7f43b8e53", "eeb348f70afad971c50aa062f1d1544be64ef9cdc12475e030f2d295305e6e7a"
);
check(
NetworkType::Testnet, true, 63, 0x2232C90AUL, "BfPfAxrFBbLJiMzVGyNmgJbejtcZEMELsbWSv5h3xTc3LSvKpwJetPrNk4fMSZ4bYCA4o93yGdVqjUpZSqUGxWkZ5HwBzrM",
"be4e4f17b8e00f69e661683116f7bfcf29b2c96fccbe84ce4ede5e58de0fd074", "43ecfeedf706b181fd5e5a321db3f13632df743113480aa6532973bf06b5da26"
);
// Correct stagenet addresses
check(
NetworkType::Stagenet, 24, 0x36E99D1DUL, "55AJ4jJBhV6JsoqrEsAazTLrJjg9SA1SFReLUoXDudrsA9tdL9i2VkJefEbx3zrFRt6swuibPVySPGNzsNvyshrRNZbSDnD",
NetworkType::Stagenet, false, 24, 0x36E99D1DUL, "55AJ4jJBhV6JsoqrEsAazTLrJjg9SA1SFReLUoXDudrsA9tdL9i2VkJefEbx3zrFRt6swuibPVySPGNzsNvyshrRNZbSDnD",
"57e0c2fef80a1d6adfa3189134009076ad0ddc4c4668709355cea98524e9fc36", "b94fafe59d5037e126557665f76cd3232504ebd82500e05bf25801d853d182bf"
);
check(
NetworkType::Stagenet, 24, 0x16DF3958UL, "5BQqg4HTWuN3j4NzBHTK31eTaygRXYxWRQW9dTD7qMuJSiVtskraSErXQ24FUBeifiV6NaQPmxLS559vbUT4xYUoF2fiGvH",
NetworkType::Stagenet, false, 24, 0x16DF3958UL, "5BQqg4HTWuN3j4NzBHTK31eTaygRXYxWRQW9dTD7qMuJSiVtskraSErXQ24FUBeifiV6NaQPmxLS559vbUT4xYUoF2fiGvH",
"fcd35a53cef9a1104ae556f01cee0cdff2f18f2f2f6bde8c833d5bd980fe8999", "be2b1142a046bfb5bb21e1f2a49bd1a7f46e1c18b009b218d5962f663938707c"
);
check(
NetworkType::Stagenet, 24, 0xF17D6524UL, "53CFYfjzcouW95hQ7AHvqS3GZ2UAAaRLKc1ymmhHATQTZxhtakpYcfjiRVzrRdxVZ5F8p61KSpPEmFu9DVRULRDkK4v1TCU",
NetworkType::Stagenet, false, 24, 0xF17D6524UL, "53CFYfjzcouW95hQ7AHvqS3GZ2UAAaRLKc1ymmhHATQTZxhtakpYcfjiRVzrRdxVZ5F8p61KSpPEmFu9DVRULRDkK4v1TCU",
"23fdd143264794ae367083791bb8fd0d8f719b27b7b858d15a2b67d6eddd60c5", "0ebafc1284ab1af7a5ff4ade682bcc54817a319a00eede591344855c420beba0"
);
check(
NetworkType::Stagenet, true, 36, 0xE5250D95UL, "77jhPoqpvTnGqds2oAWGVmiZv5fiQb2E8BizTL3oh7ia54sQRSEQ7SAAyRj9TpvwgHGuX1cYNDCHP7WHJCBXHcLqSnmApfe",
"90e6541963cd1d5eb1459f6f546db8f8840fa31ea09cfd401d4d519f48e56318", "50317de0182c133b9fb6958d1787f65f17b5366aff7b9226e3d205cf22844ae4"
);
}
}