Albert

Albert

twitter

ledgerを使用してSolana契約をデプロイおよびアップグレードする

本篇文章はあなたが以下のことを前提としています:

  • solana の基本知識を持っている
  • Anchor プログラミングの基本的な経験がある
  • solana 関連のコマンドラインツールをインストール済み
  • ledger ハードウェアウォレットを持っている
  1. ledger の Wallet ID を確認する

    • 複数の ledger を同じコンピュータに接続している場合、Wallet ID を使用して使用する ledger ウォレットを指定できます
    • コンピュータ上で単一の ledger を使用する予定の場合は、Wallet ID を含める必要はありません
    solana-keygen pubkey usb://ledger
    
  2. 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> です
      1. 複数の ledger がある場合、WALLET_ID を指定する必要があり、その場合は usb://ledger/<WALLET_ID>?key=<DERIVATION_PATH> となります
    • DERIVATION_PATH は phantom ウォレットと一致させるために x/0 を使用し、これにより ledger が phantom ウォレットに接続したときにコマンドラインと同じアドレスが表示されます
    • Keypair URL パラメータはZSHで無視されるため、~/.zshrcを修正し、unsetopt nomatchを追加する必要があります
  3. 複数の ledger がある場合、keypair URL を使用して WALLET_ID を逆引きできます。例えば:

    solana resolve-signer usb://ledger?key=1/0
    
    # DwWogDGHNM5wNxcwjkroMeK83NTLpZ7ZtEbtCSrxMKNZがあなたのWALLET_IDです
    usb://ledger/DwWogDGHNM5wNxcwjkroMeK83NTLpZ7ZtEbtCSrxMKNZ?key=1'/0'
    
  4. 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
    
  5. 通常の keypair ホットウォレットを使用して、buffer アカウントを作成します

    • なぜ最初に通常の keypair ホットウォレットを使用するのかというと、
      1. solana コントラクトをデプロイするには、プログラムのバイトコードをチェーンに上げる必要があり、各取引の最大サイズは 1K で、通常は 500 回以上の取引を行う必要があります。その結果、次のようなことが起こる可能性があります:
      2. ledger ウォレットは耐えられず、数百回から千回連続で押すことはほぼ不可能です
      3. 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
    
    
  6. 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
    
  7. 次に、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
    
  8. コントラクトがすでにデプロイされている場合、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
    

参考:

  1. CLI を使用して Solana プログラムをデプロイする
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。