**Motivations:** - Miner stopped producing blocks after bitcoind and mempool restart - PSBT signing failed with "PSBT signing failed" error - descriptorprocesspsbt failed with "Argument list too long" error due to large PSBT size (1.5MB) **Root causes:** - descriptorprocesspsbt called via command line exceeded argument length limit when PSBT is large - walletprocesspsbt succeeded but could not mark PSBT as complete because it cannot sign artificial signet transactions (to_spend/spend) which are not real UTXOs in wallet - After restart, the miner needed descriptorprocesspsbt to sign artificial signet transactions, but command line approach failed **Correctifs:** - Modified miner to use JSON-RPC HTTP API directly for descriptorprocesspsbt instead of command line - PSBT is now passed via HTTP request body, avoiding command line argument length limit - Added fallback to walletprocesspsbt if HTTP RPC fails - Updated mine.sh to use -rpcwallet and -datadir correctly for wallet operations **Evolutions:** - Miner now uses HTTP JSON-RPC for large PSBTs, making it more robust for signet mining with many transactions - Improved error handling with fallback mechanisms **Pages affectées:** - miner: Modified PSBT signing logic to use HTTP JSON-RPC for descriptorprocesspsbt - mine.sh: Updated to use -rpcwallet and -datadir correctly
2.2 KiB
2.2 KiB
UserWallet – Notifications relais (pull-based)
Author: Équipe 4NK
Date: 2026-01-26
Objectif
Exposer les « notifications » liées aux événements relais (collecte signatures, clés) pour que l’UI sache quel hash aller chercher et afficher la progression (ex. X/Y signatures). Modèle pull-only : pas de push/WebSocket, uniquement GET sur les relais.
Implémenté
1. Collecte signatures (login mFA)
- Hash connu : le challenge login a un
hash; on fetchGET /signatures/:hashsur chaque relais. - Boucle de collecte :
runCollectLoopappellefetchSignaturesForHashpuis merge, jusqu’àhasEnoughSignaturesou timeout. - Progression :
CollectLoopOpts.onProgress?: (merged) => voidappelé à chaque poll. L’UI peut afficher « Signatures collectées : X / Y » viacollectProgress(path, merged, pairToMembers)→{ satisfied, required }. - LoginCollectShare : reçoit
collectProgresset affiche « Signatures collectées : X / Y » pendant la collecte.
2. Clés et messages (sync)
- Scan keys :
GET /keys?start=&end=→ liste deMsgCleavechash_message. On en déduit les hashes à fetch. - Fetch par hash :
GET /messages/:hashpour chaque hash, puis ECDH decrypt. Pas de « notification » explicite : le sync fait scan → fetch → decrypt en une passe. Les stats (indéchiffrable, validé, non validé) sont remontées auSyncScreen.
3. Pairing (membre finaliser)
- Hash et fetch signatures par hash déjà utilisés dans
fetchSignaturesForHash(pairingConfirm). Pas de progression affichée côté pairing.
À faire (évolutif)
- Événements relais : si un jour le relais propose du push (ex. WebSocket), adapter l’UI pour réagir aux événements « nouveau message / nouvelles signatures / nouvelles clés » et déclencher fetch par hash en conséquence.
- Optimisation : utiliser éventuellement Bloom ou autre pour réduire les GET quand beaucoup de hashes.
Références
features/userwallet-collecte-distante-2-devices.mdfeatures/userwallet-dh-systematique-scan-fetch.mduserwallet/src/utils/collectSignatures.ts(runCollectLoop,CollectLoopOpts.onProgress)userwallet/src/utils/loginValidation.ts(collectProgress)