hedge-web3 0.2.19 → 0.2.20

Sign up to get free protection for your applications and to get access to all the features.
@@ -3076,6 +3076,26 @@ export declare type Vault = {
3076
3076
  "index": false;
3077
3077
  }
3078
3078
  ];
3079
+ },
3080
+ {
3081
+ "name": "VaultTransferEvent";
3082
+ "fields": [
3083
+ {
3084
+ "name": "vault";
3085
+ "type": "publicKey";
3086
+ "index": false;
3087
+ },
3088
+ {
3089
+ "name": "oldOwner";
3090
+ "type": "publicKey";
3091
+ "index": false;
3092
+ },
3093
+ {
3094
+ "name": "newOwner";
3095
+ "type": "publicKey";
3096
+ "index": false;
3097
+ }
3098
+ ];
3079
3099
  }
3080
3100
  ];
3081
3101
  "errors": [
@@ -0,0 +1,19 @@
1
+ /// <reference types="bn.js" />
2
+ import { BN, Program, Provider } from '@project-serum/anchor';
3
+ import { PublicKey, Signer, TransactionInstruction } from '@solana/web3.js';
4
+ import { Vault } from '../idl/vault';
5
+ export interface VaultTypeConfig {
6
+ maxDebtExtended?: BN;
7
+ minDebtPerVault?: BN;
8
+ loanInitFee?: BN;
9
+ emergencyModeThreshold?: BN;
10
+ oracleChainlink?: PublicKey;
11
+ oraclePyth?: PublicKey;
12
+ oracleSwitchboard?: PublicKey;
13
+ priorityPyth?: number;
14
+ priorityChainlink?: number;
15
+ prioritySwitchboard?: number;
16
+ deprecated?: boolean;
17
+ }
18
+ export declare function transferVault(program: Program<Vault>, provider: Provider, payer: Signer, vaultTypeAccount: PublicKey, oracleInfoAccount: PublicKey, config: VaultTypeConfig): Promise<PublicKey>;
19
+ export declare function transferVaultInstruction(program: Program<Vault>, vaultSystemStatePublicKey: PublicKey, payerPublicKey: PublicKey, vaultTypeAccount: PublicKey, oracleInfoAccount: PublicKey, vaultTypeConfig: VaultTypeConfig): Promise<TransactionInstruction>;
@@ -11,8 +11,7 @@ export declare class VaultAccount {
11
11
  publicKey: PublicKey;
12
12
  /** The public key of the vault owner. */
13
13
  vaultOwner: PublicKey;
14
- /** The public key of the vault owner. */
15
- pdaSalt: string;
14
+ /** The public key of the vault owner. */ pdaSalt: string;
16
15
  /** The deposited collateral of the vault (in SOL Lamports). */
17
16
  deposited: BN;
18
17
  /** The outstanding debt of the vault (in USH Lamports). Denormalized to time 0. */
package/lib/idl/vault.js CHANGED
@@ -3079,6 +3079,26 @@ exports.IDL = {
3079
3079
  "index": false
3080
3080
  }
3081
3081
  ]
3082
+ },
3083
+ {
3084
+ "name": "VaultTransferEvent",
3085
+ "fields": [
3086
+ {
3087
+ "name": "vault",
3088
+ "type": "publicKey",
3089
+ "index": false
3090
+ },
3091
+ {
3092
+ "name": "oldOwner",
3093
+ "type": "publicKey",
3094
+ "index": false
3095
+ },
3096
+ {
3097
+ "name": "newOwner",
3098
+ "type": "publicKey",
3099
+ "index": false
3100
+ }
3101
+ ]
3082
3102
  }
3083
3103
  ],
3084
3104
  "errors": [
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.transferVaultInstruction = exports.transferVault = void 0;
16
+ const web3_js_1 = require("@solana/web3.js");
17
+ const Constants_1 = require("../Constants");
18
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
19
+ function transferVault(program, provider, payer, vaultTypeAccount, oracleInfoAccount, config) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
22
+ const transaction = new web3_js_1.Transaction().add(yield transferVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, vaultTypeAccount, oracleInfoAccount, config));
23
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]);
24
+ return vaultSystemStatePublicKey;
25
+ });
26
+ }
27
+ exports.transferVault = transferVault;
28
+ function transferVaultInstruction(program, vaultSystemStatePublicKey, payerPublicKey, vaultTypeAccount, oracleInfoAccount, vaultTypeConfig) {
29
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ const config = {
32
+ maxDebtExtended: (_a = vaultTypeConfig.maxDebtExtended) !== null && _a !== void 0 ? _a : null,
33
+ minDebtPerVault: (_b = vaultTypeConfig.minDebtPerVault) !== null && _b !== void 0 ? _b : null,
34
+ loanInitFee: (_c = vaultTypeConfig.loanInitFee) !== null && _c !== void 0 ? _c : null,
35
+ emergencyModeThreshold: (_d = vaultTypeConfig.emergencyModeThreshold) !== null && _d !== void 0 ? _d : null,
36
+ oracleChainlink: (_e = vaultTypeConfig.oracleChainlink) !== null && _e !== void 0 ? _e : null,
37
+ oraclePyth: (_f = vaultTypeConfig.oraclePyth) !== null && _f !== void 0 ? _f : null,
38
+ oracleSwitchboard: (_g = vaultTypeConfig.oracleSwitchboard) !== null && _g !== void 0 ? _g : null,
39
+ deprecated: (_h = vaultTypeConfig.deprecated) !== null && _h !== void 0 ? _h : null,
40
+ priorityPyth: (_j = vaultTypeConfig.priorityPyth) !== null && _j !== void 0 ? _j : null,
41
+ priorityChainlink: (_k = vaultTypeConfig.priorityChainlink) !== null && _k !== void 0 ? _k : null,
42
+ prioritySwitchboard: (_l = vaultTypeConfig.prioritySwitchboard) !== null && _l !== void 0 ? _l : null,
43
+ };
44
+ return yield program.methods
45
+ .updateVaultType(config)
46
+ .accounts({
47
+ payer: payerPublicKey,
48
+ vaultSystemState: vaultSystemStatePublicKey,
49
+ vaultType: vaultTypeAccount,
50
+ oracleInfoAccount: oracleInfoAccount,
51
+ })
52
+ .instruction();
53
+ });
54
+ }
55
+ exports.transferVaultInstruction = transferVaultInstruction;
@@ -163,7 +163,9 @@ class VaultAccount {
163
163
  .mul(new decimal_js_1.default(this.denormalizedDebt.toString()))
164
164
  .floor()
165
165
  .toString());
166
- const extraCollateralDeposited = new decimal_js_1.default(this.denormalizedDebt.toString()).mul(vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber()).floor();
166
+ const extraCollateralDeposited = new decimal_js_1.default(this.denormalizedDebt.toString())
167
+ .mul(vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber())
168
+ .floor();
167
169
  this.deposited = this.deposited.add(new bn_js_1.default(extraCollateralDeposited.toString()));
168
170
  this.collateralAccumulatorSnapshotBytes = vaultTypeAccountData.collateralRedistributionAccumulator;
169
171
  this.debtProductSnapshotBytes = vaultTypeAccountData.debtRedistributionProduct;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hedge-web3",
3
- "version": "0.2.19",
3
+ "version": "0.2.20",
4
4
  "description": "Hedge Javascript Web3 API",
5
5
  "main": "lib/index.js",
6
6
  "types": "declarations/index.d.ts",
package/src/idl/vault.ts CHANGED
@@ -3076,6 +3076,26 @@ export type Vault = {
3076
3076
  "index": false
3077
3077
  }
3078
3078
  ]
3079
+ },
3080
+ {
3081
+ "name": "VaultTransferEvent",
3082
+ "fields": [
3083
+ {
3084
+ "name": "vault",
3085
+ "type": "publicKey",
3086
+ "index": false
3087
+ },
3088
+ {
3089
+ "name": "oldOwner",
3090
+ "type": "publicKey",
3091
+ "index": false
3092
+ },
3093
+ {
3094
+ "name": "newOwner",
3095
+ "type": "publicKey",
3096
+ "index": false
3097
+ }
3098
+ ]
3079
3099
  }
3080
3100
  ],
3081
3101
  "errors": [
@@ -6335,6 +6355,26 @@ export const IDL: Vault = {
6335
6355
  "index": false
6336
6356
  }
6337
6357
  ]
6358
+ },
6359
+ {
6360
+ "name": "VaultTransferEvent",
6361
+ "fields": [
6362
+ {
6363
+ "name": "vault",
6364
+ "type": "publicKey",
6365
+ "index": false
6366
+ },
6367
+ {
6368
+ "name": "oldOwner",
6369
+ "type": "publicKey",
6370
+ "index": false
6371
+ },
6372
+ {
6373
+ "name": "newOwner",
6374
+ "type": "publicKey",
6375
+ "index": false
6376
+ }
6377
+ ]
6338
6378
  }
6339
6379
  ],
6340
6380
  "errors": [
@@ -0,0 +1,99 @@
1
+ import { BN, Program, Provider } from '@project-serum/anchor'
2
+ import {
3
+ Keypair,
4
+ PublicKey,
5
+ sendAndConfirmTransaction,
6
+ Signer,
7
+ SystemProgram,
8
+ SYSVAR_RENT_PUBKEY,
9
+ Transaction,
10
+ TransactionInstruction,
11
+ } from '@solana/web3.js'
12
+ import {
13
+ findAssociatedTokenAddress,
14
+ findVaultAddress,
15
+ getVaultTypeAccountPublicKey,
16
+ getUshMintPublicKey,
17
+ getVaultSystemStatePublicKey,
18
+ getPoolPublicKeyForMint,
19
+ getHedgeMintPublicKey,
20
+ } from '../Constants'
21
+
22
+ import { v4 as uuidv4 } from 'uuid'
23
+ import { parseAnchorErrors } from '../utils/Errors'
24
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
25
+ import { Vault } from '../idl/vault'
26
+
27
+ export interface VaultTypeConfig {
28
+ maxDebtExtended?: BN
29
+ minDebtPerVault?: BN
30
+ loanInitFee?: BN
31
+ emergencyModeThreshold?: BN
32
+
33
+ oracleChainlink?: PublicKey
34
+ oraclePyth?: PublicKey
35
+ oracleSwitchboard?: PublicKey
36
+
37
+ priorityPyth?: number
38
+ priorityChainlink?: number
39
+ prioritySwitchboard?: number
40
+
41
+ deprecated?: boolean
42
+ }
43
+
44
+ export async function transferVault(
45
+ program: Program<Vault>,
46
+ provider: Provider,
47
+ payer: Signer,
48
+ vaultTypeAccount: PublicKey,
49
+ oracleInfoAccount: PublicKey,
50
+ config: VaultTypeConfig
51
+ ): Promise<PublicKey> {
52
+ const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
53
+ const transaction = new Transaction().add(
54
+ await transferVaultInstruction(
55
+ program,
56
+ vaultSystemStatePublicKey,
57
+ payer.publicKey,
58
+ vaultTypeAccount,
59
+ oracleInfoAccount,
60
+ config
61
+ )
62
+ )
63
+
64
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer])
65
+ return vaultSystemStatePublicKey
66
+ }
67
+
68
+ export async function transferVaultInstruction(
69
+ program: Program<Vault>,
70
+ vaultSystemStatePublicKey: PublicKey,
71
+ payerPublicKey: PublicKey,
72
+ vaultTypeAccount: PublicKey,
73
+ oracleInfoAccount: PublicKey,
74
+ vaultTypeConfig: VaultTypeConfig
75
+ ): Promise<TransactionInstruction> {
76
+ const config = {
77
+ maxDebtExtended: vaultTypeConfig.maxDebtExtended ?? null,
78
+ minDebtPerVault: vaultTypeConfig.minDebtPerVault ?? null,
79
+ loanInitFee: vaultTypeConfig.loanInitFee ?? null,
80
+ emergencyModeThreshold: vaultTypeConfig.emergencyModeThreshold ?? null,
81
+ oracleChainlink: vaultTypeConfig.oracleChainlink ?? null,
82
+ oraclePyth: vaultTypeConfig.oraclePyth ?? null,
83
+ oracleSwitchboard: vaultTypeConfig.oracleSwitchboard ?? null,
84
+ deprecated: vaultTypeConfig.deprecated ?? null,
85
+ priorityPyth: vaultTypeConfig.priorityPyth ?? null,
86
+ priorityChainlink: vaultTypeConfig.priorityChainlink ?? null,
87
+ prioritySwitchboard: vaultTypeConfig.prioritySwitchboard ?? null,
88
+ }
89
+
90
+ return await program.methods
91
+ .updateVaultType(config)
92
+ .accounts({
93
+ payer: payerPublicKey,
94
+ vaultSystemState: vaultSystemStatePublicKey,
95
+ vaultType: vaultTypeAccount,
96
+ oracleInfoAccount: oracleInfoAccount,
97
+ })
98
+ .instruction()
99
+ }
@@ -16,7 +16,7 @@ export class VaultAccount {
16
16
  /** The public key of the vault owner. */
17
17
  vaultOwner: PublicKey
18
18
 
19
- /** The public key of the vault owner. */
19
+ /** The public key of the vault owner. */ // dont think this is correct? thoughts?
20
20
  pdaSalt: string
21
21
 
22
22
  /** The deposited collateral of the vault (in SOL Lamports). */
@@ -50,7 +50,7 @@ export class VaultAccount {
50
50
  this.publicKey = publicKey
51
51
  this.vaultOwner = vault.vaultOwner
52
52
  this.pdaSalt = vault.pdaSalt
53
-
53
+
54
54
  this.deposited = vault.deposited
55
55
  this.denormalizedDebt = vault.denormalizedDebt
56
56
 
@@ -177,16 +177,15 @@ export class VaultAccount {
177
177
  public updateDebtAndCollateral(vaultTypeAccountData: VaultType) {
178
178
  this.denormalizedDebt = new BN(
179
179
  vaultTypeAccountData.debtRedistributionProduct
180
- .div(this.debtProductSnapshotBytes)
181
- .mul(new Decimal(this.denormalizedDebt.toString()))
182
- .floor()
183
- .toString()
180
+ .div(this.debtProductSnapshotBytes)
181
+ .mul(new Decimal(this.denormalizedDebt.toString()))
182
+ .floor()
183
+ .toString()
184
184
  )
185
185
 
186
- const extraCollateralDeposited =
187
- new Decimal(this.denormalizedDebt.toString()).mul(
188
- vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber()
189
- ).floor()
186
+ const extraCollateralDeposited = new Decimal(this.denormalizedDebt.toString())
187
+ .mul(vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber())
188
+ .floor()
190
189
  this.deposited = this.deposited.add(new BN(extraCollateralDeposited.toString()))
191
190
 
192
191
  this.collateralAccumulatorSnapshotBytes = vaultTypeAccountData.collateralRedistributionAccumulator