@exponent-labs/exponent-sdk 0.9.0 → 0.9.1
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/build/client/vaults/index.d.ts +2 -0
- package/build/client/vaults/index.js +2 -0
- package/build/client/vaults/index.js.map +1 -1
- package/build/client/vaults/types/index.d.ts +2 -0
- package/build/client/vaults/types/index.js +2 -0
- package/build/client/vaults/types/index.js.map +1 -1
- package/build/client/vaults/types/kaminoFarmEntry.d.ts +15 -0
- package/build/client/vaults/types/kaminoFarmEntry.js +17 -0
- package/build/client/vaults/types/kaminoFarmEntry.js.map +1 -0
- package/build/client/vaults/types/kaminoObligationEntry.d.ts +24 -7
- package/build/client/vaults/types/kaminoObligationEntry.js +2 -1
- package/build/client/vaults/types/kaminoObligationEntry.js.map +1 -1
- package/build/client/vaults/types/obligationType.d.ts +1 -1
- package/build/client/vaults/types/positionUpdate.d.ts +9 -0
- package/build/client/vaults/types/positionUpdate.js +23 -0
- package/build/client/vaults/types/positionUpdate.js.map +1 -1
- package/build/client/vaults/types/proposalAction.d.ts +54 -54
- package/build/client/vaults/types/proposalAction.js +0 -3
- package/build/client/vaults/types/proposalAction.js.map +1 -1
- package/build/client/vaults/types/reserveFarmMapping.d.ts +19 -0
- package/build/client/vaults/types/reserveFarmMapping.js +18 -0
- package/build/client/vaults/types/reserveFarmMapping.js.map +1 -0
- package/build/client/vaults/types/strategyPosition.d.ts +6 -1
- package/build/client/vaults/types/strategyPosition.js +5 -0
- package/build/client/vaults/types/strategyPosition.js.map +1 -1
- package/build/exponentVaults/aumCalculator.d.ts +25 -4
- package/build/exponentVaults/aumCalculator.js +236 -15
- package/build/exponentVaults/aumCalculator.js.map +1 -1
- package/build/exponentVaults/fetcher.d.ts +52 -0
- package/build/exponentVaults/fetcher.js +199 -0
- package/build/exponentVaults/fetcher.js.map +1 -0
- package/build/exponentVaults/index.d.ts +10 -9
- package/build/exponentVaults/index.js +25 -8
- package/build/exponentVaults/index.js.map +1 -1
- package/build/exponentVaults/kamino-farms.d.ts +144 -0
- package/build/exponentVaults/kamino-farms.js +396 -0
- package/build/exponentVaults/kamino-farms.js.map +1 -0
- package/build/exponentVaults/loopscale/client.d.ts +240 -0
- package/build/exponentVaults/loopscale/client.js +590 -0
- package/build/exponentVaults/loopscale/client.js.map +1 -0
- package/build/exponentVaults/loopscale/client.test.d.ts +1 -0
- package/build/exponentVaults/loopscale/client.test.js +183 -0
- package/build/exponentVaults/loopscale/client.test.js.map +1 -0
- package/build/exponentVaults/loopscale/helpers.d.ts +29 -0
- package/build/exponentVaults/loopscale/helpers.js +119 -0
- package/build/exponentVaults/loopscale/helpers.js.map +1 -0
- package/build/exponentVaults/loopscale/index.d.ts +3 -0
- package/build/exponentVaults/loopscale/index.js +12 -0
- package/build/exponentVaults/loopscale/index.js.map +1 -0
- package/build/exponentVaults/loopscale/prepared-transactions.d.ts +13 -0
- package/build/exponentVaults/loopscale/prepared-transactions.js +271 -0
- package/build/exponentVaults/loopscale/prepared-transactions.js.map +1 -0
- package/build/exponentVaults/loopscale/prepared-transactions.test.d.ts +1 -0
- package/build/exponentVaults/loopscale/prepared-transactions.test.js +400 -0
- package/build/exponentVaults/loopscale/prepared-transactions.test.js.map +1 -0
- package/build/exponentVaults/loopscale/prepared-types.d.ts +62 -0
- package/build/exponentVaults/loopscale/prepared-types.js +3 -0
- package/build/exponentVaults/loopscale/prepared-types.js.map +1 -0
- package/build/exponentVaults/loopscale/response-plan.d.ts +69 -0
- package/build/exponentVaults/loopscale/response-plan.js +141 -0
- package/build/exponentVaults/loopscale/response-plan.js.map +1 -0
- package/build/exponentVaults/loopscale/response-plan.test.d.ts +1 -0
- package/build/exponentVaults/loopscale/response-plan.test.js +139 -0
- package/build/exponentVaults/loopscale/response-plan.test.js.map +1 -0
- package/build/exponentVaults/loopscale/send-plan.d.ts +75 -0
- package/build/exponentVaults/loopscale/send-plan.js +235 -0
- package/build/exponentVaults/loopscale/send-plan.js.map +1 -0
- package/build/exponentVaults/loopscale/types.d.ts +443 -0
- package/build/exponentVaults/loopscale/types.js +3 -0
- package/build/exponentVaults/loopscale/types.js.map +1 -0
- package/build/exponentVaults/loopscale-client.d.ts +113 -524
- package/build/exponentVaults/loopscale-client.js +296 -539
- package/build/exponentVaults/loopscale-client.js.map +1 -1
- package/build/exponentVaults/loopscale-client.test.d.ts +1 -0
- package/build/exponentVaults/loopscale-client.test.js +162 -0
- package/build/exponentVaults/loopscale-client.test.js.map +1 -0
- package/build/exponentVaults/loopscale-client.types.d.ts +425 -0
- package/build/exponentVaults/loopscale-client.types.js +3 -0
- package/build/exponentVaults/loopscale-client.types.js.map +1 -0
- package/build/exponentVaults/loopscale-execution.d.ts +125 -0
- package/build/exponentVaults/loopscale-execution.js +341 -0
- package/build/exponentVaults/loopscale-execution.js.map +1 -0
- package/build/exponentVaults/loopscale-execution.test.d.ts +1 -0
- package/build/exponentVaults/loopscale-execution.test.js +139 -0
- package/build/exponentVaults/loopscale-execution.test.js.map +1 -0
- package/build/exponentVaults/loopscale-vault.d.ts +115 -0
- package/build/exponentVaults/loopscale-vault.js +275 -0
- package/build/exponentVaults/loopscale-vault.js.map +1 -0
- package/build/exponentVaults/loopscale-vault.test.d.ts +1 -0
- package/build/exponentVaults/loopscale-vault.test.js +102 -0
- package/build/exponentVaults/loopscale-vault.test.js.map +1 -0
- package/build/exponentVaults/policyBuilders.d.ts +62 -0
- package/build/exponentVaults/policyBuilders.js +119 -2
- package/build/exponentVaults/policyBuilders.js.map +1 -1
- package/build/exponentVaults/pricePathResolver.d.ts +45 -0
- package/build/exponentVaults/pricePathResolver.js +198 -0
- package/build/exponentVaults/pricePathResolver.js.map +1 -0
- package/build/exponentVaults/pricePathResolver.test.d.ts +1 -0
- package/build/exponentVaults/pricePathResolver.test.js +369 -0
- package/build/exponentVaults/pricePathResolver.test.js.map +1 -0
- package/build/exponentVaults/syncTransaction.js +4 -1
- package/build/exponentVaults/syncTransaction.js.map +1 -1
- package/build/exponentVaults/titan-quote.js +170 -36
- package/build/exponentVaults/titan-quote.js.map +1 -1
- package/build/exponentVaults/vault-instruction-types.d.ts +363 -0
- package/build/exponentVaults/vault-instruction-types.js +128 -0
- package/build/exponentVaults/vault-instruction-types.js.map +1 -0
- package/build/exponentVaults/vault-interaction.d.ts +156 -313
- package/build/exponentVaults/vault-interaction.js +1581 -353
- package/build/exponentVaults/vault-interaction.js.map +1 -1
- package/build/exponentVaults/vault.d.ts +51 -2
- package/build/exponentVaults/vault.js +324 -48
- package/build/exponentVaults/vault.js.map +1 -1
- package/build/exponentVaults/vaultTransactionBuilder.d.ts +100 -134
- package/build/exponentVaults/vaultTransactionBuilder.js +359 -266
- package/build/exponentVaults/vaultTransactionBuilder.js.map +1 -1
- package/build/exponentVaults/vaultTransactionBuilder.test.d.ts +1 -0
- package/build/exponentVaults/vaultTransactionBuilder.test.js +214 -0
- package/build/exponentVaults/vaultTransactionBuilder.test.js.map +1 -0
- package/build/marketThree.d.ts +6 -2
- package/build/marketThree.js +10 -8
- package/build/marketThree.js.map +1 -1
- package/package.json +32 -32
- package/src/client/vaults/index.ts +2 -0
- package/src/client/vaults/types/index.ts +2 -0
- package/src/client/vaults/types/kaminoFarmEntry.ts +32 -0
- package/src/client/vaults/types/kaminoObligationEntry.ts +6 -3
- package/src/client/vaults/types/positionUpdate.ts +62 -0
- package/src/client/vaults/types/proposalAction.ts +0 -3
- package/src/client/vaults/types/reserveFarmMapping.ts +35 -0
- package/src/client/vaults/types/strategyPosition.ts +18 -1
- package/src/exponentVaults/aumCalculator.ts +353 -16
- package/src/exponentVaults/fetcher.ts +257 -0
- package/src/exponentVaults/index.ts +64 -40
- package/src/exponentVaults/kamino-farms.ts +538 -0
- package/src/exponentVaults/loopscale/client.ts +808 -0
- package/src/exponentVaults/loopscale/helpers.ts +172 -0
- package/src/exponentVaults/loopscale/index.ts +57 -0
- package/src/exponentVaults/loopscale/prepared-transactions.ts +435 -0
- package/src/exponentVaults/loopscale/prepared-types.ts +73 -0
- package/src/exponentVaults/loopscale/types.ts +466 -0
- package/src/exponentVaults/policyBuilders.ts +170 -0
- package/src/exponentVaults/pricePathResolver.test.ts +466 -0
- package/src/exponentVaults/pricePathResolver.ts +273 -0
- package/src/exponentVaults/syncTransaction.ts +6 -1
- package/src/exponentVaults/titan-quote.ts +231 -45
- package/src/exponentVaults/vault-instruction-types.ts +493 -0
- package/src/exponentVaults/vault-interaction.ts +2227 -636
- package/src/exponentVaults/vault.ts +474 -63
- package/src/exponentVaults/vaultTransactionBuilder.test.ts +256 -0
- package/src/exponentVaults/vaultTransactionBuilder.ts +555 -413
- package/src/marketThree.ts +14 -6
- package/src/exponentVaults/loopscale-client.ts +0 -1373
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const globals_1 = require("@jest/globals");
|
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
5
|
+
const policyBuilders_1 = require("../policyBuilders");
|
|
6
|
+
const policyMatcher_1 = require("../policyMatcher");
|
|
7
|
+
const syncTransaction_1 = require("../syncTransaction");
|
|
8
|
+
const vault_interaction_1 = require("../vault-interaction");
|
|
9
|
+
const client_1 = require("./client");
|
|
10
|
+
globals_1.jest.mock("../policyMatcher", () => ({
|
|
11
|
+
resolveConstraintIndices: globals_1.jest.fn(),
|
|
12
|
+
resolveHookAccounts: globals_1.jest.fn(),
|
|
13
|
+
resolvePolicyMatchForVault: globals_1.jest.fn(),
|
|
14
|
+
}));
|
|
15
|
+
globals_1.jest.mock("../syncTransaction", () => {
|
|
16
|
+
const actual = globals_1.jest.requireActual("../syncTransaction");
|
|
17
|
+
return {
|
|
18
|
+
...actual,
|
|
19
|
+
wrapInstructionsInSyncTransaction: globals_1.jest.fn(),
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
globals_1.jest.mock("../vault-interaction", () => {
|
|
23
|
+
const actual = globals_1.jest.requireActual("../vault-interaction");
|
|
24
|
+
return {
|
|
25
|
+
...actual,
|
|
26
|
+
createVaultSyncTransaction: globals_1.jest.fn(),
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
function buildLoopscaleInstruction(name, keys) {
|
|
30
|
+
return new web3_js_1.TransactionInstruction({
|
|
31
|
+
programId: policyBuilders_1.LOOPSCALE_PROGRAM_ID,
|
|
32
|
+
keys: keys.map((key) => ({
|
|
33
|
+
pubkey: key.pubkey,
|
|
34
|
+
isSigner: key.isSigner ?? false,
|
|
35
|
+
isWritable: key.isWritable ?? false,
|
|
36
|
+
})),
|
|
37
|
+
data: Buffer.concat([
|
|
38
|
+
Buffer.from(policyBuilders_1.LOOPSCALE_DISCRIMINATORS[name]),
|
|
39
|
+
Buffer.alloc(8),
|
|
40
|
+
]),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function createLookupTableAccount(addresses) {
|
|
44
|
+
return new web3_js_1.AddressLookupTableAccount({
|
|
45
|
+
key: web3_js_1.Keypair.generate().publicKey,
|
|
46
|
+
state: {
|
|
47
|
+
deactivationSlot: 0n,
|
|
48
|
+
lastExtendedSlot: 0,
|
|
49
|
+
lastExtendedSlotStartIndex: 0,
|
|
50
|
+
authority: web3_js_1.Keypair.generate().publicKey,
|
|
51
|
+
addresses,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function encodeTransactionResponse(instructions, payer, addressLookupTableAccounts = []) {
|
|
56
|
+
const message = new web3_js_1.TransactionMessage({
|
|
57
|
+
payerKey: payer,
|
|
58
|
+
recentBlockhash: "11111111111111111111111111111111",
|
|
59
|
+
instructions,
|
|
60
|
+
}).compileToV0Message(addressLookupTableAccounts);
|
|
61
|
+
const transaction = new web3_js_1.VersionedTransaction(message);
|
|
62
|
+
return {
|
|
63
|
+
message: Buffer.from(transaction.message.serialize()).toString("base64"),
|
|
64
|
+
signatures: message.staticAccountKeys
|
|
65
|
+
.slice(0, message.header.numRequiredSignatures)
|
|
66
|
+
.map((publicKey) => ({
|
|
67
|
+
publicKey: publicKey.toBase58(),
|
|
68
|
+
signature: Buffer.alloc(64).toString("base64"),
|
|
69
|
+
})),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
function createMockConnection() {
|
|
73
|
+
return {
|
|
74
|
+
getAddressLookupTable: globals_1.jest.fn(),
|
|
75
|
+
getLatestBlockhash: globals_1.jest.fn(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
(0, globals_1.describe)("LoopscaleClient prepared vault transactions", () => {
|
|
79
|
+
const manager = web3_js_1.Keypair.generate();
|
|
80
|
+
const vaultPda = web3_js_1.Keypair.generate().publicKey;
|
|
81
|
+
const vaultAddress = web3_js_1.Keypair.generate().publicKey;
|
|
82
|
+
const connection = createMockConnection();
|
|
83
|
+
const mockCreateVaultSyncTransaction = globals_1.jest.mocked(vault_interaction_1.createVaultSyncTransaction);
|
|
84
|
+
const mockResolvePolicyMatchForVault = globals_1.jest.mocked(policyMatcher_1.resolvePolicyMatchForVault);
|
|
85
|
+
const mockResolveConstraintIndices = globals_1.jest.mocked(policyMatcher_1.resolveConstraintIndices);
|
|
86
|
+
const mockResolveHookAccounts = globals_1.jest.mocked(policyMatcher_1.resolveHookAccounts);
|
|
87
|
+
const mockWrapInstructionsInSyncTransaction = globals_1.jest.mocked(syncTransaction_1.wrapInstructionsInSyncTransaction);
|
|
88
|
+
(0, globals_1.beforeEach)(() => {
|
|
89
|
+
globals_1.jest.resetAllMocks();
|
|
90
|
+
connection.getLatestBlockhash.mockResolvedValue({ blockhash: "11111111111111111111111111111111" });
|
|
91
|
+
connection.getAddressLookupTable.mockResolvedValue({ value: null });
|
|
92
|
+
mockResolvePolicyMatchForVault.mockResolvedValue({
|
|
93
|
+
policyPda: web3_js_1.Keypair.generate().publicKey,
|
|
94
|
+
constraintIndices: [],
|
|
95
|
+
});
|
|
96
|
+
mockResolveConstraintIndices.mockResolvedValue([]);
|
|
97
|
+
mockResolveHookAccounts.mockResolvedValue({
|
|
98
|
+
leadingAccounts: [],
|
|
99
|
+
preHookAccounts: [],
|
|
100
|
+
postHookAccounts: [],
|
|
101
|
+
});
|
|
102
|
+
mockWrapInstructionsInSyncTransaction.mockReturnValue(new web3_js_1.TransactionInstruction({
|
|
103
|
+
programId: web3_js_1.Keypair.generate().publicKey,
|
|
104
|
+
keys: [{ pubkey: manager.publicKey, isSigner: true, isWritable: true }],
|
|
105
|
+
data: Buffer.from([99]),
|
|
106
|
+
}));
|
|
107
|
+
});
|
|
108
|
+
(0, globals_1.it)("prepares wrapped strategy responses while preserving Loopscale compute prefixes", async () => {
|
|
109
|
+
const computeInstruction = web3_js_1.ComputeBudgetProgram.setComputeUnitLimit({ units: 333_333 });
|
|
110
|
+
const loopscaleInstruction = buildLoopscaleInstruction("depositStrategy", [
|
|
111
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
112
|
+
{ pubkey: vaultPda, isWritable: true },
|
|
113
|
+
]);
|
|
114
|
+
const syncPreInstruction = web3_js_1.SystemProgram.transfer({
|
|
115
|
+
fromPubkey: manager.publicKey,
|
|
116
|
+
toPubkey: web3_js_1.Keypair.generate().publicKey,
|
|
117
|
+
lamports: 2n,
|
|
118
|
+
});
|
|
119
|
+
const syncInstruction = new web3_js_1.TransactionInstruction({
|
|
120
|
+
programId: web3_js_1.Keypair.generate().publicKey,
|
|
121
|
+
keys: [{ pubkey: manager.publicKey, isSigner: true, isWritable: true }],
|
|
122
|
+
data: Buffer.from([1]),
|
|
123
|
+
});
|
|
124
|
+
const syncPostInstruction = new web3_js_1.TransactionInstruction({
|
|
125
|
+
programId: web3_js_1.Keypair.generate().publicKey,
|
|
126
|
+
keys: [{ pubkey: manager.publicKey, isSigner: false, isWritable: false }],
|
|
127
|
+
data: Buffer.from([2]),
|
|
128
|
+
});
|
|
129
|
+
mockCreateVaultSyncTransaction.mockResolvedValue({
|
|
130
|
+
setupInstructions: [],
|
|
131
|
+
preInstructions: [syncPreInstruction],
|
|
132
|
+
instruction: syncInstruction,
|
|
133
|
+
postInstructions: [syncPostInstruction],
|
|
134
|
+
signers: [],
|
|
135
|
+
addressLookupTableAddresses: [],
|
|
136
|
+
});
|
|
137
|
+
const client = new client_1.LoopscaleClient({ connection: connection, userWallet: vaultPda });
|
|
138
|
+
const preparedTransactions = await client.prepareVaultTransactions({
|
|
139
|
+
response: encodeTransactionResponse([computeInstruction, loopscaleInstruction], manager.publicKey),
|
|
140
|
+
context: {
|
|
141
|
+
connection: connection,
|
|
142
|
+
signer: manager.publicKey,
|
|
143
|
+
vaultPda,
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
(0, globals_1.expect)(preparedTransactions).toHaveLength(1);
|
|
147
|
+
(0, globals_1.expect)(preparedTransactions[0]).toEqual({
|
|
148
|
+
setupInstructions: [],
|
|
149
|
+
instructions: [
|
|
150
|
+
computeInstruction,
|
|
151
|
+
syncPreInstruction,
|
|
152
|
+
syncInstruction,
|
|
153
|
+
syncPostInstruction,
|
|
154
|
+
],
|
|
155
|
+
signers: [],
|
|
156
|
+
addressLookupTableAddresses: [],
|
|
157
|
+
requiresLoopscaleCoSign: true,
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
(0, globals_1.it)("prepares standalone raw transactions when no Loopscale instruction exists", async () => {
|
|
161
|
+
const lookedUpAddress = web3_js_1.Keypair.generate().publicKey;
|
|
162
|
+
const lookupTable = createLookupTableAccount([lookedUpAddress]);
|
|
163
|
+
const standaloneInstruction = new web3_js_1.TransactionInstruction({
|
|
164
|
+
programId: web3_js_1.SystemProgram.programId,
|
|
165
|
+
keys: [
|
|
166
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
167
|
+
{ pubkey: lookedUpAddress, isSigner: false, isWritable: true },
|
|
168
|
+
],
|
|
169
|
+
data: Buffer.from([9]),
|
|
170
|
+
});
|
|
171
|
+
connection.getAddressLookupTable.mockImplementation(async (address) => ({
|
|
172
|
+
value: address.equals(lookupTable.key) ? lookupTable : null,
|
|
173
|
+
}));
|
|
174
|
+
const client = new client_1.LoopscaleClient({ connection: connection, userWallet: vaultPda });
|
|
175
|
+
const [prepared] = await client.prepareVaultTransactions({
|
|
176
|
+
response: encodeTransactionResponse([standaloneInstruction], manager.publicKey, [lookupTable]),
|
|
177
|
+
context: {
|
|
178
|
+
connection: connection,
|
|
179
|
+
signer: manager.publicKey,
|
|
180
|
+
vaultPda,
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
(0, globals_1.expect)(prepared).toEqual({
|
|
184
|
+
setupInstructions: [],
|
|
185
|
+
instructions: [standaloneInstruction],
|
|
186
|
+
signers: [],
|
|
187
|
+
addressLookupTableAddresses: [lookupTable.key],
|
|
188
|
+
requiresLoopscaleCoSign: false,
|
|
189
|
+
});
|
|
190
|
+
(0, globals_1.expect)(mockCreateVaultSyncTransaction).not.toHaveBeenCalled();
|
|
191
|
+
});
|
|
192
|
+
(0, globals_1.it)("rejects interleaved non-Loopscale instructions inside the sync segment", async () => {
|
|
193
|
+
const firstInstruction = buildLoopscaleInstruction("createLoan", [
|
|
194
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
195
|
+
{ pubkey: vaultPda, isWritable: true },
|
|
196
|
+
]);
|
|
197
|
+
const interleavedInstruction = web3_js_1.SystemProgram.transfer({
|
|
198
|
+
fromPubkey: manager.publicKey,
|
|
199
|
+
toPubkey: web3_js_1.Keypair.generate().publicKey,
|
|
200
|
+
lamports: 1n,
|
|
201
|
+
});
|
|
202
|
+
const thirdInstruction = buildLoopscaleInstruction("borrowPrincipal", [
|
|
203
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
204
|
+
{ pubkey: vaultPda, isWritable: true },
|
|
205
|
+
]);
|
|
206
|
+
const client = new client_1.LoopscaleClient({ connection: connection, userWallet: vaultPda });
|
|
207
|
+
await (0, globals_1.expect)(client.prepareVaultTransactions({
|
|
208
|
+
response: encodeTransactionResponse([firstInstruction, interleavedInstruction, thirdInstruction], manager.publicKey),
|
|
209
|
+
context: {
|
|
210
|
+
connection: connection,
|
|
211
|
+
signer: manager.publicKey,
|
|
212
|
+
vaultPda,
|
|
213
|
+
},
|
|
214
|
+
})).rejects.toThrow("interleaved");
|
|
215
|
+
});
|
|
216
|
+
(0, globals_1.it)("supports cleanup responses and drops Loopscale-returned ALT follow-up instructions", async () => {
|
|
217
|
+
const cleanupInstruction = buildLoopscaleInstruction("closeLoan", [
|
|
218
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
219
|
+
{ pubkey: vaultPda, isWritable: true },
|
|
220
|
+
]);
|
|
221
|
+
const altInstruction = new web3_js_1.TransactionInstruction({
|
|
222
|
+
programId: web3_js_1.AddressLookupTableProgram.programId,
|
|
223
|
+
keys: [
|
|
224
|
+
{ pubkey: vaultPda, isSigner: true, isWritable: true },
|
|
225
|
+
{ pubkey: web3_js_1.Keypair.generate().publicKey, isSigner: false, isWritable: true },
|
|
226
|
+
],
|
|
227
|
+
data: Buffer.from([7]),
|
|
228
|
+
});
|
|
229
|
+
const wrappedInstruction = new web3_js_1.TransactionInstruction({
|
|
230
|
+
programId: web3_js_1.Keypair.generate().publicKey,
|
|
231
|
+
keys: [
|
|
232
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
233
|
+
],
|
|
234
|
+
data: Buffer.from([5]),
|
|
235
|
+
});
|
|
236
|
+
mockCreateVaultSyncTransaction.mockResolvedValue({
|
|
237
|
+
setupInstructions: [],
|
|
238
|
+
preInstructions: [],
|
|
239
|
+
instruction: wrappedInstruction,
|
|
240
|
+
postInstructions: [],
|
|
241
|
+
signers: [],
|
|
242
|
+
addressLookupTableAddresses: [],
|
|
243
|
+
});
|
|
244
|
+
const client = new client_1.LoopscaleClient({ connection: connection, userWallet: vaultPda });
|
|
245
|
+
const preparedTransactions = await client.prepareVaultTransactions({
|
|
246
|
+
response: {
|
|
247
|
+
transactions: [encodeTransactionResponse([cleanupInstruction, altInstruction], manager.publicKey)],
|
|
248
|
+
},
|
|
249
|
+
context: {
|
|
250
|
+
connection: connection,
|
|
251
|
+
signer: manager.publicKey,
|
|
252
|
+
vaultPda,
|
|
253
|
+
vaultAddress,
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
(0, globals_1.expect)(preparedTransactions).toHaveLength(1);
|
|
257
|
+
(0, globals_1.expect)(preparedTransactions[0]).toEqual({
|
|
258
|
+
setupInstructions: [],
|
|
259
|
+
instructions: [wrappedInstruction],
|
|
260
|
+
signers: [],
|
|
261
|
+
addressLookupTableAddresses: [],
|
|
262
|
+
requiresLoopscaleCoSign: true,
|
|
263
|
+
});
|
|
264
|
+
(0, globals_1.expect)(mockResolvePolicyMatchForVault).not.toHaveBeenCalled();
|
|
265
|
+
(0, globals_1.expect)(mockWrapInstructionsInSyncTransaction).not.toHaveBeenCalled();
|
|
266
|
+
});
|
|
267
|
+
(0, globals_1.it)("keeps permissionless top-level instructions as separate standalone transactions in order", async () => {
|
|
268
|
+
const loopscaleInstruction = buildLoopscaleInstruction("withdrawStrategy", [
|
|
269
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
270
|
+
{ pubkey: vaultPda, isWritable: true },
|
|
271
|
+
]);
|
|
272
|
+
const standaloneInstruction = web3_js_1.SystemProgram.transfer({
|
|
273
|
+
fromPubkey: manager.publicKey,
|
|
274
|
+
toPubkey: web3_js_1.Keypair.generate().publicKey,
|
|
275
|
+
lamports: 1n,
|
|
276
|
+
});
|
|
277
|
+
const wrappedInstruction = new web3_js_1.TransactionInstruction({
|
|
278
|
+
programId: web3_js_1.Keypair.generate().publicKey,
|
|
279
|
+
keys: [{ pubkey: manager.publicKey, isSigner: true, isWritable: true }],
|
|
280
|
+
data: Buffer.from([5]),
|
|
281
|
+
});
|
|
282
|
+
mockCreateVaultSyncTransaction.mockResolvedValue({
|
|
283
|
+
setupInstructions: [],
|
|
284
|
+
preInstructions: [],
|
|
285
|
+
instruction: wrappedInstruction,
|
|
286
|
+
postInstructions: [],
|
|
287
|
+
signers: [],
|
|
288
|
+
addressLookupTableAddresses: [],
|
|
289
|
+
});
|
|
290
|
+
const client = new client_1.LoopscaleClient({ connection: connection, userWallet: vaultPda });
|
|
291
|
+
const preparedTransactions = await client.prepareVaultTransactions({
|
|
292
|
+
response: encodeTransactionResponse([loopscaleInstruction, standaloneInstruction], manager.publicKey),
|
|
293
|
+
context: {
|
|
294
|
+
connection: connection,
|
|
295
|
+
signer: manager.publicKey,
|
|
296
|
+
vaultPda,
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
(0, globals_1.expect)(preparedTransactions).toHaveLength(2);
|
|
300
|
+
(0, globals_1.expect)(preparedTransactions[0]?.requiresLoopscaleCoSign).toBe(true);
|
|
301
|
+
(0, globals_1.expect)(preparedTransactions[1]).toEqual({
|
|
302
|
+
setupInstructions: [],
|
|
303
|
+
instructions: [standaloneInstruction],
|
|
304
|
+
signers: [],
|
|
305
|
+
addressLookupTableAddresses: [],
|
|
306
|
+
requiresLoopscaleCoSign: false,
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
(0, globals_1.it)("builds setup and main transactions in send order", async () => {
|
|
310
|
+
const setupInstruction = new web3_js_1.TransactionInstruction({
|
|
311
|
+
programId: web3_js_1.Keypair.generate().publicKey,
|
|
312
|
+
keys: [{ pubkey: manager.publicKey, isSigner: true, isWritable: true }],
|
|
313
|
+
data: Buffer.from([1]),
|
|
314
|
+
});
|
|
315
|
+
const mainInstruction = new web3_js_1.TransactionInstruction({
|
|
316
|
+
programId: web3_js_1.Keypair.generate().publicKey,
|
|
317
|
+
keys: [{ pubkey: manager.publicKey, isSigner: true, isWritable: true }],
|
|
318
|
+
data: Buffer.from([2]),
|
|
319
|
+
});
|
|
320
|
+
mockCreateVaultSyncTransaction.mockResolvedValue({
|
|
321
|
+
setupInstructions: [setupInstruction],
|
|
322
|
+
preInstructions: [],
|
|
323
|
+
instruction: mainInstruction,
|
|
324
|
+
postInstructions: [],
|
|
325
|
+
signers: [],
|
|
326
|
+
addressLookupTableAddresses: [],
|
|
327
|
+
});
|
|
328
|
+
const client = new client_1.LoopscaleClient({ connection: connection, userWallet: vaultPda });
|
|
329
|
+
const builtTransactions = await client.buildVaultTransactions({
|
|
330
|
+
response: encodeTransactionResponse([
|
|
331
|
+
buildLoopscaleInstruction("depositCollateral", [
|
|
332
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
333
|
+
{ pubkey: vaultPda, isWritable: true },
|
|
334
|
+
]),
|
|
335
|
+
], manager.publicKey),
|
|
336
|
+
context: {
|
|
337
|
+
connection: connection,
|
|
338
|
+
signer: manager.publicKey,
|
|
339
|
+
signers: [manager],
|
|
340
|
+
vaultPda,
|
|
341
|
+
},
|
|
342
|
+
});
|
|
343
|
+
(0, globals_1.expect)(builtTransactions).toHaveLength(2);
|
|
344
|
+
(0, globals_1.expect)(builtTransactions.map((entry) => entry.requiresLoopscaleCoSign)).toEqual([false, true]);
|
|
345
|
+
const setupInstructions = web3_js_1.TransactionMessage.decompile(builtTransactions[0].transaction.message).instructions;
|
|
346
|
+
const mainInstructions = web3_js_1.TransactionMessage.decompile(builtTransactions[1].transaction.message).instructions;
|
|
347
|
+
(0, globals_1.expect)(setupInstructions).toEqual([setupInstruction]);
|
|
348
|
+
(0, globals_1.expect)(mainInstructions).toEqual([mainInstruction]);
|
|
349
|
+
});
|
|
350
|
+
(0, globals_1.it)("signs built transactions with caller and extra signers", async () => {
|
|
351
|
+
const extraSigner = web3_js_1.Keypair.generate();
|
|
352
|
+
const mainInstruction = new web3_js_1.TransactionInstruction({
|
|
353
|
+
programId: web3_js_1.Keypair.generate().publicKey,
|
|
354
|
+
keys: [
|
|
355
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
356
|
+
{ pubkey: extraSigner.publicKey, isSigner: true, isWritable: false },
|
|
357
|
+
],
|
|
358
|
+
data: Buffer.from([3]),
|
|
359
|
+
});
|
|
360
|
+
mockCreateVaultSyncTransaction.mockResolvedValue({
|
|
361
|
+
setupInstructions: [],
|
|
362
|
+
preInstructions: [],
|
|
363
|
+
instruction: mainInstruction,
|
|
364
|
+
postInstructions: [],
|
|
365
|
+
signers: [extraSigner],
|
|
366
|
+
addressLookupTableAddresses: [],
|
|
367
|
+
});
|
|
368
|
+
const client = new client_1.LoopscaleClient({ connection: connection, userWallet: vaultPda });
|
|
369
|
+
const [builtTransaction] = await client.buildVaultTransactions({
|
|
370
|
+
response: encodeTransactionResponse([
|
|
371
|
+
buildLoopscaleInstruction("repayPrincipal", [
|
|
372
|
+
{ pubkey: manager.publicKey, isSigner: true, isWritable: true },
|
|
373
|
+
{ pubkey: vaultPda, isWritable: true },
|
|
374
|
+
]),
|
|
375
|
+
], manager.publicKey),
|
|
376
|
+
context: {
|
|
377
|
+
connection: connection,
|
|
378
|
+
signer: manager.publicKey,
|
|
379
|
+
signers: [manager],
|
|
380
|
+
vaultPda,
|
|
381
|
+
},
|
|
382
|
+
});
|
|
383
|
+
(0, globals_1.expect)(builtTransaction?.requiresLoopscaleCoSign).toBe(true);
|
|
384
|
+
(0, globals_1.expect)(builtTransaction?.transaction.signatures.every((signature) => signature.some((byte) => byte !== 0))).toBe(true);
|
|
385
|
+
});
|
|
386
|
+
(0, globals_1.it)("requires the first signer to match the fee payer", async () => {
|
|
387
|
+
const otherSigner = web3_js_1.Keypair.generate();
|
|
388
|
+
const client = new client_1.LoopscaleClient({ connection: connection, userWallet: vaultPda });
|
|
389
|
+
await (0, globals_1.expect)(client.buildVaultTransactions({
|
|
390
|
+
response: encodeTransactionResponse([], manager.publicKey),
|
|
391
|
+
context: {
|
|
392
|
+
connection: connection,
|
|
393
|
+
signer: manager.publicKey,
|
|
394
|
+
signers: [otherSigner],
|
|
395
|
+
vaultPda,
|
|
396
|
+
},
|
|
397
|
+
})).rejects.toThrow("signers[0]");
|
|
398
|
+
});
|
|
399
|
+
});
|
|
400
|
+
//# sourceMappingURL=prepared-transactions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepared-transactions.test.js","sourceRoot":"","sources":["../../../src/exponentVaults/loopscale/prepared-transactions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { AccountMeta, Connection, PublicKey, Signer, TransactionInstruction, VersionedTransaction } from "@solana/web3.js";
|
|
2
|
+
/**
|
|
3
|
+
* Context required to turn a raw Loopscale response into manager-ready vault
|
|
4
|
+
* transaction pieces through `LoopscaleClient.prepareVaultTransactions(...)`.
|
|
5
|
+
*/
|
|
6
|
+
export interface LoopscaleVaultPreparationContext {
|
|
7
|
+
/** Solana RPC connection used to resolve raw Loopscale lookup tables. */
|
|
8
|
+
connection: Connection;
|
|
9
|
+
/** Manager or caller public key that will sign and pay for the prepared transaction. */
|
|
10
|
+
signer: PublicKey;
|
|
11
|
+
/** Squads vault PDA that owns the managed assets. */
|
|
12
|
+
vaultPda: PublicKey;
|
|
13
|
+
/** Optional vault PDA used for automatic policy and hook resolution. */
|
|
14
|
+
vaultAddress?: PublicKey;
|
|
15
|
+
/** Optional explicit policy PDA. */
|
|
16
|
+
policyPda?: PublicKey;
|
|
17
|
+
/** Optional explicit Squads constraint indices. */
|
|
18
|
+
constraintIndices?: number[];
|
|
19
|
+
/** Squads account index. Defaults to `0` when omitted. */
|
|
20
|
+
accountIndex?: number;
|
|
21
|
+
/** Optional leading policy accounts. */
|
|
22
|
+
leadingAccounts?: PublicKey[] | AccountMeta[];
|
|
23
|
+
/** Optional pre-hook accounts. */
|
|
24
|
+
preHookAccounts?: PublicKey[] | AccountMeta[];
|
|
25
|
+
/** Optional post-hook accounts. */
|
|
26
|
+
postHookAccounts?: PublicKey[] | AccountMeta[];
|
|
27
|
+
/** Squads program override. */
|
|
28
|
+
squadsProgram?: PublicKey;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Context required to compile prepared Loopscale vault transactions into
|
|
32
|
+
* locally signed `VersionedTransaction`s through
|
|
33
|
+
* `LoopscaleClient.buildVaultTransactions(...)`.
|
|
34
|
+
*/
|
|
35
|
+
export interface LoopscaleBuildTransactionsContext extends LoopscaleVaultPreparationContext {
|
|
36
|
+
/** Signing keypairs used to locally sign the returned transactions. */
|
|
37
|
+
signers: Signer[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Appendable transaction pieces derived from a raw Loopscale response.
|
|
41
|
+
*
|
|
42
|
+
* This is the return type for `LoopscaleClient.prepareVaultTransactions(...)`.
|
|
43
|
+
*
|
|
44
|
+
* Send `setupInstructions` first when present, then send `instructions`.
|
|
45
|
+
* `requiresLoopscaleCoSign` tells callers whether the main transaction still
|
|
46
|
+
* needs `client.coSign(...)` before broadcasting.
|
|
47
|
+
*/
|
|
48
|
+
export interface LoopscalePreparedTransaction {
|
|
49
|
+
setupInstructions: TransactionInstruction[];
|
|
50
|
+
instructions: TransactionInstruction[];
|
|
51
|
+
signers: Signer[];
|
|
52
|
+
addressLookupTableAddresses: PublicKey[];
|
|
53
|
+
requiresLoopscaleCoSign: boolean;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Locally signed transaction returned by
|
|
57
|
+
* `LoopscaleClient.buildVaultTransactions(...)`.
|
|
58
|
+
*/
|
|
59
|
+
export interface LoopscaleBuiltTransaction {
|
|
60
|
+
transaction: VersionedTransaction;
|
|
61
|
+
requiresLoopscaleCoSign: boolean;
|
|
62
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepared-types.js","sourceRoot":"","sources":["../../../src/exponentVaults/loopscale/prepared-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { type Signer, Connection, PublicKey, TransactionInstruction, VersionedTransaction } from "@solana/web3.js";
|
|
2
|
+
import { type LoopscaleInstruction } from "../vault-interaction";
|
|
3
|
+
import type { LoopscaleTransactionResponse } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* A wrapped Loopscale batch that can be executed through the Exponent sync flow.
|
|
6
|
+
*
|
|
7
|
+
* `preInstructions` and `postInstructions` are top-level instructions hoisted
|
|
8
|
+
* from the raw Loopscale transaction. `syncInstructions` are the original
|
|
9
|
+
* Loopscale program instructions, wrapped minimally for `createVaultSyncTransaction`.
|
|
10
|
+
*/
|
|
11
|
+
export interface LoopscaleSyncBatch {
|
|
12
|
+
kind: "sync";
|
|
13
|
+
preInstructions: TransactionInstruction[];
|
|
14
|
+
syncInstructions: LoopscaleInstruction[];
|
|
15
|
+
postInstructions: TransactionInstruction[];
|
|
16
|
+
signers: Signer[];
|
|
17
|
+
addressLookupTableAddresses: PublicKey[];
|
|
18
|
+
rawTransaction: VersionedTransaction;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A raw top-level transaction batch that does not contain any Loopscale
|
|
22
|
+
* program instructions and therefore must not be wrapped in a Squads sync
|
|
23
|
+
* transaction.
|
|
24
|
+
*/
|
|
25
|
+
export interface LoopscaleStandaloneBatch {
|
|
26
|
+
kind: "standalone";
|
|
27
|
+
instructions: TransactionInstruction[];
|
|
28
|
+
signers: Signer[];
|
|
29
|
+
addressLookupTableAddresses: PublicKey[];
|
|
30
|
+
rawTransaction: VersionedTransaction;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A single executable batch derived from a raw Loopscale response.
|
|
34
|
+
*/
|
|
35
|
+
export type LoopscaleResponseBatch = LoopscaleSyncBatch | LoopscaleStandaloneBatch;
|
|
36
|
+
/**
|
|
37
|
+
* Minimal response plan derived from a raw Loopscale response.
|
|
38
|
+
*/
|
|
39
|
+
export interface LoopscaleResponsePlan {
|
|
40
|
+
/** Executable batches in the same order Loopscale returned them. */
|
|
41
|
+
batches: LoopscaleResponseBatch[];
|
|
42
|
+
/** Deserialized raw transactions returned by Loopscale. */
|
|
43
|
+
rawTransactions: VersionedTransaction[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Convert a raw Loopscale strategy or CPI-compatible loan response into an
|
|
47
|
+
* Exponent response plan.
|
|
48
|
+
*
|
|
49
|
+
* The adapter preserves transaction boundaries while classifying each returned
|
|
50
|
+
* transaction into:
|
|
51
|
+
* 1. standalone top-level batches for contiguous non-Loopscale prefixes/suffixes
|
|
52
|
+
* 2. wrapped Loopscale sync batches containing only compute-budget prefixes and
|
|
53
|
+
* Loopscale program instructions
|
|
54
|
+
*
|
|
55
|
+
* This keeps the wrapped sync transaction small and preserves the relative
|
|
56
|
+
* ordering of any safe top-level setup/finalization work Loopscale includes
|
|
57
|
+
* around the CPI-compatible instruction segment.
|
|
58
|
+
*
|
|
59
|
+
* Loopscale loan maintenance responses such as `repayPrincipal`,
|
|
60
|
+
* `withdrawCollateral`, `updateWeightMatrix`, and `closeLoan` are supported as
|
|
61
|
+
* long as they are returned directly by Loopscale in a clean sync segment.
|
|
62
|
+
* Unsupported instructions such as `lockLoan`, `unlockLoan`, or
|
|
63
|
+
* `refinanceLedger` still throw instead of being guessed into the sync
|
|
64
|
+
* segment.
|
|
65
|
+
*/
|
|
66
|
+
export declare function createLoopscaleResponsePlan({ connection, response, }: {
|
|
67
|
+
connection: Connection;
|
|
68
|
+
response: LoopscaleTransactionResponse;
|
|
69
|
+
}): Promise<LoopscaleResponsePlan>;
|