• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tari-project / tari / 39401183523
76%

Build:
DEFAULT BRANCH: development
Ran 20 Oct 2026 11:02AM UTC
Jobs 1
Files 814
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

20 Oct 2026 09:30AM UTC coverage: 76.472% (+0.3%) from 76.127%
39401183523

push

github

web-flow
fix(offline-signing): make multisig deposit and withdraw outputs recoverable by the recipient (#8147)

Description
---

Offline multisig deposits never reached the recipient's wallet. The
offline signer built the recipient output in a way the recipient's
scanner could not recover. This PR fixes the key derivation and adds an
earlier address check.

**Signer (`offline_signing/one_sided_signer.rs`)**
- `build_multisig_output` used the recipient's public **spend** key
where it needed the public **view** key. The commitment mask, the
encrypted-data key and the stealth script key all came from that key
exchange. The recipient's `try_output_key_recovery` uses the view key,
so `scan_outputs_for_multisig` never found these outputs. The deposit
path now uses `public_view_key()`, as the withdraw path and the online
multisig path (`spec_keys`) already did.
- `sign_multisig_transaction` and `sign_multisig_withdraw_transaction`
passed `None` as the custom recovery key to `add_recipient`. When the
memo fee differed from the final fee, which is always the case in the
wallet's deposit flow once there is change,
`update_encrypted_data_and_metadata_sig` re-encrypted the output under
the sender's own view key. Both builders now return their
`DHEncryptedData` key, and it is passed to `add_recipient`.

**Prepare (`offline_signing/offline_signer.rs`,
`wallet/.../transaction_service/service.rs`)**
- `prepare_deposit_multisig_transaction` and
`prepare_withdraw_multisig_transaction` refuse a recipient with no view
key (a single address).
- The wallet's deposit handler checks this before it selects and locks
inputs. Previously such an address only failed at the offline signer,
after the operator had approved.

Motivation and Context
---

A multisig deposit signed offline was mined, but it never showed up in
the recipient's wallet, so the recipient could not use it in the
multisig spend flow. The funds were stuck until recovered by hand.

How Has This Been Tested?
---

- New te... (continued)

239 of 243 new or added lines in 4 files covered. (98.35%)

732 existing lines in 25 files now uncovered.

137443 of 179729 relevant lines covered (76.47%)

561410.73 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
89.45
-0.16% base_layer/transaction_components/src/offline_signing/one_sided_signer.rs
1
99.76
-0.03% base_layer/transaction_components/src/offline_signing/mod.rs
1
38.94
0.02% base_layer/wallet/src/transaction_service/service.rs

Coverage Regressions

Lines Coverage ∆ File
528
75.09
3.39% base_layer/wallet/src/transaction_service/storage/sqlite_db.rs
74
83.78
1.11% comms/dht/src/inbound/dht_handler/task.rs
23
68.89
3.77% comms/dht/src/inbound/message.rs
15
87.1
5.85% comms/dht/src/inbound/deserialize.rs
13
84.52
-0.39% comms/dht/src/inbound/forward.rs
13
57.42
-4.19% comms/dht/src/network_discovery/state_machine.rs
12
77.47
1.17% comms/core/src/connectivity/manager.rs
10
68.42
-1.04% base_layer/wallet/src/transaction_service/protocols/check_faux_transaction_status.rs
7
81.65
-1.21% base_layer/core/src/validation/helpers.rs
6
94.85
0.12% comms/dht/src/proto/mod.rs
5
71.44
-0.45% base_layer/core/src/base_node/comms_interface/inbound_handlers.rs
4
0.0
-13.33% base_layer/core/src/base_node/comms_interface/comms_response.rs
3
87.03
-0.32% base_layer/core/src/base_node/service/service.rs
3
95.7
0.23% comms/dht/src/inbound/decryption.rs
3
92.18
-0.63% comms/dht/src/outbound/broadcast.rs
2
95.67
-0.43% base_layer/core/src/proof_of_work/randomx_factory.rs
2
72.94
0.14% base_layer/wallet/src/output_manager_service/storage/sqlite_db/mod.rs
2
89.18
0.16% comms/core/src/connection_manager/peer_connection.rs
1
63.09
5.25% base_layer/core/src/chain_storage/blockchain_database.rs
1
75.72
-0.22% base_layer/core/src/mempool/sync_protocol/mod.rs
1
98.24
-0.15% base_layer/core/src/proof_of_work/monero_rx/merkle_tree.rs
1
78.72
0.0% base_layer/wallet/src/storage/sqlite_db/wallet.rs
1
85.91
-0.19% comms/core/src/protocol/messaging/protocol.rs
1
89.42
-0.12% comms/dht/src/actor.rs
1
90.91
1.74% comms/dht/src/envelope.rs
Jobs
ID Job ID Ran Files Coverage
1 39401183523.1 20 Oct 2026 11:02AM UTC 814
76.47
GitHub Action Run
Source Files on build 39401183523
  • Tree
  • List 814
  • Changed 53
  • Source Changed 17
  • Coverage Changed 53
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #39401183523
  • 22886848 on github
  • Prev Build on development (#39271715184)
  • Next Build on development (#39572447499)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc