Jam è un software open source e non-custodial che permette di interagire con il protocollo decentralizzato JoinMarket.
Jam è un programma a interfaccia grafica (Web UI) che permette di utilizzare JoinMarket in maniera semplice e intuitiva.
JoinMarket è un protocollo che consente di effettuare transazioni collaborative p2p. Una transazione collaborativa è nota anche come Coinjoin.
Al contrario dei servizi di coinjoin che presentano un coordinatore centralizzato, in JoinMarket gli utenti si coordinano da soli per effettuare una transazione collaborativa. Il protocollo presenta un mercato composto da maker, ovvero utenti che offrono i loro bitcoin in cambio di una commissione per facilitare le transazioni di coinjoin, e taker, utenti che desiderano effettuare una transazione collaborativa e che pagano una commissione per farlo.
Per utilizzare Jam è necessario avere un full-node Bitcoin. Il software è attualmente disponibile su Umbrel, Citadel, RaspBlitz, MyNode e Start9 e per utilizzarlo basta installare l’app sul proprio nodo. L’interfaccia grafica è identica per tutte le implementazioni.
Jam è completamente non-custodial, ovvero la proprietà dei fondi rimane sempre nelle mani dell’utente.
Come utilizzare Jam
Come prima cosa occorre creare un nuovo wallet cliccando su Create new wallet.
Vi verrà poi chiesto di dare un nome al wallet, scegliere una password per cifrarlo e cliccare su Create per generarlo.
Nella schermata successiva vi verrà mostrata la password e l’elenco delle 12 parole della seed phrase da salvare per poter ripristinare il wallet. Salvate la seed phrase con estrema cura.
Dopo aver completato la procedura di salvataggio della seed phrase, potete cliccare su Fund Wallet.
A questo punto vi verrà mostrata una scheda (Cheatsheet) con le istruzioni principali di Jam.
Per far comprendere più facilmente agli utenti il funzionamento di Jam, gli sviluppatori hanno voluto utilizzare una similitudine: i “barattoli di marmellata” presenti nella home rappresentano i singoli account del wallet creato su Jam. Ogni barattolo può detenere, inviare e ricevere bitcoin. In base al livello di privacy dei singoli UTXO sarebbe ideale dividere i fondi in barattoli diversi.
Funzioni principali
Le funzioni principali di Jam sono quattro: Receive, Send, Earn e Sweep.
La funzione Receive permette di ricevere bitcoin come su qualsiasi altro software wallet.
La funzione Send consente di inviare transazioni a wallet esterni o all’interno di altri account di Jam, noti come jar (barattoli). Attraverso tale funzione è possibile partecipare a transazioni collaborative ricoprendo il ruolo di taker.
La funzione Earn permette di fare da maker, cioè offrire della liquidità in bitcoin per aiutare altri utenti a effettuare coinjoin e guadagnare una commissione in cambio del servizio.
Se un utente decide di fare da maker può impostare un Fidelity Bond per attrarre gli utenti a sceglierlo come collaboratore di una transazione di coinjoin. Il concetto di Fidelity Bond è stato introdotto nel protocollo JoinMarket come sistema per garantire che gli attori del mercato agiscano onestamente. Si tratta di un meccanismo di protezione contro vari tipi di attacchi che coinvolgono la creazione di identità fraudolente.
Il Fidelity Bond è una funzione che permette di bloccare una certa quantità di bitcoin per mostrare al network il proprio impegno (reputazione) nell’utilizzo del protocollo. È importante bloccare una determinata quantità di bitcoin se si desidera che altri utenti taker prendano in considerazione e accettino l’offerta. I bitcoin bloccati sono impossibili da movimentare fino alla scadenza del bond.
La funzione Sweep permette di inviare bitcoin da qualsiasi account di Jam a un altro wallet esterno in una maniera privacy-focused.
Come fare coinjoin da taker (Receive & Send)
Una volta configurato il wallet, per iniziare a utilizzare Jam la prima operazione da fare è quella di ricevere dei fondi. Cliccando su Receive verrà generato un nuovo indirizzo.
Dopo aver effettuato la transazione, i fondi saranno visibili nel primo barattolo. Cliccando sulla voce Look Inside sarà possibile vedere l’UTXO all’interno del wallet.
Prima di poter effettuare una transazione di coinjoin con Jam è necessario attendere almeno cinque conferme.
Dopo aver ricevuto le cinque conferme, attraverso la funzione Send è possibile inviare bitcoin a un wallet esterno o a un altro barattolo del proprio wallet.
Prima di confermare una transazione in uscita è possibile scegliere se effettuare una transazione di coinjoin o inviare direttamente i fondi al destinatario.
Cliccando su Send è possibile scegliere a quale indirizzo o in quale barattolo inviare bitcoin effettuando una transazione coinjoin. In questo caso scegliamo di inviare bitcoin al barattolo Elderberry. È possibile anche inviare fondi senza effettuare una transazione collaborativa.
Per effettuare un coinjoin è necessario selezionare il numero di utenti con i quali si desidera eseguirlo e la quantità massima di commissioni che si è disposti a pagare per ogni collaboratore. Nell’esempio riportato sono stati selezionati 10 collaboratori, con una commissione massima di 5.000 sats ognuno. Dopo aver scelto dove inviare i bitcoin, con quanti utenti fare il coinjoin e aver fissato il tetto delle commissioni, il tasto Confirm completerà l’invio della transazione al network.
Cliccare su Send per inviare la transazione. Confermare l’invio della transazione cliccando Confirm.
Le commissioni che vengono mostrate nella schermata riassuntiva prima dell’invio di una transazione sono le potenziali commissioni massime che l’utente si troverà a spendere. Nella maggior parte dei casi l’importo finale sarà minore rispetto alla quantità visualizzata.
In una transazione collaborativa sono presenti altri utenti che hanno utilizzato la funzione Send e utenti che hanno utilizzato la funzione Earn.
Una volta che la transazione è stata effettuata, i fondi sono visibili nel barattolo di destinazione selezionato o all’indirizzo scelto come destinatario.
Cliccando su Look Inside sul barattolo Elderberry è possibile visualizzare l’UTXO risultante dalla transazione di coinjoin.
Cliccando su Details è possibile vedere ulteriori dettagli dell’UTXO.
Come fare coinjoin da maker (Earn)
La funzione Earn consente di offrire liquidità per facilitare una transazione collaborativa in cambio di una commissione.
Per iniziare a fare da maker occorre cliccare su Earn e impostare la propria offerta.
Impostare le commissioni, scegliendo tra le due opzioni presenti:
- Offerta assoluta (Absolute offer): in questo caso la commissione scelta è una quantità fissa;
- Offerta relativa (Relative offer): in questo caso la commissione scelta è una percentuale della transazione.
Cliccando su Start Earning l’offerta viene pubblicata e ogni volta che verrà scelta da utenti taker, il maker guadagnerà una commissione e aumenterà la privacy degli UTXO messi a disposizione.
Per configurare un Fidelity bond occorre cliccare il simbolo “+” sulla destra dello schermo.
È possibile scegliere l’anno e il mese della scadenza del fidelity bond.
Più lunga è la scadenza del bond, più è probabile che un utente taker sia attratto dall’offerta.
Se si desidera cambiare i parametri dell’offerta, basta cliccare Stop e ricrearla. È da tenere in considerazione che senza Fidelity bond potrebbe essere più difficile che la propria offerta venga scelta.
Cliccando su Show orderbook è possibile vedere tutte le altre offerte degli utenti che desiderano fare da maker.
Funzione Sweep
La funzione Sweep prende tutti gli UTXO presenti all’interno di tutti i barattoli e li invia a tre indirizzi differenti con quantità di bitcoin casuale e in diversi intervalli di tempo in modo tale da aumentare la privacy della transazione e confondere le euristiche delle società di blockchain analysis.
Ogni transazione che viene effettuata con la funzione Sweep è un coinjoin. Durante le varie transazioni diversi UTXO possono passare prima in diversi barattoli per poi arrivare all’indirizzo scelto come destinazione finale.
La funzione Sweep risulta essere particolarmente utile quando si hanno diversi UTXO in diversi barattoli.