/
opyn.go
91 lines (76 loc) · 2.27 KB
/
opyn.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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// Copyright 2022 Teal.Finance/Rainbow contributors
// This file is part of Teal.Finance/Rainbow,
// a screener for DeFi options under the MIT License.
// SPDX-License-Identifier: MIT
package opyn
import (
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/spewerspew/spew"
"github.com/teal-finance/emo"
"github.com/teal-finance/rainbow/pkg/rainbow"
)
const (
Osqth = "0xf1B99e3E573A1a9C5E6B2Ce818b617F0E664E86B" // Squeeth token address 0squth=Opyn Squeeth
ControllerAddress = "0x64187ae08781B09368e6253F9E94951243A493D5" // controller address
InfuraRPC = "https://mainnet.infura.io/v3/c1b94bff90754066a81d195ddc337ff3"
)
var log = emo.NewZone("Opyn")
type VaultsProvider struct{}
func (VaultsProvider) Name() string {
return "Opyn"
}
type Vault struct {
Operator common.Address
NftCollateralId uint32
CollateralAmount *big.Int
ShortAmount *big.Int
}
// GetClient returns a rpc client for mainnet
func GetClient() (*ethclient.Client, error) {
client, err := ethclient.Dial(InfuraRPC)
if err != nil {
log.Print("client", err)
return ðclient.Client{}, err
}
return client, nil
}
func GetVault(v int64, client *ethclient.Client) (Vault, error) {
controller, err := NewController(common.HexToAddress(ControllerAddress), client)
if err != nil {
log.Print("controller", err)
return Vault{}, err
}
vault, err := controller.Vaults(B, big.NewInt(v))
if err != nil {
log.Print("Vaults", err)
return Vault{}, nil
}
/*return Vault{
Operator: vault.Operator,
NftCollateralId: vault.NftCollateralId,
CollateralAmount: vault.CollateralAmount,
ShortAmount: vault.ShortAmount},
err*/
return vault, err
}
// HasNFT if the vault has a Uniswap LP NFT (!=0)
func (v Vault) HasNFT() bool {
return v.NftCollateralId != 0
}
// Twap: returns the Time Weighted Average Price of ETH for the last 420 blocks
// This is the period used for liquidation
func Twap(controller *Controller) float64 {
index, err := controller.GetIndex(B, 420)
if err != nil {
log.Print("ERR: ", err)
return 0
}
spew.Dump(index)
index.Sqrt(index)
spew.Dump(index)
return rainbow.ToFloat(index, 5)
}
var B *bind.CallOpts = &bind.CallOpts{}