概要
loader-v3経由でデプロイされたプログラムは、アップグレード権限が設定されている場合にアップグレード可能です。権限を取り消すと、プログラムは不変になります。アップグレードメカニズム、loader-v3のデプロイとアップグレードinstructions、ビルド検証、利用可能なローダープログラムについて説明します。
プログラムのデプロイ
ネイティブRust
solana program deployを使用してSolana CLIでデプロイします。
Anchor
anchor deployを使用してAnchorフレームワークでデプロイします。
プログラムのアップグレード
プログラムをアップグレードするには、アカウントがアップグレード権限を保持している必要があります(通常は、最初にプログラムをデプロイしたアカウント)。デプロイまたはアップグレード時に、新しいバイトコードが一時的なバッファアカウントにアップロードされ、その後programdata
accountに書き込まれます。アップグレード権限を None
に設定すると、プログラムは不変になり、今後の更新が永久に防止されます。
アップグレードメカニズム
UpgradeableLoaderInstruction::Upgradeが処理されると、ランタイムは以下を実行します:
- program accountが書き込み可能で、loader-v3によって所有されていることを検証します。
- bufferアカウントに正しい権限を持つ
Buffer状態が含まれていることを検証します。 - programdata accountの
upgrade_authority_addressが一致し、Noneでないことを検証します。 - プログラムが現在のslotで既にデプロイされていないことを検証します(
clock.slot != slot)。 - バッファから新しいELFバイトをロードして検証します。
- バッファから新しいバイトコードをprogramdata accountにコピーし、残りのバイトをゼロにします。
- programdata accountにレント免除のための資金を供給します。
- バッファアカウントを空にし(lamportsを0に設定)、そのデータを切り詰めます。
- 新しいバージョンは次のslotで有効になります(
deployment_slot + 1)。
Programアカウント自体(その状態とprogramdata_addressポインタ)は、アップグレード中に変更されません。
ProgramData アカウントのバイトコードとslotメタデータのみが更新されます。
Loader-v3命令リファレンス
Loader-v3(BPF Loader Upgradeable)は、Solana上でプログラムをデプロイするための現在のデフォルトローダーです。
| Instruction | 説明 |
|---|---|
InitializeBuffer | バッファアカウントの状態を、指定された権限でBufferに設定します。既に初期化されている場合は失敗します。 |
Write | バッファアカウント内の指定されたオフセットにバイトを書き込みます。権限による署名が必要です。 |
DeployWithMaxDataLen | 新しいプログラムを作成します:ProgramDataアドレスを導出し、System ProgramへのCPI経由でProgramDataアカウントを作成し、バッファからELFを検証してデプロイし、Programアカウントの状態を設定して実行可能にマークします。 |
Upgrade | 既存プログラムのProgramDataアカウント内のバイトコードをバッファから置き換えます。 |
SetAuthority | BufferまたはProgramDataアカウントの権限を変更します。ProgramDataでNoneに設定すると、プログラムは不変になります。Buffer権限をNoneに設定することはできません。 |
SetAuthorityChecked | SetAuthorityと同様ですが、新しい権限もトランザクションに署名する必要があります。 |
Close | buffer、未初期化、またはProgramDataアカウントをクローズし、そのlamportを受取人に転送します。ProgramDataをクローズすると、プログラムキャッシュにClosedトゥームストーンも書き込まれます。現在のslotでデプロイされたプログラムはクローズできません。 |
ExtendProgramChecked | ProgramDataアカウントの割り当てを追加バイト分拡張し、支払者から追加のrentを調達します。 |
プログラムの検証
Solanaは検証可能なビルドをサポートしており、ユーザーがプログラムのオンチェーンバイトコードが公開されているソースコードと一致することを確認できます。Anchorフレームワークは、検証可能なビルドの組み込みサポートを提供しています。
デプロイされたプログラムの検証ステータスを確認するには、Solana ExplorerでプログラムIDを検索するか、Ellipsis LabsのSolana Verifiable Build CLIを使用してオンチェーンプログラムを独自に検証してください。
ローダープログラム
| ローダー | アドレス | アップグレード可能 | 説明 |
|---|---|---|---|
| ネイティブローダー | NativeLoader1111111111111111111111111111111 | validatorソフトウェアのアップグレードのみ | ビルトイン(System、Vote、Stake)および他のローダーを所有 |
| BPF ローダー(v1) | BPFLoader1111111111111111111111111111111111 | 不可(ローダー管理が無効) | レガシープログラム |
| BPF ローダー(v2) | BPFLoader2111111111111111111111111111111111 | 不可(ローダー管理が無効) | レガシープログラム |
| BPF ローダー アップグレード可能 | BPFLoaderUpgradeab1e11111111111111111111111 | 可(アップグレード権限が設定されている場合) | 新しくデプロイされたすべてのプログラムを所有 |
Is this page helpful?