メインコンテンツへスキップ

スマートコントラクトに対するセキュリティ・ガイドライン

Solidityスマートコントラクトセキュリティ
中級
Trailofbits
セキュアなコントラクトの構築(opens in a new tab)
2020年9月6日
10 分の読書 minute read

以下に挙げる主な推奨事項を遵守することで、よりセキュアなスマートコントラクト開発が実現します。

設計ガイドライン

まず、コードを書く前に、コントラクトの設計について十分に議論を深める必要があります。

ドキュメンテーションおよび使用

ドキュメンテーションは様々な水準で作成でき、コントラクトの実装時に内容を修正する必要があります。

オンチェーン処理とオフチェーン処理の比較

  • できるだけ多くのコードを、オフチェーンで処理するようにします。オンチェーンのレイヤーに含まれるコードは、小規模になるようにしてください。 オンチェーンでの検証がシンプルに実行できるように、オフチェーンのコードでデータを前処理します。 順序付きリストが必要か確認します。 必要な場合は、オフチェーンでリストをソートしてから、オンチェーンでは順序のみをチェックするようにします。

アップグレード可能性

アップグレードに関する様々なソリューションについては、こちらのブログ投稿(opens in a new tab)で検討しています。 コード開発を開始する事前に、アップグレードに対応するか否かをはっきり決定してください。 この決定により、どのような構造のコードを開発するべきかが変わってきます。 一般論として、以下を推奨します:

実装に関するガイドライン

シンプルさを追求する。常に、目的を達成する上で最もシンプルなソリューションを使用してください。 あなたのソリューションは、チーム全員が理解できるものでなければなりません。

関数の構成

コードベースのアーキテクチャは、レビューしやすいものでなければなりません。 コードの正確性を判定しにくくするようなアーキテクチャ関連の決定は避けてください。

  • システムのロジックを分割する。複数のコントラクトに分割するか、類似の関数(認証、算術塩酸など)をグループ化しましょう。
  • 明確な目的を持つ小規模の関数を書く。レビュー作業が容易になり、コンポーネントごとのテストが可能になります。

継承

イベント

  • すべての重要操作をロギングする。イベントログは、開発時におけるコントラクトのデバッグやデプロイ後の監視に役立ちます。

既知の落とし穴を回避する

依存関係

テストと検証

Solidity

デプロイに関するガイドライン

コントラクトの開発が完了し、デプロイしたら、以下を確認します:

最終編集者: @pettinarip(opens in a new tab), 2023年12月8日

このチュートリアルは役に立ちましたか?