Skip to content

Add support for carrot (legacy, view-incoming, and view-balance keys)#185

Draft
vtnerd wants to merge 1 commit intodevelopfrom
feature/carrot_squashed
Draft

Add support for carrot (legacy, view-incoming, and view-balance keys)#185
vtnerd wants to merge 1 commit intodevelopfrom
feature/carrot_squashed

Conversation

@vtnerd
Copy link
Copy Markdown
Owner

@vtnerd vtnerd commented Sep 29, 2025

This is a draft for the carrot/fcmp++ changes that are upcoming. The CI should fail initially, as this only works with the fcmp++ branch of Monero. This PR will be in draft status until fcmp++ code is merged into the Monero repo, and then proper CI will run.

Latest Status 2026/04/02

The unit tests indicate that legacy, view-incoming, and view-balance key scanning works with incoming carrot/fcmp++ XMR, which is useful for xmrchat et al which need real-time reporting. The same tests also verify that legacy and view-balance keys detect spends, making lws useful for displaying the balance of recovered wallets. This branch now supports the newest changes to the key-image generation.

This PR also provides a new REST endpoint: get_tree_paths. That endpoint takes "legacy" output ids or new "unified" output ids, and returns everything needed to construct a fcmp++ tree needed for transaction construction. In other words, this PR is fully ready for fcmp++ receiving and spending.

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from b5f9a65 to 9d44b7a Compare October 1, 2025 04:09
@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from 9d44b7a to 4de5926 Compare October 11, 2025 02:17
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Oct 11, 2025

View-balance keys have a decent amount of tests now for scanning, showing that it works. Only the REST API needs to be validated. A bug in fcmp++ subaddress generation code prevents the tests from passing right now.

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Oct 11, 2025

Additionally view-incoming keys should work out-of-the-box, except subaddresses is broken for them. A fix for this will come a bit later.

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from 4de5926 to a179709 Compare October 13, 2025 19:26
@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from a179709 to cc1aa4e Compare October 23, 2025 20:38
@vtnerd vtnerd changed the title Add support for carrot (legacy and view-balance keys) Add support for carrot (legacy, view-incoming, and view-balance keys) Oct 23, 2025
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Oct 23, 2025

Updated /provision_subaddrs and /upsert_subaddrs with an optional generate_address_key field. Users can /login with their view-incoming-key, and then later provide their generate-address-key when provisioning subaddresses.

With this, the view-incoming-key support is basically complete. Internal spends will be completely missed, but that is intended (and technically desired by end user).

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from cc1aa4e to acbb604 Compare October 23, 2025 21:47
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Oct 23, 2025

Realized I needed to enhance the tests for legacy-view keys with subaddress provisioning. So that was done.

@sa8ab
Copy link
Copy Markdown

sa8ab commented Nov 21, 2025

I am trying to test lws on stressnet but building this PR with docker fails in Ubuntu 24.04.3 LTS

In Dockerfile I have made following changes.

  • Added defaults
ARG MONERO_BRANCH=v0.19.0.0-alpha.1.4 ARG
ARG MONERO_COMMIT_HASH=6a5fbd96f63c68074fb5d8e206d77452fa471de9
  • Changed monero repo url to https://github.com/seraphis-migration/monero

  • Installing rust before building monero

RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
    && . $HOME/.cargo/env \
    && rustup default stable
Logs
#17 685.0 [ 96%] Built target daemon_rpc_server
#17 685.0 make[3]: Entering directory '/monero/build/release'
#17 685.1 Scanning dependencies of target daemon
#17 685.1 make[3]: Leaving directory '/monero/build/release'
#17 685.1 make[3]: Entering directory '/monero/build/release'
#17 685.1 [ 98%] Building CXX object src/daemon/CMakeFiles/daemon.dir/command_server.cpp.o
#17 685.1 [ 98%] Building CXX object src/daemon/CMakeFiles/daemon.dir/command_parser_executor.cpp.o
#17 704.7 [ 98%] Building CXX object src/daemon/CMakeFiles/daemon.dir/daemon.cpp.o
#17 706.3 [ 98%] Building CXX object src/daemon/CMakeFiles/daemon.dir/executor.cpp.o
#17 709.1 [ 98%] Building CXX object src/daemon/CMakeFiles/daemon.dir/main.cpp.o
#17 730.4 [100%] Building CXX object src/daemon/CMakeFiles/daemon.dir/rpc_command_executor.cpp.o
#17 770.7 [100%] Linking CXX executable ../../bin/monerod
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-socket_base.o): in function `zmq::socket_base_t::connect(char const*)':
#17 772.5 (.text+0x5f2b): undefined reference to `pgm_freeaddrinfo'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_client.o): in function `zmq::gssapi_client_t::~gssapi_client_t()':
#17 772.5 (.text+0x5d): undefined reference to `gss_release_cred'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_client.o): in function `zmq::gssapi_client_t::process_next_token(zmq::msg_t*) [clone .part.0]':
#17 772.5 (.text+0x246): undefined reference to `gss_release_name'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_client.o): in function `zmq::gssapi_client_t::~gssapi_client_t()':
#17 772.5 (.text+0x780): undefined reference to `gss_release_cred'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_client.o): in function `zmq::gssapi_client_t::initialize_context()':
#17 772.5 (.text+0x7fd): undefined reference to `gss_init_sec_context'
#17 772.5 /usr/bin/ld: (.text+0x84d): undefined reference to `gss_import_name'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_client.o): in function `zmq::gssapi_client_t::produce_next_token(zmq::msg_t*)':
#17 772.5 (.text+0x8a0): undefined reference to `gss_release_buffer'
#17 772.5 /usr/bin/ld: (.text+0x8c2): undefined reference to `gss_release_buffer'
#17 772.5 /usr/bin/ld: (.text+0x8ce): undefined reference to `gss_release_name'
#17 772.5 /usr/bin/ld: (.text+0x8e2): undefined reference to `gss_release_name'
#17 772.5 /usr/bin/ld: (.text+0x8f7): undefined reference to `gss_delete_sec_context'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_server.o): in function `zmq::gssapi_server_t::~gssapi_server_t()':
#17 772.5 (.text+0x21c): undefined reference to `gss_release_cred'
#17 772.5 /usr/bin/ld: (.text+0x230): undefined reference to `gss_release_name'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_server.o): in function `zmq::gssapi_server_t::~gssapi_server_t()':
#17 772.5 (.text+0x36a): undefined reference to `gss_release_cred'
#17 772.5 /usr/bin/ld: (.text+0x37e): undefined reference to `gss_release_name'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_server.o): in function `zmq::gssapi_server_t::send_zap_request()':
#17 772.5 (.text+0x423): undefined reference to `gss_display_name'
#17 772.5 /usr/bin/ld: (.text+0x44c): undefined reference to `gss_release_buffer'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_server.o): in function `zmq::gssapi_server_t::produce_next_token(zmq::msg_t*)':
#17 772.5 (.text+0x4ae): undefined reference to `gss_release_buffer'
#17 772.5 /usr/bin/ld: (.text+0x4c0): undefined reference to `gss_release_name'
#17 772.5 /usr/bin/ld: (.text+0x4d5): undefined reference to `gss_delete_sec_context'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_server.o): in function `zmq::gssapi_server_t::process_next_token(zmq::msg_t*)':
#17 772.5 (.text+0x5ca): undefined reference to `gss_release_name'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_server.o): in function `zmq::gssapi_server_t::accept_context()':
#17 772.5 (.text+0x60a): undefined reference to `gss_accept_sec_context'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::init_address(char const*, pgm_addrinfo_t**, unsigned short*)':
#17 772.5 (.text+0xb2): undefined reference to `pgm_getaddrinfo'
#17 772.5 /usr/bin/ld: (.text+0x19f): undefined reference to `pgm_error_free'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::get_receiver_fds(int*, int*)':
#17 772.5 (.text+0x22a): undefined reference to `pgm_getsockopt'
#17 772.5 /usr/bin/ld: (.text+0x25d): undefined reference to `pgm_getsockopt'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::get_sender_fds(int*, int*, int*, int*)':
#17 772.5 (.text+0x4f6): undefined reference to `pgm_getsockopt'
#17 772.5 /usr/bin/ld: (.text+0x529): undefined reference to `pgm_getsockopt'
#17 772.5 /usr/bin/ld: (.text+0x55c): undefined reference to `pgm_getsockopt'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o):(.text+0x58f): more undefined references to `pgm_getsockopt' follow
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::send(unsigned char*, unsigned long)':
#17 772.5 (.text+0x9c3): undefined reference to `pgm_send'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::get_rx_timeout()':
#17 772.5 (.text+0xba0): undefined reference to `pgm_getsockopt'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::get_tx_timeout()':
#17 772.5 (.text+0xc92): undefined reference to `pgm_getsockopt'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::get_max_tsdu_size()':
#17 772.5 (.text+0xd7d): undefined reference to `pgm_getsockopt'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::init(bool, char const*)':
#17 772.5 (.text+0xf1f): undefined reference to `pgm_socket'
#17 772.5 /usr/bin/ld: (.text+0xfc5): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0xfe8): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x102d): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x105f): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x1109): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o):(.text+0x112e): more undefined references to `pgm_setsockopt' follow
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::init(bool, char const*)':
#17 772.5 (.text+0x1297): undefined reference to `pgm_gsi_create_from_data'
#17 772.5 /usr/bin/ld: (.text+0x12eb): undefined reference to `pgm_bind3'
#17 772.5 /usr/bin/ld: (.text+0x13bc): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x13cf): undefined reference to `pgm_close'
#17 772.5 /usr/bin/ld: (.text+0x13e5): undefined reference to `pgm_freeaddrinfo'
#17 772.5 /usr/bin/ld: (.text+0x13fd): undefined reference to `pgm_error_free'
#17 772.5 /usr/bin/ld: (.text+0x144e): undefined reference to `pgm_socket'
#17 772.5 /usr/bin/ld: (.text+0x1566): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x1593): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x15bb): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x15de): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x1618): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x162a): undefined reference to `pgm_freeaddrinfo'
#17 772.5 /usr/bin/ld: (.text+0x1658): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x1685): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x16b8): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x16db): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: (.text+0x16ee): undefined reference to `pgm_connect'
#17 772.5 /usr/bin/ld: (.text+0x1786): undefined reference to `pgm_setsockopt'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::receive(void**, pgm_tsi_t const**)':
#17 772.5 (.text+0x1c0b): undefined reference to `pgm_recvmsgv'
#17 772.5 /usr/bin/ld: (.text+0x1ecf): undefined reference to `pgm_free'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::process_upstream()':
#17 772.5 (.text+0x21af): undefined reference to `pgm_recvmsgv'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-pgm_socket.o): in function `zmq::pgm_socket_t::~pgm_socket_t()':
#17 772.5 (.text+0x2317): undefined reference to `pgm_close'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-norm_engine.o): in function `zmq::norm_engine_t::init(char const*, bool, bool)':
#17 772.5 (.text+0x65): undefined reference to `NORM_NODE_ANY'
#17 772.5 /usr/bin/ld: (.text+0x187): undefined reference to `NORM_INSTANCE_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x19e): undefined reference to `NormCreateSession'
#17 772.5 /usr/bin/ld: (.text+0x1a5): undefined reference to `NORM_SESSION_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x1ba): undefined reference to `NormIsUnicastAddress'
#17 772.5 /usr/bin/ld: (.text+0x1d3): undefined reference to `NormSetTTL'
#17 772.5 /usr/bin/ld: (.text+0x1eb): undefined reference to `NormSetRxPortReuse'
#17 772.5 /usr/bin/ld: (.text+0x1fc): undefined reference to `NormSetLoopback'
#17 772.5 /usr/bin/ld: (.text+0x210): undefined reference to `NormSetMulticastInterface'
#17 772.5 /usr/bin/ld: (.text+0x256): undefined reference to `NormSetDefaultUnicastNack'
#17 772.5 /usr/bin/ld: (.text+0x26c): undefined reference to `NormSetDefaultSyncPolicy'
#17 772.5 /usr/bin/ld: (.text+0x27d): undefined reference to `NormStartReceiver'
#17 772.5 /usr/bin/ld: (.text+0x298): undefined reference to `NormGetRandomSessionId'
#17 772.5 /usr/bin/ld: (.text+0x2c3): undefined reference to `NormStartSender'
#17 772.5 /usr/bin/ld: (.text+0x2df): undefined reference to `NormSetCongestionControl'
#17 772.5 /usr/bin/ld: (.text+0x302): undefined reference to `NormStreamOpen'
#17 772.5 /usr/bin/ld: (.text+0x309): undefined reference to `NORM_OBJECT_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x32d): undefined reference to `NormDestroyInstance'
#17 772.5 /usr/bin/ld: (.text+0x334): undefined reference to `NORM_SESSION_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x342): undefined reference to `NORM_INSTANCE_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x363): undefined reference to `NormCreateInstance'
#17 772.5 /usr/bin/ld: (.text+0x36a): undefined reference to `NORM_INSTANCE_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x3b0): undefined reference to `NormDestroyInstance'
#17 772.5 /usr/bin/ld: (.text+0x3b7): undefined reference to `NORM_INSTANCE_INVALID'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-norm_engine.o): in function `zmq::norm_engine_t::send_data()':
#17 772.5 (.text+0x79a): undefined reference to `NormStreamWrite'
#17 772.5 /usr/bin/ld: (.text+0x7f2): undefined reference to `NormStreamFlush'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-norm_engine.o): in function `zmq::norm_engine_t::plug(zmq::io_thread_t*, zmq::session_base_t*)':
#17 772.5 (.text+0xa64): undefined reference to `NormGetDescriptor'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-norm_engine.o): in function `zmq::norm_engine_t::recv_data(void const*)':
#17 772.5 (.text+0x1189): undefined reference to `NORM_OBJECT_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x119a): undefined reference to `NormObjectGetType'
#17 772.5 /usr/bin/ld: (.text+0x11ab): undefined reference to `NormObjectGetUserData'
#17 772.5 /usr/bin/ld: (.text+0x12b4): undefined reference to `NormStreamSeekMsgStart'
#17 772.5 /usr/bin/ld: (.text+0x12d5): undefined reference to `NormStreamRead'
#17 772.5 /usr/bin/ld: (.text+0x131a): undefined reference to `NormStreamRead'
#17 772.5 /usr/bin/ld: (.text+0x1848): undefined reference to `NormObjectSetUserData'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-norm_engine.o): in function `zmq::norm_engine_t::restart_input()':
#17 772.5 (.text+0x19cc): undefined reference to `NORM_OBJECT_INVALID'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-norm_engine.o): in function `zmq::norm_engine_t::in_event()':
#17 772.5 (.text+0x1a2c): undefined reference to `NormGetNextEvent'
#17 772.5 /usr/bin/ld: (.text+0x1a66): undefined reference to `NormObjectGetUserData'
#17 772.5 /usr/bin/ld: (.text+0x1b7e): undefined reference to `NormNodeDelete'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-norm_engine.o): in function `zmq::norm_engine_t::shutdown()':
#17 772.5 (.text+0x1c8d): undefined reference to `NORM_SESSION_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x1c97): undefined reference to `NormDestroySession'
#17 772.5 /usr/bin/ld: (.text+0x1cac): undefined reference to `NORM_INSTANCE_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x1cb6): undefined reference to `NormStopInstance'
#17 772.5 /usr/bin/ld: (.text+0x1cc2): undefined reference to `NormDestroyInstance'
#17 772.5 /usr/bin/ld: (.text+0x1cd9): undefined reference to `NormStopReceiver'
#17 772.5 /usr/bin/ld: (.text+0x1d1d): undefined reference to `NormStopSender'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-norm_engine.o): in function `zmq::norm_engine_t::norm_engine_t(zmq::io_thread_t*, zmq::options_t const&)':
#17 772.5 (.text+0x26d3): undefined reference to `NORM_INSTANCE_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x26e1): undefined reference to `NORM_SESSION_INVALID'
#17 772.5 /usr/bin/ld: (.text+0x26fd): undefined reference to `NORM_OBJECT_INVALID'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-ip.o): in function `zmq::initialize_network()':
#17 772.5 (.text+0x4a6): undefined reference to `pgm_init'
#17 772.5 /usr/bin/ld: (.text+0x539): undefined reference to `pgm_error_free'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-ip.o): in function `zmq::shutdown_network()':
#17 772.5 (.text+0x5b9): undefined reference to `pgm_shutdown'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_mechanism_base.o): in function `zmq::gssapi_mechanism_base_t::~gssapi_mechanism_base_t()':
#17 772.5 (.text+0x12a): undefined reference to `gss_release_name'
#17 772.5 /usr/bin/ld: (.text+0x140): undefined reference to `gss_delete_sec_context'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_mechanism_base.o): in function `zmq::gssapi_mechanism_base_t::~gssapi_mechanism_base_t()':
#17 772.5 (.text+0x17a): undefined reference to `gss_release_name'
#17 772.5 /usr/bin/ld: (.text+0x190): undefined reference to `gss_delete_sec_context'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_mechanism_base.o): in function `zmq::gssapi_mechanism_base_t::encode_message(zmq::msg_t*)':
#17 772.5 (.text+0x28d): undefined reference to `gss_wrap'
#17 772.5 /usr/bin/ld: (.text+0x30c): undefined reference to `gss_release_buffer'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_mechanism_base.o): in function `zmq::gssapi_mechanism_base_t::decode_message(zmq::msg_t*)':
#17 772.5 (.text+0x5b9): undefined reference to `gss_unwrap'
#17 772.5 /usr/bin/ld: (.text+0x650): undefined reference to `gss_release_buffer'
#17 772.5 /usr/bin/ld: (.text+0x8ac): undefined reference to `gss_release_buffer'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_mechanism_base.o): in function `zmq::gssapi_mechanism_base_t::convert_nametype(int)':
#17 772.5 (.text+0xe47): undefined reference to `GSS_C_NT_USER_NAME'
#17 772.5 /usr/bin/ld: (.text+0xe53): undefined reference to `GSS_C_NT_HOSTBASED_SERVICE'
#17 772.5 /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzmq.a(libzmq_la-gssapi_mechanism_base.o): in function `zmq::gssapi_mechanism_base_t::acquire_credentials(char*, gss_cred_id_struct**, gss_OID_desc_struct*)':
#17 772.5 (.text+0xeb0): undefined reference to `gss_import_name'
#17 772.5 /usr/bin/ld: (.text+0xecf): undefined reference to `gss_acquire_cred'
#17 772.5 /usr/bin/ld: (.text+0xee0): undefined reference to `gss_release_name'
#17 772.5 collect2: error: ld returned 1 exit status
#17 772.5 make[3]: *** [src/daemon/CMakeFiles/daemon.dir/build.make:228: bin/monerod] Error 1
#17 772.5 make[3]: Leaving directory '/monero/build/release'
#17 772.5 make[2]: Leaving directory '/monero/build/release'
#17 772.5 make[2]: *** [CMakeFiles/Makefile2:4280: src/daemon/CMakeFiles/daemon.dir/all] Error 2
#17 772.5 make[1]: *** [CMakeFiles/Makefile2:4287: src/daemon/CMakeFiles/daemon.dir/rule] Error 2
#17 772.5 make[1]: Leaving directory '/monero/build/release'
#17 772.5 make: Leaving directory '/monero/build/release'
#17 772.5 make: *** [Makefile:1397: daemon] Error 2
#17 ERROR: process "/bin/sh -c . $HOME/.cargo/env     && git clone --recursive --branch ${MONERO_BRANCH}     https://github.com/seraphis-migration/monero .     && test `git rev-parse HEAD` = ${MONERO_COMMIT_HASH} || exit 1     && git submodule init && git submodule update     && mkdir -p build/release && cd build/release     && case ${TARGETARCH:-amd64} in         \"arm64\") cmake -D STATIC=ON -D ARCH=\"armv8-a\" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG=\"linux-armv8\" ../.. ;;         \"amd64\") cmake -D STATIC=ON -D ARCH=\"x86-64\" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG=\"linux-x64\" ../.. ;;         *) echo \"Dockerfile does not support this platform\"; exit 1 ;;     esac     && cd /monero && . $HOME/.cargo/env && nice -n 19 ionice -c2 -n7 make -j${NPROC:-$(nproc)} -C build/release daemon lmdb_lib multisig" did not complete successfully: exit code: 2
------
 > [build  9/12] RUN . $HOME/.cargo/env     && git clone --recursive --branch v0.19.0.0-alpha.1.4     https://github.com/seraphis-migration/monero .     && test `git rev-parse HEAD` = 6a5fbd96f63c68074fb5d8e206d77452fa471de9 || exit 1     && git submodule init && git submodule update     && mkdir -p build/release && cd build/release     && case amd64 in         "arm64") cmake -D STATIC=ON -D ARCH="armv8-a" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-armv8" ../.. ;;         "amd64") cmake -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-x64" ../.. ;;         *) echo "Dockerfile does not support this platform"; exit 1 ;;     esac     && cd /monero && . $HOME/.cargo/env && nice -n 19 ionice -c2 -n7 make -j${NPROC:-$(nproc)} -C build/release daemon lmdb_lib multisig:
772.5 /usr/bin/ld: (.text+0xee0): undefined reference to `gss_release_name'
772.5 collect2: error: ld returned 1 exit status
772.5 make[3]: *** [src/daemon/CMakeFiles/daemon.dir/build.make:228: bin/monerod] Error 1
772.5 make[3]: Leaving directory '/monero/build/release'
772.5 make[2]: Leaving directory '/monero/build/release'
772.5 make[2]: *** [CMakeFiles/Makefile2:4280: src/daemon/CMakeFiles/daemon.dir/all] Error 2
772.5 make[1]: *** [CMakeFiles/Makefile2:4287: src/daemon/CMakeFiles/daemon.dir/rule] Error 2
772.5 make[1]: Leaving directory '/monero/build/release'
772.5 make: Leaving directory '/monero/build/release'
772.5 make: *** [Makefile:1397: daemon] Error 2
------
Dockerfile:85

84 | # Git pull Monero source at specified tag/branch and compile monerod binary

85 | >>> RUN . $HOME/.cargo/env \

86 | >>> && git clone --recursive --branch ${MONERO_BRANCH} \

87 | >>> https://github.com/seraphis-migration/monero . \

88 | >>> && test git rev-parse HEAD = ${MONERO_COMMIT_HASH} || exit 1 \

89 | >>> && git submodule init && git submodule update \

90 | >>> && mkdir -p build/release && cd build/release \

91 | >>> # Create make build files manually for release-static-linux-${TARGETARCH}

92 | >>> && case ${TARGETARCH:-amd64} in \

93 | >>> "arm64") cmake -D STATIC=ON -D ARCH="armv8-a" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-armv8" ../.. ;; \

94 | >>> "amd64") cmake -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-x64" ../.. ;; \

95 | >>> *) echo "Dockerfile does not support this platform"; exit 1 ;; \

96 | >>> esac \

97 | >>> # Build only monerod binary using number of available threads

98 | >>> && cd /monero && . $HOME/.cargo/env && nice -n 19 ionice -c2 -n7 make -j${NPROC:-$(nproc)} -C build/release daemon lmdb_lib multisig

99 |


failed to solve: process "/bin/sh -c . $HOME/.cargo/env && git clone --recursive --branch ${MONERO_BRANCH} https://github.com/seraphis-migration/monero . && test git rev-parse HEAD = ${MONERO_COMMIT_HASH} || exit 1 && git submodule init && git submodule update && mkdir -p build/release && cd build/release && case ${TARGETARCH:-amd64} in "arm64") cmake -D STATIC=ON -D ARCH="armv8-a" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-armv8" ../.. ;; "amd64") cmake -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="linux-x64" ../.. ;; *) echo "Dockerfile does not support this platform"; exit 1 ;; esac && cd /monero && . $HOME/.cargo/env && nice -n 19 ionice -c2 -n7 make -j${NPROC:-$(nproc)} -C build/release daemon lmdb_lib multisig" did not complete successfully: exit code: 2

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Nov 21, 2025

Use the latest Dockerfile from the develop branch, not this branch. It looks like a rebase needs to be done on this branch, so they will be the same (hopefully) shortly.

@sa8ab
Copy link
Copy Markdown

sa8ab commented Nov 22, 2025

Using Dockerfile from develop builds monero step but fails after that.
I also did same changes here ( changing branch and installing rust )

Logs
 > [build 16/16] RUN set -ex     && git submodule init && git submodule update     && rm -rf build && mkdir build && cd build     && cmake -D CMAKE_BUILD_TYPE=Release -D STATIC=ON -D BUILD_TESTS=ON -D WITH_RMQ=ON -D MONERO_SOURCE_DIR=/monero -D MONERO_BUILD_DIR=/monero/build/release ..     && make -j${NPROC:-$(nproc)}     && ./tests/unit/monero-lws-unit:
10.59 -- Detecting CXX compiler ABI info - done
10.60 -- Check for working CXX compiler: /usr/bin/c++ - skipped
10.60 -- Detecting CXX compile features
10.60 -- Detecting CXX compile features - done
10.60 CMake Error at CMakeLists.txt:173 (message):
10.60   Unable to find required Monero library wallet
10.60 
10.60 
10.60 -- Configuring incomplete, errors occurred!
10.60 See also "/monero-lws/build/CMakeFiles/CMakeOutput.log".
------
Dockerfile:122

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from acbb604 to d4eb3da Compare November 23, 2025 02:33
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Nov 23, 2025

Rebased and fixed a small DB upgrade issue.

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from d4eb3da to b440c4e Compare November 24, 2025 20:47
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Nov 24, 2025

Added missing files.

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from b440c4e to b6e0a27 Compare November 25, 2025 00:16
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Nov 25, 2025

Updates to build process.

@sa8ab try now with these latest changes. The Dockerfile should work, provided you use the correct branch.

@sa8ab
Copy link
Copy Markdown

sa8ab commented Nov 28, 2025

With last changes Dockerfile builds but with a small change
I had to remove this line
# && ./tests/unit/monero-lws-unit because it was throwing a timeout error on tests.

After adding an account it starts logging too many messages which are same and with very low delay in between for example ( about 50 per second ):

Logs

lws     | 2025-11-28 00:20:42.247       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:42.247       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:42.248       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:42.264       I Retrieving current active account list
lws     | 2025-11-28 00:20:42.264       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:42.369       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:42.369       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:42.370       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:42.370       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:42.372       I Retrieving current active account list
lws     | 2025-11-28 00:20:42.372       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:42.473       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:42.473       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:42.474       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:42.474       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:42.475       I Retrieving current active account list
lws     | 2025-11-28 00:20:42.475       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:42.574       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:42.574       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:42.575       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:42.575       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:42.575       I Retrieving current active account list
lws     | 2025-11-28 00:20:42.576       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:42.677       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:42.677       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:42.677       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:42.677       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:42.678       I Retrieving current active account list
lws     | 2025-11-28 00:20:42.678       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:42.778       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:42.778       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:42.779       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:42.779       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:42.780       I Retrieving current active account list
lws     | 2025-11-28 00:20:42.780       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:42.881       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:42.881       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:42.882       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:42.882       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:42.883       I Retrieving current active account list
lws     | 2025-11-28 00:20:42.883       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:42.982       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:42.982       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:42.982       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:42.983       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:42.983       I Retrieving current active account list
lws     | 2025-11-28 00:20:42.984       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.085       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.085       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:43.086       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:43.086       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:43.087       I Retrieving current active account list
lws     | 2025-11-28 00:20:43.087       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.186       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.186       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:43.187       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:43.187       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:43.188       I Retrieving current active account list
lws     | 2025-11-28 00:20:43.188       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.288       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.288       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:43.289       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:43.289       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:43.290       I Retrieving current active account list
lws     | 2025-11-28 00:20:43.290       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.388       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.388       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:43.389       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:43.389       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:43.390       I Retrieving current active account list
lws     | 2025-11-28 00:20:43.390       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.491       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.491       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:43.492       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:43.492       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:43.493       I Retrieving current active account list
lws     | 2025-11-28 00:20:43.493       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.593       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.593       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:43.594       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:43.594       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:43.595       I Retrieving current active account list
lws     | 2025-11-28 00:20:43.595       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.694       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.694       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:43.694       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:43.695       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:43.695       I Retrieving current active account list
lws     | 2025-11-28 00:20:43.696       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.794       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.794       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:43.795       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:43.795       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:43.796       I Retrieving current active account list
lws     | 2025-11-28 00:20:43.796       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.895       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.895       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:43.896       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:43.896       I Starting blockchain sync with daemon
lws     | 2025-11-28 00:20:43.897       I Retrieving current active account list
lws     | 2025-11-28 00:20:43.897       I Starting scan loops on 2 thread(s) with 1 account(s)
lws     | 2025-11-28 00:20:43.999       I Thread 1 processed 11 blocks(s) @ height 2885361 against 1 account(s)
lws     | 2025-11-28 00:20:43.999       I Blockchain reorg detected, resetting state
lws     | 2025-11-28 00:20:44.001       D Stopping rpc::scanner::server async operations
lws     | 2025-11-28 00:20:44.001       I Starting blockchain sync with daemon

And new transactions are not triggering the webhook, at least as I noticed cause there are too many logs.

Final Dockerfile:

Details

# Initial base from https://github.com/sethforprivacy/monero-lws/blob/588c7f1965d3afbda8a65dc870645650e063e897/Dockerfile

# Set monerod version to install from github
ARG MONERO_COMMIT_HASH=6a5fbd96f63c68074fb5d8e206d77452fa471de9

# Select ubuntu:22.04 for the build image base
FROM ubuntu:22.04 as build

# Install all dependencies for a static build
# Added DEBIAN_FRONTEND=noninteractive to workaround tzdata prompt on installation
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
    && apt-get upgrade --no-install-recommends -y

RUN apt-get install --no-install-recommends -y \
    build-essential \
    ca-certificates \
    cargo \
    ccache \
    cmake \
    doxygen \
    git \
    libgnutls30 \
    libldns-dev \
    liblzma-dev \
    libprotobuf-dev \
    librabbitmq-dev \
    libsodium-dev \
    libssl-dev \
    libudev-dev \
    libunwind8-dev \
    libusb-1.0-0-dev \
    pkg-config \
    wget \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Set necessary args and environment variables for building Monero
ARG MONERO_BRANCH
ARG MONERO_COMMIT_HASH
ARG NPROC
ARG TARGETARCH
ENV CFLAGS='-fPIC'
ENV CXXFLAGS='-fPIC -DELPP_FEATURE_CRASH_LOG'
ENV USE_SINGLE_BUILDDIR 1
ENV BOOST_DEBUG         1

# Build expat, a dependency for libunbound
RUN set -ex && wget https://github.com/libexpat/libexpat/releases/download/R_2_7_3/expat-2.7.3.tar.bz2 && \
    echo "59c31441fec9a66205307749eccfee551055f2d792f329f18d97099e919a3b2f expat-2.7.3.tar.bz2" | sha256sum -c && \
    tar -xf expat-2.7.3.tar.bz2 && \
    rm expat-2.7.3.tar.bz2 && \
    cd expat-2.7.3 && \
    ./configure --enable-static --disable-shared --prefix=/usr && \
    make -j${NPROC:-$(nproc)} && \
    make -j${NPROC:-$(nproc)} install

# Build libunbound for static builds
WORKDIR /tmp
RUN set -ex && wget https://www.nlnetlabs.nl/downloads/unbound/unbound-1.24.1.tar.gz && \
    echo "7f2b1633e239409619ae0527f67878b0f33ae0ec0ee5a3a51c042c359ba1eeab unbound-1.24.1.tar.gz" | sha256sum -c && \
    tar -xzf unbound-1.24.1.tar.gz && \
    rm unbound-1.24.1.tar.gz && \
    cd unbound-1.24.1 && \
    ./configure --disable-shared --enable-static --without-pyunbound --with-libexpat=/usr --with-ssl=/usr --with-libevent=no --without-pythonmodule --disable-flto --with-pthreads --with-libunbound-only --with-pic && \
    make -j${NPROC:-$(nproc)} && \
    make -j${NPROC:-$(nproc)} install

# Build libzmq for static builds
WORKDIR /tmp
RUN set -ex && wget https://github.com/zeromq/libzmq/releases/download/v4.3.5/zeromq-4.3.5.tar.gz && \
    echo "6653ef5910f17954861fe72332e68b03ca6e4d9c7160eb3a8de5a5a913bfab43 zeromq-4.3.5.tar.gz" | sha256sum -c && \
    tar -xzf zeromq-4.3.5.tar.gz && \
    rm zeromq-4.3.5.tar.gz && \
    cd zeromq-4.3.5 && \
    ./configure --disable-shared --enable-static --with-libsodium --disable-libunwind --with-pic && \
    make -j${NPROC:-$(nproc)} && \
    make -j${NPROC:-$(nproc)} install

# Build boost for latest security updates
WORKDIR /tmp
RUN set -ex && wget https://archives.boost.io/release/1.89.0/source/boost_1_89_0.tar.bz2 && \
    echo "85a33fa22621b4f314f8e85e1a5e2a9363d22e4f4992925d4bb3bc631b5a0c7a boost_1_89_0.tar.bz2" | sha256sum -c && \
    tar -xf boost_1_89_0.tar.bz2 && \
    rm boost_1_89_0.tar.bz2 && \
    cd boost_1_89_0 && \
    ./bootstrap.sh && \
    ./b2 -j${NPROC:-$(nproc)} runtime-link=static link=static threading=multi variant=release \
      --with-chrono --with-context --with-coroutine --with-date_time --with-filesystem --with-locale \
      --with-program_options --with-regex --with-serialization --with-serialization install

# Switch to Monero source directory
WORKDIR /monero

# Git pull Monero source at specified tag/branch and compile monerod binary
RUN git clone --recursive \
    https://github.com/seraphis-migration/monero . \
    && git checkout ${MONERO_COMMIT_HASH} \
    && git submodule init && git submodule update \
    && mkdir -p build/release && cd build/release \
    # Create make build files manually for release-static-linux-${TARGETARCH}
    && case ${TARGETARCH:-amd64} in \
        "arm64") cmake -D STATIC=ON -D ARCH="armv8-a" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-armv8" ../.. ;; \
        "amd64") cmake -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-x64" ../.. ;; \
        *) echo "Dockerfile does not support this platform"; exit 1 ;; \
    esac \
    # Build only monerod binary using number of available threads
    && cd /monero && nice -n 19 ionice -c2 -n7 make -j${NPROC:-$(nproc)} -C build/release daemon lmdb_lib multisig wallet

# Switch to monero-lws source directory
WORKDIR /monero-lws

COPY . .

ARG NPROC
RUN set -ex \
    && git submodule init && git submodule update \
    && rm -rf build && mkdir build && cd build \
    && cmake -D CMAKE_BUILD_TYPE=Release -D STATIC=ON -D BUILD_TESTS=ON -D WITH_RMQ=ON -D MONERO_SOURCE_DIR=/monero -D MONERO_BUILD_DIR=/monero/build/release .. \
    && make -j${NPROC:-$(nproc)}
    # && ./tests/unit/monero-lws-unit

# Begin final image build
# Select Ubuntu 20.04LTS for the image base
FROM ubuntu:22.04

# Add user and setup directories for monero-lws
RUN useradd -ms /bin/bash monero-lws \
    && mkdir -p /home/monero-lws/.bitmonero/light_wallet_server \
    && chown -R monero-lws:monero-lws /home/monero-lws/.bitmonero
USER monero-lws

# Switch to home directory and install newly built monero-lws binary
WORKDIR /home/monero-lws
COPY --chown=monero-lws:monero-lws --from=build /monero-lws/build/src/monero-lws-daemon /usr/local/bin/
COPY --chown=monero-lws:monero-lws --from=build /monero-lws/build/src/monero-lws-admin /usr/local/bin/

# Expose REST server port
EXPOSE 8443

ENTRYPOINT ["monero-lws-daemon"]
# CMD ["--daemon=tcp://monerod:18082", "--sub=tcp://monerod:18083", "--log-level=4"]

@sa8ab
Copy link
Copy Markdown

sa8ab commented Nov 30, 2025

Adding accounts and webhooks work as expected ( they appear in list webhooks ) but I looks like nothing happens on transaction or confirmations ( 0 or 1 ). The webhooks are not called and I don't see the logs for them either.

The logs have been same as previous comment but they now appear about every 4 seconds.

Logs

lws     | 2025-11-30 14:25:57.540       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:25:57.548       D Stopping rpc::scanner::server async operations
lws     | 2025-11-30 14:25:57.548       I Starting blockchain sync with daemon
lws     | 2025-11-30 14:25:57.551       I Retrieving current active account list
lws     | 2025-11-30 14:25:57.553       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-11-30 14:26:02.054       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-11-30 14:26:02.054       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:02.313       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-11-30 14:26:02.313       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:02.322       D Stopping rpc::scanner::server async operations
lws     | 2025-11-30 14:26:02.322       I Starting blockchain sync with daemon
lws     | 2025-11-30 14:26:02.323       I Retrieving current active account list
lws     | 2025-11-30 14:26:02.325       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-11-30 14:26:06.944       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-11-30 14:26:06.944       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:07.137       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-11-30 14:26:07.137       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:07.146       D Stopping rpc::scanner::server async operations
lws     | 2025-11-30 14:26:07.146       I Starting blockchain sync with daemon
lws     | 2025-11-30 14:26:07.148       I Retrieving current active account list
lws     | 2025-11-30 14:26:07.149       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-11-30 14:26:11.773       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-11-30 14:26:11.773       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:12.122       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-11-30 14:26:12.122       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:12.135       D Stopping rpc::scanner::server async operations
lws     | 2025-11-30 14:26:12.135       I Starting blockchain sync with daemon
lws     | 2025-11-30 14:26:12.138       I Retrieving current active account list
lws     | 2025-11-30 14:26:12.138       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-11-30 14:26:17.021       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-11-30 14:26:17.022       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:17.146       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-11-30 14:26:17.146       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:17.154       D Stopping rpc::scanner::server async operations
lws     | 2025-11-30 14:26:17.154       I Starting blockchain sync with daemon
lws     | 2025-11-30 14:26:17.156       I Retrieving current active account list
lws     | 2025-11-30 14:26:17.157       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-11-30 14:26:21.823       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-11-30 14:26:21.823       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:21.986       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-11-30 14:26:21.986       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:21.997       D Stopping rpc::scanner::server async operations
lws     | 2025-11-30 14:26:21.997       I Starting blockchain sync with daemon
lws     | 2025-11-30 14:26:21.998       I Retrieving current active account list
lws     | 2025-11-30 14:26:22.000       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-11-30 14:26:26.959       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-11-30 14:26:26.959       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:27.203       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-11-30 14:26:27.203       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:27.212       D Stopping rpc::scanner::server async operations
lws     | 2025-11-30 14:26:27.212       I Starting blockchain sync with daemon
lws     | 2025-11-30 14:26:27.214       I Retrieving current active account list
lws     | 2025-11-30 14:26:27.215       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-11-30 14:26:31.727       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-11-30 14:26:31.727       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:32.073       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-11-30 14:26:32.073       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:32.085       D Stopping rpc::scanner::server async operations
lws     | 2025-11-30 14:26:32.085       I Starting blockchain sync with daemon
lws     | 2025-11-30 14:26:32.087       I Retrieving current active account list
lws     | 2025-11-30 14:26:32.088       I Starting scan loops on 2 thread(s) with 2 account(s)

lws     | 2025-11-30 14:26:36.796       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-11-30 14:26:36.796       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:36.971       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-11-30 14:26:36.971       I Blockchain reorg detected, resetting state
lws     | 2025-11-30 14:26:36.981       D Stopping rpc::scanner::server async operations
lws     | 2025-11-30 14:26:36.981       I Starting blockchain sync with daemon
lws     | 2025-11-30 14:26:37.089       I Retrieving current active account list
lws     | 2025-11-30 14:26:37.089       I Starting scan loops on 2 thread(s) with 2 account(s)

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 1, 2025

Why is there so many reorgs detected? Thats more critical than the webhooks. Looks like something is broken with multi-thread scanning.

Also, conf-0 webhooks require usage of the --sub option, and corresponding --zmq-pub in monerod to work properly. Not sure why conf-1 isn't working, it's likely related to payment-id usage (most people are using it, whereas the null payment-id may be broken).

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 1, 2025

Actually, thats why nothing is being reported, the scan is never making any progress.

@sa8ab
Copy link
Copy Markdown

sa8ab commented Dec 1, 2025

I am using same configuration as with the release branch for running both monerod and monero-lws.
Log level is 4. Here is the full command:

      - --db-path=/home/monero-lws/.bitmonero/light_wallet_server
      - --daemon=tcp://monero:1882
      - --sub=tcp://monero:18084
      - --log-level=4
      - --webhook-ssl-verification=none
      - --disable-admin-auth
      - --admin-rest-server=http://0.0.0.0:8443/admin
      - --rest-server=http://0.0.0.0:8443/basic
      - --access-control-origin=lws:8443
      - --confirm-external-bind

      - --network=test

The logs for reord are still active but now it is about 5-6 seconds each

Details

lws     | 2025-12-01 12:27:14.951       I Retrieving current active account list
lws     | 2025-12-01 12:27:14.953       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:27:19.525       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:27:19.525       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:19.941       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:27:19.941       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:19.951       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:27:19.951       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:27:19.952       I Retrieving current active account list
lws     | 2025-12-01 12:27:19.955       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:27:24.428       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:27:24.428       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:24.849       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:27:24.849       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:24.859       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:27:24.859       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:27:24.860       I Retrieving current active account list
lws     | 2025-12-01 12:27:24.861       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:27:29.395       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:27:29.396       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:29.666       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:27:29.666       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:29.680       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:27:29.680       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:27:29.681       I Retrieving current active account list
lws     | 2025-12-01 12:27:29.682       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:27:35.088       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:27:35.088       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:35.409       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:27:35.409       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:35.423       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:27:35.423       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:27:38.639       I Retrieving current active account list
lws     | 2025-12-01 12:27:38.640       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:27:46.614       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:27:46.615       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:48.998       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:27:48.998       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:49.008       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:27:49.008       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:27:49.927       I Retrieving current active account list
lws     | 2025-12-01 12:27:49.927       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:27:54.459       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:27:54.459       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:54.748       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:27:54.748       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:27:54.756       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:27:54.756       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:27:54.759       I Retrieving current active account list
lws     | 2025-12-01 12:27:54.759       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:28:00.334       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:28:00.334       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:00.754       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:28:00.754       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:00.767       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:28:00.767       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:28:00.768       I Retrieving current active account list
lws     | 2025-12-01 12:28:00.771       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:28:05.269       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:28:05.270       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:06.715       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:28:06.715       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:06.725       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:28:06.725       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:28:06.726       I Retrieving current active account list
lws     | 2025-12-01 12:28:06.727       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:28:10.860       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:28:10.861       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:12.176       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:28:12.176       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:12.186       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:28:12.186       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:28:12.187       I Retrieving current active account list
lws     | 2025-12-01 12:28:12.189       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:28:16.535       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:28:16.535       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:17.827       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:28:17.827       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:17.836       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:28:17.836       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:28:17.837       I Retrieving current active account list
lws     | 2025-12-01 12:28:17.838       I Starting scan loops on 2 thread(s) with 2 account(s)
lws     | 2025-12-01 12:28:22.646       I Thread 1 processed 381 blocks(s) @ height 2885731 against 1 account(s)
lws     | 2025-12-01 12:28:22.646       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:22.664       I Thread 0 processed 292 blocks(s) @ height 2886381 against 1 account(s)
lws     | 2025-12-01 12:28:22.664       I Blockchain reorg detected, resetting state
lws     | 2025-12-01 12:28:22.676       D Stopping rpc::scanner::server async operations
lws     | 2025-12-01 12:28:22.676       I Starting blockchain sync with daemon
lws     | 2025-12-01 12:28:22.678       I Retrieving current active account list
lws     | 2025-12-01 12:28:22.679       I Starting scan loops on 2 thread(s) with 2 account(s)

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch 2 times, most recently from bd7de5f to df8d1d2 Compare December 6, 2025 21:12
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 6, 2025

@sa8ab

The tests halted because of a racy bug in the scanner. This has been fixed, and will likely be a separate PR to take care it quicker.

The scanner was unable to make progress because some info was being left out of a block - the tree root hash and depth numbers. This has been fixed, but requires a corresponding patch in monerod. See seraphis-migrations for status on those requests.

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 6, 2025

For those interested, I did a rebase + fixed a few outstanding things with this patch.

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 8, 2025

@sa8ab The changes were just merged to stressnet+stage branches, so try running your tests again with latest from seraphis-migration and this PR.

@sa8ab
Copy link
Copy Markdown

sa8ab commented Dec 9, 2025

Tried out with latest from this PR and fcmp++-alpha-stressnet on seraphis-migration. Worked with conf-1 not conf-0, but sub was added and was expecting to work with conf-0 as well.

Monero LWS options:

      - --daemon=tcp://monero:1882
      - --sub=tcp://monero:18084
      - --network=test

Monerod options

      - --zmq-pub=tcp://0.0.0.0:18084
      - --zmq-rpc-bind-port=1882
      - --zmq-rpc-bind-ip=0.0.0.0
      - --prune-blockchain
      - --testnet

Sometimes I get this from monero ( not sure if related but sharing if useful )

Monerod logs
monero  | 2025-12-09 17:55:56.707       E tx  included reference block that was too high
monero  | 2025-12-09 17:55:56.707       E failed to get tree root
monero  | 2025-12-09 17:55:56.709       E tx <0a1cd7b00b5121f43580fddff2c9bb42f004bc5a84e73b263ac9e77cdcbdf1aa> included reference block that was too high
monero  | 2025-12-09 17:55:56.709       E failed to get tree root
monero  | 2025-12-09 17:55:56.718       E tx <6347a4ed47c2588a1346c4aaaec7baa3bb4b911dbe2ffd063e3b23759d28fcae> included reference block that was too high
monero  | 2025-12-09 17:55:56.718       E failed to get tree root
monero  | 2025-12-09 17:55:56.720       E tx <785cffea5bd4f8a149045a38ae1c03c50be2bc874b5f0f994d6ddfb4ec93aaaf> included reference block that was too high
monero  | 2025-12-09 17:55:56.720       E failed to get tree root

Then this from LWS

LWS Logs

lws | 2025-12-09 17:56:02.476 I Thread 0 processed 2 blocks(s) @ height 2892937 against 1 account(s)
lws | 2025-12-09 17:56:02.477 I Blockchain reorg detected, resetting state
lws | 2025-12-09 17:56:02.478 D Stopping rpc::scanner::server async operations
lws | 2025-12-09 17:56:02.478 I Starting blockchain sync with daemon
lws | 2025-12-09 17:56:02.483 I Retrieving current active account list
lws | 2025-12-09 17:56:02.483 I Starting scan loops on 2 thread(s) with 3 account(s)

Next I am trying multiple recipients in single transaction ( transfer <address_1> <amount_1> <address_2> <amount_2> ) while only one of the recipients is added on LWS. I will share results here.

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 14, 2025

Not sure why 0-conf failed. Some fcmp++ fields are missing, but it shouldn't matter for 0-conf as everything in transaction_prefix is recorded. Will figure out a debug mechanism on this.

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 14, 2025

Debug mechanism -> I will debug/try this locally, unless you provide more logs with some txpool related error.

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from df8d1d2 to f15bf71 Compare December 18, 2025 01:28
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 18, 2025

Latest round of changes gets it working with seraphis/fcmp++-stage again. @sa8ab there is a new branch feature/carrot_stressnet for your test purposes (because stage branch and stress net have now diverged).

@sa8ab
Copy link
Copy Markdown

sa8ab commented Dec 24, 2025

I have this error with feature/carrot_stressnet branch and fcmp++-alpha-stressnet.
It causes memory to fill up over time.

lws  | 2025-12-24 16:11:36.302  I Starting scan loops on 2 thread(s) with 3 account(s)
lws  | 2025-12-24 16:12:03.357  I Thread 0 processed 2 blocks(s) @ height 2891663 against 1 account(s)
lws  | 2025-12-24 16:12:04.111  I Thread 0 processed 2 blocks(s) @ height 2891664 against 1 account(s)
lws  | 2025-12-24 16:12:04.166  D Schema expected array size to be smaller:
lws  | 2025-12-24 16:12:04.169  E Failed parsing txpool pub: Schema expected array size to be smaller
lws  | 2025-12-24 16:12:04.741  I Thread 1 processed 3 blocks(s) @ height 2891664 against 2 account(s)
lws  | 2025-12-24 16:12:04.780  D Schema expected array size to be smaller:
lws  | 2025-12-24 16:12:04.781  E Failed parsing txpool pub: Schema expected array size to be smaller

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 24, 2025

Why do you think the error is related to memory usage? And stressnet should have higher than normal memory usage due to the volume of txes.

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 24, 2025

Anyway this explains why 0-conf isn't working.

@sa8ab
Copy link
Copy Markdown

sa8ab commented Dec 25, 2025

Why do you think the error is related to memory usage?

After stopping monero lws the usage went to normal but apparently it was because of the node, not just LWS. It sounds to be normal now after I used the latest update from this PR seraphis-migration/monero#275, but the error still exists.
I am using the feature/carrot_stressnet branch.

lws     | 2025-12-25 15:32:48.861       E Failed parsing txpool pub: Schema expected array size to be smaller
lws     | 2025-12-25 15:32:48.865       D Schema expected array size to be smaller:

@nahuhh
Copy link
Copy Markdown
Contributor

nahuhh commented Dec 25, 2025

I have this error with feature/carrot_stressnet branch and fcmp++-alpha-stressnet.
It causes memory to fill up over time.

lws  | 2025-12-24 16:11:36.302  I Starting scan loops on 2 thread(s) with 3 account(s)
lws  | 2025-12-24 16:12:03.357  I Thread 0 processed 2 blocks(s) @ height 2891663 against 1 account(s)
lws  | 2025-12-24 16:12:04.111  I Thread 0 processed 2 blocks(s) @ height 2891664 against 1 account(s)
lws  | 2025-12-24 16:12:04.166  D Schema expected array size to be smaller:
lws  | 2025-12-24 16:12:04.169  E Failed parsing txpool pub: Schema expected array size to be smaller
lws  | 2025-12-24 16:12:04.741  I Thread 1 processed 3 blocks(s) @ height 2891664 against 2 account(s)
lws  | 2025-12-24 16:12:04.780  D Schema expected array size to be smaller:
lws  | 2025-12-24 16:12:04.781  E Failed parsing txpool pub: Schema expected array size to be smaller

the txpool is full. Well over 100mb

@FiatDemise
Copy link
Copy Markdown

Anyway this explains why 0-conf isn't working.

Does that mean you know what change is needed to get 0 conf to work?

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 26, 2025

@FiatDemise not exactly. The log indicates that some array bounds check failed, but not which one.

@sa8ab
Copy link
Copy Markdown

sa8ab commented Dec 27, 2025

The logs ( Failed parsing txpool pub: Schema expected array size to be smaller ) were showing while node was not fully synced. After synchronization logs are only limited to scanning now.
Thread 0 processed 2 blocks(s) @ height 2904262 against 1 account(s)

On the last test I did still only conf-1 worked.

@sa8ab
Copy link
Copy Markdown

sa8ab commented Dec 29, 2025

On last tests I started lws with new database, on monero node I have these logs that appear sometimes
W There were 21 blocks in the last 90 minutes, there might be large hash rate changes, or we might be partitioned, cut off from the Monero network or under attack, or your computer's time is off. Or it could be just sheer bad luck.

monero  | 2025-12-29 17:27:13.010       I ----- BLOCK ADDED AS ALTERNATIVE ON HEIGHT 2905937
monero  | 2025-12-29 17:27:13.011       I id:   <b9f2ecbe5438cf26aee14476c5c0611d348d21f4c269e4bd3bbdf8e4979c0560>
monero  | 2025-12-29 17:27:13.011       I PoW:  <4049a941bf52a2dca3bbf2c5757d15f207e50af34b00e25bba072345daa00000>
monero  | 2025-12-29 17:27:13.011       I difficulty:   83632
monero  | 2025-12-29 17:31:07.083       I ###### REORGANIZE on height: 2905937 of 2905937 with cum_difficulty 1147635249796
monero  | 2025-12-29 17:31:07.083       I  alternative blockchain size: 2 with cum_difficulty 1147635332686
monero  | 2025-12-29 17:31:10.946       I ----- BLOCK ADDED AS ALTERNATIVE ON HEIGHT 2905937
monero  | 2025-12-29 17:31:10.946       I id:   <9aab93a62ae4fa93d7ae99409402e399d65ddfad6217e6954ca5da8b24ebe5da>
monero  | 2025-12-29 17:31:10.946       I PoW:  <f6d9966bcc3806eb4b991bd55f8129de76e4b834e33db54e80c123b3e73b0000>
monero  | 2025-12-29 17:31:10.946       I difficulty:   83632
monero  | 2025-12-29 17:31:17.287       I REORGANIZE SUCCESS! on height: 2905937, new blockchain size: 2905939
monero  | 2025-12-29 17:31:19.184       I Synced 2905939/2905939

On lws it was all normal, only once after the log of BLOCK ADDED AS ALTERNATIVE ON HEIGHT, lws had this error:

lws     | 2025-12-29 17:31:19.187       E JSON-RPC server sent error code 1 with message: core::get_tx_outputs_gindexs() returned false
lws     | 2025-12-29 17:31:19.187       E Failed to retrieve next blocks: Error returned by JSON-RPC server. Resetting state and trying again
lws     | 2025-12-29 17:31:19.188       D Stopping rpc::scanner::server async operations
lws     | 2025-12-29 17:31:19.188       I Starting blockchain sync with daemon
lws     | 2025-12-29 17:31:19.492       I Retrieving current active account list

Tried adding new accounts and testing the webhooks with them. Still conf-0 is not working and only conf-1 is working.

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Dec 30, 2025

This log message is expected when a re-org occurs.

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from f15bf71 to c36f406 Compare January 6, 2026 23:35
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Jan 6, 2026

Force pushed a change that includes support for new ZMQ-RPC endpoints get_tree_paths and get_unified_ids. This enables LWS clients to spend using fcmp++. This means that the LWS server is fully ready for the fcmp++ (minus potential bugs reported).

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Jan 8, 2026

@sa8ab I cannot reproduce your issue - 0-conf is still working in my tests. It was missing some fields (first_image and anchor), so there will be a small update for that.

My best guess is that there is something wrong with your --zmq-pub and --sub setup, thats typically the culprit.

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from c36f406 to 438ea91 Compare January 8, 2026 02:02
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Jan 8, 2026

Force pushed a change to include latest fcmp++ fields in the output side.

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Jan 8, 2026

Also @sa8ab , this may be something monerod side where it's not reporting things in certain Dandelion++ states. But this doesn't appear to be an issue within monero-lws-daemon.

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from 438ea91 to 85fa2ef Compare January 18, 2026 02:22
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Jan 18, 2026

Force pushed a rebase, and a slight change to the REST API naming scheme.

@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Apr 2, 2026

Force pushed a rebase + changes to match the latest carrot/fcmp++ branch. The corresponding changes to monerod will be pushed later after some more testing.

@vtnerd vtnerd force-pushed the feature/carrot_squashed branch from 064e3c0 to 38b9722 Compare April 3, 2026 20:59
@vtnerd
Copy link
Copy Markdown
Owner Author

vtnerd commented Apr 3, 2026

Force pushed some bug fixes after testing with lwsf.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants