プログラム

開発者は誰でもプログラムを作成してSolanaブロックチェーンにデプロイできます。 プログラム(他のプロトコルではスマートコントラクトとして知られることが多い)は、 オンチェーンアクティビティの基盤として機能し、DeFi や NFT、ソーシャルメディアやゲームに至るまで、あらゆるものを強化します。

概要

Fact Sheet

  • プログラムは、エンドユーザーからと、他のプログラムからの instructions の両方を処理します。
  • すべてのプログラムはステートレスです。プログラムがやり取りするすべてのデータは、命令を介して渡される個別の accounts に保存されます。
  • プログラム自体は、executableとしてマークされたアカウントに保存されます
  • すべてのプログラムは BPF Loaderopen in new window によって所有され、Solana Runtimeopen in new window によって実行されます。
  • 開発者は、Rust または C++ でプログラムを作成するのが最も一般的ですが、LLVMopen in new window の BPFopen in new window バックエンドを対象とする任意の言語を選択できます。
  • すべてのプログラムには、命令処理が行われる単一のエントリ ポイント (つまり、process_instruction) があります。パラメータには常に以下が含まれます。
    • program_id: pubkey(公開鍵)
    • accounts: array (配列)
    • instruction_data: byte array(バイト配列)

詳細

他のほとんどのブロックチェーンとは異なり、Solanaはコードとデータを完全に分離します。 プログラムがやり取りするすべてのデータは個別のアカウントに保存され、instructionsを介して参照として渡されます。 このモデルは、追加のデプロイを必要とせずに1つの汎用プログラムをさまざまなアカウントで動作させることを可能にします。 このパターンの一般的な例は、Native Programsと SPL(The Solana Program Library)で見られます。

Native Programs & The Solana Program Library (SPL)

Solana には、オンチェーンインタラクションの中核の構成要素として機能する多数のプログラムが搭載されています。 これらのプログラムは、 Native Programsopen in new window と Solana Program Library (SPL) Programsopen in new windowに分けられます。

ネイティブプログラムは、バリデータの操作に必要な基本機能を提供します。 これらのプログラムの中で最もよく知られているのは、新しいアカウントの管理と2者間での SOLの転送を担当する System Programopen in new window です。

SPL プログラムは、トークンの作成、交換、貸付、ステークプールの生成、オンチェーンネームサービスの維持など、多くのオンチェーン アクティビティをサポートします。 SPL Token Programopen in new windowCLI 経由で直接呼び出すことができますが、 Associated Token Account Programopen in new window は通常、カスタム プログラムで構成されています。

プログラミング

プログラムはRustまたはC++で開発されるのが最も一般的ですが、LLVMのBPFバックエンドをターゲットとする任意の言語で開発できます。 Neon Labsopen in new window と Solangopen in new window 最近の取り組みにより、 EVMopen in new windowとの互換性が実現し、開発者がSolidityでプログラムを書けるようになりました。

ほとんどの Rust ベースのプログラムは、次のアーキテクチャに準拠しています。:

ファイル名説明
lib.rsモジュールの登録
entrypoint.rsプログラムへのエントリポイント
instruction.rsプログラム API、命令データのシリアライズ、デシリアライズ
processor.rsプログラムロジック
state.rsプログラムオブジェクト、シリアライズ、デシリアライズのステータス
error.rsプログラム固有のエラー

近年は、Anchoropen in new window が人気の開発フレームワークとして登場しています。 Anchor は、Ruby on Rails に似た独自のフレームワークであり、定型文を削減し、Rust ベースの開発の (デ) シリアル化プロセスを合理化します。

プログラムは通常、Testnet または Mainnet にデプロイされる前に、Localhost および Devnet 環境に対して開発およびテストされます。 Solana は以下の環境をサポートしています:

クラスタ環境RPC Connection URL
Mainnet-betahttps://api.mainnet-beta.solana.com
Testnethttps://api.testnet.solana.com
Devnethttps://api.devnet.solana.com
LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

各環境にデプロイ後、クライアントはそれぞれのクラスターへの RPC接続open in new window を介してオンチェーンプログラムと対話が可能です。

デプロイ

開発者は CLIopen in new window経由でプログラムをデプロイ可能です。:

solana program deploy <PROGRAM_FILEPATH>

プログラムがデプロイされると、ELF shared objectopen in new window (BPF バイトコードを含む) にコンパイルされ、Solana クラスターにアップロードされます。 プログラムは (Solana の他のすべてと同様に) アカウントに存在しますが、これらのアカウントは executable としてマークされ、BPF Loaderに割り当てられます。 このアカウントのアドレスは program_id と呼ばれ、今後のすべてのトランザクションでプログラムを参照するために使用されます。

Solana は複数の BPF ローダーをサポートしており、最新のものは Upgradable BPF Loaderopen in new windowです。 BPF Loaderはプログラムアカウントを管理し、program_id を介してクライアントが利用できるようにする責務を負います。 すべてのプログラムには、命令処理が行われる単一のエントリ ポイント (process_instruction) があり、パラメータには常に次のものが含まれます。:

  • program_id: pubkey
  • accounts: array,
  • instruction_data: byte array

呼び出されると、プログラムは Solana ランタイムによって実行されます。

その他参考資料

Last Updated:
Contributors: PokoPoko2ry