-
Notifications
You must be signed in to change notification settings - Fork 7
/
Vault.kerosine.unbounded.sol
69 lines (61 loc) · 2.04 KB
/
Vault.kerosine.unbounded.sol
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
// SPDX-License-Identifier: MIT
pragma solidity =0.8.17;
import {KerosineVault} from "./Vault.kerosine.sol";
import {IVaultManager} from "../interfaces/IVaultManager.sol";
import {Vault} from "./Vault.sol";
import {Dyad} from "./Dyad.sol";
import {KerosineManager} from "./KerosineManager.sol";
import {BoundedKerosineVault} from "./Vault.kerosine.bounded.sol";
import {KerosineDenominator} from "../staking/KerosineDenominator.sol";
import {ERC20} from "@solmate/src/tokens/ERC20.sol";
import {SafeTransferLib} from "@solmate/src/utils/SafeTransferLib.sol";
contract UnboundedKerosineVault is KerosineVault {
using SafeTransferLib for ERC20;
Dyad public immutable dyad;
KerosineDenominator public kerosineDenominator;
constructor(
IVaultManager _vaultManager,
ERC20 _asset,
Dyad _dyad,
KerosineManager _kerosineManager
) KerosineVault(_vaultManager, _asset, _kerosineManager) {
dyad = _dyad;
}
function withdraw(
uint id,
address to,
uint amount
)
external
onlyVaultManager
{
id2asset[id] -= amount;
asset.safeTransfer(to, amount);
emit Withdraw(id, to, amount);
}
function setDenominator(KerosineDenominator _kerosineDenominator)
external
onlyOwner
{
kerosineDenominator = _kerosineDenominator;
}
function assetPrice()
public
view
override
returns (uint) {
uint tvl;
address[] memory vaults = kerosineManager.getVaults();
uint numberOfVaults = vaults.length;
for (uint i = 0; i < numberOfVaults; i++) {
Vault vault = Vault(vaults[i]);
tvl += vault.asset().balanceOf(address(vault))
* vault.assetPrice() * 1e18
/ (10**vault.asset().decimals())
/ (10**vault.oracle().decimals());
}
uint numerator = tvl - dyad.totalSupply();
uint denominator = kerosineDenominator.denominator();
return numerator * 1e8 / denominator;
}
}