---
# System prepended metadata

title: 【日本語】Napier Math (10/15~)

---



# 【日本語】Napier Math (10/15~)　
[Sense Math](https://hackmd.io/f6QDr5jyRd278h6RMF37ew?view)

期間内に得られる利回りの価値$\Delta x$を$x$に足した$X$の量、それから発行された$Y$の量について

## PTとYTのIssue
Collect型なので、PTとYTは同量発行される。PTとYTを発行する現時点$t_0$で獲得できる利子$∆x$をcollectする。

ユーザーが入金するターゲット$x$の量で、$y = x \cdot s(t_0)$の同量の$PT$ と $YT$を発行します。

$s(t_0) < S(t_0)$ の場合、ユーザーは発行されたばかりのYTから一定量のターゲットをすぐにCollectできます。このターゲットの増加額は、元の入金額に追加されると考えるのが合理的です。正確な追加量は、次の式から求めることができます。

$$
\Delta x = (x + \Delta x) \cdot s(t_0) \cdot \left( \frac{1}{s(t_0)} - \frac{1}{S(t_0)} \right) = (x + \Delta x) \cdot \left( 1 - \frac{s(t_0)}{S(t_0)} \right) \\
\Delta x \left( 1 - \left( 1 - \frac{s(t_0)}{S(t_0)} \right) \right) = x \cdot \left( 1 - \frac{s(t_0)}{S(t_0)} \right) \\
\Delta x \cdot \frac{s(t_0)}{S(t_0)} = x \cdot \left( 1 - \frac{s(t_0)}{S(t_0)} \right) \\
\Delta x = \frac{x \cdot \left( 1 - \frac{s(t_0)}{S(t_0)} \right)}{\frac{s(t_0)}{S(t_0)}} = x \cdot \left( \frac{S(t_0)}{s(t_0)} - 1 \right)
$$

したがって、デポジットの全額は次のとおりです。

$$
X = x + \Delta x = x + x \cdot \left( \frac{S(t_0)}{s(t_0)} - 1 \right) = x \cdot \frac{S(t_0)}{s(t_0)}
$$

発行されたトークンの全額 (PTもYTも同じ) は次のとおりです。

$$
Y = X \cdot s(t_0) = x \cdot \frac{S(t_0)}{s(t_0)} \cdot s(t_0) = x \cdot S(t_0)
$$


また、追加のトークンを発行するときにユーザーがすでにある程度の$YT$を持っている場合は、追加の$YT$を発行する前に、これらのYTの金額からそれまでに得られた利子分を回収する必要があります。

ユーザーがすでに$t_l$時点で$Y_l$のYTと最後に収集された利子分を持っていると仮定すると、ユーザーは保有する$YT$で、$xl$の金額の$Target$を徴収できます。

$$
x_l = Y_l \cdot \left( \frac{1}{s(t_l)} - \frac{1}{S(t_0)} \right)
$$

したがって、$t_l$時点で保有するYTから得られた$Target$分を考慮した発行済みトークンの全額$Y$は次のとおりです。

$$
Y = \left( x + x_l \right) \cdot S(t_0)
= \left( x + Y_l \cdot \left( \frac{1}{s(t_l)} - \frac{1}{S(t_0)} \right) \right) \cdot S(t_0)
$$



<br>




Napierでの流動性提供について

## Add Liquidity
- 流動性提供時のデポジット資産はUnderlyingのみを受け付ける。
- 運用先の異なるプール（Aave, Compound, Yearn, Euler...）が複数存在するが、流動性提供者は流動性提供すると「Napier Principal Token(nPT)」と「Napier Interest Bearing Token(nIBT)」として仮想的に統一されたプールの流動性をシェアしたポジションを保有することになる。



### Underlying Deposit $\rightarrow$ $nPT$ / $nIBT$ Pairs Pool
ユーザーは、Compoundプリンシパルトークン（$PT$）と $IBT$(Target) を取引するプールに、$z$の量のunderlyingを流動性提供したいと考えています。

ユーザーは元のunderlyingを $u = u' + u''$の2つの部分に分割します。ここでは、Compoundを使用します。



#### $u'$はプールに行くIBTを発行するために使用されます。

$cToken$の発行額 $i_{Compound}$ は次のとおりです。

$$
i_{Compound} = \frac{u'}{S_{comp}(t)} \tag{1}
$$

#### Virtually calculate $IBT_{Compound}$ as $nIBT$

$u'$のUnderlyingから発行された$cToken (IBT_{comp})$は、$n_i$の$nIBT$としてシステムによって計算処理される必要があります。

このとき、$cToken$の準備金を$I_{Compound}$、$nIBT$のスケールを$S_i(t)$と定義とすると。(加重平均ではない！)と、以下のように記述できます

$$
S_i(t) = \frac{I_{euler} * S_{euler}(t) + I_{comp} * S_{comp}(t) +…}{TotalSupply_{nIBT}} \tag{3} \\
= \frac{\sum^{ibt}_k{I_k \cdot S_k(t)}}{N_i}
$$

発行された$cToken$は同価値の$u'$相当の$nIBT$に換算され、プールに追加される。このとき、発行される$nIBT$の数量$n_i$はデポジットされた額(underlying建)に応じて比例配分される。

シェアの計算式(Appendix1) $s = \frac{aT}{B}$の式を用いて、

$$
n_i = \frac{u' \cdot N_i}{\sum^{ibt}_k{I_k \cdot S_k(t)}}\tag{4}
$$

となる。ここでは、あるレンディングプロトコル$k$の$IBT$の発行量を$I_k$、スケールを$S_k(t)$とした。

> Appendix1: 式(4)の導出
> ref: [Vault Math - How much shares to mint? How much token to withdraw?](https://www.youtube.com/watch?v=k7WNibJOBXE)
$$
Scale = \frac{B}{T}
$$
$$
\frac{a+B}{B} = \frac{s+T}{T}
$$
$$
s = \frac{aT}{B}
$$
$n_i$を求めるために、各変数を以下のように置き換えることで、式(4)が得られる。
$s$ $\rightarrow$ $n_i$
$B$ $\rightarrow$ $N_i \cdot S_i(t)= \sum^{ibt}_k{I_k \cdot S_k(t)}$
$a$ $\rightarrow$ $u'$
$T$ $\rightarrow$ $N_i = TotalSupply_{nIBT}$
「$\sum^{ibt}_k{I_k \cdot S_k(t)}$」: $nIBT$が保有するunderlying残高を算出するために、各$IBT$が保有するunderlying残高の総和をとる。

#### $u''$は、プールに行くPTを発行するために使用されます。

$PT_{Compound}$の発行額 $y_{Compound}$ は次のとおりです。

$$
y_{Compound} = {u'' \over{S_{comp}(t)}} \cdot S_{comp}(t) = u'' \tag{5}
$$

#### Virtually calculate $PT_{Compound}$ as $nPT$

$u''$のUnderlyingから発行された$y_{Compound}$の$PT_{Compound}$は、$n_u$の$nPT$としてシステムによって計算処理される必要があります。

$P_u(t)$を$nPT$の価格とする。Compoundから発行されたPTの準備金を$Y_{Compound}$,そのPTの価格を$P_{Compound}(t)$と定義すると、以下のように記述できます。


$$
P_u(t) = \frac{Y_{euler} * P_{euler}(t) + Y_{comp} * P_{comp}(t) +…}{TotalSupply_{nPT}} \tag{6} \\
= \frac{\sum^{ibt}_k{Y_k \cdot P_k(t)}}{N_u}
$$

あるレンディングプロトコル$k$のPTの価格$P_k(t)$は、[Yield Spaceの式(13)](https://docs.google.com/document/d/13i9e7J8_aXPImAvVWyNOFCi3gHpX16_96FXPbJlxd-c/edit?disco=AAAAhxVM9EM)より、債権の残存時間の関数として
$$
P_{k}(t) = (\frac{Y_{k}}{I_{k} \cdot S_k(t)})^{t_m - t}
$$
となる。ここで、PTの満期を時刻$t_m$とした。

シェアの計算式(Appendix1) $s = \frac{aT}{B}$の式を用いて、

$$
n_u = \frac{u'' \cdot N_u}{\sum^{ibt}_k{Y_k \cdot P_k(t)}}\tag{7}
$$


#### まとめ

プールのリザーブの$nIBT$の総量を$N_i$、プールのリザーブの$nPT$の総量を$N_u$とすると、ユーザーは同じ割合でトークンを提供する必要があるため、次のようになります。

$$
\frac{n_i}{n_u} = \frac{N_i}{N_u}
$$

$$
\frac{\frac{u' \cdot N_i}{\sum^{ibt}_k{I_k \cdot S_k(t)}}}{\frac{u'' \cdot N_u}{\sum^{ibt}_k{Y_k \cdot P_k(t)}}} = \frac{N_i}{N_u}
$$

$$
u''\cdot \sum^{ibt}_k{I_k \cdot S_k(t)} 
= u' \cdot \sum^{ibt}_k{Y_k \cdot P_k(t)} 
$$

$$
u'' = \frac {u' \cdot \sum^{ibt}_k{Y_k \cdot P_k(t)} }{\sum^{ibt}_k{I_k \cdot S_k(t)}}
$$


## Remove Liquidity
- 満期後に流動性を取り除く時、ユーザーは、保有する$nPT$の量に比例したUnderlyingだけを受けとる。
- ユーザーの流動性撤回毎に引き出されるunderlyingの量を計算することはせず、満期を過ぎたプールのnIBTとnPTはプロトコルによって一括でunderlyingに償還される。
    - ロールオーバーされたプールのポジションは除く
    - 満期後は償還されたunderlyingだけがプールに残る
- ユーザーはバーンするLPトークンのシェアに比例した数量のunderlyingを引き出せる。

### プロトコルが一括でプール内のアセットを償還する流れ
 1. ロールオーバーされたポジションを除いた、nIBTとnPTのリザーブを計算する。
 2. nIBTを構成する全てのターゲットをunderlyingに償還する。
 3. nPTを構成する全てのPTを償還する。
     - 各PTの裏付けであるターゲットを全てunderlyingにする。

以降、ロールオーバーがない場合を考える。
プロトコルが一括で償還する時の時刻を$t_r$、全てのnPT,nIBTを償還した後に得られるunderlyingをそれぞれ$U_{npt}$と$U_{nibt}$とすると、償還後のpool内のunderlyingは

$$
U = U_{npt}+U_{nibt}
$$
となる。ここで、
$$
U_{nibt} = \sum^{ibt}_k{I_k(t_r) \cdot S_k(t_r)} \\
U_{npt} = \sum^{ibt}_k{Y_k(t_r) / S_k(t_r) \cdot S_k(t_r)} \\
= \sum^{ibt}_k{Y_k(t_r)}
$$
となる。$Y_k(t_r) / S_k(t_r)$は、あるプロトコル$k$のPTのリザーブ$Y_k$の裏付けであるターゲットの数量を表す。

![](https://i.imgur.com/2kwZ6Mp.jpg)


---
<br>
<br>
<br>
---

## Notation

$Underlying$：原資産、非利回り資産（例：DAI）

$Target$：利回り資産（例：aDAI、cDAI）

$Principal Token(PT)$ : ユーザーの Napier プロトコルへの預金額を表すトークン。これらのトークンは、満期時に原資産と 1 対 1 で償還可能。

$Napier Principal Token(PT)$ : 流動性提供時に得られる仮想的なトークン。$PT$と同様に、満期時に原資産と 1 対 1 で償還可能。

$Yield Token(YT)$ : 預金した資産から得られる利息を請求する権利を表すトークン。

$t_0$：発行時期

$t_m$：満期

$t_{m}-t$：満期までの時間

$s(t)$：$t$ 時点でのスケーリング係数（$t$時点でのUnderlting建でのターゲットの価格）

$S(t)$：$t$ 時点での最大スケーリング係数
例: [cUSDCのScale](https://etherscan.io/token/0x39aa39c021dfbae8fac545936693ac917d5e7563#readContract#F4)

$W(t)$：流動性提供時に任意のPTをnPTへと仮想的に計算する加重平均スケーリング係数

$x$：ユーザーが預け入れたターゲットトークンの量

$X$
: The effective amount of the Target token being deposited

$x$：ユーザーが預け入れたターゲットトークンの量

$y$：$PT$または$YT$の量

$y''$：$nPT$として計算処理された後の任意のプリンシパルトークンの量


$\Delta x$：発行時や、ユーザーが預け入れた金額によるターゲットの増加額

---




<br>
<br>
<br>
---------

<br>
<br>
<br>
<br>
<br>




  
               
-----アーカイブーーーーーー
### Underlying $\leftrightarrow$ PT Pool

ユーザーは、プリンシパルトークン（$nPT$）と underlyingを取引するプールに、$z$の量のunderlyingを流動性提供したいと考えています。

ユーザーは元のunderlyingを $z = z' + z''$の2つの部分に分割します。$z'$はプールに直接行き、もう一方は$z''$は、プールに行くPTを発行するために使用されます。ここでは、AaveのPTを発行するとします。$PT_{aave}$の発行額 $y$ は次のとおりです。

$$
y = z'' \cdot S(t)
$$

#### Virtually calculate $PT_{aave}$ as $nPT$

ここで一つ注意する必要があります。$z''$のUnderlyingから発行された$PT_{aave}$は、$nPT$としてシステムによって計算処理される必要があります。


そのため計算処理後の $y''$は、加重平均スケーリング係数 $W(t)$を用いて以下のように定義されます。

$$
y'' = z'' \cdot W(t) 
$$

このとき、aaveから発行されたPTの準備金を$Y_{aave}$、スケールを$S(t)_{aave}$、CompoundやYearnのような利回りソースの場合も同様に定義すると、加重平均スケーリング係数は、$W(t)$は、以下のように記述できます。

$$
W(t) = \frac{Y_{aave} * S_{aave}(t) + Y_{comp} * S_{comp}(t) +…}{\Sigma{Y_i}} \tag{A}
$$


$Z$はunderlyingの準備金プールであり、$Y_{all}$は複数の異なるPTで構成された準備金プールです。ユーザーは同じ割合でトークンを提供する必要があるため、$z''$は次のようになります。

$$
\frac{z'}{y''} = \frac{Z}{Y_{all}} \\
\frac{z'}{z'' \cdot W(t) } = \frac{Z}{Y_{all}} \\
\frac{z - z''}{z'' \cdot W(t) } = \frac{Z}{Y_{all}} \\
(z - z'') \cdot Y = z'' \cdot W(t) \cdot Z \\
z \cdot Y = z'' \cdot \left( W(t) \cdot Z + Y_{all} \right) \\
z'' = z \cdot \frac{Y}{W(t) \cdot Z + Y_{all}}
$$






