Skip to content

unwriter/B

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 

B://

Bitcoin Data Protocol

b://6c784b78cff5ee4f469f783adc0e957265f467d3a0dae2b2b1ecbc84a1bd1fb6

Store and reference data on the Bitcoin blockchain.

store

reference


Intro

B is an OP_RETURN protocol to store and reference arbitrary data on Bitcoin.

The design goal:

  1. The simplest protocol to upload arbitrary media to the blockchain
  2. A protocol to reference previously uploaded media from another on-chain media.

Protocol

Here's an example of what POST transactions look like:

OP_RETURN
  19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut
  [Data]
  [Media Type]
  [Encoding]
  [Filename]

The order is deliberately data, media type, and encoding, filename, in the order of significance (With future extensibility through adding additional push data).

  1. Data: data to store
  2. Media Type: As listed at https://www.iana.org/assignments/media-types/media-types.xhtml
  3. Encoding: As listed at https://www.iana.org/assignments/character-sets/character-sets.xhtml (The default is binary)
  4. Filename: a filename to store the blob as (the default has no filename and just stored as a blob, identified simply by the txid)

Example: HTML

OP_RETURN 19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut  <html><body>hello world</body></html>  text/html  UTF-8  hello.html

Note

B:// is NOT a protocol for handling authenticated and encrypted media (That would be a much more complex problem). The main design goal of B is:

  1. Public: Public assets
  2. Simple: Simple to implement
  3. Versatile: Easily pluggable to any application in any context
  4. Extensible: Future extensibility with additional push data support

Demo

Try it here: https://b.bitdb.network


Usage

1. Uploading Large Media

Let's upload an image.

You can try it here (up to 100KB)

When you select a file, it directly writes the binary (ArrayBuffer) into Bitcoin pushdata (instead of base64 string). The resulting OP_RETURN would look something like this:

OP_RETURN 19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut [ArrayBuffer from the file]  image/png  binary  duck.png

By default, the encoding is binary, so you could just do (if you don't care about file names):

OP_RETURN 19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut [ArrayBuffer from the file]  image/png

Another example:

OP_RETURN 19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut [ArrayBuffer from the file]  text/html  UTF-8  index.html

2. Referencing Media

Once uploaded, this media can be referenced from ANY other transactions using a transaction hash. For example, let's say the media hash for an image uploaded this way was 46e1ca555622e73708a065f92df0af2cc0fe00ed1dd352d5fb8510365050347c.

You can reference it in another HTML file like this:

<html>
<body>
<img src="b://46e1ca555622e73708a065f92df0af2cc0fe00ed1dd352d5fb8510365050347c">
</body>
</html>

Of course, to upload this HTML file itself, you would do this:

OP_RETURN
19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut
<html><body><img src="b://46e1ca555622e73708a065f92df0af2cc0fe00ed1dd352d5fb8510365050347c"></body></html>
text/html
UTF-8 
example.html

Once this HTML file is uploaded to Bitcoin, and the tx hash is e2be88f33d98074f778ddd94c13fe500cb1f5a4dfb3ed958391c95f431c20549, you can link it from another HTML, like this:

<html>
<body>
Check out <a href="b://e2be88f33d98074f778ddd94c13fe500cb1f5a4dfb3ed958391c95f431c20549">my website!</a>
</body>
</html>

You can use it in a markdown too:

[Here](b://e2be88f33d98074f778ddd94c13fe500cb1f5a4dfb3ed958391c95f431c20549) is a website, which contains the following image:

![image](b://46e1ca555622e73708a065f92df0af2cc0fe00ed1dd352d5fb8510365050347c)

Of course, you will upload it like this:

OP_RETURN
19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAut
[Here](b://e2be88f33d98074f778ddd94c13fe500cb1f5a4dfb3ed958391c95f431c20549) is a website, which contains the following image:\n![image](b://46e1ca555622e73708a065f92df0af2cc0fe00ed1dd352d5fb8510365050347c)
text/markdown
UTF-8 
README.md

About

Store and reference data on the Bitcoin SV blockchain

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published