Solana CLIで作成したウォレットアドレスをPhantomにインポート

Solana CLIで作成したDevnet用のウォレットアドレスをPhantom Walletにインポートする方法が載っていなくてハマったため、そのときのメモ。

環境

  • Mac Big Sur 11.6
  • solana-cli 1.8.0
  • Microsoft Edge 95.0.1020.44
  • Edge拡張機能 Phantom 0.12.0.1

やりたいこと

Solana CLIで作成したウォレットアドレス($ solana address)をPhantomにインポートして、Phantom上でトランザクションが閲覧できようにしたい。

ポイント

PhantomのPrivate KeyはBASE58だが、SolanaのPrivate KeyはKeypairというUINT8(英数字だけ)になっている。そのため、データ型をあわせる必要がある。

全体的な流れとしては、PhantomのPrivate Key(BASE58)をコピーして、BASE58→UINT8に変換したあと、SoalanaのKeypair(UINT8)にペーストするだけ。

対応方法

STEP1. PhantomのPrivate Key取得

Phantomで取り込みたいウォレットアドレスのPirvate Keyをコピーする。

STEP2. データ型を変換

【注意】便利なサイトがあったが、2022/2/8時点で利用できなくなったため、エンコード・デコードのプログラムを以下に設置しました。ちょっと手間になりますが、値を書き換えてnodeで実行すれば変換できます。

base58UsingBs58.ts

備忘録用

以下はサイトが復活したときのために念のため残しておきます。
(いまは使えなくなっているため、基本的に上記のGitHubソースコードをお使いください)

以下のサイトで変換ができる。非常に使いやすいUI。
N⦾n-fungible Matrix

Private Keyを入力フォームにペーストしてDECODEする。

UINT8が表示されるためコピーする。

STEP3. Solana Keypairに入力

Keypair Pathの場所を表示する。

$ solana config get
Config File: /Users/user/.config/solana/cli/config.yml
RPC URL: http://localhost:8899
WebSocket URL: ws://localhost:8900/ (computed)
Keypair Path: /Users/user/.config/solana/id.json
Commitment: confirmed

viでファイルを開いて、変換済みUINT8のデータに差し替える。

$ vi /Users/user/.config/solana/id.json

最後にウォレットアドレスを表示して、Phantomのアドレスと一致しているか確認。

$ solana address
HXtBm8XZbxaTt41uqaKhwUAa6Z1aPyvJdsZVENiWsetg

メモ

逆のやり方(Soalana CLIのウォレットアドレスをPhantomにインポート)は試していなが、keypairを UINT8→BASE58に変換してから、Phantom上でPirvate Keyをインポートすればいけそう。変換ツールが見つからず検証できず。

PhantomでLocalnetに切り替えると残高表示できない課題

Solanaでローカルのテスト用ブロックチェーンサーバーを起動してから、Phantomにアクセスすると、ローディング中のまま残高表示できない。

$ solana-test-validator

原因はわからなかったが、PhantomでChange NetworkをDevnetに切り替えてから、すぐにLocalnetに再度切り替えると、残高表示できる。この状態であれば、Phantom上で送金も可能。
(操作イメージは以下の再生ボタンで確認できます)

ただし、取引履歴は表示されるときと、されないときがある。動作が不安定なため、LocalnetはSolana CLIでの利用がおすすめ。なお、DevnetとTestnetはPhantom上でも正常に動作するため、Localnetだけ気をつける必要あり。

参考