hedge-web3 0.2.8 → 0.2.11

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.
@@ -4,13 +4,60 @@ export declare const HEDGE_PROGRAM_PUBLICKEY: PublicKey;
4
4
  export declare const CHAINLINK_SOL_USD_ID = "FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf";
5
5
  export declare const CHAINLINK_SOL_USD_PUBLICKEY: PublicKey;
6
6
  export declare const CHAINLINK_PROGRAM_ID = "HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny";
7
+ /**
8
+ * @returns The Liquidation pool public key
9
+ */
7
10
  export declare function getLiquidationPoolStatePublicKey(): Promise<PublicKey>;
11
+ /**
12
+ *
13
+ * @returns The liquidation pool ush account public key
14
+ */
8
15
  export declare function getLiquidationPoolUshAccountPublicKey(): Promise<PublicKey>;
16
+ /**
17
+ *
18
+ * @returns The USH mint public key
19
+ */
9
20
  export declare function getUshMintPublicKey(): Promise<PublicKey>;
21
+ /**
22
+ *
23
+ * @returns The Vault System State public key
24
+ */
10
25
  export declare function getVaultSystemStatePublicKey(): Promise<PublicKey>;
26
+ /**
27
+ *
28
+ * @returns The HDG mint public key
29
+ */
11
30
  export declare function getHedgeMintPublicKey(): Promise<PublicKey>;
31
+ /**
32
+ * Get the public key for any staking pool
33
+ *
34
+ * @param mintPublicKey Staked collateral mint public key
35
+ * @returns the public key for that staking pool
36
+ */
12
37
  export declare function getPoolPublicKeyForMint(mintPublicKey: PublicKey): Promise<[PublicKey, number, string]>;
38
+ /**
39
+ *
40
+ * @param collateralType String name of the collateral type (must be 16 chars)
41
+ * @returns The public key for that Vault Type account
42
+ */
13
43
  export declare function getVaultTypeAccountPublicKey(collateralType: string): Promise<PublicKey>;
44
+ /**
45
+ *
46
+ * @param collateralType String name of the collateral type (must be 16 chars)
47
+ * @returns The public key for that Vault Type oracle info
48
+ */
14
49
  export declare function getVaultTypeOracleAccountPublicKey(collateralType: string): Promise<PublicKey>;
50
+ /**
51
+ * Vaults are stored in PDA accounts. Use this to get the address from a salt
52
+ *
53
+ * @param vaultSalt String salt for the vault (must be 8 chars)
54
+ * @returns The public key for that Vault Type oracle info
55
+ */
15
56
  export declare function findVaultAddress(vaultSalt: string): Promise<PublicKey>;
57
+ /**
58
+ *
59
+ * @param walletAddress Owner public key
60
+ * @param tokenMintAddress Token mint
61
+ * @returns The associated token account public key
62
+ */
16
63
  export declare function findAssociatedTokenAddress(walletAddress: PublicKey, tokenMintAddress: PublicKey): Promise<PublicKey>;
@@ -0,0 +1,80 @@
1
+ export declare type Pyth = {
2
+ "version": "0.1.0";
3
+ "name": "pyth";
4
+ "instructions": [
5
+ {
6
+ "name": "initialize";
7
+ "accounts": [
8
+ {
9
+ "name": "payer";
10
+ "isMut": true;
11
+ "isSigner": true;
12
+ },
13
+ {
14
+ "name": "price";
15
+ "isMut": true;
16
+ "isSigner": true;
17
+ },
18
+ {
19
+ "name": "systemProgram";
20
+ "isMut": false;
21
+ "isSigner": false;
22
+ }
23
+ ];
24
+ "args": [
25
+ {
26
+ "name": "price";
27
+ "type": "i64";
28
+ },
29
+ {
30
+ "name": "expo";
31
+ "type": "i32";
32
+ },
33
+ {
34
+ "name": "conf";
35
+ "type": "u64";
36
+ }
37
+ ];
38
+ },
39
+ {
40
+ "name": "setPrice";
41
+ "accounts": [
42
+ {
43
+ "name": "price";
44
+ "isMut": true;
45
+ "isSigner": false;
46
+ }
47
+ ];
48
+ "args": [
49
+ {
50
+ "name": "price";
51
+ "type": "i64";
52
+ }
53
+ ];
54
+ }
55
+ ];
56
+ "accounts": [
57
+ {
58
+ "name": "priceWrapper";
59
+ "type": {
60
+ "kind": "struct";
61
+ "fields": [
62
+ {
63
+ "name": "price";
64
+ "type": {
65
+ "defined": "Price";
66
+ };
67
+ }
68
+ ];
69
+ };
70
+ }
71
+ ];
72
+ "errors": [
73
+ {
74
+ "code": 6000;
75
+ "name": "InvalidTradingStatus";
76
+ "msg": "invalid trading status";
77
+ }
78
+ ];
79
+ };
80
+ export declare const IDL: Pyth;
@@ -1754,6 +1754,47 @@ export declare type Vault = {
1754
1754
  }
1755
1755
  ];
1756
1756
  "args": [];
1757
+ },
1758
+ {
1759
+ "name": "adminResetVault";
1760
+ "accounts": [
1761
+ {
1762
+ "name": "payer";
1763
+ "isMut": true;
1764
+ "isSigner": true;
1765
+ },
1766
+ {
1767
+ "name": "vaultSystemState";
1768
+ "isMut": true;
1769
+ "isSigner": false;
1770
+ },
1771
+ {
1772
+ "name": "vaultAccount";
1773
+ "isMut": true;
1774
+ "isSigner": false;
1775
+ },
1776
+ {
1777
+ "name": "vaultAssociatedTokenAccount";
1778
+ "isMut": true;
1779
+ "isSigner": false;
1780
+ },
1781
+ {
1782
+ "name": "vaultTypeAccount";
1783
+ "isMut": true;
1784
+ "isSigner": false;
1785
+ },
1786
+ {
1787
+ "name": "vaultTypeAssociatedTokenAccount";
1788
+ "isMut": true;
1789
+ "isSigner": false;
1790
+ }
1791
+ ];
1792
+ "args": [
1793
+ {
1794
+ "name": "amountToSendFromVaultType";
1795
+ "type": "u64";
1796
+ }
1797
+ ];
1757
1798
  }
1758
1799
  ];
1759
1800
  "accounts": [
@@ -2558,9 +2599,6 @@ export declare type Vault = {
2558
2599
  },
2559
2600
  {
2560
2601
  "name": "Distributed";
2561
- },
2562
- {
2563
- "name": "Redeemed";
2564
2602
  }
2565
2603
  ];
2566
2604
  };
@@ -1,6 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import { PublicKey } from '@solana/web3.js';
3
3
  import Decimal from 'decimal.js';
4
+ import BN from 'bn.js';
4
5
  import VaultType from './VaultType';
5
6
  /**
6
7
  * A class that represents an on-chian vault.
@@ -13,9 +14,9 @@ export declare class VaultAccount {
13
14
  /** The public key of the vault owner. */
14
15
  pdaSalt: string;
15
16
  /** The deposited collateral of the vault (in SOL Lamports). */
16
- deposited: number;
17
+ deposited: BN;
17
18
  /** The outstanding debt of the vault (in USH Lamports). Denormalized to time 0. */
18
- denormalizedDebt: number;
19
+ denormalizedDebt: BN;
19
20
  /** The ordered number of when this vault was created. */
20
21
  vaultNumber: number;
21
22
  /** Debt redistribution snapshot */
@@ -38,12 +39,6 @@ export declare class VaultAccount {
38
39
  * @returns true if publicKey matches the owner publicKey
39
40
  */
40
41
  isOwnedBy(publicKey: PublicKey): boolean;
41
- /**
42
- * Get the collateral value in SOL
43
- *
44
- * @returns collateral value in SOL
45
- */
46
- inSol(): number;
47
42
  /**
48
43
  * Get the debt value in USH
49
44
  *
@@ -56,8 +51,36 @@ export declare class VaultAccount {
56
51
  * @returns example: `1b6ca...azy71s`
57
52
  */
58
53
  toDisplayString(): string;
59
- addDebt(additionalDebt: Decimal, vaultTypeAccount: VaultType): void;
60
- addDeposit(depositAmount: number): void;
54
+ /**
55
+ * Add additional debt to the vault.
56
+ *
57
+ * @param {BN} additionalDebt - Additional normalized debt to add in (USH) lamports.
58
+ * @param {VaultType} vaultTypeAccount - Vault's vaultType
59
+ *
60
+ */
61
+ addDebt(additionalDebt: BN, vaultTypeAccount: VaultType): void;
62
+ /**
63
+ * Repay debt on a vault
64
+ *
65
+ * @param {BN} repayAmount - Normalized debt to repay in (USH) lamports.
66
+ * @param {VaultType} vaultTypeAccount - Vault's vaultType
67
+ *
68
+ */
69
+ repayDebt(repayAmount: BN, vaultTypeAccount: VaultType): void;
70
+ /**
71
+ * Deposit Collateral
72
+ *
73
+ * @param {BN} depositAmount - Amount to deposit in (CollateralMint) lamports
74
+ *
75
+ */
76
+ depositCollateral(depositAmount: BN): void;
77
+ /**
78
+ * Withdraw Collateral
79
+ *
80
+ * @param {BN} withdrawAmount - Amount to withdraw in (CollateralMint) lamports
81
+ *
82
+ */
83
+ withdrawCollateral(withdrawAmount: BN): void;
61
84
  redeem(): void;
62
85
  liquidate(): void;
63
86
  updateDebtAndCollateral(vaultTypeAccountData: VaultType): void;
@@ -1,5 +1,20 @@
1
- import { Program, Provider } from '@project-serum/anchor';
1
+ /// <reference types="bn.js" />
2
+ import { Program, BN } from '@project-serum/anchor';
2
3
  import { PublicKey } from '@solana/web3.js';
3
4
  import { VaultAccount } from '../state/VaultAccount';
4
5
  import { Vault } from '../idl/vault';
5
- export declare function getLinkedListAccounts(program: Program<Vault>, provider: Provider, vaultTypeAccountPublicKey: PublicKey, vaultPublicKey: PublicKey, depositAmount: number, loanAmount: number, redeem: boolean, liquidate: boolean, cachedVaults?: VaultAccount[]): Promise<[PublicKey, PublicKey, PublicKey, VaultAccount[]]>;
6
+ /**
7
+ * Get the accounts the left and right for re-inserting in the linked list
8
+ *
9
+ * @param {Program<Vault>} program - Anchor program <Vault ILD>
10
+ * @param {PublicKey} vaultTypeAccountPublicKey - Vault Type Account PublicKey
11
+ * @param {PublicKey} vaultPublicKey - Vault Account PublicKey
12
+ * @param {BN} depositAmount - Amount that will be deposited into vault with instruction
13
+ * @param {BN} withdrawAmount - Amount that will be withdrawn from vault with instruction
14
+ * @param {BN} loanAmount - Amount that will be deposited into vault with transaction (sans fees)
15
+ * @param {BN} repayAmount - Amount that will be repaid into vault with transaction
16
+ * @param {boolean} redeem - True if vault is going to be redeemed fully
17
+ * @param {boolean} liquidate - True if vault is going to be liquidated fully
18
+ * @param {VaultAccount[]} cachedVaults - Optional list of cached vaults. Saves a request to the on-chain data.
19
+ */
20
+ export declare function getLinkedListAccounts(program: Program<Vault>, vaultTypeAccountPublicKey: PublicKey, vaultPublicKey: PublicKey, depositAmount: BN, withdrawAmount: BN, loanAmount: BN, repayAmount: BN, redeem: boolean, liquidate: boolean, cachedVaults?: VaultAccount[]): Promise<[PublicKey, PublicKey, PublicKey, VaultAccount[]]>;
package/lib/Constants.js CHANGED
@@ -18,6 +18,9 @@ exports.CHAINLINK_SOL_USD_ID = 'FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf';
18
18
  exports.CHAINLINK_SOL_USD_PUBLICKEY = new web3_js_1.PublicKey(exports.CHAINLINK_SOL_USD_ID);
19
19
  exports.CHAINLINK_PROGRAM_ID = "HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny";
20
20
  const enc = new TextEncoder();
21
+ /**
22
+ * @returns The Liquidation pool public key
23
+ */
21
24
  function getLiquidationPoolStatePublicKey() {
22
25
  return __awaiter(this, void 0, void 0, function* () {
23
26
  const [poolPublicKey] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode('LiquidationPoolStateV1')], exports.HEDGE_PROGRAM_PUBLICKEY);
@@ -25,6 +28,10 @@ function getLiquidationPoolStatePublicKey() {
25
28
  });
26
29
  }
27
30
  exports.getLiquidationPoolStatePublicKey = getLiquidationPoolStatePublicKey;
31
+ /**
32
+ *
33
+ * @returns The liquidation pool ush account public key
34
+ */
28
35
  function getLiquidationPoolUshAccountPublicKey() {
29
36
  return __awaiter(this, void 0, void 0, function* () {
30
37
  const [poolPublicKey] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode('LiquidationPoolUSHAccountV1')], exports.HEDGE_PROGRAM_PUBLICKEY);
@@ -32,6 +39,10 @@ function getLiquidationPoolUshAccountPublicKey() {
32
39
  });
33
40
  }
34
41
  exports.getLiquidationPoolUshAccountPublicKey = getLiquidationPoolUshAccountPublicKey;
42
+ /**
43
+ *
44
+ * @returns The USH mint public key
45
+ */
35
46
  function getUshMintPublicKey() {
36
47
  return __awaiter(this, void 0, void 0, function* () {
37
48
  const [findMintPublicKey] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode('UshMintV1')], exports.HEDGE_PROGRAM_PUBLICKEY);
@@ -39,6 +50,10 @@ function getUshMintPublicKey() {
39
50
  });
40
51
  }
41
52
  exports.getUshMintPublicKey = getUshMintPublicKey;
53
+ /**
54
+ *
55
+ * @returns The Vault System State public key
56
+ */
42
57
  function getVaultSystemStatePublicKey() {
43
58
  return __awaiter(this, void 0, void 0, function* () {
44
59
  const [publicKey] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode('VaultSystemStateV1')], exports.HEDGE_PROGRAM_PUBLICKEY);
@@ -46,6 +61,10 @@ function getVaultSystemStatePublicKey() {
46
61
  });
47
62
  }
48
63
  exports.getVaultSystemStatePublicKey = getVaultSystemStatePublicKey;
64
+ /**
65
+ *
66
+ * @returns The HDG mint public key
67
+ */
49
68
  function getHedgeMintPublicKey() {
50
69
  return __awaiter(this, void 0, void 0, function* () {
51
70
  const [publicKey] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode('HEDGEMintV1')], exports.HEDGE_PROGRAM_PUBLICKEY);
@@ -53,6 +72,12 @@ function getHedgeMintPublicKey() {
53
72
  });
54
73
  }
55
74
  exports.getHedgeMintPublicKey = getHedgeMintPublicKey;
75
+ /**
76
+ * Get the public key for any staking pool
77
+ *
78
+ * @param mintPublicKey Staked collateral mint public key
79
+ * @returns the public key for that staking pool
80
+ */
56
81
  function getPoolPublicKeyForMint(mintPublicKey) {
57
82
  return __awaiter(this, void 0, void 0, function* () {
58
83
  const strToEncode = mintPublicKey.toString().substring(0, 12);
@@ -61,6 +86,11 @@ function getPoolPublicKeyForMint(mintPublicKey) {
61
86
  });
62
87
  }
63
88
  exports.getPoolPublicKeyForMint = getPoolPublicKeyForMint;
89
+ /**
90
+ *
91
+ * @param collateralType String name of the collateral type (must be 16 chars)
92
+ * @returns The public key for that Vault Type account
93
+ */
64
94
  function getVaultTypeAccountPublicKey(collateralType) {
65
95
  return __awaiter(this, void 0, void 0, function* () {
66
96
  const [vaultTypeAccount] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode(collateralType), enc.encode('State')], exports.HEDGE_PROGRAM_PUBLICKEY);
@@ -68,6 +98,11 @@ function getVaultTypeAccountPublicKey(collateralType) {
68
98
  });
69
99
  }
70
100
  exports.getVaultTypeAccountPublicKey = getVaultTypeAccountPublicKey;
101
+ /**
102
+ *
103
+ * @param collateralType String name of the collateral type (must be 16 chars)
104
+ * @returns The public key for that Vault Type oracle info
105
+ */
71
106
  function getVaultTypeOracleAccountPublicKey(collateralType) {
72
107
  return __awaiter(this, void 0, void 0, function* () {
73
108
  const [vaultTypeOracleAccount] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode(collateralType), enc.encode('Oracle')], exports.HEDGE_PROGRAM_PUBLICKEY);
@@ -75,6 +110,12 @@ function getVaultTypeOracleAccountPublicKey(collateralType) {
75
110
  });
76
111
  }
77
112
  exports.getVaultTypeOracleAccountPublicKey = getVaultTypeOracleAccountPublicKey;
113
+ /**
114
+ * Vaults are stored in PDA accounts. Use this to get the address from a salt
115
+ *
116
+ * @param vaultSalt String salt for the vault (must be 8 chars)
117
+ * @returns The public key for that Vault Type oracle info
118
+ */
78
119
  function findVaultAddress(vaultSalt) {
79
120
  return __awaiter(this, void 0, void 0, function* () {
80
121
  const [vaultAddress] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode('Vault'), enc.encode(vaultSalt)], exports.HEDGE_PROGRAM_PUBLICKEY);
@@ -82,6 +123,12 @@ function findVaultAddress(vaultSalt) {
82
123
  });
83
124
  }
84
125
  exports.findVaultAddress = findVaultAddress;
126
+ /**
127
+ *
128
+ * @param walletAddress Owner public key
129
+ * @param tokenMintAddress Token mint
130
+ * @returns The associated token account public key
131
+ */
85
132
  function findAssociatedTokenAddress(walletAddress, tokenMintAddress) {
86
133
  return __awaiter(this, void 0, void 0, function* () {
87
134
  return (yield web3_js_1.PublicKey.findProgramAddress([
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IDL = void 0;
4
+ exports.IDL = {
5
+ "version": "0.1.0",
6
+ "name": "pyth",
7
+ "instructions": [
8
+ {
9
+ "name": "initialize",
10
+ "accounts": [
11
+ {
12
+ "name": "payer",
13
+ "isMut": true,
14
+ "isSigner": true
15
+ },
16
+ {
17
+ "name": "price",
18
+ "isMut": true,
19
+ "isSigner": true
20
+ },
21
+ {
22
+ "name": "systemProgram",
23
+ "isMut": false,
24
+ "isSigner": false
25
+ }
26
+ ],
27
+ "args": [
28
+ {
29
+ "name": "price",
30
+ "type": "i64"
31
+ },
32
+ {
33
+ "name": "expo",
34
+ "type": "i32"
35
+ },
36
+ {
37
+ "name": "conf",
38
+ "type": "u64"
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ "name": "setPrice",
44
+ "accounts": [
45
+ {
46
+ "name": "price",
47
+ "isMut": true,
48
+ "isSigner": false
49
+ }
50
+ ],
51
+ "args": [
52
+ {
53
+ "name": "price",
54
+ "type": "i64"
55
+ }
56
+ ]
57
+ }
58
+ ],
59
+ "accounts": [
60
+ {
61
+ "name": "priceWrapper",
62
+ "type": {
63
+ "kind": "struct",
64
+ "fields": [
65
+ {
66
+ "name": "price",
67
+ "type": {
68
+ "defined": "Price"
69
+ }
70
+ }
71
+ ]
72
+ }
73
+ }
74
+ ],
75
+ "errors": [
76
+ {
77
+ "code": 6000,
78
+ "name": "InvalidTradingStatus",
79
+ "msg": "invalid trading status"
80
+ }
81
+ ]
82
+ };
package/lib/idl/vault.js CHANGED
@@ -1757,6 +1757,47 @@ exports.IDL = {
1757
1757
  }
1758
1758
  ],
1759
1759
  "args": []
1760
+ },
1761
+ {
1762
+ "name": "adminResetVault",
1763
+ "accounts": [
1764
+ {
1765
+ "name": "payer",
1766
+ "isMut": true,
1767
+ "isSigner": true
1768
+ },
1769
+ {
1770
+ "name": "vaultSystemState",
1771
+ "isMut": true,
1772
+ "isSigner": false
1773
+ },
1774
+ {
1775
+ "name": "vaultAccount",
1776
+ "isMut": true,
1777
+ "isSigner": false
1778
+ },
1779
+ {
1780
+ "name": "vaultAssociatedTokenAccount",
1781
+ "isMut": true,
1782
+ "isSigner": false
1783
+ },
1784
+ {
1785
+ "name": "vaultTypeAccount",
1786
+ "isMut": true,
1787
+ "isSigner": false
1788
+ },
1789
+ {
1790
+ "name": "vaultTypeAssociatedTokenAccount",
1791
+ "isMut": true,
1792
+ "isSigner": false
1793
+ }
1794
+ ],
1795
+ "args": [
1796
+ {
1797
+ "name": "amountToSendFromVaultType",
1798
+ "type": "u64"
1799
+ }
1800
+ ]
1760
1801
  }
1761
1802
  ],
1762
1803
  "accounts": [
@@ -2561,9 +2602,6 @@ exports.IDL = {
2561
2602
  },
2562
2603
  {
2563
2604
  "name": "Distributed"
2564
- },
2565
- {
2566
- "name": "Redeemed"
2567
2605
  }
2568
2606
  ]
2569
2607
  }
@@ -38,7 +38,7 @@ function depositVault(program, provider, payer, vaultPublicKey, depositAmount, o
38
38
  const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, ushMintPublickey);
39
39
  const transaction = new web3_js_1.Transaction();
40
40
  const signers = [payer, history];
41
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, depositAmount, 0, false, false);
41
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, vaultAccount.vaultType, vaultPublicKey, new anchor_1.BN(depositAmount), new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(0), false, false);
42
42
  if (vaultTypeAccountInfo.collateralMint.toString() === token_instructions_1.WRAPPED_SOL_MINT.toString()) {
43
43
  transaction.add(web3_js_1.SystemProgram.createAccount({
44
44
  fromPubkey: payer.publicKey,
@@ -35,7 +35,7 @@ function liquidateVault(program, provider, payer, vaultPublicKey, overrideTime)
35
35
  const poolAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, liquidationPoolStatePublicKey, true);
36
36
  const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, vaultAccount.vaultType, true);
37
37
  const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, hedgeStakingPoolPublicKey, true);
38
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, 0, false, true);
38
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, vaultAccount.vaultType, vaultPublicKey, new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(0), false, true);
39
39
  const history = web3_js_1.Keypair.generate();
40
40
  const newEra = web3_js_1.Keypair.generate();
41
41
  const transaction = new web3_js_1.Transaction();
@@ -27,7 +27,7 @@ function loanVault(program, provider, payer, vaultPublicKey, loanAmount, overrid
27
27
  const vaultTypeAccount = yield program.account.vaultType.fetch(vaultAccount.vaultType);
28
28
  const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultAccount.vaultType, true);
29
29
  const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultPublicKey, true);
30
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, loanAmount, false, false);
30
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, vaultAccount.vaultType, vaultPublicKey, new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(loanAmount), new anchor_1.BN(0), false, false);
31
31
  const history = web3_js_1.Keypair.generate();
32
32
  const transaction = new web3_js_1.Transaction().add(yield loanVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, new anchor_1.BN(loanAmount), overrideTime));
33
33
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
@@ -30,7 +30,7 @@ function redeemVault(program, provider, payer, vaultPublicKey, redeemAmount, tra
30
30
  const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultAccount.vaultType, true);
31
31
  const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultPublicKey, true);
32
32
  const payerTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, payer.publicKey);
33
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, 0, true, false);
33
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, vaultAccount.vaultType, vaultPublicKey, new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(0), true, false);
34
34
  const history = web3_js_1.Keypair.generate();
35
35
  const transaction = new web3_js_1.Transaction().add(yield redeemVaultInstruction(program, payer.publicKey, payerUshAccount.address, payerTokenAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, new anchor_1.BN(redeemAmount), transactionOverrideTime));
36
36
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
@@ -29,6 +29,7 @@ function refreshOraclePriceInstruction(program, collateralType, network, overrid
29
29
  const enc = new TextEncoder();
30
30
  const [oracleInfoAccount] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode(collateralType), enc.encode('Oracle')], Constants_1.HEDGE_PROGRAM_PUBLICKEY);
31
31
  const [vaultTypeAccount] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode(collateralType), enc.encode('State')], Constants_1.HEDGE_PROGRAM_PUBLICKEY);
32
+ const oracleInfo = yield program.account.oracleInfoForCollateralType.fetch(oracleInfoAccount);
32
33
  return yield program.methods
33
34
  .refreshOraclePrice(new anchor_1.BN(overridePrice !== null && overridePrice !== void 0 ? overridePrice : web3_js_1.LAMPORTS_PER_SOL * 150), // override usd/sol price
34
35
  new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000) - 1) // override override time
@@ -36,9 +37,9 @@ function refreshOraclePriceInstruction(program, collateralType, network, overrid
36
37
  .accounts({
37
38
  oracleInfoAccount: oracleInfoAccount,
38
39
  vaultTypeAccount: vaultTypeAccount,
39
- oracleChainlink: chainlinkAccounts[network],
40
- oraclePyth: pythAccounts[network],
41
- oracleSwitchboard: switchboardAccounts[network],
40
+ oracleChainlink: oracleInfo.oracleChainlink,
41
+ oraclePyth: oracleInfo.oraclePyth,
42
+ oracleSwitchboard: oracleInfo.oracleSwitchboard,
42
43
  systemProgram: web3_js_1.SystemProgram.programId,
43
44
  chainlinkProgram: Constants_1.CHAINLINK_PROGRAM_ID,
44
45
  })
@@ -59,12 +60,12 @@ const pythAccounts = {
59
60
  };
60
61
  const chainlinkAccounts = {
61
62
  Testing: web3_js_1.SystemProgram.programId,
62
- Devnet: new web3_js_1.PublicKey('FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf'),
63
+ Devnet: new web3_js_1.PublicKey('HgTtcbcmp5BeThax5AU8vg4VwK79qAvAKKFMs8txMLW6'),
63
64
  MainnetBeta: web3_js_1.SystemProgram.programId, // CHAINLINK NOT ON MAINNET YET
64
65
  };
65
66
  const switchboardAccounts = {
66
67
  Testing: web3_js_1.SystemProgram.programId,
67
68
  // Devnet: new PublicKey('GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR'),
68
- Devnet: new web3_js_1.PublicKey('DpoK8Zz69APV9ntjuY9C4LZCxANYMV56M2cbXEdkjxME'),
69
+ Devnet: new web3_js_1.PublicKey('GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR'),
69
70
  MainnetBeta: web3_js_1.SystemProgram.programId, // Switchboard V2 NOT ON MAINNET YET
70
71
  };
@@ -28,7 +28,7 @@ function repayVault(program, provider, payer, vaultPublicKey, repayAmount, overr
28
28
  const vaultTypeAccount = yield program.account.vaultType.fetch(vaultAccount.vaultType);
29
29
  const vaultTypeAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultAccount.vaultType, vaultTypeAccount.collateralMint);
30
30
  const vaultAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultPublicKey, vaultTypeAccount.collateralMint);
31
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, repayAmount * -1, false, false);
31
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, vaultAccount.vaultType, vaultPublicKey, new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(Math.abs(repayAmount)), false, false);
32
32
  const history = web3_js_1.Keypair.generate();
33
33
  const transaction = new web3_js_1.Transaction().add(yield repayVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, new anchor_1.BN(repayAmount), overrideTime));
34
34
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
@@ -34,7 +34,7 @@ function withdrawVault(program, provider, payer, vaultPublicKey, withdrawAmount,
34
34
  const destinationTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, payer.publicKey);
35
35
  const [hedgeStakingPoolPublicKey] = yield (0, Constants_1.getPoolPublicKeyForMint)(yield (0, Constants_1.getHedgeMintPublicKey)());
36
36
  const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, ushMintPublickey);
37
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, withdrawAmount * -1, 0, false, false);
37
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, vaultAccount.vaultType, vaultPublicKey, new anchor_1.BN(0), new anchor_1.BN(Math.abs(withdrawAmount)), new anchor_1.BN(0), new anchor_1.BN(0), false, false);
38
38
  const transaction = new web3_js_1.Transaction().add(yield withdrawVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, destinationTokenAccount.address, vaultPublicKey, vaultAssociatedCollateralAccount.address, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, hedgeStakingPoolPublicKey, hedgeStakingPoolAssociatedUshTokenAccount, ushMintPublickey, history.publicKey, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, new anchor_1.BN(withdrawAmount), overrideTime));
39
39
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
40
40
  return vaultPublicKey;