A couple weeks ago I announced the MetaLens project. Today I'm sharing what I've been working on since then, as well as announcing a new OP_RETURN protocol called MAP, coauthored by @Attila.
MetaLens lets you comment on any URL (or any unique identifier) for free with the help of a public faucet. In its' short lifetime, it briefly became one of the most used protocols on Bitcoin SV.
Protocol Prefix: 1PuQa7K62MiKCtssSLKy1kh56WWU7MtUR5
As is typical with this space, a lot has changed since then!
Building a useful social/communication protocol that works with faucets is a challenge for the same reason it is difficult to have an HD wallet fund transactions in a system like Memo. Memo relies on the sending address to establish a user's identity. After all, you must hold the keys to send from that address so it's already built in. As soon as each transaction comes from a different address (hd wallet), or an address that isn't yours (faucet), how can you have a consistent identity?
Originally, I decided to omit the identity altogether just to get a proof of concept out the door. Now that I've had some time to consider the options, the protocol MetaLens uses has undergone an important change that will allow it to support adding identity in the immediate future. The old protocol looked like this:
? denotes optional parameters
OP_RETURN 1PuQa7K62MiKCtssSLKy1kh56WWU7MtUR5 TYPE ID COMMENT <?USERNAME>
- 1PuQa7K62MiKCtssSLKy1kh56WWU7MtUR5 - MetaLens protocol prefix
- TYPE - The type of content you're commenting on. 'url' or 'tx' for now...
- ID - This is the unique identifier of the source content. In the case of 'url' type, this would be a web address. If it's a transaction, the id is of course a tx hash.
- COMMENT - Plain text field for commenting.
- USERNAME - optional username field for a faux identity.
This has a couple serious limitations. First, there is no authentication. Any user can use any name, or impersonate anyone without any way to verify this. Second, the 'comment' content is not clearly defined, and would not be parsed by the popular viewers out there such as bitcoinfiles.org or bico.media. Original comments will of course continue to exist on the blockchain.
The new protocol is more flexible and takes advantage of few new concepts:
- Protocol Chaining
- Side-loaded Identity via AUTHOR IDENTITY PROTOCOL
- Data definitions via B:// PROTOCOL
- Key, Value mapping via MAP PROTOCOL
When @_unwriter launched Bitcom, it was a big inspiration for many people who had good ideas, but didn't publish or implement them publicly because of the need for a kind of 'social consensus' around protocol development. Thanks to the simple concept of using addresses as protocol prefixes we began to see new protocols emerge almost immediately. Since lots of "micro protocols" are being developed for various purposes, it makes sense that we should try and use them together instead of constantly reinventing the wheel. After some intense discussion in the Atlantis slack channel, @_unwriter wrote up a proposal for this concept. It has not been used yet, but this is what MetaLens plans to do:
OP_RETURN B PROTOCOL | MAP PROTOCOL | AUTHOR IDENTITY
This allows for some awesomeness. It means MetaLens comments do not need authentication, but an identity can be added optionally. This makes it faucet compatible (free transactions without a wallet) and also solves the key reuse issue since HD wallets (where addresses change with each use) can be used. There should be another yours article popping up right about now with more information about the Author Identity Protocol which was developed in tandem with MAP and with some of the same concepts in mind.
It also means that MetaLens gets all of the benefits of B protocol, and comments made with MetaLens will be parseable by all of the new viewers that support B://. It means comments can technically be any content type, from markdown to raw images.
MetaLens uses the text/markdown content type for comments, which can embed images using B:// protocol syntax. Even though I could have done this with the previous protocol spec, comments can now be anything in the future.
This also means MetaLens can have some commands that require a 'B' input, but others that do not have content can omit the first part completely...
Finally, it occurred to me that in some circumstances, identifiers can be split into many fields. Take geolocation for example. Latitude & Longitude make up the ID... but we only have 1 ID field. At first, I thought of geohash which combines the data info 1 field and has native mongodb support. What if I want to add altitude? Phone numbers are also ideally split into "country code" and "number" to make things easier. There are probably other examples too. To solve this, I wanted a variable width protocol for assigning additional key value pairs.
Magic Attribute Protocol - MAP
In the end, a simple multi-purpose protocol for mapping attributes to any global identifier. We drop the comment itself (it is expected to be provided by the preceding B protocol). We can optionally drop the username and replace it with a protocol for attaching identity. The protocol becomes extremely simple:
1PuQa7K62MiKCtssSLKy1kh56WWU7MtUR5 <key> url <value> https://yours.org
With the protocol piping included, this is what the full OP_RETURN for a comment would look like under the hood:
B <content> <content-type> <encoding>
MAP <key= url|tx|... > <value> (repeat key, val, key, val as needed)
AUTHOR_IDENTITY 'BITCOIN_ECDSA' <pubkey> <signature> ...
Best of all worlds! Now we have flexible content declaration, as well as authentication capabilities, hd wallet and faucet support, and lots of other things in the future by piping to additional protocols. How fun was that!? Special thanks to Attila for spending countless hours beating these ideas up, and for unwriter for the always invaluable feedback. Protocol spec:
Soon I will write another article that described some of the ideas I have for the future of the protocol. Because comments can be applied to literally anything, the possibilities for what this will enable are pretty insane.
If you haven't already, check out the extension. Version 0.1.6 released today includes compatibility with the new protocol, so if you already have it make sure you update.
Starting today, MetaLens adds a number of improvements:
- new extensible protocol
- loads faster
- comment on more than just URLs (transactions, addresses, infohashes, content network hashes like dat and ipfs, or even upc codes)
- reply to comments
- ui update
- markdown support for comments
- B:// images allowed in markdown
6 of 6 reviewers say it's worth paying for
0 of 6 reviewers say it's not worth paying for