ゼファーネットのロゴ

ステーキング プロトコルの監査に関するガイドライン

日付:

読み取り時間: 6

このブログでは、流動性ステーキング プロトコルの概念と、ステーキング プロトコルの監査ガイドラインについて概説しました。 このガイドラインは、出金メカニズム、丸めエラー、外部呼び出し、手数料ロジック、ループ、構造体、ステーキング期間など、さまざまな脆弱な箇所をカバーしています。このブログ投稿は、ステーキング プロトコルを監査するための参考資料として役立ち、潜在的なバグを特定するのに役立ちます。 .

流動性ステーキングとは?

流動性ステーキングにより、ユーザーは流動性を犠牲にすることなく、保有する暗号通貨を賭けて報酬を得ることができます。 コインを一定期間ロックする代わりに、ユーザーはステークされた資産を表す液体トークンを受け取ることができます。 このトークンは、他の暗号通貨と同様に取引または使用できるため、ユーザーはステーキング報酬を獲得しながら、資産を好きなように使用できます。

たとえば、イーサリアム ネットワークに 100 ETH を賭けたいとします。 ETH を一定期間ロックする代わりに、Lido のような流動性ステーキング サービスを使用して ETH をステーキングし、見返りに stETH と呼ばれる液体トークンを受け取ることができます。 stETH を使用すると、ステーキング報酬を獲得しながら、ステークした ETH を取引または使用することができます。

ステーキング契約の監査を始めましょう:

契約コードを開始する前に、利用可能なすべての監査仕様を調べてください。 それは、ホワイト ペーパー、README ファイル、またはその他の形式である可能性があります。 これにより、コントラクト コードに含まれる内容がわかります。

ステーキング契約の監査仕様書を見るときは、次の点を探してください。

  • 手数料の種類とその計算。
  • ステーキングされたトークンの報酬メカニズム
  • 所有者の権限
  • 契約はETHを保持しますか?
  • コントラクトはどのようなトークンを保持しますか?
  • 分岐元の元の契約

仕様がコードと一致していることを確認してください。 料金とトークノミクスから始めて、所有者の権限を検証します。 すべての報酬と手数料の値がドキュメントに従っていることを確認してください。

脆弱な場所を探すには?

1. 報酬の引き出しメカニズム:

ステーキングされたトークンの報酬メカニズムが正しく実装されていること、および報酬がすべてのステーカーに公平かつ比例的に分配されていることを確認してください。 プロジェクトは、XNUMX つの方法で報酬を配布できます。自動、定期的、またはユーザー自身の要求によるものです。 撤回機能は、プロトコルのビジネス ロジックに従って実装およびカスタマイズできます。
以下にいくつかのチェックポイントを示します。

  • 報酬 + 賭け金以上を引き出すことができるユーザーがいるかどうかを確認します。
  • 金額計算のオーバーフロー/アンダーフローをチェック
  • 特定のパラメーターが計算中に報酬に悪影響を与える可能性があるかどうかを確認します。
  • この関数で block.timestamp または block.number が使用されている場合。 何らかの方法で悪用できるかどうかを確認してください。

2. 料金ロジック:

入出金に手数料がかかる場合は、どのユーザーも手数料を回避できないことを確認してください。 さらに、潜在的なオーバーフローまたはアンダーフローの問題に注意してください。 料金設定の変更は、管理者または所有者のみに許可する必要があります。 また、最大料金のしきい値が確立されていることを確認し、管理者が過度に高い金額を設定しないようにします。

3. LP トークンの発行/燃焼メカニズム:

作成および書き込みメカニズムが正しく実装されているかどうかを確認します。 書き込み関数は、ミント関数によって行われたすべての状態変更を元に戻す必要があります。 さらに、プールが空のときに、ユーザーが最初のステーク中に適切な量のトークンを受け取ることを確認することが重要です。

ミント機能とバーン機能のロジックを数学的に検証して、隠れた脆弱性を明らかにすることができます。 また、発行された LP トークンの総供給量は、ステークされた資産を超えてはなりません。

4. 丸め誤差:

特定の小さな丸めミスは通常避けられず、問題ではありませんが、乗算が可能になると大幅に増加する可能性があります。 ステーキングとアンステーキングを繰り返すことで、丸め誤差から利益を得ることができるエッジケースを探してください。

丸め誤差が長期間にわたってかなりの量に達する可能性があるかどうかを判断するには、丸め誤差の範囲を数学的に計算します。

5. ステーキング期間:

コントラクトのステーキング期間の計算が、指定されたビジネス ロジックと一致していることを確認します。 期間チェックをバイパスして、ステーキング期間が終了する前にユーザーが報酬を引き換えることができないことを確認します。 また、攻撃者がステーキングの期間を悪用して、より多くの報酬を得ることができるかどうかを確認してください。

6. 外部呼び出しとトークン処理:

外部呼び出しのほとんどは、トークン コントラクトに対するものになります。 したがって、ステーキング コントラクトが処理するトークンの種類を決定する必要があります。 エラーや再入攻撃がないか、外部呼び出しをチェックすることが不可欠です。 Safemoon などのデフレトークンまたは送金手数料のあるトークンは、ロジックが正しく実装されていない場合、問題を引き起こす可能性があります。

7. 価格操作チェック:

フラッシュ ローンによる価格操作は、DeFi プロジェクトで最も頻繁に行われるハッキングの XNUMX つです。 悪意のあるアクターがフラッシュ ローンを使用して、大量のトークンのステーキングまたはアンステーク中に価格を操作できる状況が発生する可能性があります。 ステーキング機能とアンステーキング機能を慎重に見直して、フラッシュ ローン ベースの価格操作攻撃や他のユーザーの資金の損失につながる可能性のあるエッジ ケース シナリオを回避します。

8. いくつかの追加チェック:

  • ループ: コントラクト ロジックに配列のループが含まれる場合は、ブロック ガスの制限を超えないようにすることが重要です。 これは、配列のサイズが非常に大きい場合に発生する可能性があるため、どの関数が配列のサイズを増加させる可能性があるか、およびユーザーがそれを悪用して DoS 攻撃を引き起こす可能性があるかどうかを調査する必要があります。 これをチェックしてください レポート.
  • 構造体: ステーキング コントラクトは、構造体型を使用してユーザー データまたはプール データを格納します。 関数内で構造体を宣言またはアクセスする場合、「メモリ」または「ストレージ」のどちらを使用するかを指定することが重要です。 ガスの節約に役立つかもしれません。 詳細については、を参照してください。 この記事へ.
  • フロントランニング: 悪意のあるアクターが有利になるようにトランザクションをフロントランする可能性のあるシナリオを探します。
  • 機能の可視性/アクセス制御チェック: external または public として宣言された関数は、誰でもアクセスできます。 したがって、パブリック関数が機密性の高いアクションを実行できないようにすることが重要です。 ステーキングされたコインとシステムのインフラストラクチャの両方への不正アクセスを防ぐために、ステーキング プロトコルが適切な制御を実装していることを確認することが重要です。
  • 集中化のリスク: 所有者に過度の権限を与えないことが重要です。 管理者アドレスが侵害された場合、プロトコルに重大な損害を与える可能性があります。 所有者または管理者の権限が適切であることを確認し、管理者の秘密鍵が漏洩した場合に対処するための計画がプロトコルにあることを確認してください。
  • ETH / WETHの取り扱い: コントラクトには、多くの場合、ETH を処理するための特定のロジックが含まれています。 たとえば、msg.value > 0 の場合、コントラクトは ETH を WETH に変換しながら、WETH を直接受け取ることができます。 ユーザーが通貨として WETH を指定し、通話で ETH を送信すると、特定の不変条件が崩れ、誤った動作につながる可能性があります。

これまで、流動性ステーキング プロトコルとそのようなプロトコルの監査ガイドラインについて説明してきました。 一言で言えば、流動性ステーキングにより、ユーザーは流動性を犠牲にすることなくステーキング報酬を獲得できます。 監査人が注意を払わなければならないステーキング契約の弱点を概説しました。これには、引き出しメカニズム、手数料ロジック、LP トークンの作成/燃焼メカニズム、丸め誤差、ステーキング期間、外部呼び出し、価格操作チェックなどがあります。 

監査人は、監査仕様書を調べ、仕様とコードを照合し、料金とトークノミクスの検証を確認することをお勧めします。 また、配列のループ、構造体型データのメモリまたはストレージの指定、フロントランニング シナリオなどの追加のチェックをお勧めします。 これらのガイドラインは、ステーキング プロトコルの監査に役立ち、潜在的なバグを特定するのに役立ちます。


4 ビュー

スポット画像

最新のインテリジェンス

スポット画像