You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Teil von #666 (RealUnit Phase 2), Baustein 2: Transfer via QR zwischen RealUnit-App-Nutzern (Wallet-zu-Wallet). Dieser Baustein hebt eine Phase-1-Non-Action auf (Transfers waren in Phase 1 explizit ausgeschlossen).
Abgeleitet aus der Schritt-0-Tiefenanalyse in #666 (siehe Analyse-Kommentar). Baustein 1+2 (OCP-Pay) ist umgesetzt in DFXswiss/api#3819 + #674 — die dort gebauten Bausteine (Scanner, Signing-Muster, Broadcast-Helper) werden hier wiederverwendet.
Ist-Stand (aus der Analyse)
Schicht
Stand
App
🔴 nur receive (QR-Anzeige der eigenen Adresse), kein send-Flow
dfxswiss/api
🔴 kein generischer user-initiierter Wallet→Wallet-Transfer-Endpoint (nur Admin-gs/evm-Endpoints)
Konsistent zum bestehenden Sell-/Swap-Muster (Backend baut unsignierte Tx → App signiert → {r,s,v} → Backend rekonstruiert + broadcastet). Kein neuer Krypto-Pfad in der App nötig.
dfxswiss/api (→ develop, Draft-PR)
Neuer Endpoint-Satz unter /v1/realunit/transfer analog zu Swap:
PUT /v1/realunit/transfer — Quote/Validierung (Empfängeradresse, Betrag in REALU-Shares; REALU hat decimals = 0 → ganze Shares; Gas-/ETH-Check), gegated wie Sell/Swap (Registration + KYC30).
PUT /v1/realunit/transfer/:id/unsigned-transaction → unsignierte REALU transfer(address,uint256)-EIP-1559-Tx.
PUT /v1/realunit/transfer/:id/broadcast → { txHash } (wiederverwendet den geteilten broadcastSignedTransaction-Helper aus #3819).
Migration nur falls Entity/Spalte nötig (vermutlich nicht — TransactionRequest wiederverwendbar).
RealUnitCH/app (→ staging, Draft-PR)
Neuer Send-Screen (Page + Cubit pro Schritt), Empfängeradresse per QR-Scan (Scanner aus feat: OCP pay-flow (RealU→ZCHF→Open CryptoPay) #674 wiederverwenden) oder manuelle Eingabe, Betragswahl, Bestätigung.
Signing über das bestehende signToSignature→{r,s,v}-Muster (Software + BitBox einheitlich, kein walletType-Branch), Gas-/Faucet-Pfad wie im Pay-/Sell-Flow.
Dritte/neue Dashboard- bzw. Receive/Send-Navigation; i18n DE/EN; Exception-Surface-Test; Coverage-Floor.
Offene Punkte (vor Implementierung klären)
Limit/Compliance: Ist ein reiner on-chain REALU↔REALU-Transfer (Self-Custody, kein Fiat, kein Brokerbot) trading-limit-pflichtig? Analog zur Swap-Entscheidung in #3819 vermutlich limit-frei (Limits an der Fiat-Grenze), aber bestätigen — nicht vorab entscheiden.
Adress-Validierung: nur EVM-Adressen derselben Chain (Mainnet) akzeptieren; klare typisierte Fehler bei ungültiger Adresse/Self-Transfer.
Gas: User zahlt Gas (ETH) — Faucet-Pfad wie im Pay-/Sell-Flow; Verhalten bei fehlendem ETH.
„Pay an andere Wallet" via OCP? — alternativ statt direktem on-chain Transfer; in der Analyse als Option genannt, hier zugunsten des einfacheren on-chain Transfers verworfen. Bei Bedarf erneut prüfen.
Kontext
Teil von #666 (RealUnit Phase 2), Baustein 2: Transfer via QR zwischen RealUnit-App-Nutzern (Wallet-zu-Wallet). Dieser Baustein hebt eine Phase-1-Non-Action auf (Transfers waren in Phase 1 explizit ausgeschlossen).
Abgeleitet aus der Schritt-0-Tiefenanalyse in #666 (siehe Analyse-Kommentar). Baustein 1+2 (OCP-Pay) ist umgesetzt in DFXswiss/api#3819 + #674 — die dort gebauten Bausteine (Scanner, Signing-Muster, Broadcast-Helper) werden hier wiederverwendet.
Ist-Stand (aus der Analyse)
receive(QR-Anzeige der eigenen Adresse), keinsend-Flowgs/evm-Endpoints)Empfohlener Ansatz: on-chain REALU-Transfer (kein OCP-Umweg)
Konsistent zum bestehenden Sell-/Swap-Muster (Backend baut unsignierte Tx → App signiert →
{r,s,v}→ Backend rekonstruiert + broadcastet). Kein neuer Krypto-Pfad in der App nötig.dfxswiss/api (→ develop, Draft-PR)
/v1/realunit/transferanalog zu Swap:PUT /v1/realunit/transfer— Quote/Validierung (Empfängeradresse, Betrag in REALU-Shares; REALU hatdecimals = 0→ ganze Shares; Gas-/ETH-Check), gegated wie Sell/Swap (Registration + KYC30).PUT /v1/realunit/transfer/:id/unsigned-transaction→ unsignierte REALUtransfer(address,uint256)-EIP-1559-Tx.PUT /v1/realunit/transfer/:id/broadcast→{ txHash }(wiederverwendet den geteiltenbroadcastSignedTransaction-Helper aus #3819).TransactionRequestwiederverwendbar).RealUnitCH/app (→ staging, Draft-PR)
signToSignature→{r,s,v}-Muster (Software + BitBox einheitlich, keinwalletType-Branch), Gas-/Faucet-Pfad wie im Pay-/Sell-Flow.Offene Punkte (vor Implementierung klären)
Reihenfolge / Abhängigkeiten
develop, app gegenstaging), 3-Subagent-Review, CI grün, kein Self-Merge.