Compare commits
48 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cf51fe5273 | |||
| 3154b61fc6 | |||
| f9831500e4 | |||
| e9d49b2a1d | |||
| 5eabfb0a1a | |||
| 3fc68e680a | |||
| 1bd9ff1379 | |||
| 9a0a96f990 | |||
| 604ef13aa6 | |||
| 293c6f3930 | |||
| 1f3872254d | |||
| 27a2461d1d | |||
| 70298cd065 | |||
| f655fd1e30 | |||
| 9abe993bb0 | |||
| 2a30901ba5 | |||
| 2c29092b7a | |||
| 7d610f61d5 | |||
| 7d632fdc85 | |||
| 2416a80642 | |||
| 779f72a71e | |||
| 6483c32c8d | |||
| 3f9c622b88 | |||
| 68cbf91fc7 | |||
| df21dd48af | |||
| 9462f2a85b | |||
| 9e37216be2 | |||
| 901b6cb828 | |||
| 2396725eb8 | |||
| 11236f7dc8 | |||
| 8b4b06f1be | |||
| 55e12a3715 | |||
| a66716c0b1 | |||
| abde2ef1ce | |||
| f94d411f3c | |||
| 6178277745 | |||
| a55858b44f | |||
| 2449366d87 | |||
| d1dd95d9c9 | |||
| 37e8cc01cf | |||
| e182c4c992 | |||
| 71b6b8fdef | |||
| 860bb7b067 | |||
| 7361ddf24d | |||
| 1a3ce762b3 | |||
| d006ac2c6e | |||
| 13bd678c03 | |||
| 4aef6cf8bb |
+48
-49
@@ -2,6 +2,7 @@ name: C/C++ CI
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["master"]
|
||||
paths-ignore:
|
||||
- 'docker-compose/**'
|
||||
- 'docs/**'
|
||||
@@ -43,7 +44,7 @@ jobs:
|
||||
shell: alpine.sh {0}
|
||||
run: |
|
||||
cd external/src/curl
|
||||
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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
make -j$(nproc)
|
||||
cd lib && mkdir .libs && cp libcurl.a .libs
|
||||
|
||||
@@ -53,7 +54,7 @@ jobs:
|
||||
cd external/src/libuv
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Build libzmq
|
||||
@@ -62,7 +63,7 @@ jobs:
|
||||
cd external/src/libzmq
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Build p2pool
|
||||
@@ -70,7 +71,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_BINARY=ON -DARCH_ID=${{ matrix.config.arch }}
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_BINARY=ON -DARCH_ID=${{ matrix.config.arch }}
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Run RandomX tests
|
||||
@@ -87,7 +88,7 @@ jobs:
|
||||
cd tests
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON -DARCH_ID=${{ matrix.config.arch }}
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON -DARCH_ID=${{ matrix.config.arch }}
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Run tests
|
||||
@@ -117,9 +118,12 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
config:
|
||||
- {os: ubuntu-20.04, c: gcc-8, cpp: g++-8, flags: ""}
|
||||
- {os: ubuntu-20.04, c: gcc-11, cpp: g++-11, flags: ""}
|
||||
- {os: ubuntu-22.04, c: gcc-9, cpp: g++-9, flags: ""}
|
||||
- {os: ubuntu-22.04, c: gcc-10, cpp: g++-10, flags: ""}
|
||||
- {os: ubuntu-22.04, c: gcc-11, cpp: g++-11, flags: ""}
|
||||
- {os: ubuntu-22.04, c: gcc-12, cpp: g++-12, flags: ""}
|
||||
- {os: ubuntu-24.04, c: gcc-13, cpp: g++-13, flags: ""}
|
||||
- {os: ubuntu-24.04, c: gcc-14, cpp: g++-14, flags: ""}
|
||||
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
@@ -137,7 +141,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cpp }} -DCMAKE_C_FLAGS='${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }}'
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cpp }} -DCMAKE_C_FLAGS='${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }}' -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Run RandomX tests
|
||||
@@ -152,7 +156,7 @@ jobs:
|
||||
cd tests
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cpp }} -DCMAKE_C_FLAGS='${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }}'
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cpp }} -DCMAKE_C_FLAGS='${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }}' -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Run tests
|
||||
@@ -193,7 +197,7 @@ jobs:
|
||||
- name: Build libcurl
|
||||
run: |
|
||||
cd external/src/curl
|
||||
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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
make -j$(nproc)
|
||||
cd lib && mkdir .libs && cp libcurl.a .libs
|
||||
|
||||
@@ -202,7 +206,7 @@ jobs:
|
||||
cd external/src/libuv
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Build libzmq
|
||||
@@ -210,14 +214,14 @@ jobs:
|
||||
cd external/src/libzmq
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -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_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Run RandomX tests
|
||||
@@ -232,7 +236,7 @@ jobs:
|
||||
cd tests
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Run tests
|
||||
@@ -255,8 +259,8 @@ jobs:
|
||||
strategy:
|
||||
matrix:
|
||||
config:
|
||||
- {os: ubuntu-20.04, flags: "-fuse-linker-plugin -ffunction-sections -mfix-cortex-a53-835769 -mfix-cortex-a53-843419"}
|
||||
- {os: ubuntu-22.04, flags: "-fuse-linker-plugin -ffunction-sections -mfix-cortex-a53-835769 -mfix-cortex-a53-843419"}
|
||||
- {os: ubuntu-24.04, flags: "-fuse-linker-plugin -ffunction-sections -mfix-cortex-a53-835769 -mfix-cortex-a53-843419"}
|
||||
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
@@ -272,7 +276,7 @@ jobs:
|
||||
- name: Build libcurl
|
||||
run: |
|
||||
cd external/src/curl
|
||||
cmake . -DCMAKE_TOOLCHAIN_FILE=../../../cmake/aarch64_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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../cmake/aarch64_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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
make -j$(nproc)
|
||||
cd lib && mkdir .libs && cp libcurl.a .libs
|
||||
|
||||
@@ -281,7 +285,7 @@ jobs:
|
||||
cd external/src/libuv
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../../../cmake/aarch64_toolchain.cmake -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../cmake/aarch64_toolchain.cmake -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Build libzmq
|
||||
@@ -289,14 +293,14 @@ jobs:
|
||||
cd external/src/libzmq
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_TOOLCHAIN_FILE=../../../cmake/aarch64_toolchain.cmake -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../../../cmake/aarch64_toolchain.cmake -DCMAKE_C_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='-Os -flto=auto ${{ matrix.config.flags }}' -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_TOOLCHAIN_FILE=../cmake/aarch64_toolchain.cmake -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON -DARCH_ID=aarch64
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../cmake/aarch64_toolchain.cmake -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON -DARCH_ID=aarch64 -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Run RandomX tests
|
||||
@@ -311,7 +315,7 @@ jobs:
|
||||
cd tests
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_STRIP=/usr/bin/aarch64-linux-gnu-strip -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON -DARCH_ID=aarch64
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_STRIP=/usr/bin/aarch64-linux-gnu-strip -DCMAKE_C_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DCMAKE_CXX_FLAGS='${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections' -DSTATIC_LIBS=ON -DARCH_ID=aarch64 -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Run tests
|
||||
@@ -353,15 +357,10 @@ jobs:
|
||||
update: true
|
||||
install: mingw-w64-x86_64-toolchain mingw-w64-x86_64-clang mingw-w64-x86_64-lld mingw-w64-x86_64-cmake make git
|
||||
|
||||
- name: Apply patch
|
||||
run: |
|
||||
cd /
|
||||
git apply --verbose --ignore-whitespace --directory=mingw64/include/c++/`ls mingw64/include/c++`/ /d/a/p2pool/p2pool/patches/msys2/typeinfo.patch
|
||||
|
||||
- name: Build libcurl
|
||||
run: |
|
||||
cd external/src/curl
|
||||
cmake . -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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
make -j$(nproc)
|
||||
cd lib && mkdir .libs && cp libcurl.a .libs
|
||||
|
||||
@@ -370,7 +369,7 @@ jobs:
|
||||
cd external/src/libuv
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_C_FLAGS='-Os ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_C_FLAGS='-Os ${{ matrix.config.flags }}' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Build libzmq
|
||||
@@ -378,14 +377,14 @@ jobs:
|
||||
cd external/src/libzmq
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_FLAGS='-Os ${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='-Os ${{ matrix.config.flags }}' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DZMQ_HAVE_IPC=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_FLAGS='-Os ${{ matrix.config.flags }}' -DCMAKE_CXX_FLAGS='-Os ${{ matrix.config.flags }}' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DZMQ_HAVE_IPC=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 .. -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_FLAGS="${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections" -DSTATIC_LIBS=ON -DOPENSSL_NO_ASM=ON -DWITH_LTO=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_FLAGS="${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections" -DSTATIC_LIBS=ON -DOPENSSL_NO_ASM=ON -DWITH_LTO=OFF -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Run RandomX tests
|
||||
@@ -400,7 +399,7 @@ jobs:
|
||||
cd tests
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_FLAGS="${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections" -DSTATIC_LIBS=ON -DOPENSSL_NO_ASM=ON
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" -DCMAKE_C_COMPILER=${{ matrix.config.c }} -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} -DCMAKE_C_FLAGS="${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="${{ matrix.config.flags }} -Wl,-s -Wl,--gc-sections" -DSTATIC_LIBS=ON -DOPENSSL_NO_ASM=ON
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Run tests
|
||||
@@ -447,7 +446,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G "${{ matrix.config.vs }}" -DCMAKE_SYSTEM_VERSION="10.0" -DWITH_RANDOMX=${{ matrix.config.rx }} -DWITH_UPNP=${{ matrix.config.upnp }} -DWITH_GRPC=${{ matrix.config.grpc }} -DWITH_TLS=${{ matrix.config.tls }}
|
||||
cmake .. -G "${{ matrix.config.vs }}" -DCMAKE_SYSTEM_VERSION="10.0" -DWITH_RANDOMX=${{ matrix.config.rx }} -DWITH_UPNP=${{ matrix.config.upnp }} -DWITH_GRPC=${{ matrix.config.grpc }} -DWITH_TLS=${{ matrix.config.tls }} -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
& "${{ matrix.config.vspath }}\\MSBuild\\Current\\Bin\\amd64\\msbuild" -v:m /m /p:Configuration=Release p2pool.vcxproj
|
||||
|
||||
- name: Check Windows 7 compatibility
|
||||
@@ -471,7 +470,7 @@ jobs:
|
||||
cd tests
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G "${{ matrix.config.vs }}" -DCMAKE_SYSTEM_VERSION="10.0" -DDEV_WITH_ASAN=ON
|
||||
cmake .. -G "${{ matrix.config.vs }}" -DCMAKE_SYSTEM_VERSION="10.0" -DDEV_WITH_ASAN=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
& "${{ matrix.config.vspath }}\\MSBuild\\Current\\Bin\\amd64\\msbuild" -v:m /m /p:Configuration=Debug p2pool_tests.vcxproj
|
||||
|
||||
- name: Run tests
|
||||
@@ -502,7 +501,7 @@ jobs:
|
||||
- name: Build libcurl
|
||||
run: |
|
||||
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="-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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
make -j4
|
||||
cd lib && mkdir .libs && cp libcurl.a .libs
|
||||
|
||||
@@ -511,7 +510,7 @@ jobs:
|
||||
cd external/src/libuv
|
||||
mkdir build
|
||||
cd build
|
||||
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='-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
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_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
make -j4
|
||||
|
||||
- name: Build libzmq
|
||||
@@ -519,14 +518,14 @@ jobs:
|
||||
cd external/src/libzmq
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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' -DCMAKE_CXX_FLAGS='-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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' -DCMAKE_CXX_FLAGS='-Os -flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
make -j4
|
||||
|
||||
- name: Build p2pool
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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='-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DCMAKE_CXX_FLAGS='-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DCMAKE_ASM_FLAGS='-target x86_64-apple-macos10.13' -DSTATIC_LIBS=ON
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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='-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DCMAKE_CXX_FLAGS='-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DCMAKE_ASM_FLAGS='-target x86_64-apple-macos10.13' -DSTATIC_LIBS=ON
|
||||
make -j4 p2pool
|
||||
|
||||
- name: Run RandomX tests
|
||||
@@ -541,7 +540,7 @@ jobs:
|
||||
cd tests
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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='-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DCMAKE_CXX_FLAGS='-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DCMAKE_ASM_FLAGS='-target x86_64-apple-macos10.13' -DSTATIC_LIBS=ON
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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='-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DCMAKE_CXX_FLAGS='-flto -target x86_64-apple-macos10.13 -Wno-overriding-t-option' -DCMAKE_ASM_FLAGS='-target x86_64-apple-macos10.13' -DSTATIC_LIBS=ON
|
||||
make -j4
|
||||
|
||||
- name: Run tests
|
||||
@@ -570,7 +569,7 @@ jobs:
|
||||
- name: Build libcurl
|
||||
run: |
|
||||
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="-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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
make -j3
|
||||
cd lib && mkdir .libs && cp libcurl.a .libs
|
||||
|
||||
@@ -579,7 +578,7 @@ jobs:
|
||||
cd external/src/libuv
|
||||
mkdir build
|
||||
cd build
|
||||
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='-Os -target arm64-apple-macos-11' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
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_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
make -j3
|
||||
|
||||
- name: Build libzmq
|
||||
@@ -587,14 +586,14 @@ jobs:
|
||||
cd external/src/libzmq
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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' -DCMAKE_CXX_FLAGS='-Os -target arm64-apple-macos-11' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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' -DCMAKE_CXX_FLAGS='-Os -target arm64-apple-macos-11' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
make -j3
|
||||
|
||||
- name: Build p2pool
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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="-target arm64-apple-macos-11" -DCMAKE_CXX_FLAGS="-target arm64-apple-macos-11" -DSTATIC_LIBS=ON -DWITH_LTO=OFF -DARCH_ID=aarch64
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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="-target arm64-apple-macos-11" -DCMAKE_CXX_FLAGS="-target arm64-apple-macos-11" -DSTATIC_LIBS=ON -DWITH_LTO=OFF -DARCH_ID=aarch64
|
||||
make -j3 p2pool
|
||||
|
||||
- name: Run RandomX tests
|
||||
@@ -609,7 +608,7 @@ jobs:
|
||||
cd tests
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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="-target arm64-apple-macos-11" -DCMAKE_CXX_FLAGS="-target arm64-apple-macos-11" -DSTATIC_LIBS=ON -DWITH_LTO=OFF -DARCH_ID=aarch64
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER="$(brew --prefix llvm@15)/bin/clang" -DCMAKE_CXX_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="-target arm64-apple-macos-11" -DCMAKE_CXX_FLAGS="-target arm64-apple-macos-11" -DSTATIC_LIBS=ON -DWITH_LTO=OFF -DARCH_ID=aarch64
|
||||
make -j3
|
||||
|
||||
- name: Run tests
|
||||
@@ -660,23 +659,23 @@ jobs:
|
||||
run: |
|
||||
sudo pkg install -y cmake
|
||||
cd external/src/curl
|
||||
cmake . -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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
make -j4
|
||||
cd lib && mkdir .libs && cp libcurl.a .libs
|
||||
cd ../../libuv
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_FLAGS='-Os -flto' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto' -DBUILD_TESTING=OFF -DLIBUV_BUILD_SHARED=OFF
|
||||
make -j4
|
||||
cd ../../libzmq
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_FLAGS='-Os -flto' -DCMAKE_CXX_FLAGS='-Os -flto' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS='-Os -flto' -DCMAKE_CXX_FLAGS='-Os -flto' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
make -j4
|
||||
cd ../../../..
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DSTATIC_LIBS=ON
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DSTATIC_LIBS=ON
|
||||
make -j4 p2pool
|
||||
./p2pool --test
|
||||
make -j4 randomx-tests
|
||||
@@ -684,7 +683,7 @@ jobs:
|
||||
cd ../tests
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DSTATIC_LIBS=ON
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release -DSTATIC_LIBS=ON
|
||||
make -j4 p2pool_tests
|
||||
gunzip *.gz
|
||||
./p2pool_tests
|
||||
@@ -731,11 +730,11 @@ jobs:
|
||||
run: |
|
||||
sudo pkg_add -I cmake libuv zeromq curl
|
||||
mkdir build && cd build
|
||||
cmake ..
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||||
make -j4 p2pool
|
||||
cd ../tests
|
||||
mkdir build && cd build
|
||||
cmake ..
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||||
make -j4 p2pool_tests
|
||||
gunzip *.gz
|
||||
./p2pool_tests
|
||||
|
||||
@@ -2,6 +2,7 @@ name: clang-tidy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["master"]
|
||||
paths-ignore:
|
||||
- 'docker-compose/**'
|
||||
- 'docs/**'
|
||||
@@ -31,7 +32,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -DDEV_CLANG_TIDY=ON -DSTATIC_LIBS=ON
|
||||
cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -DDEV_CLANG_TIDY=ON -DSTATIC_LIBS=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
|
||||
- name: Run clang-tidy
|
||||
run: |
|
||||
|
||||
@@ -13,6 +13,7 @@ name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["master"]
|
||||
paths-ignore:
|
||||
- 'docker-compose/**'
|
||||
- 'docs/**'
|
||||
@@ -61,21 +62,13 @@ jobs:
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v3
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
- run: |
|
||||
cmake . -DCMAKE_BUILD_TYPE=Release -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
|
||||
@@ -2,6 +2,7 @@ name: cppcheck
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["master"]
|
||||
paths-ignore:
|
||||
- 'docker-compose/**'
|
||||
- 'docs/**'
|
||||
@@ -39,7 +40,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DSTATIC_LIBS=ON -DWITH_GRPC=OFF
|
||||
cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DSTATIC_LIBS=ON -DWITH_GRPC=OFF -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
python ../cppcheck/remove_external.py compile_commands.json
|
||||
|
||||
- name: Run cppcheck
|
||||
@@ -90,7 +91,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G "Visual Studio 17 2022" -DSTATIC_LIBS=ON
|
||||
cmake .. -G "Visual Studio 17 2022" -DSTATIC_LIBS=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
|
||||
- name: Run cppcheck
|
||||
run: |
|
||||
|
||||
@@ -10,6 +10,7 @@ name: Microsoft C++ Code Analysis
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["master"]
|
||||
paths-ignore:
|
||||
- 'docker-compose/**'
|
||||
- 'docs/**'
|
||||
@@ -38,7 +39,7 @@ jobs:
|
||||
submodules: recursive
|
||||
|
||||
- name: Configure CMake
|
||||
run: cmake -B ${{ env.build }} -DCMAKE_BUILD_TYPE=${{ env.config }}
|
||||
run: cmake -B ${{ env.build }} -DCMAKE_BUILD_TYPE=${{ env.config }} -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
|
||||
# Build is not required unless generated source files are used
|
||||
# - name: Build CMake
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
name: source-snapshot
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
branches: ["master"]
|
||||
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
source-snapshot:
|
||||
|
||||
@@ -2,6 +2,7 @@ name: Sync test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ["master"]
|
||||
paths-ignore:
|
||||
- 'docker-compose/**'
|
||||
- 'docs/**'
|
||||
@@ -50,14 +51,14 @@ jobs:
|
||||
cd external/src/libzmq
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DCMAKE_CXX_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DWITH_LIBSODIUM=OFF -DWITH_LIBBSD=OFF -DBUILD_TESTS=OFF -DWITH_DOCS=OFF -DENABLE_DRAFTS=OFF -DBUILD_SHARED=OFF
|
||||
cmake .. -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DCMAKE_CXX_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -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 .. -DDEV_TEST_SYNC=ON -DDEV_WITH_TSAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DCMAKE_CXX_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DWITH_LTO=OFF -DSTATIC_LIBS=ON
|
||||
cmake .. -DDEV_TEST_SYNC=ON -DDEV_WITH_TSAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DCMAKE_CXX_FLAGS='-fsanitize=thread -Og -fno-omit-frame-pointer -g' -DWITH_LTO=OFF -DSTATIC_LIBS=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Run p2pool
|
||||
@@ -68,7 +69,7 @@ jobs:
|
||||
python ../tests/src/stratum_dummy.py 2 &
|
||||
python ../tests/src/stratum_dummy.py 3 &
|
||||
sudo sysctl vm.mmap_rnd_bits=28
|
||||
TSAN_OPTIONS="suppressions=../tests/src/tsan_sup.txt halt_on_error=1 history_size=4" ./p2pool --host xmr.support --rpc-port 18081 --zmq-port 18083 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
TSAN_OPTIONS="suppressions=../tests/src/tsan_sup.txt halt_on_error=1 history_size=4" ./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 --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
|
||||
- name: Check p2pool.log
|
||||
run: |
|
||||
@@ -97,14 +98,14 @@ jobs:
|
||||
run: |
|
||||
wget https://apt.llvm.org/llvm.sh
|
||||
chmod +x llvm.sh
|
||||
sudo ./llvm.sh 19
|
||||
sudo ./llvm.sh 20 all
|
||||
|
||||
- name: Build libcxx_msan
|
||||
run: |
|
||||
git clone --depth=1 https://github.com/llvm/llvm-project -b release/19.x
|
||||
git clone --depth=1 https://github.com/llvm/llvm-project -b release/20.x
|
||||
cd llvm-project
|
||||
mkdir build
|
||||
cmake -G Ninja -S runtimes -B build -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -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-20 -DCMAKE_CXX_COMPILER=clang++-20 -DLLVM_USE_SANITIZER=MemoryWithOrigins -DLIBCXXABI_USE_LLVM_UNWINDER=OFF
|
||||
ninja -C build cxx cxxabi
|
||||
cd build
|
||||
mkdir /tmp/libcxx_msan
|
||||
@@ -119,7 +120,7 @@ jobs:
|
||||
- name: Build libcurl
|
||||
run: |
|
||||
cd external/src/curl
|
||||
cmake . -DCMAKE_C_COMPILER=clang-19 -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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
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 -DOPENSSL_INCLUDE_DIR=../grpc/third_party/boringssl-with-bazel/src/include
|
||||
make -j$(nproc)
|
||||
cd lib && mkdir .libs && cp libcurl.a .libs
|
||||
|
||||
@@ -128,7 +129,7 @@ jobs:
|
||||
cd external/src/libuv
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER=clang-19 -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_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
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Build libzmq
|
||||
@@ -136,14 +137,14 @@ jobs:
|
||||
cd external/src/libzmq
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -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
|
||||
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"
|
||||
make -j$(nproc)
|
||||
|
||||
- name: Build p2pool
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_C_COMPILER=clang-19 -DCMAKE_CXX_COMPILER=clang++-19 -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-19 -fno-omit-frame-pointer -g' -DDEV_TEST_SYNC=ON -DDEV_WITH_MSAN=ON -DWITH_LTO=OFF -DSTATIC_LIBS=ON
|
||||
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"
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Run p2pool
|
||||
@@ -154,7 +155,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 xmr.support --rpc-port 18081 --zmq-port 18083 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --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 --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
|
||||
- name: Check p2pool.log
|
||||
run: |
|
||||
@@ -190,7 +191,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DDEV_TEST_SYNC=ON -DDEV_WITH_UBSAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DWITH_LTO=OFF
|
||||
cmake .. -DDEV_TEST_SYNC=ON -DDEV_WITH_UBSAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DWITH_LTO=OFF -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Run p2pool
|
||||
@@ -201,7 +202,7 @@ jobs:
|
||||
python ../tests/src/stratum_dummy.py 2 &
|
||||
python ../tests/src/stratum_dummy.py 3 &
|
||||
sudo sysctl vm.mmap_rnd_bits=28
|
||||
UBSAN_OPTIONS="suppressions=../tests/src/ubsan_sup.txt halt_on_error=1" ./p2pool --host xmr.support --rpc-port 18081 --zmq-port 18083 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
UBSAN_OPTIONS="suppressions=../tests/src/ubsan_sup.txt 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 --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
|
||||
- name: Check p2pool.log
|
||||
run: |
|
||||
@@ -237,7 +238,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DDEV_TEST_SYNC=ON -DDEV_WITH_ASAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_FLAGS="-fno-omit-frame-pointer -fsanitize=address -Og -g" -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -fsanitize=address -Og -g" -DWITH_LTO=OFF
|
||||
cmake .. -DDEV_TEST_SYNC=ON -DDEV_WITH_ASAN=ON -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_C_FLAGS="-fno-omit-frame-pointer -fsanitize=address -Og -g" -DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -fsanitize=address -Og -g" -DWITH_LTO=OFF -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
make -j$(nproc) p2pool
|
||||
|
||||
- name: Run p2pool
|
||||
@@ -248,7 +249,7 @@ jobs:
|
||||
python ../tests/src/stratum_dummy.py 2 &
|
||||
python ../tests/src/stratum_dummy.py 3 &
|
||||
sudo sysctl vm.mmap_rnd_bits=28
|
||||
ASAN_OPTIONS="detect_stack_use_after_return=1 atexit=1" ./p2pool --host xmr.support --rpc-port 18081 --zmq-port 18083 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
ASAN_OPTIONS="detect_stack_use_after_return=1 atexit=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 --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
|
||||
- name: Check p2pool.log
|
||||
run: |
|
||||
@@ -317,7 +318,7 @@ jobs:
|
||||
python3 ../tests/src/stratum_dummy.py 1 &
|
||||
python3 ../tests/src/stratum_dummy.py 2 &
|
||||
python3 ../tests/src/stratum_dummy.py 3 &
|
||||
./p2pool --host xmr.support --rpc-port 18081 --zmq-port 18083 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
./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 --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
|
||||
- name: Check p2pool.log
|
||||
run: |
|
||||
@@ -350,7 +351,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G "Visual Studio 17 2022" -DCMAKE_SYSTEM_VERSION="10.0" -DDEV_TEST_SYNC=ON -DDEV_WITH_ASAN=ON
|
||||
cmake .. -G "Visual Studio 17 2022" -DCMAKE_SYSTEM_VERSION="10.0" -DDEV_TEST_SYNC=ON -DDEV_WITH_ASAN=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
& "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\Msbuild\\Current\\Bin\\amd64\\msbuild" -v:m /m /p:Configuration=Debug p2pool.vcxproj
|
||||
|
||||
- name: Run p2pool
|
||||
@@ -362,7 +363,7 @@ jobs:
|
||||
start python ../../tests/src/stratum_dummy.py 1
|
||||
start python ../../tests/src/stratum_dummy.py 2
|
||||
start python ../../tests/src/stratum_dummy.py 3
|
||||
p2pool.exe --host xmr.support --rpc-port 18081 --zmq-port 18083 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
p2pool.exe --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
|
||||
- name: Check p2pool.log
|
||||
run: |
|
||||
@@ -395,7 +396,7 @@ jobs:
|
||||
run: |
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -G "Visual Studio 17 2022" -DCMAKE_SYSTEM_VERSION="10.0" -DDEV_TEST_SYNC=ON -DDEV_TRACK_MEMORY=ON
|
||||
cmake .. -G "Visual Studio 17 2022" -DCMAKE_SYSTEM_VERSION="10.0" -DDEV_TEST_SYNC=ON -DDEV_TRACK_MEMORY=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5"
|
||||
& "C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise\\Msbuild\\Current\\Bin\\amd64\\msbuild" -v:m /m /p:Configuration=RelWithDebInfo p2pool.vcxproj
|
||||
|
||||
- name: Run p2pool
|
||||
@@ -405,7 +406,7 @@ jobs:
|
||||
Start-Process python -ArgumentList "../../tests/src/stratum_dummy.py 1"
|
||||
Start-Process python -ArgumentList "../../tests/src/stratum_dummy.py 2"
|
||||
Start-Process python -ArgumentList "../../tests/src/stratum_dummy.py 3"
|
||||
./p2pool.exe --host xmr.support --rpc-port 18081 --zmq-port 18083 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
./p2pool.exe --host node.monerodevs.org --rpc-port 18089 --zmq-port 18084 --host node.richfowler.net --rpc-port 18089 --zmq-port 18084 --rpc-ssl --wallet 44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg --mini --out-peers 200 --data-api data --local-api --loglevel 6
|
||||
|
||||
- name: Check p2pool.log
|
||||
run: |
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
.vscode
|
||||
build
|
||||
logs
|
||||
|
||||
+26
-6
@@ -17,7 +17,9 @@ option(WITH_RANDOMX "Include the RandomX library in the build. If this is turned
|
||||
option(WITH_LTO "Use link-time compiler optimization (if linking fails for you, run cmake with -DWITH_LTO=OFF)" ON)
|
||||
option(WITH_UPNP "Include UPnP support. If this is turned off, p2pool will not be able to configure port forwarding on UPnP-enabled routers." ON)
|
||||
option(WITH_GRPC "Include gRPC support. If this is turned off, p2pool will not be able to merge mine with Tari." ON)
|
||||
option(WITH_TLS "Include TLS support. If this is turned off, p2pool will not support Stratum TLS connections." ON)
|
||||
option(WITH_TLS "Include TLS support. If this is turned off, p2pool will not support Stratum TLS connections, and lack many other security features. It's recommended to keep it ON!" ON)
|
||||
|
||||
option(WITH_MERGE_MINING_DONATION "Merge mine donations to the author. This doesn't affect your hashrate or payouts in any way - only unused merge mining capacity will be utilised. If you merge mine yourself, your settings will take priority." ON)
|
||||
|
||||
option(DEV_TEST_SYNC "[Developer only] Sync test, stop p2pool after sync is complete" OFF)
|
||||
option(DEV_WITH_TSAN "[Developer only] Compile with thread sanitizer" OFF)
|
||||
@@ -56,6 +58,10 @@ if (WITH_UPNP)
|
||||
set(LIBS ${LIBS} libminiupnpc-static)
|
||||
endif()
|
||||
|
||||
if (WITH_MERGE_MINING_DONATION)
|
||||
add_definitions(-DWITH_MERGE_MINING_DONATION)
|
||||
endif()
|
||||
|
||||
if (DEV_TEST_SYNC)
|
||||
add_definitions(-DDEV_TEST_SYNC)
|
||||
endif()
|
||||
@@ -345,6 +351,16 @@ int main(int argc, char* argv[])
|
||||
return 0;
|
||||
}" HAVE_RES_QUERY)
|
||||
|
||||
check_c_source_compiles("
|
||||
#define _GNU_SOURCE
|
||||
#include <pthread.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
pthread_setname_np(pthread_self(), \"Main\");
|
||||
return 0;
|
||||
}" HAVE_PTHREAD_SETNAME_NP)
|
||||
|
||||
set(CMAKE_REQUIRED_LIBRARIES)
|
||||
|
||||
if (HAVE_BUILTIN_CLZLL)
|
||||
@@ -366,12 +382,16 @@ if (HAVE_RES_QUERY)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (HAVE_PTHREAD_SETNAME_NP)
|
||||
add_definitions(/DHAVE_PTHREAD_SETNAME_NP)
|
||||
endif()
|
||||
|
||||
add_definitions("-DRAPIDJSON_PARSE_DEFAULT_FLAGS=kParseTrailingCommasFlag")
|
||||
|
||||
add_executable(${CMAKE_PROJECT_NAME} ${HEADERS} ${SOURCES})
|
||||
|
||||
if (STATIC_BINARY OR STATIC_LIBS)
|
||||
if (NOT (DEV_WITH_TSAN OR DEV_WITH_MSAN OR DEV_WITH_UBSAN OR DEV_WITH_ASAN))
|
||||
if ((CMAKE_BUILD_TYPE STREQUAL "Release") AND (NOT (DEV_WITH_TSAN OR DEV_WITH_MSAN OR DEV_WITH_UBSAN OR DEV_WITH_ASAN)))
|
||||
if (WIN32)
|
||||
add_custom_command(TARGET ${CMAKE_PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} "${CMAKE_PROJECT_NAME}.exe")
|
||||
else()
|
||||
@@ -432,8 +452,8 @@ else()
|
||||
endif()
|
||||
|
||||
message(STATUS "Summary of build options:
|
||||
C compiler: ${CMAKE_C_COMPILER} (${CMAKE_C_COMPILER_ID})
|
||||
CXX compiler: ${CMAKE_CXX_COMPILER} (${CMAKE_CXX_COMPILER_ID})
|
||||
C_FLAGS: ${CMAKE_C_FLAGS}
|
||||
CXX_FLAGS: ${CMAKE_CXX_FLAGS}
|
||||
C compiler: ${CMAKE_C_COMPILER} (${CMAKE_C_COMPILER_ID})
|
||||
CXX compiler: ${CMAKE_CXX_COMPILER} (${CMAKE_CXX_COMPILER_ID})
|
||||
C_FLAGS: ${CMAKE_C_FLAGS}
|
||||
CXX_FLAGS: ${CMAKE_CXX_FLAGS}
|
||||
")
|
||||
|
||||
@@ -111,7 +111,7 @@ In order to continue mining on P2Pool, you must update both Monero and P2Pool so
|
||||
|
||||
### Merge mining
|
||||
|
||||
Merge mining will be available in P2Pool after the fork on October 12th, 2024. Version 4.0 or newer is required to use it.
|
||||
Merge mining is available in P2Pool since the fork that happened on October 12th, 2024. Version 4.0 or newer is required to use it.
|
||||
|
||||
- Blockchains that will support [Merge mining RPC API](https://github.com/SChernykh/p2pool/blob/master/docs/MERGE_MINING.MD#proposed-rpc-api)
|
||||
- [Townforge](https://townforge.net/) supports it in their [tmp-mm branch](https://git.townforge.net/townforge/townforge/src/branch/tmp-mm) (not released yet)
|
||||
@@ -120,11 +120,27 @@ Merge mining will be available in P2Pool after the fork on October 12th, 2024. V
|
||||
p2pool.exe --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine IP:port YOUR_WALLET_ADDRESS_ON_ANOTHER_BLOCKCHAIN
|
||||
```
|
||||
|
||||
- [Tari](https://www.tari.com/) uses their own gRPC API and requires a different command line:
|
||||
```
|
||||
p2pool.exe --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine tari://IP:port TARI_WALLET_ADDRESS
|
||||
```
|
||||
Merge mining is available for testing in Tari's [v1.0.0-pre.14 release](https://github.com/tari-project/tari/releases/tag/v1.0.0-pre.14) (Esmeralda testnet).
|
||||
### Tari merge mining
|
||||
|
||||
[Tari](https://www.tari.com/) uses their own gRPC API and requires a different command line:
|
||||
```
|
||||
./p2pool --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine tari://TARI_NODE_IP:18102 TARI_WALLET_ADDRESS
|
||||
```
|
||||
and on the Tari side
|
||||
```
|
||||
./minotari_node --grpc-enabled --mining-enabled
|
||||
```
|
||||
TARI_NODE_IP is 127.0.0.1 if you run both on the same machine (recommended).
|
||||
|
||||
Merge mining is available on Tari's mainnet:
|
||||
- Download [Tari suite](https://github.com/tari-project/tari/releases/latest) for your OS
|
||||
- Run Minotari node and wait until in synchronizes
|
||||
- Run Minotari console wallet to create a Tari wallet
|
||||
- Copy the interactive wallet address from the "Receive" tab of the wallet
|
||||
- Paste it into the P2Pool command line above
|
||||
- Everything is ready now to start merge mining Monero and Tari!
|
||||
|
||||
Note that Tari will be mined in solo mode (only full Tari blocks can be mined for now). This doesn't affect P2Pool payouts - they will stay the same.
|
||||
|
||||
### GNU/Linux
|
||||
|
||||
@@ -349,3 +365,13 @@ If you'd like to support further development of Monero P2Pool, you're welcome to
|
||||
```
|
||||
44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg
|
||||
```
|
||||
|
||||
Starting from v4.6, P2Pool will also have an ability to merge mine donations for the author.
|
||||
|
||||
Note that this will not affect your hashrate or payouts in any way. P2Pool will always (100% of the time) keep mining to your configured Monero wallet address, but it might also use the available merge mining capacity to donate to the author.
|
||||
|
||||
If you merge mine yourself, your settings will take priority.
|
||||
|
||||
The merge mining donation runs without a donation server - there is no "phoning home" to a server, everything is done through the P2Pool's network in a decentralized way.
|
||||
|
||||
To opt out of this, build P2Pool with `-DWITH_MERGE_MINING_DONATION=OFF` in cmake command line. Due to the architecture of the decentralized P2Pool network, your node will still relay donation messages to other nodes even if you opted out (but it will not process them).
|
||||
|
||||
+48
-12
@@ -17,23 +17,33 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
|
||||
set(GENERAL_FLAGS "${GENERAL_FLAGS} -fno-omit-frame-pointer -fsanitize=address")
|
||||
endif()
|
||||
|
||||
set(WARNING_FLAGS "-Wall -Wextra -Wcast-qual -Wlogical-op -Wundef -Wformat=2 -Wpointer-arith -Werror -Wno-error=inline")
|
||||
set(WARNING_FLAGS "-Wall -Wextra -Wcast-qual -Wlogical-op -Wundef -Wformat=2 -Wpointer-arith -Werror -Wno-error=inline -Wno-error=unused-function")
|
||||
|
||||
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.5.0)
|
||||
set(WARNING_FLAGS "${WARNING_FLAGS} -Wstrict-overflow=2")
|
||||
endif()
|
||||
|
||||
if (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 15))
|
||||
set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-error=cpp")
|
||||
endif()
|
||||
|
||||
if (DISABLE_WARNINGS)
|
||||
set(WARNING_FLAGS "-w")
|
||||
endif()
|
||||
|
||||
if (DEV_WITH_TSAN OR DEV_WITH_UBSAN OR DEV_WITH_ASAN OR DEV_DEBUG)
|
||||
set(OPTIMIZATION_FLAGS "-Og -g -ftrapv")
|
||||
if (DEV_WITH_TSAN OR DEV_WITH_UBSAN OR DEV_WITH_ASAN OR DEV_DEBUG OR (CMAKE_BUILD_TYPE STREQUAL "Debug") OR (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
|
||||
add_definitions(-DDEBUG_BUILD)
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(OPTIMIZATION_FLAGS "-O0")
|
||||
else()
|
||||
set(OPTIMIZATION_FLAGS "-Og")
|
||||
endif()
|
||||
set(OPTIMIZATION_FLAGS "${OPTIMIZATION_FLAGS} -g3 -ftrapv")
|
||||
else()
|
||||
set(OPTIMIZATION_FLAGS "-O3 -ffast-math -s")
|
||||
endif()
|
||||
|
||||
if (WITH_LTO)
|
||||
if (WITH_LTO AND (CMAKE_BUILD_TYPE STREQUAL "Release"))
|
||||
set(OPTIMIZATION_FLAGS "${OPTIMIZATION_FLAGS} -flto=auto -fuse-linker-plugin")
|
||||
endif()
|
||||
|
||||
@@ -42,10 +52,16 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU)
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}")
|
||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}")
|
||||
set(CMAKE_C_FLAGS_DEBUG "")
|
||||
set(CMAKE_C_FLAGS_RELEASE "")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "")
|
||||
set(CMAKE_C_FLAGS_MINSIZEREL "")
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "")
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "")
|
||||
set(CMAKE_CXX_FLAGS_MINSIZEREL "")
|
||||
|
||||
if (WIN32)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
|
||||
@@ -66,6 +82,10 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES MSVC)
|
||||
set(WARNING_FLAGS "/W0")
|
||||
endif()
|
||||
|
||||
if (DEV_DEBUG OR (CMAKE_BUILD_TYPE STREQUAL "Debug") OR (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
|
||||
add_definitions(-DDEBUG_BUILD)
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_FLAGS_DEBUG "${GENERAL_FLAGS} ${WARNING_FLAGS} ${SECURITY_FLAGS} /Od /Ob0 /Zi /MTd")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${GENERAL_FLAGS} ${WARNING_FLAGS} ${SECURITY_FLAGS} /Od /Ob0 /Zi /MTd")
|
||||
|
||||
@@ -93,25 +113,41 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES Clang)
|
||||
set(GENERAL_FLAGS "${GENERAL_FLAGS} -mfix-cortex-a53-835769")
|
||||
endif()
|
||||
|
||||
set(WARNING_FLAGS "-Wall -Wextra -Wno-undefined-internal -Wunreachable-code-aggressive -Wmissing-prototypes -Wmissing-variable-declarations -Werror")
|
||||
set(WARNING_FLAGS "-Wall -Wextra -Wno-unused-function -Wno-undefined-internal -Wunreachable-code-aggressive -Wmissing-prototypes -Wmissing-variable-declarations -Werror")
|
||||
|
||||
if (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 20))
|
||||
set(WARNING_FLAGS "${WARNING_FLAGS} -Wno-error=cpp")
|
||||
endif()
|
||||
|
||||
if (DISABLE_WARNINGS)
|
||||
set(WARNING_FLAGS "-w")
|
||||
endif()
|
||||
|
||||
if (DEV_WITH_MSAN OR DEV_DEBUG)
|
||||
set(OPTIMIZATION_FLAGS "-Og -g -ftrapv")
|
||||
if (DEV_WITH_MSAN OR DEV_DEBUG OR (CMAKE_BUILD_TYPE STREQUAL "Debug") OR (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
|
||||
add_definitions(-DDEBUG_BUILD)
|
||||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(OPTIMIZATION_FLAGS "-O0")
|
||||
else()
|
||||
set(OPTIMIZATION_FLAGS "-Og")
|
||||
endif()
|
||||
set(OPTIMIZATION_FLAGS "${OPTIMIZATION_FLAGS} -g3 -ftrapv")
|
||||
else()
|
||||
set(OPTIMIZATION_FLAGS "-O3 -ffast-math -funroll-loops -fmerge-all-constants")
|
||||
endif()
|
||||
|
||||
if (WITH_LTO)
|
||||
if (WITH_LTO AND (CMAKE_BUILD_TYPE STREQUAL "Release"))
|
||||
set(OPTIMIZATION_FLAGS "${OPTIMIZATION_FLAGS} -flto")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}")
|
||||
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}")
|
||||
set(CMAKE_C_FLAGS_DEBUG "")
|
||||
set(CMAKE_C_FLAGS_RELEASE "")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "")
|
||||
set(CMAKE_C_FLAGS_MINSIZEREL "")
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${GENERAL_FLAGS} ${WARNING_FLAGS} ${OPTIMIZATION_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "")
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "")
|
||||
set(CMAKE_CXX_FLAGS_MINSIZEREL "")
|
||||
endif()
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
@echo off
|
||||
"..\cppcheck-main\bin\cppcheck.exe" ../src/*.cpp -D__cppcheck__ -DSIZE_MAX=UINT64_MAX -DRAPIDJSON_ENDIAN=RAPIDJSON_LITTLEENDIAN -D_WIN32=1 -D_WIN64=1 -DWIN32=1 -D_WINDOWS=1 -DNDEBUG=1 -DWITH_GRPC=1 -DPROTOBUF_ENABLE_DEBUG_LOGGING_MAY_LEAK_PII=0 -DWITH_RANDOMX=1 -DWITH_UPNP=1 -DCURL_STATICLIB=1 -DWIN32_LEAN_AND_MEAN=1 -D_WIN32_WINNT=0x0600 -D_DISABLE_VECTOR_ANNOTATION=1 -D_DISABLE_STRING_ANNOTATION=1 -DZMQ_STATIC=1 -DHAVE_BITSCANREVERSE64=1 -DRAPIDJSON_PARSE_DEFAULT_FLAGS=kParseTrailingCommasFlag -DMINIUPNP_STATICLIB=1 -DCARES_STATICLIB=1 -DCMAKE_INTDIR="Release" -D__SSE2__=1 -D_MSC_VER=1929 --platform=win64 --std=c++17 --enable=all --inconclusive --inline-suppr --template="{file}:{line}:{id}{inconclusive: INCONCLUSIVE} {message}" --includes-file=includes.txt --suppressions-list=suppressions.txt --output-file=errors_full.txt --max-ctu-depth=3 --check-level=exhaustive --checkers-report=checkers_report.txt
|
||||
"..\cppcheck-main\bin\cppcheck.exe" ../src/*.cpp -D__cppcheck__ -DSIZE_MAX=UINT64_MAX -DRAPIDJSON_ENDIAN=RAPIDJSON_LITTLEENDIAN -D_WIN32=1 -D_WIN64=1 -DWIN32=1 -D_WINDOWS=1 -DNDEBUG=1 -DWITH_GRPC=1 -DPROTOBUF_ENABLE_DEBUG_LOGGING_MAY_LEAK_PII=0 -DWITH_RANDOMX=1 -DWITH_UPNP=1 -DWITH_TLS=1 -DWITH_MERGE_MINING_DONATION=1 -DCURL_STATICLIB=1 -DWIN32_LEAN_AND_MEAN=1 -D_WIN32_WINNT=0x0600 -D_DISABLE_VECTOR_ANNOTATION=1 -D_DISABLE_STRING_ANNOTATION=1 -DZMQ_STATIC=1 -DHAVE_BITSCANREVERSE64=1 -DRAPIDJSON_PARSE_DEFAULT_FLAGS=kParseTrailingCommasFlag -DMINIUPNP_STATICLIB=1 -DCARES_STATICLIB=1 -DCMAKE_INTDIR="Release" -D__SSE2__=1 -D_MSC_VER=1929 --platform=win64 --std=c++17 --enable=all --inconclusive --inline-suppr --template="{file}:{line}:{id}{inconclusive: INCONCLUSIVE} {message}" --includes-file=includes.txt --suppressions-list=suppressions.txt --output-file=errors_full.txt --max-ctu-depth=3 --check-level=exhaustive --checkers-report=checkers_report.txt
|
||||
|
||||
findstr /V /C:"external\src" errors_full.txt > errors_filtered0.txt
|
||||
findstr /V /C:":checkersReport" errors_filtered0.txt > errors_filtered.txt
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
npyscreen==4.10.5
|
||||
MarkupSafe==2.0.1
|
||||
jinja2==3.1.5
|
||||
jinja2==3.1.6
|
||||
|
||||
+23
-11
@@ -60,7 +60,7 @@ p2pool.exe --host 127.0.0.1 --host node.monerodevs.org --rpc-port 18089 --zmq-po
|
||||
|
||||
### Merge mining
|
||||
|
||||
Merge mining will be available in P2Pool after the fork on October 12th, 2024. Version 4.0 or newer is required to use it.
|
||||
Merge mining is available in P2Pool since the fork that happened on October 12th, 2024. Version 4.0 or newer is required to use it.
|
||||
|
||||
- Blockchains that will support [Merge mining RPC API](https://github.com/SChernykh/p2pool/blob/master/docs/MERGE_MINING.MD#proposed-rpc-api)
|
||||
- [Townforge](https://townforge.net/) supports it in their [tmp-mm branch](https://git.townforge.net/townforge/townforge/src/branch/tmp-mm) (not released yet)
|
||||
@@ -69,15 +69,27 @@ Merge mining will be available in P2Pool after the fork on October 12th, 2024. V
|
||||
p2pool.exe --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine IP:port YOUR_WALLET_ADDRESS_ON_ANOTHER_BLOCKCHAIN
|
||||
```
|
||||
|
||||
- [Tari](https://www.tari.com/) uses their own gRPC API and requires a different command line:
|
||||
```
|
||||
./p2pool --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine tari://IP:port TARI_WALLET_ADDRESS
|
||||
```
|
||||
and on the Tari side
|
||||
```
|
||||
./minotari_node --grpc-enabled --mining-enabled
|
||||
```
|
||||
Merge mining is available for testing in Tari's [latest release](https://github.com/tari-project/tari/releases) (Esmeralda testnet).
|
||||
### Tari merge mining
|
||||
|
||||
[Tari](https://www.tari.com/) uses their own gRPC API and requires a different command line:
|
||||
```
|
||||
./p2pool --wallet YOUR_MONERO_WALLET_ADDRESS --merge-mine tari://TARI_NODE_IP:18102 TARI_WALLET_ADDRESS
|
||||
```
|
||||
and on the Tari side
|
||||
```
|
||||
./minotari_node --grpc-enabled --mining-enabled
|
||||
```
|
||||
TARI_NODE_IP is 127.0.0.1 if you run both on the same machine (recommended).
|
||||
|
||||
Merge mining is available on Tari's mainnet:
|
||||
- Download [Tari suite](https://github.com/tari-project/tari/releases/latest) for your OS
|
||||
- Run Minotari node and wait until in synchronizes
|
||||
- Run Minotari console wallet to create a Tari wallet
|
||||
- Copy the interactive wallet address from the "Receive" tab of the wallet
|
||||
- Paste it into the P2Pool command line above
|
||||
- Everything is ready now to start merge mining Monero and Tari!
|
||||
|
||||
Note that Tari will be mined in solo mode (only full Tari blocks can be mined for now). This doesn't affect P2Pool payouts - they will stay the same.
|
||||
|
||||
### TLS
|
||||
|
||||
@@ -101,4 +113,4 @@ P2Pool supports certificate pinning on RPC-SSL connections via `--rpc-ssl-finger
|
||||
openssl x509 -in rpc_ssl.crt -pubkey -noout -inform pem | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
|
||||
```
|
||||
|
||||
By default, `rpc_ssl.crt` can be found in Monero data directory: `/home/username/.bitmonero/rpc_ssl.crt` on Linux and `C:\ProgramData\bitmonero\rpc_ssl.crt` on Windows.
|
||||
By default, `rpc_ssl.crt` can be found in Monero data directory: `/home/username/.bitmonero/rpc_ssl.crt` on Linux and `C:\ProgramData\bitmonero\rpc_ssl.crt` on Windows.
|
||||
|
||||
Vendored
+1
-1
Submodule external/src/RandomX updated: d1c5a15507...e613bfe364
@@ -59,6 +59,7 @@ static const char* BaseNode_method_names[] = {
|
||||
"/tari.rpc.BaseNode/GetShardKey",
|
||||
"/tari.rpc.BaseNode/GetTemplateRegistrations",
|
||||
"/tari.rpc.BaseNode/GetSideChainUtxos",
|
||||
"/tari.rpc.BaseNode/GetNetworkState",
|
||||
};
|
||||
|
||||
std::unique_ptr< BaseNode::Stub> BaseNode::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) {
|
||||
@@ -104,6 +105,7 @@ BaseNode::Stub::Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel,
|
||||
, rpcmethod_GetShardKey_(BaseNode_method_names[33], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
|
||||
, rpcmethod_GetTemplateRegistrations_(BaseNode_method_names[34], options.suffix_for_stats(),::grpc::internal::RpcMethod::SERVER_STREAMING, channel)
|
||||
, rpcmethod_GetSideChainUtxos_(BaseNode_method_names[35], options.suffix_for_stats(),::grpc::internal::RpcMethod::SERVER_STREAMING, channel)
|
||||
, rpcmethod_GetNetworkState_(BaseNode_method_names[36], options.suffix_for_stats(),::grpc::internal::RpcMethod::NORMAL_RPC, channel)
|
||||
{}
|
||||
|
||||
::grpc::ClientReader< ::tari::rpc::BlockHeaderResponse>* BaseNode::Stub::ListHeadersRaw(::grpc::ClientContext* context, const ::tari::rpc::ListHeadersRequest& request) {
|
||||
@@ -850,6 +852,29 @@ void BaseNode::Stub::async::GetSideChainUtxos(::grpc::ClientContext* context, co
|
||||
return ::grpc::internal::ClientAsyncReaderFactory< ::tari::rpc::GetSideChainUtxosResponse>::Create(channel_.get(), cq, rpcmethod_GetSideChainUtxos_, context, request, false, nullptr);
|
||||
}
|
||||
|
||||
::grpc::Status BaseNode::Stub::GetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::tari::rpc::GetNetworkStateResponse* response) {
|
||||
return ::grpc::internal::BlockingUnaryCall< ::tari::rpc::GetNetworkStateRequest, ::tari::rpc::GetNetworkStateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), rpcmethod_GetNetworkState_, context, request, response);
|
||||
}
|
||||
|
||||
void BaseNode::Stub::async::GetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest* request, ::tari::rpc::GetNetworkStateResponse* response, std::function<void(::grpc::Status)> f) {
|
||||
::grpc::internal::CallbackUnaryCall< ::tari::rpc::GetNetworkStateRequest, ::tari::rpc::GetNetworkStateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetNetworkState_, context, request, response, std::move(f));
|
||||
}
|
||||
|
||||
void BaseNode::Stub::async::GetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest* request, ::tari::rpc::GetNetworkStateResponse* response, ::grpc::ClientUnaryReactor* reactor) {
|
||||
::grpc::internal::ClientCallbackUnaryFactory::Create< ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(stub_->channel_.get(), stub_->rpcmethod_GetNetworkState_, context, request, response, reactor);
|
||||
}
|
||||
|
||||
::grpc::ClientAsyncResponseReader< ::tari::rpc::GetNetworkStateResponse>* BaseNode::Stub::PrepareAsyncGetNetworkStateRaw(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) {
|
||||
return ::grpc::internal::ClientAsyncResponseReaderHelper::Create< ::tari::rpc::GetNetworkStateResponse, ::tari::rpc::GetNetworkStateRequest, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(channel_.get(), cq, rpcmethod_GetNetworkState_, context, request);
|
||||
}
|
||||
|
||||
::grpc::ClientAsyncResponseReader< ::tari::rpc::GetNetworkStateResponse>* BaseNode::Stub::AsyncGetNetworkStateRaw(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) {
|
||||
auto* result =
|
||||
this->PrepareAsyncGetNetworkStateRaw(context, request, cq);
|
||||
result->StartCall();
|
||||
return result;
|
||||
}
|
||||
|
||||
BaseNode::Service::Service() {
|
||||
AddMethod(new ::grpc::internal::RpcServiceMethod(
|
||||
BaseNode_method_names[0],
|
||||
@@ -1211,6 +1236,16 @@ BaseNode::Service::Service() {
|
||||
::grpc::ServerWriter<::tari::rpc::GetSideChainUtxosResponse>* writer) {
|
||||
return service->GetSideChainUtxos(ctx, req, writer);
|
||||
}, this)));
|
||||
AddMethod(new ::grpc::internal::RpcServiceMethod(
|
||||
BaseNode_method_names[36],
|
||||
::grpc::internal::RpcMethod::NORMAL_RPC,
|
||||
new ::grpc::internal::RpcMethodHandler< BaseNode::Service, ::tari::rpc::GetNetworkStateRequest, ::tari::rpc::GetNetworkStateResponse, ::grpc::protobuf::MessageLite, ::grpc::protobuf::MessageLite>(
|
||||
[](BaseNode::Service* service,
|
||||
::grpc::ServerContext* ctx,
|
||||
const ::tari::rpc::GetNetworkStateRequest* req,
|
||||
::tari::rpc::GetNetworkStateResponse* resp) {
|
||||
return service->GetNetworkState(ctx, req, resp);
|
||||
}, this)));
|
||||
}
|
||||
|
||||
BaseNode::Service::~Service() {
|
||||
@@ -1468,6 +1503,13 @@ BaseNode::Service::~Service() {
|
||||
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
|
||||
}
|
||||
|
||||
::grpc::Status BaseNode::Service::GetNetworkState(::grpc::ServerContext* context, const ::tari::rpc::GetNetworkStateRequest* request, ::tari::rpc::GetNetworkStateResponse* response) {
|
||||
(void) context;
|
||||
(void) request;
|
||||
(void) response;
|
||||
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
|
||||
}
|
||||
|
||||
|
||||
} // namespace tari
|
||||
} // namespace rpc
|
||||
|
||||
+161
-4
@@ -367,6 +367,13 @@ class BaseNode final {
|
||||
std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::tari::rpc::GetSideChainUtxosResponse>> PrepareAsyncGetSideChainUtxos(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest& request, ::grpc::CompletionQueue* cq) {
|
||||
return std::unique_ptr< ::grpc::ClientAsyncReaderInterface< ::tari::rpc::GetSideChainUtxosResponse>>(PrepareAsyncGetSideChainUtxosRaw(context, request, cq));
|
||||
}
|
||||
virtual ::grpc::Status GetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::tari::rpc::GetNetworkStateResponse* response) = 0;
|
||||
std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::tari::rpc::GetNetworkStateResponse>> AsyncGetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) {
|
||||
return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::tari::rpc::GetNetworkStateResponse>>(AsyncGetNetworkStateRaw(context, request, cq));
|
||||
}
|
||||
std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::tari::rpc::GetNetworkStateResponse>> PrepareAsyncGetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) {
|
||||
return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::tari::rpc::GetNetworkStateResponse>>(PrepareAsyncGetNetworkStateRaw(context, request, cq));
|
||||
}
|
||||
class async_interface {
|
||||
public:
|
||||
virtual ~async_interface() {}
|
||||
@@ -462,6 +469,8 @@ class BaseNode final {
|
||||
// Get templates
|
||||
virtual void GetTemplateRegistrations(::grpc::ClientContext* context, const ::tari::rpc::GetTemplateRegistrationsRequest* request, ::grpc::ClientReadReactor< ::tari::rpc::GetTemplateRegistrationResponse>* reactor) = 0;
|
||||
virtual void GetSideChainUtxos(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest* request, ::grpc::ClientReadReactor< ::tari::rpc::GetSideChainUtxosResponse>* reactor) = 0;
|
||||
virtual void GetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest* request, ::tari::rpc::GetNetworkStateResponse* response, std::function<void(::grpc::Status)>) = 0;
|
||||
virtual void GetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest* request, ::tari::rpc::GetNetworkStateResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
|
||||
};
|
||||
typedef class async_interface experimental_async_interface;
|
||||
virtual class async_interface* async() { return nullptr; }
|
||||
@@ -551,6 +560,8 @@ class BaseNode final {
|
||||
virtual ::grpc::ClientReaderInterface< ::tari::rpc::GetSideChainUtxosResponse>* GetSideChainUtxosRaw(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest& request) = 0;
|
||||
virtual ::grpc::ClientAsyncReaderInterface< ::tari::rpc::GetSideChainUtxosResponse>* AsyncGetSideChainUtxosRaw(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest& request, ::grpc::CompletionQueue* cq, void* tag) = 0;
|
||||
virtual ::grpc::ClientAsyncReaderInterface< ::tari::rpc::GetSideChainUtxosResponse>* PrepareAsyncGetSideChainUtxosRaw(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest& request, ::grpc::CompletionQueue* cq) = 0;
|
||||
virtual ::grpc::ClientAsyncResponseReaderInterface< ::tari::rpc::GetNetworkStateResponse>* AsyncGetNetworkStateRaw(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) = 0;
|
||||
virtual ::grpc::ClientAsyncResponseReaderInterface< ::tari::rpc::GetNetworkStateResponse>* PrepareAsyncGetNetworkStateRaw(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) = 0;
|
||||
};
|
||||
class Stub final : public StubInterface {
|
||||
public:
|
||||
@@ -831,6 +842,13 @@ class BaseNode final {
|
||||
std::unique_ptr< ::grpc::ClientAsyncReader< ::tari::rpc::GetSideChainUtxosResponse>> PrepareAsyncGetSideChainUtxos(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest& request, ::grpc::CompletionQueue* cq) {
|
||||
return std::unique_ptr< ::grpc::ClientAsyncReader< ::tari::rpc::GetSideChainUtxosResponse>>(PrepareAsyncGetSideChainUtxosRaw(context, request, cq));
|
||||
}
|
||||
::grpc::Status GetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::tari::rpc::GetNetworkStateResponse* response) override;
|
||||
std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::tari::rpc::GetNetworkStateResponse>> AsyncGetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) {
|
||||
return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::tari::rpc::GetNetworkStateResponse>>(AsyncGetNetworkStateRaw(context, request, cq));
|
||||
}
|
||||
std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::tari::rpc::GetNetworkStateResponse>> PrepareAsyncGetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) {
|
||||
return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::tari::rpc::GetNetworkStateResponse>>(PrepareAsyncGetNetworkStateRaw(context, request, cq));
|
||||
}
|
||||
class async final :
|
||||
public StubInterface::async_interface {
|
||||
public:
|
||||
@@ -894,6 +912,8 @@ class BaseNode final {
|
||||
void GetShardKey(::grpc::ClientContext* context, const ::tari::rpc::GetShardKeyRequest* request, ::tari::rpc::GetShardKeyResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
|
||||
void GetTemplateRegistrations(::grpc::ClientContext* context, const ::tari::rpc::GetTemplateRegistrationsRequest* request, ::grpc::ClientReadReactor< ::tari::rpc::GetTemplateRegistrationResponse>* reactor) override;
|
||||
void GetSideChainUtxos(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest* request, ::grpc::ClientReadReactor< ::tari::rpc::GetSideChainUtxosResponse>* reactor) override;
|
||||
void GetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest* request, ::tari::rpc::GetNetworkStateResponse* response, std::function<void(::grpc::Status)>) override;
|
||||
void GetNetworkState(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest* request, ::tari::rpc::GetNetworkStateResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
|
||||
private:
|
||||
friend class Stub;
|
||||
explicit async(Stub* stub): stub_(stub) { }
|
||||
@@ -989,6 +1009,8 @@ class BaseNode final {
|
||||
::grpc::ClientReader< ::tari::rpc::GetSideChainUtxosResponse>* GetSideChainUtxosRaw(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest& request) override;
|
||||
::grpc::ClientAsyncReader< ::tari::rpc::GetSideChainUtxosResponse>* AsyncGetSideChainUtxosRaw(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest& request, ::grpc::CompletionQueue* cq, void* tag) override;
|
||||
::grpc::ClientAsyncReader< ::tari::rpc::GetSideChainUtxosResponse>* PrepareAsyncGetSideChainUtxosRaw(::grpc::ClientContext* context, const ::tari::rpc::GetSideChainUtxosRequest& request, ::grpc::CompletionQueue* cq) override;
|
||||
::grpc::ClientAsyncResponseReader< ::tari::rpc::GetNetworkStateResponse>* AsyncGetNetworkStateRaw(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) override;
|
||||
::grpc::ClientAsyncResponseReader< ::tari::rpc::GetNetworkStateResponse>* PrepareAsyncGetNetworkStateRaw(::grpc::ClientContext* context, const ::tari::rpc::GetNetworkStateRequest& request, ::grpc::CompletionQueue* cq) override;
|
||||
const ::grpc::internal::RpcMethod rpcmethod_ListHeaders_;
|
||||
const ::grpc::internal::RpcMethod rpcmethod_GetHeaderByHash_;
|
||||
const ::grpc::internal::RpcMethod rpcmethod_GetBlocks_;
|
||||
@@ -1025,6 +1047,7 @@ class BaseNode final {
|
||||
const ::grpc::internal::RpcMethod rpcmethod_GetShardKey_;
|
||||
const ::grpc::internal::RpcMethod rpcmethod_GetTemplateRegistrations_;
|
||||
const ::grpc::internal::RpcMethod rpcmethod_GetSideChainUtxos_;
|
||||
const ::grpc::internal::RpcMethod rpcmethod_GetNetworkState_;
|
||||
};
|
||||
static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
|
||||
|
||||
@@ -1100,6 +1123,7 @@ class BaseNode final {
|
||||
// Get templates
|
||||
virtual ::grpc::Status GetTemplateRegistrations(::grpc::ServerContext* context, const ::tari::rpc::GetTemplateRegistrationsRequest* request, ::grpc::ServerWriter< ::tari::rpc::GetTemplateRegistrationResponse>* writer);
|
||||
virtual ::grpc::Status GetSideChainUtxos(::grpc::ServerContext* context, const ::tari::rpc::GetSideChainUtxosRequest* request, ::grpc::ServerWriter< ::tari::rpc::GetSideChainUtxosResponse>* writer);
|
||||
virtual ::grpc::Status GetNetworkState(::grpc::ServerContext* context, const ::tari::rpc::GetNetworkStateRequest* request, ::tari::rpc::GetNetworkStateResponse* response);
|
||||
};
|
||||
template <class BaseClass>
|
||||
class WithAsyncMethod_ListHeaders : public BaseClass {
|
||||
@@ -1821,7 +1845,27 @@ class BaseNode final {
|
||||
::grpc::Service::RequestAsyncServerStreaming(35, context, request, writer, new_call_cq, notification_cq, tag);
|
||||
}
|
||||
};
|
||||
typedef WithAsyncMethod_ListHeaders<WithAsyncMethod_GetHeaderByHash<WithAsyncMethod_GetBlocks<WithAsyncMethod_GetBlockTiming<WithAsyncMethod_GetConstants<WithAsyncMethod_GetBlockSize<WithAsyncMethod_GetBlockFees<WithAsyncMethod_GetVersion<WithAsyncMethod_CheckForUpdates<WithAsyncMethod_GetTokensInCirculation<WithAsyncMethod_GetNetworkDifficulty<WithAsyncMethod_GetNewBlockTemplate<WithAsyncMethod_GetNewBlock<WithAsyncMethod_GetNewBlockWithCoinbases<WithAsyncMethod_GetNewBlockTemplateWithCoinbases<WithAsyncMethod_GetNewBlockBlob<WithAsyncMethod_SubmitBlock<WithAsyncMethod_SubmitBlockBlob<WithAsyncMethod_SubmitTransaction<WithAsyncMethod_GetSyncInfo<WithAsyncMethod_GetSyncProgress<WithAsyncMethod_GetTipInfo<WithAsyncMethod_SearchKernels<WithAsyncMethod_SearchUtxos<WithAsyncMethod_FetchMatchingUtxos<WithAsyncMethod_GetPeers<WithAsyncMethod_GetMempoolTransactions<WithAsyncMethod_TransactionState<WithAsyncMethod_Identify<WithAsyncMethod_GetNetworkStatus<WithAsyncMethod_ListConnectedPeers<WithAsyncMethod_GetMempoolStats<WithAsyncMethod_GetActiveValidatorNodes<WithAsyncMethod_GetShardKey<WithAsyncMethod_GetTemplateRegistrations<WithAsyncMethod_GetSideChainUtxos<Service > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > AsyncService;
|
||||
template <class BaseClass>
|
||||
class WithAsyncMethod_GetNetworkState : public BaseClass {
|
||||
private:
|
||||
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
|
||||
public:
|
||||
WithAsyncMethod_GetNetworkState() {
|
||||
::grpc::Service::MarkMethodAsync(36);
|
||||
}
|
||||
~WithAsyncMethod_GetNetworkState() override {
|
||||
BaseClassMustBeDerivedFromService(this);
|
||||
}
|
||||
// disable synchronous version of this method
|
||||
::grpc::Status GetNetworkState(::grpc::ServerContext* /*context*/, const ::tari::rpc::GetNetworkStateRequest* /*request*/, ::tari::rpc::GetNetworkStateResponse* /*response*/) override {
|
||||
abort();
|
||||
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
|
||||
}
|
||||
void RequestGetNetworkState(::grpc::ServerContext* context, ::tari::rpc::GetNetworkStateRequest* request, ::grpc::ServerAsyncResponseWriter< ::tari::rpc::GetNetworkStateResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
|
||||
::grpc::Service::RequestAsyncUnary(36, context, request, response, new_call_cq, notification_cq, tag);
|
||||
}
|
||||
};
|
||||
typedef WithAsyncMethod_ListHeaders<WithAsyncMethod_GetHeaderByHash<WithAsyncMethod_GetBlocks<WithAsyncMethod_GetBlockTiming<WithAsyncMethod_GetConstants<WithAsyncMethod_GetBlockSize<WithAsyncMethod_GetBlockFees<WithAsyncMethod_GetVersion<WithAsyncMethod_CheckForUpdates<WithAsyncMethod_GetTokensInCirculation<WithAsyncMethod_GetNetworkDifficulty<WithAsyncMethod_GetNewBlockTemplate<WithAsyncMethod_GetNewBlock<WithAsyncMethod_GetNewBlockWithCoinbases<WithAsyncMethod_GetNewBlockTemplateWithCoinbases<WithAsyncMethod_GetNewBlockBlob<WithAsyncMethod_SubmitBlock<WithAsyncMethod_SubmitBlockBlob<WithAsyncMethod_SubmitTransaction<WithAsyncMethod_GetSyncInfo<WithAsyncMethod_GetSyncProgress<WithAsyncMethod_GetTipInfo<WithAsyncMethod_SearchKernels<WithAsyncMethod_SearchUtxos<WithAsyncMethod_FetchMatchingUtxos<WithAsyncMethod_GetPeers<WithAsyncMethod_GetMempoolTransactions<WithAsyncMethod_TransactionState<WithAsyncMethod_Identify<WithAsyncMethod_GetNetworkStatus<WithAsyncMethod_ListConnectedPeers<WithAsyncMethod_GetMempoolStats<WithAsyncMethod_GetActiveValidatorNodes<WithAsyncMethod_GetShardKey<WithAsyncMethod_GetTemplateRegistrations<WithAsyncMethod_GetSideChainUtxos<WithAsyncMethod_GetNetworkState<Service > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > AsyncService;
|
||||
template <class BaseClass>
|
||||
class WithCallbackMethod_ListHeaders : public BaseClass {
|
||||
private:
|
||||
@@ -2734,7 +2778,34 @@ class BaseNode final {
|
||||
virtual ::grpc::ServerWriteReactor< ::tari::rpc::GetSideChainUtxosResponse>* GetSideChainUtxos(
|
||||
::grpc::CallbackServerContext* /*context*/, const ::tari::rpc::GetSideChainUtxosRequest* /*request*/) { return nullptr; }
|
||||
};
|
||||
typedef WithCallbackMethod_ListHeaders<WithCallbackMethod_GetHeaderByHash<WithCallbackMethod_GetBlocks<WithCallbackMethod_GetBlockTiming<WithCallbackMethod_GetConstants<WithCallbackMethod_GetBlockSize<WithCallbackMethod_GetBlockFees<WithCallbackMethod_GetVersion<WithCallbackMethod_CheckForUpdates<WithCallbackMethod_GetTokensInCirculation<WithCallbackMethod_GetNetworkDifficulty<WithCallbackMethod_GetNewBlockTemplate<WithCallbackMethod_GetNewBlock<WithCallbackMethod_GetNewBlockWithCoinbases<WithCallbackMethod_GetNewBlockTemplateWithCoinbases<WithCallbackMethod_GetNewBlockBlob<WithCallbackMethod_SubmitBlock<WithCallbackMethod_SubmitBlockBlob<WithCallbackMethod_SubmitTransaction<WithCallbackMethod_GetSyncInfo<WithCallbackMethod_GetSyncProgress<WithCallbackMethod_GetTipInfo<WithCallbackMethod_SearchKernels<WithCallbackMethod_SearchUtxos<WithCallbackMethod_FetchMatchingUtxos<WithCallbackMethod_GetPeers<WithCallbackMethod_GetMempoolTransactions<WithCallbackMethod_TransactionState<WithCallbackMethod_Identify<WithCallbackMethod_GetNetworkStatus<WithCallbackMethod_ListConnectedPeers<WithCallbackMethod_GetMempoolStats<WithCallbackMethod_GetActiveValidatorNodes<WithCallbackMethod_GetShardKey<WithCallbackMethod_GetTemplateRegistrations<WithCallbackMethod_GetSideChainUtxos<Service > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > CallbackService;
|
||||
template <class BaseClass>
|
||||
class WithCallbackMethod_GetNetworkState : public BaseClass {
|
||||
private:
|
||||
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
|
||||
public:
|
||||
WithCallbackMethod_GetNetworkState() {
|
||||
::grpc::Service::MarkMethodCallback(36,
|
||||
new ::grpc::internal::CallbackUnaryHandler< ::tari::rpc::GetNetworkStateRequest, ::tari::rpc::GetNetworkStateResponse>(
|
||||
[this](
|
||||
::grpc::CallbackServerContext* context, const ::tari::rpc::GetNetworkStateRequest* request, ::tari::rpc::GetNetworkStateResponse* response) { return this->GetNetworkState(context, request, response); }));}
|
||||
void SetMessageAllocatorFor_GetNetworkState(
|
||||
::grpc::MessageAllocator< ::tari::rpc::GetNetworkStateRequest, ::tari::rpc::GetNetworkStateResponse>* allocator) {
|
||||
::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(36);
|
||||
static_cast<::grpc::internal::CallbackUnaryHandler< ::tari::rpc::GetNetworkStateRequest, ::tari::rpc::GetNetworkStateResponse>*>(handler)
|
||||
->SetMessageAllocator(allocator);
|
||||
}
|
||||
~WithCallbackMethod_GetNetworkState() override {
|
||||
BaseClassMustBeDerivedFromService(this);
|
||||
}
|
||||
// disable synchronous version of this method
|
||||
::grpc::Status GetNetworkState(::grpc::ServerContext* /*context*/, const ::tari::rpc::GetNetworkStateRequest* /*request*/, ::tari::rpc::GetNetworkStateResponse* /*response*/) override {
|
||||
abort();
|
||||
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
|
||||
}
|
||||
virtual ::grpc::ServerUnaryReactor* GetNetworkState(
|
||||
::grpc::CallbackServerContext* /*context*/, const ::tari::rpc::GetNetworkStateRequest* /*request*/, ::tari::rpc::GetNetworkStateResponse* /*response*/) { return nullptr; }
|
||||
};
|
||||
typedef WithCallbackMethod_ListHeaders<WithCallbackMethod_GetHeaderByHash<WithCallbackMethod_GetBlocks<WithCallbackMethod_GetBlockTiming<WithCallbackMethod_GetConstants<WithCallbackMethod_GetBlockSize<WithCallbackMethod_GetBlockFees<WithCallbackMethod_GetVersion<WithCallbackMethod_CheckForUpdates<WithCallbackMethod_GetTokensInCirculation<WithCallbackMethod_GetNetworkDifficulty<WithCallbackMethod_GetNewBlockTemplate<WithCallbackMethod_GetNewBlock<WithCallbackMethod_GetNewBlockWithCoinbases<WithCallbackMethod_GetNewBlockTemplateWithCoinbases<WithCallbackMethod_GetNewBlockBlob<WithCallbackMethod_SubmitBlock<WithCallbackMethod_SubmitBlockBlob<WithCallbackMethod_SubmitTransaction<WithCallbackMethod_GetSyncInfo<WithCallbackMethod_GetSyncProgress<WithCallbackMethod_GetTipInfo<WithCallbackMethod_SearchKernels<WithCallbackMethod_SearchUtxos<WithCallbackMethod_FetchMatchingUtxos<WithCallbackMethod_GetPeers<WithCallbackMethod_GetMempoolTransactions<WithCallbackMethod_TransactionState<WithCallbackMethod_Identify<WithCallbackMethod_GetNetworkStatus<WithCallbackMethod_ListConnectedPeers<WithCallbackMethod_GetMempoolStats<WithCallbackMethod_GetActiveValidatorNodes<WithCallbackMethod_GetShardKey<WithCallbackMethod_GetTemplateRegistrations<WithCallbackMethod_GetSideChainUtxos<WithCallbackMethod_GetNetworkState<Service > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > CallbackService;
|
||||
typedef CallbackService ExperimentalCallbackService;
|
||||
template <class BaseClass>
|
||||
class WithGenericMethod_ListHeaders : public BaseClass {
|
||||
@@ -3349,6 +3420,23 @@ class BaseNode final {
|
||||
}
|
||||
};
|
||||
template <class BaseClass>
|
||||
class WithGenericMethod_GetNetworkState : public BaseClass {
|
||||
private:
|
||||
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
|
||||
public:
|
||||
WithGenericMethod_GetNetworkState() {
|
||||
::grpc::Service::MarkMethodGeneric(36);
|
||||
}
|
||||
~WithGenericMethod_GetNetworkState() override {
|
||||
BaseClassMustBeDerivedFromService(this);
|
||||
}
|
||||
// disable synchronous version of this method
|
||||
::grpc::Status GetNetworkState(::grpc::ServerContext* /*context*/, const ::tari::rpc::GetNetworkStateRequest* /*request*/, ::tari::rpc::GetNetworkStateResponse* /*response*/) override {
|
||||
abort();
|
||||
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
|
||||
}
|
||||
};
|
||||
template <class BaseClass>
|
||||
class WithRawMethod_ListHeaders : public BaseClass {
|
||||
private:
|
||||
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
|
||||
@@ -4069,6 +4157,26 @@ class BaseNode final {
|
||||
}
|
||||
};
|
||||
template <class BaseClass>
|
||||
class WithRawMethod_GetNetworkState : public BaseClass {
|
||||
private:
|
||||
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
|
||||
public:
|
||||
WithRawMethod_GetNetworkState() {
|
||||
::grpc::Service::MarkMethodRaw(36);
|
||||
}
|
||||
~WithRawMethod_GetNetworkState() override {
|
||||
BaseClassMustBeDerivedFromService(this);
|
||||
}
|
||||
// disable synchronous version of this method
|
||||
::grpc::Status GetNetworkState(::grpc::ServerContext* /*context*/, const ::tari::rpc::GetNetworkStateRequest* /*request*/, ::tari::rpc::GetNetworkStateResponse* /*response*/) override {
|
||||
abort();
|
||||
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
|
||||
}
|
||||
void RequestGetNetworkState(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
|
||||
::grpc::Service::RequestAsyncUnary(36, context, request, response, new_call_cq, notification_cq, tag);
|
||||
}
|
||||
};
|
||||
template <class BaseClass>
|
||||
class WithRawCallbackMethod_ListHeaders : public BaseClass {
|
||||
private:
|
||||
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
|
||||
@@ -4861,6 +4969,28 @@ class BaseNode final {
|
||||
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/) { return nullptr; }
|
||||
};
|
||||
template <class BaseClass>
|
||||
class WithRawCallbackMethod_GetNetworkState : public BaseClass {
|
||||
private:
|
||||
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
|
||||
public:
|
||||
WithRawCallbackMethod_GetNetworkState() {
|
||||
::grpc::Service::MarkMethodRawCallback(36,
|
||||
new ::grpc::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
|
||||
[this](
|
||||
::grpc::CallbackServerContext* context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->GetNetworkState(context, request, response); }));
|
||||
}
|
||||
~WithRawCallbackMethod_GetNetworkState() override {
|
||||
BaseClassMustBeDerivedFromService(this);
|
||||
}
|
||||
// disable synchronous version of this method
|
||||
::grpc::Status GetNetworkState(::grpc::ServerContext* /*context*/, const ::tari::rpc::GetNetworkStateRequest* /*request*/, ::tari::rpc::GetNetworkStateResponse* /*response*/) override {
|
||||
abort();
|
||||
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
|
||||
}
|
||||
virtual ::grpc::ServerUnaryReactor* GetNetworkState(
|
||||
::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/) { return nullptr; }
|
||||
};
|
||||
template <class BaseClass>
|
||||
class WithStreamedUnaryMethod_GetHeaderByHash : public BaseClass {
|
||||
private:
|
||||
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
|
||||
@@ -5508,7 +5638,34 @@ class BaseNode final {
|
||||
// replace default version of method with streamed unary
|
||||
virtual ::grpc::Status StreamedGetShardKey(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::tari::rpc::GetShardKeyRequest,::tari::rpc::GetShardKeyResponse>* server_unary_streamer) = 0;
|
||||
};
|
||||
typedef WithStreamedUnaryMethod_GetHeaderByHash<WithStreamedUnaryMethod_GetBlockTiming<WithStreamedUnaryMethod_GetConstants<WithStreamedUnaryMethod_GetBlockSize<WithStreamedUnaryMethod_GetBlockFees<WithStreamedUnaryMethod_GetVersion<WithStreamedUnaryMethod_CheckForUpdates<WithStreamedUnaryMethod_GetNewBlockTemplate<WithStreamedUnaryMethod_GetNewBlock<WithStreamedUnaryMethod_GetNewBlockWithCoinbases<WithStreamedUnaryMethod_GetNewBlockTemplateWithCoinbases<WithStreamedUnaryMethod_GetNewBlockBlob<WithStreamedUnaryMethod_SubmitBlock<WithStreamedUnaryMethod_SubmitBlockBlob<WithStreamedUnaryMethod_SubmitTransaction<WithStreamedUnaryMethod_GetSyncInfo<WithStreamedUnaryMethod_GetSyncProgress<WithStreamedUnaryMethod_GetTipInfo<WithStreamedUnaryMethod_TransactionState<WithStreamedUnaryMethod_Identify<WithStreamedUnaryMethod_GetNetworkStatus<WithStreamedUnaryMethod_ListConnectedPeers<WithStreamedUnaryMethod_GetMempoolStats<WithStreamedUnaryMethod_GetShardKey<Service > > > > > > > > > > > > > > > > > > > > > > > > StreamedUnaryService;
|
||||
template <class BaseClass>
|
||||
class WithStreamedUnaryMethod_GetNetworkState : public BaseClass {
|
||||
private:
|
||||
void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
|
||||
public:
|
||||
WithStreamedUnaryMethod_GetNetworkState() {
|
||||
::grpc::Service::MarkMethodStreamed(36,
|
||||
new ::grpc::internal::StreamedUnaryHandler<
|
||||
::tari::rpc::GetNetworkStateRequest, ::tari::rpc::GetNetworkStateResponse>(
|
||||
[this](::grpc::ServerContext* context,
|
||||
::grpc::ServerUnaryStreamer<
|
||||
::tari::rpc::GetNetworkStateRequest, ::tari::rpc::GetNetworkStateResponse>* streamer) {
|
||||
return this->StreamedGetNetworkState(context,
|
||||
streamer);
|
||||
}));
|
||||
}
|
||||
~WithStreamedUnaryMethod_GetNetworkState() override {
|
||||
BaseClassMustBeDerivedFromService(this);
|
||||
}
|
||||
// disable regular version of this method
|
||||
::grpc::Status GetNetworkState(::grpc::ServerContext* /*context*/, const ::tari::rpc::GetNetworkStateRequest* /*request*/, ::tari::rpc::GetNetworkStateResponse* /*response*/) override {
|
||||
abort();
|
||||
return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
|
||||
}
|
||||
// replace default version of method with streamed unary
|
||||
virtual ::grpc::Status StreamedGetNetworkState(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::tari::rpc::GetNetworkStateRequest,::tari::rpc::GetNetworkStateResponse>* server_unary_streamer) = 0;
|
||||
};
|
||||
typedef WithStreamedUnaryMethod_GetHeaderByHash<WithStreamedUnaryMethod_GetBlockTiming<WithStreamedUnaryMethod_GetConstants<WithStreamedUnaryMethod_GetBlockSize<WithStreamedUnaryMethod_GetBlockFees<WithStreamedUnaryMethod_GetVersion<WithStreamedUnaryMethod_CheckForUpdates<WithStreamedUnaryMethod_GetNewBlockTemplate<WithStreamedUnaryMethod_GetNewBlock<WithStreamedUnaryMethod_GetNewBlockWithCoinbases<WithStreamedUnaryMethod_GetNewBlockTemplateWithCoinbases<WithStreamedUnaryMethod_GetNewBlockBlob<WithStreamedUnaryMethod_SubmitBlock<WithStreamedUnaryMethod_SubmitBlockBlob<WithStreamedUnaryMethod_SubmitTransaction<WithStreamedUnaryMethod_GetSyncInfo<WithStreamedUnaryMethod_GetSyncProgress<WithStreamedUnaryMethod_GetTipInfo<WithStreamedUnaryMethod_TransactionState<WithStreamedUnaryMethod_Identify<WithStreamedUnaryMethod_GetNetworkStatus<WithStreamedUnaryMethod_ListConnectedPeers<WithStreamedUnaryMethod_GetMempoolStats<WithStreamedUnaryMethod_GetShardKey<WithStreamedUnaryMethod_GetNetworkState<Service > > > > > > > > > > > > > > > > > > > > > > > > > StreamedUnaryService;
|
||||
template <class BaseClass>
|
||||
class WithSplitStreamingMethod_ListHeaders : public BaseClass {
|
||||
private:
|
||||
@@ -5834,7 +5991,7 @@ class BaseNode final {
|
||||
virtual ::grpc::Status StreamedGetSideChainUtxos(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::tari::rpc::GetSideChainUtxosRequest,::tari::rpc::GetSideChainUtxosResponse>* server_split_streamer) = 0;
|
||||
};
|
||||
typedef WithSplitStreamingMethod_ListHeaders<WithSplitStreamingMethod_GetBlocks<WithSplitStreamingMethod_GetTokensInCirculation<WithSplitStreamingMethod_GetNetworkDifficulty<WithSplitStreamingMethod_SearchKernels<WithSplitStreamingMethod_SearchUtxos<WithSplitStreamingMethod_FetchMatchingUtxos<WithSplitStreamingMethod_GetPeers<WithSplitStreamingMethod_GetMempoolTransactions<WithSplitStreamingMethod_GetActiveValidatorNodes<WithSplitStreamingMethod_GetTemplateRegistrations<WithSplitStreamingMethod_GetSideChainUtxos<Service > > > > > > > > > > > > SplitStreamedService;
|
||||
typedef WithSplitStreamingMethod_ListHeaders<WithStreamedUnaryMethod_GetHeaderByHash<WithSplitStreamingMethod_GetBlocks<WithStreamedUnaryMethod_GetBlockTiming<WithStreamedUnaryMethod_GetConstants<WithStreamedUnaryMethod_GetBlockSize<WithStreamedUnaryMethod_GetBlockFees<WithStreamedUnaryMethod_GetVersion<WithStreamedUnaryMethod_CheckForUpdates<WithSplitStreamingMethod_GetTokensInCirculation<WithSplitStreamingMethod_GetNetworkDifficulty<WithStreamedUnaryMethod_GetNewBlockTemplate<WithStreamedUnaryMethod_GetNewBlock<WithStreamedUnaryMethod_GetNewBlockWithCoinbases<WithStreamedUnaryMethod_GetNewBlockTemplateWithCoinbases<WithStreamedUnaryMethod_GetNewBlockBlob<WithStreamedUnaryMethod_SubmitBlock<WithStreamedUnaryMethod_SubmitBlockBlob<WithStreamedUnaryMethod_SubmitTransaction<WithStreamedUnaryMethod_GetSyncInfo<WithStreamedUnaryMethod_GetSyncProgress<WithStreamedUnaryMethod_GetTipInfo<WithSplitStreamingMethod_SearchKernels<WithSplitStreamingMethod_SearchUtxos<WithSplitStreamingMethod_FetchMatchingUtxos<WithSplitStreamingMethod_GetPeers<WithSplitStreamingMethod_GetMempoolTransactions<WithStreamedUnaryMethod_TransactionState<WithStreamedUnaryMethod_Identify<WithStreamedUnaryMethod_GetNetworkStatus<WithStreamedUnaryMethod_ListConnectedPeers<WithStreamedUnaryMethod_GetMempoolStats<WithSplitStreamingMethod_GetActiveValidatorNodes<WithStreamedUnaryMethod_GetShardKey<WithSplitStreamingMethod_GetTemplateRegistrations<WithSplitStreamingMethod_GetSideChainUtxos<Service > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > StreamedService;
|
||||
typedef WithSplitStreamingMethod_ListHeaders<WithStreamedUnaryMethod_GetHeaderByHash<WithSplitStreamingMethod_GetBlocks<WithStreamedUnaryMethod_GetBlockTiming<WithStreamedUnaryMethod_GetConstants<WithStreamedUnaryMethod_GetBlockSize<WithStreamedUnaryMethod_GetBlockFees<WithStreamedUnaryMethod_GetVersion<WithStreamedUnaryMethod_CheckForUpdates<WithSplitStreamingMethod_GetTokensInCirculation<WithSplitStreamingMethod_GetNetworkDifficulty<WithStreamedUnaryMethod_GetNewBlockTemplate<WithStreamedUnaryMethod_GetNewBlock<WithStreamedUnaryMethod_GetNewBlockWithCoinbases<WithStreamedUnaryMethod_GetNewBlockTemplateWithCoinbases<WithStreamedUnaryMethod_GetNewBlockBlob<WithStreamedUnaryMethod_SubmitBlock<WithStreamedUnaryMethod_SubmitBlockBlob<WithStreamedUnaryMethod_SubmitTransaction<WithStreamedUnaryMethod_GetSyncInfo<WithStreamedUnaryMethod_GetSyncProgress<WithStreamedUnaryMethod_GetTipInfo<WithSplitStreamingMethod_SearchKernels<WithSplitStreamingMethod_SearchUtxos<WithSplitStreamingMethod_FetchMatchingUtxos<WithSplitStreamingMethod_GetPeers<WithSplitStreamingMethod_GetMempoolTransactions<WithStreamedUnaryMethod_TransactionState<WithStreamedUnaryMethod_Identify<WithStreamedUnaryMethod_GetNetworkStatus<WithStreamedUnaryMethod_ListConnectedPeers<WithStreamedUnaryMethod_GetMempoolStats<WithSplitStreamingMethod_GetActiveValidatorNodes<WithStreamedUnaryMethod_GetShardKey<WithSplitStreamingMethod_GetTemplateRegistrations<WithSplitStreamingMethod_GetSideChainUtxos<WithStreamedUnaryMethod_GetNetworkState<Service > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > StreamedService;
|
||||
};
|
||||
|
||||
} // namespace rpc
|
||||
|
||||
+983
-297
File diff suppressed because it is too large
Load Diff
+990
-39
File diff suppressed because it is too large
Load Diff
+29
-2
@@ -99,6 +99,7 @@ service BaseNode {
|
||||
// Get templates
|
||||
rpc GetTemplateRegistrations(GetTemplateRegistrationsRequest) returns (stream GetTemplateRegistrationResponse);
|
||||
rpc GetSideChainUtxos(GetSideChainUtxosRequest) returns (stream GetSideChainUtxosResponse);
|
||||
rpc GetNetworkState(GetNetworkStateRequest) returns (GetNetworkStateResponse);
|
||||
}
|
||||
|
||||
message GetAssetMetadataRequest {
|
||||
@@ -160,6 +161,7 @@ message TipInfoResponse {
|
||||
MetaData metadata = 1;
|
||||
bool initial_sync_achieved = 2;
|
||||
BaseNodeState base_node_state = 3;
|
||||
bool failed_checkpoints = 4;
|
||||
}
|
||||
|
||||
enum BaseNodeState{
|
||||
@@ -217,6 +219,8 @@ message NetworkDifficultyResponse {
|
||||
uint64 pow_algo = 5;
|
||||
uint64 sha3x_estimated_hash_rate = 6;
|
||||
uint64 randomx_estimated_hash_rate = 7;
|
||||
uint64 num_coinbases = 8;
|
||||
repeated bytes coinbase_extras = 9;
|
||||
}
|
||||
|
||||
// A generic single value response for a specific height
|
||||
@@ -339,10 +343,11 @@ message MetaData {
|
||||
uint64 best_block_height = 1;
|
||||
// The block hash of the current tip of the longest valid chain, or `None` for an empty chain
|
||||
bytes best_block_hash = 2;
|
||||
// This is the min height this node can provide complete blocks for. A 0 here means this node is archival and can provide complete blocks for every height.
|
||||
uint64 pruned_height = 6;
|
||||
// The current geometric mean of the pow of the chain tip, or `None` if there is no chain
|
||||
bytes accumulated_difficulty = 5;
|
||||
// This is the min height this node can provide complete blocks for. A 0 here means this node is archival and can provide complete blocks for every height.
|
||||
uint64 pruned_height = 6;
|
||||
uint64 timestamp = 7;
|
||||
}
|
||||
|
||||
message SyncInfoResponse {
|
||||
@@ -355,6 +360,8 @@ message SyncProgressResponse {
|
||||
uint64 tip_height = 1;
|
||||
uint64 local_height = 2;
|
||||
SyncState state = 3;
|
||||
string short_desc = 4;
|
||||
uint64 initial_connected_peers = 5;
|
||||
}
|
||||
|
||||
enum SyncState {
|
||||
@@ -515,3 +522,23 @@ message GetSideChainUtxosResponse {
|
||||
repeated TransactionOutput outputs = 2;
|
||||
}
|
||||
|
||||
message GetNetworkStateRequest {
|
||||
}
|
||||
|
||||
message GetNetworkStateResponse {
|
||||
// metadata
|
||||
MetaData metadata = 1;
|
||||
// has the base node synced
|
||||
bool initial_sync_achieved = 2;
|
||||
//current state of the base node
|
||||
BaseNodeState base_node_state = 3;
|
||||
// do we have failed checkpoints
|
||||
bool failed_checkpoints = 4;
|
||||
// The block reward of the next tip
|
||||
uint64 reward = 5;
|
||||
// estimate sha3x hash rate
|
||||
uint64 sha3x_estimated_hash_rate = 6;
|
||||
// estimate randomx hash rate
|
||||
uint64 randomx_estimated_hash_rate = 7;
|
||||
}
|
||||
|
||||
|
||||
+106
-47
@@ -107,6 +107,9 @@ inline constexpr BlockHeader::Impl_::Impl_(
|
||||
output_mr_(
|
||||
&::google::protobuf::internal::fixed_address_empty_string,
|
||||
::_pbi::ConstantInitialized()),
|
||||
block_output_mr_(
|
||||
&::google::protobuf::internal::fixed_address_empty_string,
|
||||
::_pbi::ConstantInitialized()),
|
||||
kernel_mr_(
|
||||
&::google::protobuf::internal::fixed_address_empty_string,
|
||||
::_pbi::ConstantInitialized()),
|
||||
@@ -149,7 +152,8 @@ inline constexpr NewBlockTemplate::Impl_::Impl_(
|
||||
::_pbi::ConstantInitialized) noexcept
|
||||
: _cached_size_{0},
|
||||
header_{nullptr},
|
||||
body_{nullptr} {}
|
||||
body_{nullptr},
|
||||
is_mempool_in_sync_{false} {}
|
||||
|
||||
template <typename>
|
||||
PROTOBUF_CONSTEXPR NewBlockTemplate::NewBlockTemplate(::_pbi::ConstantInitialized)
|
||||
@@ -227,6 +231,7 @@ const ::uint32_t
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::BlockHeader, _impl_.prev_hash_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::BlockHeader, _impl_.timestamp_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::BlockHeader, _impl_.output_mr_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::BlockHeader, _impl_.block_output_mr_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::BlockHeader, _impl_.kernel_mr_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::BlockHeader, _impl_.input_mr_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::BlockHeader, _impl_.total_kernel_offset_),
|
||||
@@ -247,6 +252,7 @@ const ::uint32_t
|
||||
~0u,
|
||||
~0u,
|
||||
~0u,
|
||||
~0u,
|
||||
0,
|
||||
~0u,
|
||||
~0u,
|
||||
@@ -326,19 +332,21 @@ const ::uint32_t
|
||||
~0u, // no sizeof(Split)
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::NewBlockTemplate, _impl_.header_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::NewBlockTemplate, _impl_.body_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::NewBlockTemplate, _impl_.is_mempool_in_sync_),
|
||||
0,
|
||||
1,
|
||||
~0u,
|
||||
};
|
||||
|
||||
static const ::_pbi::MigrationSchema
|
||||
schemas[] ABSL_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
|
||||
{0, 24, -1, sizeof(::tari::rpc::BlockHeader)},
|
||||
{40, -1, -1, sizeof(::tari::rpc::ProofOfWork)},
|
||||
{50, -1, -1, sizeof(::tari::rpc::PowAlgo)},
|
||||
{59, 69, -1, sizeof(::tari::rpc::Block)},
|
||||
{71, 81, -1, sizeof(::tari::rpc::HistoricalBlock)},
|
||||
{83, 97, -1, sizeof(::tari::rpc::NewBlockHeaderTemplate)},
|
||||
{103, 113, -1, sizeof(::tari::rpc::NewBlockTemplate)},
|
||||
{0, 25, -1, sizeof(::tari::rpc::BlockHeader)},
|
||||
{42, -1, -1, sizeof(::tari::rpc::ProofOfWork)},
|
||||
{52, -1, -1, sizeof(::tari::rpc::PowAlgo)},
|
||||
{61, 71, -1, sizeof(::tari::rpc::Block)},
|
||||
{73, 83, -1, sizeof(::tari::rpc::HistoricalBlock)},
|
||||
{85, 99, -1, sizeof(::tari::rpc::NewBlockHeaderTemplate)},
|
||||
{105, 116, -1, sizeof(::tari::rpc::NewBlockTemplate)},
|
||||
};
|
||||
static const ::_pb::Message* const file_default_instances[] = {
|
||||
&::tari::rpc::_BlockHeader_default_instance_._instance,
|
||||
@@ -352,31 +360,33 @@ static const ::_pb::Message* const file_default_instances[] = {
|
||||
const char descriptor_table_protodef_block_2eproto[] ABSL_ATTRIBUTE_SECTION_VARIABLE(
|
||||
protodesc_cold) = {
|
||||
"\n\013block.proto\022\010tari.rpc\032\021transaction.pro"
|
||||
"to\"\361\002\n\013BlockHeader\022\014\n\004hash\030\001 \001(\014\022\017\n\007vers"
|
||||
"to\"\212\003\n\013BlockHeader\022\014\n\004hash\030\001 \001(\014\022\017\n\007vers"
|
||||
"ion\030\002 \001(\r\022\016\n\006height\030\003 \001(\004\022\021\n\tprev_hash\030\004"
|
||||
" \001(\014\022\021\n\ttimestamp\030\005 \001(\004\022\021\n\toutput_mr\030\006 \001"
|
||||
"(\014\022\021\n\tkernel_mr\030\010 \001(\014\022\020\n\010input_mr\030\t \001(\014\022"
|
||||
"\033\n\023total_kernel_offset\030\n \001(\014\022\r\n\005nonce\030\013 "
|
||||
"\001(\004\022\"\n\003pow\030\014 \001(\0132\025.tari.rpc.ProofOfWork\022"
|
||||
"\027\n\017kernel_mmr_size\030\r \001(\004\022\027\n\017output_mmr_s"
|
||||
"ize\030\016 \001(\004\022\033\n\023total_script_offset\030\017 \001(\014\022\031"
|
||||
"\n\021validator_node_mr\030\020 \001(\014\022\033\n\023validator_n"
|
||||
"ode_size\030\021 \001(\004\"1\n\013ProofOfWork\022\020\n\010pow_alg"
|
||||
"o\030\001 \001(\004\022\020\n\010pow_data\030\004 \001(\014\"o\n\007PowAlgo\022,\n\010"
|
||||
"pow_algo\030\001 \001(\0162\032.tari.rpc.PowAlgo.PowAlg"
|
||||
"os\"6\n\010PowAlgos\022\025\n\021POW_ALGOS_RANDOMX\020\000\022\023\n"
|
||||
"\017POW_ALGOS_SHA3X\020\001\"U\n\005Block\022%\n\006header\030\001 "
|
||||
"\001(\0132\025.tari.rpc.BlockHeader\022%\n\004body\030\002 \001(\013"
|
||||
"2\027.tari.rpc.AggregateBody\"H\n\017HistoricalB"
|
||||
"lock\022\025\n\rconfirmations\030\001 \001(\004\022\036\n\005block\030\002 \001"
|
||||
"(\0132\017.tari.rpc.Block\"\252\001\n\026NewBlockHeaderTe"
|
||||
"mplate\022\017\n\007version\030\001 \001(\r\022\016\n\006height\030\002 \001(\004\022"
|
||||
"\021\n\tprev_hash\030\003 \001(\014\022\033\n\023total_kernel_offse"
|
||||
"t\030\004 \001(\014\022\"\n\003pow\030\005 \001(\0132\025.tari.rpc.ProofOfW"
|
||||
"ork\022\033\n\023total_script_offset\030\007 \001(\014\"k\n\020NewB"
|
||||
"lockTemplate\0220\n\006header\030\001 \001(\0132 .tari.rpc."
|
||||
"NewBlockHeaderTemplate\022%\n\004body\030\002 \001(\0132\027.t"
|
||||
"ari.rpc.AggregateBodyb\006proto3"
|
||||
"(\014\022\027\n\017block_output_mr\030\007 \001(\014\022\021\n\tkernel_mr"
|
||||
"\030\010 \001(\014\022\020\n\010input_mr\030\t \001(\014\022\033\n\023total_kernel"
|
||||
"_offset\030\n \001(\014\022\r\n\005nonce\030\013 \001(\004\022\"\n\003pow\030\014 \001("
|
||||
"\0132\025.tari.rpc.ProofOfWork\022\027\n\017kernel_mmr_s"
|
||||
"ize\030\r \001(\004\022\027\n\017output_mmr_size\030\016 \001(\004\022\033\n\023to"
|
||||
"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\"o\n\007PowAlgo\022,\n\010pow_algo\030\001 \001(\0162"
|
||||
"\032.tari.rpc.PowAlgo.PowAlgos\"6\n\010PowAlgos\022"
|
||||
"\025\n\021POW_ALGOS_RANDOMX\020\000\022\023\n\017POW_ALGOS_SHA3"
|
||||
"X\020\001\"U\n\005Block\022%\n\006header\030\001 \001(\0132\025.tari.rpc."
|
||||
"BlockHeader\022%\n\004body\030\002 \001(\0132\027.tari.rpc.Agg"
|
||||
"regateBody\"H\n\017HistoricalBlock\022\025\n\rconfirm"
|
||||
"ations\030\001 \001(\004\022\036\n\005block\030\002 \001(\0132\017.tari.rpc.B"
|
||||
"lock\"\252\001\n\026NewBlockHeaderTemplate\022\017\n\007versi"
|
||||
"on\030\001 \001(\r\022\016\n\006height\030\002 \001(\004\022\021\n\tprev_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_sc"
|
||||
"ript_offset\030\007 \001(\014\"\207\001\n\020NewBlockTemplate\0220"
|
||||
"\n\006header\030\001 \001(\0132 .tari.rpc.NewBlockHeader"
|
||||
"Template\022%\n\004body\030\002 \001(\0132\027.tari.rpc.Aggreg"
|
||||
"ateBody\022\032\n\022is_mempool_in_sync\030\003 \001(\010b\006pro"
|
||||
"to3"
|
||||
};
|
||||
static const ::_pbi::DescriptorTable* const descriptor_table_block_2eproto_deps[1] =
|
||||
{
|
||||
@@ -386,7 +396,7 @@ static ::absl::once_flag descriptor_table_block_2eproto_once;
|
||||
const ::_pbi::DescriptorTable descriptor_table_block_2eproto = {
|
||||
false,
|
||||
false,
|
||||
1029,
|
||||
1083,
|
||||
descriptor_table_protodef_block_2eproto,
|
||||
"block.proto",
|
||||
&descriptor_table_block_2eproto_once,
|
||||
@@ -459,6 +469,7 @@ inline PROTOBUF_NDEBUG_INLINE BlockHeader::Impl_::Impl_(
|
||||
hash_(arena, from.hash_),
|
||||
prev_hash_(arena, from.prev_hash_),
|
||||
output_mr_(arena, from.output_mr_),
|
||||
block_output_mr_(arena, from.block_output_mr_),
|
||||
kernel_mr_(arena, from.kernel_mr_),
|
||||
input_mr_(arena, from.input_mr_),
|
||||
total_kernel_offset_(arena, from.total_kernel_offset_),
|
||||
@@ -495,6 +506,7 @@ inline PROTOBUF_NDEBUG_INLINE BlockHeader::Impl_::Impl_(
|
||||
hash_(arena),
|
||||
prev_hash_(arena),
|
||||
output_mr_(arena),
|
||||
block_output_mr_(arena),
|
||||
kernel_mr_(arena),
|
||||
input_mr_(arena),
|
||||
total_kernel_offset_(arena),
|
||||
@@ -520,6 +532,7 @@ inline void BlockHeader::SharedDtor() {
|
||||
_impl_.hash_.Destroy();
|
||||
_impl_.prev_hash_.Destroy();
|
||||
_impl_.output_mr_.Destroy();
|
||||
_impl_.block_output_mr_.Destroy();
|
||||
_impl_.kernel_mr_.Destroy();
|
||||
_impl_.input_mr_.Destroy();
|
||||
_impl_.total_kernel_offset_.Destroy();
|
||||
@@ -553,6 +566,7 @@ PROTOBUF_NOINLINE void BlockHeader::Clear() {
|
||||
_impl_.hash_.ClearToEmpty();
|
||||
_impl_.prev_hash_.ClearToEmpty();
|
||||
_impl_.output_mr_.ClearToEmpty();
|
||||
_impl_.block_output_mr_.ClearToEmpty();
|
||||
_impl_.kernel_mr_.ClearToEmpty();
|
||||
_impl_.input_mr_.ClearToEmpty();
|
||||
_impl_.total_kernel_offset_.ClearToEmpty();
|
||||
@@ -578,15 +592,15 @@ const char* BlockHeader::_InternalParse(
|
||||
|
||||
|
||||
PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
|
||||
const ::_pbi::TcParseTable<5, 16, 1, 0, 2> BlockHeader::_table_ = {
|
||||
const ::_pbi::TcParseTable<5, 17, 1, 0, 2> BlockHeader::_table_ = {
|
||||
{
|
||||
PROTOBUF_FIELD_OFFSET(BlockHeader, _impl_._has_bits_),
|
||||
0, // no _extensions_
|
||||
17, 248, // max_field_number, fast_idx_mask
|
||||
offsetof(decltype(_table_), field_lookup_table),
|
||||
4294836288, // skipmap
|
||||
4294836224, // skipmap
|
||||
offsetof(decltype(_table_), field_entries),
|
||||
16, // num_field_entries
|
||||
17, // num_field_entries
|
||||
1, // num_aux_entries
|
||||
offsetof(decltype(_table_), aux_entries),
|
||||
&_BlockHeader_default_instance_._instance,
|
||||
@@ -614,7 +628,9 @@ const ::_pbi::TcParseTable<5, 16, 1, 0, 2> BlockHeader::_table_ = {
|
||||
// bytes output_mr = 6;
|
||||
{::_pbi::TcParser::FastBS1,
|
||||
{50, 63, 0, PROTOBUF_FIELD_OFFSET(BlockHeader, _impl_.output_mr_)}},
|
||||
{::_pbi::TcParser::MiniParse, {}},
|
||||
// bytes block_output_mr = 7;
|
||||
{::_pbi::TcParser::FastBS1,
|
||||
{58, 63, 0, PROTOBUF_FIELD_OFFSET(BlockHeader, _impl_.block_output_mr_)}},
|
||||
// bytes kernel_mr = 8;
|
||||
{::_pbi::TcParser::FastBS1,
|
||||
{66, 63, 0, PROTOBUF_FIELD_OFFSET(BlockHeader, _impl_.kernel_mr_)}},
|
||||
@@ -680,6 +696,9 @@ const ::_pbi::TcParseTable<5, 16, 1, 0, 2> BlockHeader::_table_ = {
|
||||
// bytes output_mr = 6;
|
||||
{PROTOBUF_FIELD_OFFSET(BlockHeader, _impl_.output_mr_), -1, 0,
|
||||
(0 | ::_fl::kFcSingular | ::_fl::kBytes | ::_fl::kRepAString)},
|
||||
// bytes block_output_mr = 7;
|
||||
{PROTOBUF_FIELD_OFFSET(BlockHeader, _impl_.block_output_mr_), -1, 0,
|
||||
(0 | ::_fl::kFcSingular | ::_fl::kBytes | ::_fl::kRepAString)},
|
||||
// bytes kernel_mr = 8;
|
||||
{PROTOBUF_FIELD_OFFSET(BlockHeader, _impl_.kernel_mr_), -1, 0,
|
||||
(0 | ::_fl::kFcSingular | ::_fl::kBytes | ::_fl::kRepAString)},
|
||||
@@ -762,6 +781,12 @@ const ::_pbi::TcParseTable<5, 16, 1, 0, 2> BlockHeader::_table_ = {
|
||||
target = stream->WriteBytesMaybeAliased(6, _s, target);
|
||||
}
|
||||
|
||||
// bytes block_output_mr = 7;
|
||||
if (!this->_internal_block_output_mr().empty()) {
|
||||
const std::string& _s = this->_internal_block_output_mr();
|
||||
target = stream->WriteBytesMaybeAliased(7, _s, target);
|
||||
}
|
||||
|
||||
// bytes kernel_mr = 8;
|
||||
if (!this->_internal_kernel_mr().empty()) {
|
||||
const std::string& _s = this->_internal_kernel_mr();
|
||||
@@ -862,6 +887,12 @@ const ::_pbi::TcParseTable<5, 16, 1, 0, 2> BlockHeader::_table_ = {
|
||||
this->_internal_output_mr());
|
||||
}
|
||||
|
||||
// bytes block_output_mr = 7;
|
||||
if (!this->_internal_block_output_mr().empty()) {
|
||||
total_size += 1 + ::google::protobuf::internal::WireFormatLite::BytesSize(
|
||||
this->_internal_block_output_mr());
|
||||
}
|
||||
|
||||
// bytes kernel_mr = 8;
|
||||
if (!this->_internal_kernel_mr().empty()) {
|
||||
total_size += 1 + ::google::protobuf::internal::WireFormatLite::BytesSize(
|
||||
@@ -963,6 +994,9 @@ void BlockHeader::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::goo
|
||||
if (!from._internal_output_mr().empty()) {
|
||||
_this->_internal_set_output_mr(from._internal_output_mr());
|
||||
}
|
||||
if (!from._internal_block_output_mr().empty()) {
|
||||
_this->_internal_set_block_output_mr(from._internal_block_output_mr());
|
||||
}
|
||||
if (!from._internal_kernel_mr().empty()) {
|
||||
_this->_internal_set_kernel_mr(from._internal_kernel_mr());
|
||||
}
|
||||
@@ -1033,6 +1067,7 @@ void BlockHeader::InternalSwap(BlockHeader* PROTOBUF_RESTRICT other) {
|
||||
::_pbi::ArenaStringPtr::InternalSwap(&_impl_.hash_, &other->_impl_.hash_, arena);
|
||||
::_pbi::ArenaStringPtr::InternalSwap(&_impl_.prev_hash_, &other->_impl_.prev_hash_, arena);
|
||||
::_pbi::ArenaStringPtr::InternalSwap(&_impl_.output_mr_, &other->_impl_.output_mr_, arena);
|
||||
::_pbi::ArenaStringPtr::InternalSwap(&_impl_.block_output_mr_, &other->_impl_.block_output_mr_, arena);
|
||||
::_pbi::ArenaStringPtr::InternalSwap(&_impl_.kernel_mr_, &other->_impl_.kernel_mr_, arena);
|
||||
::_pbi::ArenaStringPtr::InternalSwap(&_impl_.input_mr_, &other->_impl_.input_mr_, arena);
|
||||
::_pbi::ArenaStringPtr::InternalSwap(&_impl_.total_kernel_offset_, &other->_impl_.total_kernel_offset_, arena);
|
||||
@@ -2366,6 +2401,7 @@ NewBlockTemplate::NewBlockTemplate(
|
||||
_impl_.body_ = (cached_has_bits & 0x00000002u) ? ::google::protobuf::Message::CopyConstruct<::tari::rpc::AggregateBody>(
|
||||
arena, *from._impl_.body_)
|
||||
: nullptr;
|
||||
_impl_.is_mempool_in_sync_ = from._impl_.is_mempool_in_sync_;
|
||||
|
||||
// @@protoc_insertion_point(copy_constructor:tari.rpc.NewBlockTemplate)
|
||||
}
|
||||
@@ -2379,9 +2415,9 @@ inline void NewBlockTemplate::SharedCtor(::_pb::Arena* arena) {
|
||||
::memset(reinterpret_cast<char *>(&_impl_) +
|
||||
offsetof(Impl_, header_),
|
||||
0,
|
||||
offsetof(Impl_, body_) -
|
||||
offsetof(Impl_, is_mempool_in_sync_) -
|
||||
offsetof(Impl_, header_) +
|
||||
sizeof(Impl_::body_));
|
||||
sizeof(Impl_::is_mempool_in_sync_));
|
||||
}
|
||||
NewBlockTemplate::~NewBlockTemplate() {
|
||||
// @@protoc_insertion_point(destructor:tari.rpc.NewBlockTemplate)
|
||||
@@ -2427,6 +2463,7 @@ PROTOBUF_NOINLINE void NewBlockTemplate::Clear() {
|
||||
_impl_.body_->Clear();
|
||||
}
|
||||
}
|
||||
_impl_.is_mempool_in_sync_ = false;
|
||||
_impl_._has_bits_.Clear();
|
||||
_internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
|
||||
}
|
||||
@@ -2439,15 +2476,15 @@ const char* NewBlockTemplate::_InternalParse(
|
||||
|
||||
|
||||
PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
|
||||
const ::_pbi::TcParseTable<1, 2, 2, 0, 2> NewBlockTemplate::_table_ = {
|
||||
const ::_pbi::TcParseTable<2, 3, 2, 0, 2> NewBlockTemplate::_table_ = {
|
||||
{
|
||||
PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_._has_bits_),
|
||||
0, // no _extensions_
|
||||
2, 8, // max_field_number, fast_idx_mask
|
||||
3, 24, // max_field_number, fast_idx_mask
|
||||
offsetof(decltype(_table_), field_lookup_table),
|
||||
4294967292, // skipmap
|
||||
4294967288, // skipmap
|
||||
offsetof(decltype(_table_), field_entries),
|
||||
2, // num_field_entries
|
||||
3, // num_field_entries
|
||||
2, // num_aux_entries
|
||||
offsetof(decltype(_table_), aux_entries),
|
||||
&_NewBlockTemplate_default_instance_._instance,
|
||||
@@ -2456,12 +2493,16 @@ const ::_pbi::TcParseTable<1, 2, 2, 0, 2> NewBlockTemplate::_table_ = {
|
||||
::_pbi::TcParser::GetTable<::tari::rpc::NewBlockTemplate>(), // to_prefetch
|
||||
#endif // PROTOBUF_PREFETCH_PARSE_TABLE
|
||||
}, {{
|
||||
// .tari.rpc.AggregateBody body = 2;
|
||||
{::_pbi::TcParser::FastMtS1,
|
||||
{18, 1, 1, PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_.body_)}},
|
||||
{::_pbi::TcParser::MiniParse, {}},
|
||||
// .tari.rpc.NewBlockHeaderTemplate header = 1;
|
||||
{::_pbi::TcParser::FastMtS1,
|
||||
{10, 0, 0, PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_.header_)}},
|
||||
// .tari.rpc.AggregateBody body = 2;
|
||||
{::_pbi::TcParser::FastMtS1,
|
||||
{18, 1, 1, PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_.body_)}},
|
||||
// bool is_mempool_in_sync = 3;
|
||||
{::_pbi::TcParser::SingularVarintNoZag1<bool, offsetof(NewBlockTemplate, _impl_.is_mempool_in_sync_), 63>(),
|
||||
{24, 63, 0, PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_.is_mempool_in_sync_)}},
|
||||
}}, {{
|
||||
65535, 65535
|
||||
}}, {{
|
||||
@@ -2471,6 +2512,9 @@ const ::_pbi::TcParseTable<1, 2, 2, 0, 2> NewBlockTemplate::_table_ = {
|
||||
// .tari.rpc.AggregateBody body = 2;
|
||||
{PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_.body_), _Internal::kHasBitsOffset + 1, 1,
|
||||
(0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
|
||||
// bool is_mempool_in_sync = 3;
|
||||
{PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_.is_mempool_in_sync_), -1, 0,
|
||||
(0 | ::_fl::kFcSingular | ::_fl::kBool)},
|
||||
}}, {{
|
||||
{::_pbi::TcParser::GetTable<::tari::rpc::NewBlockHeaderTemplate>()},
|
||||
{::_pbi::TcParser::GetTable<::tari::rpc::AggregateBody>()},
|
||||
@@ -2498,6 +2542,13 @@ const ::_pbi::TcParseTable<1, 2, 2, 0, 2> NewBlockTemplate::_table_ = {
|
||||
2, *_impl_.body_, _impl_.body_->GetCachedSize(), target, stream);
|
||||
}
|
||||
|
||||
// bool is_mempool_in_sync = 3;
|
||||
if (this->_internal_is_mempool_in_sync() != 0) {
|
||||
target = stream->EnsureSpace(target);
|
||||
target = ::_pbi::WireFormatLite::WriteBoolToArray(
|
||||
3, this->_internal_is_mempool_in_sync(), target);
|
||||
}
|
||||
|
||||
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
|
||||
target =
|
||||
::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
|
||||
@@ -2530,6 +2581,11 @@ const ::_pbi::TcParseTable<1, 2, 2, 0, 2> NewBlockTemplate::_table_ = {
|
||||
}
|
||||
|
||||
}
|
||||
// bool is_mempool_in_sync = 3;
|
||||
if (this->_internal_is_mempool_in_sync() != 0) {
|
||||
total_size += 2;
|
||||
}
|
||||
|
||||
return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_);
|
||||
}
|
||||
|
||||
@@ -2564,6 +2620,9 @@ void NewBlockTemplate::MergeImpl(::google::protobuf::MessageLite& to_msg, const
|
||||
}
|
||||
}
|
||||
}
|
||||
if (from._internal_is_mempool_in_sync() != 0) {
|
||||
_this->_impl_.is_mempool_in_sync_ = from._impl_.is_mempool_in_sync_;
|
||||
}
|
||||
_this->_impl_._has_bits_[0] |= cached_has_bits;
|
||||
_this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
|
||||
}
|
||||
@@ -2584,8 +2643,8 @@ void NewBlockTemplate::InternalSwap(NewBlockTemplate* PROTOBUF_RESTRICT other) {
|
||||
_internal_metadata_.InternalSwap(&other->_internal_metadata_);
|
||||
swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
|
||||
::google::protobuf::internal::memswap<
|
||||
PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_.body_)
|
||||
+ sizeof(NewBlockTemplate::_impl_.body_)
|
||||
PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_.is_mempool_in_sync_)
|
||||
+ sizeof(NewBlockTemplate::_impl_.is_mempool_in_sync_)
|
||||
- PROTOBUF_FIELD_OFFSET(NewBlockTemplate, _impl_.header_)>(
|
||||
reinterpret_cast<char*>(&_impl_.header_),
|
||||
reinterpret_cast<char*>(&other->_impl_.header_));
|
||||
|
||||
+104
-2
@@ -872,6 +872,7 @@ class BlockHeader final : public ::google::protobuf::Message
|
||||
kHashFieldNumber = 1,
|
||||
kPrevHashFieldNumber = 4,
|
||||
kOutputMrFieldNumber = 6,
|
||||
kBlockOutputMrFieldNumber = 7,
|
||||
kKernelMrFieldNumber = 8,
|
||||
kInputMrFieldNumber = 9,
|
||||
kTotalKernelOffsetFieldNumber = 10,
|
||||
@@ -933,6 +934,22 @@ class BlockHeader final : public ::google::protobuf::Message
|
||||
const std::string& value);
|
||||
std::string* _internal_mutable_output_mr();
|
||||
|
||||
public:
|
||||
// bytes block_output_mr = 7;
|
||||
void clear_block_output_mr() ;
|
||||
const std::string& block_output_mr() const;
|
||||
template <typename Arg_ = const std::string&, typename... Args_>
|
||||
void set_block_output_mr(Arg_&& arg, Args_... args);
|
||||
std::string* mutable_block_output_mr();
|
||||
PROTOBUF_NODISCARD std::string* release_block_output_mr();
|
||||
void set_allocated_block_output_mr(std::string* value);
|
||||
|
||||
private:
|
||||
const std::string& _internal_block_output_mr() const;
|
||||
inline PROTOBUF_ALWAYS_INLINE void _internal_set_block_output_mr(
|
||||
const std::string& value);
|
||||
std::string* _internal_mutable_block_output_mr();
|
||||
|
||||
public:
|
||||
// bytes kernel_mr = 8;
|
||||
void clear_kernel_mr() ;
|
||||
@@ -1104,7 +1121,7 @@ class BlockHeader final : public ::google::protobuf::Message
|
||||
class _Internal;
|
||||
friend class ::google::protobuf::internal::TcParser;
|
||||
static const ::google::protobuf::internal::TcParseTable<
|
||||
5, 16, 1,
|
||||
5, 17, 1,
|
||||
0, 2>
|
||||
_table_;
|
||||
friend class ::google::protobuf::MessageLite;
|
||||
@@ -1125,6 +1142,7 @@ class BlockHeader final : public ::google::protobuf::Message
|
||||
::google::protobuf::internal::ArenaStringPtr hash_;
|
||||
::google::protobuf::internal::ArenaStringPtr prev_hash_;
|
||||
::google::protobuf::internal::ArenaStringPtr output_mr_;
|
||||
::google::protobuf::internal::ArenaStringPtr block_output_mr_;
|
||||
::google::protobuf::internal::ArenaStringPtr kernel_mr_;
|
||||
::google::protobuf::internal::ArenaStringPtr input_mr_;
|
||||
::google::protobuf::internal::ArenaStringPtr total_kernel_offset_;
|
||||
@@ -1272,6 +1290,7 @@ class NewBlockTemplate final : public ::google::protobuf::Message
|
||||
enum : int {
|
||||
kHeaderFieldNumber = 1,
|
||||
kBodyFieldNumber = 2,
|
||||
kIsMempoolInSyncFieldNumber = 3,
|
||||
};
|
||||
// .tari.rpc.NewBlockHeaderTemplate header = 1;
|
||||
bool has_header() const;
|
||||
@@ -1302,13 +1321,23 @@ class NewBlockTemplate final : public ::google::protobuf::Message
|
||||
const ::tari::rpc::AggregateBody& _internal_body() const;
|
||||
::tari::rpc::AggregateBody* _internal_mutable_body();
|
||||
|
||||
public:
|
||||
// bool is_mempool_in_sync = 3;
|
||||
void clear_is_mempool_in_sync() ;
|
||||
bool is_mempool_in_sync() const;
|
||||
void set_is_mempool_in_sync(bool value);
|
||||
|
||||
private:
|
||||
bool _internal_is_mempool_in_sync() const;
|
||||
void _internal_set_is_mempool_in_sync(bool value);
|
||||
|
||||
public:
|
||||
// @@protoc_insertion_point(class_scope:tari.rpc.NewBlockTemplate)
|
||||
private:
|
||||
class _Internal;
|
||||
friend class ::google::protobuf::internal::TcParser;
|
||||
static const ::google::protobuf::internal::TcParseTable<
|
||||
1, 2, 2,
|
||||
2, 3, 2,
|
||||
0, 2>
|
||||
_table_;
|
||||
friend class ::google::protobuf::MessageLite;
|
||||
@@ -1328,6 +1357,7 @@ class NewBlockTemplate final : public ::google::protobuf::Message
|
||||
mutable ::google::protobuf::internal::CachedSize _cached_size_;
|
||||
::tari::rpc::NewBlockHeaderTemplate* header_;
|
||||
::tari::rpc::AggregateBody* body_;
|
||||
bool is_mempool_in_sync_;
|
||||
PROTOBUF_TSAN_DECLARE_MEMBER
|
||||
};
|
||||
union { Impl_ _impl_; };
|
||||
@@ -1941,6 +1971,56 @@ inline void BlockHeader::set_allocated_output_mr(std::string* value) {
|
||||
// @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.output_mr)
|
||||
}
|
||||
|
||||
// bytes block_output_mr = 7;
|
||||
inline void BlockHeader::clear_block_output_mr() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.block_output_mr_.ClearToEmpty();
|
||||
}
|
||||
inline const std::string& BlockHeader::block_output_mr() const
|
||||
ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
||||
// @@protoc_insertion_point(field_get:tari.rpc.BlockHeader.block_output_mr)
|
||||
return _internal_block_output_mr();
|
||||
}
|
||||
template <typename Arg_, typename... Args_>
|
||||
inline PROTOBUF_ALWAYS_INLINE void BlockHeader::set_block_output_mr(Arg_&& arg,
|
||||
Args_... args) {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.block_output_mr_.SetBytes(static_cast<Arg_&&>(arg), args..., GetArena());
|
||||
// @@protoc_insertion_point(field_set:tari.rpc.BlockHeader.block_output_mr)
|
||||
}
|
||||
inline std::string* BlockHeader::mutable_block_output_mr() ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
||||
std::string* _s = _internal_mutable_block_output_mr();
|
||||
// @@protoc_insertion_point(field_mutable:tari.rpc.BlockHeader.block_output_mr)
|
||||
return _s;
|
||||
}
|
||||
inline const std::string& BlockHeader::_internal_block_output_mr() const {
|
||||
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
|
||||
return _impl_.block_output_mr_.Get();
|
||||
}
|
||||
inline void BlockHeader::_internal_set_block_output_mr(const std::string& value) {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.block_output_mr_.Set(value, GetArena());
|
||||
}
|
||||
inline std::string* BlockHeader::_internal_mutable_block_output_mr() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
return _impl_.block_output_mr_.Mutable( GetArena());
|
||||
}
|
||||
inline std::string* BlockHeader::release_block_output_mr() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
// @@protoc_insertion_point(field_release:tari.rpc.BlockHeader.block_output_mr)
|
||||
return _impl_.block_output_mr_.Release();
|
||||
}
|
||||
inline void BlockHeader::set_allocated_block_output_mr(std::string* value) {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.block_output_mr_.SetAllocated(value, GetArena());
|
||||
#ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
|
||||
if (_impl_.block_output_mr_.IsDefault()) {
|
||||
_impl_.block_output_mr_.Set("", GetArena());
|
||||
}
|
||||
#endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
|
||||
// @@protoc_insertion_point(field_set_allocated:tari.rpc.BlockHeader.block_output_mr)
|
||||
}
|
||||
|
||||
// bytes kernel_mr = 8;
|
||||
inline void BlockHeader::clear_kernel_mr() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
@@ -3275,6 +3355,28 @@ inline void NewBlockTemplate::set_allocated_body(::tari::rpc::AggregateBody* val
|
||||
// @@protoc_insertion_point(field_set_allocated:tari.rpc.NewBlockTemplate.body)
|
||||
}
|
||||
|
||||
// bool is_mempool_in_sync = 3;
|
||||
inline void NewBlockTemplate::clear_is_mempool_in_sync() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.is_mempool_in_sync_ = false;
|
||||
}
|
||||
inline bool NewBlockTemplate::is_mempool_in_sync() const {
|
||||
// @@protoc_insertion_point(field_get:tari.rpc.NewBlockTemplate.is_mempool_in_sync)
|
||||
return _internal_is_mempool_in_sync();
|
||||
}
|
||||
inline void NewBlockTemplate::set_is_mempool_in_sync(bool value) {
|
||||
_internal_set_is_mempool_in_sync(value);
|
||||
// @@protoc_insertion_point(field_set:tari.rpc.NewBlockTemplate.is_mempool_in_sync)
|
||||
}
|
||||
inline bool NewBlockTemplate::_internal_is_mempool_in_sync() const {
|
||||
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
|
||||
return _impl_.is_mempool_in_sync_;
|
||||
}
|
||||
inline void NewBlockTemplate::_internal_set_is_mempool_in_sync(bool value) {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.is_mempool_in_sync_ = value;
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif // __GNUC__
|
||||
|
||||
+6
-2
@@ -38,9 +38,10 @@ message BlockHeader {
|
||||
bytes prev_hash = 4;
|
||||
// Timestamp at which the block was built.
|
||||
uint64 timestamp = 5;
|
||||
// This is the UTXO merkle root of the outputs
|
||||
// This is calculated as Hash (txo MMR root || roaring bitmap hash of UTXO indices)
|
||||
// This is the UTXO merkle root of the outputs in the blockchain
|
||||
bytes output_mr = 6;
|
||||
// This is the merkle root of all outputs in this block
|
||||
bytes block_output_mr = 7;
|
||||
// This is the MMR root of the kernels
|
||||
bytes kernel_mr = 8;
|
||||
// This is the Merkle root of the inputs in this block
|
||||
@@ -133,5 +134,8 @@ message NewBlockTemplate {
|
||||
// This flag indicates if the inputs, outputs and kernels have been sorted internally, that is, the sort() method
|
||||
// has been called. This may be false even if all components are sorted.
|
||||
AggregateBody body = 2;
|
||||
// Sometimes the mempool has not synced to the latest tip, this flag indicates if the mempool is out of sync.
|
||||
// In most cases the next call to get_new_block_template will return a block with the mempool in sync.
|
||||
bool is_mempool_in_sync = 3;
|
||||
}
|
||||
|
||||
|
||||
+58
-14
@@ -108,6 +108,7 @@ inline constexpr UnblindedOutput::Impl_::Impl_(
|
||||
::_pbi::ConstantInitialized()),
|
||||
features_{nullptr},
|
||||
metadata_signature_{nullptr},
|
||||
range_proof_{nullptr},
|
||||
value_{::uint64_t{0u}},
|
||||
script_lock_height_{::uint64_t{0u}},
|
||||
minimum_value_promise_{::uint64_t{0u}} {}
|
||||
@@ -427,6 +428,7 @@ const ::uint32_t
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::UnblindedOutput, _impl_.covenant_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::UnblindedOutput, _impl_.encrypted_data_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::UnblindedOutput, _impl_.minimum_value_promise_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::UnblindedOutput, _impl_.range_proof_),
|
||||
~0u,
|
||||
~0u,
|
||||
0,
|
||||
@@ -439,6 +441,7 @@ const ::uint32_t
|
||||
~0u,
|
||||
~0u,
|
||||
~0u,
|
||||
2,
|
||||
};
|
||||
|
||||
static const ::_pbi::MigrationSchema
|
||||
@@ -449,7 +452,7 @@ static const ::_pbi::MigrationSchema
|
||||
{90, 104, -1, sizeof(::tari::rpc::OutputFeatures)},
|
||||
{110, -1, -1, sizeof(::tari::rpc::AggregateBody)},
|
||||
{121, 132, -1, sizeof(::tari::rpc::Transaction)},
|
||||
{135, 155, -1, sizeof(::tari::rpc::UnblindedOutput)},
|
||||
{135, 156, -1, sizeof(::tari::rpc::UnblindedOutput)},
|
||||
};
|
||||
static const ::_pb::Message* const file_default_instances[] = {
|
||||
&::tari::rpc::_TransactionKernel_default_instance_._instance,
|
||||
@@ -498,7 +501,7 @@ const char descriptor_table_protodef_transaction_2eproto[] ABSL_ATTRIBUTE_SECTIO
|
||||
"tari.rpc.TransactionKernel\"[\n\013Transactio"
|
||||
"n\022\016\n\006offset\030\001 \001(\014\022%\n\004body\030\002 \001(\0132\027.tari.r"
|
||||
"pc.AggregateBody\022\025\n\rscript_offset\030\003 \001(\014\""
|
||||
"\343\002\n\017UnblindedOutput\022\r\n\005value\030\001 \001(\004\022\024\n\014sp"
|
||||
"\216\003\n\017UnblindedOutput\022\r\n\005value\030\001 \001(\004\022\024\n\014sp"
|
||||
"ending_key\030\002 \001(\014\022*\n\010features\030\003 \001(\0132\030.tar"
|
||||
"i.rpc.OutputFeatures\022\016\n\006script\030\004 \001(\014\022\022\n\n"
|
||||
"input_data\030\005 \001(\014\022\032\n\022script_private_key\030\007"
|
||||
@@ -506,8 +509,9 @@ const char descriptor_table_protodef_transaction_2eproto[] ABSL_ATTRIBUTE_SECTIO
|
||||
"\n\022metadata_signature\030\t \001(\0132\034.tari.rpc.Co"
|
||||
"mAndPubSignature\022\032\n\022script_lock_height\030\n"
|
||||
" \001(\004\022\020\n\010covenant\030\013 \001(\014\022\026\n\016encrypted_data"
|
||||
"\030\014 \001(\014\022\035\n\025minimum_value_promise\030\r \001(\004b\006p"
|
||||
"roto3"
|
||||
"\030\014 \001(\014\022\035\n\025minimum_value_promise\030\r \001(\004\022)\n"
|
||||
"\013range_proof\030\016 \001(\0132\024.tari.rpc.RangeProof"
|
||||
"b\006proto3"
|
||||
};
|
||||
static const ::_pbi::DescriptorTable* const descriptor_table_transaction_2eproto_deps[2] =
|
||||
{
|
||||
@@ -518,7 +522,7 @@ static ::absl::once_flag descriptor_table_transaction_2eproto_once;
|
||||
const ::_pbi::DescriptorTable descriptor_table_transaction_2eproto = {
|
||||
false,
|
||||
false,
|
||||
1805,
|
||||
1848,
|
||||
descriptor_table_protodef_transaction_2eproto,
|
||||
"transaction.proto",
|
||||
&descriptor_table_transaction_2eproto_once,
|
||||
@@ -2988,6 +2992,11 @@ void UnblindedOutput::clear_metadata_signature() {
|
||||
if (_impl_.metadata_signature_ != nullptr) _impl_.metadata_signature_->Clear();
|
||||
_impl_._has_bits_[0] &= ~0x00000002u;
|
||||
}
|
||||
void UnblindedOutput::clear_range_proof() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
if (_impl_.range_proof_ != nullptr) _impl_.range_proof_->Clear();
|
||||
_impl_._has_bits_[0] &= ~0x00000004u;
|
||||
}
|
||||
UnblindedOutput::UnblindedOutput(::google::protobuf::Arena* arena)
|
||||
: ::google::protobuf::Message(arena) {
|
||||
SharedCtor(arena);
|
||||
@@ -3022,6 +3031,9 @@ UnblindedOutput::UnblindedOutput(
|
||||
_impl_.metadata_signature_ = (cached_has_bits & 0x00000002u) ? ::google::protobuf::Message::CopyConstruct<::tari::rpc::ComAndPubSignature>(
|
||||
arena, *from._impl_.metadata_signature_)
|
||||
: nullptr;
|
||||
_impl_.range_proof_ = (cached_has_bits & 0x00000004u) ? ::google::protobuf::Message::CopyConstruct<::tari::rpc::RangeProof>(
|
||||
arena, *from._impl_.range_proof_)
|
||||
: nullptr;
|
||||
::memcpy(reinterpret_cast<char *>(&_impl_) +
|
||||
offsetof(Impl_, value_),
|
||||
reinterpret_cast<const char *>(&from._impl_) +
|
||||
@@ -3069,6 +3081,7 @@ inline void UnblindedOutput::SharedDtor() {
|
||||
_impl_.encrypted_data_.Destroy();
|
||||
delete _impl_.features_;
|
||||
delete _impl_.metadata_signature_;
|
||||
delete _impl_.range_proof_;
|
||||
_impl_.~Impl_();
|
||||
}
|
||||
|
||||
@@ -3101,7 +3114,7 @@ PROTOBUF_NOINLINE void UnblindedOutput::Clear() {
|
||||
_impl_.covenant_.ClearToEmpty();
|
||||
_impl_.encrypted_data_.ClearToEmpty();
|
||||
cached_has_bits = _impl_._has_bits_[0];
|
||||
if (cached_has_bits & 0x00000003u) {
|
||||
if (cached_has_bits & 0x00000007u) {
|
||||
if (cached_has_bits & 0x00000001u) {
|
||||
ABSL_DCHECK(_impl_.features_ != nullptr);
|
||||
_impl_.features_->Clear();
|
||||
@@ -3110,6 +3123,10 @@ PROTOBUF_NOINLINE void UnblindedOutput::Clear() {
|
||||
ABSL_DCHECK(_impl_.metadata_signature_ != nullptr);
|
||||
_impl_.metadata_signature_->Clear();
|
||||
}
|
||||
if (cached_has_bits & 0x00000004u) {
|
||||
ABSL_DCHECK(_impl_.range_proof_ != nullptr);
|
||||
_impl_.range_proof_->Clear();
|
||||
}
|
||||
}
|
||||
::memset(&_impl_.value_, 0, static_cast<::size_t>(
|
||||
reinterpret_cast<char*>(&_impl_.minimum_value_promise_) -
|
||||
@@ -3126,16 +3143,16 @@ const char* UnblindedOutput::_InternalParse(
|
||||
|
||||
|
||||
PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
|
||||
const ::_pbi::TcParseTable<4, 12, 2, 0, 2> UnblindedOutput::_table_ = {
|
||||
const ::_pbi::TcParseTable<4, 13, 3, 0, 2> UnblindedOutput::_table_ = {
|
||||
{
|
||||
PROTOBUF_FIELD_OFFSET(UnblindedOutput, _impl_._has_bits_),
|
||||
0, // no _extensions_
|
||||
13, 120, // max_field_number, fast_idx_mask
|
||||
14, 120, // max_field_number, fast_idx_mask
|
||||
offsetof(decltype(_table_), field_lookup_table),
|
||||
4294959136, // skipmap
|
||||
4294950944, // skipmap
|
||||
offsetof(decltype(_table_), field_entries),
|
||||
12, // num_field_entries
|
||||
2, // num_aux_entries
|
||||
13, // num_field_entries
|
||||
3, // num_aux_entries
|
||||
offsetof(decltype(_table_), aux_entries),
|
||||
&_UnblindedOutput_default_instance_._instance,
|
||||
::_pbi::TcParser::GenericFallback, // fallback
|
||||
@@ -3181,7 +3198,9 @@ const ::_pbi::TcParseTable<4, 12, 2, 0, 2> UnblindedOutput::_table_ = {
|
||||
// uint64 minimum_value_promise = 13;
|
||||
{::_pbi::TcParser::SingularVarintNoZag1<::uint64_t, offsetof(UnblindedOutput, _impl_.minimum_value_promise_), 63>(),
|
||||
{104, 63, 0, PROTOBUF_FIELD_OFFSET(UnblindedOutput, _impl_.minimum_value_promise_)}},
|
||||
{::_pbi::TcParser::MiniParse, {}},
|
||||
// .tari.rpc.RangeProof range_proof = 14;
|
||||
{::_pbi::TcParser::FastMtS1,
|
||||
{114, 2, 2, PROTOBUF_FIELD_OFFSET(UnblindedOutput, _impl_.range_proof_)}},
|
||||
{::_pbi::TcParser::MiniParse, {}},
|
||||
}}, {{
|
||||
65535, 65535
|
||||
@@ -3222,9 +3241,13 @@ const ::_pbi::TcParseTable<4, 12, 2, 0, 2> UnblindedOutput::_table_ = {
|
||||
// uint64 minimum_value_promise = 13;
|
||||
{PROTOBUF_FIELD_OFFSET(UnblindedOutput, _impl_.minimum_value_promise_), -1, 0,
|
||||
(0 | ::_fl::kFcSingular | ::_fl::kUInt64)},
|
||||
// .tari.rpc.RangeProof range_proof = 14;
|
||||
{PROTOBUF_FIELD_OFFSET(UnblindedOutput, _impl_.range_proof_), _Internal::kHasBitsOffset + 2, 2,
|
||||
(0 | ::_fl::kFcOptional | ::_fl::kMessage | ::_fl::kTvTable)},
|
||||
}}, {{
|
||||
{::_pbi::TcParser::GetTable<::tari::rpc::OutputFeatures>()},
|
||||
{::_pbi::TcParser::GetTable<::tari::rpc::ComAndPubSignature>()},
|
||||
{::_pbi::TcParser::GetTable<::tari::rpc::RangeProof>()},
|
||||
}}, {{
|
||||
}},
|
||||
};
|
||||
@@ -3312,6 +3335,12 @@ const ::_pbi::TcParseTable<4, 12, 2, 0, 2> UnblindedOutput::_table_ = {
|
||||
13, this->_internal_minimum_value_promise(), target);
|
||||
}
|
||||
|
||||
// .tari.rpc.RangeProof range_proof = 14;
|
||||
if (cached_has_bits & 0x00000004u) {
|
||||
target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
|
||||
14, *_impl_.range_proof_, _impl_.range_proof_->GetCachedSize(), target, stream);
|
||||
}
|
||||
|
||||
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
|
||||
target =
|
||||
::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
|
||||
@@ -3372,7 +3401,7 @@ const ::_pbi::TcParseTable<4, 12, 2, 0, 2> UnblindedOutput::_table_ = {
|
||||
}
|
||||
|
||||
cached_has_bits = _impl_._has_bits_[0];
|
||||
if (cached_has_bits & 0x00000003u) {
|
||||
if (cached_has_bits & 0x00000007u) {
|
||||
// .tari.rpc.OutputFeatures features = 3;
|
||||
if (cached_has_bits & 0x00000001u) {
|
||||
total_size +=
|
||||
@@ -3385,6 +3414,12 @@ const ::_pbi::TcParseTable<4, 12, 2, 0, 2> UnblindedOutput::_table_ = {
|
||||
1 + ::google::protobuf::internal::WireFormatLite::MessageSize(*_impl_.metadata_signature_);
|
||||
}
|
||||
|
||||
// .tari.rpc.RangeProof range_proof = 14;
|
||||
if (cached_has_bits & 0x00000004u) {
|
||||
total_size +=
|
||||
1 + ::google::protobuf::internal::WireFormatLite::MessageSize(*_impl_.range_proof_);
|
||||
}
|
||||
|
||||
}
|
||||
// uint64 value = 1;
|
||||
if (this->_internal_value() != 0) {
|
||||
@@ -3439,7 +3474,7 @@ void UnblindedOutput::MergeImpl(::google::protobuf::MessageLite& to_msg, const :
|
||||
_this->_internal_set_encrypted_data(from._internal_encrypted_data());
|
||||
}
|
||||
cached_has_bits = from._impl_._has_bits_[0];
|
||||
if (cached_has_bits & 0x00000003u) {
|
||||
if (cached_has_bits & 0x00000007u) {
|
||||
if (cached_has_bits & 0x00000001u) {
|
||||
ABSL_DCHECK(from._impl_.features_ != nullptr);
|
||||
if (_this->_impl_.features_ == nullptr) {
|
||||
@@ -3458,6 +3493,15 @@ void UnblindedOutput::MergeImpl(::google::protobuf::MessageLite& to_msg, const :
|
||||
_this->_impl_.metadata_signature_->MergeFrom(*from._impl_.metadata_signature_);
|
||||
}
|
||||
}
|
||||
if (cached_has_bits & 0x00000004u) {
|
||||
ABSL_DCHECK(from._impl_.range_proof_ != nullptr);
|
||||
if (_this->_impl_.range_proof_ == nullptr) {
|
||||
_this->_impl_.range_proof_ =
|
||||
::google::protobuf::Message::CopyConstruct<::tari::rpc::RangeProof>(arena, *from._impl_.range_proof_);
|
||||
} else {
|
||||
_this->_impl_.range_proof_->MergeFrom(*from._impl_.range_proof_);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (from._internal_value() != 0) {
|
||||
_this->_impl_.value_ = from._impl_.value_;
|
||||
|
||||
+109
-1
@@ -737,6 +737,7 @@ class UnblindedOutput final : public ::google::protobuf::Message
|
||||
kEncryptedDataFieldNumber = 12,
|
||||
kFeaturesFieldNumber = 3,
|
||||
kMetadataSignatureFieldNumber = 9,
|
||||
kRangeProofFieldNumber = 14,
|
||||
kValueFieldNumber = 1,
|
||||
kScriptLockHeightFieldNumber = 10,
|
||||
kMinimumValuePromiseFieldNumber = 13,
|
||||
@@ -882,6 +883,21 @@ class UnblindedOutput final : public ::google::protobuf::Message
|
||||
const ::tari::rpc::ComAndPubSignature& _internal_metadata_signature() const;
|
||||
::tari::rpc::ComAndPubSignature* _internal_mutable_metadata_signature();
|
||||
|
||||
public:
|
||||
// .tari.rpc.RangeProof range_proof = 14;
|
||||
bool has_range_proof() const;
|
||||
void clear_range_proof() ;
|
||||
const ::tari::rpc::RangeProof& range_proof() const;
|
||||
PROTOBUF_NODISCARD ::tari::rpc::RangeProof* release_range_proof();
|
||||
::tari::rpc::RangeProof* mutable_range_proof();
|
||||
void set_allocated_range_proof(::tari::rpc::RangeProof* value);
|
||||
void unsafe_arena_set_allocated_range_proof(::tari::rpc::RangeProof* value);
|
||||
::tari::rpc::RangeProof* unsafe_arena_release_range_proof();
|
||||
|
||||
private:
|
||||
const ::tari::rpc::RangeProof& _internal_range_proof() const;
|
||||
::tari::rpc::RangeProof* _internal_mutable_range_proof();
|
||||
|
||||
public:
|
||||
// uint64 value = 1;
|
||||
void clear_value() ;
|
||||
@@ -918,7 +934,7 @@ class UnblindedOutput final : public ::google::protobuf::Message
|
||||
class _Internal;
|
||||
friend class ::google::protobuf::internal::TcParser;
|
||||
static const ::google::protobuf::internal::TcParseTable<
|
||||
4, 12, 2,
|
||||
4, 13, 3,
|
||||
0, 2>
|
||||
_table_;
|
||||
friend class ::google::protobuf::MessageLite;
|
||||
@@ -945,6 +961,7 @@ class UnblindedOutput final : public ::google::protobuf::Message
|
||||
::google::protobuf::internal::ArenaStringPtr encrypted_data_;
|
||||
::tari::rpc::OutputFeatures* features_;
|
||||
::tari::rpc::ComAndPubSignature* metadata_signature_;
|
||||
::tari::rpc::RangeProof* range_proof_;
|
||||
::uint64_t value_;
|
||||
::uint64_t script_lock_height_;
|
||||
::uint64_t minimum_value_promise_;
|
||||
@@ -5045,6 +5062,97 @@ inline void UnblindedOutput::_internal_set_minimum_value_promise(::uint64_t valu
|
||||
_impl_.minimum_value_promise_ = value;
|
||||
}
|
||||
|
||||
// .tari.rpc.RangeProof range_proof = 14;
|
||||
inline bool UnblindedOutput::has_range_proof() const {
|
||||
bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0;
|
||||
PROTOBUF_ASSUME(!value || _impl_.range_proof_ != nullptr);
|
||||
return value;
|
||||
}
|
||||
inline const ::tari::rpc::RangeProof& UnblindedOutput::_internal_range_proof() const {
|
||||
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
|
||||
const ::tari::rpc::RangeProof* p = _impl_.range_proof_;
|
||||
return p != nullptr ? *p : reinterpret_cast<const ::tari::rpc::RangeProof&>(::tari::rpc::_RangeProof_default_instance_);
|
||||
}
|
||||
inline const ::tari::rpc::RangeProof& UnblindedOutput::range_proof() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
||||
// @@protoc_insertion_point(field_get:tari.rpc.UnblindedOutput.range_proof)
|
||||
return _internal_range_proof();
|
||||
}
|
||||
inline void UnblindedOutput::unsafe_arena_set_allocated_range_proof(::tari::rpc::RangeProof* value) {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
if (GetArena() == nullptr) {
|
||||
delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.range_proof_);
|
||||
}
|
||||
_impl_.range_proof_ = reinterpret_cast<::tari::rpc::RangeProof*>(value);
|
||||
if (value != nullptr) {
|
||||
_impl_._has_bits_[0] |= 0x00000004u;
|
||||
} else {
|
||||
_impl_._has_bits_[0] &= ~0x00000004u;
|
||||
}
|
||||
// @@protoc_insertion_point(field_unsafe_arena_set_allocated:tari.rpc.UnblindedOutput.range_proof)
|
||||
}
|
||||
inline ::tari::rpc::RangeProof* UnblindedOutput::release_range_proof() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
|
||||
_impl_._has_bits_[0] &= ~0x00000004u;
|
||||
::tari::rpc::RangeProof* released = _impl_.range_proof_;
|
||||
_impl_.range_proof_ = nullptr;
|
||||
#ifdef PROTOBUF_FORCE_COPY_IN_RELEASE
|
||||
auto* old = reinterpret_cast<::google::protobuf::MessageLite*>(released);
|
||||
released = ::google::protobuf::internal::DuplicateIfNonNull(released);
|
||||
if (GetArena() == nullptr) {
|
||||
delete old;
|
||||
}
|
||||
#else // PROTOBUF_FORCE_COPY_IN_RELEASE
|
||||
if (GetArena() != nullptr) {
|
||||
released = ::google::protobuf::internal::DuplicateIfNonNull(released);
|
||||
}
|
||||
#endif // !PROTOBUF_FORCE_COPY_IN_RELEASE
|
||||
return released;
|
||||
}
|
||||
inline ::tari::rpc::RangeProof* UnblindedOutput::unsafe_arena_release_range_proof() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
// @@protoc_insertion_point(field_release:tari.rpc.UnblindedOutput.range_proof)
|
||||
|
||||
_impl_._has_bits_[0] &= ~0x00000004u;
|
||||
::tari::rpc::RangeProof* temp = _impl_.range_proof_;
|
||||
_impl_.range_proof_ = nullptr;
|
||||
return temp;
|
||||
}
|
||||
inline ::tari::rpc::RangeProof* UnblindedOutput::_internal_mutable_range_proof() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
if (_impl_.range_proof_ == nullptr) {
|
||||
auto* p = ::google::protobuf::Message::DefaultConstruct<::tari::rpc::RangeProof>(GetArena());
|
||||
_impl_.range_proof_ = reinterpret_cast<::tari::rpc::RangeProof*>(p);
|
||||
}
|
||||
return _impl_.range_proof_;
|
||||
}
|
||||
inline ::tari::rpc::RangeProof* UnblindedOutput::mutable_range_proof() ABSL_ATTRIBUTE_LIFETIME_BOUND {
|
||||
_impl_._has_bits_[0] |= 0x00000004u;
|
||||
::tari::rpc::RangeProof* _msg = _internal_mutable_range_proof();
|
||||
// @@protoc_insertion_point(field_mutable:tari.rpc.UnblindedOutput.range_proof)
|
||||
return _msg;
|
||||
}
|
||||
inline void UnblindedOutput::set_allocated_range_proof(::tari::rpc::RangeProof* value) {
|
||||
::google::protobuf::Arena* message_arena = GetArena();
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
if (message_arena == nullptr) {
|
||||
delete reinterpret_cast<::google::protobuf::MessageLite*>(_impl_.range_proof_);
|
||||
}
|
||||
|
||||
if (value != nullptr) {
|
||||
::google::protobuf::Arena* submessage_arena = reinterpret_cast<::google::protobuf::MessageLite*>(value)->GetArena();
|
||||
if (message_arena != submessage_arena) {
|
||||
value = ::google::protobuf::internal::GetOwnedMessage(message_arena, value, submessage_arena);
|
||||
}
|
||||
_impl_._has_bits_[0] |= 0x00000004u;
|
||||
} else {
|
||||
_impl_._has_bits_[0] &= ~0x00000004u;
|
||||
}
|
||||
|
||||
_impl_.range_proof_ = reinterpret_cast<::tari::rpc::RangeProof*>(value);
|
||||
// @@protoc_insertion_point(field_set_allocated:tari.rpc.UnblindedOutput.range_proof)
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif // __GNUC__
|
||||
|
||||
@@ -178,5 +178,7 @@ message UnblindedOutput {
|
||||
bytes encrypted_data = 12;
|
||||
// The minimum value of the commitment that is proven by the range proof (in MicroMinotari)
|
||||
uint64 minimum_value_promise = 13;
|
||||
// The range proof
|
||||
RangeProof range_proof = 14;
|
||||
}
|
||||
|
||||
|
||||
+72
-50
@@ -302,7 +302,7 @@ inline constexpr ConsensusConstants::Impl_::Impl_(
|
||||
block_weight_inputs_{::uint64_t{0u}},
|
||||
block_weight_outputs_{::uint64_t{0u}},
|
||||
block_weight_kernels_{::uint64_t{0u}},
|
||||
faucet_value_{::uint64_t{0u}},
|
||||
pre_mine_value_{::uint64_t{0u}},
|
||||
max_script_byte_size_{::uint64_t{0u}},
|
||||
validator_node_validity_period_{::uint64_t{0u}},
|
||||
effective_from_height_{::uint64_t{0u}},
|
||||
@@ -313,6 +313,7 @@ inline constexpr ConsensusConstants::Impl_::Impl_(
|
||||
validator_node_registration_shuffle_interval_epoch_{::uint64_t{0u}},
|
||||
inflation_bips_{::uint64_t{0u}},
|
||||
tail_epoch_length_{::uint64_t{0u}},
|
||||
max_block_coinbase_count_{::uint64_t{0u}},
|
||||
blockchain_version_{0u} {}
|
||||
|
||||
template <typename>
|
||||
@@ -486,7 +487,7 @@ const ::uint32_t
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.block_weight_inputs_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.block_weight_outputs_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.block_weight_kernels_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.faucet_value_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.pre_mine_value_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.max_script_byte_size_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.validator_node_validity_period_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.effective_from_height_),
|
||||
@@ -505,6 +506,7 @@ const ::uint32_t
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.permitted_range_proof_types_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.inflation_bips_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.tail_epoch_length_),
|
||||
PROTOBUF_FIELD_OFFSET(::tari::rpc::ConsensusConstants, _impl_.max_block_coinbase_count_),
|
||||
~0u,
|
||||
~0u,
|
||||
~0u,
|
||||
@@ -538,6 +540,7 @@ const ::uint32_t
|
||||
~0u,
|
||||
~0u,
|
||||
~0u,
|
||||
~0u,
|
||||
};
|
||||
|
||||
static const ::_pbi::MigrationSchema
|
||||
@@ -554,7 +557,7 @@ static const ::_pbi::MigrationSchema
|
||||
{96, -1, -1, sizeof(::tari::rpc::PermittedRangeProofs)},
|
||||
{106, -1, -1, sizeof(::tari::rpc::RangeProof)},
|
||||
{115, 125, -1, sizeof(::tari::rpc::ConsensusConstants_ProofOfWorkEntry_DoNotUse)},
|
||||
{127, 168, -1, sizeof(::tari::rpc::ConsensusConstants)},
|
||||
{127, 169, -1, sizeof(::tari::rpc::ConsensusConstants)},
|
||||
};
|
||||
static const ::_pb::Message* const file_default_instances[] = {
|
||||
&::tari::rpc::_Range_default_instance_._instance,
|
||||
@@ -593,7 +596,7 @@ const char descriptor_table_protodef_types_2eproto[] ABSL_ATTRIBUTE_SECTION_VARI
|
||||
"output_type\030\001 \001(\0162\024.tari.rpc.OutputType\022"
|
||||
"3\n\021range_proof_types\030\002 \003(\0162\030.tari.rpc.Ra"
|
||||
"ngeProofType\"!\n\nRangeProof\022\023\n\013proof_byte"
|
||||
"s\030\001 \001(\014\"\327\n\n\022ConsensusConstants\022\035\n\025coinba"
|
||||
"s\030\001 \001(\014\"\373\n\n\022ConsensusConstants\022\035\n\025coinba"
|
||||
"se_min_maturity\030\001 \001(\004\022\032\n\022blockchain_vers"
|
||||
"ion\030\002 \001(\r\022\031\n\021future_time_limit\030\003 \001(\004\022\037\n\027"
|
||||
"difficulty_block_window\030\005 \001(\004\022$\n\034max_blo"
|
||||
@@ -604,41 +607,41 @@ const char descriptor_table_protodef_types_2eproto[] ABSL_ATTRIBUTE_SECTION_VARI
|
||||
"\022 \n\030min_sha3x_pow_difficulty\030\r \001(\004\022\033\n\023bl"
|
||||
"ock_weight_inputs\030\016 \001(\004\022\034\n\024block_weight_"
|
||||
"outputs\030\017 \001(\004\022\034\n\024block_weight_kernels\030\020 "
|
||||
"\001(\004\022\024\n\014faucet_value\030\021 \001(\004\022\034\n\024max_script_"
|
||||
"byte_size\030\022 \001(\004\022&\n\036validator_node_validi"
|
||||
"ty_period\030\023 \001(\004\022\035\n\025effective_from_height"
|
||||
"\030\024 \001(\004\0227\n\036valid_blockchain_version_range"
|
||||
"\030\025 \001(\0132\017.tari.rpc.Range\022\037\n\027max_randomx_s"
|
||||
"eed_height\030\026 \001(\004\022D\n\rproof_of_work\030\027 \003(\0132"
|
||||
"-.tari.rpc.ConsensusConstants.ProofOfWor"
|
||||
"kEntry\0222\n\022transaction_weight\030\030 \001(\0132\026.tar"
|
||||
"i.rpc.WeightParams\022,\n\023input_version_rang"
|
||||
"e\030\032 \001(\0132\017.tari.rpc.Range\0226\n\024output_versi"
|
||||
"on_range\030\033 \001(\0132\030.tari.rpc.OutputsVersion"
|
||||
"\022-\n\024kernel_version_range\030\034 \001(\0132\017.tari.rp"
|
||||
"c.Range\0224\n\026permitted_output_types\030\035 \003(\0162"
|
||||
"\024.tari.rpc.OutputType\022\024\n\014epoch_length\030\036 "
|
||||
"\001(\004\0226\n.validator_node_registration_min_d"
|
||||
"eposit_amount\030\037 \001(\004\0223\n+validator_node_re"
|
||||
"gistration_min_lock_height\030 \001(\004\022:\n2vali"
|
||||
"dator_node_registration_shuffle_interval"
|
||||
"_epoch\030! \001(\004\022C\n\033permitted_range_proof_ty"
|
||||
"pes\030\" \003(\0132\036.tari.rpc.PermittedRangeProof"
|
||||
"s\022\026\n\016inflation_bips\030# \001(\004\022\031\n\021tail_epoch_"
|
||||
"length\030$ \001(\004\032S\n\020ProofOfWorkEntry\022\013\n\003key\030"
|
||||
"\001 \001(\r\022.\n\005value\030\002 \001(\0132\037.tari.rpc.PowAlgor"
|
||||
"ithmConstants:\0028\001*s\n\nOutputType\022\014\n\010STAND"
|
||||
"ARD\020\000\022\014\n\010COINBASE\020\001\022\010\n\004BURN\020\002\022\037\n\033VALIDAT"
|
||||
"OR_NODE_REGISTRATION\020\003\022\036\n\032CODE_TEMPLATE_"
|
||||
"REGISTRATION\020\004*:\n\016RangeProofType\022\024\n\020BULL"
|
||||
"ETPROOF_PLUS\020\000\022\022\n\016REVEALED_VALUE\020\001b\006prot"
|
||||
"o3"
|
||||
"\001(\004\022\026\n\016pre_mine_value\030\021 \001(\004\022\034\n\024max_scrip"
|
||||
"t_byte_size\030\022 \001(\004\022&\n\036validator_node_vali"
|
||||
"dity_period\030\023 \001(\004\022\035\n\025effective_from_heig"
|
||||
"ht\030\024 \001(\004\0227\n\036valid_blockchain_version_ran"
|
||||
"ge\030\025 \001(\0132\017.tari.rpc.Range\022\037\n\027max_randomx"
|
||||
"_seed_height\030\026 \001(\004\022D\n\rproof_of_work\030\027 \003("
|
||||
"\0132-.tari.rpc.ConsensusConstants.ProofOfW"
|
||||
"orkEntry\0222\n\022transaction_weight\030\030 \001(\0132\026.t"
|
||||
"ari.rpc.WeightParams\022,\n\023input_version_ra"
|
||||
"nge\030\032 \001(\0132\017.tari.rpc.Range\0226\n\024output_ver"
|
||||
"sion_range\030\033 \001(\0132\030.tari.rpc.OutputsVersi"
|
||||
"on\022-\n\024kernel_version_range\030\034 \001(\0132\017.tari."
|
||||
"rpc.Range\0224\n\026permitted_output_types\030\035 \003("
|
||||
"\0162\024.tari.rpc.OutputType\022\024\n\014epoch_length\030"
|
||||
"\036 \001(\004\0226\n.validator_node_registration_min"
|
||||
"_deposit_amount\030\037 \001(\004\0223\n+validator_node_"
|
||||
"registration_min_lock_height\030 \001(\004\022:\n2va"
|
||||
"lidator_node_registration_shuffle_interv"
|
||||
"al_epoch\030! \001(\004\022C\n\033permitted_range_proof_"
|
||||
"types\030\" \003(\0132\036.tari.rpc.PermittedRangePro"
|
||||
"ofs\022\026\n\016inflation_bips\030# \001(\004\022\031\n\021tail_epoc"
|
||||
"h_length\030$ \001(\004\022 \n\030max_block_coinbase_cou"
|
||||
"nt\030% \001(\004\032S\n\020ProofOfWorkEntry\022\013\n\003key\030\001 \001("
|
||||
"\r\022.\n\005value\030\002 \001(\0132\037.tari.rpc.PowAlgorithm"
|
||||
"Constants:\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\033VALIDATOR_N"
|
||||
"ODE_REGISTRATION\020\003\022\036\n\032CODE_TEMPLATE_REGI"
|
||||
"STRATION\020\004*:\n\016RangeProofType\022\024\n\020BULLETPR"
|
||||
"OOF_PLUS\020\000\022\022\n\016REVEALED_VALUE\020\001b\006proto3"
|
||||
};
|
||||
static ::absl::once_flag descriptor_table_types_2eproto_once;
|
||||
const ::_pbi::DescriptorTable descriptor_table_types_2eproto = {
|
||||
false,
|
||||
false,
|
||||
2362,
|
||||
2398,
|
||||
descriptor_table_protodef_types_2eproto,
|
||||
"types.proto",
|
||||
&descriptor_table_types_2eproto_once,
|
||||
@@ -3217,15 +3220,15 @@ const char* ConsensusConstants::_InternalParse(
|
||||
|
||||
|
||||
PROTOBUF_CONSTINIT PROTOBUF_ATTRIBUTE_INIT_PRIORITY1
|
||||
const ::_pbi::TcParseTable<5, 33, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
const ::_pbi::TcParseTable<5, 34, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
{
|
||||
PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_._has_bits_),
|
||||
0, // no _extensions_
|
||||
36, 248, // max_field_number, fast_idx_mask
|
||||
37, 248, // max_field_number, fast_idx_mask
|
||||
offsetof(decltype(_table_), field_lookup_table),
|
||||
16777256, // skipmap
|
||||
offsetof(decltype(_table_), field_entries),
|
||||
33, // num_field_entries
|
||||
34, // num_field_entries
|
||||
8, // num_aux_entries
|
||||
offsetof(decltype(_table_), aux_entries),
|
||||
&_ConsensusConstants_default_instance_._instance,
|
||||
@@ -3279,9 +3282,9 @@ const ::_pbi::TcParseTable<5, 33, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
// uint64 block_weight_kernels = 16;
|
||||
{::_pbi::TcParser::FastV64S2,
|
||||
{384, 63, 0, PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.block_weight_kernels_)}},
|
||||
// uint64 faucet_value = 17;
|
||||
// uint64 pre_mine_value = 17;
|
||||
{::_pbi::TcParser::FastV64S2,
|
||||
{392, 63, 0, PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.faucet_value_)}},
|
||||
{392, 63, 0, PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.pre_mine_value_)}},
|
||||
// uint64 max_script_byte_size = 18;
|
||||
{::_pbi::TcParser::FastV64S2,
|
||||
{400, 63, 0, PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.max_script_byte_size_)}},
|
||||
@@ -3322,7 +3325,7 @@ const ::_pbi::TcParseTable<5, 33, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
{504, 63, 0, PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.validator_node_registration_min_deposit_amount_)}},
|
||||
}}, {{
|
||||
33, 0, 1,
|
||||
65520, 29,
|
||||
65504, 29,
|
||||
65535, 65535
|
||||
}}, {{
|
||||
// uint64 coinbase_min_maturity = 1;
|
||||
@@ -3367,8 +3370,8 @@ const ::_pbi::TcParseTable<5, 33, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
// uint64 block_weight_kernels = 16;
|
||||
{PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.block_weight_kernels_), -1, 0,
|
||||
(0 | ::_fl::kFcSingular | ::_fl::kUInt64)},
|
||||
// uint64 faucet_value = 17;
|
||||
{PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.faucet_value_), -1, 0,
|
||||
// uint64 pre_mine_value = 17;
|
||||
{PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.pre_mine_value_), -1, 0,
|
||||
(0 | ::_fl::kFcSingular | ::_fl::kUInt64)},
|
||||
// uint64 max_script_byte_size = 18;
|
||||
{PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.max_script_byte_size_), -1, 0,
|
||||
@@ -3424,6 +3427,9 @@ const ::_pbi::TcParseTable<5, 33, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
// uint64 tail_epoch_length = 36;
|
||||
{PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.tail_epoch_length_), -1, 0,
|
||||
(0 | ::_fl::kFcSingular | ::_fl::kUInt64)},
|
||||
// uint64 max_block_coinbase_count = 37;
|
||||
{PROTOBUF_FIELD_OFFSET(ConsensusConstants, _impl_.max_block_coinbase_count_), -1, 0,
|
||||
(0 | ::_fl::kFcSingular | ::_fl::kUInt64)},
|
||||
}}, {{
|
||||
{::_pbi::TcParser::GetTable<::tari::rpc::Range>()},
|
||||
{::_pbi::TcParser::GetMapAuxInfo<
|
||||
@@ -3547,11 +3553,11 @@ const ::_pbi::TcParseTable<5, 33, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
16, this->_internal_block_weight_kernels(), target);
|
||||
}
|
||||
|
||||
// uint64 faucet_value = 17;
|
||||
if (this->_internal_faucet_value() != 0) {
|
||||
// uint64 pre_mine_value = 17;
|
||||
if (this->_internal_pre_mine_value() != 0) {
|
||||
target = stream->EnsureSpace(target);
|
||||
target = ::_pbi::WireFormatLite::WriteUInt64ToArray(
|
||||
17, this->_internal_faucet_value(), target);
|
||||
17, this->_internal_pre_mine_value(), target);
|
||||
}
|
||||
|
||||
// uint64 max_script_byte_size = 18;
|
||||
@@ -3696,6 +3702,13 @@ const ::_pbi::TcParseTable<5, 33, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
36, this->_internal_tail_epoch_length(), target);
|
||||
}
|
||||
|
||||
// uint64 max_block_coinbase_count = 37;
|
||||
if (this->_internal_max_block_coinbase_count() != 0) {
|
||||
target = stream->EnsureSpace(target);
|
||||
target = ::_pbi::WireFormatLite::WriteUInt64ToArray(
|
||||
37, this->_internal_max_block_coinbase_count(), target);
|
||||
}
|
||||
|
||||
if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
|
||||
target =
|
||||
::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
|
||||
@@ -3860,10 +3873,10 @@ const ::_pbi::TcParseTable<5, 33, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
this->_internal_block_weight_kernels());
|
||||
}
|
||||
|
||||
// uint64 faucet_value = 17;
|
||||
if (this->_internal_faucet_value() != 0) {
|
||||
// uint64 pre_mine_value = 17;
|
||||
if (this->_internal_pre_mine_value() != 0) {
|
||||
total_size += 2 + ::_pbi::WireFormatLite::UInt64Size(
|
||||
this->_internal_faucet_value());
|
||||
this->_internal_pre_mine_value());
|
||||
}
|
||||
|
||||
// uint64 max_script_byte_size = 18;
|
||||
@@ -3926,6 +3939,12 @@ const ::_pbi::TcParseTable<5, 33, 8, 0, 7> ConsensusConstants::_table_ = {
|
||||
this->_internal_tail_epoch_length());
|
||||
}
|
||||
|
||||
// uint64 max_block_coinbase_count = 37;
|
||||
if (this->_internal_max_block_coinbase_count() != 0) {
|
||||
total_size += 2 + ::_pbi::WireFormatLite::UInt64Size(
|
||||
this->_internal_max_block_coinbase_count());
|
||||
}
|
||||
|
||||
// uint32 blockchain_version = 2;
|
||||
if (this->_internal_blockchain_version() != 0) {
|
||||
total_size += ::_pbi::WireFormatLite::UInt32SizePlusOne(
|
||||
@@ -4034,8 +4053,8 @@ void ConsensusConstants::MergeImpl(::google::protobuf::MessageLite& to_msg, cons
|
||||
if (from._internal_block_weight_kernels() != 0) {
|
||||
_this->_impl_.block_weight_kernels_ = from._impl_.block_weight_kernels_;
|
||||
}
|
||||
if (from._internal_faucet_value() != 0) {
|
||||
_this->_impl_.faucet_value_ = from._impl_.faucet_value_;
|
||||
if (from._internal_pre_mine_value() != 0) {
|
||||
_this->_impl_.pre_mine_value_ = from._impl_.pre_mine_value_;
|
||||
}
|
||||
if (from._internal_max_script_byte_size() != 0) {
|
||||
_this->_impl_.max_script_byte_size_ = from._impl_.max_script_byte_size_;
|
||||
@@ -4067,6 +4086,9 @@ void ConsensusConstants::MergeImpl(::google::protobuf::MessageLite& to_msg, cons
|
||||
if (from._internal_tail_epoch_length() != 0) {
|
||||
_this->_impl_.tail_epoch_length_ = from._impl_.tail_epoch_length_;
|
||||
}
|
||||
if (from._internal_max_block_coinbase_count() != 0) {
|
||||
_this->_impl_.max_block_coinbase_count_ = from._impl_.max_block_coinbase_count_;
|
||||
}
|
||||
if (from._internal_blockchain_version() != 0) {
|
||||
_this->_impl_.blockchain_version_ = from._impl_.blockchain_version_;
|
||||
}
|
||||
|
||||
+56
-22
@@ -2416,7 +2416,7 @@ class ConsensusConstants final : public ::google::protobuf::Message
|
||||
kBlockWeightInputsFieldNumber = 14,
|
||||
kBlockWeightOutputsFieldNumber = 15,
|
||||
kBlockWeightKernelsFieldNumber = 16,
|
||||
kFaucetValueFieldNumber = 17,
|
||||
kPreMineValueFieldNumber = 17,
|
||||
kMaxScriptByteSizeFieldNumber = 18,
|
||||
kValidatorNodeValidityPeriodFieldNumber = 19,
|
||||
kEffectiveFromHeightFieldNumber = 20,
|
||||
@@ -2427,6 +2427,7 @@ class ConsensusConstants final : public ::google::protobuf::Message
|
||||
kValidatorNodeRegistrationShuffleIntervalEpochFieldNumber = 33,
|
||||
kInflationBipsFieldNumber = 35,
|
||||
kTailEpochLengthFieldNumber = 36,
|
||||
kMaxBlockCoinbaseCountFieldNumber = 37,
|
||||
kBlockchainVersionFieldNumber = 2,
|
||||
};
|
||||
// repeated uint64 emission_decay = 11;
|
||||
@@ -2693,14 +2694,14 @@ class ConsensusConstants final : public ::google::protobuf::Message
|
||||
void _internal_set_block_weight_kernels(::uint64_t value);
|
||||
|
||||
public:
|
||||
// uint64 faucet_value = 17;
|
||||
void clear_faucet_value() ;
|
||||
::uint64_t faucet_value() const;
|
||||
void set_faucet_value(::uint64_t value);
|
||||
// uint64 pre_mine_value = 17;
|
||||
void clear_pre_mine_value() ;
|
||||
::uint64_t pre_mine_value() const;
|
||||
void set_pre_mine_value(::uint64_t value);
|
||||
|
||||
private:
|
||||
::uint64_t _internal_faucet_value() const;
|
||||
void _internal_set_faucet_value(::uint64_t value);
|
||||
::uint64_t _internal_pre_mine_value() const;
|
||||
void _internal_set_pre_mine_value(::uint64_t value);
|
||||
|
||||
public:
|
||||
// uint64 max_script_byte_size = 18;
|
||||
@@ -2802,6 +2803,16 @@ class ConsensusConstants final : public ::google::protobuf::Message
|
||||
::uint64_t _internal_tail_epoch_length() const;
|
||||
void _internal_set_tail_epoch_length(::uint64_t value);
|
||||
|
||||
public:
|
||||
// uint64 max_block_coinbase_count = 37;
|
||||
void clear_max_block_coinbase_count() ;
|
||||
::uint64_t max_block_coinbase_count() const;
|
||||
void set_max_block_coinbase_count(::uint64_t value);
|
||||
|
||||
private:
|
||||
::uint64_t _internal_max_block_coinbase_count() const;
|
||||
void _internal_set_max_block_coinbase_count(::uint64_t value);
|
||||
|
||||
public:
|
||||
// uint32 blockchain_version = 2;
|
||||
void clear_blockchain_version() ;
|
||||
@@ -2818,7 +2829,7 @@ class ConsensusConstants final : public ::google::protobuf::Message
|
||||
class _Internal;
|
||||
friend class ::google::protobuf::internal::TcParser;
|
||||
static const ::google::protobuf::internal::TcParseTable<
|
||||
5, 33, 8,
|
||||
5, 34, 8,
|
||||
0, 7>
|
||||
_table_;
|
||||
friend class ::google::protobuf::MessageLite;
|
||||
@@ -2862,7 +2873,7 @@ class ConsensusConstants final : public ::google::protobuf::Message
|
||||
::uint64_t block_weight_inputs_;
|
||||
::uint64_t block_weight_outputs_;
|
||||
::uint64_t block_weight_kernels_;
|
||||
::uint64_t faucet_value_;
|
||||
::uint64_t pre_mine_value_;
|
||||
::uint64_t max_script_byte_size_;
|
||||
::uint64_t validator_node_validity_period_;
|
||||
::uint64_t effective_from_height_;
|
||||
@@ -2873,6 +2884,7 @@ class ConsensusConstants final : public ::google::protobuf::Message
|
||||
::uint64_t validator_node_registration_shuffle_interval_epoch_;
|
||||
::uint64_t inflation_bips_;
|
||||
::uint64_t tail_epoch_length_;
|
||||
::uint64_t max_block_coinbase_count_;
|
||||
::uint32_t blockchain_version_;
|
||||
PROTOBUF_TSAN_DECLARE_MEMBER
|
||||
};
|
||||
@@ -4302,26 +4314,26 @@ inline void ConsensusConstants::_internal_set_block_weight_kernels(::uint64_t va
|
||||
_impl_.block_weight_kernels_ = value;
|
||||
}
|
||||
|
||||
// uint64 faucet_value = 17;
|
||||
inline void ConsensusConstants::clear_faucet_value() {
|
||||
// uint64 pre_mine_value = 17;
|
||||
inline void ConsensusConstants::clear_pre_mine_value() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.faucet_value_ = ::uint64_t{0u};
|
||||
_impl_.pre_mine_value_ = ::uint64_t{0u};
|
||||
}
|
||||
inline ::uint64_t ConsensusConstants::faucet_value() const {
|
||||
// @@protoc_insertion_point(field_get:tari.rpc.ConsensusConstants.faucet_value)
|
||||
return _internal_faucet_value();
|
||||
inline ::uint64_t ConsensusConstants::pre_mine_value() const {
|
||||
// @@protoc_insertion_point(field_get:tari.rpc.ConsensusConstants.pre_mine_value)
|
||||
return _internal_pre_mine_value();
|
||||
}
|
||||
inline void ConsensusConstants::set_faucet_value(::uint64_t value) {
|
||||
_internal_set_faucet_value(value);
|
||||
// @@protoc_insertion_point(field_set:tari.rpc.ConsensusConstants.faucet_value)
|
||||
inline void ConsensusConstants::set_pre_mine_value(::uint64_t value) {
|
||||
_internal_set_pre_mine_value(value);
|
||||
// @@protoc_insertion_point(field_set:tari.rpc.ConsensusConstants.pre_mine_value)
|
||||
}
|
||||
inline ::uint64_t ConsensusConstants::_internal_faucet_value() const {
|
||||
inline ::uint64_t ConsensusConstants::_internal_pre_mine_value() const {
|
||||
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
|
||||
return _impl_.faucet_value_;
|
||||
return _impl_.pre_mine_value_;
|
||||
}
|
||||
inline void ConsensusConstants::_internal_set_faucet_value(::uint64_t value) {
|
||||
inline void ConsensusConstants::_internal_set_pre_mine_value(::uint64_t value) {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.faucet_value_ = value;
|
||||
_impl_.pre_mine_value_ = value;
|
||||
}
|
||||
|
||||
// uint64 max_script_byte_size = 18;
|
||||
@@ -5146,6 +5158,28 @@ inline void ConsensusConstants::_internal_set_tail_epoch_length(::uint64_t value
|
||||
_impl_.tail_epoch_length_ = value;
|
||||
}
|
||||
|
||||
// uint64 max_block_coinbase_count = 37;
|
||||
inline void ConsensusConstants::clear_max_block_coinbase_count() {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.max_block_coinbase_count_ = ::uint64_t{0u};
|
||||
}
|
||||
inline ::uint64_t ConsensusConstants::max_block_coinbase_count() const {
|
||||
// @@protoc_insertion_point(field_get:tari.rpc.ConsensusConstants.max_block_coinbase_count)
|
||||
return _internal_max_block_coinbase_count();
|
||||
}
|
||||
inline void ConsensusConstants::set_max_block_coinbase_count(::uint64_t value) {
|
||||
_internal_set_max_block_coinbase_count(value);
|
||||
// @@protoc_insertion_point(field_set:tari.rpc.ConsensusConstants.max_block_coinbase_count)
|
||||
}
|
||||
inline ::uint64_t ConsensusConstants::_internal_max_block_coinbase_count() const {
|
||||
PROTOBUF_TSAN_READ(&_impl_._tsan_detect_race);
|
||||
return _impl_.max_block_coinbase_count_;
|
||||
}
|
||||
inline void ConsensusConstants::_internal_set_max_block_coinbase_count(::uint64_t value) {
|
||||
PROTOBUF_TSAN_WRITE(&_impl_._tsan_detect_race);
|
||||
_impl_.max_block_coinbase_count_ = value;
|
||||
}
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif // __GNUC__
|
||||
|
||||
+2
-1
@@ -124,7 +124,7 @@ message ConsensusConstants {
|
||||
uint64 block_weight_inputs = 14;
|
||||
uint64 block_weight_outputs = 15;
|
||||
uint64 block_weight_kernels = 16;
|
||||
uint64 faucet_value = 17;
|
||||
uint64 pre_mine_value = 17;
|
||||
uint64 max_script_byte_size = 18;
|
||||
uint64 validator_node_validity_period = 19;
|
||||
uint64 effective_from_height = 20;
|
||||
@@ -143,4 +143,5 @@ message ConsensusConstants {
|
||||
repeated PermittedRangeProofs permitted_range_proof_types = 34;
|
||||
uint64 inflation_bips = 35;
|
||||
uint64 tail_epoch_length = 36;
|
||||
uint64 max_block_coinbase_count = 37;
|
||||
}
|
||||
|
||||
Vendored
+11
-3
@@ -21,6 +21,14 @@
|
||||
#include <memory.h>
|
||||
|
||||
/****************************** MACROS ******************************/
|
||||
typedef struct {
|
||||
uint8_t data[64];
|
||||
uint32_t datalen;
|
||||
uint32_t padding;
|
||||
uint64_t bitlen;
|
||||
uint32_t state[8];
|
||||
} SHA256_CTX;
|
||||
|
||||
#define ROTLEFT(a,b) (((a) << (b)) | ((a) >> (32-(b))))
|
||||
#define ROTRIGHT(a,b) (((a) >> (b)) | ((a) << (32-(b))))
|
||||
|
||||
@@ -85,7 +93,7 @@ static void sha256_transform(SHA256_CTX *ctx, const uint8_t* data)
|
||||
ctx->state[7] += h;
|
||||
}
|
||||
|
||||
void sha256_init(SHA256_CTX *ctx)
|
||||
static void sha256_init(SHA256_CTX *ctx)
|
||||
{
|
||||
ctx->datalen = 0;
|
||||
ctx->bitlen = 0;
|
||||
@@ -99,7 +107,7 @@ void sha256_init(SHA256_CTX *ctx)
|
||||
ctx->state[7] = 0x5be0cd19;
|
||||
}
|
||||
|
||||
void sha256_update(SHA256_CTX *ctx, const uint8_t* data, uint32_t len)
|
||||
static void sha256_update(SHA256_CTX *ctx, const uint8_t* data, uint32_t len)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
@@ -114,7 +122,7 @@ void sha256_update(SHA256_CTX *ctx, const uint8_t* data, uint32_t len)
|
||||
}
|
||||
}
|
||||
|
||||
void sha256_final(SHA256_CTX *ctx, uint8_t* hash)
|
||||
static void sha256_final(SHA256_CTX *ctx, uint8_t* hash)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
|
||||
Vendored
-16
@@ -16,22 +16,6 @@ extern "C" {
|
||||
/*************************** HEADER FILES ***************************/
|
||||
#include <stdint.h>
|
||||
|
||||
/****************************** MACROS ******************************/
|
||||
#define SHA256_BLOCK_SIZE 32 // SHA256 outputs a 32 byte digest
|
||||
|
||||
typedef struct {
|
||||
uint8_t data[64];
|
||||
uint32_t datalen;
|
||||
uint32_t padding;
|
||||
uint64_t bitlen;
|
||||
uint32_t state[8];
|
||||
} SHA256_CTX;
|
||||
|
||||
/*********************** FUNCTION DECLARATIONS **********************/
|
||||
void sha256_init(SHA256_CTX *ctx);
|
||||
void sha256_update(SHA256_CTX *ctx, const uint8_t* data, uint32_t len);
|
||||
void sha256_final(SHA256_CTX *ctx, uint8_t* hash);
|
||||
|
||||
void sha256(const void* data, uint32_t len, uint8_t* hash);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Vendored
+1
-1
Submodule external/src/curl updated: d644f86242...06c37f3218
Vendored
+1
-1
Submodule external/src/grpc updated: e22a758b13...9ffeba31cf
Vendored
+1
-1
Submodule external/src/libuv updated: bf762bb18b...012b1e9698
Vendored
+1
-1
Submodule external/src/miniupnp updated: 014e459b8e...7e28c9f8af
@@ -1,14 +0,0 @@
|
||||
diff --git a/typeinfo b/typeinfo
|
||||
index 4cce6cb..323fbc1 100644
|
||||
--- a/typeinfo
|
||||
+++ b/typeinfo
|
||||
@@ -189,6 +189,9 @@ namespace std
|
||||
#endif
|
||||
|
||||
#if __GXX_TYPEINFO_EQUALITY_INLINE || __cplusplus > 202002L
|
||||
+#ifdef __clang__
|
||||
+ __attribute__((always_inline))
|
||||
+#endif
|
||||
_GLIBCXX23_CONSTEXPR inline bool
|
||||
type_info::operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT
|
||||
{
|
||||
@@ -612,6 +612,20 @@ void BlockTemplate::update(const MinerData& data, const Mempool& mempool, const
|
||||
m_poolBlockTemplate->m_auxChains = data.aux_chains;
|
||||
m_poolBlockTemplate->m_auxNonce = data.aux_nonce;
|
||||
|
||||
m_poolBlockTemplate->m_mergeMiningExtra.clear();
|
||||
|
||||
for (const AuxChainData& c : data.aux_chains) {
|
||||
std::vector<uint8_t> v;
|
||||
v.reserve(HASH_SIZE + 16);
|
||||
|
||||
v.assign(c.data.h, c.data.h + HASH_SIZE);
|
||||
|
||||
writeVarint(c.difficulty.lo, v);
|
||||
writeVarint(c.difficulty.hi, v);
|
||||
|
||||
m_poolBlockTemplate->m_mergeMiningExtra.emplace(c.unique_id, std::move(v));
|
||||
}
|
||||
|
||||
init_merge_mining_merkle_proof();
|
||||
|
||||
const std::vector<uint8_t> sidechain_data = m_poolBlockTemplate->serialize_sidechain_data();
|
||||
|
||||
@@ -501,4 +501,10 @@ extern const char* BLOCK_FOUND;
|
||||
} // namespace p2pool
|
||||
|
||||
#include "util.h"
|
||||
|
||||
#ifdef DEBUG_BUILD
|
||||
#undef FORCEINLINE
|
||||
#define FORCEINLINE NOINLINE
|
||||
#endif
|
||||
|
||||
#include "log.h"
|
||||
|
||||
@@ -85,9 +85,10 @@ ConsoleCommands::ConsoleCommands(p2pool* pool)
|
||||
}
|
||||
|
||||
std::random_device rd;
|
||||
std::mt19937_64 rng(rd());
|
||||
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
if (start_listening(false, "127.0.0.1", 49152 + (rd() % 16384))) {
|
||||
if (start_listening(false, "127.0.0.1", 49152 + (rng() % 16384))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ public:
|
||||
bool on_connect() override { return true; };
|
||||
bool on_read(const char* data, uint32_t size) override { static_cast<ConsoleCommands*>(m_owner)->process_input(m_command, data, size); return true; };
|
||||
|
||||
char m_consoleReadBuf[1024] = {};
|
||||
alignas(8) char m_consoleReadBuf[1024] = {};
|
||||
|
||||
std::string m_command;
|
||||
};
|
||||
|
||||
+3
-1
@@ -250,6 +250,8 @@ private:
|
||||
|
||||
NOINLINE void run()
|
||||
{
|
||||
set_thread_name("Logger");
|
||||
|
||||
do {
|
||||
uv_mutex_lock(&m_mutex);
|
||||
if (m_readPos == m_writePos.load()) {
|
||||
@@ -367,7 +369,7 @@ private:
|
||||
|
||||
std::vector<char> m_buf;
|
||||
std::atomic<uint32_t> m_writePos;
|
||||
uint32_t m_readPos;
|
||||
std::atomic<uint32_t> m_readPos;
|
||||
|
||||
uv_cond_t m_cond;
|
||||
uv_mutex_t m_mutex;
|
||||
|
||||
+20
-11
@@ -80,8 +80,8 @@ void p2pool_usage()
|
||||
"--rpc-ssl Enable SSL on RPC connections to the Monero node\n"
|
||||
"--rpc-ssl-fingerprint base64-encoded fingerprint of the Monero node's certificate (optional, use it for certificate pinning)\n"
|
||||
#endif
|
||||
"--no-stratum-http Disable HTTP on Stratum ports\n"
|
||||
"--help Show this help message\n\n"
|
||||
"--no-stratum-http Disable HTTP on Stratum ports\n"
|
||||
"--help Show this help message\n\n"
|
||||
"Example command line:\n\n"
|
||||
"%s --host 127.0.0.1 --rpc-port 18081 --zmq-port 18083 --wallet YOUR_WALLET_ADDRESS --stratum 0.0.0.0:%d --p2p 0.0.0.0:%d\n\n",
|
||||
p2pool::VERSION,
|
||||
@@ -111,17 +111,23 @@ int p2pool_test()
|
||||
char hash[RANDOMX_HASH_SIZE];
|
||||
|
||||
const randomx_flags flags = randomx_get_flags() | RANDOMX_FLAG_FULL_MEM;
|
||||
randomx_cache* myCache = randomx_alloc_cache(flags);
|
||||
randomx_cache* myCache = randomx_alloc_cache(flags | RANDOMX_FLAG_LARGE_PAGES);
|
||||
if (!myCache) {
|
||||
printf("Cache allocation failed\n");
|
||||
return 1;
|
||||
myCache = randomx_alloc_cache(flags);
|
||||
if (!myCache) {
|
||||
printf("Cache allocation failed\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
randomx_init_cache(myCache, myKey, sizeof(myKey) - 1);
|
||||
|
||||
randomx_dataset* myDataset = randomx_alloc_dataset(flags);
|
||||
randomx_dataset* myDataset = randomx_alloc_dataset(flags | RANDOMX_FLAG_LARGE_PAGES);
|
||||
if (!myDataset) {
|
||||
printf("Dataset allocation failed\n");
|
||||
return 1;
|
||||
myDataset = randomx_alloc_dataset(flags);
|
||||
if (!myDataset) {
|
||||
printf("Dataset allocation failed\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
@@ -146,10 +152,13 @@ int p2pool_test()
|
||||
|
||||
randomx_release_cache(myCache);
|
||||
|
||||
randomx_vm* myMachine = randomx_create_vm(flags, nullptr, myDataset);
|
||||
randomx_vm* myMachine = randomx_create_vm(flags | RANDOMX_FLAG_LARGE_PAGES, nullptr, myDataset);
|
||||
if (!myMachine) {
|
||||
printf("Failed to create a virtual machine");
|
||||
return 1;
|
||||
myMachine = randomx_create_vm(flags, nullptr, myDataset);
|
||||
if (!myMachine) {
|
||||
printf("Failed to create a virtual machine");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
memset(hash, 0, sizeof(hash));
|
||||
|
||||
@@ -21,6 +21,7 @@ namespace p2pool {
|
||||
|
||||
class p2pool;
|
||||
class BlockTemplate;
|
||||
struct PoolBlock;
|
||||
|
||||
class IMergeMiningClient
|
||||
{
|
||||
@@ -38,7 +39,8 @@ public:
|
||||
virtual ~IMergeMiningClient() {}
|
||||
|
||||
[[nodiscard]] virtual bool get_params(ChainParameters& out_params) const = 0;
|
||||
virtual void submit_solution(const BlockTemplate* block_tpl, const uint8_t (&hashing_blob)[128], size_t nonce_offset, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path) = 0;
|
||||
virtual void on_external_block(const PoolBlock& block) = 0;
|
||||
virtual void submit_solution(const std::vector<uint8_t>& coinbase_merkle_proof, const uint8_t (&hashing_blob)[128], size_t nonce_offset, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path) = 0;
|
||||
|
||||
virtual void print_status() const = 0;
|
||||
};
|
||||
|
||||
@@ -287,7 +287,7 @@ bool MergeMiningClientJSON_RPC::parse_merge_mining_get_aux_block(const char* dat
|
||||
return true;
|
||||
}
|
||||
|
||||
void MergeMiningClientJSON_RPC::submit_solution(const BlockTemplate* /*block_tpl*/, const uint8_t (&/*hashing_blob*/)[128], size_t /*nonce_offset*/, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path)
|
||||
void MergeMiningClientJSON_RPC::submit_solution(const std::vector<uint8_t>& /*coinbase_merkle_proof*/, const uint8_t (&/*hashing_blob*/)[128], size_t /*nonce_offset*/, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path)
|
||||
{
|
||||
ReadLock lock(m_lock);
|
||||
|
||||
@@ -404,6 +404,8 @@ void MergeMiningClientJSON_RPC::loop(void* data)
|
||||
{
|
||||
LOGINFO(1, "event loop started");
|
||||
|
||||
set_thread_name("MM JSON RPC");
|
||||
|
||||
MergeMiningClientJSON_RPC* client = static_cast<MergeMiningClientJSON_RPC*>(data);
|
||||
|
||||
int err = uv_run(&client->m_loop, UV_RUN_DEFAULT);
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
namespace p2pool {
|
||||
|
||||
class p2pool;
|
||||
struct PoolBlock;
|
||||
|
||||
class MergeMiningClientJSON_RPC : public IMergeMiningClient
|
||||
{
|
||||
@@ -30,7 +31,8 @@ public:
|
||||
~MergeMiningClientJSON_RPC() override;
|
||||
|
||||
bool get_params(ChainParameters& out_params) const override;
|
||||
void submit_solution(const BlockTemplate* block_tpl, const uint8_t (&hashing_blob)[128], size_t nonce_offset, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path) override;
|
||||
void on_external_block(const PoolBlock& /*block*/) override {}
|
||||
void submit_solution(const std::vector<uint8_t>& coinbase_merkle_proof, const uint8_t (&hashing_blob)[128], size_t nonce_offset, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path) override;
|
||||
|
||||
void print_status() const override;
|
||||
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
#include "params.h"
|
||||
#include "block_template.h"
|
||||
#include "keccak.h"
|
||||
#include "pool_block.h"
|
||||
#include "merkle.h"
|
||||
#include "side_chain.h"
|
||||
|
||||
LOG_CATEGORY(MergeMiningClientTari)
|
||||
|
||||
@@ -31,6 +34,8 @@ namespace p2pool {
|
||||
|
||||
MergeMiningClientTari::MergeMiningClientTari(p2pool* pool, std::string host, const std::string& wallet)
|
||||
: m_chainParams{}
|
||||
, m_previousAuxHashes{}
|
||||
, m_previousAuxHashesIndex(0)
|
||||
, m_auxWallet(wallet)
|
||||
, m_pool(pool)
|
||||
, m_tariJobParams{}
|
||||
@@ -79,7 +84,14 @@ MergeMiningClientTari::MergeMiningClientTari(p2pool* pool, std::string host, con
|
||||
log::Stream s(buf);
|
||||
s << "127.0.0.1:" << m_server->external_listen_port();
|
||||
|
||||
m_TariNode = new BaseNode::Stub(grpc::CreateChannel(buf, grpc::InsecureChannelCredentials()));
|
||||
grpc::ChannelArguments cArgs;
|
||||
|
||||
cArgs.SetInt(GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS, 1000);
|
||||
|
||||
cArgs.SetInt(GRPC_ARG_MIN_RECONNECT_BACKOFF_MS, 1000);
|
||||
cArgs.SetInt(GRPC_ARG_MAX_RECONNECT_BACKOFF_MS, 10000);
|
||||
|
||||
m_TariNode = new BaseNode::Stub(grpc::CreateCustomChannel(buf, grpc::InsecureChannelCredentials(), cArgs));
|
||||
|
||||
uv_mutex_init_checked(&m_workerLock);
|
||||
uv_cond_init_checked(&m_workerCond);
|
||||
@@ -127,7 +139,191 @@ bool MergeMiningClientTari::get_params(ChainParameters& out_params) const
|
||||
return true;
|
||||
}
|
||||
|
||||
void MergeMiningClientTari::submit_solution(const BlockTemplate* block_tpl, const uint8_t (&hashing_blob)[128], size_t nonce_offset, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path)
|
||||
void MergeMiningClientTari::on_external_block(const PoolBlock& block)
|
||||
{
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
// The rest of the code is needed only when this node is sending donation messages
|
||||
if (m_pool->params().m_authorKeyFile.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Sanity check
|
||||
if (block.m_transactions.empty() || block.m_hashingBlob.empty() || (block.m_hashingBlob.size() > 128)) {
|
||||
LOGWARN(3, "on_external_block: sanity check failed - " << block.m_transactions.size() << " transactions, hashing blob size = " << block.m_hashingBlob.size());
|
||||
return;
|
||||
}
|
||||
|
||||
ChainParameters chain_params;
|
||||
uint64_t previous_aux_hashes[NUM_PREVIOUS_HASHES];
|
||||
{
|
||||
ReadLock lock(m_chainParamsLock);
|
||||
|
||||
chain_params = m_chainParams;
|
||||
memcpy(previous_aux_hashes, m_previousAuxHashes, sizeof(m_previousAuxHashes));
|
||||
}
|
||||
|
||||
// Don't continue if our aux chain is not there
|
||||
if (block.m_mergeMiningExtra.find(chain_params.aux_id) == block.m_mergeMiningExtra.end()) {
|
||||
return;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
p = readVarint(p, e, diff.hi);
|
||||
if (!p) {
|
||||
LOGWARN(3, "on_external_block: sanity check failed - invalid merge mining extra data " << '3');
|
||||
return;
|
||||
}
|
||||
|
||||
// If it's our aux chain, check that it's the same job and that there is enough PoW
|
||||
if (i.first == chain_params.aux_id) {
|
||||
if ((data != chain_params.aux_hash) || (diff != chain_params.aux_diff)) {
|
||||
const uint64_t* a = previous_aux_hashes;
|
||||
const uint64_t* b = previous_aux_hashes + NUM_PREVIOUS_HASHES;
|
||||
|
||||
if (std::find(a, b, *data.u64()) == b) {
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
if (!diff.check_pow(block.m_powHash)) {
|
||||
LOGINFO(4, "External aux job solution found, but it doesn't have enough PoW (block diff = " << block.m_difficulty << ", Tari diff = " << diff << ')');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
aux_ids.emplace_back(i.first);
|
||||
aux_chains.emplace_back(i.first, data, diff);
|
||||
}
|
||||
|
||||
aux_ids.emplace_back(m_pool->side_chain().consensus_hash());
|
||||
|
||||
LOGINFO(0, log::LightGreen() << "External aux job solution found. Processing it!");
|
||||
|
||||
// coinbase_merkle_proof
|
||||
|
||||
std::vector<std::vector<hash>> tree;
|
||||
|
||||
merkle_hash_full_tree(block.m_transactions, tree);
|
||||
|
||||
std::vector<hash> proof;
|
||||
uint32_t path;
|
||||
|
||||
if (!get_merkle_proof(tree, block.m_transactions[0], proof, path)) {
|
||||
LOGWARN(3, "on_external_block: get_merkle_proof failed for coinbase transaction");
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> coinbase_merkle_proof;
|
||||
for (const hash& h : proof) {
|
||||
coinbase_merkle_proof.insert(coinbase_merkle_proof.end(), h.h, h.h + HASH_SIZE);
|
||||
}
|
||||
|
||||
// hashing_blob
|
||||
|
||||
uint8_t hashing_blob[128] = {};
|
||||
memcpy(hashing_blob, block.m_hashingBlob.data(), block.m_hashingBlob.size());
|
||||
|
||||
// nonce_offset and blob
|
||||
|
||||
size_t header_size = 0;
|
||||
const std::vector<uint8_t> blob = block.serialize_mainchain_data(&header_size);
|
||||
|
||||
if (header_size <= NONCE_SIZE) {
|
||||
LOGWARN(3, "on_external_block: invalid header_size");
|
||||
return;
|
||||
}
|
||||
|
||||
const uint32_t nonce_offset = static_cast<uint32_t>(header_size - NONCE_SIZE);
|
||||
|
||||
// aux_merkle_proof, aux_merkle_proof_path
|
||||
|
||||
std::vector<hash> aux_merkle_proof;
|
||||
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);
|
||||
|
||||
std::vector<hash> hashes(n_aux_chains);
|
||||
|
||||
uint32_t aux_nonce;
|
||||
if (!find_aux_nonce(aux_ids, aux_nonce, 1000)) {
|
||||
LOGWARN(3, "on_external_block: failed to find aux_nonce");
|
||||
return;
|
||||
}
|
||||
|
||||
for (const AuxChainData& aux_data : aux_chains) {
|
||||
const uint32_t aux_slot = get_aux_slot(aux_data.unique_id, aux_nonce, n_aux_chains);
|
||||
|
||||
if (!hashes[aux_slot].empty()) {
|
||||
LOGWARN(3, "on_external_block: found an incorrect aux_nonce " << '1');
|
||||
return;
|
||||
}
|
||||
|
||||
hashes[aux_slot] = aux_data.data;
|
||||
}
|
||||
|
||||
const uint32_t aux_slot = get_aux_slot(m_pool->side_chain().consensus_hash(), aux_nonce, n_aux_chains);
|
||||
|
||||
if (!hashes[aux_slot].empty()) {
|
||||
LOGWARN(3, "on_external_block: found an incorrect aux_nonce " << '2');
|
||||
return;
|
||||
}
|
||||
|
||||
hashes[aux_slot] = sidechain_id;
|
||||
|
||||
merkle_hash_full_tree(hashes, tree);
|
||||
|
||||
if (tree.empty() || tree.back().empty() || (tree.back().front() != block.m_merkleRoot)) {
|
||||
LOGWARN(3, "on_external_block: merkle root didn't match");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!get_merkle_proof(tree, chain_params.aux_hash, aux_merkle_proof, aux_merkle_proof_path)) {
|
||||
LOGWARN(3, "on_external_block: get_merkle_proof failed for the aux hash");
|
||||
return;
|
||||
}
|
||||
|
||||
submit_solution(coinbase_merkle_proof, hashing_blob, nonce_offset, block.m_seed, blob, aux_merkle_proof, aux_merkle_proof_path);
|
||||
#else // WITH_MERGE_MINING_DONATION
|
||||
(void) block;
|
||||
#endif // WITH_MERGE_MINING_DONATION
|
||||
}
|
||||
|
||||
void MergeMiningClientTari::submit_solution(const std::vector<uint8_t>& coinbase_merkle_proof, const uint8_t (&hashing_blob)[128], size_t nonce_offset, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path)
|
||||
{
|
||||
Block block;
|
||||
{
|
||||
@@ -164,8 +360,6 @@ void MergeMiningClientTari::submit_solution(const BlockTemplate* block_tpl, cons
|
||||
data.append(reinterpret_cast<const char*>(hashing_blob + nonce_offset + sizeof(uint32_t)), HASH_SIZE);
|
||||
|
||||
// Coinbase transaction's Merkle proof
|
||||
const std::vector<uint8_t> coinbase_merkle_proof = block_tpl->get_coinbase_merkle_proof();
|
||||
|
||||
// Number of hashes in the proof (varint, but an O(logN) proof will never get bigger than 127)
|
||||
data.append(1, static_cast<char>(coinbase_merkle_proof.size() / HASH_SIZE));
|
||||
|
||||
@@ -247,7 +441,35 @@ void MergeMiningClientTari::submit_solution(const BlockTemplate* block_tpl, cons
|
||||
uv_work_t req;
|
||||
MergeMiningClientTari* client;
|
||||
Block block;
|
||||
} *work = new Work{ {}, this, std::move(block) };
|
||||
|
||||
FORCEINLINE Work(MergeMiningClientTari* c, Block&& b) : req{}, client(c), block(std::move(b)) {}
|
||||
|
||||
void process() const
|
||||
{
|
||||
grpc::ClientContext ctx;
|
||||
SubmitBlockResponse response;
|
||||
|
||||
const grpc::Status status = client->m_TariNode->SubmitBlock(&ctx, block, &response);
|
||||
|
||||
if (!status.ok()) {
|
||||
LOGWARN(4, "SubmitBlock failed: " << status.error_message());
|
||||
if (!status.error_details().empty()) {
|
||||
LOGWARN(4, "SubmitBlock failed: " << status.error_details());
|
||||
}
|
||||
}
|
||||
else {
|
||||
const std::string& h = response.block_hash();
|
||||
LOGINFO(0, log::LightGreen() << "Mined Tari block " << log::hex_buf(h.data(), h.size()) << " at height " << block.header().height());
|
||||
}
|
||||
}
|
||||
} *work = new Work(this, std::move(block));
|
||||
|
||||
if (!is_main_thread()) {
|
||||
LOGINFO(5, "Running SubmitBlock in the current thread because uv_default_loop can only be used in the main thread");
|
||||
work->process();
|
||||
delete work;
|
||||
return;
|
||||
}
|
||||
|
||||
work->req.data = work;
|
||||
|
||||
@@ -255,23 +477,7 @@ void MergeMiningClientTari::submit_solution(const BlockTemplate* block_tpl, cons
|
||||
[](uv_work_t* req)
|
||||
{
|
||||
BACKGROUND_JOB_START(MergeMiningClientTari::submit_solution);
|
||||
|
||||
grpc::ClientContext ctx;
|
||||
SubmitBlockResponse response;
|
||||
|
||||
const Work* w = reinterpret_cast<Work*>(req->data);
|
||||
const grpc::Status status = w->client->m_TariNode->SubmitBlock(&ctx, w->block, &response);
|
||||
|
||||
if (!status.ok()) {
|
||||
LOGWARN(5, "SubmitBlock failed: " << status.error_message());
|
||||
if (!status.error_details().empty()) {
|
||||
LOGWARN(5, "SubmitBlock failed: " << status.error_details());
|
||||
}
|
||||
}
|
||||
else {
|
||||
const std::string& h = response.block_hash();
|
||||
LOGINFO(0, log::LightGreen() << "Mined Tari block " << log::hex_buf(h.data(), h.size()) << " at height " << w->block.header().height());
|
||||
}
|
||||
reinterpret_cast<Work*>(req->data)->process();
|
||||
},
|
||||
[](uv_work_t* req, int /*status*/)
|
||||
{
|
||||
@@ -334,100 +540,146 @@ void MergeMiningClientTari::run()
|
||||
{
|
||||
LOGINFO(1, "worker thread ready");
|
||||
|
||||
set_thread_name("MM Tari poll");
|
||||
|
||||
using namespace std::chrono;
|
||||
|
||||
TipInfoResponse prev_tip_info{};
|
||||
auto prev_tip_info_update_time = high_resolution_clock::now();
|
||||
|
||||
auto same_tip = [](const TipInfoResponse& a, const TipInfoResponse& b) -> bool {
|
||||
return
|
||||
(a.metadata().best_block_height() == b.metadata().best_block_height()) &&
|
||||
(a.metadata().best_block_hash() == b.metadata().best_block_hash()) &&
|
||||
(a.metadata().accumulated_difficulty() == b.metadata().accumulated_difficulty()) &&
|
||||
(a.initial_sync_achieved() == b.initial_sync_achieved()) &&
|
||||
(a.base_node_state() == b.base_node_state()) &&
|
||||
(a.failed_checkpoints() == b.failed_checkpoints());
|
||||
};
|
||||
|
||||
for (;;) {
|
||||
const auto t1 = high_resolution_clock::now();
|
||||
const auto start_time = high_resolution_clock::now();
|
||||
|
||||
// Force frequent enough updates (at least every 30 seconds)
|
||||
if (duration_cast<seconds>(start_time - prev_tip_info_update_time).count() >= 30) {
|
||||
prev_tip_info.mutable_metadata()->set_best_block_height(0);
|
||||
}
|
||||
|
||||
MutexLock lock(m_workerLock);
|
||||
|
||||
GetNewBlockTemplateWithCoinbasesRequest request;
|
||||
PowAlgo* algo = new PowAlgo();
|
||||
algo->set_pow_algo(PowAlgo_PowAlgos_POW_ALGOS_RANDOMX);
|
||||
request.clear_algo();
|
||||
request.set_allocated_algo(algo);
|
||||
request.set_max_weight(0);
|
||||
grpc::ClientContext get_tip_info_ctx{};
|
||||
Empty get_tip_info_request{};
|
||||
TipInfoResponse cur_tip_info{};
|
||||
|
||||
NewBlockCoinbase* coinbase = request.add_coinbases();
|
||||
coinbase->set_address(m_auxWallet);
|
||||
const grpc::Status get_tip_info_status = m_TariNode->GetTipInfo(&get_tip_info_ctx, get_tip_info_request, &cur_tip_info);
|
||||
|
||||
// TODO this should be equal to the total weight of shares in the PPLNS window for each wallet
|
||||
coinbase->set_value(1);
|
||||
|
||||
coinbase->set_stealth_payment(false);
|
||||
coinbase->set_revealed_value_proof(true);
|
||||
coinbase->clear_coinbase_extra();
|
||||
|
||||
grpc::ClientContext ctx;
|
||||
GetNewBlockResult response;
|
||||
|
||||
const grpc::Status status = m_TariNode->GetNewBlockTemplateWithCoinbases(&ctx, request, &response);
|
||||
|
||||
if (!status.ok()) {
|
||||
LOGWARN(5, "GetNewBlockTemplateWithCoinbases failed: " << status.error_message());
|
||||
if (!status.error_details().empty()) {
|
||||
LOGWARN(5, "GetNewBlockTemplateWithCoinbases failed: " << status.error_details());
|
||||
if (!get_tip_info_status.ok()) {
|
||||
LOGWARN(4, "GetTipInfo failed: " << get_tip_info_status.error_message());
|
||||
if (!get_tip_info_status.error_details().empty()) {
|
||||
LOGWARN(4, "GetTipInfo failed: " << get_tip_info_status.error_details());
|
||||
}
|
||||
}
|
||||
else {
|
||||
const std::string& id = response.tari_unique_id();
|
||||
const std::string& mm_hash = response.merge_mining_hash();
|
||||
else if (!same_tip(cur_tip_info, prev_tip_info)) {
|
||||
GetNewBlockTemplateWithCoinbasesRequest request{};
|
||||
|
||||
bool ok = true;
|
||||
PowAlgo* algo = new PowAlgo();
|
||||
algo->set_pow_algo(PowAlgo_PowAlgos_POW_ALGOS_RANDOMX);
|
||||
|
||||
if (id.size() != HASH_SIZE) {
|
||||
LOGERR(1, "Tari unique_id has invalid size (" << id.size() << ')');
|
||||
ok = false;
|
||||
request.clear_algo();
|
||||
request.set_allocated_algo(algo);
|
||||
request.set_max_weight(0);
|
||||
|
||||
NewBlockCoinbase* coinbase = request.add_coinbases();
|
||||
coinbase->set_address(m_auxWallet);
|
||||
|
||||
// TODO this should be equal to the total weight of shares in the PPLNS window for each wallet
|
||||
coinbase->set_value(1);
|
||||
|
||||
coinbase->set_stealth_payment(false);
|
||||
coinbase->set_revealed_value_proof(true);
|
||||
coinbase->clear_coinbase_extra();
|
||||
|
||||
grpc::ClientContext ctx{};
|
||||
GetNewBlockResult response{};
|
||||
|
||||
const grpc::Status status = m_TariNode->GetNewBlockTemplateWithCoinbases(&ctx, request, &response);
|
||||
|
||||
if (!status.ok()) {
|
||||
LOGWARN(4, "GetNewBlockTemplateWithCoinbases failed: " << status.error_message());
|
||||
if (!status.error_details().empty()) {
|
||||
LOGWARN(4, "GetNewBlockTemplateWithCoinbases failed: " << status.error_details());
|
||||
}
|
||||
}
|
||||
else {
|
||||
prev_tip_info = cur_tip_info;
|
||||
prev_tip_info_update_time = start_time;
|
||||
|
||||
if (mm_hash.size() != HASH_SIZE) {
|
||||
LOGERR(1, "Tari merge mining hash has invalid size (" << mm_hash.size() << ')');
|
||||
ok = false;
|
||||
}
|
||||
const std::string& id = response.tari_unique_id();
|
||||
const std::string& mm_hash = response.merge_mining_hash();
|
||||
|
||||
if (ok) {
|
||||
TariJobParams job_params;
|
||||
bool ok = true;
|
||||
|
||||
job_params.height = response.block().header().height();
|
||||
job_params.diff = response.miner_data().target_difficulty();
|
||||
job_params.reward = response.miner_data().reward();
|
||||
job_params.fees = response.miner_data().total_fees();
|
||||
if (id.size() != HASH_SIZE) {
|
||||
LOGERR(1, "Tari unique_id has invalid size (" << id.size() << ')');
|
||||
ok = false;
|
||||
}
|
||||
|
||||
hash chain_id;
|
||||
{
|
||||
WriteLock lock2(m_chainParamsLock);
|
||||
if (mm_hash.size() != HASH_SIZE) {
|
||||
LOGERR(1, "Tari merge mining hash has invalid size (" << mm_hash.size() << ')');
|
||||
ok = false;
|
||||
}
|
||||
|
||||
if (job_params != m_tariJobParams) {
|
||||
m_tariJobParams = job_params;
|
||||
if (ok) {
|
||||
TariJobParams job_params;
|
||||
|
||||
if (m_chainParams.aux_id.empty()) {
|
||||
LOGINFO(1, m_hostStr << " uses chain_id " << log::LightCyan() << log::hex_buf(id.data(), id.size()));
|
||||
std::copy(id.begin(), id.end(), m_chainParams.aux_id.h);
|
||||
job_params.height = response.block().header().height();
|
||||
job_params.diff = response.miner_data().target_difficulty();
|
||||
job_params.reward = response.miner_data().reward();
|
||||
job_params.fees = response.miner_data().total_fees();
|
||||
|
||||
hash chain_id;
|
||||
do {
|
||||
WriteLock lock2(m_chainParamsLock);
|
||||
|
||||
if (job_params != m_tariJobParams) {
|
||||
m_tariJobParams = job_params;
|
||||
|
||||
if (m_chainParams.aux_id.empty()) {
|
||||
LOGINFO(1, m_hostStr << " uses chain_id " << log::LightCyan() << log::hex_buf(id.data(), id.size()));
|
||||
std::copy(id.begin(), id.end(), m_chainParams.aux_id.h);
|
||||
}
|
||||
|
||||
chain_id = m_chainParams.aux_id;
|
||||
|
||||
m_previousAuxHashes[(m_previousAuxHashesIndex++) % NUM_PREVIOUS_HASHES] = *m_chainParams.aux_hash.u64();
|
||||
|
||||
std::copy(mm_hash.begin(), mm_hash.end(), m_chainParams.aux_hash.h);
|
||||
|
||||
m_chainParams.aux_diff = static_cast<difficulty_type>(response.miner_data().target_difficulty());
|
||||
|
||||
m_tariBlock = response.block();
|
||||
|
||||
LOGINFO(4, "Tari aux block template: height = " << job_params.height
|
||||
<< ", diff = " << job_params.diff
|
||||
<< ", reward = " << job_params.reward
|
||||
<< ", fees = " << job_params.fees
|
||||
<< ", hash = " << log::hex_buf(mm_hash.data(), mm_hash.size())
|
||||
);
|
||||
}
|
||||
} while (0);
|
||||
|
||||
chain_id = m_chainParams.aux_id;
|
||||
|
||||
std::copy(mm_hash.begin(), mm_hash.end(), m_chainParams.aux_hash.h);
|
||||
m_chainParams.aux_diff = static_cast<difficulty_type>(response.miner_data().target_difficulty());
|
||||
|
||||
m_tariBlock = response.block();
|
||||
|
||||
LOGINFO(5, "Tari block template: height = " << job_params.height
|
||||
<< ", diff = " << job_params.diff
|
||||
<< ", reward = " << job_params.reward
|
||||
<< ", fees = " << job_params.fees
|
||||
<< ", hash = " << log::hex_buf(mm_hash.data(), mm_hash.size())
|
||||
);
|
||||
if (!chain_id.empty()) {
|
||||
m_pool->update_aux_data(chain_id);
|
||||
}
|
||||
}
|
||||
|
||||
if (!chain_id.empty()) {
|
||||
m_pool->update_aux_data(chain_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const int64_t timeout = std::max<int64_t>(500'000'000 - duration_cast<nanoseconds>(high_resolution_clock::now() - t1).count(), 1'000'000);
|
||||
auto dt = duration_cast<nanoseconds>(high_resolution_clock::now() - start_time).count();
|
||||
|
||||
LOGINFO(6, "Polling loop took " << (static_cast<double>(dt) * 1e-6) << " ms");
|
||||
|
||||
const int64_t timeout = std::max<int64_t>(500'000'000 - dt, 1'000'000);
|
||||
|
||||
if ((m_workerStop.load() != 0) || (uv_cond_timedwait(&m_workerCond, &m_workerLock, timeout) != UV_ETIMEDOUT)) {
|
||||
return;
|
||||
@@ -451,9 +703,10 @@ MergeMiningClientTari::TariServer::TariServer(const std::string& socks5Proxy)
|
||||
bool MergeMiningClientTari::TariServer::start()
|
||||
{
|
||||
std::random_device rd;
|
||||
std::mt19937_64 rng(rd());
|
||||
|
||||
for (size_t i = 0; i < 10; ++i) {
|
||||
if (start_listening(false, "127.0.0.1", 49152 + (rd() % 16384))) {
|
||||
if (start_listening(false, "127.0.0.1", 49152 + (rng() % 16384))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
namespace p2pool {
|
||||
|
||||
class p2pool;
|
||||
struct PoolBlock;
|
||||
|
||||
class MergeMiningClientTari : public IMergeMiningClient, public nocopy_nomove
|
||||
{
|
||||
@@ -33,13 +34,22 @@ public:
|
||||
static constexpr char TARI_PREFIX[] = "tari://";
|
||||
|
||||
bool get_params(ChainParameters& out_params) const override;
|
||||
void submit_solution(const BlockTemplate* block_tpl, const uint8_t (&hashing_blob)[128], size_t nonce_offset, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path) override;
|
||||
void on_external_block(const PoolBlock& block) override;
|
||||
void submit_solution(const std::vector<uint8_t>& coinbase_merkle_proof, const uint8_t (&hashing_blob)[128], size_t nonce_offset, const hash& seed_hash, const std::vector<uint8_t>& blob, const std::vector<hash>& merkle_proof, uint32_t merkle_proof_path) override;
|
||||
|
||||
void print_status() const override;
|
||||
|
||||
private:
|
||||
mutable uv_rwlock_t m_chainParamsLock;
|
||||
ChainParameters m_chainParams;
|
||||
|
||||
enum {
|
||||
NUM_PREVIOUS_HASHES = 8,
|
||||
};
|
||||
|
||||
uint64_t m_previousAuxHashes[NUM_PREVIOUS_HASHES];
|
||||
uint32_t m_previousAuxHashesIndex;
|
||||
|
||||
tari::rpc::Block m_tariBlock;
|
||||
|
||||
std::string m_auxWallet;
|
||||
@@ -100,7 +110,7 @@ private:
|
||||
[[nodiscard]] bool on_connect() override;
|
||||
[[nodiscard]] bool on_read(const char* data, uint32_t size) override;
|
||||
|
||||
char m_buf[BUF_SIZE];
|
||||
alignas(8) char m_buf[BUF_SIZE];
|
||||
std::vector<uint8_t> m_pendingData;
|
||||
|
||||
bool is_paired() const { return m_pairedClient && (m_pairedClient->m_resetCounter == m_pairedClientSavedResetCounter); }
|
||||
|
||||
@@ -152,8 +152,16 @@ void Miner::run(void* data)
|
||||
{
|
||||
WorkerData* d = static_cast<WorkerData*>(data);
|
||||
LOGINFO(1, "worker thread " << d->m_index << '/' << d->m_count << " started");
|
||||
|
||||
char buf[16] = {};
|
||||
log::Stream s(buf);
|
||||
s << "Miner " << d->m_index << '/' << d->m_count;
|
||||
|
||||
set_thread_name(buf);
|
||||
|
||||
make_thread_background();
|
||||
d->m_miner->run(d);
|
||||
|
||||
LOGINFO(1, "worker thread " << d->m_index << '/' << d->m_count << " stopped");
|
||||
}
|
||||
|
||||
|
||||
+305
-1
@@ -29,6 +29,16 @@
|
||||
#include "p2pool_api.h"
|
||||
#include "stratum_server.h"
|
||||
#include "rapidjson_wrapper.h"
|
||||
#include "merge_mining_client.h"
|
||||
#include "sha256.h"
|
||||
|
||||
#ifdef WITH_TLS
|
||||
#include <openssl/curve25519.h>
|
||||
#else
|
||||
#define ED25519_PUBLIC_KEY_LEN 32
|
||||
#define ED25519_SIGNATURE_LEN 64
|
||||
#endif
|
||||
|
||||
#include <fstream>
|
||||
#include <numeric>
|
||||
|
||||
@@ -62,10 +72,13 @@ P2PServer::P2PServer(p2pool* pool)
|
||||
, m_lookForMissingBlocks(true)
|
||||
, m_fastestPeer(nullptr)
|
||||
, m_newP2PoolVersionDetected(false)
|
||||
, m_auxJobLastMessageTimestamp(0)
|
||||
{
|
||||
m_callbackBuf.resize(P2P_BUF_SIZE);
|
||||
m_blockDeserializeBuf.reserve(MAX_BLOCK_SIZE);
|
||||
|
||||
m_auxJobMessages.reserve(1024);
|
||||
|
||||
// Diffuse the initial state in case it has low quality
|
||||
m_rng.discard(10000);
|
||||
|
||||
@@ -105,6 +118,17 @@ P2PServer::P2PServer(p2pool* pool)
|
||||
}
|
||||
m_showPeersAsync.data = this;
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
uv_mutex_init_checked(&m_AuxJobBroadcastLock);
|
||||
|
||||
err = uv_async_init(&m_loop, &m_AuxJobBroadcastAsync, on_aux_job_broadcast);
|
||||
if (err) {
|
||||
LOGERR(1, "uv_async_init failed, error " << uv_err_name(err));
|
||||
PANIC_STOP();
|
||||
}
|
||||
m_AuxJobBroadcastAsync.data = this;
|
||||
#endif
|
||||
|
||||
err = uv_timer_init(&m_loop, &m_timer);
|
||||
if (err) {
|
||||
LOGERR(1, "failed to create timer, error " << uv_err_name(err));
|
||||
@@ -142,6 +166,10 @@ P2PServer::~P2PServer()
|
||||
uv_mutex_destroy(&m_connectToPeersLock);
|
||||
uv_mutex_destroy(&m_showPeersLock);
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
uv_mutex_destroy(&m_AuxJobBroadcastLock);
|
||||
#endif
|
||||
|
||||
delete m_block;
|
||||
delete m_cache;
|
||||
|
||||
@@ -1008,7 +1036,7 @@ void P2PServer::on_broadcast()
|
||||
return p - buf;
|
||||
});
|
||||
if (!result) {
|
||||
LOGWARN(5, "failed to broadcast to " << static_cast<char*>(client->m_addrString) << ", disconnecting");
|
||||
LOGWARN(5, "failed to broadcast a block to " << static_cast<char*>(client->m_addrString) << ", disconnecting");
|
||||
client->close();
|
||||
break;
|
||||
}
|
||||
@@ -1061,6 +1089,15 @@ void P2PServer::show_peers() const
|
||||
if (client->m_SoftwareVersion) {
|
||||
log::Stream s(buf);
|
||||
s << P2PClient::SoftwareDisplayName(client->m_SoftwareID, client->m_SoftwareVersion);
|
||||
|
||||
// Show protocol version in peer list
|
||||
switch (client->m_protocolVersion) {
|
||||
case PROTOCOL_VERSION_1_0: s << " p1.0"; break;
|
||||
case PROTOCOL_VERSION_1_1: s << " p1.1"; break;
|
||||
case PROTOCOL_VERSION_1_2: s << " p1.2"; break;
|
||||
case PROTOCOL_VERSION_1_3: s << " p1.3"; break;
|
||||
default: s << " p?"; break;
|
||||
}
|
||||
}
|
||||
LOGINFO(0, (client->m_isIncoming ? "I\t" : "O\t")
|
||||
<< log::pad_right(log::Duration(cur_time - client->m_connectedTime), 16) << '\t'
|
||||
@@ -1132,6 +1169,7 @@ void P2PServer::on_timer()
|
||||
check_block_template();
|
||||
check_for_updates();
|
||||
api_update_local_stats();
|
||||
clean_aux_job_messages();
|
||||
}
|
||||
|
||||
void P2PServer::flush_cache()
|
||||
@@ -1374,6 +1412,13 @@ void P2PServer::on_shutdown()
|
||||
MutexLock lock(m_showPeersLock);
|
||||
uv_close(reinterpret_cast<uv_handle_t*>(&m_showPeersAsync), nullptr);
|
||||
}
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
{
|
||||
MutexLock lock(m_AuxJobBroadcastLock);
|
||||
uv_close(reinterpret_cast<uv_handle_t*>(&m_AuxJobBroadcastAsync), nullptr);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void P2PServer::api_update_local_stats()
|
||||
@@ -1429,6 +1474,112 @@ void P2PServer::api_update_local_stats()
|
||||
});
|
||||
}
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
void P2PServer::broadcast_aux_job_donation_async(const uint8_t* data, uint32_t data_size, uint64_t timestamp)
|
||||
{
|
||||
MutexLock lock(m_AuxJobBroadcastLock);
|
||||
|
||||
m_AuxJobBroadcast.job.assign(data, data + data_size);
|
||||
m_AuxJobBroadcast.timestamp = timestamp;
|
||||
|
||||
const int err = uv_async_send(&m_AuxJobBroadcastAsync);
|
||||
if (err) {
|
||||
LOGERR(1, "uv_async_send failed, error " << uv_err_name(err));
|
||||
}
|
||||
}
|
||||
|
||||
void P2PServer::broadcast_aux_job_donation_handler()
|
||||
{
|
||||
AuxJobBroadcast auxJobBroadcast;
|
||||
{
|
||||
MutexLock lock(m_AuxJobBroadcastLock);
|
||||
auxJobBroadcast = std::move(m_AuxJobBroadcast);
|
||||
}
|
||||
|
||||
if (auxJobBroadcast.job.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
broadcast_aux_job_donation(auxJobBroadcast.job.data(), static_cast<uint32_t>(auxJobBroadcast.job.size()), auxJobBroadcast.timestamp, nullptr, false);
|
||||
}
|
||||
#endif
|
||||
|
||||
void P2PServer::broadcast_aux_job_donation(const uint8_t* data, uint32_t data_size, uint64_t timestamp, const P2PClient* source, bool duplicate_check_done)
|
||||
{
|
||||
check_event_loop_thread(__func__);
|
||||
|
||||
if (!duplicate_check_done) {
|
||||
hash digest;
|
||||
sha256(data, data_size, digest.h);
|
||||
|
||||
// Every message can be received from multiple peers, so broadcast it only once
|
||||
if (!m_auxJobMessages.emplace(*digest.u64(), timestamp).second) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
m_auxJobLastMessage.assign(data, data + data_size);
|
||||
m_auxJobLastMessageTimestamp = timestamp;
|
||||
|
||||
for (P2PClient* client = static_cast<P2PClient*>(m_connectedClientsList->m_next); client != m_connectedClientsList; client = static_cast<P2PClient*>(client->m_next)) {
|
||||
if ((source && (client == source)) || !client->is_good() || (client->m_protocolVersion < PROTOCOL_VERSION_1_3)) {
|
||||
continue;
|
||||
}
|
||||
send_aux_job_donation(client, data, data_size);
|
||||
}
|
||||
}
|
||||
|
||||
void P2PServer::send_aux_job_donation(P2PServer::P2PClient* client, const uint8_t* data, uint32_t data_size)
|
||||
{
|
||||
const bool result = send(client, [client, data, data_size](uint8_t* buf, size_t buf_size) -> size_t {
|
||||
LOGINFO(6, "sending AUX_JOB_DONATION to " << static_cast<char*>(client->m_addrString));
|
||||
|
||||
if (buf_size < 1 + sizeof(uint32_t) + data_size) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t* p = buf;
|
||||
|
||||
*(p++) = static_cast<uint8_t>(MessageId::AUX_JOB_DONATION);
|
||||
|
||||
memcpy(p, &data_size, sizeof(uint32_t));
|
||||
p += sizeof(uint32_t);
|
||||
|
||||
memcpy(p, data, data_size);
|
||||
p += data_size;
|
||||
|
||||
return p - buf;
|
||||
});
|
||||
|
||||
if (!result) {
|
||||
LOGWARN(5, "failed to send AUX_JOB_DONATION to " << static_cast<char*>(client->m_addrString) << ", disconnecting");
|
||||
client->close();
|
||||
}
|
||||
}
|
||||
|
||||
void P2PServer::clean_aux_job_messages()
|
||||
{
|
||||
if ((m_timerCounter & 255) != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_auxJobMessages.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const uint64_t cur_time = time(nullptr);
|
||||
|
||||
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) {
|
||||
it = m_auxJobMessages.erase(it);
|
||||
}
|
||||
else {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
P2PServer::P2PClient::~P2PClient()
|
||||
{
|
||||
}
|
||||
@@ -1725,6 +1876,23 @@ bool P2PServer::P2PClient::on_read(const char* data, uint32_t size)
|
||||
on_block_notify(buf + 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case MessageId::AUX_JOB_DONATION:
|
||||
LOGINFO(6, "peer " << log::Gray() << static_cast<char*>(m_addrString) << log::NoColor() << " sent AUX_JOB_DONATION");
|
||||
|
||||
if (bytes_left >= 1 + sizeof(uint32_t)) {
|
||||
const uint32_t msg_size = read_unaligned(reinterpret_cast<uint32_t*>(buf + 1));
|
||||
if (bytes_left >= 1 + sizeof(uint32_t) + msg_size) {
|
||||
bytes_read = 1 + sizeof(uint32_t) + msg_size;
|
||||
|
||||
if (!on_aux_job_donation(buf + 1 + sizeof(uint32_t), msg_size)) {
|
||||
ban(DEFAULT_BAN_TIME);
|
||||
server->remove_peer_from_list(this);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (bytes_read) {
|
||||
@@ -2432,6 +2600,13 @@ void P2PServer::P2PClient::on_peer_list_response(const uint8_t* buf)
|
||||
<< "runs an unknown software with id = " << log::Hex(id_value)
|
||||
);
|
||||
}
|
||||
|
||||
// We know this peer's protocol version now. Send protocol-specific messages here.
|
||||
if ((m_protocolVersion >= PROTOCOL_VERSION_1_3) && !server->m_auxJobLastMessage.empty()) {
|
||||
if (static_cast<uint64_t>(time(nullptr)) < server->m_auxJobLastMessageTimestamp + AUX_JOB_TIMEOUT) {
|
||||
server->send_aux_job_donation(this, server->m_auxJobLastMessage.data(), static_cast<uint32_t>(server->m_auxJobLastMessage.size()));
|
||||
}
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
@@ -2510,6 +2685,135 @@ void P2PServer::P2PClient::on_block_notify(const uint8_t* buf)
|
||||
}
|
||||
}
|
||||
|
||||
bool P2PServer::P2PClient::on_aux_job_donation(const uint8_t* buf, uint32_t size)
|
||||
{
|
||||
P2PServer* server = static_cast<P2PServer*>(m_owner);
|
||||
|
||||
// Ignore the same message coming from other peers
|
||||
if ((server->m_auxJobLastMessage.size() == size) && (memcmp(server->m_auxJobLastMessage.data(), buf, size) == 0)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const time_t cur_time = time(nullptr);
|
||||
|
||||
// Layout of the message:
|
||||
//
|
||||
// 32 bytes | Secondary public key
|
||||
// 8 bytes | Secondary public key's expiration timestamp
|
||||
// 64 bytes | Master key signature signing the above 40 bytes
|
||||
// (size - 168) bytes | Data
|
||||
// 64 bytes | Secondary key signature signing the data
|
||||
|
||||
constexpr uint32_t DATA_OFFSET = ED25519_PUBLIC_KEY_LEN + 8 + ED25519_SIGNATURE_LEN;
|
||||
constexpr uint32_t OVERHEAD = DATA_OFFSET + ED25519_SIGNATURE_LEN;
|
||||
constexpr uint32_t DATA_ENTRY_SIZE = HASH_SIZE * 2 + sizeof(difficulty_type);
|
||||
constexpr uint32_t MIN_DATA_SIZE = sizeof(uint64_t) + DATA_ENTRY_SIZE;
|
||||
|
||||
// Ignore invalid or empty messages
|
||||
if (size < OVERHEAD + MIN_DATA_SIZE) {
|
||||
LOGWARN(4, "peer " << static_cast<char*>(m_addrString) << " sent an invalid AUX_JOB_DONATION message (" << size << " < " << (OVERHEAD + MIN_DATA_SIZE) << ')');
|
||||
return false;
|
||||
}
|
||||
|
||||
// Layout of the data:
|
||||
//
|
||||
// 8 bytes | timestamp
|
||||
//
|
||||
// Next come one or multiple data entries:
|
||||
//
|
||||
// 32 bytes | aux_id
|
||||
// 32 bytes | aux_hash
|
||||
// 16 bytes | aux_diff
|
||||
|
||||
const uint32_t data_size = size - OVERHEAD;
|
||||
|
||||
const int64_t secondary_key_expiration_time = read_unaligned(reinterpret_cast<const int64_t*>(buf + ED25519_PUBLIC_KEY_LEN));
|
||||
|
||||
// Ignore messages signed with an outdated secondary key
|
||||
if (cur_time >= secondary_key_expiration_time) {
|
||||
LOGWARN(4, "peer " << static_cast<char*>(m_addrString) << " sent an AUX_JOB_DONATION message with an expired secondary key (" << cur_time << " >= " << secondary_key_expiration_time << ")");
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check secondary public key's signature
|
||||
uint8_t signature[ED25519_SIGNATURE_LEN];
|
||||
memcpy(signature, buf + ED25519_PUBLIC_KEY_LEN + 8, sizeof(signature));
|
||||
|
||||
// Ignore messages with invalid signatures
|
||||
#ifdef WITH_TLS // Need BoringSSL to verify signatures
|
||||
if (!ED25519_verify(buf, ED25519_PUBLIC_KEY_LEN + 8, signature, ED25519_MASTER_PUBLIC_KEY)) {
|
||||
LOGWARN(4, "peer " << static_cast<char*>(m_addrString) << " sent an AUX_JOB_DONATION message with an invalid master key signature");
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
const uint8_t* p = buf + DATA_OFFSET;
|
||||
const uint8_t* data_end = p + data_size;
|
||||
|
||||
memcpy(signature, data_end, sizeof(signature));
|
||||
|
||||
uint8_t secondary_public_key[ED25519_PUBLIC_KEY_LEN];
|
||||
memcpy(secondary_public_key, buf, sizeof(secondary_public_key));
|
||||
|
||||
// Ignore messages with invalid signatures
|
||||
#ifdef WITH_TLS // Need BoringSSL to verify signatures
|
||||
if (!ED25519_verify(p, data_size, signature, secondary_public_key)) {
|
||||
LOGWARN(4, "peer " << static_cast<char*>(m_addrString) << " sent an AUX_JOB_DONATION message with an invalid secondary key signature");
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
const int64_t data_timestamp = read_unaligned(reinterpret_cast<const int64_t*>(p));
|
||||
p += sizeof(int64_t);
|
||||
|
||||
// Ignore outdated messages
|
||||
if (cur_time >= data_timestamp + AUX_JOB_TIMEOUT) {
|
||||
LOGWARN(4, "peer " << static_cast<char*>(m_addrString) << " sent an outdated AUX_JOB_DONATION message (" << cur_time << " >= " << data_timestamp << " + " << static_cast<int>(AUX_JOB_TIMEOUT) << ')');
|
||||
return true;
|
||||
}
|
||||
|
||||
if ((data_end - p) % DATA_ENTRY_SIZE) {
|
||||
LOGWARN(4, "peer " << static_cast<char*>(m_addrString) << " sent an invalid AUX_JOB_DONATION message (" << (data_end - p) << " is not a multiple of " << DATA_ENTRY_SIZE << ')');
|
||||
return true;
|
||||
}
|
||||
|
||||
hash digest;
|
||||
sha256(buf, size, digest.h);
|
||||
|
||||
// Ignore repeated old messages
|
||||
if (!server->m_auxJobMessages.emplace(*digest.u64(), data_timestamp).second) {
|
||||
LOGWARN(5, "peer " << static_cast<char*>(m_addrString) << " sent an old AUX_JOB_DONATION message (" << (cur_time - data_timestamp) << " seconds old)");
|
||||
return true;
|
||||
}
|
||||
|
||||
#if defined(WITH_MERGE_MINING_DONATION) && defined(WITH_TLS) // Only work on verified jobs
|
||||
const uint32_t N = static_cast<uint32_t>(data_end - p) / DATA_ENTRY_SIZE;
|
||||
|
||||
std::vector<IMergeMiningClient::ChainParameters> chain_params_vec(N);
|
||||
|
||||
for (uint32_t i = 0; i < N; ++i) {
|
||||
IMergeMiningClient::ChainParameters& chain_params = chain_params_vec[i];
|
||||
|
||||
memcpy(chain_params.aux_id.h, p, HASH_SIZE);
|
||||
p += HASH_SIZE;
|
||||
|
||||
memcpy(chain_params.aux_hash.h, p, HASH_SIZE);
|
||||
p += HASH_SIZE;
|
||||
|
||||
chain_params.aux_diff.lo = read_unaligned(reinterpret_cast<const uint64_t*>(p));
|
||||
p += sizeof(uint64_t);
|
||||
|
||||
chain_params.aux_diff.hi = read_unaligned(reinterpret_cast<const uint64_t*>(p));
|
||||
p += sizeof(uint64_t);
|
||||
}
|
||||
|
||||
server->m_pool->set_aux_job_donation(chain_params_vec);
|
||||
#endif
|
||||
|
||||
server->broadcast_aux_job_donation(buf, size, data_timestamp, this, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool P2PServer::P2PClient::handle_incoming_block_async(const PoolBlock* block, uint64_t max_time_delta)
|
||||
{
|
||||
P2PServer* server = static_cast<P2PServer*>(m_owner);
|
||||
|
||||
+40
-2
@@ -38,8 +38,9 @@ static constexpr int DEFAULT_P2P_PORT_MINI = 37888;
|
||||
static constexpr uint32_t PROTOCOL_VERSION_1_0 = 0x00010000UL;
|
||||
static constexpr uint32_t PROTOCOL_VERSION_1_1 = 0x00010001UL;
|
||||
static constexpr uint32_t PROTOCOL_VERSION_1_2 = 0x00010002UL;
|
||||
static constexpr uint32_t PROTOCOL_VERSION_1_3 = 0x00010003UL;
|
||||
|
||||
static constexpr uint32_t SUPPORTED_PROTOCOL_VERSION = PROTOCOL_VERSION_1_2;
|
||||
static constexpr uint32_t SUPPORTED_PROTOCOL_VERSION = PROTOCOL_VERSION_1_3;
|
||||
|
||||
class P2PServer : public TCPServer
|
||||
{
|
||||
@@ -55,7 +56,9 @@ public:
|
||||
PEER_LIST_RESPONSE,
|
||||
BLOCK_BROADCAST_COMPACT,
|
||||
BLOCK_NOTIFY,
|
||||
LAST = BLOCK_NOTIFY,
|
||||
// Donation messages are signed by author's private keys to prevent their abuse/misuse.
|
||||
AUX_JOB_DONATION,
|
||||
LAST = AUX_JOB_DONATION,
|
||||
};
|
||||
|
||||
explicit P2PServer(p2pool *pool);
|
||||
@@ -113,6 +116,7 @@ public:
|
||||
[[nodiscard]] bool on_peer_list_request(const uint8_t* buf);
|
||||
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 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);
|
||||
@@ -188,6 +192,12 @@ public:
|
||||
|
||||
bool disconnected() const { return m_seenGoodPeers && (m_numConnections == 0); };
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
void broadcast_aux_job_donation_async(const uint8_t* data, uint32_t data_size, uint64_t timestamp);
|
||||
#endif
|
||||
|
||||
void broadcast_aux_job_donation(const uint8_t* data, uint32_t data_size, uint64_t timestamp, const P2PClient* source, bool duplicate_check_done);
|
||||
|
||||
private:
|
||||
[[nodiscard]] const char* get_log_category() const override;
|
||||
|
||||
@@ -291,6 +301,34 @@ private:
|
||||
void on_shutdown() override;
|
||||
|
||||
void api_update_local_stats();
|
||||
|
||||
enum {
|
||||
AUX_JOB_TIMEOUT = 3600,
|
||||
};
|
||||
|
||||
unordered_set<std::pair<uint64_t, uint64_t>> m_auxJobMessages;
|
||||
std::vector<uint8_t> m_auxJobLastMessage;
|
||||
uint64_t m_auxJobLastMessageTimestamp;
|
||||
|
||||
void send_aux_job_donation(P2PServer::P2PClient* client, const uint8_t* data, uint32_t data_size);
|
||||
|
||||
void clean_aux_job_messages();
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
struct AuxJobBroadcast
|
||||
{
|
||||
std::vector<uint8_t> job;
|
||||
uint64_t timestamp = 0;
|
||||
};
|
||||
|
||||
uv_mutex_t m_AuxJobBroadcastLock;
|
||||
AuxJobBroadcast m_AuxJobBroadcast;
|
||||
|
||||
uv_async_t m_AuxJobBroadcastAsync;
|
||||
|
||||
static void on_aux_job_broadcast(uv_async_t* handle) { reinterpret_cast<P2PServer*>(handle->data)->broadcast_aux_job_donation_handler(); }
|
||||
void broadcast_aux_job_donation_handler();
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace p2pool
|
||||
|
||||
+196
-6
@@ -38,6 +38,11 @@
|
||||
#include "keccak.h"
|
||||
#include "merkle.h"
|
||||
#include "merge_mining_client.h"
|
||||
|
||||
#ifdef WITH_TLS
|
||||
#include <openssl/curve25519.h>
|
||||
#endif
|
||||
|
||||
#include <thread>
|
||||
#include <fstream>
|
||||
#include <numeric>
|
||||
@@ -148,11 +153,18 @@ p2pool::p2pool(int argc, char* argv[])
|
||||
uv_rwlock_init_checked(&m_minerDataLock);
|
||||
uv_rwlock_init_checked(&m_ZMQReaderLock);
|
||||
uv_rwlock_init_checked(&m_mergeMiningClientsLock);
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
uv_rwlock_init_checked(&m_auxJobDonationLock);
|
||||
#endif
|
||||
|
||||
uv_rwlock_init_checked(&m_auxIdLock);
|
||||
uv_mutex_init_checked(&m_foundBlocksLock);
|
||||
|
||||
#ifdef WITH_RANDOMX
|
||||
uv_mutex_init_checked(&m_minerLock);
|
||||
#endif
|
||||
|
||||
uv_mutex_init_checked(&m_submitBlockDataLock);
|
||||
uv_mutex_init_checked(&m_submitAuxBlockDataLock);
|
||||
|
||||
@@ -222,11 +234,18 @@ p2pool::~p2pool()
|
||||
uv_rwlock_destroy(&m_minerDataLock);
|
||||
uv_rwlock_destroy(&m_ZMQReaderLock);
|
||||
uv_rwlock_destroy(&m_mergeMiningClientsLock);
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
uv_rwlock_destroy(&m_auxJobDonationLock);
|
||||
#endif
|
||||
|
||||
uv_rwlock_destroy(&m_auxIdLock);
|
||||
uv_mutex_destroy(&m_foundBlocksLock);
|
||||
|
||||
#ifdef WITH_RANDOMX
|
||||
uv_mutex_destroy(&m_minerLock);
|
||||
#endif
|
||||
|
||||
uv_mutex_destroy(&m_submitBlockDataLock);
|
||||
uv_mutex_destroy(&m_submitAuxBlockDataLock);
|
||||
|
||||
@@ -565,6 +584,27 @@ void p2pool::handle_chain_main(ChainMain& data, const char* extra)
|
||||
m_zmqLastActive = seconds_since_epoch();
|
||||
}
|
||||
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
void p2pool::set_aux_job_donation(const std::vector<IMergeMiningClient::ChainParameters>& chain_params)
|
||||
{
|
||||
if (m_stopped) {
|
||||
return;
|
||||
}
|
||||
|
||||
const uint64_t t = seconds_since_epoch();
|
||||
{
|
||||
WriteLock lock(m_auxJobDonationLock);
|
||||
m_auxJobDonation = chain_params;
|
||||
m_auxJobDonationLastUpdated = t;
|
||||
}
|
||||
|
||||
if (!chain_params.empty()) {
|
||||
update_aux_data(chain_params.front().aux_id);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void p2pool::update_aux_data(const hash& chain_id)
|
||||
{
|
||||
if (m_stopped) {
|
||||
@@ -574,6 +614,22 @@ void p2pool::update_aux_data(const hash& chain_id)
|
||||
MinerData data;
|
||||
std::vector<hash> aux_id;
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
std::vector<IMergeMiningClient::ChainParameters> mm_donation_params;
|
||||
uint64_t mm_donation_params_last_updated;
|
||||
{
|
||||
ReadLock lock(m_auxJobDonationLock);
|
||||
mm_donation_params = m_auxJobDonation;
|
||||
mm_donation_params_last_updated = m_auxJobDonationLastUpdated;
|
||||
}
|
||||
|
||||
const uint64_t t = seconds_since_epoch();
|
||||
|
||||
if (!mm_donation_params.empty()) {
|
||||
LOGINFO(5, "update_aux_data: there are " << mm_donation_params.size() << " aux chain datas for merge mining donation, last updated " << (t - mm_donation_params_last_updated) << " seconds ago");
|
||||
}
|
||||
#endif
|
||||
|
||||
{
|
||||
ReadLock lock(m_mergeMiningClientsLock);
|
||||
|
||||
@@ -588,13 +644,33 @@ void p2pool::update_aux_data(const hash& chain_id)
|
||||
if (c->get_params(chain_params)) {
|
||||
data.aux_chains.emplace_back(chain_params.aux_id, chain_params.aux_hash, chain_params.aux_diff);
|
||||
aux_id.emplace_back(chain_params.aux_id);
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
// If the user is already merge mining this chain, don't use it for donation
|
||||
mm_donation_params.erase(std::remove_if(mm_donation_params.begin(), mm_donation_params.end(), [&chain_params](const auto& t) { return t.aux_id == chain_params.aux_id; }), mm_donation_params.end());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
aux_id.emplace_back(m_sideChain->consensus_hash());
|
||||
}
|
||||
}
|
||||
|
||||
if (!aux_id.empty()) {
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
// Use the donation job for 30 minutes at most if it doesn't get updated anymore
|
||||
if (t <= mm_donation_params_last_updated + 1800) {
|
||||
LOGINFO(5, "update_aux_data: using " << mm_donation_params.size() << " aux chain datas for merge mining donation");
|
||||
|
||||
for (const IMergeMiningClient::ChainParameters& c : mm_donation_params) {
|
||||
data.aux_chains.emplace_back(c.aux_id, c.aux_hash, c.aux_diff);
|
||||
aux_id.emplace_back(c.aux_id);
|
||||
}
|
||||
}
|
||||
else {
|
||||
LOGINFO(5, "update_aux_data: merge mining donation data is stale, not using it");
|
||||
}
|
||||
#endif
|
||||
|
||||
aux_id.emplace_back(m_sideChain->consensus_hash());
|
||||
{
|
||||
WriteLock lock(m_auxIdLock);
|
||||
|
||||
if (aux_id == m_auxId) {
|
||||
@@ -605,7 +681,7 @@ void p2pool::update_aux_data(const hash& chain_id)
|
||||
m_auxNonce = data.aux_nonce;
|
||||
}
|
||||
else {
|
||||
LOGERR(1, "Failed to find the aux nonce for merge mining. Merge mining will be off this round.");
|
||||
LOGERR(1, "update_aux_data: failed to find the aux nonce for merge mining. Merge mining will be off this round.");
|
||||
data.aux_chains.clear();
|
||||
}
|
||||
}
|
||||
@@ -623,16 +699,111 @@ void p2pool::update_aux_data(const hash& chain_id)
|
||||
}
|
||||
|
||||
if (!chain_id.empty()) {
|
||||
LOGINFO(4, "New aux data from chain " << chain_id);
|
||||
LOGINFO(4, "update_aux_data: new aux data from chain " << chain_id);
|
||||
|
||||
if (!is_main_thread()) {
|
||||
update_block_template_async();
|
||||
}
|
||||
else {
|
||||
update_block_template();
|
||||
}
|
||||
|
||||
#if defined(WITH_MERGE_MINING_DONATION) && defined(WITH_TLS)
|
||||
send_aux_job_donation();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
void p2pool::send_aux_job_donation()
|
||||
{
|
||||
#ifdef WITH_TLS
|
||||
if (m_params->m_authorKeyFile.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
std::ifstream f(m_params->m_authorKeyFile, std::ios::binary | std::ios::ate);
|
||||
|
||||
if (!f.good()) {
|
||||
LOGERR(1, "send_aux_job_donation: failed to open " << m_params->m_authorKeyFile);
|
||||
return;
|
||||
}
|
||||
|
||||
Params::AuthorKey key;
|
||||
|
||||
if (f.tellg() != static_cast<std::streampos>(sizeof(key))) {
|
||||
LOGERR(1, "send_aux_job_donation: " << m_params->m_authorKeyFile << " has an invalid size");
|
||||
return;
|
||||
}
|
||||
|
||||
f.seekg(0);
|
||||
f.read(reinterpret_cast<char*>(&key), sizeof(key));
|
||||
|
||||
if (!f.good()) {
|
||||
LOGERR(1, "send_aux_job_donation: failed to read data from " << m_params->m_authorKeyFile);
|
||||
return;
|
||||
}
|
||||
|
||||
const uint64_t timestamp = time(nullptr);
|
||||
|
||||
if (timestamp >= read_unaligned(reinterpret_cast<uint64_t*>(key.expiration_time))) {
|
||||
LOGERR(1, "send_aux_job_donation: " << m_params->m_authorKeyFile << " is expired");
|
||||
return;
|
||||
}
|
||||
|
||||
const uint8_t* p = reinterpret_cast<uint8_t*>(&key);
|
||||
|
||||
if (!ED25519_verify(p, sizeof(key.pub_key) + sizeof(key.expiration_time), key.master_key_signature, ED25519_MASTER_PUBLIC_KEY)) {
|
||||
LOGERR(1, "send_aux_job_donation: " << m_params->m_authorKeyFile << ": signature verification failed");
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> job;
|
||||
job.reserve(512);
|
||||
|
||||
constexpr uint32_t DATA_OFFSET = sizeof(key.pub_key) + sizeof(key.expiration_time) + sizeof(key.master_key_signature);
|
||||
|
||||
job.assign(p, p + DATA_OFFSET);
|
||||
|
||||
job.insert(job.end(), reinterpret_cast<const uint8_t*>(×tamp), reinterpret_cast<const uint8_t*>(×tamp) + sizeof(uint64_t));
|
||||
|
||||
{
|
||||
ReadLock lock(m_minerDataLock);
|
||||
|
||||
if (m_minerData.aux_chains.empty()) {
|
||||
LOGERR(1, "send_aux_job_donation: no merge mined chains found");
|
||||
return;
|
||||
}
|
||||
|
||||
for (const AuxChainData& c : m_minerData.aux_chains) {
|
||||
job.insert(job.end(), c.unique_id.h, c.unique_id.h + HASH_SIZE);
|
||||
job.insert(job.end(), c.data.h, c.data.h + HASH_SIZE);
|
||||
job.insert(job.end(), reinterpret_cast<const uint8_t*>(&c.difficulty), reinterpret_cast<const uint8_t*>(&c.difficulty) + sizeof(difficulty_type));
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t signature[64];
|
||||
if (!ED25519_sign(signature, job.data() + DATA_OFFSET, job.size() - DATA_OFFSET, key.priv_key)) {
|
||||
LOGERR(1, "send_aux_job_donation: failed to sign the donation job");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ED25519_verify(job.data() + DATA_OFFSET, job.size() - DATA_OFFSET, signature, key.pub_key)) {
|
||||
LOGERR(1, "send_aux_job_donation: failed to verify the donation job's signature");
|
||||
return;
|
||||
}
|
||||
|
||||
OPENSSL_cleanse(&key, sizeof(key));
|
||||
|
||||
job.insert(job.end(), signature, signature + sizeof(signature));
|
||||
|
||||
m_p2pServer->broadcast_aux_job_donation_async(job.data(), static_cast<uint32_t>(job.size()), timestamp);
|
||||
#else
|
||||
LOGERR(1, "p2pool::send_aux_job_donation() must be built with TLS");
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
void p2pool::submit_block_async(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce)
|
||||
{
|
||||
{
|
||||
@@ -769,7 +940,7 @@ void p2pool::submit_aux_block() const
|
||||
}
|
||||
}
|
||||
|
||||
c->submit_solution(block_tpl, hashing_blob, nonce_offset, seed_hash, blob, proof, path);
|
||||
c->submit_solution(block_tpl->get_coinbase_merkle_proof(), hashing_blob, nonce_offset, seed_hash, blob, proof, path);
|
||||
}
|
||||
else {
|
||||
LOGWARN(3, "submit_aux_block: failed to get merkle proof for chain_id " << chain_id);
|
||||
@@ -1232,6 +1403,7 @@ void p2pool::parse_get_info_rpc(const char* data, size_t size)
|
||||
if (doc.HasParseError() || !doc.IsObject() || !doc.HasMember("result")) {
|
||||
LOGWARN(1, "get_info RPC response is invalid (\"result\" not found), trying again in 1 second");
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
||||
switch_host();
|
||||
get_info();
|
||||
return;
|
||||
}
|
||||
@@ -1249,6 +1421,7 @@ void p2pool::parse_get_info_rpc(const char* data, size_t size)
|
||||
!PARSE(result, info, stagenet)) {
|
||||
LOGWARN(1, "get_info RPC response is invalid, trying again in 1 second");
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
||||
switch_host();
|
||||
get_info();
|
||||
return;
|
||||
}
|
||||
@@ -1256,6 +1429,7 @@ void p2pool::parse_get_info_rpc(const char* data, size_t size)
|
||||
if (info.busy_syncing || !info.synchronized) {
|
||||
LOGINFO(1, "monerod is " << (info.busy_syncing ? "busy syncing" : "not synchronized") << ", trying again in 1 second");
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
||||
switch_host();
|
||||
get_info();
|
||||
return;
|
||||
}
|
||||
@@ -1766,6 +1940,15 @@ void p2pool::api_update_block_found(const ChainMain* data, const PoolBlock* bloc
|
||||
}
|
||||
}
|
||||
|
||||
void p2pool::on_external_block(const PoolBlock& block)
|
||||
{
|
||||
ReadLock lock(m_mergeMiningClientsLock);
|
||||
|
||||
for (IMergeMiningClient* c : m_mergeMiningClients) {
|
||||
c->on_external_block(block);
|
||||
}
|
||||
}
|
||||
|
||||
bool p2pool::get_difficulty_at_height(uint64_t height, difficulty_type& diff)
|
||||
{
|
||||
ReadLock lock(m_mainchainLock);
|
||||
@@ -1953,6 +2136,8 @@ int p2pool::run()
|
||||
loop->data = nullptr;
|
||||
GetLoopUserData(loop);
|
||||
|
||||
set_thread_name("p2pool");
|
||||
|
||||
try {
|
||||
get_info();
|
||||
load_found_blocks();
|
||||
@@ -1974,7 +2159,12 @@ int p2pool::run()
|
||||
bkg_jobs_tracker->wait();
|
||||
|
||||
#ifdef WITH_RANDOMX
|
||||
delete m_miner;
|
||||
{
|
||||
MutexLock lock(m_minerLock);
|
||||
|
||||
delete m_miner;
|
||||
m_miner = nullptr;
|
||||
}
|
||||
#endif
|
||||
delete m_stratumServer;
|
||||
delete m_p2pServer;
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#include "uv_util.h"
|
||||
#include "params.h"
|
||||
#include "merge_mining_client.h"
|
||||
#include <map>
|
||||
|
||||
namespace p2pool {
|
||||
@@ -86,6 +87,11 @@ public:
|
||||
virtual void handle_miner_data(MinerData& data) override;
|
||||
virtual void handle_chain_main(ChainMain& data, const char* extra) override;
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
void set_aux_job_donation(const std::vector<IMergeMiningClient::ChainParameters>& chain_params);
|
||||
void send_aux_job_donation();
|
||||
#endif
|
||||
|
||||
void update_aux_data(const hash& chain_id);
|
||||
|
||||
void submit_block_async(uint32_t template_id, uint32_t nonce, uint32_t extra_nonce);
|
||||
@@ -111,6 +117,7 @@ public:
|
||||
bool chainmain_get_by_hash(const hash& id, ChainMain& data) const;
|
||||
|
||||
void api_update_block_found(const ChainMain* data, const PoolBlock* block, bool update_stats_mod = true);
|
||||
void on_external_block(const PoolBlock& block);
|
||||
|
||||
bool get_difficulty_at_height(uint64_t height, difficulty_type& diff);
|
||||
|
||||
@@ -251,6 +258,12 @@ private:
|
||||
mutable uv_rwlock_t m_mergeMiningClientsLock;
|
||||
std::vector<IMergeMiningClient*> m_mergeMiningClients;
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
mutable uv_rwlock_t m_auxJobDonationLock;
|
||||
std::vector<IMergeMiningClient::ChainParameters> m_auxJobDonation;
|
||||
uint64_t m_auxJobDonationLastUpdated = 0;
|
||||
#endif
|
||||
|
||||
mutable uv_rwlock_t m_auxIdLock;
|
||||
std::vector<hash> m_auxId;
|
||||
uint32_t m_auxNonce = 0;
|
||||
|
||||
@@ -238,6 +238,13 @@ Params::Params(int argc, char* const argv[])
|
||||
ok = true;
|
||||
}
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
if ((strcmp(argv[i], "--adkf") == 0) && (i + 1 < argc)) {
|
||||
m_authorKeyFile = argv[++i];
|
||||
ok = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!ok) {
|
||||
// Wait to avoid log messages overlapping with printf() calls and making a mess on screen
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(10));
|
||||
|
||||
@@ -101,6 +101,17 @@ struct Params
|
||||
std::string m_tlsCertKey;
|
||||
#endif
|
||||
bool m_enableStratumHTTP = true;
|
||||
|
||||
#ifdef WITH_MERGE_MINING_DONATION
|
||||
std::string m_authorKeyFile;
|
||||
|
||||
struct AuthorKey {
|
||||
uint8_t pub_key[32];
|
||||
uint8_t expiration_time[8];
|
||||
uint8_t master_key_signature[64];
|
||||
uint8_t priv_key[64];
|
||||
};
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace p2pool
|
||||
|
||||
@@ -128,6 +128,11 @@ PoolBlock& PoolBlock::operator=(const PoolBlock& b)
|
||||
m_auxChains = b.m_auxChains;
|
||||
m_auxNonce = b.m_auxNonce;
|
||||
|
||||
m_hashingBlob = b.m_hashingBlob;
|
||||
|
||||
m_powHash = b.m_powHash;
|
||||
m_seed = b.m_seed;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -321,18 +326,32 @@ void PoolBlock::reset_offchain_data()
|
||||
m_auxChains.shrink_to_fit();
|
||||
|
||||
m_auxNonce = 0;
|
||||
|
||||
m_hashingBlob.clear();
|
||||
m_hashingBlob.shrink_to_fit();
|
||||
|
||||
m_powHash = {};
|
||||
m_seed = {};
|
||||
}
|
||||
|
||||
bool PoolBlock::get_pow_hash(RandomX_Hasher_Base* hasher, uint64_t height, const hash& seed_hash, hash& pow_hash, bool force_light_mode)
|
||||
{
|
||||
// Calculate the coinbase tx hash, then the merkle root of all transactions in the block - this merkle root is what goes into the hashing blob
|
||||
|
||||
// Monero transactions are hashed in 3 separate parts, the resulting 3 hashes are then hashed together to get the final result
|
||||
// For the reference, see "calculate_transaction_hash" in Monero's src/cryptonote_basic/cryptonote_format_utils.cpp
|
||||
|
||||
alignas(8) uint8_t hashes[HASH_SIZE * 3];
|
||||
|
||||
uint64_t* second_hash = reinterpret_cast<uint64_t*>(hashes + HASH_SIZE);
|
||||
|
||||
// Second hash is keccak of base rct data (it doesn't exist for the coinbase transaction, so it's a hash of a single 0x00 byte)
|
||||
second_hash[0] = 0x14281e7a9e7836bcull;
|
||||
second_hash[1] = 0x7d818f8229424636ull;
|
||||
second_hash[2] = 0x9165d677b4f71266ull;
|
||||
second_hash[3] = 0x8ac9bc64e0a996ffull;
|
||||
|
||||
// Third hash is null because there is no rct data in the coinbase transaction
|
||||
memset(hashes + HASH_SIZE * 2, 0, HASH_SIZE);
|
||||
|
||||
uint64_t count;
|
||||
@@ -354,6 +373,8 @@ bool PoolBlock::get_pow_hash(RandomX_Hasher_Base* hasher, uint64_t height, const
|
||||
|
||||
const uint8_t* miner_tx = mainchain_data.data() + header_size;
|
||||
hash tmp;
|
||||
|
||||
// "miner_tx_size - 1" because the last byte is 0x00 (base rct data), it goes into the second hash
|
||||
keccak(miner_tx, static_cast<int>(miner_tx_size) - 1, tmp.h);
|
||||
memcpy(hashes, tmp.h, HASH_SIZE);
|
||||
|
||||
@@ -361,6 +382,8 @@ bool PoolBlock::get_pow_hash(RandomX_Hasher_Base* hasher, uint64_t height, const
|
||||
uint8_t* h = reinterpret_cast<uint8_t*>(m_transactions.data());
|
||||
|
||||
keccak(reinterpret_cast<uint8_t*>(hashes), HASH_SIZE * 3, tmp.h);
|
||||
|
||||
// Save the coinbase tx hash into the first element of m_transactions
|
||||
memcpy(h, tmp.h, HASH_SIZE);
|
||||
|
||||
root_hash tmp_root;
|
||||
@@ -371,6 +394,9 @@ bool PoolBlock::get_pow_hash(RandomX_Hasher_Base* hasher, uint64_t height, const
|
||||
|
||||
writeVarint(count, [&blob, &blob_size](uint8_t b) { blob[blob_size++] = b; });
|
||||
|
||||
// cppcheck-suppress danglingLifetime
|
||||
m_hashingBlob.assign(blob, blob + blob_size);
|
||||
|
||||
return hasher->calculate(blob, blob_size, height, seed_hash, pow_hash, force_light_mode);
|
||||
}
|
||||
|
||||
|
||||
+8
-2
@@ -20,6 +20,8 @@
|
||||
#include "uv_util.h"
|
||||
#include "wallet.h"
|
||||
|
||||
#include <map>
|
||||
|
||||
#if defined(_DEBUG) || defined(DEV_DEBUG)
|
||||
#define POOL_BLOCK_DEBUG 1
|
||||
#else
|
||||
@@ -142,8 +144,8 @@ struct PoolBlock
|
||||
|
||||
// Merge mining extra data
|
||||
// Format: vector of (chain ID, chain data) pairs
|
||||
// Chain data format is arbitrary and depends on the merge mined chain's requirements
|
||||
std::vector<std::pair<hash, std::vector<uint8_t>>> m_mergeMiningExtra;
|
||||
// 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
|
||||
std::map<hash, std::vector<uint8_t>> m_mergeMiningExtra;
|
||||
|
||||
// Arbitrary extra data
|
||||
uint32_t m_sidechainExtraBuf[4];
|
||||
@@ -171,6 +173,10 @@ struct PoolBlock
|
||||
std::vector<AuxChainData> m_auxChains;
|
||||
uint32_t m_auxNonce;
|
||||
|
||||
std::vector<uint8_t> m_hashingBlob;
|
||||
hash m_powHash;
|
||||
hash m_seed;
|
||||
|
||||
std::vector<uint8_t> serialize_mainchain_data(size_t* header_size = nullptr, size_t* miner_tx_size = nullptr, int* outputs_offset = nullptr, int* outputs_blob_size = nullptr, const uint32_t* nonce = nullptr, const uint32_t* extra_nonce = nullptr) const;
|
||||
std::vector<uint8_t> serialize_sidechain_data() const;
|
||||
|
||||
|
||||
@@ -370,14 +370,15 @@ int PoolBlock::deserialize(const uint8_t* data, size_t size, const SideChain& si
|
||||
if (mm_extra_data_count > MERGE_MINING_MAX_CHAINS) return __LINE__;
|
||||
if (static_cast<uint64_t>(data_end - data) < mm_extra_data_count * (HASH_SIZE + 1)) return __LINE__;
|
||||
|
||||
m_mergeMiningExtra.reserve(mm_extra_data_count);
|
||||
|
||||
hash prev_chain_id;
|
||||
|
||||
for (uint64_t i = 0; i < mm_extra_data_count; ++i) {
|
||||
hash chain_id;
|
||||
READ_BUF(chain_id.h, HASH_SIZE);
|
||||
|
||||
// IDs must be ordered to avoid duplicates
|
||||
if (i && !(m_mergeMiningExtra[i - 1].first < chain_id)) return __LINE__;
|
||||
if (i && !(prev_chain_id < chain_id)) return __LINE__;
|
||||
prev_chain_id = chain_id;
|
||||
|
||||
uint64_t n;
|
||||
READ_VARINT(n);
|
||||
@@ -390,7 +391,7 @@ int PoolBlock::deserialize(const uint8_t* data, size_t size, const SideChain& si
|
||||
|
||||
READ_BUF(t.data(), n);
|
||||
|
||||
m_mergeMiningExtra.emplace_back(chain_id, std::move(t));
|
||||
m_mergeMiningExtra.emplace(chain_id, std::move(t));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -244,6 +244,7 @@ void RandomX_Hasher::set_seed(const hash& seed)
|
||||
{
|
||||
// Background doesn't work very well with xmrig mining on all cores
|
||||
//make_thread_background();
|
||||
set_thread_name("Dataset init");
|
||||
randomx_init_dataset(m_dataset, m_cache[m_index], a, b - a);
|
||||
});
|
||||
}
|
||||
@@ -426,6 +427,8 @@ void RandomX_Hasher_RPC::loop(void* data)
|
||||
{
|
||||
LOGINFO(1, "event loop started");
|
||||
|
||||
set_thread_name("RX hash RPC");
|
||||
|
||||
RandomX_Hasher_RPC* hasher = static_cast<RandomX_Hasher_RPC*>(data);
|
||||
|
||||
int err = uv_run(&hasher->m_loop, UV_RUN_DEFAULT);
|
||||
|
||||
+11
-9
@@ -573,15 +573,13 @@ bool SideChain::add_external_block(PoolBlock& block, std::vector<hash>& missing_
|
||||
LOGWARN(3, "add_external_block: block is built on top of an unknown mainchain block " << block.m_prevId << ", mainchain reorg might've happened");
|
||||
}
|
||||
|
||||
hash seed;
|
||||
if (!m_pool->get_seed(block.m_txinGenHeight, seed)) {
|
||||
if (!m_pool->get_seed(block.m_txinGenHeight, block.m_seed)) {
|
||||
LOGWARN(3, "add_external_block mined by " << block.m_minerWallet << ": couldn't get seed hash for mainchain height " << block.m_txinGenHeight);
|
||||
forget_incoming_block(block);
|
||||
return false;
|
||||
}
|
||||
|
||||
hash pow_hash;
|
||||
if (!block.get_pow_hash(m_pool->hasher(), block.m_txinGenHeight, seed, pow_hash)) {
|
||||
if (!block.get_pow_hash(m_pool->hasher(), block.m_txinGenHeight, block.m_seed, block.m_powHash)) {
|
||||
LOGWARN(3, "add_external_block: couldn't get PoW hash for height = " << block.m_sidechainHeight << ", mainchain height " << block.m_txinGenHeight << ". Ignoring it.");
|
||||
forget_incoming_block(block);
|
||||
return true;
|
||||
@@ -589,7 +587,7 @@ bool SideChain::add_external_block(PoolBlock& block, std::vector<hash>& missing_
|
||||
|
||||
// Check if it has the correct parent and difficulty to go right to monerod for checking
|
||||
MinerData miner_data = m_pool->miner_data();
|
||||
if ((block.m_prevId == miner_data.prev_id) && miner_data.difficulty.check_pow(pow_hash)) {
|
||||
if ((block.m_prevId == miner_data.prev_id) && miner_data.difficulty.check_pow(block.m_powHash)) {
|
||||
LOGINFO(0, log::LightGreen() << "add_external_block: block " << block.m_sidechainId << " has enough PoW for Monero network, submitting it");
|
||||
m_pool->submit_block_async(block.serialize_mainchain_data());
|
||||
}
|
||||
@@ -598,13 +596,13 @@ bool SideChain::add_external_block(PoolBlock& block, std::vector<hash>& missing_
|
||||
if (!m_pool->get_difficulty_at_height(block.m_txinGenHeight, diff)) {
|
||||
LOGWARN(3, "add_external_block: couldn't get mainchain difficulty for height = " << block.m_txinGenHeight);
|
||||
}
|
||||
else if (diff.check_pow(pow_hash)) {
|
||||
else if (diff.check_pow(block.m_powHash)) {
|
||||
LOGINFO(0, log::LightGreen() << "add_external_block: block " << block.m_sidechainId << " has enough PoW for Monero height " << block.m_txinGenHeight << ", submitting it");
|
||||
m_pool->submit_block_async(block.serialize_mainchain_data());
|
||||
}
|
||||
}
|
||||
|
||||
if (!block.m_difficulty.check_pow(pow_hash)) {
|
||||
if (!block.m_difficulty.check_pow(block.m_powHash)) {
|
||||
LOGWARN(3,
|
||||
"add_external_block mined by " << block.m_minerWallet <<
|
||||
": not enough PoW for height = " << block.m_sidechainHeight <<
|
||||
@@ -617,8 +615,8 @@ bool SideChain::add_external_block(PoolBlock& block, std::vector<hash>& missing_
|
||||
|
||||
// Calculate the same hash second time to check if it's an unstable hardware that caused this
|
||||
hash pow_hash2;
|
||||
if (block.get_pow_hash(m_pool->hasher(), block.m_txinGenHeight, seed, pow_hash2, true) && (pow_hash2 != pow_hash)) {
|
||||
LOGERR(0, "UNSTABLE HARDWARE DETECTED: Calculated the same hash twice, got different results: " << pow_hash << " != " << pow_hash2 << " (sidechain id = " << block.m_sidechainId << ')');
|
||||
if (block.get_pow_hash(m_pool->hasher(), block.m_txinGenHeight, block.m_seed, pow_hash2, true) && (pow_hash2 != block.m_powHash)) {
|
||||
LOGERR(0, "UNSTABLE HARDWARE DETECTED: Calculated the same hash twice, got different results: " << block.m_powHash << " != " << pow_hash2 << " (sidechain id = " << block.m_sidechainId << ')');
|
||||
if (block.m_difficulty.check_pow(pow_hash2)) {
|
||||
LOGINFO(3, "add_external_block second result has enough PoW for height = " << block.m_sidechainHeight << ", id = " << block.m_sidechainId);
|
||||
not_enough_pow = false;
|
||||
@@ -630,6 +628,8 @@ bool SideChain::add_external_block(PoolBlock& block, std::vector<hash>& missing_
|
||||
}
|
||||
}
|
||||
|
||||
m_pool->on_external_block(block);
|
||||
|
||||
bool block_found = false;
|
||||
|
||||
missing_blocks.clear();
|
||||
@@ -2370,6 +2370,8 @@ void SideChain::launch_precalc(const PoolBlock* block)
|
||||
|
||||
void SideChain::precalc_worker()
|
||||
{
|
||||
set_thread_name("Precalc");
|
||||
|
||||
std::vector<std::pair<size_t, const Wallet*>> wallets;
|
||||
wallets.reserve(m_chainWindowSize);
|
||||
|
||||
|
||||
@@ -1533,6 +1533,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 << '"'
|
||||
<< ",\"workers\":[";
|
||||
|
||||
const difficulty_type pool_diff = m_pool->side_chain().difficulty();
|
||||
|
||||
@@ -615,6 +615,34 @@ void TCPServer::loop(void* data)
|
||||
TCPServer* server = static_cast<TCPServer*>(data);
|
||||
|
||||
log_category_prefix = server->get_log_category();
|
||||
{
|
||||
size_t n = strlen(log_category_prefix);
|
||||
|
||||
if (n > 1) {
|
||||
// Discard the last character (space)
|
||||
--n;
|
||||
|
||||
char buf[16] = {};
|
||||
|
||||
if (n < sizeof(buf)) {
|
||||
// Set the thread name as is
|
||||
memcpy(buf, log_category_prefix, n);
|
||||
}
|
||||
else {
|
||||
// Thread name is too long, use the "first 7 characters - last 7 characters" format
|
||||
constexpr size_t k = sizeof(buf) / 2 - 1;
|
||||
|
||||
memcpy(buf, log_category_prefix, k);
|
||||
buf[k] = '-';
|
||||
memcpy(buf + k + 1, log_category_prefix + n - k, k);
|
||||
}
|
||||
|
||||
set_thread_name(buf);
|
||||
}
|
||||
else {
|
||||
set_thread_name("TCPServer");
|
||||
}
|
||||
}
|
||||
|
||||
LOGINFO(1, "event loop started");
|
||||
server_event_loop_thread = data;
|
||||
|
||||
@@ -60,6 +60,8 @@ const char* VERSION = "v" STR2(P2POOL_VERSION_MAJOR) "." STR2(P2POOL_VERSION_MIN
|
||||
#endif
|
||||
" on " __DATE__ ")";
|
||||
|
||||
const uint8_t ED25519_MASTER_PUBLIC_KEY[32] = {51,175,37,73,203,241,188,115,195,255,123,53,218,120,90,74,186,240,82,178,67,139,124,91,180,106,188,181,187,51,236,10};
|
||||
|
||||
std::string DATA_DIR;
|
||||
|
||||
SoftwareID get_software_id(uint32_t value)
|
||||
@@ -846,4 +848,21 @@ NOINLINE PerfTimer::~PerfTimer()
|
||||
LOGINFO(m_level, m_name << " took " << dt.count() << " ms");
|
||||
}
|
||||
|
||||
void set_thread_name(const char* name)
|
||||
{
|
||||
#if (UV_VERSION_MAJOR > 1) || ((UV_VERSION_MAJOR == 1) && (UV_VERSION_MINOR >= 50))
|
||||
const int err = uv_thread_setname(name);
|
||||
if (err) {
|
||||
LOGERR(1, "uv_thread_setname failed for " << name << ", error " << uv_err_name(err));
|
||||
}
|
||||
#elif defined(HAVE_PTHREAD_SETNAME_NP)
|
||||
const int err = pthread_setname_np(pthread_self(), name);
|
||||
if (err) {
|
||||
LOGERR(1, "pthread_setname_np failed for " << name << ", error " << err);
|
||||
}
|
||||
#else
|
||||
(void)name;
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace p2pool
|
||||
|
||||
+13
-2
@@ -35,13 +35,15 @@
|
||||
namespace p2pool {
|
||||
|
||||
#define P2POOL_VERSION_MAJOR 4
|
||||
#define P2POOL_VERSION_MINOR 4
|
||||
#define P2POOL_VERSION_MINOR 6
|
||||
#define P2POOL_VERSION_PATCH 0
|
||||
|
||||
constexpr uint32_t P2POOL_VERSION = (P2POOL_VERSION_MAJOR << 16) | (P2POOL_VERSION_MINOR << 8) | P2POOL_VERSION_PATCH;
|
||||
|
||||
extern const char* VERSION;
|
||||
|
||||
extern const uint8_t ED25519_MASTER_PUBLIC_KEY[32];
|
||||
|
||||
extern std::string DATA_DIR;
|
||||
|
||||
enum class SoftwareID : uint32_t {
|
||||
@@ -67,7 +69,16 @@ template<typename T>
|
||||
struct ScopeGuard : public nocopy_nomove
|
||||
{
|
||||
explicit FORCEINLINE ScopeGuard(T&& handler) : m_handler(std::move(handler)) {}
|
||||
FORCEINLINE ~ScopeGuard() { m_handler(); }
|
||||
|
||||
FORCEINLINE ~ScopeGuard()
|
||||
{
|
||||
// Because the handler can throw an exception, and we don't want exceptions in a destructor
|
||||
try {
|
||||
m_handler();
|
||||
}
|
||||
catch(...) {
|
||||
}
|
||||
}
|
||||
|
||||
T m_handler;
|
||||
};
|
||||
|
||||
@@ -232,4 +232,6 @@ void parallel_run(uv_loop_t* loop, T&& callback, bool wait = false)
|
||||
}
|
||||
}
|
||||
|
||||
void set_thread_name(const char* name);
|
||||
|
||||
} // namespace p2pool
|
||||
|
||||
+10
-1
@@ -42,9 +42,10 @@ ZMQReader::ZMQReader(const std::string& address, uint32_t zmq_port, const std::s
|
||||
addr_buf[0] = '\0';
|
||||
|
||||
std::random_device rd;
|
||||
std::mt19937_64 rng(rd());
|
||||
|
||||
for (uint32_t i = 0; i < 100; ++i) {
|
||||
const uint32_t port = 49152 + (rd() % 16384);
|
||||
const uint32_t port = 49152 + (rng() % 16384);
|
||||
|
||||
try {
|
||||
log::Stream s(addr_buf);
|
||||
@@ -130,6 +131,8 @@ void ZMQReader::monitor_thread(void* arg)
|
||||
{
|
||||
LOGINFO(1, "monitor thread ready");
|
||||
|
||||
set_thread_name("ZMQ monitor");
|
||||
|
||||
ZMQReader* r = reinterpret_cast<ZMQReader*>(arg);
|
||||
|
||||
do {} while (!r->m_stopped && r->m_monitor->m_connected && r->m_monitor->check_event(-1));
|
||||
@@ -151,6 +154,8 @@ void ZMQReader::run()
|
||||
m_workerThreadRunning = true;
|
||||
ON_SCOPE_LEAVE([this]() { m_workerThreadRunning = false; });
|
||||
|
||||
set_thread_name("ZMQ worker");
|
||||
|
||||
zmq_msg_t message = {};
|
||||
|
||||
try {
|
||||
@@ -211,6 +216,7 @@ bool ZMQReader::connect(const std::string& address, bool keep_monitor)
|
||||
if (!id) {
|
||||
std::random_device rd;
|
||||
id = (static_cast<uint64_t>(rd()) << 32) | static_cast<uint32_t>(rd());
|
||||
id >>= 1; // to avoid MAX_UINT64 case
|
||||
}
|
||||
|
||||
char buf[64];
|
||||
@@ -227,6 +233,9 @@ bool ZMQReader::connect(const std::string& address, bool keep_monitor)
|
||||
m_subscriber.connect(address);
|
||||
|
||||
while (!monitor->m_connected && monitor->check_event(-1)) {
|
||||
if (monitor->m_connected) {
|
||||
break;
|
||||
}
|
||||
if (duration_cast<milliseconds>(steady_clock::now() - start_time).count() >= 1000) {
|
||||
LOGERR(1, "failed to connect to " << address);
|
||||
delete monitor;
|
||||
|
||||
@@ -30,6 +30,8 @@ add_subdirectory(cmake/ssl)
|
||||
include_directories(../external/src/grpc/third_party/boringssl-with-bazel/src/include)
|
||||
add_definitions(-DWITH_TLS)
|
||||
|
||||
add_definitions(-DWITH_MERGE_MINING_DONATION)
|
||||
|
||||
add_definitions(-DP2POOL_UNIT_TESTS)
|
||||
add_definitions(-DP2POOL_SIDECHAIN_EXTRA_1=1)
|
||||
|
||||
|
||||
+1
-1
Submodule tests/googletest updated: 6910c9d916...52eb8108c5
Reference in New Issue
Block a user