【Python】BitsvとPolyglotでBitcoinSV(BSV)のブロックチェーンに画像データをアップロード

前回はMoney buttonのjavascriptライブラリを使用してBitcoinSV(BSV)のブロックチェーンにアクセスし、送信や文字データの送信を行う方法について解説しました。

今回はPython用のBSVライブラリを使ってbitcoinSV(BSV)のブロックチェーンにアクセスし、op_returnでテキストや画像をアップロードしたいと思います。

ライブラリのインストール

今回使用するライブラリは「BITSV」とその上位互換の「Polyglot」の2つです。他にも一応「base58」とかも必要ですがこれらをインストールすると勝手にインストールされます。(されない場合は各自でインストールしてください)

# 必要なライブラリをインストールする
pip install bitsv
pip install polyglot-bitcoin

公式ドキュメント:

https://pypi.org/project/bitsv/

https://pypi.org/project/polyglot-bitcoin/

コマンドラインで必要なライブラリをインストールできたらPython上で呼び出します。

# ライブラリを読み込む
import bitsv
import polyglot

秘密鍵(ウォレット)を用意する

前回も解説しましたが、ブロックチェーンにアクセスするためには、まず自分のウォレットアドレス(秘密鍵)が必要になります。

既にBSVを保有している人はスマホアプリなんかのウォレットのパスフレーズから秘密鍵を復元するという手もありますが、セキュリティ面を考えると新しくウォレットを作成して、そこに少額のBSVを送金して今回の作業び使用するというのが無難かと思われます。秘密鍵の生成はMoneybuttonのライブラリを使用することで簡単にできます。

秘密鍵の生成の方法などは、関連記事:BitcoinSV(BSV)のブロックチェーンにop_returnで任意のデータを刻み込む の方で解説しているので、そちらを参考にしていただけると幸いです。

ウォレットの残高を確認する

秘密鍵が用意できたらそれを.keyの引数にセットしてクラスとします。こうすることで秘密鍵が保有しているBitcoinSV(BSV)の残高を確認や様々なデータのトランザクションの送信が可能になります。残高の確認はmy_key.get_balance()で行えます。

# 自分の秘密鍵をセット
key = 'WIF方式の秘密鍵(16進数で表示された自分の秘密鍵)'
my_key = bitsv.Key(key)

# ウォレットの残高を確認する
bal = my_key.get_balance()
print(bal)

BitSVから他のアドレスにBSVを送金する

# 送金額とあて先を指定する
outputs = [
    # ドル単位で送る場合
    ('1PdvVPTzXmo4cSs68HctLUxAdW917UZtC8', 0.1, 'usd'),
    # bsv単位で送る場合
    ('1PdvVPTzXmo4cSs68HctLUxAdW917UZtC8', 0.0001, 'bsv'),
    ] 

# outputで指定したアドレスと金額を送信する
res = my_key.send(outputs)

# トランザクションIDを確認する
print(res)


ここでサンプルで指定しているBSVのアドレスはBITSVの開発者の寄付用アドレスです。このライブラリが便利だなと思った方は開発者のAustEconさんにBSVを寄付しましょう。resには戻り値として、トランザクションIDがjsonの形で格納されています。

polyglotで画像データをブロックチェーンにアップロード

次は、Polyglotで画像データをブロックチェーンにアップロードしていきます。BSVは1byteあたり1satoshiでデータをアップロードすることができ、polyglotでは100kb以下のデータであれば、簡単にアップロードすることが可能です。100kb以下の画像というとアイコンくらいになります。

# ライブラリの読み込み&秘密鍵のセット
import polyglot
uploader = polyglot.Upload('your private key goes here in WIF format')

今回はこの画像をアップロードします。この画像のデータサイズは6kbです。

※ブロックチェーンは一度データをアップロードすると削除することは基本的に不可能なので、アダルトな画像などをアップロードすると最悪逮捕される危険性があるので、アップロードする画像は慎重に吟味してください

# アップロードしたい画像のローカルパス
img_path = "C:\\Users\\user_name\\Downloads\\xxxxx.jpg"

# ブロックチェーンに画像をアップロードする
res = uploader.upload_b(img_path, media_type=None,
encoding=None, file_name=None)

# トランザクションIDを表示する
print(res)

ローカルPCの画像のパスはファイル名に日本語が混じっていると文字コードエラーになるので、注意してください。

resに格納されているのはトランザクションIDでjson方式で返されます。今回の実行した結果のresの戻り値は↓のようになりました。

{‘data’: {‘txid’: ‘c3e42519a7a76e81cdf26470decf23

56c21f4e1b2bfacfcc1e409e6ec88cf714′}}

またこの関数は内部でunwritterの画像アップロードプロトコルであるb://を使用しているため、彼の作ったbitstagramhttps://bitstagram.bitdb.network/)で確認することができます。

前回は一々ブロックチェーンエクスプローラーのサイトにアクセスしてop_returnのアドレスとか中身とか確認していたわけですが、よくよくサイトを見たら、トランザクションの中身だけ取得できるAPIが用意されていたので、APIを使用してPython上でそのままトランザクションの中身を確認します。

# blockchair.com/のAPIを使ってトランザクションの内容を確認する
import requests
import json


# tx_hash ='c3e42519a7a76e81cdf26470decf2356c21f4e1b2bfacfcc1e409e6ec88cf714'
tx_hash = res['data']['txid']

# requestでトランザクション内容を取得
r = requests.get(
    'https://api.blockchair.com/bitcoin-sv/dashboards/transaction/' + tx_hash)
r = json.loads(r.text)

# レスポンスの中から画像のデータだけを取得して変数に格納する
img_binary = r['data'][tx_hash]['outputs'][1]['script_hex']

# プリントで確認
print(img_binary)

変数rにはトランザクションの内容が全て格納されており、画像などの比較的大きなデータをアップロードすると、バイナリ化した画像データが大量に表示されます。

終わり

以上がBitsvとPolyglotを使用してBitcoinSVのブロックチェーン上に画像データをアップロードする方法です。

Polyglotの今後のロードマップでは、unwritter氏のBitcomを土台として、htmlをアップロードしルーティング処理を行うことでwebサイトそのものもアップロードできる予定になっており、この機能ができれば、ブロックチェーンエンジニアでなくとも普通のエンジニアなら誰でも比較的容易にDappsを作成することが可能になるので、BitcoinSVの今後が楽しみです。

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


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



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

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

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

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



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



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





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



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


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


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


シェアする

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

フォローする