前回の記事↓
前回はPythonでBitcoinSVのブロックチェーンにアクセスするためのライブラリである「Bitsv」と「Polyglot」で画像データをアップロードする方法について紹介しましたが、100kb以上のデータをアップロードする方法について解説していなかったので、今回はそのあたりについて紹介していきたいと思います。
Polyglotで100kb以上のデータをBSVブロックチェーンにアップロード
BitcoinSVのブロックチェーンへのデータをアップロードはunwriter氏の開発したプロトコルを使用することで非常に簡単に行うことができます。
前回はbというプロトコルを使用して画像データをアップロードしましたが、bは100kb以下のデータをアップロードするためのもので、100kb以上のデータブロックチェーンにアップロードする場合はデータを100kbに小分けにしてアップロードし、それらを結合して1つのデータとする処理が必要になります。この処理をしてくれるのが、bcatというプロトコルになります。
bcat自体はjavascriptベースですが、PolyglotというPythonライブラリを使用すればPython上からでも使用することが可能になります。
Polyglotの使い方
まずPolyglotのライブラリと秘密鍵を読み込みます。
# ライブラリの読み込み import polyglot import bitsv # 自分の秘密鍵の読み込み key = '自分の秘密鍵' uploader = polyglot.Upload(key)
まずは画像データをアップロードする前に秘密鍵の残高を確認してください。bitcoinSVのブロックチェーンのデータアップロード料金は現在1byte/1satoshiです。
1BSVを10000万円とした場合、100kbのデータをアップロードしようと思った場合はアップロード料金として10円かかる計算になります。
なので、1MBならば100円、1GBなら10万円かかる計算になるので、メインネットで大容量のデータをアップロードには注意してください。そして、秘密鍵にデータをアップロードするのに十分な額が入っているか確認してください。
それが確認できたら画像のアップロードに移りましょう。BCAT://での画像のアップロードには前回のB://と違い、少し前準備が必要になります。
というのも現状bsvのブロックチェーンは1回のトランザクションでアップロードできるデータ容量が1トランザクションにつき、100kb(100000satoshi)までに制限されているので、100kb以上のデータをアップロードする場合はデータを100kbごとに小分けにして送信しなければいけません。
そのために新鮮なアドレス(unspent/未使用のアドレス)をあらかじめ作っておく必要があります。つまりどういうことかというと現在ウォレットに入っている、BSVを100000satoshiごとのUTXOで小分けにしてやる必要があります。
この作業はpolyglotのsplit_biggest_utxo()
で簡単に実行できます。
# 自分の秘密鍵が所有する公開鍵アドレスを最低限必要な分作成する uploader.split_biggest_utxo() # アドレスが作成できているか確認する unspent_num = uploader.get_unspents() print(unspent_num)
そして、get_unspents()
でウォレットの状況を確認すると、ウォレットのsatoshiが100000satoshiごとに分けられているのが分かります。
ですが、作成したばかりだと、アドレスを作成するトランザクション自体がブロックチェーン上で検証されておらず、cofimationが0なので、まだこのアドレス(アドレスを生成したトランザクション)はブロックチェーン上で有効と見なされておらず、使用することができませんので1確認待つ必要があります。
1確認ができたら、画像をアップロードしていきます。polyglotで100kb以上のデータをアップロードする場合upload_b()
ではなく、upload_bcat()
を使用します。
file = "自分の画像のローカルパス"(例C://〇〇/~) res = uploader.upload_bcat(file) print(res)
戻り値を格納した変数resにはトランザクションIDが格納されています。
終わり
以上がpolyglotによるBitcoinSVのブロックチェーン上に画像データをアップロードする方法です。100kb以上になるとそこそこアップロード料金が掛かってくるので、もうちょっと引き下げてほしいところですね。
まあそれこそ本家BTCのop_returnが80Byteだった時代にやっていたようにデータを圧縮するみたいなことをすればもっと、効率よくファイルをアップロードすることが可能だとは思いますが・・・。
それはさておき、こうやってトランザクションを発生させ、そのトランザクションがブロックに格納され、マイニング報酬において、半減期ごとに文字通り半減する新規ブロック報酬の代わりとなり、マイナーがネットワーク維持するインセンティブが生まれるわけですから、これこそがビットコインが本来想定していたエコシステムであり、BitcoinSVこそがビットコインだと思います。
BTCのライトニングネットワークはバグまみれなのもそうですが、サイドチェーン(セカンドレイヤー)に依存していることが根本的に大きな欠陥であり、成功しないと思います。まあ思想面の話は別で話していますし、ここでは技術面にだけフォーカスしていきます。
とりあえずこれでpolyglotとBitsvを通じてブロックチェーンへのデータのアップロードは可能になりました、これだけで既存のwebアプリケーションの連携させて使用することも可能ですが、ここまでだとイーサリアムでも可能です、
やはりBitcoinSVのブロックチェーンを利用するメリットはそのずば抜けたスケーリング能力であり、それを生かしたMatanetというブロックチェーンインターネットの構築です。
つまりはHTMLファイルなどを丸ごとアップロードしルーティング処理を施すことでwebサイトなどのwebアプリケーションそのものをブロックチェーンにアップロードすることも可能な訳です。
ですが、実際にそれを行うためにはjsonRPCやP2Pの通信に対しての深い知識が必要になるわけですが、unwritter氏の作成したBitcomとexpress.jsに似せたwebアプリフレームワークであるcosmosを使用すれば、その手間も省けますね。
まだイーサのMetamaskのようなキラーツールはありませんが、今の勢いを見ている限りそういったものが出てくるのも時間の問題だと思います。
コメント