Solidity言語のロゴ | |
| パラダイム | 命令形 |
|---|---|
| デザイン: | ギャビン・ウッド |
| 開発者 | Christian Reitwiessner氏[1] 、 Alex Beregszaszi氏[2]、および数名の元Ethereumコア貢献者。 |
| 初登場 | 2014年8月 |
| 安定版リリース | 0.8.28 [3]
/ 2024年10月9日 |
| 実装言語 | C++ [4] |
| ライセンス | GNU一般公衆利用許諾書v3.0 [5] |
| ファイル名拡張子 | 。ソル |
| Webサイト | 出典: |
| 影響を受けた | |
| JavaScript、C++、Python | |
Solidityは、さまざまなブロックチェーンプラットフォーム、特にEthereum上でスマートコントラクトを実装するためのプログラミング言語です。[6] [7 ] SolidityはGNU General Public License v3.0の下でライセンスされています。[9] SolidityはGavin Woodによって設計され[10] [非一次ソースが必要]、Christian Reitwiessner、Alex Beregszaszi、および数人の元Ethereumコア貢献者によって開発されました。[11] Solidityのプログラムは、Ethereum仮想マシンまたは互換性のある仮想マシン上で実行されます。 [12]
歴史
Solidityは2014年8月にGavin Woodによって提案されました[13] [非一次資料が必要]。この言語は後にChristian Reitwiessner率いる EthereumプロジェクトのSolidityチームによって開発されました。
Solidityは、 Ethereumやエンタープライズ向けのHyperledger Fabricブロックチェーンなどの他のプライベートブロックチェーンのスマートコントラクトを開発するために使用される主要な言語です。SWIFTは、 Hyperledger Fabric上で実行されるSolidityを使用して概念実証を展開しました。[14] [15]
説明
Solidityは、Ethereum仮想マシン(EVM)または互換性のある仮想マシン上で実行されるスマートコントラクトを開発するために設計された静的型付けプログラミング言語です。 [16]
Solidity はECMAScriptのような構文を使用するため、既存の Web 開発者には馴染み深いものです。[17]ただし、ECMAScriptとは異なり、静的型付けと可変長の戻り値型を備えています。Solidity は、 SerpentやMutanなどの他の EVM ターゲット言語とはいくつかの重要な点で異なります。任意の階層マッピングや構造体を含むスマート コントラクトの複雑なメンバー変数をサポートしています。Solidityスマート コントラクトは、C3 線形化による多重継承を含む継承をサポートしています。Solidity は、単一のスマート コントラクト内で複数の型安全な関数を容易にするアプリケーション バイナリ インターフェイス(ABI) を導入しています (これは後にSerpentでもサポートされました)。Solidity の提案には、メソッド呼び出しの影響をユーザー中心に記述するためのドキュメント システムである「自然言語仕様」も含まれています。[18] [19] [非一次ソースが必要]
Solidityプログラムの例: [20] [21]
// SPDX ライセンス識別子: GPL-3.0
プラグマ solidity ^ 0.8.4 ;
contract Coin { // キーワード「public」により、変数が他のコントラクトからアクセス可能になります。address public minter ; mapping ( address => uint ) public balances ;
// イベントにより、クライアントは宣言した特定の契約変更に反応できるようになります。event Sent ( address from 、address to 、uint amount );
// コンストラクタコードはコントラクトが作成された場合にのみ実行されます。constructor () { minter = msg.sender ; }
// 新しく作成されたコインの量をアドレスに送信します
// 契約作成者のみが呼び出すことができますfunction mint ( address received , uint amount ) public { require ( msg.sender == minter ); balances [ received ] += amount ; }
// エラーを使用すると、操作が失敗した理由に関する情報を提供できます。エラーは
関数の呼び出し元に返されます。 error InsufficientBalance ( uint requested , uint available );
// 既存のコインの量を
任意の呼び出し元からアドレスに送信します。 function send ( address received , uint amount ) public { if ( amount > balances [ msg.sender ]) revert InsufficientBalance ({ requested : amount , available : balances [ msg.sender ] });
残高[ msg.sender ] -= amount ;残高[ received ] += amount ;送信Sent ( msg.sender , received , amount ); } }
開発 IDE
- Microsoft Visual Studio コード
- ジェットブレインズ IntelliJ
- リミックスオンラインエディター[22]
- EthFiddleオンラインエディター[23]
エディター拡張機能
- Visual Studio CodeのSolidityサポート[24]
- IntelliJのSolidityサポート[25]
ブロックチェーンプラットフォーム
Solidity は次の場所で利用可能です:
- アバランチCチェーン
- バイナンススマートチェーン[26]
- カウンターパーティ(ビットコイン上で稼働)[27] [28]
- イーサリアム
- イーサリアムクラシック
- トロン
- ヘデラハッシュグラフ
- ポリゴン
- メティス
- 仲裁
- 楽観
批判
スマートコントラクトのセキュリティ特性の多くは、直接推論することが本質的に困難であり、Solidityのチューリング完全性は、任意の特性の検証を決定的に自動化できないことを意味します。スマートコントラクトのセキュリティ分析のための現在の自動化ソリューションは、重大な違反を見逃したり、誤検知を生成したり、現実的なコントラクトで十分なコードカバレッジを達成できなかったりする可能性があります。[29] Solidityは、直感に反する性質、ブロックチェーンのドメイン固有の側面に対処するための構造の欠如、既知の脆弱性の集中的なドキュメントの欠如により、Ethereumスマートコントラクトのエラーが発生しやすい実装の原因であると非難されてきました。[30]
2016年、コーネル大学の研究者は、その年に発生したDAOハッキングはSolidityに部分的に責任があると述べた。彼は次のように述べた。「これは実際にはDAOコントラクト自体の欠陥やエクスプロイトではありませんでした。技術的にはイーサリアム仮想マシン(EVM)は意図したとおりに動作していましたが、Solidityはコントラクトにセキュリティ上の欠陥をもたらし、コミュニティだけでなく言語の設計者自身もそれを見逃していました。」[31]
開発者コミュニティでは、Solidity がサードパーティのインターフェースや API を大量に必要とし、重要な情報集約型のスマート コントラクトを作成できないことがよく指摘されています。
他のスマートコントラクト言語との比較
Solidity 対 Rust
Solidityは、イーサリアム仮想マシン(EVM)上でスマートコントラクトを開発するための主要なプログラミング言語です。[32]しかし、Rustはブロックチェーンエコシステム、特にPolkadot、Klever、SolanaなどのWebAssembly(Wasm)をサポートするブロックチェーンの強力な代替手段として浮上しています。
メモリの安全性
Rust には、ヌル ポインターの逆参照やバッファー オーバーフローなどの一般的なプログラミング エラーを防ぐ組み込みのメモリ安全機能が備わっていますが、Solidity ではそれほど厳密には適用されていません。これにより、Rust コントラクトは、スマート コントラクト環境で悪用される可能性のあるセキュリティの脆弱性の影響を受けにくくなります。
同時実行性
Rustは並行プログラミングをサポートしており、開発者は複数のタスクを同時に処理できる高性能なコードを書くことができます。これは、1秒間に数千のトランザクションを処理する必要があるSolana [33]のような高性能ブロックチェーンにとって特に有益です。一方、Solidityは並行性をネイティブにサポートしていないため、特定のアプリケーションではパフォーマンスが制限される可能性があります。[34]
エコシステム統合
SolidityはEthereumエコシステムとその数多くの開発ツールと深く統合されていますが、[35] Rustは汎用性が高く、Wasmを活用するさまざまなブロックチェーンプラットフォームで使用できます。Rustの人気の高まりは、パフォーマンスとセキュリティを優先する新しいブロックチェーンプロジェクトでの採用に反映されています。
参考文献
- ^ 「Ethereum/Solidityへの貢献者」GitHub 。 2023年3月30日閲覧。
- ^ 「Ethereum/Solidityへの貢献者」GitHub 。 2023年3月30日閲覧。
- ^ “リリース 0.8.28”. 2024年10月9日. 2024年10月27日閲覧。
- ^ 「一緒にソフトウェアをより良く構築する」GitHub . 2023年3月30日閲覧。
- ^ Solidity Contract-Oriented Programming Language、イーサリアム、2023年3月30日、2023年3月30日閲覧
- ^ Afshar, Vala (2017年7月17日). 「イーサリアムはビットコインに次いで2番目に価値の高いデジタル通貨」HuffPost . 2019年4月10日閲覧。
- ^ 「SOFEベルリン:Swiftがブロックチェーンの概念実証を発表」Finextra(ニュース)2016年11月24日。 2016年11月24日閲覧。
- ^ フィンリー、クリント。「史上最大のクラウドファンディングプロジェクトから5000万ドルが盗まれた。(人間は信用できない)」Wired。
- ^ Solidity Contract-Oriented Programming Language、イーサリアム、2023年3月30日、2023年3月30日閲覧
- ^ Wood, Gavin (2015年1月13日). 「Created Solidity」. Ethereum Wiki (アーカイブ) . 2024年3月23日閲覧。
- ^ 「貢献者リスト」。GitHub。
- ^ College、AMC(2022年11月1日)。Solidityレベル1を備えたブロックチェーンと暗号通貨テクノロジー。Advanced Micro Systems Sdn Bhd。
- ^ “Gavin Wood”. gavwood.com . 2023年3月30日時点のオリジナルよりアーカイブ。2023年3月30日閲覧。
- ^ Nikolic, Ivica; Kolluri, Aashish; Sergey, Ilya; Saxena, Prateek; Hobor, Aquinas (2018 年 3 月 14 日)。「Finding The Greedy, Prodigal, and Suicidal Contracts at Scale」。arXiv : 1802.06038 [cs.CR]。
さまざまなソース言語が EVM セマンティクスにコンパイルされますが、その中で最も主流なのは Solidity です
。 - ^ 「WestpacがSWIFTのブロックチェーン概念実証に参加」ZDNet 。 2022年7月13日閲覧。
- ^ 「Hyperledger Fabric チュートリアル - ロイヤルティポイント用のブロックチェーン アプリを作成する」。IBM Developer。2019年4 月 10 日閲覧。
- ^ 「言語の影響 — Solidity 0.8.17 ドキュメント」。docs.soliditylang.org。2023年3 月 30 日閲覧。
- ^ Kapetanios-2008-06-27、p. 309.
- ^ ethereum. 「Ethereum Natural 仕様フォーマット」。GitHub。
- ^ 「スマートコントラクト入門 — Solidity 0.8.19 ドキュメント」。docs.soliditylang.org 。 2023年3月30日閲覧。
- ^ Schneier, Karthikeyan; Schneier, Antoine; Bhargavan, Cedric; Delignat-Lavaud, Anitha; Fournet, Gollamudi; Schneier, Bruce; Rastogi, Nadim; Sibut-Pinote, Aseem; Rastogi1, Thomas; Swamy, Nikhil; Zanella-Beguelin, Santiago (2016 年 8 月 27 日)。「ショート ペーパー: スマート コントラクトの形式検証」(PDF)。Microsoft Research、French Institute for Research in Computer Science and Automation、ハーバード大学。2016 年 8 月 27 日時点のオリジナルよりアーカイブ(PDF)。
{{cite journal}}: CS1 maint: 数値名: 著者リスト (リンク) - ^ 「Remix - Ethereum IDE」. remix.ethereum.org . 2023年3月30日閲覧。
- ^ 「EthFiddle - ブラウザでのSolidity。Loom Network搭載」ethfiddle.com . 2023年3月30日閲覧。
- ^ 「solidity - Visual Studio Marketplace」. marketplace.visualstudio.com . 2023年3月30日閲覧。
- ^ 「Solidity - IntelliJ IDEs プラグイン | マーケットプレイス」。JetBrainsマーケットプレイス。2023 年3 月 30 日閲覧。
- ^ 「Binance Smart Chain」。GitHub。2021年10月26日。
- ^ Vigna、Michael J. Casey、Paul(2014年11月12日)。「BitBeat:Bitcoin 2.0 Firm Counterparty Adopts Ethereum's Software」。ウォール・ストリート・ジャーナル。ISSN 0099-9660 。 2021年4 月16日閲覧。
- ^ スワン、メラニー(2015)。ブロックチェーン:新しい経済の青写真(第1版)。[カリフォルニア州セバストポル] ISBN 978-1-4919-2047-3. OCLC 900781291.
{{cite book}}: CS1 メンテナンス: 場所が見つかりません 発行者 (リンク) - ^ Tsankov, Petar; Dan, Andrei; Drachsler-Cohen, Dana; Gervais, Arthur; Bünzli, Florian; Vechev, Martin (2018 年 10 月 15 日)。「Securify: スマート コントラクトの実用的なセキュリティ分析」。2018 ACM SIGSAC コンピューターおよび通信セキュリティ会議の議事録。Association for Computing Machinery。pp. 67–82。arXiv : 1806.01143。doi : 10.1145 / 3243734.3243780。hdl :10044/ 1 / 87935。ISBN 978-1-4503-5693-0. S2CID 46936025。
- ^ Atzei, Nicola; Bartoletti, M.; Cimoli, Tiziana (2017)。「Ethereum Smart Contracts (SoK) に対する攻撃の調査」。セキュリティと信頼の原則、第 6 回国際会議、2017 年、議事録。コンピュータ サイエンスの講義ノート。pp. 164–186。doi : 10.1007 / 978-3-662-54455-6_8。ISBN 978-3-662-54454-9. S2CID 15494854。
- ^ Finley, Klint (2016年6月18日). 「5000万ドルのハッキングはDAOがあまりにも人間的であることを示した」Wired (ニュース) . 2017年2月18日閲覧。
- ^ Zheng, Gavin; Gao, Longxiang; Huang, Liqun; Guan, Jian (2020年8月31日). SolidityにおけるEthereumスマートコントラクト開発。Springer Nature. ISBN 978-981-15-6218-1。
- ^ 「Rust を使った開発 | Solana」solana.com . 2024 年8 月 16 日閲覧。
- ^ 「Rust公式ドキュメント」。
- ^ 「Solidity Lang」.
