精度と数学上の規約
一貫したトークン、native18, external6、bps、および固定点の合意は、契約全体実行から継続的なモデルを区別します。
まず「金額」と「生の整数」を区別する
コントラクトは浮動小数点の USDC や Token を保存しません。本文の 人間向け単位の例 では 1,000 USDCと記載し、 整数実装 と明記した数式ではオンチェーンの生の整数を用います。
| 記号 | 整数式での単位 | 例 |
|---|---|---|
T、a、b | Token18 | 1 Token = 10¹⁸ |
Q、N、C、A | native18 USDC | 1 USDC = 10¹⁸ |
E、R | external6 USDC | 1 USDC = 10⁶ |
σ | 精度変換係数 10¹² | 通貨の為替レートではない |
BPS | 比率の分母 10,000 | 100 bps = 1% |
PPM | 比率の分母 1,000,000 | 10 ppm = 0.001% |
ソースコードの ether は Solidity の数量接尾辞 10¹⁸ であり、本プロトコルが ETH をクォート資産に使うことを意味しません。現在のアダプテーションでは、ネイティブ Arc USDC と ERC-20 USDC インターフェースを 18/6 桁として扱います。この特性を任意の EVM ネットワークへそのまま一般化することはできません。
USDC の二つの精度間の変換
external6 から native18 への変換:
native18 からの切り捨て変換:
ε は native18 dust です。正確な変換には次を満たす必要があります。
例えば 1.234567890123456789 USDC を切り捨て変換すると 1.234567 USDCとなり、余りは 0.000000890123456789 USDCです。正確な変換パスを呼び出した場合、この入力は暗黙的に丸められず、拒否されます。
丸め記号
| 記号 | 意味 | 主な用途 |
|---|---|---|
floor(x) / ⌊x⌋ | 切り捨て | 比率の進捗、部分分配、指数の累積 |
sqrtFloor(x) | 切り捨てた整数平方根 | リスクモデルの理論準備金 |
sqrtCeil(x) | 切り上げた整数平方根 | リスク容量における保守的な残存準備金 |
標準 V2 の正確な出力量に対する入力量は floor(ratio) + 1を用います。ratio がちょうど整数でも 1 を加えるため、無条件に ceil(ratio)へ置き換えることはできません。Quoter の最大実行可能枠も、このため厳密な境界を保持しています。
入れ替えられない演算順序
一般に:
固定小数点指数
TWAP の累積価格は 2¹¹² 、Funding と Legacy は 2¹²⁸ でスケーリングします。Funding の例:
指数は全体の累積率と個別ポジションの持分を分離するため、ポジションを毎秒ストレージへ書き込む必要がありません。二度の切り捨てにより、浮動小数点近似との差がごくわずかに生じ得ます。Legacy は高精度の余りも別途保持します。
時価総額の固定供給量基準
プロトコル内部の時価総額は カーブ供給量 S = 10 億 Token:
総供給量 1,199,861,071 Token による FDV でも、流通供給量による指標でもありません。外部表示では、生の spot 時価総額と制限適用後のリスク時価総額を区別し、異なる指標を入れ替えないようにしてください。