Develop with pleasure!

福岡でCloudとかBlockchainとか。

Open Assets Address Formatの仕様(訳)

Open Assets Protocolの仕様(訳) - Develop with pleasure!に続いて、Open Assets Protocolをサポートしたクライアントやウォレットで使用されるAddressのフォーマット仕様についてOpen Assets Address Formatの仕様をざっと翻訳。

動機

Open Assets Protocolには、色付けされた出力がこのProtocolに対応していないウォレットで処理をされると出力内のアセット情報が破壊されるという副作用がある。
(この副作用への対応は↓の"論理的根拠"で説明)

このドキュメントでは、Open Assets Address Formatと呼ばれるアドレスの特別な表現について説明する。

仕様

Open Assetsの出力を正しく処理するために、ウォレットでは必ず↓を守る必要がある。

  • 通常のアドレスの表現に加えて、アセットを受け取る可能性がある全てウォレット内の全てのアドレスに対してOpen Assets Address Formatを与える。
  • Open Assets Address Formatを使用することを指定しないアセットの送信については拒否する。

Open Assets Address Formatを使用したアドレスと通常のBitcoinのアドレスは1対1でマッピングされる。

Open Assets Address Formatは↓の形式で表現される。

base58-encode: [one-byte namespace][one-byte version][payload][4-byte checksum]

Open Assetsで使用するnamespaceは19 (16進数では0x13)。version byteは元のアドレスのversion byte。payloadは元のアドレスに含まれるpayload。4-byte checksumは、namespaceとversionとpayloadにダブルSHA-256したハッシュの最初の4 byteとなる。

Open Assets Address Formatの例

↓のアドレスは通常のアドレス表現をしたもの。

Base-58:    16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM
Hex:        00 010966776006953D5567439E5E39F86A0D273BEE D61967F6

先頭のbyteはバージョン=0x00で、最後の4byteはチェックサム=0xD61967F6。

同じアドレスをOpen Assets Address Format で表現すると↓のようになる。

 Base-58:    akB4NBW9UuCmHuepksob6yfZs6naHtRCPNy
 Hex:        13 00 010966776006953D5567439E5E39F86A0D273BEE 852783AA

先頭にOpen Assetsのnamespaceが付加され、チェックサムがnamespaceとversion、payload、ハッシュから計算されたものに変更される。

論理的な根拠

Open Assetsに対応しているウォレットは、 Open Assets Address Formatで表現されているアドレスへのアセットの送信のみ受け付け、そのアドレスはOpen Assetsをサポートしているウォレットからしか入手できない。これによりアセットがOpen Assetsをサポートしているウォレットにしか送られないようになっている。そのため受信側のウォレットはアセットの情報を壊すことなく、色付けされた出力を処理することができる。

後方互換

Open Assetsをサポートしているウォレットは、既存のウォレットが色付けされていないBitcoinを送付できるように通常のBitcoinのアドレス表記をサポートする必要がある。