BioErrorLog Tech Blog

試行錯誤の記録

dfxで任意のディレクトリ配下にidentityを生成する | Dfinity, Internet Computer

結論: HOMEを指定してdfx identity new またはdfx identity get-principalを実行します。

はじめに

こんにちは、@bioerrorlogです。

dfx (dfinity sdk)を使うと、identityを生成することが出来ます。

一番シンプルなやり方は単にidentity newコマンドを使うことでしょう。

dfx identity new alice
# Creating identity: "alice".
# Created identity: "alice".

## identity: aliceが作成されたことを確認
dfx identity list
# alice
# anonymous
# default *

## identity: alice用のprivate keyはホームディレクトリ配下に生成される
ls ~/.config/dfx/identity/alice/
# identity.pem

しかしこのやり方だと、ホームディレクトリ配下~/.config/dfx/identity/に変更が入ってしまいます。 一時的なテスト用途のダミーidentityを生成するだけなら、できれば任意のディレクトリにprivate keyを生成したいものです。

今回は、dfxを使って任意のディレクトリ配下にidentityを生成するやり方をメモします。

任意のディレクトリ配下にidentityを生成する

やり方

環境変数HOMEを指定してidentity newを実行することで、指定のディレクトリ配下にidentityを作成することが出来ます。 (冷静に考えれば当然かもですが。。)

mkdir alice
HOME=alice dfx identity new alice
# Creating identity: "alice".
# Creating the "default" identity.
#   - generating new key at alice/.config/dfx/identity/default/identity.pem
# Created the "default" identity.
# Created identity: "alice".

## 指定ディレクトリにdefault identityが生成されたことを確認
HOME=alice dfx identity list
# alice
# anonymous
# default *
ls alice/.config/dfx/identity/alice/
# identity.pem

## HOMEを指定しなければ元のホームディレクトリ配下のidentityが参照される
dfx identity list
# anonymous
# bob
# default *

これで、雑にディレクトリを切ってそこにテスト用のidentityを作成することが出来ます。

補足: dfx identity get-principalを使ったやり方

dfx identity get-principalを実行した場合でも、HOME指定のディレクトリに既存のidentityが存在しない場合はprivate keyが生成/default identityが作成されます。

mkdir alice
HOME=alice dfx identity get-principal
# Creating the "default" identity.
#   - generating new key at alice/.config/dfx/identity/default/identity.pem
# Created the "default" identity.
# tly4z-2hi4s-n3und-lovjl-3kn62-ofqjp-akobz-uuwfa-pjvea-boajs-oqe

## 指定ディレクトリにdefault identityが生成されたことを確認
HOME=alice dfx identity list
# anonymous
# default *
ls alice/.config/dfx/identity/default/
# identity.pem

## HOMEを指定しなければ元のホームディレクトリ配下のidentityが参照される
dfx identity list
# anonymous
# bob
# default *

活用事例

こうした任意ディレクトリ配下でのidentityは、shellスクリプトでcanister callのテストを書くときに活用できそうです。

複数のidenittyを切り替えながらcanister callのシナリオをテストしたいとき、上記のようなやり方で一時的なダミーidentityを複数生成し、HOMEを切り替えることでidentityをスイッチすることが出来ます。

Rocklabsの下記コードが事例として参考になります。 github.com

おわりに

今回は、dfxで任意のディレクトリ配下にidentityを生成する方法をメモしました。

先述のRocklabsのコードを眺めていて、なるほどshellでidentitiy切り替える時はこういう戦法があるのかーと思って備忘がてらに書きました。

ic-replなどツールでは大抵ランダムidentityの生成機能が提供されていますが、素のshellでパッと書きたいときの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

DFusion/test.sh at main · rocklabs-io/DFusion · GitHub