-
Notifications
You must be signed in to change notification settings - Fork 29
/
alpha.go
49 lines (38 loc) · 1.01 KB
/
alpha.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package types
import (
sdk "github.com/cosmos/cosmos-sdk/types"
)
var (
StartingPublicAlpha = sdk.MustNewDecFromStr("0.5")
)
func SystemAlpha(publicAlpha sdk.Dec, S0, S1, R, C sdk.Int) sdk.Dec {
// S0/S1: negative and positive attestations, measured in bond tokens
// C: outcome payment
// R: current reserve
S0R := R.Mul(S1)
S1R := R.Mul(S1)
S0C := C.Mul(S0)
x := sdk.NewDecFromInt(S1R)
y := sdk.NewDecFromInt(S1R.Sub(S0R).Add(S0C))
return publicAlpha.Mul(x.Quo(y))
// return sdk.NewDecWithPrec(05, 1)
}
func Kappa(I sdk.Dec, C sdk.Int, alpha sdk.Dec) sdk.Dec {
// I: invariant
// C: outcome payment
x := I
z := alpha.MulInt(C)
y := I.Sub(z)
return x.Quo(y)
}
func InvariantI(C sdk.Int, alpha sdk.Dec, R sdk.Int) sdk.Dec {
// C: outcome payment
// R: current reserve
return alpha.MulInt(C).Add(sdk.NewDecFromInt(R))
}
func InvariantIAlt(C sdk.Int, alpha sdk.Dec, kappa sdk.Dec) sdk.Dec {
// C: outcome payment
x := alpha.MulInt(C)
y := sdk.OneDec().Sub(sdk.OneDec().Quo(kappa))
return x.Quo(y)
}