LidoOracle は、ETH 2.0 によって制御されるアドレスの残高を DAO に送信するオラクルの契約です。オラクルは DAO によって指定されます。オラクルは、フレームごと(現在は 225 エポック、つまり 1 日)にレポートを送信し、同じレポートの数が「法定人数」の値に達した場合、レポートは Lido 契約に送信されます。
ただし、デイリーオラクルレポートは保証されていません。Beacon Chain が最終的な確定性を持たない場合、オラクルの監視プロセスは長い間レポートを送信しない可能性があります。これにより、オラクルレポートがなく、stETH が期間全体で再構成されない可能性があります。
さらに、配列としてレポートを保存し、保有者報酬 APR を計算するための値を追加し、オラクルレポートを検証するための設定可能な値を使用し、レポートの送信時に受信関数を呼び出すなど、いくつかのメカニズムがあります。
LidoOracle は、DAO との対話が主にオラクルの指定に現れます。オラクルは DAO によって指定されるため、DAO は LidoOracle にレポートを送信できるオラクルを決定する責任があります。さらに、LidoOracle は DAO からの他の指示も受け取ります。たとえば、法定人数の値の設定、オラクルメンバーの追加または削除などです。これらの指示は、LidoOracle の正常な動作を確保し、提供される情報が正確で信頼性があることを保証するのに役立ちます。
LidoOracle は、ETH 2.0 との対話が主に ETH 2.0 によって制御されるアドレスの残高を LidoOracle に送信するオラクルに現れます。オラクルの監視プロセスはフレームごと(現在は 225 エポック、つまり 1 日)にレポートを送信し、レポートには ETH 2.0 側のアドレスの残高情報が含まれています。これにより、Lido 契約内の情報が最新であり、ETH 2.0 側の実際の状況と一致していることが保証されます。
LidoOracle は、正常な動作と正確で信頼性のある情報を提供するためにいくつかのセキュリティ対策を採用しています。たとえば、オラクルレポートを検証するために設定可能な値を使用しています。また、レポートを配列として保存し、レポートの送信時に受信関数を呼び出しています。さらに、LidoOracle は DAO からの他の指示も受け取ります。たとえば、法定人数の値の設定、オラクルメンバーの追加または削除などです。これらの対策により、LidoOracle のセキュリティが確保され、潜在的な攻撃や悪用が防止されます。
保有者の報酬率を計算するために、LidoOracle は以下のデータを保存および提供します:
preTotalPooledEther:Lido 契約にレポートが送信される前にクエリされた総プールされた Ether の量。
postTotalPooledEther:同上、ただし送信後にクエリされる。
lastCompletedEpochId:Lido にレポートを送信した前のエポック。
timeElapsed:現在の送信エポックと lastCompletedEpochId の間の秒数。通常はフレームの長さであるはずです:32 * 12 * 225 = 86400 ですが、前のフレームが法定人数に達しなかった場合は複数になる可能性があります。
lidoFee:Lido の手数料(ベーシスポイント)。getFee () を Lido 契約で呼び出すことで取得できます。
basisPoint:手数料の精度を決定する定数で、10000 と等しい。
post/pre のペアを収集することに注意してください(current/last ではなく)、エポック中の新しいステーキングの影響を回避します。
APR を計算するには、次の式を使用します:
protocolAPR = (postTotalPooledEther - preTotalPooledEther) * secondsInYear / (preTotalPooledEther * timeElapsed)
lidoFeeAsFraction = lidoFee / basisPoint
userAPR = protocolAPR * (1 - lidoFeeAsFraction)
これらのパラメータと式は、保有者の報酬率を計算し、投資の収益率を理解するのに役立ちます。
これらのパラメータを使用して保有者の報酬率を計算するには、次の手順に従います:
preTotalPooledEther と postTotalPooledEther の値を取得します。これらの値は、Lido 契約にレポートが送信される前と後にクエリされた総プールされた Ether の量を表します。
lastCompletedEpochId と timeElapsed の値を取得します。lastCompletedEpochId は、Lido にレポートが前回送信されたエポックを示し、timeElapsed は現在の送信エポックと lastCompletedEpochId の間の秒数を示します。
lidoFee と basisPoint の値を取得します。lidoFee は Lido の手数料(ベーシスポイント)を表し、getFee () を Lido 契約で呼び出すことで取得できます。basisPoint は手数料の精度を決定する定数で、10000 と等しいです。
上記の値を使用して protocolAPR、lidoFeeAsFraction、および userAPR を計算します。次の式を使用して計算できます:
protocolAPR = (postTotalPooledEther - preTotalPooledEther) * secondsInYear / (preTotalPooledEther * timeElapsed)
lidoFeeAsFraction = lidoFee / basisPoint
userAPR = protocolAPR * (1 - lidoFeeAsFraction)
最終的な userAPR の値は、保有者の報酬率を示します。
これらのパラメータと式は、保有者の報酬率を計算し、投資の収益率を理解するのに役立ちます。
これらのパラメータの値は、LidoOracle 契約内で計算および保存されます。これらの値を取得するには、LidoOracle 契約との対話を行うことができます。たとえば、preTotalPooledEther、postTotalPooledEther、lastCompletedEpochId、および timeElapsed の値をクエリするために、契約内の対応する関数を呼び出すことができます。lidoFee と basisPoint については、Lido 契約で getFee () を呼び出すことで lidoFee を取得できます。basisPoint は定数であり、10000 と等しいです。
スマートコントラクトとの対話方法について詳しく知らない場合は、専門家の支援を求めるか、Ethereum スマートコントラクトに関する知識をさらに学ぶことをお勧めします。
これらのパラメータは、保有者の報酬率を計算し、投資の収益率を理解するのに役立ちます。preTotalPooledEther と postTotalPooledEther の値は、レポートが Lido 契約に送信される前と後にクエリされた総プールされた Ether の量を表します。これらの値は、指定された期間内の総プールされた Ether の量の変化を計算するために使用されます。lastCompletedEpochId と timeElapsed の値は、指定された期間の長さを決定するために使用され、総プールされた Ether の量の変化を年間パーセンテージに変換します。lidoFee と basisPoint の値は、Lido が請求する手数料を計算し、保有者が実際に受け取る報酬率を決定するために使用されます。
これらのパラメータを使用して userAPR を計算することで、投資の収益率を理解することができます。userAPR は、保有者の報酬率を示し、指定された期間内に投資がどれだけ成長したかを示します。
LidoOracle は、DAO および ETH 2.0 との対話、および一定のセキュリティ対策を採用して正常に動作し、正確で信頼性のある情報を提供します。また、保有者の報酬率を計算するためのいくつかのパラメータと式を提供し、投資の収益率を理解するのに役立ちます。