
L'11 febbraio 2024, SSP Connect ha smesso di essere un semplice protocollo di consultazione e identità per diventare anche un protocollo di pagamento. La versione v1.1.0 di SSP Wallet aggiunge un metodo pay a SSP Connect, permettendo a qualunque dApp o sito web di richiedere un pagamento on-chain reale a un utente SSP senza reimplementare la tubazione del portafoglio. La forma della richiesta è volutamente piccola: tre parametri, uno dei quali è intenzionalmente una stringa.
TL;DR
- SSP Connect espone ora un'azione
payaccanto ai suoi flussi di identità esistenti. - Una richiesta di pagamento accetta esattamente tre parametri:
chain,addresseamount. amountè una stringa di proposito, per preservare la precisione decimale lungo il filo.- Il flusso di firma continua a girare end-to-end sui due dispositivi dell'utente; la dApp non vede mai chiavi.
- Gli integratori dovrebbero formattare
amountconBigNumber.toFixed()(o equivalente) prima dell'invio.
Cos'è SSP Connect
SSP Connect è il ponte tra un utente di SSP Wallet e il mondo esterno. È lo stesso protocollo di sessione leggero introdotto insieme al lancio di SSP Wallet, dove il portafoglio stesso è un vero multisig 2-su-2 ripartito tra un'estensione del browser e una SSP Key residente sul telefono. Prima di questa versione, Connect veniva usato soprattutto per richieste di sola lettura: accoppiare una sessione, condividere un indirizzo, verificare che un determinato utente controlli un determinato account. Punto cruciale: i segreti non lasciano mai i due dispositivi dell'utente; Connect si limita a trasportare intenti e risposte tra essi e la parte che si fida.
Cosa fa l'azione pay
Il metodo pay estende Connect da "dimmi chi sei" a "lasciami chiederti un pagamento". Una dApp costruisce una richiesta pay, la consegna a Connect, e all'utente viene chiesto nell'interfaccia del proprio portafoglio di approvare, modificare o rifiutare la richiesta. Se l'utente approva, il flusso di firma multisig si esegue come sempre — l'estensione prepara, il telefono co-firma — e la transazione risultante viene trasmessa. La dApp riceve una conferma pulita o un rifiuto pulito, e non tocca mai una chiave privata.
I tre parametri
chain è una stringa che nomina l'asset supportato da SSP con cui pagare, per esempio 'flux'. È obbligatorio. Il valore corrisponde agli identificatori di asset che SSP usa già internamente, così gli integratori non devono imparare un nuovo schema di denominazione.
address è la destinazione del pagamento — una semplice stringa nel formato di indirizzo che la chain scelta si aspetta. È anch'esso obbligatorio. SSP esegue la consueta validazione di formato e checksum lato ricezione prima di mostrare la richiesta all'utente.
amount è il valore da inviare, espresso nell'unità principale di quella chain. Per esempio, '4.56' significa 4,56 FLUX, non 4,56 della più piccola unità indivisibile. È obbligatorio e, soprattutto, è tipizzato come stringa anziché come numero.
Perché "amount" è una stringa
I numeri in JavaScript sono double IEEE-754, che è esattamente la rappresentazione sbagliata per il denaro. 0.1 + 0.2 non è 0.3, e gli importi di token con 18 decimali semplicemente non entrano in un double senza arrotondamento silenzioso. Forzare amount a essere una stringa evita del tutto questa classe di bug di precisione al confine del protocollo: ciò che la dApp ha calcolato internamente — tipicamente con una libreria big-decimal — sopravvive intatto fino al portafoglio. Le note di rilascio raccomandano di formattare il valore con BigNumber.toFixed() prima dell'invio, che è il modo standard di rendere un big-decimal come stringa esatta, senza notazione scientifica.
Cosa fare dopo
Se mantieni una dApp o un sito web che usa già SSP Connect per l'identità, il percorso di aggiornamento è breve: conserva la tua sessione esistente, aggiungi una richiesta pay dove prima avresti chiesto all'utente di copiare un indirizzo. Valida chain rispetto all'elenco degli asset supportati da SSP che vuoi davvero accettare, valida address lato client affinché l'utente veda gli errori prima di raggiungere il portafoglio, e formatta sempre amount attraverso il toFixed() (o equivalente) della tua libreria big-decimal, in modo che la stringa inviata sia esattamente quella calcolata. Il portafoglio si occupa del resto — conferma, firma, trasmissione — senza mai esporre chiavi alla tua origine.
Source: Note di rilascio SSP Wallet v1.1.0.