本篇文章はあなたが以下のことを前提としています:
- solana の基本知識を持っている
- Anchor プログラミングの基本的な経験がある
- solana 関連のコマンドラインツールをインストール済み
- ledger ハードウェアウォレットを持っている
-
ledger の Wallet ID を確認する
- 複数の ledger を同じコンピュータに接続している場合、Wallet ID を使用して使用する ledger ウォレットを指定できます
- コンピュータ上で単一の ledger を使用する予定の場合は、Wallet ID を含める必要はありません
solana-keygen pubkey usb://ledger
-
SOL ウォレットアドレスを確認する
- SOL ウォレットのコマンドライン:
# 1つ目のアドレスを確認 solana-keygen pubkey usb://ledger?key=0/0 # 2つ目のアドレスを確認 solana-keygen pubkey usb://ledger?key=1/0 # 3つ目のアドレスを確認 solana-keygen pubkey usb://ledger?key=2/0
- コマンドラインでは keypair URL を指定する必要があり、形式は
usb://ledger?key=<DERIVATION_PATH>
です- 複数の ledger がある場合、WALLET_ID を指定する必要があり、その場合は
usb://ledger/<WALLET_ID>?key=<DERIVATION_PATH>
となります
- 複数の ledger がある場合、WALLET_ID を指定する必要があり、その場合は
DERIVATION_PATH
は phantom ウォレットと一致させるためにx/0
を使用し、これにより ledger が phantom ウォレットに接続したときにコマンドラインと同じアドレスが表示されます- Keypair URL パラメータはZSHで無視されるため、
~/.zshrc
を修正し、unsetopt nomatch
を追加する必要があります
-
複数の ledger がある場合、keypair URL を使用して WALLET_ID を逆引きできます。例えば:
solana resolve-signer usb://ledger?key=1/0 # DwWogDGHNM5wNxcwjkroMeK83NTLpZ7ZtEbtCSrxMKNZがあなたのWALLET_IDです usb://ledger/DwWogDGHNM5wNxcwjkroMeK83NTLpZ7ZtEbtCSrxMKNZ?key=1'/0'
-
sol ネットワークを設定する
- ここではlocalhostを設定していますが、実際の使用状況に応じて devnet や mainnet-beta を設定することもできます
- まず、ローカルで test validator を起動して localhost ネットワークを作成します
pkill solana-test-validator rm -rf test-ledger/ solana-test-validator
- sol ネットワークとデフォルトウォレットを設定します
# networkはmainnet-beta、testnet、devnet、localhostのいずれかです export network=localhost solana config set --url $network # 私のローカルの~/.config/solana/id.jsonをデフォルトのウォレットとして設定します。後でこのウォレットを使用します solana config set --keypair ~/.config/solana/id.json solana config get
-
通常の keypair ホットウォレットを使用して、buffer アカウントを作成します
- なぜ最初に通常の keypair ホットウォレットを使用するのかというと、
- solana コントラクトをデプロイするには、プログラムのバイトコードをチェーンに上げる必要があり、各取引の最大サイズは 1K で、通常は 500 回以上の取引を行う必要があります。その結果、次のようなことが起こる可能性があります:
- ledger ウォレットは耐えられず、数百回から千回連続で押すことはほぼ不可能です
- ledger ウォレットはこの方法でコントラクトをデプロイすることをサポートしていません
- コンソールは buffer アカウントアドレス BUFFER_ADDRESS を出力します
solana program write-buffer target/deploy/curve_launchpad.so \ --keypair ~/.config/solana/id.json Buffer: 3qMNULQwNWQPKKT29WPmjnfSbcpXCFSoYwZg5yLCbwty # bufferアカウントを削除してsolを取り戻したい場合 solana program close -k ~/.config/solana/id.json --buffers
- なぜ最初に通常の keypair ホットウォレットを使用するのかというと、
-
buffer authority を ledger ウォレットに移転します
- コマンドラインを実行します
solana program set-buffer-authority <BUFFER_ADDRESS> \ --new-buffer-authority <LEDGER_PUBKEY> 例えばledgerウォレットアドレスがLdJx7GAVbb9JhaPMvLEDEZb3Fjk16Bv5R4f8qzMUQeGの場合、コマンドラインは次のようになります: solana program set-buffer-authority 3qMNULQwNWQPKKT29WPmjnfSbcpXCFSoYwZg5yLCbwty \ --new-buffer-authority LdJx7GAVbb9JhaPMvLEDEZb3Fjk16Bv5R4f8qzMUQeG Account Type: Buffer Authority: LdJx7GAVbb9JhaPMvLEDEZb3Fjk16Bv5R4f8qzMUQeG
-
次に、ledger を使用して solana プログラムをデプロイできます
- ledger ウォレットを使用してコントラクトをデプロイし、buffer アカウント内のバイトコードを使用します
_ usb://ledger?key=0/0 に対応するアドレスは LdJx7GAVbb9JhaPMvLEDEZb3Fjk16Bv5R4f8qzMUQeG であり、これを solana プログラムの upgrade 権限として設定します
solana program deploy \ --program-id target/deploy/curve_launchpad-keypair.json \ --buffer 3qMNULQwNWQPKKT29WPmjnfSbcpXCFSoYwZg5yLCbwty \ --upgrade-authority usb://ledger?key=0/0 Program Id: AAR4w5eyv8JXrDvmB1EJE9QmxP24KaPyRUiZU5M8pAeZ Signature: ua19eg9EQFcgTKVn5ZHjL1JB3s4mPYYUC7f4At6bnoXSrTKqm3RZABj3JbcwtsjUYEFTrS6bCGet6SUr2PaCyyk
- プログラムの状態を確認します
solana program show AAR4w5eyv8JXrDvmB1EJE9QmxP24KaPyRUiZU5M8pAeZ Program Id: AAR4w5eyv8JXrDvmB1EJE9QmxP24KaPyRUiZU5M8pAeZ Owner: BPFLoaderUpgradeab1e11111111111111111111111 ProgramData Address: 8nH1bnwoqbuipTWaX25pg6tDWfvDoFs1yErFTCFR39SB Authority: LdJx7GAVbb9JhaPMvLEDEZb3Fjk16Bv5R4f8qzMUQeG # upgrade権限 Last Deployed In Slot: 937 Data Length: 506936 (0x7bc38) bytes Balance: 3.52947864 SOL
- ledger ウォレットを使用してコントラクトをデプロイし、buffer アカウント内のバイトコードを使用します
-
コントラクトがすでにデプロイされている場合、ledger を使用して solana プログラムをアップグレードできます
- まず、通常の keypair ウォレットの buffer アカウントを使用します
solana program write-buffer target/deploy/curve_launchpad.so \ --keypair ~/.config/solana/id.json Buffer: 9suJnc9cY7ZFiNPe39me1wsNqxsM9HnrokouNTnqWVV
- 次に、buffer authority を ledger ウォレットに移転します
solana program set-buffer-authority <BUFFER_ADDRESS> \ --new-buffer-authority <LEDGER_PUBKEY> 例えば solana program set-buffer-authority 9suJnc9cY7ZFiNPe39me1wsNqxsM9HnrokouNTnqWVV \ --new-buffer-authority LdJx7GAVbb9JhaPMvLEDEZb3Fjk16Bv5R4f8qzMUQeG Account Type: Buffer Authority: LdJx7GAVbb9JhaPMvLEDEZb3Fjk16Bv5R4f8qzMUQeG
- ledger ウォレットを使用してプログラムをアップグレードします。ここで <PROGRAM_ADDRESS> はアップグレードする Program Id を指定し、ここでは AAR4w5eyv8JXrDvmB1EJE9QmxP24KaPyRUiZU5M8pAeZ です
solana program deploy --program-id <PROGRAM_ADDRESS> \ --buffer <BUFFER_ADDRESS> \ --upgrade-authority <LEDGER_PUBKEY> 例えば solana program deploy \ --program-id AAR4w5eyv8JXrDvmB1EJE9QmxP24KaPyRUiZU5M8pAeZ \ --buffer 9suJnc9cY7ZFiNPe39me1wsNqxsM9HnrokouNTnqWVV \ --upgrade-authority usb://ledger?key=0/0 Program Id: AAR4w5eyv8JXrDvmB1EJE9QmxP24KaPyRUiZU5M8pAeZ Signature: 2zgdmJGwHwEogZArPnL9zju6LtJqXpCgTHtMw78aUmXEmgJEgi5tdFQPFNSNzoVk7cqLxVWBthoSQa1dZRqMzUvQ
- プログラムの状態を確認します
solana program show AAR4w5eyv8JXrDvmB1EJE9QmxP24KaPyRUiZU5M8pAeZ Program Id: AAR4w5eyv8JXrDvmB1EJE9QmxP24KaPyRUiZU5M8pAeZ Owner: BPFLoaderUpgradeab1e11111111111111111111111 ProgramData Address: 8nH1bnwoqbuipTWaX25pg6tDWfvDoFs1yErFTCFR39SB Authority: LdJx7GAVbb9JhaPMvLEDEZb3Fjk16Bv5R4f8qzMUQeG # upgrade権限 Last Deployed In Slot: 1474 Data Length: 506936 (0x7bc38) bytes Balance: 3.52947864 SOL
参考: