# 受託開発のコツ最近、分散型取引所プロジェクトを開発しているときに、いくつかの著名なDEXのコード実装を参考にし、多くの興味深い契約開発のテクニックを学びました。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)## コールバック関数の利用特定のシナリオにおいて、契約Aが契約Bのメソッドを呼び出し、Bが呼び出されたメソッド内でAをコールバックすることは非常に便利です。例えば、DEXにおいて、取引プール契約のswapメソッドを呼び出すと、swapCallbackが呼び出され、実際に必要なトークンの数量が渡されます。呼び出し側はコールバック内で必要なトークンを取引プールに転送する必要があり、これによりswapメソッドの完全な実行と安全性が保証されます。## 異常を通じて情報を伝達する取引の見積もりを行う際には、try-catchでswapメソッドの実行を包むことができます。見積もり時には実際にトークンを交換しないため、エラーが発生します。コールバック関数内で特別なエラーをスローし、必要な情報を取得して解析することができます。この方法は、見積もりの要求のためにswapメソッドを特別に変更する必要がなく、ロジックをより簡潔にします。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a)## 大きな数値の精度の問題の処理価格と流動性の計算に関して、除算による精度損失を避けるために、数値を96ビット左にシフトすることができます。(は2^96)倍に相当し、その後計算を行います。理論的には微小な精度損失が依然として存在しますが、許容範囲内です。## シェア方式での収益計算流動性提供者の手数料収益については、毎回の取引を記録する必要はありません。総手数料と各単位の流動性に対する手数料を記録することができ、LPが引き出す際には保有している流動性に基づいて引き出し可能な金額を計算します。これは株式の配当の原理に似ています。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-45e66af69435e6d4412ae506e77ab893)## オンチェーンとオフチェーンデータの統合すべての情報がブロックチェーンに記録される必要があるわけではなく、ブロックチェーンから取得される必要もありません。例えば、取引プールのリストや情報などは従来のデータベースに保存し、定期的にブロックチェーンから同期することができます。これにより効率が向上し、コストが削減されます。もちろん、重要な取引は依然としてブロックチェーン上で行う必要があります。## コントラクト分割と標準コントラクトの利用大規模プロジェクトは、複数の実際にデプロイ可能なコントラクトに分割することができ、または継承を通じてコードを分割することができます。同時に、ERC721などの既存の標準コントラクトを利用して開発効率を向上させることができます。例えば、NFTを使用して流動性ポジションを管理します。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-f95ddc9d89809cf11dbe65b9bafda157)これらのテクニックを深く理解するための最良の方法は、簡易版DEXを自分で開発してみることです。実践を通じて、さまざまな設計思想をより深く理解し、より多くの実用的な知識を学ぶことができます。これらの共有があなたにとって刺激や助けになれば幸いです。
DEXプロジェクトを支援する7つの実用的なスマートコントラクト開発テクニック
受託開発のコツ
最近、分散型取引所プロジェクトを開発しているときに、いくつかの著名なDEXのコード実装を参考にし、多くの興味深い契約開発のテクニックを学びました。DeFi開発に初めて触れる新米として、これらのテクニックは私に多くのインスピレーションを与えてくれました。スマートコントラクトの開発を学びたい他の友人たちにも役立つと信じています。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
予測契約アドレス
通常デプロイされるコントラクトアドレスはランダムに見えますが、nonceに関連しています。しかし、特定のシナリオでは、取引の対等情報を通じてコントラクトアドレスを推測する必要があります。これは、CREATE2方式を使用してコントラクトを作成することで実現でき、コントラクト作成時にsaltパラメータを追加します。このように生成されたアドレスは予測可能であり、"新しいアドレス = hash('0xFF',作成者アドレス, salt, initcode)"のロジックに従います。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
コールバック関数の利用
特定のシナリオにおいて、契約Aが契約Bのメソッドを呼び出し、Bが呼び出されたメソッド内でAをコールバックすることは非常に便利です。例えば、DEXにおいて、取引プール契約のswapメソッドを呼び出すと、swapCallbackが呼び出され、実際に必要なトークンの数量が渡されます。呼び出し側はコールバック内で必要なトークンを取引プールに転送する必要があり、これによりswapメソッドの完全な実行と安全性が保証されます。
異常を通じて情報を伝達する
取引の見積もりを行う際には、try-catchでswapメソッドの実行を包むことができます。見積もり時には実際にトークンを交換しないため、エラーが発生します。コールバック関数内で特別なエラーをスローし、必要な情報を取得して解析することができます。この方法は、見積もりの要求のためにswapメソッドを特別に変更する必要がなく、ロジックをより簡潔にします。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
大きな数値の精度の問題の処理
価格と流動性の計算に関して、除算による精度損失を避けるために、数値を96ビット左にシフトすることができます。(は2^96)倍に相当し、その後計算を行います。理論的には微小な精度損失が依然として存在しますが、許容範囲内です。
シェア方式での収益計算
流動性提供者の手数料収益については、毎回の取引を記録する必要はありません。総手数料と各単位の流動性に対する手数料を記録することができ、LPが引き出す際には保有している流動性に基づいて引き出し可能な金額を計算します。これは株式の配当の原理に似ています。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
オンチェーンとオフチェーンデータの統合
すべての情報がブロックチェーンに記録される必要があるわけではなく、ブロックチェーンから取得される必要もありません。例えば、取引プールのリストや情報などは従来のデータベースに保存し、定期的にブロックチェーンから同期することができます。これにより効率が向上し、コストが削減されます。もちろん、重要な取引は依然としてブロックチェーン上で行う必要があります。
コントラクト分割と標準コントラクトの利用
大規模プロジェクトは、複数の実際にデプロイ可能なコントラクトに分割することができ、または継承を通じてコードを分割することができます。同時に、ERC721などの既存の標準コントラクトを利用して開発効率を向上させることができます。例えば、NFTを使用して流動性ポジションを管理します。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
これらのテクニックを深く理解するための最良の方法は、簡易版DEXを自分で開発してみることです。実践を通じて、さまざまな設計思想をより深く理解し、より多くの実用的な知識を学ぶことができます。これらの共有があなたにとって刺激や助けになれば幸いです。