@sly-rentals/core 5.5.0 → 5.5.2
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/dist/api.json +1656 -1656
- package/dist/cjs/instructions/closeContract.js +4 -22
- package/dist/cjs/instructions/closeContract.js.map +1 -1
- package/dist/cjs/instructions/closeContractThread.js +5 -5
- package/dist/cjs/instructions/closeContractThread.js.map +1 -1
- package/dist/cjs/instructions/deleteContractThread.js +5 -5
- package/dist/cjs/instructions/deleteContractThread.js.map +1 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/utils/fibers.js +38 -0
- package/dist/cjs/utils/fibers.js.map +1 -0
- package/dist/cjs/utils/fibers.test.js +51 -0
- package/dist/cjs/utils/fibers.test.js.map +1 -0
- package/dist/cjs/version.js +1 -1
- package/dist/esm/instructions/closeContract.js +6 -24
- package/dist/esm/instructions/closeContract.js.map +1 -1
- package/dist/esm/instructions/closeContractThread.js +8 -8
- package/dist/esm/instructions/closeContractThread.js.map +1 -1
- package/dist/esm/instructions/deleteContractThread.js +8 -8
- package/dist/esm/instructions/deleteContractThread.js.map +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/esm/utils/fibers.js +35 -0
- package/dist/esm/utils/fibers.js.map +1 -0
- package/dist/esm/utils/fibers.test.js +49 -0
- package/dist/esm/utils/fibers.test.js.map +1 -0
- package/dist/esm/version.js +1 -1
- package/dist/types/instructions/closeContract.d.ts.map +1 -1
- package/dist/types/instructions/closeContractThread.d.ts.map +1 -1
- package/dist/types/instructions/deleteContractThread.d.ts.map +1 -1
- package/dist/types/utils/fibers.d.ts +27 -0
- package/dist/types/utils/fibers.d.ts.map +1 -0
- package/dist/types/utils/fibers.test.d.ts +2 -0
- package/dist/types/utils/fibers.test.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/package.json +2 -2
|
@@ -10,7 +10,7 @@ exports.closeContract = closeContract;
|
|
|
10
10
|
const kit_1 = require("@solana/kit");
|
|
11
11
|
const instructions_1 = require("../generated/codama/instructions");
|
|
12
12
|
const config_1 = require("../utils/config");
|
|
13
|
-
const
|
|
13
|
+
const fibers_1 = require("../utils/fibers");
|
|
14
14
|
const signer_1 = require("../utils/signer");
|
|
15
15
|
const thread_1 = require("../accounts/thread");
|
|
16
16
|
const contractSnapshot_1 = require("../utils/contractSnapshot");
|
|
@@ -148,27 +148,9 @@ async function closeContract(params, config) {
|
|
|
148
148
|
const contractThread = await (0, thread_2.deriveContractThread)(contractAddress, rentalAuthority);
|
|
149
149
|
const threadAccount = await (0, thread_1.fetchThreadByAddress)(contractThread, finalConfig.rpcUrl);
|
|
150
150
|
const fiberIds = Array.from(threadAccount.data.fiberIds);
|
|
151
|
-
//
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
// exactly what the 2026-08-26 rent sweep did to hundreds of them. Passing
|
|
155
|
-
// an id whose account is gone makes the fiber program deserialize an empty
|
|
156
|
-
// buffer and fail with `InvalidFiberData`, so a contract that tracks a
|
|
157
|
-
// destroyed fiber could never be closed at all.
|
|
158
|
-
//
|
|
159
|
-
// A tracked-but-absent fiber needs nothing closed; dropping it from the
|
|
160
|
-
// list is the whole remedy.
|
|
161
|
-
const fiberAddresses = await Promise.all(fiberIds.map(id => (0, thread_2.deriveFiber)(contractThread, id)));
|
|
162
|
-
const rpc = (0, rpc_1.createRpc)(finalConfig.rpcUrl || (0, config_1.getRpcUrl)(config));
|
|
163
|
-
const probed = fiberAddresses.length
|
|
164
|
-
? (await rpc.getMultipleAccounts(fiberAddresses, { encoding: 'base64' }).send()).value
|
|
165
|
-
: [];
|
|
166
|
-
const fiberAccounts = fiberAddresses
|
|
167
|
-
.filter((_, i) => probed[i] !== null)
|
|
168
|
-
.map(fiberAddress => ({
|
|
169
|
-
address: fiberAddress,
|
|
170
|
-
role: kit_1.AccountRole.WRITABLE,
|
|
171
|
-
}));
|
|
151
|
+
// `fiber_ids` is what the thread tracks, not what exists — see
|
|
152
|
+
// `existingFiberAccounts`.
|
|
153
|
+
const fiberAccounts = await (0, fibers_1.existingFiberAccounts)(contractThread, fiberIds, finalConfig.rpcUrl || (0, config_1.getRpcUrl)(config));
|
|
172
154
|
const ix = await (0, instructions_1.getCloseContractThreadInstructionAsync)({ owner: ownerSigner, contract: contractAddress, thread: contractThread }, { programAddress });
|
|
173
155
|
ix.accounts.push(...fiberAccounts);
|
|
174
156
|
return ix;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AA8GH,
|
|
1
|
+
{"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ const signer_1 = require("../utils/signer");
|
|
|
14
14
|
const instructions_2 = require("../utils/instructions");
|
|
15
15
|
const thread_1 = require("../accounts/thread");
|
|
16
16
|
const thread_2 = require("../pda/thread");
|
|
17
|
+
const fibers_1 = require("../utils/fibers");
|
|
17
18
|
const srsly_1 = require("../pda/srsly");
|
|
18
19
|
/**
|
|
19
20
|
* Close a contract's automation thread and all of its fibers, reclaiming
|
|
@@ -41,11 +42,10 @@ async function closeContractThread(params, config) {
|
|
|
41
42
|
// Fetch thread account to read actual fiber_ids
|
|
42
43
|
const threadAccount = await (0, thread_1.fetchThreadByAddress)(contractThread, finalConfig.rpcUrl);
|
|
43
44
|
const fiberIds = Array.from(threadAccount.data.fiberIds);
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
})));
|
|
45
|
+
// Only the fibers that still exist — `fiber_ids` tracks indices, not
|
|
46
|
+
// accounts, and a tracked-but-destroyed fiber makes the close unsendable.
|
|
47
|
+
// See `existingFiberAccounts`.
|
|
48
|
+
const fiberAccounts = await (0, fibers_1.existingFiberAccounts)(contractThread, fiberIds, finalConfig.rpcUrl || (0, config_1.getRpcUrl)(config));
|
|
49
49
|
const kitInstruction = await (0, instructions_1.getCloseContractThreadInstructionAsync)({
|
|
50
50
|
owner: ownerSigner,
|
|
51
51
|
contract: contractAddress,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closeContractThread.js","sourceRoot":"","sources":["../../../src/instructions/closeContractThread.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"closeContractThread.js","sourceRoot":"","sources":["../../../src/instructions/closeContractThread.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAwCH,kDAmDC;AAzFD,qCAAiE;AACjE,mEAA0F;AAC1F,4CAAuF;AACvF,4CAA4E;AAC5E,wDAA4D;AAC5D,+CAA0D;AAC1D,0CAAqD;AACrD,4CAAwD;AACxD,wCAAqD;AAsBrD;;;;;;;GAOG;AACI,KAAK,UAAU,mBAAmB,CACvC,MAAiC,EACjC,MAA2B;IAE3B,MAAM,WAAW,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,4BAAmB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,IAAA,aAAO,EAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAA,aAAO,EAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IAE5D,oBAAoB;IACpB,MAAM,eAAe,GAAG,MAAM,IAAA,6BAAqB,GAAE,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,IAAA,6BAAoB,EAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAEpF,gDAAgD;IAChD,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAoB,EAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;IAErE,qEAAqE;IACrE,0EAA0E;IAC1E,+BAA+B;IAC/B,MAAM,aAAa,GAAG,MAAM,IAAA,8BAAqB,EAC/C,cAAc,EACd,QAAQ,EACR,WAAW,CAAC,MAAM,IAAI,IAAA,kBAAS,EAAC,MAAM,CAAC,CACxC,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,IAAA,qDAAsC,EACjE;QACE,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE,cAAc;KACvB,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IAEF,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE/C,OAAO,IAAA,kCAAmB,EAAC,cAAc,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -15,6 +15,7 @@ const signer_1 = require("../utils/signer");
|
|
|
15
15
|
const instructions_2 = require("../utils/instructions");
|
|
16
16
|
const thread_1 = require("../accounts/thread");
|
|
17
17
|
const thread_2 = require("../pda/thread");
|
|
18
|
+
const fibers_1 = require("../utils/fibers");
|
|
18
19
|
const srsly_1 = require("../pda/srsly");
|
|
19
20
|
/**
|
|
20
21
|
* Admin variant of `closeContractThread` that doesn't require the
|
|
@@ -43,11 +44,10 @@ async function deleteContractThread(params, config) {
|
|
|
43
44
|
// Fetch thread account to read actual fiber_ids
|
|
44
45
|
const threadAccount = await (0, thread_1.fetchThreadByAddress)(contractThread, finalConfig.rpcUrl);
|
|
45
46
|
const fiberIds = Array.from(threadAccount.data.fiberIds);
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
})));
|
|
47
|
+
// Only the fibers that still exist — `fiber_ids` tracks indices, not
|
|
48
|
+
// accounts, and a tracked-but-destroyed fiber makes the close unsendable.
|
|
49
|
+
// See `existingFiberAccounts`.
|
|
50
|
+
const fiberAccounts = await (0, fibers_1.existingFiberAccounts)(contractThread, fiberIds, finalConfig.rpcUrl || (0, config_1.getRpcUrl)(config));
|
|
51
51
|
const kitInstruction = await (0, instructions_1.getDeleteContractThreadInstructionAsync)({
|
|
52
52
|
admin: adminSigner,
|
|
53
53
|
thread: contractThread,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteContractThread.js","sourceRoot":"","sources":["../../../src/instructions/deleteContractThread.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;
|
|
1
|
+
{"version":3,"file":"deleteContractThread.js","sourceRoot":"","sources":["../../../src/instructions/deleteContractThread.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAyCH,oDAkDC;AAzFD,qCAAiE;AACjE,mEAA2F;AAC3F,4CAAuF;AACvF,4CAA4E;AAC5E,wDAA4D;AAC5D,+CAA0D;AAC1D,0CAAqD;AACrD,4CAAwD;AACxD,wCAAqD;AAsBrD;;;;;;;;GAQG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAkC,EAClC,MAA2B;IAE3B,MAAM,WAAW,GAAG,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,IAAA,4BAAmB,EAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,IAAA,aAAO,EAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,IAAA,aAAO,EAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IAE5D,oBAAoB;IACpB,MAAM,eAAe,GAAG,MAAM,IAAA,6BAAqB,GAAE,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,IAAA,6BAAoB,EAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAEpF,gDAAgD;IAChD,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAoB,EAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;IAErE,qEAAqE;IACrE,0EAA0E;IAC1E,+BAA+B;IAC/B,MAAM,aAAa,GAAG,MAAM,IAAA,8BAAqB,EAC/C,cAAc,EACd,QAAQ,EACR,WAAW,CAAC,MAAM,IAAI,IAAA,kBAAS,EAAC,MAAM,CAAC,CACxC,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,IAAA,sDAAuC,EAClE;QACE,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,cAAc;KACvB,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IAEF,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE/C,OAAO,IAAA,kCAAmB,EAAC,cAAc,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/cjs/package.json
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Resolving a thread's fiber accounts for instructions that close them.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.existingFiberAccounts = existingFiberAccounts;
|
|
7
|
+
const kit_1 = require("@solana/kit");
|
|
8
|
+
const thread_1 = require("../pda/thread");
|
|
9
|
+
const rpc_1 = require("./rpc");
|
|
10
|
+
/**
|
|
11
|
+
* The fiber accounts a close instruction should carry, given what a thread
|
|
12
|
+
* tracks.
|
|
13
|
+
*
|
|
14
|
+
* `fiber_ids` records the indices a thread *tracks*, and nothing on chain
|
|
15
|
+
* keeps that list in agreement with the accounts it names — a fiber account
|
|
16
|
+
* can be closed out from under a thread that still lists it, which is what
|
|
17
|
+
* the 2026-08-26 rent sweep did to 623 of them.
|
|
18
|
+
*
|
|
19
|
+
* Passing an index whose account is gone makes the fiber program deserialize
|
|
20
|
+
* an empty buffer and fail with `InvalidFiberData`, from the `buf.len() < 8`
|
|
21
|
+
* branch rather than the discriminator one. It reads like a schema problem
|
|
22
|
+
* and is not one, and no caller can work around it, so a contract tracking a
|
|
23
|
+
* destroyed fiber becomes impossible to close by anyone.
|
|
24
|
+
*
|
|
25
|
+
* A tracked-but-absent fiber has nothing to close, so dropping it is the
|
|
26
|
+
* whole remedy. One `getMultipleAccounts` for the batch.
|
|
27
|
+
*/
|
|
28
|
+
async function existingFiberAccounts(thread, fiberIds, rpcUrl) {
|
|
29
|
+
if (!fiberIds.length)
|
|
30
|
+
return [];
|
|
31
|
+
const addresses = await Promise.all(fiberIds.map(id => (0, thread_1.deriveFiber)(thread, id)));
|
|
32
|
+
const rpc = (0, rpc_1.createRpc)(rpcUrl);
|
|
33
|
+
const { value } = await rpc.getMultipleAccounts(addresses, { encoding: 'base64' }).send();
|
|
34
|
+
return addresses
|
|
35
|
+
.filter((_, i) => value[i] !== null)
|
|
36
|
+
.map(address => ({ address, role: kit_1.AccountRole.WRITABLE }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=fibers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fibers.js","sourceRoot":"","sources":["../../../src/utils/fibers.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAwBH,sDAcC;AApCD,qCAAwD;AACxD,0CAA4C;AAC5C,+BAAkC;AAElC;;;;;;;;;;;;;;;;;GAiBG;AACI,KAAK,UAAU,qBAAqB,CACzC,MAAe,EACf,QAAkB,EAClB,MAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAA,oBAAW,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,IAAA,eAAS,EAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1F,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;SACnC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,iBAAW,CAAC,QAAiB,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const kit_1 = require("@solana/kit");
|
|
5
|
+
vitest_1.vi.mock('./rpc', () => ({ createRpc: vitest_1.vi.fn() }));
|
|
6
|
+
vitest_1.vi.mock('../pda/thread', () => ({ deriveFiber: vitest_1.vi.fn() }));
|
|
7
|
+
const rpc_1 = require("./rpc");
|
|
8
|
+
const thread_1 = require("../pda/thread");
|
|
9
|
+
const fibers_1 = require("./fibers");
|
|
10
|
+
const THREAD = 'Sysvar1nstructions1111111111111111111111111';
|
|
11
|
+
const FIBER_0 = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
|
|
12
|
+
const FIBER_1 = 'So11111111111111111111111111111111111111112';
|
|
13
|
+
/** `getMultipleAccounts` returns `null` in the slot of an account that does not exist. */
|
|
14
|
+
function mockAccounts(value) {
|
|
15
|
+
const send = vitest_1.vi.fn().mockResolvedValue({ value });
|
|
16
|
+
vitest_1.vi.mocked(rpc_1.createRpc).mockReturnValue({
|
|
17
|
+
getMultipleAccounts: vitest_1.vi.fn().mockReturnValue({ send }),
|
|
18
|
+
});
|
|
19
|
+
return send;
|
|
20
|
+
}
|
|
21
|
+
(0, vitest_1.beforeEach)(() => {
|
|
22
|
+
vitest_1.vi.clearAllMocks();
|
|
23
|
+
vitest_1.vi.mocked(thread_1.deriveFiber).mockImplementation(async (_thread, index) => index === 0 ? FIBER_0 : FIBER_1);
|
|
24
|
+
});
|
|
25
|
+
(0, vitest_1.describe)('existingFiberAccounts', () => {
|
|
26
|
+
(0, vitest_1.it)('drops a tracked fiber whose account is gone', async () => {
|
|
27
|
+
// The state the 2026-08-26 rent sweep left behind: the thread still tracks
|
|
28
|
+
// both indices, but fiber 1's account was closed. Passing it makes the
|
|
29
|
+
// fiber program deserialize an empty buffer and fail with
|
|
30
|
+
// `InvalidFiberData`, which no caller can work around.
|
|
31
|
+
mockAccounts([{ lamports: 9416880n }, null]);
|
|
32
|
+
const accounts = await (0, fibers_1.existingFiberAccounts)(THREAD, [0, 1], 'https://rpc.example');
|
|
33
|
+
(0, vitest_1.expect)(accounts).toEqual([{ address: FIBER_0, role: kit_1.AccountRole.WRITABLE }]);
|
|
34
|
+
});
|
|
35
|
+
(0, vitest_1.it)('keeps every fiber when all of them exist', async () => {
|
|
36
|
+
mockAccounts([{ lamports: 1n }, { lamports: 1n }]);
|
|
37
|
+
const accounts = await (0, fibers_1.existingFiberAccounts)(THREAD, [0, 1], 'https://rpc.example');
|
|
38
|
+
(0, vitest_1.expect)(accounts.map(a => a.address)).toEqual([FIBER_0, FIBER_1]);
|
|
39
|
+
});
|
|
40
|
+
(0, vitest_1.it)('returns nothing when the thread tracks nothing, without an RPC call', async () => {
|
|
41
|
+
const send = mockAccounts([]);
|
|
42
|
+
const accounts = await (0, fibers_1.existingFiberAccounts)(THREAD, [], 'https://rpc.example');
|
|
43
|
+
(0, vitest_1.expect)(accounts).toEqual([]);
|
|
44
|
+
(0, vitest_1.expect)(send).not.toHaveBeenCalled();
|
|
45
|
+
});
|
|
46
|
+
(0, vitest_1.it)('drops every fiber when none survive', async () => {
|
|
47
|
+
mockAccounts([null, null]);
|
|
48
|
+
(0, vitest_1.expect)(await (0, fibers_1.existingFiberAccounts)(THREAD, [0, 1], 'https://rpc.example')).toEqual([]);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=fibers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fibers.test.js","sourceRoot":"","sources":["../../../src/utils/fibers.test.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/version.js
CHANGED
|
@@ -3,5 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
4
|
// Auto-generated from package.json - DO NOT EDIT
|
|
5
5
|
// Run "pnpm run generate:version" to update
|
|
6
|
-
exports.VERSION = '5.5.
|
|
6
|
+
exports.VERSION = '5.5.2';
|
|
7
7
|
//# sourceMappingURL=version.js.map
|
|
@@ -4,16 +4,16 @@
|
|
|
4
4
|
* Thin convenience wrapper around Codama-generated closeContract instruction.
|
|
5
5
|
* Closes a contract with no active rentals and claims remaining payments.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { address } from '@solana/kit';
|
|
8
8
|
import { getCloseContractInstructionAsync, getCloseContractThreadInstructionAsync, } from '../generated/codama/instructions';
|
|
9
9
|
import { mergeConfig, getAddresses, getRpcUrl } from '../utils/config';
|
|
10
|
-
import {
|
|
10
|
+
import { existingFiberAccounts } from '../utils/fibers';
|
|
11
11
|
import { toTransactionSigner } from '../utils/signer';
|
|
12
12
|
import { fetchThreadByAddress } from '../accounts/thread';
|
|
13
13
|
import { resolveContractSnapshot } from '../utils/contractSnapshot';
|
|
14
14
|
import { deriveAssociatedTokenAccount } from '../pda/token';
|
|
15
15
|
import { deriveContract, deriveBorrowerState, deriveRentalAuthority } from '../pda/srsly';
|
|
16
|
-
import { deriveContractThread
|
|
16
|
+
import { deriveContractThread } from '../pda/thread';
|
|
17
17
|
import { prepareInstructions } from '../utils/instructions';
|
|
18
18
|
import { closeRental } from './closeRental';
|
|
19
19
|
/**
|
|
@@ -145,27 +145,9 @@ export async function closeContract(params, config) {
|
|
|
145
145
|
const contractThread = await deriveContractThread(contractAddress, rentalAuthority);
|
|
146
146
|
const threadAccount = await fetchThreadByAddress(contractThread, finalConfig.rpcUrl);
|
|
147
147
|
const fiberIds = Array.from(threadAccount.data.fiberIds);
|
|
148
|
-
//
|
|
149
|
-
//
|
|
150
|
-
|
|
151
|
-
// exactly what the 2026-08-26 rent sweep did to hundreds of them. Passing
|
|
152
|
-
// an id whose account is gone makes the fiber program deserialize an empty
|
|
153
|
-
// buffer and fail with `InvalidFiberData`, so a contract that tracks a
|
|
154
|
-
// destroyed fiber could never be closed at all.
|
|
155
|
-
//
|
|
156
|
-
// A tracked-but-absent fiber needs nothing closed; dropping it from the
|
|
157
|
-
// list is the whole remedy.
|
|
158
|
-
const fiberAddresses = await Promise.all(fiberIds.map(id => deriveFiber(contractThread, id)));
|
|
159
|
-
const rpc = createRpc(finalConfig.rpcUrl || getRpcUrl(config));
|
|
160
|
-
const probed = fiberAddresses.length
|
|
161
|
-
? (await rpc.getMultipleAccounts(fiberAddresses, { encoding: 'base64' }).send()).value
|
|
162
|
-
: [];
|
|
163
|
-
const fiberAccounts = fiberAddresses
|
|
164
|
-
.filter((_, i) => probed[i] !== null)
|
|
165
|
-
.map(fiberAddress => ({
|
|
166
|
-
address: fiberAddress,
|
|
167
|
-
role: AccountRole.WRITABLE,
|
|
168
|
-
}));
|
|
148
|
+
// `fiber_ids` is what the thread tracks, not what exists — see
|
|
149
|
+
// `existingFiberAccounts`.
|
|
150
|
+
const fiberAccounts = await existingFiberAccounts(contractThread, fiberIds, finalConfig.rpcUrl || getRpcUrl(config));
|
|
169
151
|
const ix = await getCloseContractThreadInstructionAsync({ owner: ownerSigner, contract: contractAddress, thread: contractThread }, { programAddress });
|
|
170
152
|
ix.accounts.push(...fiberAccounts);
|
|
171
153
|
return ix;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"closeContract.js","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
* Thin convenience wrapper around Codama-generated closeContractThread instruction.
|
|
5
5
|
* Closes a per-contract automation thread and reclaims rent.
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { address } from '@solana/kit';
|
|
8
8
|
import { getCloseContractThreadInstructionAsync } from '../generated/codama/instructions';
|
|
9
|
-
import { mergeConfig, getAddresses } from '../utils/config';
|
|
9
|
+
import { mergeConfig, getAddresses, getRpcUrl } from '../utils/config';
|
|
10
10
|
import { toTransactionSigner } from '../utils/signer';
|
|
11
11
|
import { prepareInstructions } from '../utils/instructions';
|
|
12
12
|
import { fetchThreadByAddress } from '../accounts/thread';
|
|
13
|
-
import { deriveContractThread
|
|
13
|
+
import { deriveContractThread } from '../pda/thread';
|
|
14
|
+
import { existingFiberAccounts } from '../utils/fibers';
|
|
14
15
|
import { deriveRentalAuthority } from '../pda/srsly';
|
|
15
16
|
/**
|
|
16
17
|
* Close a contract's automation thread and all of its fibers, reclaiming
|
|
@@ -38,11 +39,10 @@ export async function closeContractThread(params, config) {
|
|
|
38
39
|
// Fetch thread account to read actual fiber_ids
|
|
39
40
|
const threadAccount = await fetchThreadByAddress(contractThread, finalConfig.rpcUrl);
|
|
40
41
|
const fiberIds = Array.from(threadAccount.data.fiberIds);
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
})));
|
|
42
|
+
// Only the fibers that still exist — `fiber_ids` tracks indices, not
|
|
43
|
+
// accounts, and a tracked-but-destroyed fiber makes the close unsendable.
|
|
44
|
+
// See `existingFiberAccounts`.
|
|
45
|
+
const fiberAccounts = await existingFiberAccounts(contractThread, fiberIds, finalConfig.rpcUrl || getRpcUrl(config));
|
|
46
46
|
const kitInstruction = await getCloseContractThreadInstructionAsync({
|
|
47
47
|
owner: ownerSigner,
|
|
48
48
|
contract: contractAddress,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closeContractThread.js","sourceRoot":"","sources":["../../../src/instructions/closeContractThread.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"closeContractThread.js","sourceRoot":"","sources":["../../../src/instructions/closeContractThread.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAe,OAAO,EAAgB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,sCAAsC,EAAE,MAAM,kCAAkC,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAkB,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAsBrD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiC,EACjC,MAA2B;IAE3B,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IAE5D,oBAAoB;IACpB,MAAM,eAAe,GAAG,MAAM,qBAAqB,EAAE,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAEpF,gDAAgD;IAChD,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;IAErE,qEAAqE;IACrE,0EAA0E;IAC1E,+BAA+B;IAC/B,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAC/C,cAAc,EACd,QAAQ,EACR,WAAW,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CACxC,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,sCAAsC,CACjE;QACE,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,eAAe;QACzB,MAAM,EAAE,cAAc;KACvB,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IAEF,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE/C,OAAO,mBAAmB,CAAC,cAAc,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -5,13 +5,14 @@
|
|
|
5
5
|
* Admin-only instruction to delete a contract's thread for schema migrations.
|
|
6
6
|
* Unlike closeContractThread, does not require the contract account.
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import { address } from '@solana/kit';
|
|
9
9
|
import { getDeleteContractThreadInstructionAsync } from '../generated/codama/instructions';
|
|
10
|
-
import { mergeConfig, getAddresses } from '../utils/config';
|
|
10
|
+
import { mergeConfig, getAddresses, getRpcUrl } from '../utils/config';
|
|
11
11
|
import { toTransactionSigner } from '../utils/signer';
|
|
12
12
|
import { prepareInstructions } from '../utils/instructions';
|
|
13
13
|
import { fetchThreadByAddress } from '../accounts/thread';
|
|
14
|
-
import { deriveContractThread
|
|
14
|
+
import { deriveContractThread } from '../pda/thread';
|
|
15
|
+
import { existingFiberAccounts } from '../utils/fibers';
|
|
15
16
|
import { deriveRentalAuthority } from '../pda/srsly';
|
|
16
17
|
/**
|
|
17
18
|
* Admin variant of `closeContractThread` that doesn't require the
|
|
@@ -40,11 +41,10 @@ export async function deleteContractThread(params, config) {
|
|
|
40
41
|
// Fetch thread account to read actual fiber_ids
|
|
41
42
|
const threadAccount = await fetchThreadByAddress(contractThread, finalConfig.rpcUrl);
|
|
42
43
|
const fiberIds = Array.from(threadAccount.data.fiberIds);
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
})));
|
|
44
|
+
// Only the fibers that still exist — `fiber_ids` tracks indices, not
|
|
45
|
+
// accounts, and a tracked-but-destroyed fiber makes the close unsendable.
|
|
46
|
+
// See `existingFiberAccounts`.
|
|
47
|
+
const fiberAccounts = await existingFiberAccounts(contractThread, fiberIds, finalConfig.rpcUrl || getRpcUrl(config));
|
|
48
48
|
const kitInstruction = await getDeleteContractThreadInstructionAsync({
|
|
49
49
|
admin: adminSigner,
|
|
50
50
|
thread: contractThread,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteContractThread.js","sourceRoot":"","sources":["../../../src/instructions/deleteContractThread.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"deleteContractThread.js","sourceRoot":"","sources":["../../../src/instructions/deleteContractThread.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAe,OAAO,EAAgB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,uCAAuC,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAkB,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAsBrD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAkC,EAClC,MAA2B;IAE3B,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAExC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,KAAgB,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,QAAmB,CAAC,CAAC;IAE5D,oBAAoB;IACpB,MAAM,eAAe,GAAG,MAAM,qBAAqB,EAAE,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;IAEpF,gDAAgD;IAChD,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAa,CAAC;IAErE,qEAAqE;IACrE,0EAA0E;IAC1E,+BAA+B;IAC/B,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAC/C,cAAc,EACd,QAAQ,EACR,WAAW,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CACxC,CAAC;IAEF,MAAM,cAAc,GAAG,MAAM,uCAAuC,CAClE;QACE,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,cAAc;KACvB,EACD,EAAE,cAAc,EAAE,CACnB,CAAC;IAEF,8DAA8D;IAC9D,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;IAE/C,OAAO,mBAAmB,CAAC,cAAc,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,WAAW,CAAC,SAAS;KACjC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/esm/package.json
CHANGED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolving a thread's fiber accounts for instructions that close them.
|
|
3
|
+
*/
|
|
4
|
+
import { AccountRole } from '@solana/kit';
|
|
5
|
+
import { deriveFiber } from '../pda/thread';
|
|
6
|
+
import { createRpc } from './rpc';
|
|
7
|
+
/**
|
|
8
|
+
* The fiber accounts a close instruction should carry, given what a thread
|
|
9
|
+
* tracks.
|
|
10
|
+
*
|
|
11
|
+
* `fiber_ids` records the indices a thread *tracks*, and nothing on chain
|
|
12
|
+
* keeps that list in agreement with the accounts it names — a fiber account
|
|
13
|
+
* can be closed out from under a thread that still lists it, which is what
|
|
14
|
+
* the 2026-08-26 rent sweep did to 623 of them.
|
|
15
|
+
*
|
|
16
|
+
* Passing an index whose account is gone makes the fiber program deserialize
|
|
17
|
+
* an empty buffer and fail with `InvalidFiberData`, from the `buf.len() < 8`
|
|
18
|
+
* branch rather than the discriminator one. It reads like a schema problem
|
|
19
|
+
* and is not one, and no caller can work around it, so a contract tracking a
|
|
20
|
+
* destroyed fiber becomes impossible to close by anyone.
|
|
21
|
+
*
|
|
22
|
+
* A tracked-but-absent fiber has nothing to close, so dropping it is the
|
|
23
|
+
* whole remedy. One `getMultipleAccounts` for the batch.
|
|
24
|
+
*/
|
|
25
|
+
export async function existingFiberAccounts(thread, fiberIds, rpcUrl) {
|
|
26
|
+
if (!fiberIds.length)
|
|
27
|
+
return [];
|
|
28
|
+
const addresses = await Promise.all(fiberIds.map(id => deriveFiber(thread, id)));
|
|
29
|
+
const rpc = createRpc(rpcUrl);
|
|
30
|
+
const { value } = await rpc.getMultipleAccounts(addresses, { encoding: 'base64' }).send();
|
|
31
|
+
return addresses
|
|
32
|
+
.filter((_, i) => value[i] !== null)
|
|
33
|
+
.map(address => ({ address, role: AccountRole.WRITABLE }));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=fibers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fibers.js","sourceRoot":"","sources":["../../../src/utils/fibers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,MAAe,EACf,QAAkB,EAClB,MAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,GAAG,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1F,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;SACnC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,QAAiB,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { describe, expect, it, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { AccountRole } from '@solana/kit';
|
|
3
|
+
vi.mock('./rpc', () => ({ createRpc: vi.fn() }));
|
|
4
|
+
vi.mock('../pda/thread', () => ({ deriveFiber: vi.fn() }));
|
|
5
|
+
import { createRpc } from './rpc';
|
|
6
|
+
import { deriveFiber } from '../pda/thread';
|
|
7
|
+
import { existingFiberAccounts } from './fibers';
|
|
8
|
+
const THREAD = 'Sysvar1nstructions1111111111111111111111111';
|
|
9
|
+
const FIBER_0 = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
|
|
10
|
+
const FIBER_1 = 'So11111111111111111111111111111111111111112';
|
|
11
|
+
/** `getMultipleAccounts` returns `null` in the slot of an account that does not exist. */
|
|
12
|
+
function mockAccounts(value) {
|
|
13
|
+
const send = vi.fn().mockResolvedValue({ value });
|
|
14
|
+
vi.mocked(createRpc).mockReturnValue({
|
|
15
|
+
getMultipleAccounts: vi.fn().mockReturnValue({ send }),
|
|
16
|
+
});
|
|
17
|
+
return send;
|
|
18
|
+
}
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
vi.clearAllMocks();
|
|
21
|
+
vi.mocked(deriveFiber).mockImplementation(async (_thread, index) => index === 0 ? FIBER_0 : FIBER_1);
|
|
22
|
+
});
|
|
23
|
+
describe('existingFiberAccounts', () => {
|
|
24
|
+
it('drops a tracked fiber whose account is gone', async () => {
|
|
25
|
+
// The state the 2026-08-26 rent sweep left behind: the thread still tracks
|
|
26
|
+
// both indices, but fiber 1's account was closed. Passing it makes the
|
|
27
|
+
// fiber program deserialize an empty buffer and fail with
|
|
28
|
+
// `InvalidFiberData`, which no caller can work around.
|
|
29
|
+
mockAccounts([{ lamports: 9416880n }, null]);
|
|
30
|
+
const accounts = await existingFiberAccounts(THREAD, [0, 1], 'https://rpc.example');
|
|
31
|
+
expect(accounts).toEqual([{ address: FIBER_0, role: AccountRole.WRITABLE }]);
|
|
32
|
+
});
|
|
33
|
+
it('keeps every fiber when all of them exist', async () => {
|
|
34
|
+
mockAccounts([{ lamports: 1n }, { lamports: 1n }]);
|
|
35
|
+
const accounts = await existingFiberAccounts(THREAD, [0, 1], 'https://rpc.example');
|
|
36
|
+
expect(accounts.map(a => a.address)).toEqual([FIBER_0, FIBER_1]);
|
|
37
|
+
});
|
|
38
|
+
it('returns nothing when the thread tracks nothing, without an RPC call', async () => {
|
|
39
|
+
const send = mockAccounts([]);
|
|
40
|
+
const accounts = await existingFiberAccounts(THREAD, [], 'https://rpc.example');
|
|
41
|
+
expect(accounts).toEqual([]);
|
|
42
|
+
expect(send).not.toHaveBeenCalled();
|
|
43
|
+
});
|
|
44
|
+
it('drops every fiber when none survive', async () => {
|
|
45
|
+
mockAccounts([null, null]);
|
|
46
|
+
expect(await existingFiberAccounts(THREAD, [0, 1], 'https://rpc.example')).toEqual([]);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=fibers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fibers.test.js","sourceRoot":"","sources":["../../../src/utils/fibers.test.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closeContract.d.ts","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAwB,KAAK,OAAO,EAAoB,MAAM,aAAa,CAAC;AAKnF,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE5E,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAI3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,KAAK,EAAE,eAAe,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAE5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAE/B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAElC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC1B,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"closeContract.d.ts","sourceRoot":"","sources":["../../../src/instructions/closeContract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAwB,KAAK,OAAO,EAAoB,MAAM,aAAa,CAAC;AAKnF,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEvF,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE5E,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAI3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,KAAK,EAAE,eAAe,CAAC;IAEvB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAE5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEzB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAE/B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAElC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC1B,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAsMjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closeContractThread.d.ts","sourceRoot":"","sources":["../../../src/instructions/closeContractThread.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,
|
|
1
|
+
{"version":3,"file":"closeContractThread.d.ts","sourceRoot":"","sources":["../../../src/instructions/closeContractThread.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,KAAK,EAAE,eAAe,CAAC;IAEvB,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAE3B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,yBAAyB,EACjC,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC1B,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAgDjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteContractThread.d.ts","sourceRoot":"","sources":["../../../src/instructions/deleteContractThread.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,
|
|
1
|
+
{"version":3,"file":"deleteContractThread.d.ts","sourceRoot":"","sources":["../../../src/instructions/deleteContractThread.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAwC,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;OAGG;IACH,KAAK,EAAE,eAAe,CAAC;IAEvB,0EAA0E;IAC1E,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IAE3B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,EAClC,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC1B,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CA+CjD"}
|