How Monokulo is tested
Monokulo handles other people’s money, so it gets tested hard. Every change runs more than 2,600 automatic tests. Every night, two kinds of robot tester invent thousands of strange situations and check that no payment goes missing. This page rebuilds itself from those runs. Open any section to see the details.
4176f6b on 18 Oct 2026·Nightly properties 23 Oct 2026·Fuzzing 23 Oct 2026·Live network 22 Oct 2026Live tests
Once a day, the tests that need the outside world run against it: real Monero nodes on mainnet and stagenet, the exchange-rate services Monokulo can price with, DNS, the Tor network, and real stagenet payments from a pair of test wallets. None of these is Monokulo’s, so each is checked just before the tests start. A test that failed while a service it needs wasn’t answering is shown as that service’s outage, not as a failure of the code.
- Tests
- 27 3 failed
- Passed
- 24
- Service outages
- 0 0 tests hit one
- Services answering
- 7 of 7 checked
| Service | Before the tests | What it said |
|---|---|---|
| Monero mainnet node | Answering | https://node.hollingworth.xyz:443/get_height answered HTTP 200 |
| Monero stagenet nodes (monerodevs.org) | Answering | http://node.monerodevs.org:38089/get_height answered HTTP 200; http://node2.monerodevs.org:38089/get_height answered HTTP 200 |
| Funded stagenet test wallets | Answering | the spender in e2e/wallets/ci can pay a run |
| Coingecko API | Answering | https://api.coingecko.com/api/v3/ping answered HTTP 200 |
| CoinMarketCap public API | Answering | https://pro-api.coinmarketcap.com/public-api/ answered HTTP 200 |
| haveno.markets | Answering | https://haveno.markets/ answered HTTP 200 |
| DNS | Answering | google.com is 172.253.115.139 |
| Tor network | Not checked | only the test itself can tell whether it works |
Test wallets
The stagenet wallets the paid tests use (e2e/wallets/ci), as the run left them. After the tests, what the merchant was paid goes back to the spender, so only the fees are lost. “Ready to pay” counts the unlocked outputs big enough to pay one test order; a run makes 6 payments.
| Wallet | Balance (XMR) | Unlocked | Outputs | Ready to pay |
|---|---|---|---|---|
| Spender53etP59TCSWcnK3cJUyEdQAgTNCLWX92m39NJSHt3qnyVVYzqQEtXHnEF1Y7UkrfgwhndYnHmwxDu9RBAryjP2MHKWrENMo | 1.092751680000 | 0.596277040000 | 52 | 46 |
| Merchant52Ed34jp4AE2bpkCPdcUM44h4jepS59LgCj42xAtVGExBkhxBdqqjZ4UHHY4FmJLmaEhNQnUEfX9J88fYfTdiZ3QAo3Gxo7 | 0.001005000000 | 0.000000000000 | 3 | 0 |
Tests
Every live test of the run, with the services it needs. A failure’s first line says what went wrong.
| Test | Needs | Result | Time |
|---|---|---|---|
| ✕ Tor takes our torrc and hands monokulo a circuit identityRust · monokulo::e2e_torthread 'live_tor_takes_our_torrc_and_hands_monokulo_a_circuit_identity' (10727) panicked at crates/monokulo/tests/e2e_tor.rs:174:65 | Tor network | Failed | 345 ms |
| ✕ Stagenet order resolves and enforces a non default confirmation thresholdRust · mock-woocommerce::e2e_stagenet_confirmation_thresholdthread 'live_stagenet_order_resolves_and_enforces_a_non_default_confirmation_threshold' (10793) panicked at crates/mock-woocommerce/tests/e2e_stagenet_confirmation_threshold.rs:353:5 | Monero stagenet nodes (monerodevs.org), Funded stagenet test wallets | Failed | 225 ms |
| ✕ POS terminal - real stagenet payments › a confirming payment can be backgrounded and completes in the top stackBrowser · pos-stagenet-payments.spec.jsexpect(locator).toBeHidden() failed | Monero stagenet nodes (monerodevs.org), Funded stagenet test wallets | Failed | 5 min |
| ✓ Coinmarketcap api quotes usdRust · shared | CoinMarketCap public API | Passed | 317 ms |
| ✓ Txt records are read from the root servers downRust · shared | DNS | Passed | 102 ms |
| ✓ Coingecko api quotes usd and lists it as supportedRust · shared | Coingecko API | Passed | 134 ms |
| ✓ Haveno markets api prices fiat under both policiesRust · shared | haveno.markets | Passed | 418 ms |
| ✓ Stagenet payment shows up in the dashboard with the correct total receivedRust · e2e-harness::e2e_dashboard_stagenet | Monero stagenet nodes (monerodevs.org), Funded stagenet test wallets | Passed | 704 ms |
| ✓ Node block transactions all parse as valid monero transactionsRust · engine | Monero mainnet node | Passed | 1.7 s |
| ✓ Node end to end scan of live mempool never panics and finds no false matchesRust · engine | Monero mainnet node | Passed | 3.5 s |
| ✓ Node find transaction finds nothing for a bogus hashRust · engine | Monero mainnet node | Passed | 1.0 s |
| ✓ Node find transaction matches the same tx in its blockRust · engine | Monero mainnet node | Passed | 1.8 s |
| ✓ Node get block hash matches a known immutable blockRust · engine | Monero mainnet node | Passed | 1.1 s |
| ✓ Node get height returns a plausible valueRust · engine | Monero mainnet node | Passed | 1.0 s |
| ✓ Node header matches a known immutable blockRust · engine | Monero mainnet node | Passed | 1.0 s |
| ✓ Node is key image spent reports unspent for a null imageRust · engine | Monero mainnet node | Passed | 1.3 s |
| ✓ Node locate transaction finds a known confirmed txRust · engine | Monero mainnet node | Passed | 1.0 s |
| ✓ Node locate transaction reports not found for a bogus hashRust · engine | Monero mainnet node | Passed | 1.0 s |
| ✓ Node pool is followed by its changesRust · engine | Monero mainnet node | Passed | 2.9 s |
| ✓ Node pool transactions fetched by id hash to their idsRust · engine | Monero mainnet node | Passed | 1.6 s |
| ✓ Node pruned chain blocks match the whole onesRust · engine | Monero mainnet node | Passed | 5.1 s |
| ✓ Node says the tip has not moved with the pools changesRust · engine | Monero mainnet node | Passed | 3.8 s |
| ✓ Stagenet payment is detected end to endRust · e2e-harness::e2e_stagenet | Monero stagenet nodes (monerodevs.org), Funded stagenet test wallets | Passed | 10.6 s |
| ✓ Stagenet node answers as recordedRust · engine::daemon_rpc_replay | Monero stagenet nodes (monerodevs.org) | Passed | 2.5 s |
| ✓ Stagenet connect flow pays a real order end to endRust · mock-woocommerce::e2e_stagenet_connect_flow | Monero stagenet nodes (monerodevs.org), Funded stagenet test wallets | Passed | 754 ms |
| ✓ Tor inside monokulo serves its onion address and checks onion shopsRust · monokulo::e2e_arti | Tor network | Passed | 2 min |
| ✓ POS terminal - real stagenet payments › a 0-conf-trusted payment shows shared success and stays reviewableBrowser · pos-stagenet-payments.spec.js | Monero stagenet nodes (monerodevs.org), Funded stagenet test wallets | Passed | 8.2 s |