Uniswap契約開発7つのテクニック解析 分散型金融プロジェクトの効率向上

robot
概要作成中

Uniswapのコードから学んだスマートコントラクト開発のテクニック

最近、分散型取引所の開発チュートリアルを作成する際に、Uniswap V3のコード実装を参考にして、多くの興味深いスマートコントラクト開発のテクニックを学びました。DeFiコントラクトの開発を初めて試みる開発者として、これらのテクニックはコントラクト開発を学びたい初心者にとって非常に役立つでしょう。

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

予測可能なスマートコントラクトアドレス

通常、デプロイされたコントラクトから得られるアドレスはランダムに見えますが、それはnonceに関連しています。しかし、特定のシーンでは、取引の対等情報を通じてコントラクトアドレスを推測する必要があります。たとえば、取引権限を判断したり、プールアドレスを取得したりする場合です。

UniswapはCREATE2方式でスマートコントラクトを作成し、saltパラメータを追加してアドレスを予測可能にします。新しいアドレス生成ロジックは:hash("0xFF", 作成者アドレス, salt, initcode)です。この方法により、コントラクトアドレスを事前に計算することができます。

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

コールバック関数の賢い使い方

Solidity中の契約は相互に呼び出すことができます。特定のシーンでは、AメソッドがBを呼び出し、Bが呼び出されたメソッド内でAをコールバックするというパターンは非常に便利です。

例えばUniswapのswapメソッドで取引を行うと、swapCallbackが呼び出され、実際に必要なTokenの数量が渡されます。呼び出し側はコールバック内でTokenを転送する必要があり、swapを2ステップに分割して呼び出してはいけません。これにより、swapメソッドが完全に実行され、安全性を確保するための煩雑な変数の記録は不要になります。

例外を使用して情報を渡し、try-catch を使用してトランザクションを見積もります

UniswapのQuoterコントラクトでは、try-catchでUniswapV3Poolのswapメソッドを実行しています。これは、swapをシミュレーションして必要なToken数量を予測するためですが、予測時に実際にTokenを交換しないため、エラーが発生します。

Uniswapは取引のコールバックで特別なエラーをスローし、その後そのエラーをキャッチして必要な情報を解析します。この方法は、需要を予測するためにスワップメソッドを改造することを避け、ロジックをよりシンプルにします。

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

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

Uniswapでは、大量の計算が関与しており、価格と流動性に基づいてトークンの交換数量を計算します。除算による精度の損失を避けるため、計算プロセスでは通常、\u003c\u003c FixedPoint96.RESOLUTION操作を使用し、つまり96ビット左シフト、これは2^96倍に相当します。

左に移動した後に除算を行うことで、通常の取引でオーバーフローしない前提の下で精度を保証できます。理論的には依然としてわずかな精度損失がありますが、受け入れ可能です。

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

UniswapはLP(流動性提供者)の手数料収益を記録する必要があります。明らかに、毎回の取引で各LPの手数料を記録することはできません。これは大量のガスを消費します。

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

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

オンチェーンとオフチェーン情報の区別

オンチェーンストレージは相対的に高価であり、すべての情報がオンチェーンである必要はなく、またはオンチェーンから取得する必要もありません。例えば、Uniswapのフロントエンドが呼び出す多くのインターフェースは、従来のWeb2インターフェースです。

取引プールのリストや情報などは通常のデータベースに保存でき、定期的にチェーンから同期されます。リアルタイムでRPCインターフェースを呼び出して関連データを取得する必要はありません。もちろん、重要な取引は依然としてチェーン上で行われます。

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

1つのプロジェクトには、複数の実際に展開された契約が含まれる可能性があります。たとえ1つの契約だけを展開しても、コードは継承を通じて複数の契約に分割して維持することができます。

UniswapのNonfungiblePositionManagerコントラクトは、複数のコントラクトを継承しています。その中でERC721PermitはOpenZeppelinのERC721コントラクトを直接使用しており、NFTを通じてポジションを管理するのに便利で、開発効率も向上しています。

まとめ

実際に手を動かして開発することは、単に記事を読むよりも効果的です。簡易版の分散型取引所を実装してみることで、Uniswapのコード実装をより深く理解し、実際のプロジェクトにおける知識を学ぶことができます。

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

UNI2.6%
DEFI0.73%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 7
  • 共有
コメント
0/400
PoolJumpervip
· 07-28 02:11
ゼロインフラでやること
原文表示返信0
OldLeekConfessionvip
· 07-27 04:18
あなたが私に理解させてくれたら、それだけで素晴らしい...
原文表示返信0
OnchainGossipervip
· 07-27 03:51
実践してみることをお勧めします~
原文表示返信0
BagHolderTillRetirevip
· 07-25 17:02
とうとう私の罠から抜け出す方法を見つけました。
原文表示返信0
PanicSeller69vip
· 07-25 17:00
V3はまだ何かがあります!やった!
原文表示返信0
degenonymousvip
· 07-25 16:58
コードの党の福音です。
原文表示返信0
AirdropDreamBreakervip
· 07-25 16:56
開発するより直接コードを盗む方が良い
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)