👏

ArweaveへのアップロードをCLIで行う(Bundlr版)

2022/12/21に公開

前回ArweaveへのアップロードにArDriveとそのCLIを使いましたが、大量ファイルを扱う際の使い心地がいまいちだったため、代わりのものを探して今回はBundlrを使ってみました。

https://zenn.dev/crypto_inuuu/articles/c16a0395239938

結論的には現時点ではArDrive CLIよりBundlrのCLIの方が安定感があり使いやすいです。
※ArweaveのWalletを既に保持している前提の記事になります。

Bundlrとは

Bundlr makes web3 data storage on Arweave accessible by making it as fast, easy, and reliable as traditional data storage. Arweave is the only truly decentralized, permanent data storage solution. Bundlr increases the amount of transactions conducted on Arweave by 4000% without sacrificing security or usability, and is around ~3000x faster at uploading data.

https://docs.bundlr.network/docs/client/cli

Bundlr currently accounts for over 90% of data uploaded to Arweave. と記載もあったりArweaveを扱う際の定番のツールのようです。また、CLIだけでなくJS Clientも提供されているため、アプリケーション上にもArweaveを組み込むことが可能です。

正直ドキュメントがシンプルでわかりやすいので特段使い方は書くことがないのですが、各コマンドを実行した際の結果等を共有していきたいと思います。

インストール方法

npmでサクッとインストールが可能

npm install -g @bundlr-network/client

コマンド一覧

シンプルです。
利用する際にはまずfundでデポジットした上でデポジットしたトークンを用いてArweaveにファイルをアップロードします。

Commands:
  balance <address>            Gets the specified user's balance for the current Bundlr node
  withdraw <amount>            Sends a fund withdrawal request
  upload <file>                Uploads a specified file
  upload-dir <folder>          Uploads a folder (with a manifest)
  fund <amount>                Funds your account with the specified amount of atomic units
  price <bytes>                Check how much of a specific currency is required for an upload of <amount> bytes
  help [command]               display help for command

Check Balance

Bundlrにデポジットされているトークンを確認するコマンドになります。
そのため、対象のアドレスにARを入れていても後に紹介するFundコマンでBundlrにARをデポジットしていない場合はバランスが0で表示されます。

bundlr balance LSU\_\_TS7kRPLZYg_UiMgjqWW5BtljyHE7JglXqu264o -h https://node1.bundlr.network -c arweave

また、ここで少し引っかかったのですが、アドレスに__が2つ連続で繋がっている場合(??)はそれぞれエスケープする必要があるようです。これに気づかずにFundしても全然デポジットが増えないという謎事象に結構頭を悩ませました。

×:LSU__TS7kRPLZYg_UiMgjqWW5BtljyHE7JglXqu264o
○:LSU\_\_TS7kRPLZYg_UiMgjqWW5BtljyHE7JglXqu264o

Fund to Bundlr

Bundlrを使うためにはまずARをデポジットする必要があります。
後ほども説明しますが、実際にファイルやフォルダをアップロードするときは必要なAR数を確認した上で必要な分だけこのコマンドでアップロードをするのが良いです。

$ bundlr fund 1479016 -h https://node1.bundlr.network -w wallet.json -c arweave
Loaded address: LSU__TS7kRPLZYg_UiMgjqWW5BtljyHE7JglXqu264o
? Confirmation: send 1479016 winston (0.000001479016 arweave) to node1.bundlr.network (ZE0N-8P9gXkhtK-07PQu9d8me5tGDxa_i4Mee5RzVYg)?
 Y / N Y
Funding receipt: 
Amount: 1479016 with Fee: "469944" to ZE0N-8P9gXkhtK-07PQu9d8me5tGDxa_i4Mee5RzVYg 
Transaction ID: pwVWy-5_FkJ2s1hkYbt_e_hOsOTx4CfX__g1yI_WwHo 

Upload file

Fundが成功すると最初に紹介したBalanceコマンドでデポジットしたトークンが確認可能になります。
デポジットができていることを確認したら今度はファイルをアップロードします。

ファイルのアップロードとフォルダのアップロードでコマンドが分かれています。

$ bundlr upload reveal.json -h https://node1.bundlr.network -w wallet.json -c arweave

Loaded address: LSU__TS7kRPLZYg_UiMgjqWW5BtljyHE7JglXqu264o
Uploaded to https://arweave.net/oEvOdcPt7ylxlWta9Dr8_W3Ni3947YJDAz-xdJotrno

ファイル容量で必要なARが変わってくるため、ファイル単体でアップロードする場合は事前にファイル容量とその容量に必要なARを確認しておくと良いです。

ファイル容量の確認(Macの場合)

lsコマンドで確認します。

$ ls -l
total 7120
-rw-r--r--@ 1 hoge staff 3636764 12 11 20:33 friends.gif
-rw-r--r--@ 1 hoge staff 235 12 11 20:38 reveal.json
-rw-r--r-- 1 hoge staff 3153 11 23 22:27 wallet.json

ファイルサイズに対する必要な AR を確認

先ほどのfriends.gifをアップロードする場合に必要なARを確認

$ bundlr price 3636764 -h https://node1.bundlr.network -c arweave
Price for 3636764 bytes in arweave is 876041895 winston (0.000876041895 arweave)

876041895 winston (0.000876041895 arweave)が必要と表示されているので先ほどのFundのコマンドでこの量+ガス代をデポジットしておく必要があります。

デポジットしたトークンは取り出すことも可能なのでガス代考慮で少し多めにデポジットして送っと良いです。

Upload Folder

ファイル単体でアップロードする時は事前に個別でファイルサイズと必要なトークン量の確認が必要でしたが、Bundlrでフォルダをアップロードする場合は必要なトークン量を計算して提示してくれます。

今回は709枚の画像ファイルをアップロードしており、コストは0.0927ARになります。
ファイルのチェックがまず走り、データサイズを算出、コストを提示してくれます。

$ bundlr upload-dir ./images -c arweave -h https://node1.bundlr.network -w ../wallet.json
Loaded address: LSU\_\_TS7kRPLZYg_UiMgjqWW5BtljyHE7JglXqu264o
Checked 5 files...
Checked 10 files...
Checked 15 files...
...
Checked 695 files...
Checked 700 files...
Checked 705 files...
? Authorize upload?
Total amount of data: 282040865 bytes over 709 files - cost: 92751308941 winston (0.092751308941 arweave)
Y / N 

コストが問題なければYを入力することで実際のアップロード処理をそのまま実行してくれます。
そしてBundlrの便利なところがフォルダアップロードをする場合、manifestの作成まで自動でおこなってくれる点です。

基本フォルダ階層のパスでファイルにアクセスしたいと思うのでそのためにはmanifestファイルは必須になります。ArDrive CLIの場合は手動でコマンドを実行してmanifestファイルを作成していましたが、Bundlrはその一手間を省くことができます。

Total amount of data: 282040865 bytes over 709 files - cost: 92751308941 winston (0.092751308941 arweave)
Y / N Y
Processed 0 Items
Processed 5 Items
Processed 10 Items
...
Processed 695 Items
Processed 700 Items
Processed 705 Items
Finished processing 709 Items
Generating JSON manifest...
Uploading JSON manifest...
Done!
Uploaded to https://arweave.net/z20xxxxxwbapjdwb8

Bundlrを使ってみて(ArDriveとの比較)

前回ArDrive CLIを使いましたが、それと比較すると個人的にはBundlrの方が好みです。
最初はFund周りで多少つまづきましたが、Fundに15分程度時間がかかること、アドレスのエスケープ処理が必要なことを理解してからは特段問題には遭遇していません。

ただし、ArDriveと違ってGUI上でのファイル一覧の確認やフォルダ構造などの作成はできないためそういった使い方をしたい方にはArDriveの方があっている場合もあると思います。

自分のように基本ファイルをアップロードしたいだけであればBundlrをお勧めします。

Discussion