BitcoinSV(BSV)のブロックチェーンにop_returnで任意のデータを刻み込む

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」には、↓のようなトランザクションハッシュが返ってきます。

このトランザクションハッシュをブロックチェーンエクスプローラーで検索してみます。

https://blockchair.com/bitcoin-sv/transaction/c7a8508a0276a8228108556a45585755e47982face064bd411227a5d8ef73fec

すると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のデべロッパーツールやアプリケーションについてはここにまとめられているので興味のある方は調べてみてください。

https://www.bsvdevs.com/

私自身ブロックチェーンについてまだまだ分からないことだらけなので勉強会などございましたら情報お待ちしております。

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で



「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」

「エンジニアとして若いうちから高収入を得たい」



という強い気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする

   侍エンジニア塾       
侍エンジニアの無料体験レッスンを予約する -->