Compare commits
36 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 458c7a3389 | |||
| 82f3982175 | |||
| 0184a3139c | |||
| 26357f44ec | |||
| 85931f564a | |||
| 1e8e6c1010 | |||
| f6a1612ff1 | |||
| 1eb22109b5 | |||
| c0b99ac6fd | |||
| cff1210761 | |||
| bae7c65126 | |||
| 04d195d5cd | |||
| a4e1f00993 | |||
| 0d101f0ae6 | |||
| 2ae77e5b71 | |||
| 2e32d14d5f | |||
| 415ad70e2f | |||
| 6380e204dd | |||
| 12993dfe19 | |||
| a64753ecd0 | |||
| e9c7367b92 | |||
| 9f7dc5b768 | |||
| f141bef4b5 | |||
| 32e940577e | |||
| 012d148080 | |||
| d64b4ea2dc | |||
| a9e0b834d9 | |||
| 3a8ec27d93 | |||
| b69de65e78 | |||
| 44f8d941a7 | |||
| 8c1c5fd8e1 | |||
| bbfdeeaff5 | |||
| f12e43bb79 | |||
| a1544022cf | |||
| e2008578da | |||
| 9b5a43580e |
@@ -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
|
||||
|
||||
@@ -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=^[^\./]
|
||||
|
||||
@@ -32,7 +32,6 @@ jobs:
|
||||
- name: Build cppcheck
|
||||
run: |
|
||||
cd cppcheck-main
|
||||
git checkout 1d9ea2ffcca587f99c68f0b6a4c37d5b3e046c28
|
||||
make -j$(nproc) cppcheck
|
||||
|
||||
- name: cmake p2pool
|
||||
|
||||
@@ -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: |
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
SChernykh <15806605+SChernykh@users.noreply.github.com> sech1 <sech1@sech1>
|
||||
+6
-3
@@ -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()
|
||||
|
||||
@@ -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
@@ -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")
|
||||
|
||||
@@ -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}")
|
||||
@@ -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)
|
||||
|
||||
+550
-452
File diff suppressed because it is too large
Load Diff
+567
-347
File diff suppressed because it is too large
Load Diff
+6
-2
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
Vendored
+1
-1
Submodule external/src/curl updated: 939e16f090...aad7feea70
@@ -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,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
|
||||
@@ -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
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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();
|
||||
|
||||
@@ -395,5 +395,5 @@ char* strdup_hook(const char* s) noexcept
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
} // namespace p2pool
|
||||
#endif
|
||||
|
||||
+15
-1
@@ -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
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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")) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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));
|
||||
|
||||
@@ -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
@@ -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"
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user