The Bitcoin protocol has proven itself to be a versatile platform for innovation, yet there are still limits to what we can do with it. As an example, we cannot send arbitrary messages across the network. This is by design ― we want it to send value from person A to person B as efficiently as possible and not be bogged down storing information that is not needed for consensus.
Towards this end, Pacia envisages a functional messaging layer. Pacia further elaborates upon the purpose of subspace:
In my own projects I have a number of use cases where I need to send data from one client to another ― payment requests, 2FA (multisig) signing requests, direct-to-recipient payments, ECDH transactions, etc ― but I have yet to find a messaging protocol that has all the properties I need to make these work.
Pacia looks to make Subspace the layer to make these sorts of improvements happen. This is not his first Bitcoin related project. He developed Bitcoin Authenticator, and has discussed how the Apple Watch could facilitate secure Bitcoin transactions.
CCN sat down with Chris to discuss Subspace.
How did the idea to use email for sending BIP70 payment requests get started?
The idea was originally Mike Hearn’s. He proposed using an email-like system (though not SMTP) to extend BIP70 to individuals. There are some obvious benefits ― we can use the system for so-called ‘stealth’ transactions where we only give out a single payment address and receive the payment to different bitcoin address each time. We can attach arbitrary messages to transactions, send payment requests to individuals, and overall increase the amount of privacy in lightweight wallets.
I started work on it after spending a good deal of time (unsuccessfully) trying to fix the privacy leaks related to bloom filters. At present, there aren’t any lightweight wallets that offer the same degree of trustless privacy that can be had by running your own full node. They either try obfuscate data by using bloom filters (which have quite a few privacy leaks) or require you to place 100% trust in a server with your sensitive financial information. Neither option is that great. But by sending a payment directly to the recipient we can avoid the privacy leaks that stem from downloading transactions from the network.
The design for subspace that I put out was a bit different than Mike’s concept. In Subspace messages are encrypted and non-content data is obfuscated using a filtering mechanism. But it basically accomplishes the same thing.
What protocols does Subspace utilize?
The network uses the Kademlia DHT with the only changes being two new RPC calls. It really isn’t complicated at all. The entire project is maybe 350 lines of Python code (not including libraries).
If a wallet author wants to use it in their project, it’s just basic HTTP POST and GET. It should be very easy to implement.
Why is Subspace important for direct payments?
We should be able to achieve full-node like privacy for lightweight wallets. But on top of that we’ll be able to do things like ‘push’ payment requests to end-users. This could enable monthly billing for services, which we don’t currently have in Bitcoin. We can also attach messages to our transactions and even use it for messages between clients.
How is Subspace part of Satoshi’s original vision?
Bitcoin 0.1 had a pay-to-IP protocol that Satoshi felt would be the primary way to pay:
“There are two ways to send money. If the recipient is online, you can enter their IP address and it will connect, get a new public key and send the transaction with comments. If the recipient is not online, it is possible to send to their Bitcoin address, which is a hash of their public key that they give you. They’ll receive the transaction the next time they connect and get the block it’s in. This method has the disadvantage that no comment information is sent, and a bit of privacy may be lost if the address is used multiple times, but it is a useful alternative if both users can’t be online at the same time or the recipient can’t receive incoming connections.” ― Satoshi Nakamoto
One of the reasons pay-to-IP never caught on is it tends to be difficult to configure your computer to take incoming connections. Your average user doesn’t know how to do it and UPnP doesn’t work well all the time. And, of course, if you weren’t online you couldn’t receive a payment this way.
Subspace can allow us to do the same thing but without the problems of direct IP connections.
What stage in development is Subspace?
A beta will probably be out in a month or so and I anticipate releasing a wallet that uses it so people can test it out.
If you would like to contact Chris, you can reach out at email@example.com or on Github https://github.com/BitcoinAuthenticator/Subspace