Cointime

Download App
iOS & Android

スマートコントラクト開発の中核課題:各段階でのセキュリティの確保

著者: Roman Palamarchuk編集: Cointime.com 237

スマート コントラクトは、多くのブロックチェーン アプリケーションの中心です。これらは分散システムの信頼を促進する上で不変ですが、これは開発サイクル中に厳格なセキュリティ対策が必要であることも浮き彫りにしています。

スマート コントラクトは、その可能性にもかかわらず、リエントラント攻撃やフラッシュ ローン攻撃などの脅威に対して脆弱でもあります。誤解や計算ミスも、予期せぬ脆弱性や攻撃につながる可能性があります。

これらのリスクを軽減するために、安全なスマート コントラクト開発のさまざまな段階をカバーし、実用的な洞察とガイドラインを提供します。

セキュアなスマートコントラクト開発の概要

安全なスマート コントラクトの開発にはいくつかの重要な段階があり、それぞれの段階で細心の注意と理解が必要です。

1. セキュリティスマートコントラクト設計の考慮事項

スマートコントラクト設計の基本原理を説明し、ブロックチェーンを理解すること、設計をシンプルかつモジュール化することなどの重要性を強調します。

2. 安全なスマートコントラクト開発実践

安全なスマートコントラクト開発のための効果的な実践方法を共有します。

3. スマートコントラクトのテストとレビュー

このセクションでは、徹底的なテストの重要性を強調し、スマート コントラクトを分析するためのさまざまなツールを紹介します。

4. 安全なスマートコントラクトを導入する

スマート コントラクトの導入段階での重要なセキュリティの考慮事項について説明します。

5. スマートコントラクトのセキュリティを維持する

最後に、スマート コントラクトの長期的なセキュリティを確保するために、継続的な監視と更新の必要性を強調します。

各段階では、経験豊富な Web3 開発者であっても、好奇心旺盛な起業家であっても、スマート コントラクト開発のこれらの複雑な側面を理解し、実装しやすくするために、実際の例と洞察を組み込みます。

安全なスマートコントラクトのための設計上の考慮事項

安全なスマート コントラクトを設計するには、いくつかの基本概念を完全に理解し、いくつかの設計原則に従う必要があります。

1. システムの基礎となるビジネス ロジックを慎重に設計することが、安全なスマート コントラクトを開発する鍵となります。ロジックは強力かつ明確で、プロジェクトの目標と一致している必要があります。

このロジックを設計することは、既存の市場ソリューションを模倣するだけではなく、そのソリューションの長所と短所を理解し、改善することでもあります。このプロセスには、他の人が直面している同様の課題を調査し、そこから学び、それらの洞察を使用して自分の設計を改善することが含まれます。

このロジックを設計することは、既存の市場ソリューションを模倣するだけではなく、そのソリューションの長所と短所を理解し、改善することでもあります。このプロセスには、他の人が直面している同様の課題を調査し、そこから学び、それらの洞察を使用して自分の設計を改善することが含まれます。

各システムは固有であり、あるシステムで機能するものが別のシステムでは機能しない可能性があることに注意してください。したがって、潜在的な落とし穴を見つけるには、独自のソリューションを批判的に分析することが不可欠です。システムが遭遇する可能性のあるエッジケースと、スマートコントラクトがそれらにどのように対処するかを考慮してください。以下で説明する「スリッページ」の例など、実装から生じる悪用の機会に注意してください。

2. ブロックチェーン技術の本質をマスターすることが不可欠な前提条件です。これには、トランザクションの仕組み、分散台帳の詳細、公開鍵と秘密鍵の影響についての理解が含まれます。さらに、安全なスマート コントラクトを開発する場合は、サードパーティ システムの統合を完全に理解することが重要です。 UniswapV3 統合の監査から得られた実際の例は、包括的な理解が不足している場合に何が起こるかを明確に示しています。

このコード スニペットでは、入力金額として _sellAmount を使用し、amountOutMinimum をゼロに設定して、UniswapV3 スワップ操作が実行されます。この設定、つまり出力トークンの最小量 (amountOutMinimum) をゼロに設定すると、「スリッページ」として知られる一般的な問題が発生する可能性があります。

Uniswap のような分散型取引所では、スリッページは、予想される取引価格と実際に実行された取引価格の差を表します。これは、市場が不安定なときに成行注文を使用するときによく発生します。この場合、下限が設定されていないため、市場の変動によりトレーダーが受け取るトークンの量が予想よりも少なくなる可能性があります。

このような問題は特定の市場条件下で現れることが多いため、テスト中に検出するのは難しい場合があります。開発者にとって、このような脆弱性を見つけることも同様に困難です。綿密な計画と厳格なテストにもかかわらず、これらの微妙な点は見過ごされる可能性があり、開発プロセスにおける監査の重要な役割と、これらの隠れたリスクを発見して対処する専門の監査人の必要性を浮き彫りにしています。

3. シンプルさとモジュール性の原則は、スマート コントラクト設計のもう 1 つの柱です。シンプルであることでバグが隠れるリスクが軽減され、開発者とユーザー間の理解が深まります。モジュール性によりプログラムが個別の機能コンポーネントに分割されるため、エラーの特定が容易になり、トラブルシューティングが簡素化され、開発の柔軟性が向上します。

4. 初期設計段階では、アップグレード可能性も考慮する必要があります。ブロックチェーンは不変であるため、スマート コントラクトのアップグレードには、プロキシ コントラクトの使用、データとロジックの分離、前方互換性の確保などの戦略を実装する必要があります。

安全なスマートコントラクト開発実践

システム アーキテクチャを慎重に計画し、使用するサードパーティ サービスを徹底的に理解し、よく考えられた更新戦略を策定したら、開発フェーズに進む準備が整います。

頻繁に繰り返されるセキュリティ開発のヒントに加えて、次のようなものがあります。

1. 最新の Solidity バージョンを使用します。

2. 契約機能を制限します。

3. Assert、Require、および Revert 関数を実装します。

4. チェック - 効果 - 相互作用のパターンに従います。

5. 役割とその権限を慎重に割り当てます。

6. スマートコントラクトをテストします。

このリストに私自身の提案を追加したいと思います。

1. ガスの最適化を優先する

6. スマートコントラクトをテストします。

このリストに私自身の提案を追加したいと思います。

1. ガスの最適化を優先する

スマート コントラクトはガスに制限があり、慎重な最適化が必要です。すべての操作でガスコストが発生し、これらのコストは非常に変動しやすいです。不必要な計算を排除し、適切なデータ型を選択し、外部コントラクト呼び出しのガスコストを考慮して、コードを最適化します。可変パッキングを考慮し、ループ操作のガス効率を評価します。これにより、インタラクション コストが削減されるだけでなく、悪用される可能性のあるガスアウト バグのリスクも削減されます。次のセクションでは、ガス使用量を確認するためのツールについて説明します。

2. サードパーティの統合は慎重に処理してください

前述したように、使用する予定のサービスを理解することが重要です。各変数の役割を理解し、潜在的な落とし穴を確認し、データ ソースの関連性を確認します。たとえば、ChainLink からの価格はタイムラインを検証し、タイムラインが古くならないようにする必要があります。

3. 公式コーディング スタイル ガイドに従い、NatSpec ドキュメントを使用します。

公式コーディング スタイル ガイドに従ってコードを記述し、ドキュメントに NatSpec を使用すると、コードの可読性が大幅に向上します。これは、コードをレビューする必要があるサードパーティの開発者や監査人にとって特に有益です。この理解の強化により、エラーやセキュリティ上の問題が発生する可能性が軽減されます。

スマートコントラクトのテストとレビュー

スマート コントラクト開発では、徹底的なテストの重要性を過小評価することはできません。スマート コントラクトの不変性と処理される高額トランザクションを考慮すると、気付かれないエラーや脆弱性が取り返しのつかない結果につながる可能性があります。したがって、単体テストは非常に重要であり、100% のコード カバレッジを達成することが最善です。これにより、すべての関数、分岐、コード行が確実に検証され、実際の環境での予期せぬ動作や悪用のリスクが軽減されます。

Solidity コードのカバレッジをテストするには、Solidity Coverage プラグインを使用することをお勧めします。 Solidity Gas Reporter (Hardhat に組み込まれており、他のツールのスタンドアロン プラグインとしても利用可能) と連携して、さまざまなネットワーク上でスマート コントラクトのパフォーマンス、トランザクション コスト、その他の側面をテストするのに役立ちます。

また、突然変異テストのアプローチを使用することを強くお勧めします。このアプローチでは、テストスイートの品質を測定し、システムに一連の「突然変異」または変更を加え、わずかに異なるバージョンのソフトウェアを作成し、これらの亜種をテストしてテストが検出できるかどうかを評価することによって、テストが不十分なソフトウェア領域を特定します。変化します。

SuMo は、Solidity ベースのスマート コントラクト用に設計された優れた突然変異テスト ツールです。 SuMo は、ソース コードに小さなバグや「突然変異」を挿入し、テスト スイートがこれらの変更を検出できたかどうかを評価することで、テストの堅牢性を評価できます。このプロセスはテストの弱点を特定するのに役立ち、それによって全体的な品質が向上します。

SuMo には、従来のオペレーターや Solidity 専用のオペレーターなど、選択できるミューテーション オペレーターが多数あり、プロジェクトのニーズに応じてオンまたはオフにすることができます。また、ミューテーション テスト プロセスのカスタマイズ オプションも提供され、ミューテーション用に特定のコントラクトとテスト ケースを選択できます。さらに、SuMo のテスト インターフェイスは柔軟で多様で、さまざまなテスト フレームワークやブロックチェーン シミュレーターと互換性があります。

SuMo の詳細については、GitHub のプル リクエストを参照してください。

https://github.com/MorenaBarboni/SuMo-SOlidity-MUtator

上記の実践に加えて、Slither、Solgraph、Mythril、Echidna、MythX、Semgrep などの分析ツールの使用を強くお勧めします。これらのツールは、潜在的な脆弱性の検出、契約の依存関係の視覚化、セキュリティ プロパティの分析、既知の問題のスキャンに役立ちます。これらのツールを利用すると、契約の完全な監査が可能になり、全体的なセキュリティが強化されます。

セキュリティ監査の実施は、スマート コントラクトの堅牢性を確保するためのもう 1 つの重要なステップです。この監査は、抜け穴やエラーを検出するために、独立機関による契約コードの体系的なレビューとなります。このプロセスにより、展開前にコントラクトのセキュリティと整合性がさらに保証されます。

安全なスマートコントラクトの導入

スマート コントラクトの展開フェーズは、その開発と同じくらい重要です。導入プロセスの整合性は、契約のセキュリティと操作性に大きく影響します。したがって、スムーズで安全な展開を確保するには、いくつかの問題に対処する必要があります。以下にいくつかの提案を示します。

1. まずテストネットワークを使用します

スマート コントラクトをメインネットにデプロイする前に、必ずテスト ネットワーク (Ropsten、Rinkeby、Kovan など) にデプロイしてください。これにより、メインネットをシミュレートしながら実際の資金をリスクにさらさないネットワークでのテストが可能になります。

2. 複数回のテスト

スマート コントラクトをメインネットにデプロイする前に、必ずテスト ネットワーク (Ropsten、Rinkeby、Kovan など) にデプロイしてください。これにより、メインネットをシミュレートしながら実際の資金をリスクにさらさないネットワークでのテストが可能になります。

2. 複数回のテスト

単体テスト、統合テスト、システムテスト、受け入れテストなど、さまざまなレベルで複数回のテストを実施します。これは、あらゆるレベルでバグや脆弱性を特定するのに役立ちます。

3. 反復可能な自動展開プロセスを使用する

これは、Truffle 移行などのスクリプト可能な展開ツールを使用して実現できます。目標は、展開プロセスが決定的で反復可能であり、可能な限り自動化されるようにすることです。

4. タイムロック機構の追加

時間制限のあるアップグレードや変更を契約に組み込みます。これにより、ユーザーは変更に異議を唱える時間が与えられ、追加のセキュリティ層が提供されます。

5. 機能の権限を制限する

契約内の各機能の権限、特に展開および管理の権限に関連する権限を制限します。これは、不正アクセスを防止し、攻撃から保護するためです。

6. ソースコードを検証する

デプロイ後、Etherscan などのブロックチェーン エクスプローラーでコントラクトのソース コードを確認します。このプロセスにより、誰もが契約を読んでその機能を理解できるようになるため、透明性が高まります。

7. 非常停止機構

契約に「緊急停止」の仕組みを追加する。このようにして、異常またはエラーが検出されたときに、契約の特定の機能を一時停止できます。

スマートコントラクトのセキュリティを維持する

導入後のフェーズに移行するとき、セキュリティの維持は、スマート コントラクトの導入後に終了する 1 回限りのタスクではないことを認識する必要があります。むしろ、これは継続的なプロセスであり、継続的な監視と継続的なメンテナンスが必要です。導入されたスマート コントラクトのセキュリティを管理および維持するための効果的な戦略をいくつか紹介します。

1. スマートコントラクトを継続的に監視するためのリアルタイム追跡システムの導入は効果的な戦略です。 Hacken Extractor などのシステムは、取引量の突然の急増、不審な取引、契約残高の大幅な変更など、異常なアクティビティを警告します。契約のガス使用量を監視すると、ネットワークとの相互作用に関する貴重な洞察が得られ、最適化の潜在的な領域や問題の存在を特定するのに役立ちます。

2. 導入後のセキュリティ保守のもう 1 つの重要な側面は、バグ報奨金プログラムの効果的な使用です。バグ報奨金プログラムを確立することで、コミュニティがスマート コントラクトの脆弱性の発見と報告を支援するよう奨励できます。 HackenProof のようなプラットフォームは、これらのスキームを管理するための専用サービスを提供し、このプロセスの安全な環境を確保します。これにより、契約のセキュリティが強化されるだけでなく、セキュリティへの取り組みを示すことでユーザーとの信頼も構築されます。

3. 最後に、エコシステムで発見された最新の脆弱性を常に把握しておくことが重要です。イーサリアム セキュリティ コミュニティのようなプラットフォームは、スマート コントラクトの脆弱性の最新リストを編集し、維持しています。これらのプラットフォームを定期的にチェックしたり、アップデートを購読したりすると、潜在的な脅威について常に知ることができます。

要約すると、スマート コントラクトを安全に保つための鍵は、監視、監査、更新の継続的なサイクルであり、チーム内でセキュリティ第一の文化を醸成することです。

結論は

設計、開発、テストとレビュー、展開、メンテナンスの 5 つの主要なフェーズはすべて、独自のセキュリティに関する考慮事項を必要とします。思慮深く堅牢な設計、入念な開発、徹底したテスト、慎重な導入、継続的なメンテナンスはすべて、このプロセスの重要な側面です。さらに、エコシステム内の最新の脆弱性を認識し、バグ報奨金プログラムなどの取り組みを通じてコミュニティの力を活用することで、スマート コントラクトのセキュリティを大幅に強化できます。

結局のところ、スマート コントラクトを安全に作成、展開、維持するには、しっかりとした理解、慎重な計画、徹底的なテスト、そして継続的な警戒が必要です。セキュリティが不完全だと経済的損失や評判の低下などの結果につながる可能性があるため、これらの取り組みは非常に重要です。これらの洞察と実践を武器に、開発者とチームは、進化し続けるブロックチェーン テクノロジーの分野に安全なスマート コントラクトを貢献できます。

コメント

全てのコメント

Recommended for you

  • ヴィタリク氏:仮想通貨ユーティリティの最低点は過ぎた

    ヴィタリック・ブテリン氏は、仮想通貨ユーティリティの最低点は過ぎたとツイートした。テクノロジーの観点から見ると、過去 5 年間の最大の発展は主に、ブロックチェーンのスケーラビリティ問題が差し迫った解決を迎えたことです。 Vitalik氏は特に予測市場Polymarketに言及し、今春のインタビュー後、同社がイーサリアム上に存在することに非常に満足していると述べた。

  • FBI:仮想通貨取引所の従業員になりすまして資金を違法に盗む詐欺師に注意してください

    FBIは8月1日、詐欺師が仮想通貨取引所の従業員になりすまして、一方的なメッセージや電話を通じて資金を盗んでいると警告を発し、アカウントに問題があると主張して被害者にログインメッセージを提供させた。リンクをクリックするか、識別情報を共有します。

  • 7月の安定通貨発行額は1,443億米ドルに増加し、USDTの市場シェアは78.9%に達した

    TheBlockProのデータによると、7月のチェーン上のステーブルコインの調整後の取引量は18.8%増加して9,974億米ドルに達し、ステーブルコインの供給量は1.2%増加して1,443億米ドルに達し、そのうちUSDTとUSDCが市場シェアを占めていた。それぞれ78.9%と17.1%。さらに、ビットコインとイーサリアムの調整後のオンチェーン取引量は全体で31.8%増加し、4,450億米ドルに達しました。このうち、ビットコインの調整後のオンチェーン取引量は34.7%増加し、イーサリアムの調整後オンチェーン取引量は4,450億米ドルに増加しました。 27.7%。

  • アラブ首長国連邦のドバイ商業銀行が仮想資産サービスプロバイダーの専用口座を開設

    アラブ首長国連邦(UAE)のドバイ商業銀行(CBD)は、顧客の資金を管理し、規制上の健全性要件を満たすために、仮想資産サービスプロバイダー(VASP)の専用口座を開始しました。CBDは中央銀行に準拠するための専用口座を開始しました。 UAE およびドバイ仮想資産規制庁 (VARA) の規制。 CEOのベルント・ファン・リンダー氏は、この動きはドバイ商業銀行の中核的な銀行サービスと一致しており、デジタル経済の発展を促進する同銀行の計画を支援すると述べた。

  • ブロックチェーン融資プロトコルMorphoがRibbit Capital主導で5,000万米ドルの資金調達を完了

    DeFi企業モルフォは、CEOのポール・フランボットがまだ大学3年生だったときに1,800万ドルの資金を調達した。今回、モルフォはプライベートトークンセールを通じて5000万ドルを調達したが、評価額は明らかにしなかった。この戦略的資金調達ラウンドは、Robinhood、Revolut、Coinbaseなどの金融テクノロジー企業への初期投資家であるRibbit Capitalが主導しました。

  • 北京:預金保管と家賃監督におけるデジタル人民元の使用を奨励

    「北京市住宅賃貸保証金保管及び家賃監督暫定措置」が発布された。本措置は、本市内で他人の住宅を借りて転貸事業を行う住宅賃貸事業者が賃借人から徴収する敷金及び家賃の保管、監督、管理にも適用されるとしている。この市は、預金の保管と家賃の監督にデジタル人民元の使用を奨励しています。

  • アクティブな融資額は2022年初頭以来の最高水準に戻り、これはDeFiが再び回復していることを示している可能性がある

    ゴールデン・ファイナンスは、仮想通貨市場分析プラットフォームのトークンターミナルが7月31日の記事で「DeFiは再び回復しつつある」と述べたと報じた。データによると、アクティブ融資量やTVLなどの主要指標は最近の最低水準である2023年から上昇しており、その中にはアクティブ融資額も含まれている。融資額は約133億ドルと2022年初め以来の高水準に戻っており、これは「強気市場の先行指標」であるレバレッジが上昇していることを意味する可能性がある。

  • 7月末のグレースケール位置データ更新:GBTCは約241,000BTCに下落、ETHEは約207万ETHを保有

    Grayscale は、7 月 31 日の時点でビットコインとイーサリアムのファンド データを次のように公式に更新しました。

  • 7月のビットコインチェーンのNFT売上高は約7,730万ドルで、2023年11月以来の最低記録となった

    Cryptoslamのデータによると、7月のビットコインチェーンにおけるNFT売上高は77,311,729.1ドルで、2023年11月以来の最低記録を樹立した。さらに、7月のビットコインチェーン上のNFT取引数は12万件未満で、これも2023年11月以来の最低水準となった。その中には、約35,477人の独立した売り手と約49,348人の独立した買い手がいた。

  • Upbit、Bithumb、Coinoneが規制手数料の支払いを開始、総額3億ウォンに上る見込み

    仮想資産ユーザー保護法の施行に伴い、Upbit、Bithumb、Coinone などの仮想資産サービスプロバイダーも規制手数料の支払いを開始します。規制手数料は営業利益に応じて徴収され、総額は3億ウォン(22万ドル)になる見通しだ。 暗号資産サービスプロバイダーの規制上の負担額は、前営業年度の営業利益と負担率に基づいて計算されます。 2024年の株価に基づくと、Upbitの手数料は約2億7,200万ウォン(19万9,000ドル)、Bithumbの手数料は約3,650万ウォンとなる。 CoinoneとGopaxはそれぞれ603万ウォンと83万ウォンである。昨年の営業収益が約17億ウォンだったコルビットは、規制負担金の支払い対象外となっている。規制上の拠出金の実際の徴収は来年開始される。 「監督手数料」とは、金融監督局の検査を受ける金融会社などの金融機関が、監督やサービスの対価として金融監督局に支払う準税金だという。この税は営業利益が30億ウォン(220万ドル)以上の規制対象企業に課される。