@reflectmoney/stable.ts 1.0.2 → 1.0.3

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/README.md CHANGED
@@ -1,14 +1,22 @@
1
- # Reflect Money Stable.ts SDK
1
+ # @reflectmoney/stable.ts | Reflect SDK
2
2
 
3
- A comprehensive TypeScript SDK for interacting with the Reflect Protocol Delta-Neutral Program on Solana. This SDK provides high-level abstractions for managing stablecoins, administrative operations, and protocol integrations.
3
+ A TypeScript SDK for interacting with the Reflect programs on Solana. This SDK provides high-level abstractions for minting, redeeming and managing stablecoins, administrative operations, and protocol integrations.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @reflectmoney/stable.ts
9
+ # or
10
+ yarn add @reflectmoney/stable.ts
11
+ ```
4
12
 
5
13
  ## Overview
6
14
 
7
- The Reflect Protocol SDK enables developers to interact with three main Reflect stablecoins:
15
+ The Reflect SDK enables developers to interact with the protocol via three main Reflect stablecoins:
8
16
 
9
- 1. **USDC+ (Strategy 0)**: Stablecoin backed by USDC deployed in money markets
10
- 2. **JLP Hedged (Strategy 1)**: Stablecoin backed by the JLP token, neutralised with perpetual hedging strategies
11
- 3. **LST Delta-Neutral (Strategy 2)**: Stablecoin backed by hedged LSTs
17
+ 1. **USDC+ (Index 0)**: Stablecoin backed by USDC deployed in various money markets
18
+ 2. **JLP Hedged (Index 1)**: Stablecoin backed by the JLP token, neutralised with perpetual hedging strategies
19
+ 3. **LST Delta-Neutral (Index 2)**: Stablecoin backed by LSTs hedged by perpetual futures position
12
20
 
13
21
  ## Architecture
14
22
 
@@ -17,148 +25,164 @@ The SDK is organized into several key components:
17
25
  ### Core Classes
18
26
 
19
27
  #### `Stablecoin` (Abstract Base Class)
20
- The foundation for all stablecoin implementations. Provides common interface for:
28
+ The foundation for all stablecoin implementations. Provides abstract functions and common interface for:
21
29
  - minting,
22
30
  - redemption,
23
31
  - administrative operations.
24
32
 
25
33
  **Key Methods:**
26
- - `initialize()` - Initialize the stablecoin strategy (admin-only)
34
+ - `initialize()` - Initialize and set-up the stablecoin (admin-only)
27
35
  - `mint()` - Create mint instructions
28
36
  - `redeem()` - Create redemption instructions
29
37
  - `rebalance()` - Create rebalancing instructions (admin-only)
30
38
  - `updateCap()` - Update supply cap (admin-only)
31
39
  - `updateRecipients()` - Update fee recipients (admin-only)
32
40
 
33
- #### `ReflectAdmin`
34
- Administrative client for protocol-level operations:
41
+ #### `ReflectKeeper`
42
+ Administrative client for protocol-level operations (admin-only):
35
43
  - Protocol initialization
36
44
  - Role and permission management
37
45
  - Action freezing/unfreezing
38
46
  - Admin account creation
39
47
 
40
48
  **Key Methods:**
41
- - `initializeMain()` - Initialize the main program account
49
+ - `initializeMain()` - Initialize the main account with the program configuration
42
50
  - `freezeProtocolAction()` - Freeze/unfreeze protocol actions
43
51
  - `updateRoleHolderProtocol()` - Update protocol-level permissions
44
- - `createAdminAccount()` - Create new admin accounts
52
+ - `createAdminAccount()` - Manage admin accounts
45
53
 
46
54
  #### `PdaClient`
47
- Utility class for deriving Program Derived Addresses (PDAs):
48
- - Main program accounts
49
- - Controller accounts
55
+ Utility class for deriving PDAs:
56
+ - Configuration program accounts
57
+ - Stablecoin controllers
50
58
  - Permission accounts
51
- - External protocol integrations (Drift, Jupiter)
59
+ - External protocol integrations (Drift, Jupiter, Tokenised Bond)
52
60
 
53
61
  #### `ReflectTokenisedBond`
54
- Client for tokenized bonds program, allowing for wrapping base stablecoins into yield-bearing receipts. Allows for:
62
+ Client for tokenized bonds program used for wrapping base stablecoins into yield-bearing receipts. Allows for:
55
63
  - Vault creation and management
56
64
  - Receipt token generation
57
65
  - Deposit and withdrawal operations
58
66
 
59
67
  ### Stablecoin Implementations
60
68
 
61
- #### `UsdcStablecoin`
62
- Simple USDC-backed stablecoin implementation:
69
+ #### `UsdcPlusStablecoin`
70
+ USDC+ is a stablecoin backed by USDC deployed in money markets. Implementation details:
71
+ - Live
63
72
  - Strategy ID: 0
64
73
  - Collateral: USDC
65
- - Integrated with tokenised bonds program on the protocol level
74
+ - Integrated with tokenised bonds program on the protocol level.
75
+ - Users only receive the yield-bearing stablecoin.
76
+ - Doesn't require rebalancing, as hedge is always preserved.
66
77
 
67
- #### `JlpStablecoin`
68
- Jupiter LP token with perpetual hedging:
78
+ #### `UsdjStablecoin`
79
+ Stablecoin backed by JLP neutralised with perpetual hedging:
80
+ - Coming soon
69
81
  - Strategy ID: 1
70
82
  - Collateral: JLP (Jupiter LP tokens)
83
+ - Requires manual wrapping via the Tokenised Bonds program.
84
+ - Requires rebalancing, currently permissioned.
85
+
71
86
 
72
87
  #### `LstStablecoin`
73
88
  Liquid staking token delta-neutral strategy:
89
+ - Live
74
90
  - Strategy ID: 2
75
- - Collateral: Various LSTs (mSOL, jitoSOL, etc.)
91
+ - Collateral: Various LSTs (mSOL, jitoSOL, etc.) - use `load()` functionality to fetch currently supported list of collateral assets.
92
+ - Requires manual wrapping via the Tokenised Bonds program.
93
+ - Requires rebalancing, currently permissioned.
76
94
 
77
- ## Installation
95
+ ## Usage
78
96
 
79
- ```bash
80
- npm install @reflectmoney/stable.ts
81
- # or
82
- yarn add @reflectmoney/stable.ts
97
+ Follow snippets below to mint and redeem Reflect stablecoins. All Stablecoin subclasses expose methods following the same schema, so the code below works interchangeably with minor changes - simply change between the three:
98
+ ```typescript
99
+ const stablecoin = new UsdcPlusStablecoin(connection);
100
+ const stablecoin = new UsdjStablecoin(connection);
101
+ const stablecoin = new LstStablecoin(connection);
83
102
  ```
84
103
 
85
- ## Quick Start
86
-
87
104
  ### Minting Stablecoins
88
105
 
89
106
  ```typescript
90
- import { LstStablecoin } from '@reflectmoney/stable.ts';
107
+ import { UsdcPlusStablecoin } from '@reflectmoney/stable.ts';
91
108
  import { PublicKey } from '@solana/web3.js';
92
109
  import BN from 'bn.js';
93
110
 
94
- const lstStablecoin = new LstStablecoin(connection);
111
+ // Use an actual user's public key, read from wallet adapter or local environment.
112
+ const user = Keypair.generate();
113
+ const stablecoin = new UsdcPlusStablecoin(connection);
95
114
 
96
- // Load controller data
97
- await lstStablecoin.load(connection);
115
+ // Load controller data for most up-to-date stablecoin setup.
116
+ await stablecoin.load(connection);
98
117
 
99
118
  // Mint stablecoins against LST collateral
100
- const mintInstructions = await lstStablecoin.mint(
119
+ const instructions = await stablecoin.mint(
101
120
  userPublicKey,
102
- new BN(1000000), // 1 USDC (6 decimals)
103
- new BN(999000), // Minimum received (slippage protection)
104
- new PublicKey("<jitoSOL mint>") // LST mint address
121
+ new BN(1000 * 1_000_000), // Deposit collateral of 1,000 USDC (6 decimals)
122
+ new BN(999 * 1_000_000), // Minimum received USDC+ (0.1% slippage protection)
105
123
  );
124
+
125
+ const { blockhash } = await connection.getLatestBlockhash();
126
+
127
+ const {
128
+ value: lookupTable
129
+ } = await connection.getAddressLookupTable(
130
+ stablecoin.lookupTable
131
+ );
132
+
133
+ const message = new TransactionMessage({
134
+ instructions,
135
+ payerKey: user.publicKey,
136
+ recentBlockhash: blockhash
137
+ }).compileToV0Message([lookupTable]);
138
+
139
+ const transaction = new VersionedTransaction(message);
140
+
141
+ // Transaction signature and landing logic, adjust for your needs.
142
+ transaction.sign([user]);
143
+ await connection.sendRawTransaction(transaction.serialize());
106
144
  ```
107
145
 
108
- ### Administrative Operations
146
+ ### Redeeming Stablecoins
109
147
 
110
148
  ```typescript
111
- import { ReflectAdmin } from '@reflectmoney/stable.ts';
149
+ import { UsdcPlusStablecoin } from '@reflectmoney/stable.ts';
150
+ import { PublicKey } from '@solana/web3.js';
151
+ import BN from 'bn.js';
112
152
 
113
- const admin = new ReflectAdmin({
114
- admin: adminPublicKey,
115
- connection
116
- });
153
+ // Use an actual user's public key, read from wallet adapter or local environment.
154
+ const user = Keypair.generate();
155
+ const stablecoin = new UsdcPlusStablecoin(connection);
117
156
 
118
- // Freeze minting operations
119
- const freezeIx = await admin.freezeProtocolAction(true, Action.Mint);
157
+ // Load controller data for most up-to-date stablecoin setup.
158
+ await stablecoin.load(connection);
120
159
 
121
- // Update supply cap
122
- const updateCapIx = await usdcStablecoin.updateCap(adminPublicKey, new BN(1000000000));
123
- ```
160
+ // Redeems USDC+ into USDC
161
+ const instructions = await stablecoin.redeem(
162
+ userPublicKey,
163
+ new BN(999 * 1_000_000), // Burn 1,000 of USDC+
164
+ new BN(1_000 * 1_000_000), // Minimum received USDC (USDC+ is yield bearing, so you'll receive more USDC over time)
165
+ );
124
166
 
125
- ## Advanced Usage
167
+ const { blockhash } = await connection.getLatestBlockhash();
126
168
 
127
- ### Custom Stablecoin Implementation
169
+ const {
170
+ value: lookupTable
171
+ } = await connection.getAddressLookupTable(
172
+ stablecoin.lookupTable
173
+ );
128
174
 
129
- ```typescript
130
- import { Stablecoin } from '@reflectmoney/stable.ts';
131
-
132
- class CustomStablecoin extends Stablecoin {
133
- constructor(connection: Connection) {
134
- super(3, "Custom Strategy", connection);
135
- this.collaterals = [{ mint: customMint, oracle: customOracle }];
136
- }
137
-
138
- async initialize(signer: PublicKey, ...args: any[]): Promise<TransactionInstruction[]> {
139
- // Custom initialization logic
140
- }
141
-
142
- async mint(signer: PublicKey, amount: BN, minimumReceived: BN, ...args: any[]): Promise<TransactionInstruction[]> {
143
- // Custom minting logic
144
- }
145
-
146
- async redeem(signer: PublicKey, amount: BN, minimumReceived: BN, ...args: any[]): Promise<TransactionInstruction[]> {
147
- // Custom redemption logic
148
- }
149
-
150
- async rebalance(signer: PublicKey): Promise<TransactionInstruction[]> {
151
- // Custom rebalancing logic
152
- }
153
-
154
- async constructAccounts<T>(signer: PublicKey, ...args: any[]): Promise<T> {
155
- // Custom account construction
156
- }
157
-
158
- async constructRemainingAccounts(): Promise<AccountMeta[]> {
159
- // Custom remaining accounts
160
- }
161
- }
175
+ const message = new TransactionMessage({
176
+ instructions,
177
+ payerKey: user.publicKey,
178
+ recentBlockhash: blockhash
179
+ }).compileToV0Message([lookupTable]);
180
+
181
+ const transaction = new VersionedTransaction(message);
182
+
183
+ // Transaction signature and landing logic, adjust for your needs.
184
+ transaction.sign([user]);
185
+ await connection.sendRawTransaction(transaction.serialize());
162
186
  ```
163
187
 
164
188
  ### Integration with External Protocols
@@ -0,0 +1,104 @@
1
+ import { Connection, PublicKey } from "@solana/web3.js";
2
+ import { Action, Role, Update } from "../generated/reflect_main";
3
+ /**
4
+ * Administrative client for the Reflect protocol.
5
+ * Provides functionality for protocol-level administration including:
6
+ * - Protocol initialization and setup
7
+ * - Role and permission management
8
+ * - Action freezing/unfreezing
9
+ * - Admin account creation and management
10
+ *
11
+ * This class is used by protocol administrators to manage global settings,
12
+ * user permissions, and protocol-wide configurations.
13
+ */
14
+ export declare class ReflectAdmin {
15
+ /** Public key of the admin user */
16
+ private admin;
17
+ /** Public key of the main program account */
18
+ private main;
19
+ /** Solana connection instance for RPC communication */
20
+ private connection;
21
+ /**
22
+ * Creates a new ReflectAdmin instance.
23
+ *
24
+ * @param admin - Public key of the admin user
25
+ * @param connection - Solana connection instance
26
+ */
27
+ constructor({ admin, connection }: {
28
+ admin: PublicKey;
29
+ connection: Connection;
30
+ });
31
+ /**
32
+ * Creates the main program account. This is the initial step of protocol setup.
33
+ *
34
+ * @param admin - Public key of the initial admin
35
+ * @returns TransactionInstruction for initializing the main account
36
+ */
37
+ static initializeMain(admin: PublicKey): import("@solana/web3.js").TransactionInstruction;
38
+ /**
39
+ * Freezes or unfreezes a specific protocol action.
40
+ *
41
+ * @param freeze - Whether to freeze (true) or unfreeze (false) the action
42
+ * @param action - The action to freeze/unfreeze
43
+ * @returns Promise resolving to a TransactionInstruction
44
+ */
45
+ freezeProtocolAction(freeze: boolean, action: Action): Promise<import("@solana/web3.js").TransactionInstruction>;
46
+ /**
47
+ * Freezes or unfreezes a specific DEX program.
48
+ *
49
+ * @param freeze - Whether to freeze (true) or unfreeze (false) the program
50
+ * @param programIndex - Index of the program to freeze/unfreeze
51
+ * @returns Promise resolving to a TransactionInstruction
52
+ */
53
+ freezeDex(freeze: boolean, programIndex: number): Promise<import("@solana/web3.js").TransactionInstruction>;
54
+ /**
55
+ * Creates a new admin account with specified permissions.
56
+ *
57
+ * @param signer - Public key of the caller (must be existing admin)
58
+ * @param newAdmin - Public key of the new admin to create
59
+ * @returns Promise resolving to a TransactionInstruction
60
+ */
61
+ createAdminAccount(signer: PublicKey, newAdmin: PublicKey): Promise<import("@solana/web3.js").TransactionInstruction>;
62
+ /**
63
+ * Updates role holder permissions at the protocol level.
64
+ *
65
+ * @param signer - Public key of the admin signer
66
+ * @param adminToUpdate - Public key of the admin whose permissions are being updated
67
+ * @param affectedRole - The role being modified
68
+ * @param update - The type of update (Grant or Revoke)
69
+ * @returns Promise resolving to a TransactionInstruction
70
+ */
71
+ updateRoleHolderProtocol(signer: PublicKey, adminToUpdate: PublicKey, affectedRole: Role, update: Update): Promise<import("@solana/web3.js").TransactionInstruction>;
72
+ /**
73
+ * Updates role holder permissions for a specific strategy.
74
+ *
75
+ * @param signer - Public key of the admin signer
76
+ * @param strategyId - ID of the strategy to update permissions for
77
+ * @param adminToUpdate - Public key of the admin whose permissions are being updated
78
+ * @param affectedRole - The role being modified
79
+ * @param update - The type of update (Grant or Revoke)
80
+ * @returns Promise resolving to a TransactionInstruction
81
+ */
82
+ updateRoleHolderStrategy(signer: PublicKey, strategyId: number, adminToUpdate: PublicKey, affectedRole: Role, update: Update): Promise<import("@solana/web3.js").TransactionInstruction>;
83
+ /**
84
+ * Updates action role permissions for a specific strategy.
85
+ *
86
+ * @param signer - Public key of the admin signer
87
+ * @param strategyId - ID of the strategy to update permissions for
88
+ * @param action - The action being modified
89
+ * @param affectedRole - The role being modified
90
+ * @param update - The type of update (Grant or Revoke)
91
+ * @returns Promise resolving to a TransactionInstruction
92
+ */
93
+ updateActionRoleStrategy(signer: PublicKey, strategyId: number, action: Action, affectedRole: Role, update: Update): Promise<import("@solana/web3.js").TransactionInstruction>;
94
+ /**
95
+ * Updates action role permissions at the protocol level.
96
+ *
97
+ * @param signer - Public key of the admin signer
98
+ * @param action - The action being modified
99
+ * @param affectedRole - The role being modified
100
+ * @param update - The type of update (Grant or Revoke)
101
+ * @returns Promise resolving to a TransactionInstruction
102
+ */
103
+ updateActionRoleProtocol(signer: PublicKey, action: Action, affectedRole: Role, update: Update): Promise<import("@solana/web3.js").TransactionInstruction>;
104
+ }
@@ -0,0 +1,219 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ReflectAdmin = void 0;
13
+ const web3_js_1 = require("@solana/web3.js");
14
+ const reflect_main_1 = require("../generated/reflect_main");
15
+ const PdaClient_1 = require("./PdaClient");
16
+ /**
17
+ * Administrative client for the Reflect protocol.
18
+ * Provides functionality for protocol-level administration including:
19
+ * - Protocol initialization and setup
20
+ * - Role and permission management
21
+ * - Action freezing/unfreezing
22
+ * - Admin account creation and management
23
+ *
24
+ * This class is used by protocol administrators to manage global settings,
25
+ * user permissions, and protocol-wide configurations.
26
+ */
27
+ class ReflectAdmin {
28
+ /**
29
+ * Creates a new ReflectAdmin instance.
30
+ *
31
+ * @param admin - Public key of the admin user
32
+ * @param connection - Solana connection instance
33
+ */
34
+ constructor({ admin, connection }) {
35
+ this.admin = admin;
36
+ this.connection = connection;
37
+ this.main = PdaClient_1.PdaClient.deriveMain();
38
+ }
39
+ /**
40
+ * Creates the main program account. This is the initial step of protocol setup.
41
+ *
42
+ * @param admin - Public key of the initial admin
43
+ * @returns TransactionInstruction for initializing the main account
44
+ */
45
+ static initializeMain(admin) {
46
+ const [main] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from("main")], reflect_main_1.PROGRAM_ID);
47
+ const ix = (0, reflect_main_1.createInitMainInstruction)({
48
+ main,
49
+ admin,
50
+ systemProgram: web3_js_1.SystemProgram.programId,
51
+ creds: PdaClient_1.PdaClient.derivePermissions(admin)
52
+ }, reflect_main_1.PROGRAM_ID);
53
+ return ix;
54
+ }
55
+ /**
56
+ * Freezes or unfreezes a specific protocol action.
57
+ *
58
+ * @param freeze - Whether to freeze (true) or unfreeze (false) the action
59
+ * @param action - The action to freeze/unfreeze
60
+ * @returns Promise resolving to a TransactionInstruction
61
+ */
62
+ freezeProtocolAction(freeze, action) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const ix = (0, reflect_main_1.createFreezeProtocolActionInstruction)({
65
+ admin: this.admin,
66
+ main: this.main,
67
+ systemProgram: web3_js_1.SystemProgram.programId,
68
+ adminPermissions: PdaClient_1.PdaClient.derivePermissions(this.admin),
69
+ }, {
70
+ freeze,
71
+ action
72
+ });
73
+ return ix;
74
+ });
75
+ }
76
+ /**
77
+ * Freezes or unfreezes a specific DEX program.
78
+ *
79
+ * @param freeze - Whether to freeze (true) or unfreeze (false) the program
80
+ * @param programIndex - Index of the program to freeze/unfreeze
81
+ * @returns Promise resolving to a TransactionInstruction
82
+ */
83
+ freezeDex(freeze, programIndex) {
84
+ return __awaiter(this, void 0, void 0, function* () {
85
+ const ix = (0, reflect_main_1.createFreezeProgramInstruction)({
86
+ admin: this.admin,
87
+ main: this.main,
88
+ systemProgram: web3_js_1.SystemProgram.programId,
89
+ adminPermissions: PdaClient_1.PdaClient.derivePermissions(this.admin),
90
+ }, {
91
+ freeze,
92
+ programIndex
93
+ });
94
+ return ix;
95
+ });
96
+ }
97
+ /**
98
+ * Creates a new admin account with specified permissions.
99
+ *
100
+ * @param signer - Public key of the caller (must be existing admin)
101
+ * @param newAdmin - Public key of the new admin to create
102
+ * @returns Promise resolving to a TransactionInstruction
103
+ */
104
+ createAdminAccount(signer, newAdmin) {
105
+ return __awaiter(this, void 0, void 0, function* () {
106
+ const ix = (0, reflect_main_1.createCreateAdminAccountInstruction)({
107
+ caller: signer,
108
+ newCreds: PdaClient_1.PdaClient.derivePermissions(newAdmin),
109
+ systemProgram: web3_js_1.SystemProgram.programId,
110
+ }, {
111
+ newAdmin
112
+ }, reflect_main_1.PROGRAM_ID);
113
+ return ix;
114
+ });
115
+ }
116
+ /**
117
+ * Updates role holder permissions at the protocol level.
118
+ *
119
+ * @param signer - Public key of the admin signer
120
+ * @param adminToUpdate - Public key of the admin whose permissions are being updated
121
+ * @param affectedRole - The role being modified
122
+ * @param update - The type of update (Grant or Revoke)
123
+ * @returns Promise resolving to a TransactionInstruction
124
+ */
125
+ updateRoleHolderProtocol(signer, adminToUpdate, affectedRole, update) {
126
+ return __awaiter(this, void 0, void 0, function* () {
127
+ const ix = (0, reflect_main_1.createUpdateRoleHolderProtocolInstruction)({
128
+ admin: signer,
129
+ adminPermissions: PdaClient_1.PdaClient.derivePermissions(signer),
130
+ main: PdaClient_1.PdaClient.deriveMain(),
131
+ systemProgram: web3_js_1.SystemProgram.programId,
132
+ updateAdminPermissions: PdaClient_1.PdaClient.derivePermissions(adminToUpdate),
133
+ // Dummy strategy account.
134
+ strategy: PdaClient_1.PdaClient.deriveController(0)
135
+ }, {
136
+ update,
137
+ accessLevel: affectedRole,
138
+ }, reflect_main_1.PROGRAM_ID);
139
+ return ix;
140
+ });
141
+ }
142
+ /**
143
+ * Updates role holder permissions for a specific strategy.
144
+ *
145
+ * @param signer - Public key of the admin signer
146
+ * @param strategyId - ID of the strategy to update permissions for
147
+ * @param adminToUpdate - Public key of the admin whose permissions are being updated
148
+ * @param affectedRole - The role being modified
149
+ * @param update - The type of update (Grant or Revoke)
150
+ * @returns Promise resolving to a TransactionInstruction
151
+ */
152
+ updateRoleHolderStrategy(signer, strategyId, adminToUpdate, affectedRole, update) {
153
+ return __awaiter(this, void 0, void 0, function* () {
154
+ const ix = (0, reflect_main_1.createUpdateRoleHolderStrategyInstruction)({
155
+ admin: signer,
156
+ adminPermissions: PdaClient_1.PdaClient.derivePermissions(signer),
157
+ main: PdaClient_1.PdaClient.deriveMain(),
158
+ systemProgram: web3_js_1.SystemProgram.programId,
159
+ updateAdminPermissions: PdaClient_1.PdaClient.derivePermissions(adminToUpdate),
160
+ strategy: PdaClient_1.PdaClient.deriveController(strategyId)
161
+ }, {
162
+ update,
163
+ role: affectedRole,
164
+ }, reflect_main_1.PROGRAM_ID);
165
+ return ix;
166
+ });
167
+ }
168
+ /**
169
+ * Updates action role permissions for a specific strategy.
170
+ *
171
+ * @param signer - Public key of the admin signer
172
+ * @param strategyId - ID of the strategy to update permissions for
173
+ * @param action - The action being modified
174
+ * @param affectedRole - The role being modified
175
+ * @param update - The type of update (Grant or Revoke)
176
+ * @returns Promise resolving to a TransactionInstruction
177
+ */
178
+ updateActionRoleStrategy(signer, strategyId, action, affectedRole, update) {
179
+ return __awaiter(this, void 0, void 0, function* () {
180
+ const ix = (0, reflect_main_1.createUpdateActionRoleStrategyInstruction)({
181
+ admin: signer,
182
+ adminPermissions: PdaClient_1.PdaClient.derivePermissions(signer),
183
+ main: PdaClient_1.PdaClient.deriveMain(),
184
+ systemProgram: web3_js_1.SystemProgram.programId,
185
+ strategy: PdaClient_1.PdaClient.deriveController(strategyId)
186
+ }, {
187
+ update,
188
+ role: affectedRole,
189
+ action
190
+ }, reflect_main_1.PROGRAM_ID);
191
+ return ix;
192
+ });
193
+ }
194
+ /**
195
+ * Updates action role permissions at the protocol level.
196
+ *
197
+ * @param signer - Public key of the admin signer
198
+ * @param action - The action being modified
199
+ * @param affectedRole - The role being modified
200
+ * @param update - The type of update (Grant or Revoke)
201
+ * @returns Promise resolving to a TransactionInstruction
202
+ */
203
+ updateActionRoleProtocol(signer, action, affectedRole, update) {
204
+ return __awaiter(this, void 0, void 0, function* () {
205
+ const ix = (0, reflect_main_1.createUpdateActionRoleProtocolInstruction)({
206
+ admin: signer,
207
+ adminPermissions: PdaClient_1.PdaClient.derivePermissions(signer),
208
+ main: PdaClient_1.PdaClient.deriveMain(),
209
+ systemProgram: web3_js_1.SystemProgram.programId,
210
+ }, {
211
+ action,
212
+ role: affectedRole,
213
+ update
214
+ }, reflect_main_1.PROGRAM_ID);
215
+ return ix;
216
+ });
217
+ }
218
+ }
219
+ exports.ReflectAdmin = ReflectAdmin;
@@ -28,6 +28,8 @@ export declare abstract class Stablecoin {
28
28
  stablecoinMint: PublicKey;
29
29
  /** Optional Drift client instance for DeFi operations */
30
30
  driftClient?: DriftClient;
31
+ /** Lookup table with stablecoin-specific accounts. */
32
+ lookupTable: PublicKey;
31
33
  /**
32
34
  * Creates a new Stablecoin instance.
33
35
  *
@@ -35,7 +37,7 @@ export declare abstract class Stablecoin {
35
37
  * @param name - Human-readable name for the stablecoin
36
38
  * @param connection - Solana connection instance
37
39
  */
38
- constructor(index: number, name: string, connection: Connection);
40
+ constructor(index: number, name: string, connection: Connection, lookupTable: PublicKey);
39
41
  /**
40
42
  * Initializes token accounts for the specified owner and mints.
41
43
  * Creates associated token accounts if they don't exist.
@@ -40,11 +40,12 @@ class Stablecoin {
40
40
  * @param name - Human-readable name for the stablecoin
41
41
  * @param connection - Solana connection instance
42
42
  */
43
- constructor(index, name, connection) {
43
+ constructor(index, name, connection, lookupTable) {
44
44
  this.index = index;
45
45
  this.name = name;
46
46
  this.connection = connection;
47
47
  this.controller = PdaClient_1.PdaClient.deriveController(this.index);
48
+ this.lookupTable = lookupTable;
48
49
  }
49
50
  /**
50
51
  * Initializes token accounts for the specified owner and mints.
@@ -1,3 +1,3 @@
1
- export * from "./ReflectAdmin";
1
+ export * from "./ReflectKeeper";
2
2
  export * from "./PdaClient";
3
3
  export * from "./Stablecoin";
@@ -14,6 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./ReflectAdmin"), exports);
17
+ __exportStar(require("./ReflectKeeper"), exports);
18
18
  __exportStar(require("./PdaClient"), exports);
19
19
  __exportStar(require("./Stablecoin"), exports);
@@ -3,3 +3,4 @@ export * from "./drift";
3
3
  export * from "./wsol";
4
4
  export * from "./jupiter";
5
5
  export * from "./pyth";
6
+ export * from "./lookupTables";
@@ -19,3 +19,4 @@ __exportStar(require("./drift"), exports);
19
19
  __exportStar(require("./wsol"), exports);
20
20
  __exportStar(require("./jupiter"), exports);
21
21
  __exportStar(require("./pyth"), exports);
22
+ __exportStar(require("./lookupTables"), exports);
@@ -0,0 +1,4 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ export declare const USDC_PLUS_LOOKUP_TABLE: PublicKey;
3
+ export declare const JLP_LOOKUP_TABLE: PublicKey;
4
+ export declare const LST_LOOKUP_TABLE: PublicKey;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LST_LOOKUP_TABLE = exports.JLP_LOOKUP_TABLE = exports.USDC_PLUS_LOOKUP_TABLE = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ exports.USDC_PLUS_LOOKUP_TABLE = new web3_js_1.PublicKey(0);
6
+ exports.JLP_LOOKUP_TABLE = new web3_js_1.PublicKey(0);
7
+ exports.LST_LOOKUP_TABLE = new web3_js_1.PublicKey(0);
@@ -39,7 +39,7 @@ class LstStablecoin extends Stablecoin_1.Stablecoin {
39
39
  * @param collateralMintsOverride - Optional override for collateral mint addresses
40
40
  */
41
41
  constructor(connection, stablecoinMintOverride, collateralMintsOverride) {
42
- super(2, "Single-Sided LST Delta-Neutral", connection);
42
+ super(2, "LST Delta-Neutral", connection, constants_1.LST_LOOKUP_TABLE);
43
43
  this.driftClient = new sdk_1.DriftClient({
44
44
  connection,
45
45
  env: "mainnet-beta",
@@ -0,0 +1,66 @@
1
+ import { Stablecoin } from "../classes/Stablecoin";
2
+ import { AccountMeta, Connection, PublicKey, TransactionInstruction } from "@solana/web3.js";
3
+ import BN from "bn.js";
4
+ /**
5
+ * USDC+ Stablecoin implementation for the Reflect protocol.
6
+ * Extends the base Stablecoin class to provide USDC-specific functionality
7
+ * including initialization, minting, redemption, and rebalancing operations.
8
+ */
9
+ export declare class UsdcPlusStablecoin extends Stablecoin {
10
+ /**
11
+ * Creates a new USDC+ Stablecoin instance.
12
+ *
13
+ * @param connection - Solana connection instance for RPC communication
14
+ * @param stablecoinMintOverride - Optional override for the stablecoin mint address
15
+ */
16
+ constructor(connection: Connection, stablecoinMintOverride?: PublicKey);
17
+ /**
18
+ * Initializes the USDC stablecoin with the specified parameters.
19
+ * Creates receipt tokens, initializes vault, and initializes the stablecoin.
20
+ *
21
+ * @param signer - Public key of the signer/initializer
22
+ * @param mint - Public key of the mint to be used for the stablecoin
23
+ * @param cap - Maximum supply cap as a BN (Big Number)
24
+ * @param recipientAddresses - Array of recipient public keys for fee distribution
25
+ * @param recipientCuts - Array of fee cuts (percentages) corresponding to each recipient
26
+ * @returns Promise resolving to an array of TransactionInstruction objects
27
+ */
28
+ initialize(signer: PublicKey, mint: PublicKey, cap: BN, recipientAddresses: PublicKey[], recipientCuts: number[]): Promise<TransactionInstruction[]>;
29
+ /**
30
+ * Constructs the required accounts for the InitDriftControllerS1 instruction.
31
+ *
32
+ * @param signer - Public key of the signer
33
+ * @returns Promise resolving to the constructed accounts object of type T
34
+ */
35
+ constructAccounts<T>(signer: PublicKey): Promise<T>;
36
+ /**
37
+ * Constructs remaining accounts for transactions.
38
+ * Currently returns an empty array as no additional accounts are needed.
39
+ *
40
+ * @returns Promise resolving to an empty array of AccountMeta objects
41
+ */
42
+ constructRemainingAccounts(): Promise<AccountMeta[]>;
43
+ /**
44
+ * Creates a mint instruction for the USDC+ stablecoin.
45
+ *
46
+ * @param signer - Public key of the signer
47
+ * @param amount - Amount of USDC to deposit
48
+ * @param minimumReceived - Minimum amount of USDC+ stablecoins to receive (slippage protection)
49
+ * @returns Promise resolving to an array containing a single TransactionInstruction
50
+ */
51
+ mint(signer: PublicKey, amount: BN | number, minimumReceived: BN | number): Promise<TransactionInstruction[]>;
52
+ /**
53
+ * Creates a redeem instruction for the USDC stablecoin.
54
+ * Currently returns a placeholder instruction - implementation needed.
55
+ *
56
+ * @returns Promise resolving to an array containing a single TransactionInstruction
57
+ */
58
+ redeem(signer: PublicKey, amount: BN | number, minimumReceived: BN | number): Promise<TransactionInstruction[]>;
59
+ /**
60
+ * Creates a rebalance instruction for the USDC+ stablecoin.
61
+ * Currently returns an empty instruction, as the rebalance is unnecessary.
62
+ *
63
+ * @returns Promise resolving to an array containing a single, empty TransactionInstruction.
64
+ */
65
+ rebalance(): Promise<TransactionInstruction[]>;
66
+ }
@@ -0,0 +1,197 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.UsdcPlusStablecoin = void 0;
13
+ const Stablecoin_1 = require("../classes/Stablecoin");
14
+ const web3_js_1 = require("@solana/web3.js");
15
+ const classes_1 = require("../classes");
16
+ const constants_1 = require("../constants");
17
+ const reflect_main_1 = require("../generated/reflect_main");
18
+ const sdk_1 = require("@drift-labs/sdk");
19
+ const constants_2 = require("../constants");
20
+ const ReflectTokenisedBond_1 = require("../classes/ReflectTokenisedBond");
21
+ const spl_token_1 = require("@solana/spl-token");
22
+ const __1 = require("..");
23
+ const reflect_tokenised_bonds_1 = require("../generated/reflect_tokenised_bonds");
24
+ /**
25
+ * USDC+ Stablecoin implementation for the Reflect protocol.
26
+ * Extends the base Stablecoin class to provide USDC-specific functionality
27
+ * including initialization, minting, redemption, and rebalancing operations.
28
+ */
29
+ class UsdcPlusStablecoin extends Stablecoin_1.Stablecoin {
30
+ /**
31
+ * Creates a new USDC+ Stablecoin instance.
32
+ *
33
+ * @param connection - Solana connection instance for RPC communication
34
+ * @param stablecoinMintOverride - Optional override for the stablecoin mint address
35
+ */
36
+ constructor(connection, stablecoinMintOverride) {
37
+ super(0, "USDC Money Market", connection, constants_2.USDC_PLUS_LOOKUP_TABLE);
38
+ this.collaterals = [{ mint: constants_1.USDC_MINT, oracle: "" }];
39
+ // Otherwise has to be loaded first.
40
+ if (stablecoinMintOverride)
41
+ this.stablecoinMint = stablecoinMintOverride;
42
+ }
43
+ /**
44
+ * Initializes the USDC stablecoin with the specified parameters.
45
+ * Creates receipt tokens, initializes vault, and initializes the stablecoin.
46
+ *
47
+ * @param signer - Public key of the signer/initializer
48
+ * @param mint - Public key of the mint to be used for the stablecoin
49
+ * @param cap - Maximum supply cap as a BN (Big Number)
50
+ * @param recipientAddresses - Array of recipient public keys for fee distribution
51
+ * @param recipientCuts - Array of fee cuts (percentages) corresponding to each recipient
52
+ * @returns Promise resolving to an array of TransactionInstruction objects
53
+ */
54
+ initialize(signer, mint, cap, recipientAddresses, recipientCuts) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const vault = classes_1.PdaClient.deriveLpVault(0);
57
+ const lp = new ReflectTokenisedBond_1.ReflectTokenisedBond(this.connection);
58
+ const { instructions: receiptIx, signers: [receiptKeypair] } = yield lp.createReceiptToken(this.connection, signer, vault);
59
+ const vaultIx = yield lp.initializeVault(signer, mint, receiptKeypair.publicKey);
60
+ const ix = (0, reflect_main_1.createInitDriftControllerS1Instruction)({
61
+ admin: signer,
62
+ adminPermissions: classes_1.PdaClient.derivePermissions(signer),
63
+ main: classes_1.PdaClient.deriveMain(),
64
+ driftUsdcController: this.controller,
65
+ systemProgram: web3_js_1.SystemProgram.programId,
66
+ }, {
67
+ mint,
68
+ cap,
69
+ recipientAddresses,
70
+ recipientCuts,
71
+ lpReciptMint: receiptKeypair.publicKey,
72
+ vault
73
+ }, reflect_main_1.PROGRAM_ID);
74
+ return [...receiptIx, vaultIx, ix];
75
+ });
76
+ }
77
+ /**
78
+ * Constructs the required accounts for the InitDriftControllerS1 instruction.
79
+ *
80
+ * @param signer - Public key of the signer
81
+ * @returns Promise resolving to the constructed accounts object of type T
82
+ */
83
+ constructAccounts(signer) {
84
+ return __awaiter(this, void 0, void 0, function* () {
85
+ const userAccount = (0, sdk_1.getUserAccountPublicKeySync)(constants_1.DRIFT_PROGRAM_ID, this.controller);
86
+ const userStats = (0, sdk_1.getUserStatsAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID, this.controller);
87
+ const anchorRemainingAccounts = yield this.constructRemainingAccounts();
88
+ const { referrer } = yield (0, sdk_1.fetchUserStatsAccount)(this.connection, this.driftClient.program, userAccount);
89
+ const referrerUser = (0, sdk_1.getUserAccountPublicKeySync)(constants_1.DRIFT_PROGRAM_ID, referrer);
90
+ const referrerUserStats = (0, sdk_1.getUserStatsAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID, referrer);
91
+ const userUsdcAta = (0, spl_token_1.getAssociatedTokenAddressSync)(this.controller, signer, true);
92
+ const vault = classes_1.PdaClient.deriveLpVault(0);
93
+ const { depositTokenMint: intermediaryMint, receiptTokenMint } = yield reflect_tokenised_bonds_1.Vault
94
+ .fromAccountAddress(this.connection, vault);
95
+ const userReceiptAta = (0, spl_token_1.getAssociatedTokenAddressSync)(receiptTokenMint, signer, true);
96
+ const controllerIntermediaryAta = (0, spl_token_1.getAssociatedTokenAddressSync)(intermediaryMint, this.controller, true);
97
+ const controllerReceiptAta = (0, spl_token_1.getAssociatedTokenAddressSync)(receiptTokenMint, this.controller, true);
98
+ const controllerUsdcAta = (0, spl_token_1.getAssociatedTokenAddressSync)(constants_1.USDC_MINT, this.controller, true);
99
+ const spotMarketVault = yield (0, sdk_1.getSpotMarketVaultPublicKey)(constants_1.DRIFT_PROGRAM_ID, 0);
100
+ const driftState = yield (0, sdk_1.getDriftStateAccountPublicKey)(constants_1.DRIFT_PROGRAM_ID);
101
+ const vaultPool = classes_1.PdaClient.deriveLpVaultPool(0);
102
+ const accounts = {
103
+ clock: web3_js_1.SYSVAR_CLOCK_PUBKEY,
104
+ controllerIntermediaryAta,
105
+ controllerReceiptAta,
106
+ controllerUsdcAta,
107
+ drift: constants_1.DRIFT_PROGRAM_ID,
108
+ driftVault: constants_1.DRIFT_VAULT,
109
+ intermediaryMint,
110
+ lpPoolIntermediaryAta: vaultPool,
111
+ lpProgram: __1.TOKENISED_BONDS_PROGRAM_ID,
112
+ main: classes_1.PdaClient.deriveMain(),
113
+ receiptMint: receiptTokenMint,
114
+ referrerUser,
115
+ referrerUserStats,
116
+ spotMarketVault,
117
+ state: driftState,
118
+ usdcController: this.controller,
119
+ user: signer,
120
+ userAccount,
121
+ userReceiptAta,
122
+ userStats,
123
+ userUsdcAta,
124
+ vault,
125
+ adminPermissions: null,
126
+ anchorRemainingAccounts,
127
+ systemProgram: web3_js_1.SystemProgram.programId,
128
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID
129
+ };
130
+ return accounts;
131
+ });
132
+ }
133
+ /**
134
+ * Constructs remaining accounts for transactions.
135
+ * Currently returns an empty array as no additional accounts are needed.
136
+ *
137
+ * @returns Promise resolving to an empty array of AccountMeta objects
138
+ */
139
+ constructRemainingAccounts() {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ return [];
142
+ });
143
+ }
144
+ ;
145
+ /**
146
+ * Creates a mint instruction for the USDC+ stablecoin.
147
+ *
148
+ * @param signer - Public key of the signer
149
+ * @param amount - Amount of USDC to deposit
150
+ * @param minimumReceived - Minimum amount of USDC+ stablecoins to receive (slippage protection)
151
+ * @returns Promise resolving to an array containing a single TransactionInstruction
152
+ */
153
+ mint(signer, amount, minimumReceived) {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ const accounts = yield this.constructAccounts(signer);
156
+ const ix = (0, reflect_main_1.createMintDriftS1Instruction)(accounts, {
157
+ minUsdcAmount: minimumReceived,
158
+ usdcAmount: amount
159
+ }, reflect_main_1.PROGRAM_ID);
160
+ return [ix];
161
+ });
162
+ }
163
+ /**
164
+ * Creates a redeem instruction for the USDC stablecoin.
165
+ * Currently returns a placeholder instruction - implementation needed.
166
+ *
167
+ * @returns Promise resolving to an array containing a single TransactionInstruction
168
+ */
169
+ redeem(signer, amount, minimumReceived) {
170
+ return __awaiter(this, void 0, void 0, function* () {
171
+ const accounts = yield this.constructAccounts(signer);
172
+ const ix = (0, reflect_main_1.createRedeemDriftS1Instruction)(accounts, {
173
+ canChill: false,
174
+ minLstRedeem: minimumReceived,
175
+ rusdBurnAmount: amount
176
+ }, reflect_main_1.PROGRAM_ID);
177
+ return [ix];
178
+ });
179
+ }
180
+ /**
181
+ * Creates a rebalance instruction for the USDC+ stablecoin.
182
+ * Currently returns an empty instruction, as the rebalance is unnecessary.
183
+ *
184
+ * @returns Promise resolving to an array containing a single, empty TransactionInstruction.
185
+ */
186
+ rebalance() {
187
+ return __awaiter(this, void 0, void 0, function* () {
188
+ const ix = new web3_js_1.TransactionInstruction({
189
+ programId: web3_js_1.Keypair.generate().publicKey,
190
+ data: Buffer.from(""),
191
+ keys: []
192
+ });
193
+ return [ix];
194
+ });
195
+ }
196
+ }
197
+ exports.UsdcPlusStablecoin = UsdcPlusStablecoin;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ // import {Stablecoin} from "../classes/Stablecoin";
3
+ // import {PdaClient} from "../classes/PdaClient";
4
+ // import {
5
+ // createInitDriftControllerS2Instruction,
6
+ // createMintDriftS2Instruction,
7
+ // createRebalanceJlpInstruction,
8
+ // createRedeemDriftS2Instruction,
9
+ // createRedeem2DriftS2Instruction,
10
+ // DriftJlpController,
11
+ // MintDriftS2InstructionAccounts, PerpHedge,
12
+ // PROGRAM_ID
13
+ // } from "../generated/reflect_main";
14
+ // import {
15
+ // AccountMeta,
16
+ // Connection,
17
+ // Keypair,
18
+ // PublicKey,
19
+ // SystemProgram,
20
+ // Transaction,
21
+ // TransactionInstruction
22
+ // } from "@solana/web3.js";
23
+ // import {JLP_MINT, DRIFT_PROGRAM_ID, JUPITER_PROGRAM_ID, USDC_MINT} from "../constants";
24
+ // import {getAccount, getAssociatedTokenAddressSync, getMint, TOKEN_PROGRAM_ID} from "@solana/spl-token";
25
+ // import {
26
+ // getDriftSignerPublicKey,
27
+ // getDriftStateAccountPublicKey,
28
+ // getPerpMarketPublicKeySync,
29
+ // getSpotMarketPublicKey,
30
+ // getSpotMarketPublicKeySync, getSpotMarketVaultPublicKey,
31
+ // getUserAccountPublicKeySync,
32
+ // getUserStatsAccountPublicKey,
33
+ // PerpMarkets,
34
+ // SpotMarkets,
35
+ // MarginCategory,
36
+ // getTokenAmount,
37
+ // SpotBalanceType
38
+ // } from "@drift-labs/sdk";
39
+ // import BN, { min } from "bn.js";
40
+ // import {AnchorProvider, Program} from "@coral-xyz/anchor";
41
+ // import {type Perpetuals, IDL} from "../idl/perpetuals";
42
+ // import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet";
43
+ // import { JlpPoolInfo, JlpComponent } from "../types";
44
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,3 +1,3 @@
1
- export * from "./JlpStablecoin";
1
+ export * from "./UsdjStablecoin";
2
2
  export * from "./LstStablecoin";
3
- export * from "./UsdcStablecoin";
3
+ export * from "./UsdcPlusStablecoin";
@@ -14,6 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./JlpStablecoin"), exports);
17
+ __exportStar(require("./UsdjStablecoin"), exports);
18
18
  __exportStar(require("./LstStablecoin"), exports);
19
- __exportStar(require("./UsdcStablecoin"), exports);
19
+ __exportStar(require("./UsdcPlusStablecoin"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reflectmoney/stable.ts",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "author": "stablecoinjesus @ Palindrome Engineering",
6
6
  "repository": {