
Surfpoolのご紹介:Solana Devnetに代わる選択肢
この記事では、Helius Startup Launchpad発のプロジェクトで、ColosseumのRadar Hackathonにて優勝し、Solana開発者エコシステムで注目を集めているSurfpoolをご紹介します。
まずLocalnet、Devnet、Mainnetの役割、強み、課題を整理します。その後、SurfnetとInfrastructure as Codeについて掘り下げ、それらがSolana開発者にかつてない開発速度、安全性、自信をもたらす仕組みを解説します。
Surfpoolとは?
Surfpoolは、Solanaで開発する際に最高の体験を提供するために専用設計された、Localnetテスト環境の代替ツールです。必要なタイミングで取得したMainnetアカウントを使用し、Solanaプログラムをローカルでシミュレーションできます。
またSurfpoolは、AnchorまたはPinocchioベースのプロジェクトに**Infrastructure as Code(IaC)**をシームレスに導入します。これにより、プライベートかパブリックかを問わず、あらゆるSolanaネットワークへ再現可能で監査可能かつ安全にデプロイできます。
SurfpoolがSolanaの開発体験をどのように改善するかを理解するには、まず開発者が現在利用しているネットワーク環境を確認することが重要です。
SolanaにはLocalnet、Devnet、Mainnetという複数のクラスターがあり、それぞれ開発ライフサイクルで異なる役割を担います。これらの環境は不可欠ですが、コードをリリースする際の速度、信頼性、確信度に影響するトレードオフもあります。
Localnet
Localnetとは、通常solana-test-validatorコマンドで起動するSolanaブロックチェーンのローカルインスタンスです。実質的には、ネットワーク遅延がなく、環境を完全に制御できる、自分のマシン上で動作するプライベートブロックチェーンです。
Anchorフレームワークとの緊密な統合によって広く普及したLocalnetは、Solanaランタイムを忠実に実行できるため、高速な反復作業やデバッグに最適です。開発者はこれを使用して、トランザクションのシミュレーション、プログラムロジックの検証、バグの解消、ステートのリセット、反復開発を行います。
Localnetは、継続的インテグレーション(CI)パイプラインにも一般的に組み込まれています。チームはコミットごとに自動テストスイートを実行し、変更によって既存の動作が壊れていないことを確認できます。これにより、コード品質を維持し、リグレッションを早期に検出できます。
しかし、この隔離性こそが最大の制約でもあります。
Localnetは閉じた環境で動作するため、実在するアカウントやMainnetデータへアクセスできず、稼働中のエコシステムプロトコルとも連携できません。
そのため、隔離されたシミュレーションには最適ですが、現実的な条件下でのコンポーザビリティテストやエンドツーエンド検証には不十分です。
SolanaのLocalnetはEthereumのDevnetに相当し、高速かつプライベートなシミュレーションを行うための隔離されたローカル環境です。
Solana Devnet
Devnetは、Solana Foundationとコミュニティが運営する少数のバリデータによって稼働している、Solanaのパブリックネットワークです。Mainnetのアーキテクチャと実行動作を再現しつつ、経済的リスクを排除しています。
Devnet上のトークンには現実世界での価値がありません。トークンを入手するには、開発用途の少量のテストトークンを配布するパブリックエンドポイントであるfaucetを利用します。
通常、これらのfaucetにはレート制限があります。また、トークンごとに異なるルールの専用faucetが用意されていることも少なくありません(例:HeliusのSolana faucet、Circleが運営するUSDC faucetなど)。そのため、必要なトークン一式の準備には手間と時間がかかります。
Devnetは、共有のパブリックステージング環境として機能します。開発者は、プログラム間の連携をシミュレーションし、実際に稼働する環境でクライアント側の動作をテストし、Mainnetへのローンチに備えるために使用します。Localnetでは利用できないオラクル、DEX、トークンプログラムなど、サードパーティとの統合を扱う際に便利です。
Devnet RPCエンドポイントは公開されているため、Devnetはアプリケーションのフロントエンド開発やデバッグにもよく使用されます。
多くのチームは、内部テスト環境としてもDevnetを利用しています。大規模なプロトコル(Pythなど)は、他チームによる統合テストを容易にするため、Devnet上にアプリの「サンドボックス」デプロイを用意することがあります。
各チームが独自にDevnetへのデプロイ戦略を定めている点には注意が必要です。プロトコルが通常、監査済みで安定し、最新の状態に保たれているMainnetとは異なり、Devnet上のデプロイは古い、不完全、または設定に誤りがある可能性があります。
そのため、コンポーザビリティは限定的です。
もちろん、運用方法には違いがあります。ステージングや統合テスト用に独自の内部Devnet環境を維持するチームもあれば、サードパーティの開発者やパートナーを支援するためにパブリックDevnetを運営するチームもあります。こうしたカスタム環境は、共有のSolana Devnetよりも高度な制御、安定性、用途に応じたアクセスを提供することがよくあります。
SolanaのDevnetはEthereumのTestnetに相当します。
Solana Mainnet-beta
Mainnetは本番環境そのものです。毎秒数千件の敵対的なトランザクションを取り込み、トークンには現実の価値があり、どのようなミスも大きな損失につながる可能性があります。DevnetやLocalnetとは異なり、Mainnetへのデプロイには入念な準備、厳格なセキュリティ対策、コードへの高い確信が必要です。
運用面では、Mainnetによってすべてが変わります。
デプロイ用キーペアはマルチシグやハードウェアウォレットで管理されることが多く、厳重に保護しなければなりません。また、デプロイプロセスに問題があれば、深刻な結果を招く可能性があります。予測不能なトラフィック、現実のネットワーク遅延、実際のユーザーや資産とのやり取りなど、本物のネットワーク条件にさらされます。
一方で、完全なコンポーザビリティと、重要なあらゆるプロトコルとの統合という利点も得られます。Mainnetは、実際の負荷と最大規模の環境下で、プログラムの真価が問われる場所です。
実際、私たちが出会った開発者の多くは、Devnetの限定的なコンポーザビリティという壁にすぐ直面していました。開発を高速化したり正確なデータへアクセスしたりするため、Mainnet上で直接反復開発を始めることも少なくありません。しかし、それには高いリスク、遅い反復サイクル、増大する運用負担が伴います。Devnetは両者をつなぐ有効な橋渡しになっていません。
Surfnetのご紹介
Surfnetなら、ローカルファーストなLocalnetの利点を得ながら、ノードを同期することなくトランザクションからMainnetのステートへアクセスできます。
これは、従来のSolanaネットワークの制約に対するSurfpoolの答えです。LocalnetとMainnetの隔たりを埋めるために専用設計された、開発者中心の環境です。
Surfpoolは、任意のRPCから必要に応じてライブアカウントデータを取得する一方で、プログラムのステートをローカルで隔離して追跡します。これにより、完全な制御、高速な反復開発、忠実なシミュレーション環境を実現します。
このアーキテクチャにより、Surfnetは遅延フォークされたネットワークのように動作します。読み取り時にステートをコピーし、変更をローカルに書き込みます。Localnetと同様に即座に起動し、動作も大幅に高速です。Surfnetのインスタンスは軽量で、Raspberry Piのような安価なデバイスでも実行できます。
Surfpoolは標準のRPCコントラクトに準拠しているため、それらのエンドポイントを利用するウォレット、エクスプローラー、CLIツールと事実上互換性があります。
SurfnetのRPCメソッド
Solanaの開発体験をさらに向上させるため、Surfnetはcheatcodeと呼ばれるRPCメソッド群を導入しています。これを使えば、ネットワークのルールを自在に変更し、シミュレーション中の反復開発を高速化して、より細かく制御できます。以下のメソッドが含まれます。
surfnet_setAccount:任意のアカウントデータをネットワークステートへ注入します。surfnet_setTokenAccount:カスタム残高とメタデータを持つトークンアカウントを即座に作成します。surfnet_setMintAccount:供給量、小数点以下の桁数、権限を含むミント設定を定義または上書きします。
これらのcheatcodeは、ローカル開発におけるスーパーパワーのようなものです。本来なら面倒な調査、手作業でのセットアップ、複雑なスクリプト作成が必要となるシナリオを実現できます。
Mainnetデータと組み合わせることで、cheatcodeは開発者にこれまでにない力をもたらします。ローカルネットワークから現実のコンテキストへ完全にアクセスしながら、ルールを自由に変更できるため、充実した、制御可能で極めて現実的なシミュレーションが可能です。
一見シンプルで分かりやすいこのセットアップをLocalnet上で再現するには、通常は数日かかります。
Cheatcodeのケーススタディ:The Heist
Surfpoolのcheatcodeで何ができるかを示すため、私たちはThe Heistというコードネームのfaucetを構築しました。
なぜこの名前なのでしょうか? まるで銀行強盗のように感じられるからです。ただし、手間もリスクもなく、完全に制御できます。SOL、USDC、カスタムSPLなど、任意のトークンを任意のアカウントへ即座に入金できます。レート制限も、待ち時間も、サードパーティサービスもありません。コマンド1つで資金を利用できる状態になります。
faucetは、遅く、不安定で、エコシステム全体に分散しているため、常に開発者を悩ませてきました。The Heistは、その常識を覆します。高速かつローカルで動作し、Surfnet環境に組み込まれています。
これを可能にするのがSolanaの設計です。共有のプリコンパイル済みトークンプログラムにより、すべてのトークンで一貫したストレージレイアウトが保証されるため、このような汎用faucetを実現できます。トークンの実装が大きく異なるプラットフォームでは実現できません。
The Heistは単なる開発ツールではありません。高速で無駄のないシミュレーションが何を可能にするかを示すものです。
Crypto Infrastructure as Code(IaC)
強力なシミュレーションは、全体の一部にすぎません。SurfpoolはSolanaにInfrastructure as Codeも導入し、開発者の負担を抑えながら、あらゆるデプロイに再現性、自動化、セキュリティをもたらします。
**Crypto Infrastructure as Code(IaC)**は、それだけで専門の記事を書けるほど奥深いテーマです。私たちは長年にわたり、Pyth、Wormhole Core、Circle CCTP、Bitcoin Ordinalsをはじめとする高度なプロトコルに実際に取り組み、この分野で深い専門知識を培ってきました。
大きく分けると、暗号資産インフラストラクチャは通常、次の3つの主要なコンポーネントに分類されます。
- オンチェーンインフラストラクチャ
- 署名インフラストラクチャ
- オフチェーンインフラストラクチャ
オンチェーンインフラストラクチャ
これには、プログラムのデプロイ、アップグレード、ステート移行が含まれます。適切に設計されたIaCシステムでは、再現可能かつ監査可能なプロセスを通じてスマートコントラクトをデプロイし、整合性、バージョン管理、トレーサビリティを確保します。
署名インフラストラクチャ
セキュリティ障害の大半は、鍵管理で発生します。プロダクショングレードのシステムでは、安全性に欠けるローカルキーペアに依存せず、ハードウェアウォレット、閾値暗号、マルチシグ構成を使用して、安全かつ適切にトランザクションへ署名します。
適切に設計されたIaCシステムでは、署名インフラストラクチャをモジュール化して設定可能にする必要があります。そうすれば、わずか数行の設定を更新するだけで、ハードコードされた秘密鍵から高度なマルチシグ署名プロセスへ切り替えられます。
オフチェーンインフラストラクチャ
これには、スマートコントラクトを取り囲み、支えるすべてのものが含まれます。インデクサー、ステート監視ツール、ウォレット監視ツール、自動化スクリプトなどです。
これらのコンポーネントはオンチェーンイベントと密接に結び付いていることが多いため、コードとして扱う必要があります。つまり、ローカルでテストでき、移植可能で、完全にデプロイ可能でなければなりません。
私たちが構想するCrypto Infrastructure as Codeでは、ノードのプロビジョニングとRPCエンドポイントの管理を意図的に対象外としています。これらはTerraform、Ansible、クラウドネイティブソリューションなどの既存ツールで十分に対応でき、アプリケーションレベルのインフラストラクチャの範囲内で再発明する必要はありません。
Crypto Infrastructure as Codeの利点
適切に設計されたIaCシステムは、静的解析が可能であるべきです。何を実行するのかを理解するために、コードを実行する必要があってはなりません。
関与するプログラムと署名者、影響を受けるリソース、必要なコストを詳しく示す完全な実行計画を、事前に生成できる必要があります。
JavaScriptベースのDSLや中身の分からないシェルスクリプトは不要です。必要なのは、明確な宣言型コードだけです。コンポーザブルで保守しやすく、学習コストも最小限であるべきです。
このようなシステムがあれば、開発者はディスク上のローカルキーペアからSquad署名者へ署名インフラストラクチャを切り替えるだけで、LocalnetからMainnetへ簡単に移行できるはずです。
私たちは、Web3 Runbooksと呼ぶスタックの設計と構築に数か月を費やしました。言語を改良し、使いやすくするとともに、ランタイムの安全性とコンポーザビリティを高めました。
Surfpoolでは、このRunbookテクノロジーをさらに利用しやすく、使いやすいものにすることを目指しています。同時に、Solana開発者が可能な限り優れた基盤上で開発できるよう、さらなる限界に挑戦します。
SurfpoolでSurfnetとCrypto Infrastructure as Codeを組み合わせることで、私たちがWeb3で最高だと考える開発者ツールを生み出しています。開発者はローカルファーストのスタックを利用でき、プロトコルの成熟に合わせてIaC設定を調整するだけで、段階的にMainnetへ移行できます。
ネットワークの話に戻ると、SurfnetはInfrastructure as Codeを通じて定義および管理できる点も重要です。つまり開発者は、プロトコルとの連携に必要な適切なトークン一式(SOL、USDCなど)が入金済みの数百のアカウントを事前設定した、一時的なネットワークを簡単に立ち上げられます。
リソースとドキュメント
Surfpoolを45分かけて詳しく解説する、Solana FoundationのDeveloper Relations責任者Jacob CreechによるSolana Changelogのエピソードをぜひご覧ください。
また、開発者がSurfpoolを使い始められるよう、短時間で実践的に学べる短いスクリーンキャストシリーズも公開します。
完全なドキュメントはdocs.surfpool.runでご覧いただけます。
まとめ
まだ長い道のりが続きますが、未来は明るいです。すでに開発者からSurfpoolへ強い関心が寄せられており、そのフィードバックによって、私たちが不可欠なものを構築しているという確信がさらに深まっています。
とはいえ、私たちはまだ表面に触れたにすぎません。
私たちの使命は、Mainnetシミュレーションを本物と見分けられないものにすることです。
現在のSurfpoolでは、トランザクションの競合や優先順位付け、MEVやサンドイッチ攻撃などの敵対的な挙動といった、いくつかの重要な要素をまだ考慮できていません。
今後の展開を楽しみにしています。Surfpoolはすでに、人々がSolana上で開発する方法を変え始めています。私たちは、これをさらに前進させることに全力で取り組みます。
関連記事
Heliusを購読
Solana開発の最新情報や新しい記事の公開通知を受け取れます


