Uniswapソースコードの解析:DEX入門に役立つ7つのコントラクト開発の小技

robot
概要作成中

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

最近、分散型取引所のチュートリアルを開発する際に、ある有名なDEXのコード実装を参考にして、多くの興味深い知識を学びました。以前は簡単なNFT契約のみを開発していた初心者として、初めてDeFi契約の開発に挑戦したこれらのテクニックは、入門を考えている開発者にとって非常に役立つと思います。

次に、これらの実用的な小技を一緒に見てみましょう。中には奇妙な技術と呼べるものもあります。

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

予測可能な契約デプロイメントアドレス

通常デプロイされるコントラクトアドレスはランダムに見えますが、nonceに関連しています。しかし、特定のシナリオでは、トランザクションの対等情報を通じてコントラクトアドレスを推測する必要があります。これは、トランザクションの権限を判断したり、プールのアドレスを取得したりする際に非常に役立ちます。

CREATE2方式を使用して契約を作成するには、saltパラメータを追加することで、生成されるアドレスは予測可能です。アドレス生成ロジックは次のとおりです: 新しいアドレス = hash("0xFF", 作成者アドレス, salt, initcode)。

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

コールバック関数の巧妙な使用

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

例えば、取引時に、pool契約のswapメソッドはswapCallbackをコールバックし、実際に必要なトークンの数量を渡します。呼び出し元はコールバック内でトークンを転送する必要があり、swapを2ステップに分割して呼び出してはいけません。これにより、swapメソッドの完全な実行と安全性が保証されます。

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

取引の予測を行う際、実際にトークンを交換することなくスワップをシミュレーションする必要があります。コールバック内で特別なエラーをスローし、その後エラーメッセージから必要なデータを解析することができます。これにより、予測の要件のためにスワップメソッドを改造する必要がなくなり、ロジックがよりシンプルになります。

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

大数を使用して精度の問題を解決する

複雑な計算において、除算で精度が失われるのを避けるために、最初に96ビット左シフトすることができます。(は2^96)を掛けるのに相当し、計算後に右シフトします。これにより、オーバーフローがない前提で精度を確保できます。最小単位の精度損失は通常許容されます。

シェア方式で収益を計算する

LPの収益計算について、毎回の取引を記録する必要はありません。総手数料と各流動性が得るべき割合を記録でき、LPが引き出す際には保有する流動性に基づいて計算します。株式の配当と似ており、1株当たりの収益の履歴と前回の引き出し時間を知っていれば十分です。

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

オフチェーンストレージの一部情報

オンチェーンストレージは相対的に高価であり、すべての情報をオンチェーンにする必要はありません。取引プールのリストや情報などは通常のデータベースに存在し、定期的にオンチェーンから同期できます。一部の高度なRPCインターフェースは、より迅速で安価なデータ取得方法も提供しています。

契約を賢く分割し、既存の標準を使用する

プロジェクトには、実際にデプロイされた複数のコントラクトが含まれる可能性があります。たとえ1つだけデプロイされても、継承を通じて複数のコントラクトに分割して管理することができます。また、ERC721などの既存の標準コントラクトを利用して開発効率を向上させることも可能です。

まとめ

簡易版DEXを自分で実装することで、コードの実装をより深く理解し、実際のプロジェクトでの知識をさらに得ることができます。興味のある方は、関連するチュートリアルに従って一歩ずつ進めてみることをお勧めします。大きな成果が得られると信じています。

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

原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • 5
  • 共有
コメント
0/400
SelfSovereignStevevip
· 14時間前
初心者はソースコードを無理にいじらないでください。
原文表示返信0
TooScaredToSellvip
· 14時間前
これを学んで何の役に立つの?損をするだけ損する。
原文表示返信0
ChainMaskedRidervip
· 14時間前
DEX初心者の福音が来ました
原文表示返信0
OnchainUndercovervip
· 14時間前
学Uは宿題を写すのと同じくらい楽だ
原文表示返信0
PretendingSeriousvip
· 15時間前
うんうん 貴重な洞察満載だね
原文表示返信0
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)