Uniswap契約開発7つのテクニック:分散型金融プロジェクトの効率と安全性を向上させる

robot
概要作成中

コントラクト開発のヒント:Uniswapのコードから学んだ貴重な経験

最近、分散型取引所の開発チュートリアルを作成する際に、Uniswap V3のコード実装を研究することで、契約開発の技術を多く学びました。Defi契約開発に初めて触れる新参者として、これらの小さな技術は私にとって非常に示唆に富んでおり、契約開発を学びたい他の新参者にも役立つと信じています。

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

予測可能なコントラクトデプロイアドレス

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

UniswapはCREATE2方式でコントラクトを作成し、"salt"パラメータを追加することで作成されたコントラクトアドレスを予測可能にします。新しいアドレス生成ロジックは:hash("0xFF", 作成者のアドレス, salt, initcode)です。この方法は多くの状況で非常に便利です。

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

コールバック関数の有効活用

Solidityの契約は互いに呼び出すことができます。時にはAがBのメソッドを呼び出し、Bが呼び出されたメソッド内でAをコールバックすることがあり、これは特定のシナリオで非常に便利です。

たとえば、Uniswapのswapメソッドでは、UniswapV3PoolコントラクトがswapCallbackを呼び出し、今回の取引で必要なトークンを渡します。呼び出し元は、コールバック内で必要なトークンをUniswapV3Poolに転送する必要があり、swapメソッドを分割する必要はありません。これにより、swapメソッドの安全性と完全な実行が保証され、面倒な変数の記録が不要になります。

異常を使って情報を伝え、try catchを使って取引の予測を実現する

UniswapのQuoterコントラクトでは、try catchを使用してUniswapV3Poolのswapメソッドを実行します。これは、swapをシミュレートして取引に必要なトークンを予測するためです。予測時には実際にトークンが交換されないため、エラーが発生します。Uniswapはコールバック関数内で特別なエラーをスローし、そのエラーをキャッチして必要な情報を解析します。

この方法は一見近道に見えますが、非常に実用的です。取引需要を予測するためにスワップ方法を変更する必要がなく、論理がより単純です。

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

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

Uniswapのコードには、現在の価格と流動性に基づいてトークンの交換を計算する多くの計算ロジックが含まれています。除算操作による精度の損失を避けるために、計算プロセスではしばしば「<< FixedPoint96.RESOLUTION」という操作が使用され、これは96ビット左シフトすることを意味し、2^96を掛けるのと同じです。左シフト後に除算を行うことで、通常の取引でオーバーフローしない限り精度が保証されます。

理論的には微小な精度の損失があるものの、受け入れ可能である。

シェア方式での収益計算

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

Uniswapのポジション構造には、feeGrowthInside0LastX128とfeeGrowthInside1LastX128が含まれており、各ポジションの手数料が最後に引き出しられた時点での各流動性の手数料が記録されています。

総手数料と各流動性に割り当てられる手数料を記録するだけで、LPが引き出す際には保有している流動性に基づいて引き出せる手数料が計算されます。会社の株式を保有しているのと似ており、収益を引き出す際には過去の1株当たり利益と最後の引き出し時の利益を知っているだけで済みます。

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

重要でない情報はブロックチェーンに載せる必要はありません

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

取引プールのリストや情報は通常のデータベースに保存でき、一部は定期的にブロックチェーンから同期する必要があります。関連データを取得するために、リアルタイムでチェーンやノードサービスのRPCインターフェースを呼び出す必要はありません。

もちろん、重要な取引はチェーン上で行われなければなりません。

契約分割と標準契約の活用

プロジェクトには、実際にデプロイされた複数の契約が含まれる可能性があります。実際にデプロイされるのが1つであっても、継承を通じて複数の契約に分割して管理することができます。

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

まとめ

簡易版の分散型取引所を実際に開発することで、Uniswapのコード実装をより深く理解し、実際のプロジェクトにおける知識をさらに学ぶことができます。どれだけ記事を読んでも、実際に手を動かすことが何よりも重要です。これらの経験が、契約開発を学びたい初心者の方々に役立つことを願っています。

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

UNI4.73%
DEFI0.99%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 10
  • リポスト
  • 共有
コメント
0/400
GasGuzzlervip
· 07-18 21:18
やめて、初心者とそんなに深く遊ばないで
原文表示返信0
LowCapGemHuntervip
· 07-17 14:17
開発者必携のヒントです。
原文表示返信0
SmartMoneyWalletvip
· 07-15 22:24
オンチェーン取引は私の目を逃れることはできない
原文表示返信0
WalletDetectivevip
· 07-15 22:24
v3はこんなに簡単なの?見終わって何もわからないことに気づいた
原文表示返信0
gas_guzzlervip
· 07-15 22:21
また自分の力でクリップクーポンを手に入れています
原文表示返信0
AllInDaddyvip
· 07-15 21:55
V3のコードは本当に硬いですね
原文表示返信0
SleepyValidatorvip
· 07-15 21:55
そこまで詳しく説明するなら、自分でソースコードを巻いた方がいい。
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)