Insights

クリプトにおける多様なプログラミング言語

暗号資産スタックにおいてC++、Go、Rust、Solidity、Haskell、Move、WASMが採用される理由 — そしてTRONがいかにしてJava-TronとSolidity、およびエネルギー/帯域幅モデルを組み合わせているか。

公開日 Netts チーム 約 19 分で読めます

他の言語: EnglishРусскийEspañol中文ไทยFrançaisУкраїнськаTürkçeहिंदीفارسیالعربيةHausaPortuguêsTiếng Việt한국어Bahasa IndonesiaDeutschTagalog

クリプトにおける多様なプログラミング言語
目次
  1. 基盤:コアプロトコルの言語
  2. トリレンマと言語の哲学
  3. ロジカル・レイヤー:スマートコントラクトとその専門用語
  4. 形式検証、あるいは完璧の追求
  5. リソース指向プログラミングの台頭
  6. ポリグロットな未来:WebAssembly (WASM)
  7. TRONネットワーク:パフォーマンスとアクセシビリティ
  8. コアの外側:クリプトスタックの全容
  9. 人的要素 — スキルと慎重さ

デジタル価値の移転は、21世紀において最も変革的な技術転換の一つとなっています。産業革命が摩天楼や線路を建設するために新しい種類の鋼鉄や機械を必要としたように、ブロックチェーン革命もまた、コンピュータに情報を伝えるための言語そのものを完全に再構築することを求めてきました。

ソフトウェア開発の分野は、あらゆる種類の専門的なツールが溢れる、設備の整った工房によく例えられます。熟練した職人は、繊細な彫刻を削り出すのに大型ハンマーを使いませんし、レンガの壁を壊すのに小さなノミを使うこともありません。それぞれのツールには、その一つの仕事のために愛情を込めて作られ、完璧に磨き上げられた独自の存在理由があります。そして、プログラミング言語という仮想の世界も例外ではありません。

オペレーティングシステムからゲームエンジンまであらゆるものの構築に使われてきた伝統的なC++から、現代的な安全性重視のRustに至るまで、これほど多くの言語が存在する理由は、それぞれがパフォーマンス、セキュリティ、そして開発者の生産性に関する哲学とトレードオフの選択を体現しているからです。「適材適所」という原則が、暗号資産やブロックチェーンほど真実味を帯び、あるいは切実に求められている場所は他にありません。

この分野では、文字通り「コードは法(Code is Law)」であり、たった一つのタイポが数百万ドル相当の資産をアクセス不能にする可能性があります。そのため、プログラミング言語の選択は単なる実装の詳細ではなく、セキュリティやスケーラビリティの特性から、構築されたシステムが将来にわたって存続可能かどうかに至るまで、すべてを決定づける根本的なアーキテクチャ上の選択なのです。

基盤:コアプロトコルの言語

あらゆる暗号資産の中核にあるのは、そのプロトコルです。それは、ネットワークが運用され、合意し、セキュリティを提供するための基本前提となるものです。

これらのプロトコルは、デジタル経済における不変の憲法のようなものです。それらを記述する言語は、コンピュータのリソースを細部まで低レベルで制御しつつ、強力かつ効率的でなければなりません。この業界の先駆けであるビットコインがC++で書かれているのは、決して不思議なことではありません。

C++は、超高速な演算、手動のメモリ割り当て、そして安定したエコシステムで知られる言語です。これらはすべて、来る日も来る日も毎秒トランザクションを処理する国際的なネットワークにおいて、極限の効率性が求められる際に不可欠な要素です。C++は偶然ではなく、明確な意図を持って選ばれました。それにより、サトシ・ナカモトは、ハードウェア性能が限られていた初期のノード上でも、コードを極めて高速に動作させることができたのです。メモリの割り当てと解放をきめ細かく制御できるため、ノードをクラッシュさせ、ネットワークを分裂させかねないメモリリークを防ぐことができました。このレガシーは今日まで受け継がれています。

純粋なパフォーマンスと制御性を求めて、現在も多くの大規模なブロックチェーンプロジェクトがC++に依存しています。これにより、初期の暗号資産(ライトコインなど)は、ビットコインのコードベースを単にフォークし、いくつかのパラメータ(ブロック生成時間やハッシュアルゴリズム)を変更するだけで、ロジックをすべて書き直す必要なく開発を完了することができました。モネロ(Monero)のようなプライバシーコインも、リング署名やステルスアドレスといった操作に必要な複雑な暗号プリミティブをサポートするために、C++を多用しています。高い計算負荷の下でネットワークが停滞しないようにするためには、スピードが極めて重要だからです。

トリレンマと言語の哲学

ブロックチェーン業界が発展し、開発者がいわゆる「ブロックチェーンのトリレンマ」——実質的には分散化、セキュリティ、スケーラビリティを同時に成立させるという課題——に直面する中で、彼らは自らの資金を確保し始めると同時に、「トークンベースの経済モデル」として知られる仕組みを構築し始めました。

プログラミング言語の選択も、このトレードオフにおける重要な手段となりました。

イーサリアムとSPOFのリスク:イーサリアム・プロジェクトは、単一障害点(SPOF)が致命的な事態を招きかねないことを認識しており、分散化を中核に据え続けるために、当初からマルチクライアント・シナリオを提唱していました。これは、イーサリアム・プロトコルが単一のアプリではなく、多くの言語で実装可能な「標準」であることを意味していました。

最も広く利用されているクライアントであるGethは、Googleが強力なネットワーク接続型サーバー向けソフトウェアのために設計した言語であるGoで開発されています。Goの「goroutine(ゴルーチン)」と呼ばれる軽量な並行処理プリミティブは、ブロックチェーンノードがピアに対してトランザクションやブロックを伝播するために維持する必要がある、数千もの同時ネットワーク接続を管理するのに特に適しています。これに明快な構文と優れた標準ライブラリが組み合わさることで、パフォーマンスと開発のしやすさが非常に高いレベルで両立されており、迅速なイテレーションとより広範なコントリビューター層の獲得を可能にしています。

もう一つの注目すべきイーサリアム・クライアント(最初はParity、後にOpenEthereum)は、Rustで開発されました。Mozillaによって生み出されたRustは、異なる哲学を掲げています。Rustはメモリ安全性を重視しており、独自の独創的なシステム(所有権と借用)によって、コンパイル時にプログラミングエラーの全カテゴリーを排除しようと試みています。

C++が開発者にメモリの手動制御を可能にする一方で(それは自らの首を絞める縄にもなり得ますが)、Goはガベージコレクタを使用して自動的に制御を行います(これには不特定のパフォーマンス低下が伴います)。対照的にRustは、コンパイル時の厳格な基本ルールを活用します。つまり、ノードをクラッシュさせたり、攻撃者による悪用を許したりするような広範囲のバグは、有効なRustコードとしては記述することすらできないのです。

同一のプロトコルに対してこのように多様な言語が存在することは、弱点ではなく、計り知れない強みなのです。 EthereumのGo実装に脆弱性が発見されたとしても、Rustクライアントが影響を受けていなければ、ネットワークは稼働を続けることができます。これは、マルチ言語サポートなしには不可能なことです。このレベルの開発には、単なる言語のスキルだけでなく、分散システム、P2Pネットワーキング、そして高度な暗号技術に関する、長年の経験に裏打ちされた深い専門知識が求められます。

ロジカル・レイヤー:スマートコントラクトとその専門用語

コアプロトコルがオペレーティングシステムであるならば、スマートコントラクトはその上で動作する、世界を揺るがすようなアプリケーションです。そして、契約条件がコードとして直接記述されたこれらの自己実行型コードこそが、分散型金融(DeFi)からデジタルアイデンティティに至るまで、ブロックチェーンの持つ可能性を最大限に引き出すのです。

スマートコントラクトの記述に最も広く使われている言語はSolidityです。SolidityはEVM上で動作するように構築されており、その構文は意図的にJavaScriptに酷似させてあります。これにより、世界最大の開発者コミュニティ(JavaScript)にとって習得が非常に容易になっただけでなく、他の言語ですでに書かれているコードの大部分にも影響を与えました。このアクセシビリティこそが、分散型アプリケーションへの初期の推進力となり、Ethereumエコシステムの急速な拡大を支えたのです。Solidityによって、開発者は自身のコードを「コントラクト」「マッピング」「イベント」といった概念で根本的に考えることができるようになりました。これらはすべて、金融契約のメンタルモデルに見事に合致する抽象化概念です。

しかし、Solidityの歴史は(あらゆるコンピュータセキュリティの歴史がそうであるように)、苦い教訓を学んできた歴史でもあります。 ブロックチェーンの不変性により、スマートコントラクトのバグは、DAOハックやParityのマルチシグウォレット凍結に見られるように、永続的かつ深刻な結果を招く可能性があります。

これらの出来事は、構文がJavaScriptに似ていて読みやすいものであっても、その裏には危険な複雑さが潜んでいることを再認識させるものとなりました。その結果、より新しいブロックチェーンは異なるアプローチを試みています。SovrinやDfinityのようなシステムもRustを採用しており、コンパイル時の保証を信頼することでスマートコントラクトのセキュリティを強化しています。Rustは、高性能システムが一般的に直面する「データレース」や、その他のデータレースに類する誤動作を防ぐことを目的としています。

形式検証、あるいは完璧の追求

エコシステムの中でも、より学術的に進んだ高信頼性が求められる分野において、CardanoやTezosといったプロジェクトは根本的に異なるアプローチを採用しています。Cardanoは、コア実装のベースにHaskellを採用し、そのスマートコントラクトプラットフォーム(Plutus)をHaskellの方言として構築するという、急進的で直感に反する決断を下しました。Haskellは、強力な数学的基盤を持つ純粋関数型言語です。

Haskellは計算を数学的関数の評価として捉え、予測不可能なシステムの計算状態の変化である「副作用」を排除します。これこそがHaskellが形式検証に非常に適している理由です。開発者は、自身のコードが正しいことを数学的に証明できるのです。少数の潜在的な入力値でコードをテストする代わりに、開発者はあらゆる可能な入力に対してコードが正しく動作することを証明できます。 これはトレードオフです。高額な金融契約に対して比類なきセキュリティと信頼性を提供するとされる一方で、開発者層を大幅に限定し、経験の浅い開発者が多くなるという側面があります。

Tezos:Tezosのネイティブ言語はMichelsonと呼ばれます。これは形式検証のために作られた低レイヤーのスタックベース言語です。数百万ドルもの資金を管理する場合、コントラクトがどのように動作するかを予測できる必要があるためです。

リソース指向プログラミングの台頭

近年、Moveなどの言語において新しいパラダイムが具体化し始めています。Meta(旧Facebook)のプロジェクトであり、AptosやSuiといった高性能ブロックチェーンの基盤となっているMoveは、デジタル資産を中心に据えるために専用設計されました。Solidityにおいて、トークンはコントラクト内の台帳に記帳された一項目に過ぎません。一方、Moveではトークンを「リソース」として捉えることができます。つまり、コピーや暗黙的な破棄が不可能で、ある保存場所から別の場所へ移動させることしかできない特殊なデータ構造なのです。

このモデルは、リソースを使用することで、二重支払いやトークンの消失といった一般的なエラーを言語レイヤーで回避します。これにより、メンタルモデルが「データベースの更新」から、私たちが本能的に価値を理解する際の感覚に近い「物理的な物体の移動」へと変化します。この革新により、安全なスマートコントラクトが「デフォルト」となります。言語自体が、最も一般的な形態の金融的エクスプロイトに対するガードレールとして機能するようになるのです。

ポリグロットな未来:WebAssembly (WASM)

長年、EVMが王座に君臨してきましたが、新たな対抗馬が登場しています。それがWebAssembly(WASM)です。もともとウェブブラウザで高性能なコードを実行するために構築されたWASMは、Polkadot、Cosmos、Nearといったブロックチェーンにおいて、スマートコントラクトの標準として台頭しつつあります。

WASMがソース言語ではなく、コンパイルターゲットであること。これこそがWASMの素晴らしさです。

つまり、開発者はRust、C++、AssemblyScript(TypeScriptに似た言語)、あるいはWASMにコンパイル可能なその他のあらゆる言語でスマートコントラクトを記述できるようになったのです。これにより、ブロックチェーン専用に設計された言語の独占状態が打破され、開発者は自身のツールやライブラリ、そして専門知識をクリプト分野で活用できるようになります。これは、参入障壁が大幅に低減され、成功の鍵が新しい構文の習得ではなく、優れたアプリを構築することにあるという、多言語が共存する未来のビジョンを描いています。

TRONネットワーク:パフォーマンスとアクセシビリティ

ブロックチェーンプラットフォームの巨大なエコシステムにおいて、TRONは高いスループットとスケーラビリティの提供を目指すと同時に、中央集権的な仲介者を介さずに最終的にクリエイターに利益をもたらす、分散型エンターテインメントおよびコンテンツ共有プラットフォームとなることを目的としています。TRONのアーキテクチャ上の決定はこれらの志向に基づいており、実用的なエンジニアリングの興味深い例を提示しています。

コアクライアントであるJava-Tronは、数十年にわたりエンタープライズ・ソフトウェア分野の主力であり続けているJavaで記述されています。これは意図的な戦略的選択でした。Javaはエンタープライズ環境で鍛えられ、非常に安定しており、世界規模のネットワークを支えるシステムソフトウェア設計の金字塔とも言える、極めて効率的なJava仮想マシン([JVM])上で動作します。

JVMに組み込まれたJITコンパイル最適化機能により、TRONノードは長期にわたって高いパフォーマンスを維持し続けることができます。

また、この決定は、TRONが世界中の膨大なJava開発者コミュニティを活用すること、そしてスピードとパフォーマンスを重視して設計されたデリゲート・プルーフ・オブ・ステーク(DPoS)コンセンサス技術に基づくコア・インフラストラクチャを急速に発展させることの助けとなりました。

コントラクト層において、TRONはもう一つの重要な戦略的決定を下しました。それは、イーサリアムのEVMと互換性のある仮想マシンを採用したことです。つまり、スマートコントラクトを記述できる人であれば、小口の開発者から大口(クジラ)まで(これには私のERC20時代も含まれます)、Solidity言語を使用してTRONネットワーク向けにもコントラクトを書くことができるようになったのです。

このような相互互換性は成長の大きな原動力となり、イーサリアムのエコシステム内で活動していた既存のdAppや開発者が、TRONネットワークへスムーズに移行したり、TRONネットワーク上へと展開したりすることを可能にしました。TRONはこれらのニーズを十分に満たしていますが、実際にTRONネットワークを利用してみると、エネルギー(Energy)と帯域幅(Bandwidth)をめぐる、非常に興味深く複雑なリソースモデルに直面することになります。

イーサリアムの「ガス」モデルは、各操作に対してETHを支払うという基本的な仕組みです。一方、TRONのモデルはガス料金という形式をとらず、リソースを分離しています。ネットワークの帯域幅はトランザクションのバイト数(ボディとデータのサイズ)に対して消費され、ガスはスマートコントラクトを含むロジックを処理するための計算能力や時間に対して使用されます。

ユーザーが十分なTRXをフリーズ(凍結)していればトランザクションを「無料」にできる一方で、トランザクション量が多いアプリケーション(人気の分散型ゲーム、高トラフィックの取引アルゴリズム、あるいは多忙な金融サービスなど)にとっては、絶え間ない需要サイクルが運用に多大な負荷をかけます。エネルギーが不足したdAppはアクションが失敗し、ユーザーエクスペリエンスの悪化だけでなく、ビジネスの損失にもつながります。

このことは、TRONネットワークにおけるエネルギーレンタル自動化を担うサービスという、ニッチながらも重要な市場を生み出す結果となりました。大口保有者は自身のTRXを「フリーズ」してエネルギーを生成し、それを他のユーザーに貸し出すことができるのです。 このプロセスの自動化は、TRONネットワーク上で本格的なビジネスを展開する上で不可欠です。これにより、アプリケーションが中断することなく、スムーズかつ低コストで動作することが保証されます。これらのプラットフォームを利用する際、手数料を支払うためにTRXを直接バーンする場合と比較して、コストを最大80%節約できます。

エネルギーレンタルの自動化は、負担の大きい日常的な雑務となりがちな側面を、邪魔にならないバックグラウンドの処理へと変えてくれます。これにより、開発者はリソース残高を気にすることなく、コードの開発に集中できるようになります!

コアの外側:クリプトスタックの全容

2020年時点での分散型アプリケーションは、単なるオンチェーンのスマートコントラクト以上の存在です。それは、クライアントサイドでWebアプリケーションをエンドツーエンドで実行するテクノロジースタックです。ユーザーが目にし、操作する、いわゆる「フロントエンドdApp」は、JavaScriptやTypeScriptといった定評のあるWeb開発言語と、React、Vue.js、Svelteなどのコンポーネントベースのフレームワークを組み合わせて構築されます。

バックエンドでは、堅牢なアプリケーションを実現するために、無数のオフチェーンサービスが必要となります。これらには、GraphQLというクエリ言語を採用しているThe Graphのようなデータインデクサーが含まれ、複雑なブロックチェーンデータを容易に検索できるようにします。ブロックチェーンは、「2023年にミントされた、このユーザーが所有するすべてのNFTを表示する」といった情報の取得には極めて不向きなデータベースであるため、インデクサーがチェーンを読み取り、データを通常のデータベースに整理します。

このレイヤーでは、GoやNode.jsといった言語が、フロントエンドにデータを提供するスケーラブルなAPIの構築に非常に適しています。これらは並行ネットワークリクエストの処理に極めて優れているためです。また、Pythonも人気があり、特にスクリプト作成や、ブロックチェーンデータを活用した機械学習などのデータ分析に好んで使用されます。

Pythonには膨大なデータサイエンスライブラリが存在するため、「クジラ」の動きを追跡したり市場センチメントを算出したりするオンチェーンアナリストは、ホームグラウンドの利点を享受できます。

Liskなどの一部のプロジェクトは、JavaScriptに焦点を当てることでさらに一歩踏み込み、開発者がJavaScriptを用いて独自のカスタムブロックチェーンをゼロから構築できる完全なソフトウェア開発キット(SDK)を開発しました。これは、この分野に参入する開発者にとって大きな近道となります。

このフルスタックの視点は、あるシグナルも発信しています。それは、クリプト開発はマルチリンガルであり、スタックの各レイヤーに応じて異なるツールを選択するものであるということです。しかし、TRONネットワークにおいてバックエンドシステムを構築する人々にとって、プログラムによってエネルギー(Energy)を確実にレンタルできる手段を持つことは、単なる利便性ではなく、データベース管理やAPIルーティングと同等の重要性を持つ要素なのです。

人的要素 — スキルと慎重さ

クリプト業界におけるプログラミング言語の驚くべき多様性は、ある深い現実を反映しています。それは、テクノロジーの質はそれを作る人次第であるということです。安全でスケーラブル、かつ真に分散化されたネットワークを構築することは、膨大な労力を要するタスクです。それには、これらの分野で数年、時には数十年の経験を持つ開発チームが必要です。

プロジェクトで採用される言語(パフォーマンス重視のC++、安全性重視のRust、形式検証されたHaskell、あるいは開発者に優しいJavaScriptなど)は、そのチームがコンピューティングにおいて何を最も重視し、どのように世界をより良く変えたいと考えているかを示しています。

これらのプロジェクトの多くが持つオープンソースという性質は、世界中の優秀な人材を突き動かし、結びつけています。共有がイノベーションを生み、コードが誰にでも公開・検証可能でありながら、業界全体を共に前進させる健全なエコシステムです。GoクライアントのバグはRustクライアントの設計にフィードバックされ、Moveのリソースモデルにおける進歩はSolidityコンパイラに採用されることもあります。

それは絶え間ないプロセスであり、集合的な学習でもあります。

こうした技術の絡み合いと絶え間ない最適化の必要性は、特定のエコシステムの複雑さを制御できる専用ツールの需要が高まっていることを示しています。ネットワークがより専門化するにつれ、それらを取り巻くツール群も同様に変化していく必要があります。

TRONのような最先端のネットワーク上で稼働する開発者やDAppsにとって、エネルギー(TRX)や帯域幅といったリソースを個別に管理するシステムを利用することは、コスト効率の悪さや手動管理に伴うミスの発生しやすさから、しばしば開発の妨げとなります。更新を忘れればトランザクションが失敗する可能性があり、手動で過払いが発生すれば資本が無駄になってしまいます。

そこでプロフェッショナルなプラットフォームの出番です。こうした複雑さを理解し維持する必要性を抽象化し、業界がさらなる発展を遂げるために必要な「インフラ・アズ・ア・サービス(IaaS)」レイヤーを提供します。

一例として、Netts Workspaceは、スマートなスケジューリング、リアルタイムのコスト最適化、委任された自動化など、TRONエネルギー管理スイート一式を提供しています。豊富なAPIと財務管理・分析用の完全なダッシュボードを備えており、リソース管理を簡素化します。これにより、クリエイターや企業はインフラの維持管理を心配することなく、アプリケーションの構築に専念できるようになります。

共有 X Telegram LinkedIn Reddit

次のステップ