techmedia-think.hatenablog.com
で出てきたColored Coins Protocolのメタデータに定義できるStatic Dataについて。
Static Data · Colored-Coins/Colored-Coins-Protocol-Specification Wiki · GitHub
Static Data
メタデータには静的なデータを含めることが可能で、Colored Coinsの現在の実装では以下のキーのデータをサポートしてる。
assetId
アセットを送付する際にassetIdを入れることができる(処理を迅速に行うためのオプション)。アセット発行時にはまだAsset IDが決定していないので、メタデータにAsset IDを含めることはできない。
assetName
アセットの名称で任意の文字列。
assetGenesis
アセットがロック中かアンロック中かに関係なく、minterによってアセットの再発行を行う際に必要となる項目。genesis fieldにはアセットを発行したトランザクションとブロックのIDが記録される。
issuer
アセットの発行者を表す任意の文字列。
description
アセットに関する説明の任意の文字列。
urls
JSONオブジェクトの配列で、各オブジェクトにはアセットに関する情報を含む(どこかのリモートサーバでホストされている)ファイルへのリンクが含まれている。
{ name: String, url: String, mimeType: String, // URLのデータのMIME TYPE dataHash: String // データのSHA-256ハッシュ(データの検証に使う) }
以下、colored coinsエクスプローラで使用するために事前定義されたキー。
- icon
アセットのアイコンでアセットの一覧と詳細画面で表示される。 - large_icon
拡大版のアイコン。
実際の商品やサービスについて発行者(販売元とか)との法的契約を考えたとき、法的な文書は発行者のウェブサイトで公開されこのURLのデータ項目でリンクされている。文書のハッシュは発行者が後になってその文書を変更していないことを保証し、資産の発行者と所有者両者がアセットが発行された際のオリジナルの契約文書を参照することができる。
userData
以下のJSONオブジェクトのリスト。
meta
metaという名前の特殊なキーは、colored coinsエクスプローラやクライアントアプリにデータを表示するための許可を与えるのに使われる。metaキーの値は{key,value,type}からなるオブジェクトの配列で、エクスプローラに表示される。
{key: String, value: String, type: String}
エクスプローラでパースされるデータタイプは今のところ
String, Number, Boolean, Date, URL, Email, Array
タイプがArrayの場合は{key: String, value: String, type: String}からなるオブジェクトの配列で、階層的に作れる。
例↓
{key: "user name", value: "username", type: "String"} {key: "birthday", value: "01/01/1970", type: "Date"} { key: "company", value: [ {key: String, value: String, type: String}, {key: String, value: String, type: String} ], type: "Array" }
free JSON
metaキーに加えて、パースし、colored coinsエクスプローラに表示される任意の値をkey:valueのペアで追加できる。
一般的なuserDataのシンタックスは↓
userData : { meta: [ {key: String, value: String, type: String}, {key: String, value: String, type: String}, ....... ], user_key: user_value, user_key: user_value, ... },
メタデータの暗号化
Colored Coins Protocolではメタデータを暗号化するのにRSA公開鍵を使用する。下記指定をし、任意、もしくは全てのfree JSONのユーザデータを暗号化する。
encryptionsキーでどの値を暗号化するか指定する。
encryptions: [ {key: "user_key", pubKey: 'RSA Public Key',format:'pem|der',type:'pkcs1|pkcs8' }, {key: "user_key", pubKey: 'RSA Public Key',format:'pem|der',type:'pkcs1|pkcs8' }, ....... ]
配列の各要素はJSON形式で
{ key:String, pubKey:String, format:String, type:String }
発行者の検証
発行者の検証はメタデータに追加されたverificationsキーを使って行われる。発行者の検証というのは、アセットを発行した人物が、現実世界の誰なのかリンクすることを指す。
Colored Coins Protocolがサポートしている発行者の検証方法は以下の3つ。
- social
発行者のソーシャルグラフ情報 - domain
SSL認証サーバ上のファイルパス(SSL証明書を使った登録情報による検証?) - signed
秘密鍵と公開鍵のペアを使ったメッセージの署名(これはまだ未実装っぽい)
verifications: { social:{ network_1:{ ......... }, network_2:{ ......... }, .......... }, domain:{ url:"https://www.example.com/path/to/file/filename.txt" }, signed:{ message: "plain text message", signed_message: "signed message", cert: ssl certificate (in some format) } }
各ソーシャルメディア毎に設定する値は若干異なる。以下verificationsのサンプル。
verifications: { social:{ twitter:{ username: 'my_username' }, facebook:{ page_id: '1233454356' }, github:{ gist_id: '6c704f5759927212e714' } }, domain:{ url:"https://www.example.com/digital_assets/assets.txt" }, signed:{ message: "We at example.com verifying issuance of colored coins asset with asset ID [LJEC6Q2h9JKNvZqEC87TbEXvxm4br1uivb2QX].", signed_message: "-----BEGIN CMS----- MIIFawYJKoZIhvcNAQcCoIIFXDCCBVgCAQExDzANBglghkgBZQMEAgEFADCBgQYJ KoZIhvcNAQcBoHQEcldlIGF0IGV4YW1wbGUuY29tIHZlcmlmeWluZyBpc3N1YW5j ZSBvZiBjb2xvcmVkIGNvaW5zIGFzc2V0IHdpdGggYXNzZXQgSUQgW0xKRUM2UTJo OUpLTnZacUVDODdUYkVYdnhtNGJyMXVpdmIyUVhdLqCCAwMwggL/MIIB56ADAgEC AgEBMA0GCSqGSIb3DQEBBQUAMBoxCzAJBgNVBAYTAlVTMQswCQYDVQQKDAJaNDAe Fw0xMzA4MjgxODI4MzRaFw0yMzA4MjgxODI4MzRaMBoxCzAJBgNVBAYTAlVTMQsw CQYDVQQKDAJaNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN906qi0 d3nlJg7R0vPahd6eDD+1n6rdmY495WYy44whg78K/XCTZTQ4rim6Dg4FIk+GXT1m zojAHw3A85TsQNOAw5xBRgH/pA0IjUntmbagu25yHPPikhv6jhkCFWmsuFHK+qLw 5MpDuR8Z+zlO7CafUz/R9CR/MzEAOmM4o2B/S7LqU3q62N1Os8ooVRA11zr9PLwR 5OdATBSWxPYsBcJ8QrFOflGVGWMPO1LtJ+CzxUvQU/LVCLwH50VyBFgoWtymxVpn WUGZcqxcNG7lBH9GDd/0NGrgZHWw0fxEtj24CkyXZI3P6xHjNE8bzlH+x7lDToa7 QFRDdQ+brsRNVksCAwEAAaNQME4wHQYDVR0OBBYEFAdk9MTJBW7/Qj/dBaGVPJbt ahPNMB8GA1UdIwQYMBaAFAdk9MTJBW7/Qj/dBaGVPJbtahPNMAwGA1UdEwQFMAMB Af8wDQYJKoZIhvcNAQEFBQADggEBAMfGon3LxqVMftqBUxZl+Jz9Fut28fDKr4g6 uANOirKjTD4hnoEKf2+O/mK6Gq7gWis5YMAWlAplbQMsEkRDL/v/T72mTYM+ErVf N06i+VKuRG34ZwSkadRefMAJcMFs7T5auT6FyMSRBFErVtbauScBEgQkb0ZL6lKE /0Gr/QGY2wx6l01wFrTPdrkHR/MXIJChSVfpFOrFHDWHVC3kXTSl+yntKNdUi9hx 7Ado0BJu2jWfmGtLPVVj2EttrXWK8vU3hahZubMAvoFZpuwLYP8x6dJPb9fqFMrI ZemDcSDaHeIu9S3Bw2fLSFEqy1zvcmX3FHepd9cokfROFOWrSCoxggG1MIIBsQIB ATAfMBoxCzAJBgNVBAYTAlVTMQswCQYDVQQKDAJaNAIBATANBglghkgBZQMEAgEF AKBpMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE1 MTAxMzA4MjM0N1owLwYJKoZIhvcNAQkEMSIEIEmnhXUqo76ePeBF1RGvV0oCDsGZ 3kF+Z6RvD3eC8lSXMA0GCSqGSIb3DQEBCwUABIIBADWkvjI5Adtlj7MKZ6m8Q20Y uonGMQBmOJNBIfG2X+nfRFO7FGKT7hGT7Hx5Hkx2oStljdMC1C/orNQUzC7BORuF JKLktO79a4nSpegEN5X1JK2ZLsifUONup3EgLGNj9NR5AIGlLM7fLVKAAPrOLnlf mXt5awcgLEztzM+/W7HMPDS+neKGwFtDdjZgNOQjGKehnjWv8vDeslIxVq+FHlAy 0GYd2y14RwTxejIU1mpXRP6I1J8/9OwUNmW8J1oELi9qgx/WdeppXwZma9QLWBU7 qZT5uAGldHG1UJl+sJ266J96wB5TyvCXzdT+G5Pw7as3tn1GIXel/hXIMu0Nq00= -----END CMS-----", cert: "-----BEGIN CERTIFICATE----- MIIC/zCCAeegAwIBAgIBATANBgkqhkiG9w0BAQUFADAaMQswCQYDVQQGEwJVUzEL MAkGA1UECgwCWjQwHhcNMTMwODI4MTgyODM0WhcNMjMwODI4MTgyODM0WjAaMQsw CQYDVQQGEwJVUzELMAkGA1UECgwCWjQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQDfdOqotHd55SYO0dLz2oXengw/tZ+q3ZmOPeVmMuOMIYO/Cv1wk2U0 OK4pug4OBSJPhl09Zs6IwB8NwPOU7EDTgMOcQUYB/6QNCI1J7Zm2oLtuchzz4pIb +o4ZAhVprLhRyvqi8OTKQ7kfGfs5Tuwmn1M/0fQkfzMxADpjOKNgf0uy6lN6utjd TrPKKFUQNdc6/Ty8EeTnQEwUlsT2LAXCfEKxTn5RlRljDztS7Sfgs8VL0FPy1Qi8 B+dFcgRYKFrcpsVaZ1lBmXKsXDRu5QR/Rg3f9DRq4GR1sNH8RLY9uApMl2SNz+sR 4zRPG85R/se5Q06Gu0BUQ3UPm67ETVZLAgMBAAGjUDBOMB0GA1UdDgQWBBQHZPTE yQVu/0I/3QWhlTyW7WoTzTAfBgNVHSMEGDAWgBQHZPTEyQVu/0I/3QWhlTyW7WoT zTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQDHxqJ9y8alTH7agVMW Zfic/RbrdvHwyq+IOrgDToqyo0w+IZ6BCn9vjv5iuhqu4ForOWDAFpQKZW0DLBJE Qy/7/0+9pk2DPhK1XzdOovlSrkRt+GcEpGnUXnzACXDBbO0+Wrk+hcjEkQRRK1bW 2rknARIEJG9GS+pShP9Bq/0BmNsMepdNcBa0z3a5B0fzFyCQoUlX6RTqxRw1h1Qt 5F00pfsp7SjXVIvYcewHaNASbto1n5hrSz1VY9hLba11ivL1N4WoWbmzAL6BWabs C2D/MenST2/X6hTKyGXpg3Eg2h3iLvUtwcNny0hRKstc73Jl9xR3qXfXKJH0ThTl q0gq -----END CERTIFICATE-----" } }
所感
- Open Assets Protocolのメタデータはアセットの発行時にのみ付与されるけど、Colored Coins Protocolの場合は、発行だけでなくアセット送付時のトランザクションにもメタデータを付与するみたい。
- Open Assets Protocolでサポートしてる発行者の検証はAsset Definition Fileのlink_to_websiteのフィールドにtrueをセットしておくと、Asset Definition Fileを入手する際のSSL証明書のsujectフィールドを取得してアセットの発行者とする Proof of Authenticityのみだけど、Colored Cons Protocolではソーシャルグラフや鍵ベースの署名なオプションといった選択肢が多い。ただソーシャルグラフは検証可能なものではないと思う。