@aephia/atlas-kit 0.6.0-next.134 → 0.6.0-next.135

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.
Files changed (54) hide show
  1. package/dist/cargo/actions/deposit.d.ts.map +1 -1
  2. package/dist/cargo/actions/deposit.js +15 -15
  3. package/dist/cargo/actions/deposit.js.map +1 -1
  4. package/dist/cargo/actions/index.d.ts.map +1 -1
  5. package/dist/cargo/actions/index.js +20 -15
  6. package/dist/cargo/actions/index.js.map +1 -1
  7. package/dist/internal/c4/discriminators.d.ts +1 -0
  8. package/dist/internal/c4/discriminators.d.ts.map +1 -1
  9. package/dist/internal/c4/discriminators.js +3 -1
  10. package/dist/internal/c4/discriminators.js.map +1 -1
  11. package/dist/internal/c4/fleet-storage.d.ts +36 -0
  12. package/dist/internal/c4/fleet-storage.d.ts.map +1 -0
  13. package/dist/internal/c4/fleet-storage.js +72 -0
  14. package/dist/internal/c4/fleet-storage.js.map +1 -0
  15. package/dist/internal/planning/cargo-storage-actions.d.ts +8 -0
  16. package/dist/internal/planning/cargo-storage-actions.d.ts.map +1 -0
  17. package/dist/internal/planning/cargo-storage-actions.js +97 -0
  18. package/dist/internal/planning/cargo-storage-actions.js.map +1 -0
  19. package/dist/internal/planning/mining-storage-actions.d.ts +11 -0
  20. package/dist/internal/planning/mining-storage-actions.d.ts.map +1 -0
  21. package/dist/internal/planning/mining-storage-actions.js +66 -0
  22. package/dist/internal/planning/mining-storage-actions.js.map +1 -0
  23. package/dist/internal/planning/profile-storage-funding-guard.d.ts +17 -10
  24. package/dist/internal/planning/profile-storage-funding-guard.d.ts.map +1 -1
  25. package/dist/internal/planning/profile-storage-funding-guard.js +32 -64
  26. package/dist/internal/planning/profile-storage-funding-guard.js.map +1 -1
  27. package/dist/internal/planning/profile-storage-funding.d.ts +1 -13
  28. package/dist/internal/planning/profile-storage-funding.d.ts.map +1 -1
  29. package/dist/internal/planning/profile-storage-funding.js +1 -13
  30. package/dist/internal/planning/profile-storage-funding.js.map +1 -1
  31. package/dist/internal/planning/storage-action-readers.d.ts +10 -0
  32. package/dist/internal/planning/storage-action-readers.d.ts.map +1 -0
  33. package/dist/internal/planning/storage-action-readers.js +25 -0
  34. package/dist/internal/planning/storage-action-readers.js.map +1 -0
  35. package/dist/internal/planning/storage-actions.d.ts +81 -0
  36. package/dist/internal/planning/storage-actions.d.ts.map +1 -0
  37. package/dist/internal/planning/storage-actions.js +177 -0
  38. package/dist/internal/planning/storage-actions.js.map +1 -0
  39. package/dist/mining/actions/index.d.ts.map +1 -1
  40. package/dist/mining/actions/index.js +71 -25
  41. package/dist/mining/actions/index.js.map +1 -1
  42. package/dist/planning/execution.d.ts.map +1 -1
  43. package/dist/planning/execution.js +11 -10
  44. package/dist/planning/execution.js.map +1 -1
  45. package/dist/planning/index.d.ts +2 -12
  46. package/dist/planning/index.d.ts.map +1 -1
  47. package/dist/planning/index.js +2 -2
  48. package/dist/planning/index.js.map +1 -1
  49. package/dist/planning/plan-construction.js +1 -1
  50. package/package.json +1 -1
  51. package/dist/internal/planning/cargo-storage.d.ts +0 -71
  52. package/dist/internal/planning/cargo-storage.d.ts.map +0 -1
  53. package/dist/internal/planning/cargo-storage.js +0 -274
  54. package/dist/internal/planning/cargo-storage.js.map +0 -1
@@ -1,274 +0,0 @@
1
- import { getAddressDecoder } from '@solana/kit';
2
- import { SageSdkError } from '../../client/errors.js';
3
- import { decodeDepositCargoData, decodeStarbaseTransferData, decodeWithinFleetTransferData, } from '../c4/cargo-instructions.js';
4
- import { fleetAccountDefinition } from '../c4/fleet.js';
5
- import { starbasePlayerAccountDefinition } from '../c4/starbase.js';
6
- import { CARGO_LINE_BYTES, cargoStorageInstruction, } from './profile-storage-funding-guard.js';
7
- import { checkProfileStorageFunding, profileStorageFundingGuard, } from './profile-storage-funding.js';
8
- import { RENT_ADDRESS, readRent } from './rent.js';
9
- const NONE = new Map();
10
- function fail(address, message) {
11
- throw new SageSdkError('ACTION_PRECONDITION_FAILED', message, { address });
12
- }
13
- function totals(entries) {
14
- const sums = new Map();
15
- for (const [cargoId, amount] of entries)
16
- if (amount !== undefined && amount > 0n)
17
- sums.set(cargoId, (sums.get(cargoId) ?? 0n) + amount);
18
- return sums;
19
- }
20
- function present(accounts, address) {
21
- const raw = accounts.get(address);
22
- if (!raw || raw.executable)
23
- fail(address, `Account ${address} is missing or executable, so the cargo action's storage funding cannot be checked. Refresh it and replan the cargo action.`);
24
- return raw;
25
- }
26
- /** Fresh accounts a cargo instruction's storage reads, besides the Profile,
27
- * Rent sysvar and Game. */
28
- export function cargoStorageAccounts(kind, instruction) {
29
- const at = (index) => instruction.accounts[index].address;
30
- if (kind === 'deposit')
31
- return [at(5), at(10)];
32
- if (kind === 'starbase-transfer')
33
- return [at(4), at(8)];
34
- return [at(4)];
35
- }
36
- /** Reads one cargo instruction's storage effect from its bytes and the fresh
37
- * Fleet and token accounts. `cargoIdForMint` resolves a deposit's cargo id from
38
- * its source token mint, as the program does. */
39
- export function readCargoStorageAction(instruction, accounts, cargoIdForMint) {
40
- const kind = cargoStorageInstruction(instruction);
41
- const metas = instruction.accounts;
42
- const data = instruction.data;
43
- const signer = {
44
- profile: metas[1].address,
45
- authority: metas[0].address,
46
- };
47
- if (kind === 'deposit') {
48
- const { amount, keyIndex } = decodeDepositCargoData(data);
49
- const source = present(accounts, metas[10].address);
50
- // Deposit callers always resolve the mint. One the Game does not list
51
- // matches no held line, so the deposit counts as adding one: a
52
- // conservative bound. The Plan's cargo-definition guards refuse such a
53
- // deposit before this estimate runs.
54
- const cargoId = cargoIdForMint(getAddressDecoder().decode(source.data.slice(0, 32)));
55
- return {
56
- ...signer,
57
- keyIndex,
58
- settlement: 'each',
59
- accounts: [
60
- {
61
- address: metas[5].address,
62
- pod: 'starbase',
63
- added: totals([[cargoId, amount]]),
64
- removed: NONE,
65
- },
66
- ],
67
- };
68
- }
69
- const fleetAddress = metas[4].address;
70
- if (kind === 'within-fleet-transfer') {
71
- const { amount, cargoId, intoHold, outOfHold, keyIndex } = decodeWithinFleetTransferData(data);
72
- const moved = totals([[cargoId, amount]]);
73
- return {
74
- ...signer,
75
- keyIndex,
76
- settlement: 'each',
77
- accounts: [
78
- {
79
- address: fleetAddress,
80
- pod: 'fleet-hold',
81
- added: intoHold ? moved : NONE,
82
- removed: outOfHold ? moved : NONE,
83
- },
84
- ],
85
- };
86
- }
87
- const { ammo, fuel, loads, unloads, keyIndex } = decodeStarbaseTransferData(data);
88
- const fleet = fleetAccountDefinition.decode(present(accounts, fleetAddress));
89
- // Positive ammo and fuel load the Fleet from the Starbase Player; the
90
- // Fleet's ammo bank and fuel tank are fixed slots.
91
- const fromStarbase = totals([
92
- [fleet.ammoBank.cargoId, ammo > 0n ? ammo : undefined],
93
- [fleet.fuelTank.cargoId, fuel > 0n ? fuel : undefined],
94
- ...loads,
95
- ]);
96
- const toStarbase = totals([
97
- [fleet.ammoBank.cargoId, ammo < 0n ? -ammo : undefined],
98
- [fleet.fuelTank.cargoId, fuel < 0n ? -fuel : undefined],
99
- ...unloads,
100
- ]);
101
- return {
102
- ...signer,
103
- keyIndex,
104
- settlement: 'pair',
105
- accounts: [
106
- {
107
- address: fleetAddress,
108
- pod: 'fleet-hold',
109
- added: totals(loads),
110
- removed: totals(unloads),
111
- },
112
- {
113
- address: metas[8].address,
114
- pod: 'starbase',
115
- added: toStarbase,
116
- removed: fromStarbase,
117
- },
118
- ],
119
- };
120
- }
121
- function podLines(raw, pod) {
122
- const amounts = pod === 'fleet-hold'
123
- ? fleetAccountDefinition.decode(raw).cargoHold.amounts
124
- : starbasePlayerAccountDefinition.decode(raw).cargo.amounts;
125
- return new Map(amounts.map(({ cargoId, amount }) => [cargoId, amount]));
126
- }
127
- /** Evaluates cargo actions in order, as the program runs them: each pod adds a
128
- * line for a cargo id it lacks and drops a line its consumption empties, and
129
- * after each action every resized account holds exactly the rent minimum of its
130
- * new size. Later actions therefore see the storage earlier ones used. */
131
- export function evaluateCargoStorage(actions, accounts) {
132
- const rent = readRent(present(accounts, RENT_ADDRESS));
133
- const state = new Map();
134
- return actions.map((action) => {
135
- let deficit = 0n;
136
- let excess = 0n;
137
- const resizes = action.accounts.map((account) => {
138
- let current = state.get(account.address);
139
- if (!current) {
140
- const raw = present(accounts, account.address);
141
- current = { raw, lines: podLines(raw, account.pod) };
142
- state.set(account.address, current);
143
- }
144
- let lines = 0;
145
- for (const cargoId of new Set([
146
- ...account.added.keys(),
147
- ...account.removed.keys(),
148
- ])) {
149
- const held = current.lines.get(cargoId);
150
- const after = (held ?? 0n) +
151
- (account.added.get(cargoId) ?? 0n) -
152
- (account.removed.get(cargoId) ?? 0n);
153
- if (held === undefined && after > 0n)
154
- lines += 1;
155
- else if (held !== undefined &&
156
- after <= 0n &&
157
- account.removed.has(cargoId))
158
- lines -= 1;
159
- // Only consumption can empty a line; an added line stays positive.
160
- if (after > 0n)
161
- current.lines.set(cargoId, after);
162
- else
163
- current.lines.delete(cargoId);
164
- }
165
- const before = current.raw;
166
- const growthBytes = lines * CARGO_LINE_BYTES;
167
- const length = before.data.length + growthBytes;
168
- // The program leaves a zero-lamport account unchanged.
169
- if (before.lamports !== 0n) {
170
- const minimum = rent(length);
171
- if (before.lamports < minimum)
172
- deficit += minimum - before.lamports;
173
- else
174
- excess += before.lamports - minimum;
175
- }
176
- current.raw = {
177
- ...before,
178
- data: new Uint8Array(length),
179
- lamports: before.lamports === 0n ? 0n : rent(length),
180
- };
181
- return { raw: before, growthBytes };
182
- });
183
- const profileDebit = action.settlement === 'each'
184
- ? deficit
185
- : deficit > excess
186
- ? deficit - excess
187
- : 0n;
188
- return { resizes, profileDebit };
189
- });
190
- }
191
- /** The cargo steps of a Plan, in order. */
192
- export function cargoStorageSteps(steps) {
193
- return steps.flatMap((step) => {
194
- const kind = cargoStorageInstruction(step.instruction);
195
- return kind ? [{ ...step, kind }] : [];
196
- });
197
- }
198
- /** Rechecks every cargo action's storage funding before signing. Each guard's
199
- * resized accounts, sizes and byte changes must equal what its instruction does
200
- * to the fresh accounts, so a saved Plan cannot weaken them. The actions are then
201
- * evaluated in order, and each guard's debit is the one its action meets after
202
- * the earlier actions. Returns each guard's funding, or the failure to report
203
- * for it. */
204
- export function validateCargoStorageFunding(steps, guards, accounts, cargoIdForMint) {
205
- const results = new Map();
206
- const remaining = [...guards];
207
- const bound = [];
208
- for (const step of cargoStorageSteps(steps)) {
209
- const action = readCargoStorageAction(step.instruction, accounts, cargoIdForMint);
210
- // Plan validation already bound each instruction to exactly one guard.
211
- const index = remaining.findIndex((guard) => guard.profile === action.profile &&
212
- guard.authority === action.authority &&
213
- guard.keyIndex === action.keyIndex &&
214
- guard.address === action.accounts[0].address &&
215
- guard.paired === action.accounts[1]?.address);
216
- bound.push({ guard: remaining[index], action });
217
- remaining.splice(index, 1);
218
- }
219
- const ordered = evaluateCargoStorage(bound.map(({ action }) => action), accounts);
220
- bound.forEach(({ guard, action }, index) => {
221
- try {
222
- const [solo] = evaluateCargoStorage([action], accounts);
223
- const [first, second] = solo.resizes;
224
- const planned = [
225
- [guard.length, guard.growth],
226
- guard.paired ? [guard.pairedLength, guard.pairedGrowth] : undefined,
227
- ];
228
- [first, second].forEach((resize, at) => {
229
- if (!resize)
230
- return;
231
- const [, growth] = planned[at];
232
- if (resize.growthBytes !== growth)
233
- fail(resize.raw.address, `The cargo action grows account ${resize.raw.address} by ${resize.growthBytes} bytes, not the ${growth} bytes its storage funding guard records. Recreate the Plan with its cargo planner.`);
234
- });
235
- results.set(guard, {
236
- funding: checkProfileStorageFunding({
237
- profileRaw: present(accounts, guard.profile),
238
- rentRaw: present(accounts, RENT_ADDRESS),
239
- authority: guard.authority,
240
- keyIndex: guard.keyIndex,
241
- profileDebit: ordered[index].profileDebit,
242
- action: 'cargo action',
243
- maximumProfileDebit: guard.maximumProfileDebit,
244
- }),
245
- });
246
- }
247
- catch (error) {
248
- results.set(guard, { error });
249
- }
250
- });
251
- return results;
252
- }
253
- /** Plans one cargo instruction's storage funding from the same derivation
254
- * execution repeats: its guard and the Plan summary sentence. */
255
- export function planCargoStorageFunding(input) {
256
- const action = readCargoStorageAction(input.instruction, input.accounts, input.cargoIdForMint);
257
- const [evaluated] = evaluateCargoStorage([action], input.accounts);
258
- return profileStorageFundingGuard({
259
- profile: action.profile,
260
- authority: action.authority,
261
- keyIndex: action.keyIndex,
262
- resizes: evaluated.resizes,
263
- settlement: action.settlement,
264
- funding: checkProfileStorageFunding({
265
- profileRaw: present(input.accounts, input.profile),
266
- rentRaw: present(input.accounts, RENT_ADDRESS),
267
- authority: action.authority,
268
- keyIndex: action.keyIndex,
269
- profileDebit: evaluated.profileDebit,
270
- action: input.action,
271
- }),
272
- });
273
- }
274
- //# sourceMappingURL=cargo-storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cargo-storage.js","sourceRoot":"","sources":["../../../src/internal/planning/cargo-storage.ts"],"names":[],"mappings":"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"}