dodomath fix && proxy test

This commit is contained in:
owen05
2021-01-04 22:23:08 +08:00
parent 35aa22b8e8
commit 1bc41f9a61
7 changed files with 57 additions and 64 deletions

View File

@@ -74,8 +74,16 @@ library DODOMath {
// V0 = V1*(1+(sqrt-1)/2k)
// sqrt = √(1+4kidelta/V1)
// premium = 1+(sqrt-1)/2k
// uint256 sqrt = DecimalMath.multiMulWithDiv((4 * k).mul(i),delta,V1).add(DecimalMath.ONE2).sqrt();
uint256 sqrt = (4 * k).mul(i).mul(delta).div(V1).add(DecimalMath.ONE2).sqrt();
// uint256 sqrt = (4 * k).mul(i).mul(delta).div(V1).add(DecimalMath.ONE2).sqrt();
uint256 sqrt;
uint256 ki = (4 * k).mul(i);
if(ki == 0 ) {
sqrt = DecimalMath.ONE;
}else if(ki * delta / ki == delta) {
sqrt = (ki * delta).div(V1).add(DecimalMath.ONE2).sqrt();
}else {
sqrt = (4 * k).mul(i).div(V1).mul(delta).add(DecimalMath.ONE2).sqrt();
}
uint256 premium = DecimalMath.divFloor(sqrt.sub(DecimalMath.ONE), k * 2).add(
DecimalMath.ONE
);
@@ -129,8 +137,16 @@ library DODOMath {
// Q2=Q1/(1+ideltaBQ1/Q0/Q0)
// temp = ideltaBQ1/Q0/Q0
// Q1-Q2 = Q1*(temp/(1+temp))
// uint256 temp = DecimalMath.multiMulWithDiv(i.mul(delta),V1,V0).div(V0);
uint256 temp = i.mul(delta).mul(V1).div(V0.mul(V0));
// uint256 temp = i.mul(delta).mul(V1).div(V0.mul(V0));
uint256 temp;
uint256 idelta = i.mul(delta);
if(idelta == 0) {
temp = 0;
}else if(idelta * V1 / idelta == V1) {
temp = (idelta * V1).div(V0.mul(V0));
}else {
temp = delta.mul(V1).div(V0).mul(i).div(V0);
}
return V1.mul(temp).div(temp.add(DecimalMath.ONE));
}