Bitcoinは通貨以外のデータをアップロードすることができる
ブロックチェーンというと普通の人は通貨システムを想像する方が多いと思いますが、通貨としてのブロックチェーンはあくまで「AさんがBさんに1BTC送信した」というトランザクションデータの集合体であり、少し使い方を変えると通貨のトランザクションデータ以外もブロックチェーンに格納することが可能です。
つまりブロックチェーンとはあくまで分散型データベースなので理論上はコインをやり取りしたトランザクションデータだけではなく、画像やテキストといったデータを上げることができます。この技術をビットコインでは『OP_RETURN』と言います。
→https://noumenon-th.net/webstrategy/2015/04/30/bitcoin/
ちなみに暗号通貨の始まりの祖であるビットコインにもOP_RETURNでそういったことが可能です。ですがBTCのブロックチェーンはブロックサイズが1MBと非常に小さいため、一回に付き最大80byteのデータしかアップロードできないため、まともなデータをアップロードすることができません。
ですが、bitcoinSVならブロックサイズが最大2GBと非常に大きいため、OP_RETURNを使用して様々なデータをアップロードすることができます。
BitcoinSVとは何か?
BitcoinSVとは2018年12月にBCHのHFで誕生したBitcoin系列の暗号通貨の1つです。Bitcoin(BTC)を開発しているのはブロックストリーム社ですが、BitcoinSVは「nchain」というイギリスの企業が開発しています。開発責任者は自称ビットコインの発明者であるクレイグライト氏です。
関連記事:ビットコインの発明者、ナカモトサトシと目されるクレイグライト氏とは何者なのか?
BitcoinSV(BSV)のチェーンにデータをアップロードする
ブロックチェーンへのデータのアップロードはライブラリを使うことで簡単に行うことが可能です。BSVのブロックチェーンに簡単にアクセスするためのライブラリはPythonやJavascriptやPHPなど様々な言語のものが用意されていますが、Javascript系ライブラリが一番充実していたので今回Javascriptを使用します。
ちなみにPythonを使う場合はBitsvとPolyglotというライブラリを使用することで簡単にBSVのブロックチェーンにアクセスすることが可能です。
関連記事:【Python】BitsvとPolyglotでBSVのブロックチェーンにアクセスする
今回使用するBSV用JavascriptライブラリはMoneyButtonというプロジェクトが作成した『bsv』というライブラリです。まずはこの『bsv』をインストールします。
//bsvとbsv-mnemonicをインストールする $npm install -g bsv $npm install -g bsv-mnemonic $npm install -g datapay
※npmコマンドはnode.jsをインストールしていないとコマンドラインでは使えません。
-gはとりあえずつけてます。つけるかつけないかはおまかせします。
bsvとともに、ビットコインSVウォレット全体で一般的に使用されるBIP 39ニーモニックを作成および管理するためのツールである「bsv-mnemonic」と数々の有用なBSVライブラリを開発しているunwritter氏の作った「datapay」も一緒にインストールしておきます。
そして、インストールが完了したら、それらを読み込みます。
//ライブラリを読み込む var bsv = require('bsv') var Mnemonic = require('bsv/mnemonic') var datapay = require('datapay')
ライブラリの読み込めたら次はアドレスを作成します。HandCashなどのウォレットアプリから復元する場合はBIP39に則って生成されたパスフレーズからBIP32に則って作られたHD秘密鍵(秘密鍵の大本の秘密鍵のようなもの)を復元し、そこから秘密鍵を生成するという作業が必要になります。まあこっちのやり方を作って送金した方がセキュリティとか諸々考えてベターだと思います。
// 秘密鍵を生成する処理(最初だけ) let privKey = bsv.PrivateKey.fromRandom() let privateKey = bsv.PrivateKey.fromRandom('mainnet') //秘密鍵をWIF方式に変換して出力する console.log(privateKey.toWIF())
WIF 形式 (Wallet Import Format) というのは、本来どちゃくそ長い文字列の秘密鍵をインポートできるようにするための16進数の表示方式です。
これで出力されたプライベートキーはメモしておいて2回目からは、それをインポートして作業していくのがいいでしょう。
//前回作成した秘密鍵をインポートする key = '前回作って出力した自分の秘密鍵' let privateKey2 = bsv.PrivateKey.fromWIF(key) console.log(privateKey2.toWIF())
次は一応秘密鍵から公開鍵と一時用ウォレットアドレスを算出します。臨時アドレスは別に作る必要はありませんが、これとUTXOによって自分のウォレットのプライバシーを守ることができます。
// 秘密鍵から公開鍵を検出する let publicKey = bsv.PublicKey.fromPrivateKey(privateKey2) console.log(publicKey.toHex()) // 公開鍵から受信用アドレスを作成する let address = bsv.Address.fromPublicKey(publicKey) console.log(address.toString())
次はいよいよBSVのブロックチェーンにデータをアップロードしていきます。ブロックチェーンへのOP_RETURNによるデータのアップロードはunwritter氏の「datapay」というライブラリを非常に便利なので、それを使用します。
//datapayからMemocashにテキストデータをアップロードする const tx = { safe: true, data: ["0x6d02", "hello world"], pay: { key: key }, }; datapay.send(tx, function(err, res) { console.log(res) })
返り値を格納する変数「res」には、↓のようなトランザクションハッシュが返ってきます。
このトランザクションハッシュをブロックチェーンエクスプローラーで検索してみます。
するとOP_RETURNでアップロードしたデータはs-98946a07b2cff52aa4348ef50599d763というアドレスに送られているのが分かります。
引き続きこのアドレスをブロックチェーンエクスプローラーで見てみると、以下のような内容がブロックチェーンに記録されています。
「68656c6c6f20776f726c64」というのが16進数で表現されたテキストメッセージになっています。16進数変換サイトとかにこの数字を入力すると「hello world」になります。
終わり
以上がPythonとjsのライブラリを使用したbitcoinSV(BSV)ネットワークへの簡単なアクセス方法になります。こういう系のブロックチェーンはイーサリアムやNEMやEOSやNEOなどいろいろありますが、その中でも自分のおすすめはやはりBSVですね。BSVの何がすごいのかというとその処理能力です。
他の仮想通貨プロジェクトがスケーリング問題に直面してサイドチェーンprに逃げていたり、BTCのデフォルトのブロックサイズは当初32MBだったのにその32MBのブロックすら作れない開発が変わった今のBTC、そしてBCHを差し置いて予定通り最大2GBまでブロックサイズを拡張しており、それによって色んなアプリケーションが日々誕生しており非常に面白いです。
BSVのデべロッパーツールやアプリケーションについてはここにまとめられているので興味のある方は調べてみてください。
私自身ブロックチェーンについてまだまだ分からないことだらけなので勉強会などございましたら情報お待ちしております。
コメント