🐟

Arweave(アーウィーブ)にプロフィール画像を永久保存する!

2022/06/22に公開

Arweaveをはじめて知る

最近、Arweave(アーウィーブ)というのを知った。要は分散ストレージで、IPFSみたいなものである。違いとしては、IPFSはデータがずっと保存される保証はないが、Arweaveは200年ぐらい、つまりほぼ永久にデータを保存してくれるらしい。

使い方はわりと単純で、最初に永久保存する分の費用を払うだけである。えー、それじゃあ費用が高額になるのでは、と思うが、ストレージ費用は年々下がっていくため、先のことはあまり気にしなくていいらしい。実際そんなに高くもない、というより思ったよりだいぶ安い。

具体的には、以下のサイトで費用を確認できる。

https://arweavefees.com/

これによると、例えば1GBあたりの費用は現時点で0.3AR。つまり今のレートでいうと3ドルぐらいである。最初に3ドル払うだけで、1GBのデータを永久に保存してくれるのだ。データサイズが1MBとかであれば、たった0.4円である。そう考えると安い。

もちろん、本当にこれで200年間保存されるのかは、タイムマシンでもない限りわからないが、ArweaveはSolanaやAvalancheなどのストレージとして使用されているので、ある程度の信頼感はある。

Faucetで$ARを手に入れようとして、失敗する

Arweaveのガバナンストークンは$ARであるが、少額(0.02AR)であれば、以下のサイトからただで入手することが可能だ。

https://faucet.arweave.net/

ただし自分の場合、申請がBot判定されて、手に入れることができなかった。Bot判定された理由はよくわからないが、自分が使っているデスクトップPCのOSが Linuxだからかもしれない。通常BotはLinuxで動かすことが多く、LinuxのUAが弾かれている可能性があるのだ。

Botと誤判定された場合にはメールすればいいらしい。ただし、送金されるまでには何日かかかるので、急ぎであれば自分で買った方が早い。

PythonでArweaveを扱う

arweave-python-client

「すべての道はPythonに通ず」という言葉があるが、ArweaveもPythonモジュールとして arweave-python-client というパッケージがある。

https://github.com/MikeHibbert/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}

ちなみにトランザクションは以下で確認できる。

https://viewblock.io/arweave

プロフィール画像のアップロード

画像ファイルの読み込み

>>> 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