これでアップロードは完璧!

前回まで

ipfs add後にipfs dht findprovsしても他のピアが保持してくれたのか、よくわからなかった。

情報源

pinata

登録

  1. pinata登録する
    • パスワード作成に苦労した
    • パスワード生成ツールの最強で合格するまで繰り返した
    • メアドに送られたコードをコピペすることで完了

パスワードにて、大文字、小文字、数字、特殊文字(記号)が1字以上含まれているのにエラーになった。特殊文字がどの文字なのかわからないので、そのせいかもしれない。そんなに文句をいうなら問題ないパスワードを自動生成してほしいと思った。

APIキー作成

  1. ログイン画面にて右上のアイコンをクリックする
  2. API Keysをクリックする
  3. New Keyをクリックする
  4. Adminをクリックして全機能を有効化する
  5. Key Nameに適当な名前を入れる:pinate_0
  6. Create Keyをクリックする
  7. API Key, API Secret, JWTが出力される
    1. Copy Allする
    2. 適当にファイル保存しておく
  8. Doneをクリックする

pinataをリモートサービスとして登録する

ipfs pin remote service add <<nickname>> <<endpoint URL>> <<myAccessKey>>

ドキュメントにエンドポイントや登録方法が書いてある。

ipfs pin remote service add pinata https://api.pinata.cloud/psa YOUR_JWT

各引数を変数にいれると以下。

NAME='pinata'
URL='https://api.pinata.cloud/psa'
JWT='APIキー作成時に出力されたJWT'
ipfs pin remote service add "$NAME" "$URL" "$JWT"

登録済みサービスを一覧する。

ipfs pin remote service ls
pinata https://api.pinata.cloud/psa

表示された。OK!

あとでサービス名pinataを使う。

アバター画像をほかのピアにもたせる

私のローカルにしかない私のアバター画像をIPFSのピアに持ってもらいたい。

ipfs init
generating ED25519 keypair...done
peer identity: 12D3KooWHMfGodTKWVQczi7WyJFECEA7SCcT4ByQ5FLqpm29R5TS
initializing IPFS node at /home/pi/.ipfs
Error: ipfs configuration file already exists!
Reinitializing would overwrite your keys.
ipfs add /tmp/ytyaru.png
added QmWqaEjFYBYnQMR4wBwmv5C1m6R2sZULSTPq7AxQeLmzZm ytyaru.png
 2.25 KiB / 2.25 KiB [========================================================================================================] 100.00%

これで画像のハッシュQmWqaEjFYBYnQMR4wBwmv5C1m6R2sZULSTPq7AxQeLmzZmが得られた。

ピンニングする

まずは以下コマンドでオンラインにする。

ipfs daemon

別タブでピンニングするコマンドを叩く。

まずはコマンドを調べる。以下コマンドを使う。

ipfs pin remote add
ヘルプ
$ ipfs pin remote add --help
USAGE
  ipfs pin remote add <ipfs-path> - Pin object to remote pinning service.

SYNOPSIS
  ipfs pin remote add [--service=<service>] [--name=<name>] [--background] [--] <ipfs-path>

ARGUMENTS

  <ipfs-path> - Path to object(s) to be pinned.

OPTIONS

  --service     string - Name of the remote pinning service to use (mandatory).
  --name        string - An optional name for the pin.
  --background  bool   - Add to the queue on the remote service and return immediately (does not wait for pinned status). Default:
                         false.

DESCRIPTION

  Asks remote pinning service to pin an IPFS object from a given path or a CID.
  
  To pin CID 'bafkqaaa' to service named 'mysrv' under a pin named 'mypin':
  
    $ ipfs pin remote add --service=mysrv --name=mypin bafkqaaa
  
  The above command will block until remote service returns 'pinned' status,
  which may take time depending on the size and available providers of the pinned
  data.
  
  If you prefer to not wait for pinning confirmation and return immediately
  after remote service confirms 'queued' status, add the '--background' flag:
  
    $ ipfs pin remote add --service=mysrv --name=mypin --background bafkqaaa
  
  Status of background pin requests can be inspected with the 'ls' command.
  
  To list all pins for the CID across all statuses:
  
    $ ipfs pin remote ls --service=mysrv --cid=bafkqaaa --status=queued \
        --status=pinning --status=pinned --status=failed
  
  NOTE: a comma-separated notation is supported in CLI for convenience:
  
    $ ipfs pin remote ls --service=mysrv --cid=bafkqaaa --status=queued,pinning,pinned,failed

以下のような感じで値をセットする。

ipfs pin remote add --service=使用サービス名 --name=データ名 データのハッシュ

使用サービス名は登録したpinataを使う。データ名はそのデータにわかりやすい名前をつけたいときに。ハッシュはipfs addしたときのハッシュ値。

SERV=pinata
NAME=avatar.png
HASH=QmWqaEjFYBYnQMR4wBwmv5C1m6R2sZULSTPq7AxQeLmzZm
ipfs pin remote add --service="$SERV" --name="$NAME" "$HASH"
ipfs pin remote add --service=pinata --name=blogs QmPMYeLBc3wX4LnJ2ZpMBL7izoqhZq9MbXhpU164Wg1gwz

以下のように出力されたら成功。

CID:    QmWqaEjFYBYnQMR4wBwmv5C1m6R2sZULSTPq7AxQeLmzZm
Name:   avatar.png
Status: pinned

もし以下のような警告が出たらオフラインである証拠。ずっと待機状態になってしまう。ipfs daemonでオンラインにしてから再度ipfs pin remote add ...すること。

WARNING: the local node is offline and remote pinning may fail if there is no other provider for this CID

アップロード確認

ipfs pin remote ls --service=pinata
QmWqaEjFYBYnQMR4wBwmv5C1m6R2sZULSTPq7AxQeLmzZm	pinned	avatar.png

上記のように登録した内容が出力されたらOK。

ついでに他の方法でも確認してみる。

ブラウザにIPFS Companionをインストールしておりipfs daemon中なら、ブラウザに以下URLを入力することでアクセスできる。今回登録した私のアバター画像が表示されるはず。

ipfs://QmWqaEjFYBYnQMR4wBwmv5C1m6R2sZULSTPq7AxQeLmzZm

または以下でもいい。

https://ipfs.io/ipfs/QmWqaEjFYBYnQMR4wBwmv5C1m6R2sZULSTPq7AxQeLmzZm

無事に画像が表示された。がURLがhttp://(長い文字列).ipfs.localhost:8080となっていてローカルっぽい。

以下のコマンドではひとつのピアしか表示されなかった。

$ ipfs dht findprovs QmWqaEjFYBYnQMR4wBwmv5C1m6R2sZULSTPq7AxQeLmzZm
12D3KooWRgEQzCt1LKMiqo8nqRuyXVPH6cCiZCDK3zjUMu5N2e6Q

まあたぶんipfs pin remote lsで表示されているからアップロードされたのだろう。

pinataのログイン後のFiles一覧にそれっぽいのが表示されているし。目玉アイコンで画像を表示できたし。アップロードできてるね。OK!

20220804091014_020.png