DEXプロジェクトを支援するための7つの実用的な契約開発のコツ

契約開発の小技まとめ

最近、分散型取引所の開発をしている際に、有名なDEXのコード実装を参考にして、いくつかの実用的な契約開発のテクニックを学びました。DeFi契約開発に初めて触れる新米として、これらのテクニックは私に大きなインスピレーションを与えてくれました。他の契約開発を学びたい友人たちにも役立つと思います。

! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント

予測可能な契約アドレス

通常、デプロイされたコントラクトのアドレスはランダムに見え、予測が難しい。しかし、特定のシナリオでは、トランザクションのペア情報を通じてコントラクトアドレスを推測する必要がある。たとえば、トランザクションの権限を判断したり、プールのアドレスを取得したりする場合などである。

これはCREATE2方式を使用して契約を作成することで実現できます。具体的な方法は、契約を作成する際にsaltパラメータを追加することです。

ソリディティ プール = アドレス(新しい UniswapV3プール{ソルト: keccak256(abi.encode(トークン0, トークン1, 手数料))}());

このように作成された契約アドレスは予測可能であり、生成ロジックは次のとおりです:

新しいアドレス = hash( "0xFF"、作成者アドレス、ソルト、initcode)

! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント

コールバック関数の利用

特定のシナリオでは、契約間の相互呼び出しが非常に便利です。例えば、AがBのメソッドを呼び出し、Bが呼び出されたメソッド内でAをコールバックします。

取引の例として、プールコントラクトのswapメソッドを呼び出すと、swapCallbackが呼び出され、計算された実際に必要なTokenの数量が渡されます。呼び出し元は、コールバック内でTokenをプールコントラクトに転送する必要があり、これによりswapメソッドの完全な実行と安全性が確保され、煩雑な変数の記録が不要になります。

異常を通じて情報を伝える

取引を予測する際には、実際にトークンを交換することなく、swapメソッドをシミュレートする必要があります。取引のコールバック関数内で特別なエラーをスローし、そのエラーをキャッチして必要な情報を解析することができます。

この方法は一見抜け道のように見えますが、とても実用的です。予測取引のためにスワップ方法を特別に改造する必要がなく、論理がより簡潔です。

! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント

大きな数値は精度の問題を解決します

価格と流動性の計算に関して、除算操作による精度の損失を避けるために、左シフト操作を使用することができます。(は2^96)を掛けることに相当します。

例えば:

ソリディティ numerator1 = FullMath.mulDiv(liquidity << FixedPoint96.RESOLUTION, sqrtRatioBX96 - sqrtRatioAX96, sqrtRatioBX96);

これにより、通常の取引でオーバーフローが発生しない場合に精度を保証できます。理論的にはわずかな精度損失が依然としてありますが、許容範囲内です。

収益を計算するためのシェア方法

手数料をすべてのLPに毎回記録するのを避けるために、Share方式を採用できます。

総手数料と各流動性に分配される手数料を記録するだけです。LPが引き出すときは、保有している流動性に基づいて引き出せる手数料を計算します。これは株式の配当金に似ています。

! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント

オフチェーンデータの合理的な使用

すべての情報がブロックチェーンに保存される必要はなく、またブロックチェーンから取得される必要もありません。取引プールのリストや基本情報などは、通常のデータベースに保存し、定期的に同期すればよいのです。

いくつかの高度なRPCインターフェースは、キャッシュ最適化されたデータ取得方法を提供しており、パフォーマンスと効率を向上させることができます。

コントラクトの分割と再利用

大規模なプロジェクトは、複数の実際にデプロイされた契約に分割することができるか、または継承を通じて複数の契約に分割して維持することができます。

同時に、ERC721などの既存の標準契約を再利用することで、開発効率を向上させることができます。例えば:

ソリディティ contract NonfungiblePositionManager は 非代替性ポジションマネージャー, PeripheryImmutableState、 プールイニシャライザー, 流動性管理、 PeripheryValidation、 マルチコール、 ERC721許可証、 ペリフェリーペイメント、 NFTディスクリプタ { // ... }

優れたプロジェクトのコード実装を学び、自分で開発を試みることで、分散型取引所についてより深く理解できるようになります。これらの小さなヒントがあなたの契約開発に役立つことを願っています!

! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント

UNI-1.47%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 5
  • リポスト
  • 共有
コメント
0/400
LayerZeroEnjoyervip
· 08-01 16:48
BTCはすべて炸裂したのに、まだdefiを研究しているのか。
原文表示返信0
degenwhisperervip
· 08-01 00:26
直接uniのコードをコピーする
原文表示返信0
GateUser-40edb63bvip
· 07-29 21:17
このスマートコントラクトフックはすごく高級ですね
原文表示返信0
PoetryOnChainvip
· 07-29 21:03
実際にはuniをコピーするだけです...
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)