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