# 受託開発のコツ最近、分散型取引所の開発チュートリアルを執筆している際に、いくつかの有名なプロジェクトのコード実装を参考にし、興味深い契約開発のテクニックを多く学びました。初めてDefi契約の開発に挑戦する初心者として、これらのテクニックは私にとって非常に刺激的であり、契約開発を学びたい他の友人にも役立つと信じています。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-6656285ff2f04d804ebeae1a96650aed)## 予測可能な契約アドレス通常、デプロイされたコントラクトのアドレスはランダムに見えますが、それはnonceに関連しています。しかし、特定のシナリオでは、トランザクションの相対情報を通じてコントラクトのアドレスを推測する必要があります。これは、トランザクションの権限を判断したり、プールのアドレスを取得したりする際に非常に役立ちます。1つの方法は、CREATE2方式を使用してコントラクトを作成し、saltパラメータを追加することで生成されるアドレスを予測可能にすることです。新しいアドレスの生成ロジックは次のとおりです: hash("0xFF", 作成者アドレス, salt, initcode)。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-0aaa61a4d43aba7fdeddbc55e3665305)## コールバック関数の巧妙な使い方特定のシナリオでは、契約Aが契約Bのメソッドを呼び出し、BがAのメソッドをコールバックすることが非常に便利です。例えば、取引時に、pool契約のswapメソッドはswapCallbackを呼び出し、実際に必要なTokenの数量を渡します。呼び出し元はコールバック内でTokenをpoolに転送し、これによりswapメソッドの安全性と完全性が確保され、煩雑な変数の記録は不要になります。## 異常を用いた情報の伝達シミュレーショントレードで必要なトークンを予測する際、コールバック関数内で特別なエラーをスローし、そのエラーをキャッチして必要な情報を解析することができます。これにより、予測のためにスワップメソッドを特別に改造する必要がなく、ロジックがよりシンプルになります。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a)## 大きな数値は精度の問題を解決します計算に関わるシーンでは、除算操作による精度の損失を避けるために、まず96ビット左にシフトし(は2^96)を掛けることに相当し、その後に除算を行うことができます。こうすることで、オーバーフローせずに精度を保証できます。## シェア方式での収益計算LP手数料収益を記録する必要があるシーンでは、毎回の取引ごとに各LPを記録することはできず、これには大量のGasが消費されます。株式の配当のような方法を採用し、総手数料と各単位流動性に配分される手数料のみを記録し、LPが引き出す際に保有している流動性に基づいて計算することができます。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-45e66af69435e6d4412ae506e77ab893)## オフチェーンストレージの補助情報すべての情報がブロックチェーンに記録される必要はありません。取引プールのリストやプール情報などの重要でないデータは、通常のデータベースに保存し、定期的にブロックチェーンから同期することができます。これにより、パフォーマンスと効率が向上します。## 契約分割とスタンダード契約の再利用大規模プロジェクトは、契約を複数に分割するか、継承の方法で分割して維持できます。また、ERC721などの標準契約を再利用することで、開発効率を向上させることができます。簡易版の分散型取引所を自ら開発することで、これらの技術の応用をより深く理解できるでしょう。これらの共有が皆さんに役立つことを願っています。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-f95ddc9d89809cf11dbe65b9bafda157)
Defiプロジェクトを支援するための7つの実用的な契約開発のコツ
受託開発のコツ
最近、分散型取引所の開発チュートリアルを執筆している際に、いくつかの有名なプロジェクトのコード実装を参考にし、興味深い契約開発のテクニックを多く学びました。初めてDefi契約の開発に挑戦する初心者として、これらのテクニックは私にとって非常に刺激的であり、契約開発を学びたい他の友人にも役立つと信じています。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
予測可能な契約アドレス
通常、デプロイされたコントラクトのアドレスはランダムに見えますが、それはnonceに関連しています。しかし、特定のシナリオでは、トランザクションの相対情報を通じてコントラクトのアドレスを推測する必要があります。これは、トランザクションの権限を判断したり、プールのアドレスを取得したりする際に非常に役立ちます。
1つの方法は、CREATE2方式を使用してコントラクトを作成し、saltパラメータを追加することで生成されるアドレスを予測可能にすることです。新しいアドレスの生成ロジックは次のとおりです: hash("0xFF", 作成者アドレス, salt, initcode)。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
コールバック関数の巧妙な使い方
特定のシナリオでは、契約Aが契約Bのメソッドを呼び出し、BがAのメソッドをコールバックすることが非常に便利です。
例えば、取引時に、pool契約のswapメソッドはswapCallbackを呼び出し、実際に必要なTokenの数量を渡します。呼び出し元はコールバック内でTokenをpoolに転送し、これによりswapメソッドの安全性と完全性が確保され、煩雑な変数の記録は不要になります。
異常を用いた情報の伝達
シミュレーショントレードで必要なトークンを予測する際、コールバック関数内で特別なエラーをスローし、そのエラーをキャッチして必要な情報を解析することができます。これにより、予測のためにスワップメソッドを特別に改造する必要がなく、ロジックがよりシンプルになります。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
大きな数値は精度の問題を解決します
計算に関わるシーンでは、除算操作による精度の損失を避けるために、まず96ビット左にシフトし(は2^96)を掛けることに相当し、その後に除算を行うことができます。こうすることで、オーバーフローせずに精度を保証できます。
シェア方式での収益計算
LP手数料収益を記録する必要があるシーンでは、毎回の取引ごとに各LPを記録することはできず、これには大量のGasが消費されます。株式の配当のような方法を採用し、総手数料と各単位流動性に配分される手数料のみを記録し、LPが引き出す際に保有している流動性に基づいて計算することができます。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
オフチェーンストレージの補助情報
すべての情報がブロックチェーンに記録される必要はありません。取引プールのリストやプール情報などの重要でないデータは、通常のデータベースに保存し、定期的にブロックチェーンから同期することができます。これにより、パフォーマンスと効率が向上します。
契約分割とスタンダード契約の再利用
大規模プロジェクトは、契約を複数に分割するか、継承の方法で分割して維持できます。また、ERC721などの標準契約を再利用することで、開発効率を向上させることができます。
簡易版の分散型取引所を自ら開発することで、これらの技術の応用をより深く理解できるでしょう。これらの共有が皆さんに役立つことを願っています。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント