# コントラクト開発の小技:Uniswapのコードから学んだ貴重な経験最近、分散型取引所のチュートリアルを開発する際に、ある有名なDEXのコード実装を参考にして、多くの興味深い知識を学びました。以前は簡単なNFT契約のみを開発していた初心者として、初めてDeFi契約の開発に挑戦したこれらのテクニックは、入門を考えている開発者にとって非常に役立つと思います。次に、これらの実用的な小技を一緒に見てみましょう。中には奇妙な技術と呼べるものもあります。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-6656285ff2f04d804ebeae1a96650aed)## 予測可能な契約デプロイメントアドレス通常デプロイされるコントラクトアドレスはランダムに見えますが、nonceに関連しています。しかし、特定のシナリオでは、トランザクションの対等情報を通じてコントラクトアドレスを推測する必要があります。これは、トランザクションの権限を判断したり、プールのアドレスを取得したりする際に非常に役立ちます。CREATE2方式を使用して契約を作成するには、saltパラメータを追加することで、生成されるアドレスは予測可能です。アドレス生成ロジックは次のとおりです: 新しいアドレス = hash("0xFF", 作成者アドレス, salt, initcode)。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-0aaa61a4d43aba7fdeddbc55e3665305)## コールバック関数の巧妙な使用Solidityでは、契約間で相互に呼び出すことができます。時にはAメソッドがBを呼び出し、Bが呼び出されたメソッド内でAをコールバックすることがあり、これは特定のシナリオで非常に便利です。例えば、取引時に、pool契約のswapメソッドはswapCallbackをコールバックし、実際に必要なトークンの数量を渡します。呼び出し元はコールバック内でトークンを転送する必要があり、swapを2ステップに分割して呼び出してはいけません。これにより、swapメソッドの完全な実行と安全性が保証されます。## 例外を使用して情報を渡し、try-catch を使用してトランザクションを見積もります取引の予測を行う際、実際にトークンを交換することなくスワップをシミュレーションする必要があります。コールバック内で特別なエラーをスローし、その後エラーメッセージから必要なデータを解析することができます。これにより、予測の要件のためにスワップメソッドを改造する必要がなくなり、ロジックがよりシンプルになります。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a)## 大数を使用して精度の問題を解決する複雑な計算において、除算で精度が失われるのを避けるために、最初に96ビット左シフトすることができます。(は2^96)を掛けるのに相当し、計算後に右シフトします。これにより、オーバーフローがない前提で精度を確保できます。最小単位の精度損失は通常許容されます。## シェア方式で収益を計算するLPの収益計算について、毎回の取引を記録する必要はありません。総手数料と各流動性が得るべき割合を記録でき、LPが引き出す際には保有する流動性に基づいて計算します。株式の配当と似ており、1株当たりの収益の履歴と前回の引き出し時間を知っていれば十分です。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-45e66af69435e6d4412ae506e77ab893)## オフチェーンストレージの一部情報オンチェーンストレージは相対的に高価であり、すべての情報をオンチェーンにする必要はありません。取引プールのリストや情報などは通常のデータベースに存在し、定期的にオンチェーンから同期できます。一部の高度なRPCインターフェースは、より迅速で安価なデータ取得方法も提供しています。## 契約を賢く分割し、既存の標準を使用するプロジェクトには、実際にデプロイされた複数のコントラクトが含まれる可能性があります。たとえ1つだけデプロイされても、継承を通じて複数のコントラクトに分割して管理することができます。また、ERC721などの既存の標準コントラクトを利用して開発効率を向上させることも可能です。## まとめ簡易版DEXを自分で実装することで、コードの実装をより深く理解し、実際のプロジェクトでの知識をさらに得ることができます。興味のある方は、関連するチュートリアルに従って一歩ずつ進めてみることをお勧めします。大きな成果が得られると信じています。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-f95ddc9d89809cf11dbe65b9bafda157)
Uniswapソースコードの解析:DEX入門に役立つ7つのコントラクト開発の小技
コントラクト開発の小技: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コードから学んだ契約開発のヒント