# 受託開発のコツ最近、分散型取引所の開発過程で、いくつかの興味深い契約開発のテクニックを発見しました。これらのテクニックは、ある有名なDEXのコードの研究に基づいており、スマートコントラクト開発に入門したい初心者にとって非常に役立つはずです。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-6656285ff2f04d804ebeae1a96650aed)## 予測可能な契約アドレス通常、デプロイされたコントラクトのアドレスはランダムに見え、予測が難しい。しかし、特定のシナリオでは、取引ペアの情報を使用してコントラクトのアドレスを導き出す必要があり、これは取引権限の判断やプールのアドレスの取得などに非常に役立つ。CREATE2方式を使用して契約を作成するには、saltパラメータを追加することで、生成されるアドレスを予測可能にします。新しいアドレスの計算ロジックは:hash("0xFF", 作成者のアドレス, salt, initcode)です。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-0aaa61a4d43aba7fdeddbc55e3665305)## コールバック関数の巧妙な利用特定のシーンでは、契約Aが契約Bのメソッドを呼び出し、BがAのメソッドをコールバックすることが非常に便利です。例えば、取引時にプール契約がswapCallbackをコールバックし、実際に必要なトークンの数量を渡し、呼び出し元がコールバック内でトークンを転送します。これにより、取引ロジック全体の完全性と安全性が確保されます。## 例外を使用して情報を伝達する取引を推定する際には、swapメソッドの実行をtry-catchで囲むことができます。推定は実際にTokenの交換を行わないため、エラーが発生します。コールバック内で特別なエラーをスローし、その後エラーメッセージから必要なデータを解析することができます。これにより、推定要件のためにswapメソッドを特別に改造する必要がなく、ロジックがよりシンプルになります。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-b0c3d4eb7e8ca88cc4cfc9476a34437a)## 大きな数値は精度の問題を解決します価格と流動性の計算に関して、除算操作による精度の喪失を避けるために、まず96ビット左シフトを行うことができます。(は2^96)を掛けるのと同等であり、その後計算を行います。これにより、オーバーフローせずに精度を保証できます。理論的には最小単位の精度損失が依然としてありますが、実際のアプリケーションでは許容される範囲です。## シェアモードは収益を計算しますLP手数料収益を記録する際、毎回の取引で各LPに記録することはできません。これでは大量のガスを消費してしまいます。総手数料と各単位の流動性が得るべき手数料のみを記録し、LPが引き出す際に保有する流動性に基づいて引き出せる金額を計算します。株式の配当金に似た原理です。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-45e66af69435e6d4412ae506e77ab893)## オフチェーンデータストレージすべての情報がブロックチェーンに記録される必要はなく、ブロックチェーンから取得される必要もありません。取引プールのリストやプール情報などは、従来のデータベースに保存し、定期的にブロックチェーンから同期することができます。これにより、アクセス効率が向上し、コストが削減されます。もちろん、重要な取引は依然としてブロックチェーン上で行う必要があります。## コントラクトの分割と再利用プロジェクトを複数の実際に展開されたコントラクトに分割したり、継承方式でコードを複数のコントラクトに分割して管理することができます。また、ERC721などの既存の標準コントラクトを活用して、開発効率を向上させることも重要です。理論をいくら学んでも、実際に手を動かしてみることには勝りません。簡易版DEXを実現する過程を試みることで、契約開発のさまざまな技術をより深く理解できるでしょう。これらの小さなヒントがあなたのスマートコントラクト開発の道に役立つことを願っています。! [Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント](https://img-cdn.gateio.im/social/moments-f95ddc9d89809cf11dbe65b9bafda157)
7つの契約開発の技術であなたをDEXの達人にする
受託開発のコツ
最近、分散型取引所の開発過程で、いくつかの興味深い契約開発のテクニックを発見しました。これらのテクニックは、ある有名なDEXのコードの研究に基づいており、スマートコントラクト開発に入門したい初心者にとって非常に役立つはずです。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
予測可能な契約アドレス
通常、デプロイされたコントラクトのアドレスはランダムに見え、予測が難しい。しかし、特定のシナリオでは、取引ペアの情報を使用してコントラクトのアドレスを導き出す必要があり、これは取引権限の判断やプールのアドレスの取得などに非常に役立つ。
CREATE2方式を使用して契約を作成するには、saltパラメータを追加することで、生成されるアドレスを予測可能にします。新しいアドレスの計算ロジックは:hash("0xFF", 作成者のアドレス, salt, initcode)です。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
コールバック関数の巧妙な利用
特定のシーンでは、契約Aが契約Bのメソッドを呼び出し、BがAのメソッドをコールバックすることが非常に便利です。例えば、取引時にプール契約がswapCallbackをコールバックし、実際に必要なトークンの数量を渡し、呼び出し元がコールバック内でトークンを転送します。これにより、取引ロジック全体の完全性と安全性が確保されます。
例外を使用して情報を伝達する
取引を推定する際には、swapメソッドの実行をtry-catchで囲むことができます。推定は実際にTokenの交換を行わないため、エラーが発生します。コールバック内で特別なエラーをスローし、その後エラーメッセージから必要なデータを解析することができます。これにより、推定要件のためにswapメソッドを特別に改造する必要がなく、ロジックがよりシンプルになります。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
大きな数値は精度の問題を解決します
価格と流動性の計算に関して、除算操作による精度の喪失を避けるために、まず96ビット左シフトを行うことができます。(は2^96)を掛けるのと同等であり、その後計算を行います。これにより、オーバーフローせずに精度を保証できます。理論的には最小単位の精度損失が依然としてありますが、実際のアプリケーションでは許容される範囲です。
シェアモードは収益を計算します
LP手数料収益を記録する際、毎回の取引で各LPに記録することはできません。これでは大量のガスを消費してしまいます。総手数料と各単位の流動性が得るべき手数料のみを記録し、LPが引き出す際に保有する流動性に基づいて引き出せる金額を計算します。株式の配当金に似た原理です。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント
オフチェーンデータストレージ
すべての情報がブロックチェーンに記録される必要はなく、ブロックチェーンから取得される必要もありません。取引プールのリストやプール情報などは、従来のデータベースに保存し、定期的にブロックチェーンから同期することができます。これにより、アクセス効率が向上し、コストが削減されます。もちろん、重要な取引は依然としてブロックチェーン上で行う必要があります。
コントラクトの分割と再利用
プロジェクトを複数の実際に展開されたコントラクトに分割したり、継承方式でコードを複数のコントラクトに分割して管理することができます。また、ERC721などの既存の標準コントラクトを活用して、開発効率を向上させることも重要です。
理論をいくら学んでも、実際に手を動かしてみることには勝りません。簡易版DEXを実現する過程を試みることで、契約開発のさまざまな技術をより深く理解できるでしょう。これらの小さなヒントがあなたのスマートコントラクト開発の道に役立つことを願っています。
! Web3ビギナーシリーズ:Uniswapコードから学んだ契約開発のヒント