hedge-web3 0.1.50 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- package/declarations/Constants.d.ts +2 -1
- package/declarations/idl/vault.d.ts +192 -41
- package/declarations/index.d.ts +1 -0
- package/declarations/instructions/claimLiquidationPoolPosition.d.ts +1 -1
- package/declarations/instructions/claimStakingPoolPosition.d.ts +1 -1
- package/declarations/instructions/closeClaimedLiquidationPoolPosition.d.ts +5 -0
- package/declarations/instructions/closeLiquidationPoolPosition.d.ts +1 -1
- package/declarations/instructions/createStakingPool.d.ts +1 -1
- package/declarations/instructions/createVault.d.ts +1 -1
- package/declarations/instructions/depositLiquidationPool.d.ts +1 -1
- package/declarations/instructions/depositStakingPool.d.ts +1 -1
- package/declarations/instructions/depositVault.d.ts +1 -1
- package/declarations/instructions/initHedgeFoundation.d.ts +1 -1
- package/declarations/instructions/liquidateVault.d.ts +2 -2
- package/declarations/instructions/loanVault.d.ts +1 -1
- package/declarations/instructions/redeemVault.d.ts +1 -1
- package/declarations/instructions/refreshOraclePrice.d.ts +3 -3
- package/declarations/instructions/repayVault.d.ts +1 -1
- package/declarations/instructions/setHalted.d.ts +1 -1
- package/declarations/instructions/updateVaultType.d.ts +4 -1
- package/declarations/instructions/withdrawStakingPool.d.ts +1 -1
- package/declarations/instructions/withdrawVault.d.ts +1 -1
- package/declarations/state/VaultAccount.d.ts +9 -6
- package/declarations/utils/getLinkedListAccounts.d.ts +1 -1
- package/lib/Constants.js +3 -2
- package/lib/idl/vault.js +192 -41
- package/lib/index.js +1 -0
- package/lib/instructions/claimLiquidationPoolPosition.js +5 -1
- package/lib/instructions/claimStakingPoolPosition.js +5 -1
- package/lib/instructions/closeClaimedLiquidationPoolPosition.js +38 -0
- package/lib/instructions/closeLiquidationPoolPosition.js +5 -1
- package/lib/instructions/createStakingPool.js +5 -1
- package/lib/instructions/createVault.js +5 -1
- package/lib/instructions/depositLiquidationPool.js +5 -1
- package/lib/instructions/depositStakingPool.js +5 -1
- package/lib/instructions/depositVault.js +12 -8
- package/lib/instructions/initHedgeFoundation.js +5 -1
- package/lib/instructions/initHedgeFoundationTokens.js +5 -1
- package/lib/instructions/liquidateVault.js +10 -8
- package/lib/instructions/loanVault.js +9 -6
- package/lib/instructions/redeemVault.js +9 -6
- package/lib/instructions/refreshOraclePrice.js +8 -3
- package/lib/instructions/repayVault.js +9 -6
- package/lib/instructions/setHalted.js +5 -1
- package/lib/instructions/updateVaultType.js +9 -2
- package/lib/instructions/withdrawStakingPool.js +5 -1
- package/lib/instructions/withdrawVault.js +9 -6
- package/lib/state/VaultAccount.js +28 -32
- package/lib/utils/getLinkedListAccounts.js +54 -57
- package/package.json +1 -1
- package/src/Constants.ts +2 -1
- package/src/idl/vault.ts +384 -82
- package/src/index.ts +1 -0
- package/src/instructions/claimLiquidationPoolPosition.ts +3 -2
- package/src/instructions/claimStakingPoolPosition.ts +3 -2
- package/src/instructions/closeClaimedLiquidationPoolPosition.ts +31 -0
- package/src/instructions/closeLiquidationPoolPosition.ts +3 -2
- package/src/instructions/createStakingPool.ts +3 -2
- package/src/instructions/createVault.ts +3 -2
- package/src/instructions/depositLiquidationPool.ts +3 -2
- package/src/instructions/depositStakingPool.ts +3 -2
- package/src/instructions/depositVault.ts +11 -11
- package/src/instructions/initHedgeFoundation.ts +3 -2
- package/src/instructions/initHedgeFoundationTokens.ts +2 -1
- package/src/instructions/liquidateVault.ts +11 -10
- package/src/instructions/loanVault.ts +11 -9
- package/src/instructions/redeemVault.ts +7 -7
- package/src/instructions/refreshOraclePrice.ts +9 -6
- package/src/instructions/repayVault.ts +7 -7
- package/src/instructions/setHalted.ts +3 -2
- package/src/instructions/updateVaultType.ts +10 -2
- package/src/instructions/withdrawStakingPool.ts +5 -3
- package/src/instructions/withdrawVault.ts +7 -7
- package/src/state/VaultAccount.ts +37 -32
- package/src/state/VaultType.ts +62 -0
- package/src/utils/getLinkedListAccounts.ts +61 -60
- package/src/utils/sendAndConfirmWithDebug.ts +27 -0
package/src/index.ts
CHANGED
@@ -6,6 +6,7 @@ export * from './instructions/claimStakingPoolPosition'
|
|
6
6
|
export * from './instructions/depositLiquidationPool'
|
7
7
|
export * from './instructions/closeLiquidationPoolPosition'
|
8
8
|
export * from './instructions/claimLiquidationPoolPosition'
|
9
|
+
export * from './instructions/closeClaimedLiquidationPoolPosition'
|
9
10
|
export * from './instructions/createVault'
|
10
11
|
export * from './instructions/depositVault'
|
11
12
|
export * from './instructions/withdrawVault'
|
@@ -16,7 +16,8 @@ import {
|
|
16
16
|
getLiquidationPoolStatePublicKey,
|
17
17
|
getVaultSystemStatePublicKey,
|
18
18
|
} from '../Constants'
|
19
|
-
import
|
19
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
20
|
+
import { Vault } from '../idl/vault'
|
20
21
|
|
21
22
|
export async function claimLiquidationPoolPosition(
|
22
23
|
program: Program<Vault>,
|
@@ -48,7 +49,7 @@ export async function claimLiquidationPoolPosition(
|
|
48
49
|
overrideStartTime
|
49
50
|
)
|
50
51
|
)
|
51
|
-
await
|
52
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
|
52
53
|
return payerAssociatedTokenAccount.address
|
53
54
|
}
|
54
55
|
|
@@ -17,7 +17,8 @@ import {
|
|
17
17
|
getPoolPublicKeyForMint,
|
18
18
|
getVaultSystemStatePublicKey,
|
19
19
|
} from '../Constants'
|
20
|
-
import
|
20
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
21
|
+
import { Vault } from '../idl/vault'
|
21
22
|
|
22
23
|
export async function claimStakingPoolPosition(
|
23
24
|
program: Program<Vault>,
|
@@ -58,7 +59,7 @@ export async function claimStakingPoolPosition(
|
|
58
59
|
payerAssociatedTokenAccount.address
|
59
60
|
)
|
60
61
|
)
|
61
|
-
await
|
62
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
|
62
63
|
return payerAssociatedTokenAccount.address
|
63
64
|
}
|
64
65
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import { Program, Provider } from '@project-serum/anchor'
|
2
|
+
import { PublicKey, Signer, Transaction, TransactionInstruction } from '@solana/web3.js'
|
3
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
4
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
5
|
+
import { Vault } from '../idl/vault'
|
6
|
+
|
7
|
+
export async function closeClaimedLiquidationPoolPosition(
|
8
|
+
program: Program<Vault>,
|
9
|
+
provider: Provider,
|
10
|
+
poolPosition: PublicKey,
|
11
|
+
payer: Signer
|
12
|
+
): Promise<PublicKey> {
|
13
|
+
const transaction = new Transaction().add(await closeClaimedLiquidationPoolPositionInstruction(program, poolPosition, payer.publicKey))
|
14
|
+
|
15
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
|
16
|
+
return poolPosition
|
17
|
+
}
|
18
|
+
|
19
|
+
export async function closeClaimedLiquidationPoolPositionInstruction(
|
20
|
+
program: Program<Vault>,
|
21
|
+
poolPosition: PublicKey,
|
22
|
+
payer: PublicKey
|
23
|
+
): Promise<TransactionInstruction> {
|
24
|
+
return program.methods
|
25
|
+
.closeClaimedLiquidationPool()
|
26
|
+
.accounts({
|
27
|
+
poolPosition: poolPosition,
|
28
|
+
payer: payer
|
29
|
+
})
|
30
|
+
.instruction()
|
31
|
+
}
|
@@ -17,7 +17,8 @@ import {
|
|
17
17
|
getUshMintPublicKey,
|
18
18
|
getVaultSystemStatePublicKey,
|
19
19
|
} from '../Constants'
|
20
|
-
import
|
20
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
21
|
+
import { Vault } from '../idl/vault'
|
21
22
|
|
22
23
|
export async function closeLiquidationPoolPosition(
|
23
24
|
program: Program<Vault>,
|
@@ -64,7 +65,7 @@ export async function closeLiquidationPoolPosition(
|
|
64
65
|
overrideStartTime
|
65
66
|
)
|
66
67
|
)
|
67
|
-
await
|
68
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
|
68
69
|
return poolPosition
|
69
70
|
}
|
70
71
|
|
@@ -16,7 +16,8 @@ import {
|
|
16
16
|
getUshMintPublicKey,
|
17
17
|
getVaultSystemStatePublicKey,
|
18
18
|
} from '../Constants'
|
19
|
-
import
|
19
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
20
|
+
import { Vault } from '../idl/vault'
|
20
21
|
|
21
22
|
export async function createStakingPool(
|
22
23
|
program: Program<Vault>,
|
@@ -29,7 +30,7 @@ export async function createStakingPool(
|
|
29
30
|
const transaction = new Transaction().add(
|
30
31
|
await createStakingPoolInstruction(program, payer.publicKey, mintPublicKey, hedgeTokensToBeMinted, overrideStartTime)
|
31
32
|
)
|
32
|
-
await
|
33
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
|
33
34
|
const [poolPublickey] = await getPoolPublicKeyForMint(mintPublicKey)
|
34
35
|
return poolPublickey
|
35
36
|
}
|
@@ -23,7 +23,8 @@ import {
|
|
23
23
|
|
24
24
|
import { v4 as uuidv4 } from 'uuid'
|
25
25
|
import { parseAnchorErrors } from '../utils/Errors'
|
26
|
-
import
|
26
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
27
|
+
import { Vault } from '../idl/vault'
|
27
28
|
|
28
29
|
export async function createVault(
|
29
30
|
program: Program<Vault>,
|
@@ -106,7 +107,7 @@ export async function createVault(
|
|
106
107
|
)
|
107
108
|
}
|
108
109
|
|
109
|
-
await
|
110
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, signers).catch(parseAnchorErrors)
|
110
111
|
return newVaultPublicKey
|
111
112
|
}
|
112
113
|
|
@@ -17,7 +17,8 @@ import {
|
|
17
17
|
getUshMintPublicKey,
|
18
18
|
getVaultSystemStatePublicKey,
|
19
19
|
} from '../Constants'
|
20
|
-
import
|
20
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
21
|
+
import { Vault } from '../idl/vault'
|
21
22
|
|
22
23
|
export async function depositLiquidationPool(
|
23
24
|
program: Program<Vault>,
|
@@ -45,7 +46,7 @@ export async function depositLiquidationPool(
|
|
45
46
|
overrideStartTime
|
46
47
|
)
|
47
48
|
)
|
48
|
-
await
|
49
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer, poolPosition]).catch(parseAnchorErrors)
|
49
50
|
return poolPosition.publicKey
|
50
51
|
}
|
51
52
|
|
@@ -12,7 +12,8 @@ import {
|
|
12
12
|
} from '@solana/web3.js'
|
13
13
|
import { parseAnchorErrors } from '../utils/Errors'
|
14
14
|
import { findAssociatedTokenAddress, getPoolPublicKeyForMint, getVaultSystemStatePublicKey } from '../Constants'
|
15
|
-
import
|
15
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
16
|
+
import { Vault } from '../idl/vault'
|
16
17
|
|
17
18
|
export async function depositStakingPool(
|
18
19
|
program: Program<Vault>,
|
@@ -33,7 +34,7 @@ export async function depositStakingPool(
|
|
33
34
|
overrideStartTime
|
34
35
|
)
|
35
36
|
)
|
36
|
-
await
|
37
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer, poolPosition]).catch(parseAnchorErrors)
|
37
38
|
return poolPosition.publicKey
|
38
39
|
}
|
39
40
|
|
@@ -19,7 +19,9 @@ import {
|
|
19
19
|
getPoolPublicKeyForMint,
|
20
20
|
getHedgeMintPublicKey,
|
21
21
|
} from '../Constants'
|
22
|
-
import
|
22
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
23
|
+
import { Vault } from '../idl/vault'
|
24
|
+
import { WRAPPED_SOL_MINT } from '@project-serum/serum/lib/token-instructions'
|
23
25
|
|
24
26
|
export async function depositVault(
|
25
27
|
program: Program<Vault>,
|
@@ -35,13 +37,12 @@ export async function depositVault(
|
|
35
37
|
await getOrCreateAssociatedTokenAccount(provider.connection, payer, ushMintPublickey, payer.publicKey)
|
36
38
|
|
37
39
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
38
|
-
const
|
39
|
-
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultTypeAccountPublicKey)
|
40
|
+
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultAccount.vaultType)
|
40
41
|
const vaultTypeAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
41
42
|
provider.connection,
|
42
43
|
payer,
|
43
44
|
vaultTypeAccountInfo.collateralMint,
|
44
|
-
|
45
|
+
vaultAccount.vaultType,
|
45
46
|
true
|
46
47
|
)
|
47
48
|
|
@@ -64,11 +65,10 @@ export async function depositVault(
|
|
64
65
|
|
65
66
|
const transaction = new Transaction()
|
66
67
|
const signers = [payer, history]
|
67
|
-
|
68
68
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
69
69
|
program,
|
70
70
|
provider,
|
71
|
-
|
71
|
+
vaultAccount.vaultType,
|
72
72
|
vaultPublicKey,
|
73
73
|
depositAmount,
|
74
74
|
0,
|
@@ -76,7 +76,7 @@ export async function depositVault(
|
|
76
76
|
false
|
77
77
|
)
|
78
78
|
|
79
|
-
if (
|
79
|
+
if (vaultTypeAccountInfo.collateralMint.toString() === WRAPPED_SOL_MINT.toString()) {
|
80
80
|
transaction.add(
|
81
81
|
SystemProgram.createAccount({
|
82
82
|
fromPubkey: payer.publicKey,
|
@@ -98,11 +98,11 @@ export async function depositVault(
|
|
98
98
|
program,
|
99
99
|
vaultSystemStatePublicKey,
|
100
100
|
payer.publicKey,
|
101
|
-
|
101
|
+
vaultTypeAccountInfo.collateralMint.toString() === WRAPPED_SOL_MINT.toString() ? wrappedSolAccount.publicKey : payerTokenAccount,
|
102
102
|
vaultPublicKey,
|
103
103
|
vaultAssociatedCollateralAccountPublicKey,
|
104
104
|
history.publicKey,
|
105
|
-
|
105
|
+
vaultAccount.vaultType,
|
106
106
|
vaultTypeAssociatedTokenAccount.address,
|
107
107
|
hedgeStakingPoolPublicKey,
|
108
108
|
hedgeStakingPoolAssociatedUshTokenAccount,
|
@@ -115,7 +115,7 @@ export async function depositVault(
|
|
115
115
|
overrideTime
|
116
116
|
)
|
117
117
|
)
|
118
|
-
if (
|
118
|
+
if (vaultTypeAccountInfo.collateralMint.toString() === WRAPPED_SOL_MINT.toString()) {
|
119
119
|
transaction.add(
|
120
120
|
TokenInstructions.closeAccount({
|
121
121
|
source: wrappedSolAccount.publicKey,
|
@@ -125,7 +125,7 @@ export async function depositVault(
|
|
125
125
|
)
|
126
126
|
}
|
127
127
|
|
128
|
-
await
|
128
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, signers)
|
129
129
|
return vaultPublicKey
|
130
130
|
}
|
131
131
|
|
@@ -19,7 +19,8 @@ import {
|
|
19
19
|
getUshMintPublicKey,
|
20
20
|
getVaultSystemStatePublicKey,
|
21
21
|
} from '../Constants'
|
22
|
-
import
|
22
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
23
|
+
import { Vault } from '../idl/vault'
|
23
24
|
|
24
25
|
export async function initHedgeFoundation(program: Program<Vault>, provider: Provider, payer: Signer): Promise<PublicKey> {
|
25
26
|
const poolEra = Keypair.generate()
|
@@ -27,7 +28,7 @@ export async function initHedgeFoundation(program: Program<Vault>, provider: Pro
|
|
27
28
|
await initHedgeFoundationInstruction(program, poolEra.publicKey, payer.publicKey)
|
28
29
|
)
|
29
30
|
|
30
|
-
await
|
31
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer, poolEra]).catch(parseAnchorErrors)
|
31
32
|
return payer.publicKey
|
32
33
|
}
|
33
34
|
|
@@ -19,12 +19,13 @@ import {
|
|
19
19
|
getUshMintPublicKey,
|
20
20
|
getVaultSystemStatePublicKey,
|
21
21
|
} from '../Constants'
|
22
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
22
23
|
|
23
24
|
export async function initHedgeFoundationTokens(program: Program, provider: Provider, payer: Signer): Promise<PublicKey> {
|
24
25
|
const poolEra = Keypair.generate()
|
25
26
|
const transaction = new Transaction().add(await initHedgeFoundationTokensInstruction(program, payer.publicKey))
|
26
27
|
|
27
|
-
await
|
28
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
|
28
29
|
return payer.publicKey
|
29
30
|
}
|
30
31
|
|
@@ -1,6 +1,7 @@
|
|
1
|
-
import { BN, Program, Provider } from '@project-serum/anchor'
|
1
|
+
import { BN, Program, Provider, translateAddress } from '@project-serum/anchor'
|
2
2
|
import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getOrCreateAssociatedTokenAccount } from '@solana/spl-token'
|
3
3
|
import {
|
4
|
+
Connection,
|
4
5
|
Keypair,
|
5
6
|
PublicKey,
|
6
7
|
sendAndConfirmTransaction,
|
@@ -20,7 +21,8 @@ import {
|
|
20
21
|
getUshMintPublicKey,
|
21
22
|
getVaultSystemStatePublicKey,
|
22
23
|
} from '../Constants'
|
23
|
-
import
|
24
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
25
|
+
import { Vault } from '../idl/vault'
|
24
26
|
|
25
27
|
export async function liquidateVault(
|
26
28
|
program: Program<Vault>,
|
@@ -31,8 +33,7 @@ export async function liquidateVault(
|
|
31
33
|
): Promise<PublicKey> {
|
32
34
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
33
35
|
|
34
|
-
const
|
35
|
-
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultTypeAccountPublicKey)
|
36
|
+
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultAccount.vaultType)
|
36
37
|
const collateralMint = vaultTypeAccountInfo.collateralMint
|
37
38
|
|
38
39
|
const hedgeMintPublickey = await getHedgeMintPublicKey()
|
@@ -73,7 +74,7 @@ export async function liquidateVault(
|
|
73
74
|
provider.connection,
|
74
75
|
payer,
|
75
76
|
collateralMint,
|
76
|
-
|
77
|
+
vaultAccount.vaultType,
|
77
78
|
true
|
78
79
|
)
|
79
80
|
const hedgeStakingPoolAssociatedUshTokenAccount = await getOrCreateAssociatedTokenAccount(
|
@@ -87,7 +88,7 @@ export async function liquidateVault(
|
|
87
88
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
88
89
|
program,
|
89
90
|
provider,
|
90
|
-
|
91
|
+
vaultAccount.vaultType,
|
91
92
|
vaultPublicKey,
|
92
93
|
0,
|
93
94
|
0,
|
@@ -119,11 +120,12 @@ export async function liquidateVault(
|
|
119
120
|
oldSmallerPublicKey,
|
120
121
|
newSmallerPublicKey,
|
121
122
|
newLargerPublicKey,
|
122
|
-
vaultAccount.
|
123
|
+
vaultAccount.vaultType,
|
123
124
|
overrideTime
|
124
125
|
)
|
125
126
|
)
|
126
|
-
|
127
|
+
|
128
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer, history, newEra])
|
127
129
|
return vaultPublicKey
|
128
130
|
}
|
129
131
|
|
@@ -146,13 +148,12 @@ export async function liquidateVaultInstruction(
|
|
146
148
|
oldSmallerPublicKey: PublicKey,
|
147
149
|
newSmallerPublicKey: PublicKey,
|
148
150
|
newLargerPublicKey: PublicKey,
|
149
|
-
|
151
|
+
vaultTypeAccount: PublicKey,
|
150
152
|
overrideTime?: number
|
151
153
|
): Promise<TransactionInstruction> {
|
152
154
|
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
153
155
|
const ushMintPublickey = await getUshMintPublicKey()
|
154
156
|
const liquidationPoolUshAccountPublickey = await getLiquidationPoolUshAccountPublicKey()
|
155
|
-
const vaultTypeAccount = await getVaultTypeAccountPublicKey(collateralType)
|
156
157
|
|
157
158
|
return await program.methods
|
158
159
|
.liquidateVault(
|
@@ -17,8 +17,12 @@ import {
|
|
17
17
|
getVaultTypeAccountPublicKey,
|
18
18
|
getUshMintPublicKey,
|
19
19
|
getVaultSystemStatePublicKey,
|
20
|
+
HEDGE_PROGRAM_PUBLICKEY,
|
20
21
|
} from '../Constants'
|
21
|
-
import
|
22
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
23
|
+
import { Vault } from '../idl/vault'
|
24
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
25
|
+
import { VaultAccount } from '../state/VaultAccount'
|
22
26
|
|
23
27
|
export async function loanVault(
|
24
28
|
program: Program<Vault>,
|
@@ -36,15 +40,14 @@ export async function loanVault(
|
|
36
40
|
ushMintPublickey,
|
37
41
|
payer.publicKey
|
38
42
|
)
|
39
|
-
|
40
43
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
41
|
-
const
|
42
|
-
|
44
|
+
const vaultTypeAccount = await program.account.vaultType.fetch(vaultAccount.vaultType)
|
45
|
+
|
43
46
|
const vaultTypeAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
44
47
|
provider.connection,
|
45
48
|
payer,
|
46
49
|
vaultTypeAccount.collateralMint,
|
47
|
-
|
50
|
+
vaultAccount.vaultType,
|
48
51
|
true
|
49
52
|
)
|
50
53
|
const vaultAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
@@ -54,11 +57,10 @@ export async function loanVault(
|
|
54
57
|
vaultPublicKey,
|
55
58
|
true
|
56
59
|
)
|
57
|
-
|
58
60
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
59
61
|
program,
|
60
62
|
provider,
|
61
|
-
|
63
|
+
vaultAccount.vaultType,
|
62
64
|
vaultPublicKey,
|
63
65
|
0,
|
64
66
|
loanAmount,
|
@@ -75,7 +77,7 @@ export async function loanVault(
|
|
75
77
|
vaultPublicKey,
|
76
78
|
vaultAssociatedTokenAccount.address,
|
77
79
|
history.publicKey,
|
78
|
-
|
80
|
+
vaultAccount.vaultType,
|
79
81
|
vaultTypeAssociatedTokenAccount.address,
|
80
82
|
oldSmallerPublicKey,
|
81
83
|
newSmallerPublicKey,
|
@@ -84,7 +86,7 @@ export async function loanVault(
|
|
84
86
|
overrideTime
|
85
87
|
)
|
86
88
|
)
|
87
|
-
await
|
89
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer, history])
|
88
90
|
return vaultPublicKey
|
89
91
|
}
|
90
92
|
|
@@ -19,7 +19,8 @@ import {
|
|
19
19
|
getUshMintPublicKey,
|
20
20
|
getVaultSystemStatePublicKey,
|
21
21
|
} from '../Constants'
|
22
|
-
import
|
22
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
23
|
+
import { Vault } from '../idl/vault'
|
23
24
|
|
24
25
|
export async function redeemVault(
|
25
26
|
program: Program<Vault>,
|
@@ -40,13 +41,12 @@ export async function redeemVault(
|
|
40
41
|
)
|
41
42
|
|
42
43
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
43
|
-
const
|
44
|
-
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultTypeAccountPublicKey)
|
44
|
+
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultAccount.vaultType)
|
45
45
|
const vaultTypeAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
46
46
|
provider.connection,
|
47
47
|
payer,
|
48
48
|
vaultTypeAccountInfo.collateralMint,
|
49
|
-
|
49
|
+
vaultAccount.vaultType,
|
50
50
|
true
|
51
51
|
)
|
52
52
|
|
@@ -68,7 +68,7 @@ export async function redeemVault(
|
|
68
68
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
69
69
|
program,
|
70
70
|
provider,
|
71
|
-
|
71
|
+
vaultAccount.vaultType,
|
72
72
|
vaultPublicKey,
|
73
73
|
0,
|
74
74
|
0,
|
@@ -86,7 +86,7 @@ export async function redeemVault(
|
|
86
86
|
vaultPublicKey,
|
87
87
|
vaultAssociatedTokenAccount.address,
|
88
88
|
history.publicKey,
|
89
|
-
|
89
|
+
vaultAccount.vaultType,
|
90
90
|
vaultTypeAssociatedTokenAccount.address,
|
91
91
|
oldSmallerPublicKey,
|
92
92
|
newSmallerPublicKey,
|
@@ -95,7 +95,7 @@ export async function redeemVault(
|
|
95
95
|
transactionOverrideTime
|
96
96
|
)
|
97
97
|
)
|
98
|
-
await
|
98
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer, history])
|
99
99
|
return vaultPublicKey
|
100
100
|
}
|
101
101
|
|
@@ -7,9 +7,11 @@ import {
|
|
7
7
|
SystemProgram,
|
8
8
|
Transaction,
|
9
9
|
TransactionInstruction,
|
10
|
+
TransactionSignature,
|
10
11
|
} from '@solana/web3.js'
|
11
|
-
import
|
12
|
-
import {
|
12
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
13
|
+
import { Vault } from '../idl/vault'
|
14
|
+
import { HEDGE_PROGRAM_PUBLICKEY, CHAINLINK_PROGRAM_ID } from '../Constants'
|
13
15
|
|
14
16
|
export async function refreshOraclePrice(
|
15
17
|
program: Program<Vault>,
|
@@ -19,11 +21,11 @@ export async function refreshOraclePrice(
|
|
19
21
|
network: Cluster,
|
20
22
|
overridePrice?: number,
|
21
23
|
overrideTime?: number
|
22
|
-
): Promise<
|
24
|
+
): Promise<TransactionSignature | void> {
|
23
25
|
const transaction = new Transaction().add(
|
24
26
|
await refreshOraclePriceInstruction(program, collateralType, network, overridePrice, overrideTime)
|
25
27
|
)
|
26
|
-
return await
|
28
|
+
return await sendAndConfirmWithDebug(provider.connection, transaction, [payer])
|
27
29
|
}
|
28
30
|
|
29
31
|
export async function refreshOraclePriceInstruction(
|
@@ -51,10 +53,11 @@ export async function refreshOraclePriceInstruction(
|
|
51
53
|
.accounts({
|
52
54
|
oracleInfoAccount: oracleInfoAccount,
|
53
55
|
vaultTypeAccount: vaultTypeAccount,
|
54
|
-
oracleChainlink:
|
56
|
+
oracleChainlink: chainlinkAccounts[network],
|
55
57
|
oraclePyth: pythAccounts[network],
|
56
58
|
oracleSwitchboard: switchboardAccounts[network],
|
57
59
|
systemProgram: SystemProgram.programId,
|
60
|
+
chainlinkProgram: CHAINLINK_PROGRAM_ID,
|
58
61
|
})
|
59
62
|
.instruction()
|
60
63
|
}
|
@@ -70,7 +73,7 @@ const pythAccounts = {
|
|
70
73
|
Devnet: new PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
|
71
74
|
MainnetBeta: new PublicKey('H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG'),
|
72
75
|
}
|
73
|
-
const
|
76
|
+
const chainlinkAccounts = {
|
74
77
|
Testing: SystemProgram.programId,
|
75
78
|
Devnet: new PublicKey('FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf'),
|
76
79
|
MainnetBeta: SystemProgram.programId, // CHAINLINK NOT ON MAINNET YET
|
@@ -18,7 +18,8 @@ import {
|
|
18
18
|
getUshMintPublicKey,
|
19
19
|
getVaultSystemStatePublicKey,
|
20
20
|
} from '../Constants'
|
21
|
-
import
|
21
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
22
|
+
import { Vault } from '../idl/vault'
|
22
23
|
|
23
24
|
export async function repayVault(
|
24
25
|
program: Program<Vault>,
|
@@ -39,10 +40,9 @@ export async function repayVault(
|
|
39
40
|
)
|
40
41
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
41
42
|
|
42
|
-
const
|
43
|
-
const vaultTypeAccount = await program.account.vaultType.fetch(vaultTypeAccountPublicKey)
|
43
|
+
const vaultTypeAccount = await program.account.vaultType.fetch(vaultAccount.vaultType)
|
44
44
|
const vaultTypeAssociatedTokenAccount = await findAssociatedTokenAddress(
|
45
|
-
|
45
|
+
vaultAccount.vaultType,
|
46
46
|
vaultTypeAccount.collateralMint
|
47
47
|
)
|
48
48
|
const vaultAssociatedTokenAccount = await findAssociatedTokenAddress(vaultPublicKey, vaultTypeAccount.collateralMint)
|
@@ -50,7 +50,7 @@ export async function repayVault(
|
|
50
50
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
51
51
|
program,
|
52
52
|
provider,
|
53
|
-
|
53
|
+
vaultAccount.vaultType,
|
54
54
|
vaultPublicKey,
|
55
55
|
0,
|
56
56
|
repayAmount * -1,
|
@@ -67,7 +67,7 @@ export async function repayVault(
|
|
67
67
|
vaultPublicKey,
|
68
68
|
vaultAssociatedTokenAccount,
|
69
69
|
history.publicKey,
|
70
|
-
|
70
|
+
vaultAccount.vaultType,
|
71
71
|
vaultTypeAssociatedTokenAccount,
|
72
72
|
oldSmallerPublicKey,
|
73
73
|
newSmallerPublicKey,
|
@@ -76,7 +76,7 @@ export async function repayVault(
|
|
76
76
|
overrideTime
|
77
77
|
)
|
78
78
|
)
|
79
|
-
await
|
79
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer, history])
|
80
80
|
return vaultPublicKey
|
81
81
|
}
|
82
82
|
|
@@ -22,7 +22,8 @@ import {
|
|
22
22
|
} from '../Constants'
|
23
23
|
|
24
24
|
import { parseAnchorErrors } from '../utils/Errors'
|
25
|
-
import
|
25
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
26
|
+
import { Vault } from '../idl/vault'
|
26
27
|
|
27
28
|
export async function setHalted(
|
28
29
|
program: Program<Vault>,
|
@@ -36,7 +37,7 @@ export async function setHalted(
|
|
36
37
|
await setHaltedInstruction(program, vaultSystemStatePublicKey, payer.publicKey, halted)
|
37
38
|
)
|
38
39
|
|
39
|
-
await
|
40
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
|
40
41
|
return vaultSystemStatePublicKey
|
41
42
|
}
|
42
43
|
|
@@ -21,7 +21,8 @@ import {
|
|
21
21
|
|
22
22
|
import { v4 as uuidv4 } from 'uuid'
|
23
23
|
import { parseAnchorErrors } from '../utils/Errors'
|
24
|
-
import
|
24
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
25
|
+
import { Vault } from '../idl/vault'
|
25
26
|
|
26
27
|
export interface VaultTypeConfig {
|
27
28
|
maxDebtExtended?: BN
|
@@ -32,6 +33,10 @@ export interface VaultTypeConfig {
|
|
32
33
|
oraclePyth?: PublicKey
|
33
34
|
oracleSwitchboard?: PublicKey
|
34
35
|
|
36
|
+
priorityPyth?: number,
|
37
|
+
priorityChainlink?: number,
|
38
|
+
prioritySwitchboard?: number,
|
39
|
+
|
35
40
|
deprecated?: boolean
|
36
41
|
}
|
37
42
|
|
@@ -55,7 +60,7 @@ export async function updateVaultType(
|
|
55
60
|
)
|
56
61
|
)
|
57
62
|
|
58
|
-
await
|
63
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer])
|
59
64
|
return vaultSystemStatePublicKey
|
60
65
|
}
|
61
66
|
|
@@ -75,6 +80,9 @@ export async function updateVaultTypeStatusInstruction(
|
|
75
80
|
oraclePyth: vaultTypeConfig.oraclePyth ?? null,
|
76
81
|
oracleSwitchboard: vaultTypeConfig.oracleSwitchboard ?? null,
|
77
82
|
deprecated: vaultTypeConfig.deprecated ?? null,
|
83
|
+
priorityPyth: vaultTypeConfig.priorityPyth ?? null,
|
84
|
+
priorityChainlink: vaultTypeConfig.priorityChainlink ?? null,
|
85
|
+
prioritySwitchboard: vaultTypeConfig.prioritySwitchboard ?? null,
|
78
86
|
}
|
79
87
|
|
80
88
|
return await program.methods
|