This is a huge update where we focused primarily on improving load times, improving Tor reliability, streamlining PayNym functionality, and most importantly — and the topic of this blog post — The public release of Soroban. So let’s get right into it…
Back in March 2019 we released the first iteration of what we call “Cahoots” in Samourai Wallet. Cahoots transactions can be broadly defined as a type of bitcoin transaction that is formed in a collaborative way by two or more participants passing information to each other off-chain. The reason these types of transactions are important is because they undermine the Common Input Ownership Heuristic — a bedrock of blockchain snoops and spies.
We currently offer two different types of Cahoots transactions.
This type of transaction looks like a “normal” bitcoin transaction, but actually is a mini coinjoin transaction where the sender and the receiver are collaborating together, and the amount transacted is not viewable on the blockchain. The caveat being, the person being sent to must also be using Samourai Wallet.
This type of transaction is a two person coinjoin that the sender and a third party collaborate to send to an external wallet. This is a great choice when sending to someone who doesn’t have Samourai Wallet, for instance a merchant using BTCPayServer.
Before we get into the meat and potatoes of this update, let’s take a walk down memory lane and get reacquainted with Cahoots.
April 2018, an idea is planted
I started to investigate the idea of nested / embedded transactions.You will find in the following notes some notes that can serve as a basis for the future.
LaurentMT April 17, 2018
An innocent and understated email from OXT Lead LaurentMT in which he lays out a concept for what would later be known as Stowaway (or PayJoin if you aren’t a Samourai user).
March 2019, an idea grows into working code
We never claimed it was pretty, but it did work. In March 2019, we released a very rudimentary UI for power users. Participants of a Cahoots transaction needed to pass along 5 different QR codes between each other in order to compose and broadcast the transaction.
August 2019, Cahoots gets a facelift
In August 2019 we released version 0.99.85. In this version we finally were able to put a proper UI on top of Cahoots, making it accessible to more than just power users.
The big remaining UX challenge was what we termed “The QR Dance” — The need to pass 5 QR codes back and forth in relatively quick succession. While, this UX challenge wasn’t a deal breaker, and users have had positive reactions to the feature we still wanted to address this.
Investing in the future
Although it is risky for a small and largely self funded team to divert resources from our primary product, we decided to invest heavily into creating an app agnostic, Tor based encrypted communication protocol that bitcoin wallets (and any other applications) can incorporate into their own architecture when automated private communication between clients are required.
These types of automated and secure communications are particularly useful when trying to compose complex bitcoin transactions with multiple parties. As such, Soroban can also be leveraged for existing technologies like JoinMarket, and in-development technologies like Coinswap and Snickr.
In September 2020, thanks to the brilliant work of our latest team member @DevTsuba we released Soroban client and server code and made it fully open source software.
The source code for a client library in Java is available here https://code.samourai.io/wallet/soroban-client-java and the source code for the Go based server component is available here https://code.samourai.io/wallet/samourai-soroban
30 November 2020, Enter Soroban…
As of wallet version 0.99.96 we have updated Cahoots to make use of Soroban.
By leveraging Soroban we can now offer users a reliable and fast way to get around the QR Dance. Instead of manually having to share and scan 5 different QR codes, everything is automatically communicated with your collaborator in encrypted private messages delivered over Tor.
Instead of a Cahoots transaction taking anywhere from 1–5 minutes to coordinate manually, a Soroban Cahoots takes less than 10 seconds.
How to do a Soroban Cahoots
Share your PayNym with your friends, family, and contacts.
Your PayNym is a decentralized, blockchain based, identity that represents your wallet. It is safe to share your PayNym publicly, no one will be able to derive your addresses or balance history from it.
A Soroban Cahoots uses your static PayNym as an identity layer and as a way to encrypt and decrypt the messages that will be passed. So, you will need to follow at least one other PayNym before you can Cahoots.
Follow other PayNyms
When you are followed by a PayNym they appear in your “Followers” list. You can choose to follow them back instantly and for free by opening their PayNym and pressing the Follow button.
Likewise, when you follow a PayNym you will be added to their “Followers” list. You can use any PayNym you are following as a Cahoots collaborator.
We’re ready to Cahoots! Let’s try a Stowaway
Let’s send our new friend +flatfeather869 a small donation for helping us out in this demo.
We go to the send screen as normal. We toggle Cahoots on, choose Stowaway since we want to send to our friend +flatfeather869. Then we choose Online as our method.
We choose the Nym we want to collaborate with.
It really is that simple.
Let’s try a STONEWALLx2
We have some new followers that we can collaborate with. In this demo we will send a donation to WikiLeaks using the help of our friend +stillsound85A.
The process is exactly the same as composing a Stowaway, except since we aren’t sending to the collaborator we need to provide a destination address.
We scan the QR code associated with the WikiLeaks donation address and then toggle Cahoots on and select STONEWALLx2 as the Cahoots type and Online as the method for selecting a collaborator.
From there Soroban kicks in and automates the process.
- Needless to say, you will need to have some funds available in your Samourai Wallet before you can initiate a Cahoots transaction.
- It is likely that you won’t be able to compose a Cahoots transaction until you have used the wallet to transact first. After a few normal transactions your wallet will be “primed” for Cahoots in no time.
- While it is true that your PayNym is a private bitcoin identity that doesn’t give observers any insight into your transaction history or balances and it is safe to share publicly we recommend that you only Cahoots with friends, family, and people you “trust”.
- When you are doing a Cahoots with someone, you are essentially revealing that you own a few UTXOs to that person. Put it this way, you wouldn’t ask a random person in a rough neighborhood if they could break a $100 bill for you, but you wouldn’t mind asking a friend, or the cashier at the store.
- You currently need to communicate out-of-band that your collaborator should open their wallet and navigate to the Receive Screen and the press the Receive Online Cahoots in the toolbar menu. This is only a temporary limitation, and we intend to build out a proper notification system in the near future.