hedge-web3 0.2.21 → 0.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/declarations/Constants.d.ts +25 -12
- package/declarations/idl/pyth.d.ts +44 -24
- package/declarations/idl/switchboard.d.ts +47 -0
- package/declarations/idl/vault.d.ts +905 -155
- package/declarations/index.d.ts +26 -20
- package/declarations/instructions/closeLiquidationPoolPosition.d.ts +2 -2
- package/declarations/instructions/createReferralAccount.d.ts +17 -0
- package/declarations/instructions/createUserReferralAccount.d.ts +5 -0
- package/declarations/instructions/depositLiquidationPool.d.ts +2 -2
- package/declarations/instructions/loanVault.d.ts +2 -2
- package/declarations/instructions/psmEditAccount.d.ts +12 -0
- package/declarations/instructions/psmMintUsh.d.ts +2 -2
- package/declarations/instructions/psmRedeemUsh.d.ts +2 -2
- package/declarations/instructions/referralClaimFees.d.ts +16 -0
- package/declarations/instructions/transferVault.d.ts +3 -17
- package/declarations/instructions/updateReferralAccount.d.ts +13 -0
- package/declarations/instructions/updateReferralState.d.ts +20 -0
- package/declarations/state/VaultAccount.d.ts +1 -1
- package/declarations/utils/getLinkedListAccounts.d.ts +2 -2
- package/lib/Constants.js +57 -28
- package/lib/idl/pyth.js +44 -24
- package/lib/idl/switchboard.js +49 -0
- package/lib/idl/vault.js +898 -148
- package/lib/index.js +26 -20
- package/lib/instructions/claimLiquidationPoolPosition.js +10 -7
- package/lib/instructions/claimStakingPoolPosition.js +5 -5
- package/lib/instructions/closeClaimedLiquidationPoolPosition.js +1 -1
- package/lib/instructions/closeLiquidationPoolPosition.js +25 -12
- package/lib/instructions/createReferralAccount.js +80 -0
- package/lib/instructions/createStakingPool.js +7 -7
- package/lib/instructions/createUserReferralAccount.js +61 -0
- package/lib/instructions/createVault.js +15 -15
- package/lib/instructions/depositLiquidationPool.js +21 -10
- package/lib/instructions/depositStakingPool.js +5 -5
- package/lib/instructions/depositVault.js +11 -9
- package/lib/instructions/initHedgeFoundation.js +8 -8
- package/lib/instructions/initHedgeFoundationTokens.js +5 -5
- package/lib/instructions/liquidateVault.js +8 -8
- package/lib/instructions/loanVault.js +23 -10
- package/lib/instructions/psmEditAccount.js +60 -0
- package/lib/instructions/psmMintUsh.js +24 -13
- package/lib/instructions/psmRedeemUsh.js +24 -13
- package/lib/instructions/redeemVault.js +7 -7
- package/lib/instructions/referralClaimFees.js +84 -0
- package/lib/instructions/refreshOraclePrice.js +3 -3
- package/lib/instructions/repayVault.js +9 -9
- package/lib/instructions/setHalted.js +1 -1
- package/lib/instructions/transferVault.js +10 -24
- package/lib/instructions/updateReferralAccount.js +50 -0
- package/lib/instructions/updateReferralState.js +57 -0
- package/lib/instructions/updateVaultType.js +1 -1
- package/lib/instructions/withdrawStakingPool.js +11 -11
- package/lib/instructions/withdrawVault.js +5 -5
- package/lib/state/VaultAccount.js +3 -1
- package/lib/utils/getLinkedListAccounts.js +2 -3
- package/package.json +1 -1
- package/src/Constants.ts +64 -63
- package/src/idl/pyth.ts +88 -48
- package/src/idl/switchboard.ts +93 -0
- package/src/idl/vault.ts +1851 -351
- package/src/index.ts +28 -24
- package/src/instructions/claimLiquidationPoolPosition.ts +31 -29
- package/src/instructions/claimStakingPoolPosition.ts +10 -15
- package/src/instructions/closeClaimedLiquidationPoolPosition.ts +4 -2
- package/src/instructions/closeLiquidationPoolPosition.ts +36 -18
- package/src/instructions/createReferralAccount.ts +115 -0
- package/src/instructions/createStakingPool.ts +11 -13
- package/src/instructions/createUserReferralAccount.ts +75 -0
- package/src/instructions/createVault.ts +44 -26
- package/src/instructions/depositLiquidationPool.ts +34 -21
- package/src/instructions/depositStakingPool.ts +18 -14
- package/src/instructions/depositVault.ts +23 -18
- package/src/instructions/initHedgeFoundation.ts +16 -14
- package/src/instructions/initHedgeFoundationTokens.ts +12 -14
- package/src/instructions/liquidateVault.ts +15 -20
- package/src/instructions/loanVault.ts +29 -19
- package/src/instructions/{psmEditAccount.rs → psmEditAccount.ts} +10 -18
- package/src/instructions/psmMintUsh.ts +35 -38
- package/src/instructions/psmRedeemUsh.ts +35 -40
- package/src/instructions/redeemVault.ts +12 -15
- package/src/instructions/referralClaimFees.ts +145 -0
- package/src/instructions/refreshOraclePrice.ts +6 -8
- package/src/instructions/repayVault.ts +18 -16
- package/src/instructions/setHalted.ts +5 -24
- package/src/instructions/transferVault.ts +57 -0
- package/src/instructions/updateReferralAccount.ts +70 -0
- package/src/instructions/updateReferralState.ts +86 -0
- package/src/instructions/updateVaultType.ts +9 -23
- package/src/instructions/withdrawStakingPool.ts +17 -21
- package/src/instructions/withdrawVault.ts +10 -16
- package/src/state/VaultAccount.ts +9 -10
- package/src/utils/getLinkedListAccounts.ts +4 -7
package/src/index.ts
CHANGED
|
@@ -1,37 +1,41 @@
|
|
|
1
|
-
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
4
|
-
export * from './instructions/withdrawStakingPool'
|
|
5
|
-
export * from './instructions/claimStakingPoolPosition'
|
|
6
|
-
export * from './instructions/depositLiquidationPool'
|
|
7
|
-
export * from './instructions/closeLiquidationPoolPosition'
|
|
1
|
+
export * from './Constants'
|
|
2
|
+
export * from './HedgeDecimal'
|
|
3
|
+
export * from './idl/vault'
|
|
8
4
|
export * from './instructions/claimLiquidationPoolPosition'
|
|
5
|
+
export * from './instructions/claimStakingPoolPosition'
|
|
9
6
|
export * from './instructions/closeClaimedLiquidationPoolPosition'
|
|
7
|
+
export * from './instructions/closeLiquidationPoolPosition'
|
|
8
|
+
export * from './instructions/createReferralAccount'
|
|
9
|
+
export * from './instructions/createStakingPool'
|
|
10
|
+
export * from './instructions/createUserReferralAccount'
|
|
10
11
|
export * from './instructions/createVault'
|
|
11
|
-
export * from './instructions/
|
|
12
|
-
export * from './instructions/
|
|
12
|
+
export * from './instructions/depositLiquidationPool'
|
|
13
|
+
export * from './instructions/depositStakingPool'
|
|
13
14
|
export * from './instructions/depositVault'
|
|
14
|
-
export * from './instructions/
|
|
15
|
+
export * from './instructions/initHedgeFoundation'
|
|
16
|
+
export * from './instructions/initHedgeFoundationTokens'
|
|
17
|
+
export * from './instructions/liquidateVault'
|
|
15
18
|
export * from './instructions/loanVault'
|
|
16
|
-
export * from './instructions/
|
|
19
|
+
export * from './instructions/psmMintUsh'
|
|
20
|
+
export * from './instructions/psmRedeemUsh'
|
|
17
21
|
export * from './instructions/redeemVault'
|
|
18
|
-
export * from './instructions/
|
|
22
|
+
export * from './instructions/referralClaimFees'
|
|
19
23
|
export * from './instructions/refreshOraclePrice'
|
|
20
|
-
export * from './instructions/
|
|
21
|
-
export * from './instructions/initHedgeFoundationTokens'
|
|
24
|
+
export * from './instructions/repayVault'
|
|
22
25
|
export * from './instructions/setHalted'
|
|
26
|
+
export * from './instructions/transferVault'
|
|
27
|
+
export * from './instructions/updateReferralAccount'
|
|
28
|
+
export * from './instructions/updateReferralState'
|
|
23
29
|
export * from './instructions/updateVaultType'
|
|
24
|
-
|
|
25
|
-
export * from './
|
|
26
|
-
export * from './Constants'
|
|
27
|
-
|
|
28
|
-
export * from './state/VaultAccount'
|
|
29
|
-
export * from './state/VaultHistoryEvent'
|
|
30
|
-
export * from './state/StakingPool'
|
|
31
|
-
export * from './state/StakingPoolPosition'
|
|
30
|
+
export * from './instructions/withdrawStakingPool'
|
|
31
|
+
export * from './instructions/withdrawVault'
|
|
32
32
|
export * from './state/LiquidationPoolEra'
|
|
33
33
|
export * from './state/LiquidationPoolState'
|
|
34
34
|
export * from './state/LiquidationPosition'
|
|
35
|
-
|
|
35
|
+
export * from './state/StakingPool'
|
|
36
|
+
export * from './state/StakingPoolPosition'
|
|
37
|
+
export * from './state/VaultAccount'
|
|
38
|
+
export * from './state/VaultHistoryEvent'
|
|
36
39
|
export * from './utils/getLinkedListAccounts'
|
|
37
|
-
|
|
40
|
+
|
|
41
|
+
|
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
import { Program, Provider } from '@project-serum/anchor'
|
|
2
2
|
import { ASSOCIATED_TOKEN_PROGRAM_ID, getOrCreateAssociatedTokenAccount, TOKEN_PROGRAM_ID } from '@solana/spl-token'
|
|
3
3
|
import {
|
|
4
|
-
PublicKey,
|
|
5
|
-
sendAndConfirmTransaction,
|
|
6
|
-
Signer,
|
|
4
|
+
PublicKey, Signer,
|
|
7
5
|
SystemProgram,
|
|
8
6
|
SYSVAR_RENT_PUBKEY,
|
|
9
7
|
Transaction,
|
|
10
|
-
TransactionInstruction
|
|
8
|
+
TransactionInstruction
|
|
11
9
|
} from '@solana/web3.js'
|
|
12
|
-
import { parseAnchorErrors } from '../utils/Errors'
|
|
13
10
|
import {
|
|
14
|
-
findAssociatedTokenAddress,
|
|
15
|
-
getVaultTypeAccountPublicKey
|
|
16
|
-
getLiquidationPoolStatePublicKey,
|
|
17
|
-
getVaultSystemStatePublicKey,
|
|
11
|
+
findAssociatedTokenAddress, getLiquidationPoolStatePublicKey,
|
|
12
|
+
getVaultSystemStatePublicKey, getVaultTypeAccountPublicKey
|
|
18
13
|
} from '../Constants'
|
|
19
|
-
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
20
14
|
import { Vault } from '../idl/vault'
|
|
15
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
|
16
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
21
17
|
|
|
22
18
|
export async function claimLiquidationPoolPosition(
|
|
23
19
|
program: Program<Vault>,
|
|
@@ -27,7 +23,7 @@ export async function claimLiquidationPoolPosition(
|
|
|
27
23
|
collateralType: string,
|
|
28
24
|
overrideStartTime?: number
|
|
29
25
|
): Promise<PublicKey> {
|
|
30
|
-
const vaultTypeAccountPublicKey = await getVaultTypeAccountPublicKey(collateralType)
|
|
26
|
+
const vaultTypeAccountPublicKey = await getVaultTypeAccountPublicKey(program.programId, collateralType)
|
|
31
27
|
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultTypeAccountPublicKey)
|
|
32
28
|
const collateralMintPublicKey = vaultTypeAccountInfo.collateralMint
|
|
33
29
|
|
|
@@ -62,23 +58,29 @@ export async function claimLiquidationPoolPositionInstruction(
|
|
|
62
58
|
payerAssociatedTokenAccount: PublicKey,
|
|
63
59
|
overrideStartTime?: number
|
|
64
60
|
): Promise<TransactionInstruction> {
|
|
61
|
+
const vaultSystemState = await getVaultSystemStatePublicKey(program.programId)
|
|
62
|
+
const poolStatePublicKey = await getLiquidationPoolStatePublicKey(program.programId)
|
|
63
|
+
const poolAssociatedTokenAccount = await findAssociatedTokenAddress(
|
|
64
|
+
program.programId,
|
|
65
|
+
poolStatePublicKey,
|
|
66
|
+
collateralMint
|
|
67
|
+
)
|
|
65
68
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}).instruction()
|
|
69
|
+
return await program.methods
|
|
70
|
+
.claimLiquidationPoolPosition()
|
|
71
|
+
.accounts({
|
|
72
|
+
vaultSystemState: vaultSystemState,
|
|
73
|
+
poolState: poolStatePublicKey,
|
|
74
|
+
poolAssociatedTokenAccount: poolAssociatedTokenAccount,
|
|
75
|
+
vaultTypeAccount: vaultTypeAccount,
|
|
76
|
+
collateralMint: collateralMint,
|
|
77
|
+
poolPosition: poolPosition,
|
|
78
|
+
payer: payer,
|
|
79
|
+
payerAssociatedTokenAccount: payerAssociatedTokenAccount,
|
|
80
|
+
associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
81
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
82
|
+
systemProgram: SystemProgram.programId,
|
|
83
|
+
rent: SYSVAR_RENT_PUBKEY,
|
|
84
|
+
})
|
|
85
|
+
.instruction()
|
|
84
86
|
}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
import { Program, Provider } from '@project-serum/anchor'
|
|
2
2
|
import { ASSOCIATED_TOKEN_PROGRAM_ID, getOrCreateAssociatedTokenAccount, TOKEN_PROGRAM_ID } from '@solana/spl-token'
|
|
3
3
|
import {
|
|
4
|
-
PublicKey,
|
|
5
|
-
sendAndConfirmTransaction,
|
|
6
|
-
Signer,
|
|
4
|
+
PublicKey, Signer,
|
|
7
5
|
SystemProgram,
|
|
8
6
|
SYSVAR_RENT_PUBKEY,
|
|
9
7
|
Transaction,
|
|
10
|
-
TransactionInstruction
|
|
8
|
+
TransactionInstruction
|
|
11
9
|
} from '@solana/web3.js'
|
|
12
|
-
import { parseAnchorErrors } from '../utils/Errors'
|
|
13
10
|
import {
|
|
14
|
-
getHedgeMintPublicKey,
|
|
15
|
-
|
|
16
|
-
getVaultTypeAccountPublicKey,
|
|
17
|
-
getPoolPublicKeyForMint,
|
|
18
|
-
getVaultSystemStatePublicKey,
|
|
11
|
+
getHedgeMintPublicKey, getPoolPublicKeyForMint,
|
|
12
|
+
getVaultSystemStatePublicKey, getVaultTypeAccountPublicKey
|
|
19
13
|
} from '../Constants'
|
|
20
|
-
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
21
14
|
import { Vault } from '../idl/vault'
|
|
15
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
|
16
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
22
17
|
|
|
23
18
|
export async function claimStakingPoolPosition(
|
|
24
19
|
program: Program<Vault>,
|
|
@@ -27,11 +22,11 @@ export async function claimStakingPoolPosition(
|
|
|
27
22
|
payer: Signer,
|
|
28
23
|
collateralType: string
|
|
29
24
|
): Promise<PublicKey> {
|
|
30
|
-
const vaultTypeAccount = await getVaultTypeAccountPublicKey(collateralType)
|
|
25
|
+
const vaultTypeAccount = await getVaultTypeAccountPublicKey(program.programId, collateralType)
|
|
31
26
|
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultTypeAccount)
|
|
32
27
|
const collateralMint = vaultTypeAccountInfo.collateralMint
|
|
33
|
-
const stakedTokenMint = await getHedgeMintPublicKey()
|
|
34
|
-
const [feePool] = await getPoolPublicKeyForMint(stakedTokenMint)
|
|
28
|
+
const stakedTokenMint = await getHedgeMintPublicKey(program.programId)
|
|
29
|
+
const [feePool] = await getPoolPublicKeyForMint(program.programId, stakedTokenMint)
|
|
35
30
|
const feePoolAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
|
36
31
|
provider.connection,
|
|
37
32
|
payer,
|
|
@@ -74,7 +69,7 @@ export async function claimStakingPoolPositionInstruction(
|
|
|
74
69
|
payer: PublicKey,
|
|
75
70
|
payerAssociatedTokenAccount: PublicKey
|
|
76
71
|
): Promise<TransactionInstruction> {
|
|
77
|
-
const vaultSystemState = await getVaultSystemStatePublicKey()
|
|
72
|
+
const vaultSystemState = await getVaultSystemStatePublicKey(program.programId)
|
|
78
73
|
|
|
79
74
|
return await program.methods
|
|
80
75
|
.claimStakingPoolPosition()
|
|
@@ -10,7 +10,9 @@ export async function closeClaimedLiquidationPoolPosition(
|
|
|
10
10
|
poolPosition: PublicKey,
|
|
11
11
|
payer: Signer
|
|
12
12
|
): Promise<PublicKey> {
|
|
13
|
-
const transaction = new Transaction().add(
|
|
13
|
+
const transaction = new Transaction().add(
|
|
14
|
+
await closeClaimedLiquidationPoolPositionInstruction(program, poolPosition, payer.publicKey)
|
|
15
|
+
)
|
|
14
16
|
|
|
15
17
|
await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
|
|
16
18
|
return poolPosition
|
|
@@ -25,7 +27,7 @@ export async function closeClaimedLiquidationPoolPositionInstruction(
|
|
|
25
27
|
.closeClaimedLiquidationPoolPosition()
|
|
26
28
|
.accounts({
|
|
27
29
|
poolPosition: poolPosition,
|
|
28
|
-
payer: payer
|
|
30
|
+
payer: payer,
|
|
29
31
|
})
|
|
30
32
|
.instruction()
|
|
31
33
|
}
|
|
@@ -1,44 +1,43 @@
|
|
|
1
1
|
import { BN, Program, Provider } from '@project-serum/anchor'
|
|
2
2
|
import { ASSOCIATED_TOKEN_PROGRAM_ID, getOrCreateAssociatedTokenAccount, TOKEN_PROGRAM_ID } from '@solana/spl-token'
|
|
3
3
|
import {
|
|
4
|
-
PublicKey,
|
|
5
|
-
sendAndConfirmTransaction,
|
|
6
|
-
Signer,
|
|
4
|
+
PublicKey, Signer,
|
|
7
5
|
SystemProgram,
|
|
8
6
|
SYSVAR_RENT_PUBKEY,
|
|
9
7
|
Transaction,
|
|
10
|
-
TransactionInstruction
|
|
8
|
+
TransactionInstruction
|
|
11
9
|
} from '@solana/web3.js'
|
|
12
|
-
import { parseAnchorErrors } from '../utils/Errors'
|
|
13
10
|
import {
|
|
14
11
|
getHedgeMintPublicKey,
|
|
15
12
|
getLiquidationPoolStatePublicKey,
|
|
16
|
-
getLiquidationPoolUshAccountPublicKey,
|
|
17
|
-
|
|
18
|
-
getVaultSystemStatePublicKey,
|
|
13
|
+
getLiquidationPoolUshAccountPublicKey, getReferralAccountPublicKey, getReferralStatePublicKey, getUserReferralAccountPublicKey, getUshMintPublicKey,
|
|
14
|
+
getVaultSystemStatePublicKey
|
|
19
15
|
} from '../Constants'
|
|
20
|
-
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
21
16
|
import { Vault } from '../idl/vault'
|
|
17
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
|
18
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
22
19
|
|
|
23
20
|
export async function closeLiquidationPoolPosition(
|
|
24
21
|
program: Program<Vault>,
|
|
25
22
|
provider: Provider,
|
|
26
23
|
poolPosition: PublicKey,
|
|
27
24
|
payer: Signer,
|
|
28
|
-
overrideStartTime?: number
|
|
25
|
+
overrideStartTime?: number,
|
|
26
|
+
referrer?: PublicKey
|
|
29
27
|
): Promise<PublicKey> {
|
|
30
|
-
const ushMintPublickey = await getUshMintPublicKey()
|
|
28
|
+
const ushMintPublickey = await getUshMintPublicKey(program.programId)
|
|
31
29
|
const payerUshAccount = await getOrCreateAssociatedTokenAccount(
|
|
32
30
|
provider.connection,
|
|
33
31
|
payer,
|
|
34
32
|
ushMintPublickey,
|
|
35
33
|
payer.publicKey
|
|
36
34
|
)
|
|
37
|
-
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
|
35
|
+
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey(program.programId)
|
|
36
|
+
const referralStatePublicKey = await getReferralStatePublicKey(program.programId)
|
|
38
37
|
const liquidationPositionAccount = await program.account.liquidationPosition.fetch(poolPosition)
|
|
39
38
|
const poolEra = liquidationPositionAccount.era
|
|
40
39
|
|
|
41
|
-
const hedgeMint = await getHedgeMintPublicKey()
|
|
40
|
+
const hedgeMint = await getHedgeMintPublicKey(program.programId)
|
|
42
41
|
const payerAssociatedHedgeAccount = await getOrCreateAssociatedTokenAccount(
|
|
43
42
|
provider.connection,
|
|
44
43
|
payer,
|
|
@@ -53,6 +52,16 @@ export async function closeLiquidationPoolPosition(
|
|
|
53
52
|
true
|
|
54
53
|
)
|
|
55
54
|
|
|
55
|
+
let referralAccountPublicKey = null
|
|
56
|
+
if (typeof referrer === 'undefined') {
|
|
57
|
+
referralAccountPublicKey = await getReferralAccountPublicKey(program.programId, vaultSystemStatePublicKey)
|
|
58
|
+
} else {
|
|
59
|
+
referralAccountPublicKey = await getReferralAccountPublicKey(program.programId, referrer)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Derive the user referral account public key
|
|
63
|
+
const userReferralAccountPublicKey = await getUserReferralAccountPublicKey(program.programId, payer.publicKey)
|
|
64
|
+
|
|
56
65
|
const transaction = new Transaction().add(
|
|
57
66
|
await closeLiquidationPoolPositionInstruction(
|
|
58
67
|
program,
|
|
@@ -62,6 +71,9 @@ export async function closeLiquidationPoolPosition(
|
|
|
62
71
|
payerUshAccount.address,
|
|
63
72
|
payerAssociatedHedgeAccount.address,
|
|
64
73
|
communityAssociatedHedgeTokenAccount.address,
|
|
74
|
+
userReferralAccountPublicKey,
|
|
75
|
+
referralAccountPublicKey,
|
|
76
|
+
referralStatePublicKey,
|
|
65
77
|
overrideStartTime
|
|
66
78
|
)
|
|
67
79
|
)
|
|
@@ -77,13 +89,16 @@ export async function closeLiquidationPoolPositionInstruction(
|
|
|
77
89
|
payerUshAccount: PublicKey,
|
|
78
90
|
payerAssociatedHedgeAccount: PublicKey,
|
|
79
91
|
communityAssociatedHedgeTokenAccount: PublicKey,
|
|
92
|
+
userReferralAccountPublicKey: PublicKey,
|
|
93
|
+
referralAccountPublicKey: PublicKey,
|
|
94
|
+
referralStatePublicKey: PublicKey,
|
|
80
95
|
overrideStartTime?: number
|
|
81
96
|
): Promise<TransactionInstruction> {
|
|
82
|
-
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
|
83
|
-
const ushMint = await getUshMintPublicKey()
|
|
84
|
-
const hedgeMint = await getHedgeMintPublicKey()
|
|
85
|
-
const poolUshAccount = await getLiquidationPoolUshAccountPublicKey()
|
|
86
|
-
const poolState = await getLiquidationPoolStatePublicKey()
|
|
97
|
+
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey(program.programId)
|
|
98
|
+
const ushMint = await getUshMintPublicKey(program.programId)
|
|
99
|
+
const hedgeMint = await getHedgeMintPublicKey(program.programId)
|
|
100
|
+
const poolUshAccount = await getLiquidationPoolUshAccountPublicKey(program.programId)
|
|
101
|
+
const poolState = await getLiquidationPoolStatePublicKey(program.programId)
|
|
87
102
|
|
|
88
103
|
return await program.methods
|
|
89
104
|
.closeLiquidationPoolPosition(
|
|
@@ -101,6 +116,9 @@ export async function closeLiquidationPoolPositionInstruction(
|
|
|
101
116
|
ushMint: ushMint,
|
|
102
117
|
payerAssociatedHedgeAccount: payerAssociatedHedgeAccount,
|
|
103
118
|
communityAssociatedHedgeTokenAccount: communityAssociatedHedgeTokenAccount,
|
|
119
|
+
userReferralAccount: userReferralAccountPublicKey,
|
|
120
|
+
referralAccount: referralAccountPublicKey,
|
|
121
|
+
referralState: referralStatePublicKey,
|
|
104
122
|
associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
105
123
|
tokenProgram: TOKEN_PROGRAM_ID,
|
|
106
124
|
systemProgram: SystemProgram.programId,
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { BN, Program, Provider } from '@project-serum/anchor'
|
|
2
|
+
import { getOrCreateAssociatedTokenAccount, TOKEN_PROGRAM_ID } from '@solana/spl-token'
|
|
3
|
+
import {
|
|
4
|
+
PublicKey, Signer,
|
|
5
|
+
SystemProgram,
|
|
6
|
+
SYSVAR_RENT_PUBKEY,
|
|
7
|
+
Transaction,
|
|
8
|
+
TransactionInstruction
|
|
9
|
+
} from '@solana/web3.js'
|
|
10
|
+
import {
|
|
11
|
+
getHedgeMintPublicKey, getReferralAccountPublicKey, getReferralStatePublicKey,
|
|
12
|
+
getUserReferralAccountPublicKey, getVaultSystemStatePublicKey
|
|
13
|
+
} from '../Constants'
|
|
14
|
+
|
|
15
|
+
import { Vault } from '../idl/vault'
|
|
16
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
|
17
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
18
|
+
|
|
19
|
+
/** @type {Function} - Creates a new referral account.
|
|
20
|
+
* This checks the user has enough HDG in their wallet or staked and
|
|
21
|
+
* then allows them to create a referral account. If they meet the PSM referral threshold,
|
|
22
|
+
* they will be eligible for PSM cut.
|
|
23
|
+
* Params:
|
|
24
|
+
* - program: Program<Vault> : The program instance of Hedge Vault program
|
|
25
|
+
* - provider: Provider : Current connection
|
|
26
|
+
* - payer: Signer : who we are creating the referral account for
|
|
27
|
+
* - poolPublicKey: PublicKey : a key to a pool position. If the position is closed or does not belong to the signer it will be ignored
|
|
28
|
+
* - referrer: PublicKey
|
|
29
|
+
* - overrideTime?: number
|
|
30
|
+
*/
|
|
31
|
+
export async function createReferralAccount(
|
|
32
|
+
program: Program<Vault>,
|
|
33
|
+
provider: Provider,
|
|
34
|
+
payer: Signer,
|
|
35
|
+
poolPosition: PublicKey,
|
|
36
|
+
overrideTime?: number
|
|
37
|
+
): Promise<PublicKey> {
|
|
38
|
+
// setup transaction
|
|
39
|
+
const transaction = new Transaction()
|
|
40
|
+
const signers = [payer]
|
|
41
|
+
const referrer = payer.publicKey
|
|
42
|
+
|
|
43
|
+
// Setup public keys
|
|
44
|
+
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey(program.programId)
|
|
45
|
+
|
|
46
|
+
// Find referral account
|
|
47
|
+
let referralAccountPublicKey = await getReferralAccountPublicKey(program.programId, referrer)
|
|
48
|
+
|
|
49
|
+
// Get the referral state PDA
|
|
50
|
+
const referallStatePublicKey = await getReferralStatePublicKey(program.programId)
|
|
51
|
+
|
|
52
|
+
// Get HDG mint public key
|
|
53
|
+
const hedgeMintPublicKey = await getHedgeMintPublicKey(program.programId)
|
|
54
|
+
|
|
55
|
+
// Get HDG account of signer
|
|
56
|
+
const payerHdgAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
|
57
|
+
provider.connection,
|
|
58
|
+
payer,
|
|
59
|
+
hedgeMintPublicKey,
|
|
60
|
+
payer.publicKey
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
// Derive the user referral account public key
|
|
64
|
+
const userReferralAccountPublicKey = await getUserReferralAccountPublicKey(program.programId, payer.publicKey)
|
|
65
|
+
|
|
66
|
+
transaction.add(
|
|
67
|
+
await createReferralAccountInstruction(
|
|
68
|
+
program,
|
|
69
|
+
payer.publicKey,
|
|
70
|
+
poolPosition,
|
|
71
|
+
referralAccountPublicKey,
|
|
72
|
+
referallStatePublicKey,
|
|
73
|
+
hedgeMintPublicKey,
|
|
74
|
+
payerHdgAssociatedTokenAccount.address,
|
|
75
|
+
userReferralAccountPublicKey,
|
|
76
|
+
overrideTime
|
|
77
|
+
)
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, signers).catch(parseAnchorErrors)
|
|
81
|
+
return referralAccountPublicKey
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export async function createReferralAccountInstruction(
|
|
85
|
+
program: Program<Vault>,
|
|
86
|
+
payerPublicKey: PublicKey,
|
|
87
|
+
poolPositionPublicKey: PublicKey,
|
|
88
|
+
referralAccountPublicKey: PublicKey,
|
|
89
|
+
referralStatePublicKey: PublicKey,
|
|
90
|
+
hedgeMintPublicKey: PublicKey,
|
|
91
|
+
hdgAssociatedTokenAccountPublicKey: PublicKey,
|
|
92
|
+
userReferralAccountPublicKey: PublicKey,
|
|
93
|
+
overrideTime?: number
|
|
94
|
+
): Promise<TransactionInstruction> {
|
|
95
|
+
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey(program.programId)
|
|
96
|
+
|
|
97
|
+
return await program.methods
|
|
98
|
+
.createReferralAccount(
|
|
99
|
+
new BN(overrideTime ?? Math.floor(Date.now() / 1000)) // override override times
|
|
100
|
+
)
|
|
101
|
+
.accounts({
|
|
102
|
+
signer: payerPublicKey,
|
|
103
|
+
vaultSystemState: vaultSystemStatePublicKey,
|
|
104
|
+
referralState: referralStatePublicKey,
|
|
105
|
+
referralAccount: referralAccountPublicKey,
|
|
106
|
+
userReferralAccount: userReferralAccountPublicKey,
|
|
107
|
+
poolPosition: poolPositionPublicKey,
|
|
108
|
+
hedgeMint: hedgeMintPublicKey,
|
|
109
|
+
hdgAta: hdgAssociatedTokenAccountPublicKey,
|
|
110
|
+
systemProgram: SystemProgram.programId,
|
|
111
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
112
|
+
rent: SYSVAR_RENT_PUBKEY,
|
|
113
|
+
})
|
|
114
|
+
.instruction()
|
|
115
|
+
}
|
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
import { BN, Program, Provider } from '@project-serum/anchor'
|
|
2
2
|
import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID } from '@solana/spl-token'
|
|
3
3
|
import {
|
|
4
|
-
PublicKey,
|
|
5
|
-
sendAndConfirmTransaction,
|
|
6
|
-
Signer,
|
|
4
|
+
PublicKey, Signer,
|
|
7
5
|
SystemProgram,
|
|
8
6
|
SYSVAR_RENT_PUBKEY,
|
|
9
7
|
Transaction,
|
|
10
|
-
TransactionInstruction
|
|
8
|
+
TransactionInstruction
|
|
11
9
|
} from '@solana/web3.js'
|
|
12
|
-
import { parseAnchorErrors } from '../utils/Errors'
|
|
13
10
|
import {
|
|
14
11
|
findAssociatedTokenAddress,
|
|
15
12
|
getPoolPublicKeyForMint,
|
|
16
13
|
getUshMintPublicKey,
|
|
17
|
-
getVaultSystemStatePublicKey
|
|
14
|
+
getVaultSystemStatePublicKey
|
|
18
15
|
} from '../Constants'
|
|
19
|
-
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
20
16
|
import { Vault } from '../idl/vault'
|
|
17
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
|
18
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
21
19
|
|
|
22
20
|
export async function createStakingPool(
|
|
23
21
|
program: Program<Vault>,
|
|
@@ -31,7 +29,7 @@ export async function createStakingPool(
|
|
|
31
29
|
await createStakingPoolInstruction(program, payer.publicKey, mintPublicKey, hedgeTokensToBeMinted, overrideStartTime)
|
|
32
30
|
)
|
|
33
31
|
await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
|
|
34
|
-
const [poolPublickey] = await getPoolPublicKeyForMint(mintPublicKey)
|
|
32
|
+
const [poolPublickey] = await getPoolPublicKeyForMint(program.programId, mintPublicKey)
|
|
35
33
|
return poolPublickey
|
|
36
34
|
}
|
|
37
35
|
|
|
@@ -42,12 +40,12 @@ export async function createStakingPoolInstruction(
|
|
|
42
40
|
hedgeTokensToBeMinted: number,
|
|
43
41
|
overrideStartTime?: number
|
|
44
42
|
): Promise<TransactionInstruction> {
|
|
45
|
-
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
|
46
|
-
const ushMintPublickey = await getUshMintPublicKey()
|
|
47
|
-
const [poolPublickey, poolBump] = await getPoolPublicKeyForMint(mintPublicKey)
|
|
43
|
+
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey(program.programId)
|
|
44
|
+
const ushMintPublickey = await getUshMintPublicKey(program.programId)
|
|
45
|
+
const [poolPublickey, poolBump] = await getPoolPublicKeyForMint(program.programId, mintPublicKey)
|
|
48
46
|
|
|
49
|
-
const poolAssociatedStakedTokenAccount = await findAssociatedTokenAddress(poolPublickey, mintPublicKey)
|
|
50
|
-
const poolAssociatedUshTokenAccount = await findAssociatedTokenAddress(poolPublickey, ushMintPublickey)
|
|
47
|
+
const poolAssociatedStakedTokenAccount = await findAssociatedTokenAddress(program.programId, poolPublickey, mintPublicKey)
|
|
48
|
+
const poolAssociatedUshTokenAccount = await findAssociatedTokenAddress(program.programId, poolPublickey, ushMintPublickey)
|
|
51
49
|
return await program.methods
|
|
52
50
|
.createStakingPool(poolBump, new BN(hedgeTokensToBeMinted), new BN(overrideStartTime ?? Math.floor(Date.now() / 1000)))
|
|
53
51
|
.accounts({
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { BN, Program, Provider } from '@project-serum/anchor'
|
|
2
|
+
import { TOKEN_PROGRAM_ID } from '@solana/spl-token'
|
|
3
|
+
import {
|
|
4
|
+
PublicKey, Signer,
|
|
5
|
+
SystemProgram,
|
|
6
|
+
SYSVAR_RENT_PUBKEY,
|
|
7
|
+
Transaction,
|
|
8
|
+
TransactionInstruction
|
|
9
|
+
} from '@solana/web3.js'
|
|
10
|
+
import { getReferralAccountPublicKey, getUserReferralAccountPublicKey, getVaultSystemStatePublicKey } from '../Constants'
|
|
11
|
+
|
|
12
|
+
import { Vault } from '../idl/vault'
|
|
13
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
|
14
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
|
15
|
+
|
|
16
|
+
export async function createUserReferralAccount(
|
|
17
|
+
program: Program<Vault>,
|
|
18
|
+
provider: Provider,
|
|
19
|
+
payer: Signer,
|
|
20
|
+
referrer?: PublicKey,
|
|
21
|
+
overrideTime?: number
|
|
22
|
+
): Promise<PublicKey> {
|
|
23
|
+
// setup transaction
|
|
24
|
+
const transaction = new Transaction()
|
|
25
|
+
const signers = [payer]
|
|
26
|
+
|
|
27
|
+
// Find referrer account
|
|
28
|
+
let referralAccountPublicKey = null
|
|
29
|
+
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey(program.programId)
|
|
30
|
+
if (typeof referrer === 'undefined') {
|
|
31
|
+
referralAccountPublicKey = await getReferralAccountPublicKey(program.programId, vaultSystemStatePublicKey)
|
|
32
|
+
} else {
|
|
33
|
+
referralAccountPublicKey = await getReferralAccountPublicKey(program.programId, referrer)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Derive the user referral account public key
|
|
37
|
+
const userReferralAccountPublicKey = await getUserReferralAccountPublicKey(program.programId, payer.publicKey)
|
|
38
|
+
|
|
39
|
+
transaction.add(
|
|
40
|
+
await createUserReferralAccountInstruction(
|
|
41
|
+
program,
|
|
42
|
+
payer.publicKey,
|
|
43
|
+
referralAccountPublicKey,
|
|
44
|
+
userReferralAccountPublicKey,
|
|
45
|
+
overrideTime
|
|
46
|
+
)
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, signers).catch(parseAnchorErrors)
|
|
50
|
+
return userReferralAccountPublicKey
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export async function createUserReferralAccountInstruction(
|
|
54
|
+
program: Program<Vault>,
|
|
55
|
+
payerPublicKey: PublicKey,
|
|
56
|
+
referralAccount: PublicKey,
|
|
57
|
+
userReferralAccount: PublicKey,
|
|
58
|
+
overrideTime?: number
|
|
59
|
+
): Promise<TransactionInstruction> {
|
|
60
|
+
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey(program.programId)
|
|
61
|
+
|
|
62
|
+
return await program.methods
|
|
63
|
+
.createUserReferralAccount(
|
|
64
|
+
new BN(overrideTime ?? Math.floor(Date.now() / 1000)) // override override time
|
|
65
|
+
)
|
|
66
|
+
.accounts({
|
|
67
|
+
signer: payerPublicKey,
|
|
68
|
+
userReferralAccount: userReferralAccount,
|
|
69
|
+
referralAccount: referralAccount,
|
|
70
|
+
systemProgram: SystemProgram.programId,
|
|
71
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
72
|
+
rent: SYSVAR_RENT_PUBKEY,
|
|
73
|
+
})
|
|
74
|
+
.instruction()
|
|
75
|
+
}
|