BIP 0122

From Bitcoin Wiki
Revision as of 17:59, 24 September 2019 by 934 (talk | contribs) (Update BIP text with latest version from https://github.com/bitcoin/bips/blob/b5723035e23896d0/bip-0122.mediawiki)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

This page describes a BIP (Bitcoin Improvement Proposal).
Please see BIP 2 for more information about BIPs and creating them. Please do not just create a wiki page.

Please do not modify this page. This is a mirror of the BIP from the source Git repository here.

  BIP: 122
  Layer: Applications
  Title: URI scheme for Blockchain references / exploration
  Author: Marco Pontello <marcopon@gmail.com>
  Comments-Summary: No comments yet.
  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0122
  Status: Draft
  Type: Standards Track
  Created: 2015-08-29
  License: PD
  Post-History: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2015-August/010712.html

Abstract

This BIP proposes a URI scheme for looking up blocks, transactions and addresses on a Blockchain explorer, or in general to make proper Blockchain references.

Motivation

The purpose of this URI scheme is to enable users to handle all the requests for details about blocks, transactions, etc. with their preferred tool (being that a web service or a local application). Currently a Bitcoin client usually points to an arbitrary blockchain explorer when the user looks for the details of a transaction or allows the user to choose from a set of alternatives. Resorting to copy + paste into a browser is often required. The same happens with posts and messages that reference some particular txs or blocks, if they provide links at all.

Specification

The URI follow this form:

blockchain:[//<chain>]/<tx|block|address>/<hash>

Where:

Element Description Required?
chain chain ID (see below) of the desired chain, leading 0s included. If omitted (which would be the usual case), Bitcoin main net is assumed. optional
type tx for transactions. required
block for blocks (supports both hash or height).
address for addresses.
hash the relevant hash to refer to (leading zeros included), or block height. required

ABNF grammar

blockchainuri = "blockchain:" ["//" chain] "/" object
object = ("tx" "/" hash) / ("block" "/" (hash / blockheight)) /
         ("address" "/" address)
chain = hash
hash = 64HEXDIG
blockheight = 1*15DIGIT ; 15 is somehow arbitrary, i.e. a "small" int.
address = base58 ; https://en.wikipedia.org/wiki/Base58

Definition of chain ID

The chain ID of a chain is the block hash of the corresponding genesis block. For forked chains, it's the block hash of the first block after fork.

So, for example:

Bitcoin main   : 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f 
Bitcoin test   : 000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943
Bitcoin regtest: 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206 

An example of forked chain (Feathercoin, that forked Litecoin):

<img src=bip-0122/chainid.png></img>

Litecoin   : 12a765e31ffd4059bada1e25190f6e98c99d9714d334efa41a195a7e7e04bfe2
Feathercoin: fdbe99b90c90bae7505796461471d89ae8388ab953997aa06a355bbda8d915cb


Examples

A transaction on Bitcoin main net:

blockchain:/tx/b462ae6eb8bdae2e060239a2a3ea5d9c3e0f9ef34d9717beb2dcf0ed42cee7da

A block on Bitcoin main net:

blockchain:/block/00000000000000000119af5bcae2926df54ae262e9071a94a99c913cc217cc72

or

blockchain:/block/372338

An address on Bitcoin main net:

blockchain:/address/16EW6Rv9P9AxFDBrZV816dD4sj1EAYUX3f

A transaction on Bitcoin test net:

blockchain://000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943/tx/3b95a766d7a99b87188d6875c8484cb2b310b78459b7816d4dfc3f0f7e04281a

Rationale

From the point of view of a wallet (or other Blockchain related tool) developers which need to reference Blockchain data, using this scheme mean that he can simply make it a `blockchain:` link without having to worry about any specific Blockchain explorer or provide a means for the user to select one.

Blockchain explorers in turn will simply offer to handle the `blockchain:` URI schema, the first time the user visit their website, or launch/install the application, or even set themselves if there isn't already one.

Users can link directly to their preferred block explorer (avoiding copy + paste which can be awkward on mobile devices).

Sample implementation

Demo Blockchain: URI handler on GitHub

Acknowledgements

Thanks to Btc Drak for suggesting support for different networks and Jorge Timon for the suggestion that we could identify each network by its genesis block hash. Thanks to Richard Moore, Matt Whitlock, Andreas Schildbach for help with the structure and hierarchy of the URI scheme.

Copyright

This document is placed in the public domain.