Arweave(アーウィーブ)にプロフィール画像を永久保存する!
Arweaveをはじめて知る
最近、Arweave(アーウィーブ)というのを知った。要は分散ストレージで、IPFSみたいなものである。違いとしては、IPFSはデータがずっと保存される保証はないが、Arweaveは200年ぐらい、つまりほぼ永久にデータを保存してくれるらしい。
使い方はわりと単純で、最初に永久保存する分の費用を払うだけである。えー、それじゃあ費用が高額になるのでは、と思うが、ストレージ費用は年々下がっていくため、先のことはあまり気にしなくていいらしい。実際そんなに高くもない、というより思ったよりだいぶ安い。
具体的には、以下のサイトで費用を確認できる。
これによると、例えば1GBあたりの費用は現時点で0.3AR。つまり今のレートでいうと3ドルぐらいである。最初に3ドル払うだけで、1GBのデータを永久に保存してくれるのだ。データサイズが1MBとかであれば、たった0.4円である。そう考えると安い。
もちろん、本当にこれで200年間保存されるのかは、タイムマシンでもない限りわからないが、ArweaveはSolanaやAvalancheなどのストレージとして使用されているので、ある程度の信頼感はある。
Faucetで$ARを手に入れようとして、失敗する
Arweaveのガバナンストークンは$ARであるが、少額(0.02AR)であれば、以下のサイトからただで入手することが可能だ。
ただし自分の場合、申請がBot判定されて、手に入れることができなかった。Bot判定された理由はよくわからないが、自分が使っているデスクトップPCのOSが Linuxだからかもしれない。通常BotはLinuxで動かすことが多く、LinuxのUAが弾かれている可能性があるのだ。
Botと誤判定された場合にはメールすればいいらしい。ただし、送金されるまでには何日かかかるので、急ぎであれば自分で買った方が早い。
PythonでArweaveを扱う
arweave-python-client
「すべての道はPythonに通ず」という言葉があるが、ArweaveもPythonモジュールとして arweave-python-client というパッケージがある。
$ pip install arweave-python-client
ちなみに、anacondaのpython3ではSHA256のエラーがでるため、正規パッケージのpython3を使用した
モジュールのロード
>>> import arweave
>>> import json
ウォレットファイルの読み込み
ウォレット作成時にバックアップとして保存した jsonファイルをロードして利用する。
>>> wallet = arweave.Wallet('arweave-keyfile-****************************************.json')
残高の確認
>>> wallet.balance
0.02
送金テスト
画像の前に、$ARを送るテストをしてみたい
トランザクションの生成
>>> transaction = arweave.Transaction(wallet, quantity=0.001, to='*************************************')
署名
>>> transaction.sign()
送金
>>> transaction.send()
'*************************************************************'
しばらく待つと、送金が完了した。
>>> wallet.balance
0.12787
>>> wallet.balance
0.125379190817
0.001 送ったので、ガス代は
0.12787 - 0.001 - 0.125379190817 = 0.001490809
という計算になる。ガス代のほうが高かった。
トランザクションIDの確認
>>> transaction.id
'*************************************'
トランザクションステータスの確認
>>> transaction.get_status()
{'block_height': 9******, 'block_indep_hash': '******************************************************************', 'number_of_confirmations': 8}
ちなみにトランザクションは以下で確認できる。
プロフィール画像のアップロード
画像ファイルの読み込み
>>> f = open('syucchin.png','rb')
>>> img = f.read()
トランザクションの生成と実行
>>> transaction = arweave.Transaction(wallet, data=img)
>>> transaction.add_tag("Content-Type", "image/png")
>>> transaction.sign()
>>> transaction.send()
'****************************************************'
ステータスとIDの確認
>>> transaction.get_status()
Pending
'PENDING'
>>> transaction.get_status()
{'block_height': *******, 'block_indep_hash': '*************************************************************************************1', 'number_of_confirmations': 1}
>>> transaction.id
'**************************************************'
>>>
ブラウザによる画像ファイルの確認
https://www.arweave.net/transaction_id
?ext=png
これでプロフィール画像が永久保存された!ちょっとはずかしい!
ちなみに、ファイルサイズが 315.26 KB に対してストレージ費用が 0.00014305 AR ということで、とても安い。
arweaveの基本操作はとりあえずこれでOKとして、次回は最近気になる Storaged-based Consensus Paradigm (SCP) について書いてみたい。
Discussion