@easy1staking/cip113-sdk-ts 0.7.0 → 0.9.0
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 +72 -2
- package/blueprints/standard/v0.5.0-alpha.3/UPSTREAM_PIN.json +35 -0
- package/blueprints/standard/v0.5.0-alpha.3/plutus.json +1126 -0
- package/blueprints/standard/v0.5.0-alpha.4/UPSTREAM_PIN.json +36 -0
- package/blueprints/standard/v0.5.0-alpha.4/plutus.json +1434 -0
- package/dist/core/evo-utils.d.ts +357 -39
- package/dist/core/evo-utils.d.ts.map +1 -1
- package/dist/core/evo-utils.js +513 -27
- package/dist/core/evo-utils.js.map +1 -1
- package/dist/core/ledger-order.d.ts +204 -18
- package/dist/core/ledger-order.d.ts.map +1 -1
- package/dist/core/ledger-order.js +385 -28
- package/dist/core/ledger-order.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/standard/blueprint.d.ts +128 -29
- package/dist/standard/blueprint.d.ts.map +1 -1
- package/dist/standard/blueprint.js +244 -47
- package/dist/standard/blueprint.js.map +1 -1
- package/dist/standard/scripts.d.ts +143 -75
- package/dist/standard/scripts.d.ts.map +1 -1
- package/dist/standard/scripts.js +211 -116
- package/dist/standard/scripts.js.map +1 -1
- package/dist/substandards/dummy/index.d.ts +19 -0
- package/dist/substandards/dummy/index.d.ts.map +1 -1
- package/dist/substandards/dummy/index.js +322 -73
- package/dist/substandards/dummy/index.js.map +1 -1
- package/dist/substandards/freeze-and-seize/index.d.ts.map +1 -1
- package/dist/substandards/freeze-and-seize/index.js +455 -117
- package/dist/substandards/freeze-and-seize/index.js.map +1 -1
- package/dist/types.d.ts +131 -48
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/core/evo-utils.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* perform common conversions. All use Evolution SDK types directly.
|
|
6
6
|
*/
|
|
7
7
|
import { Data, Bytes, ScriptHash as EvoScriptHash, Script, UPLC, Address as EvoAddress, Assets, Credential, InlineDatum, KeyHash, TransactionHash, UTxO as EvoUTxO, Transaction } from "@evolution-sdk/evolution";
|
|
8
|
-
import type { HexString, PlutusScript, ScriptHash, TxInput } from "../types.js";
|
|
8
|
+
import type { HexString, PlutusScript, PolicyId, ScriptHash, TxInput } from "../types.js";
|
|
9
9
|
/**
|
|
10
10
|
* Build a PlutusV3 script object from compiled code hex.
|
|
11
11
|
*
|
|
@@ -131,68 +131,274 @@ export declare function decodeRegistryNode(d: Data.Data): RegistryNodeData;
|
|
|
131
131
|
*/
|
|
132
132
|
export declare const REGISTRY_NODE_MIN_ADA = 3000000n;
|
|
133
133
|
/**
|
|
134
|
-
*
|
|
134
|
+
* The minimum lovelace an output must carry, computed from PROTOCOL PARAMETERS
|
|
135
|
+
* and the output's own serialised size.
|
|
135
136
|
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
137
|
+
* ⚠ WHY THIS EXISTS RATHER THAN ANOTHER CONSTANT. min-UTxO scales with
|
|
138
|
+
* SERIALISED OUTPUT SIZE, and three things that scale it are supplied by the
|
|
139
|
+
* CALLER, not by us:
|
|
140
|
+
* - the CIP-68 metadata datum (name/description/ticker/url/logo). This
|
|
141
|
+
* package imposes no length caps at all, so the datum is UNBOUNDED.
|
|
142
|
+
* - the ASSET NAME. CIP-67-labelled names run to 32 bytes, and this package's
|
|
143
|
+
* API takes raw hex names at every boundary.
|
|
144
|
+
* - the QUANTITY, which is a CBOR integer and widens with magnitude.
|
|
139
145
|
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
146
|
+
* ⛔ AND EVOLUTION DOES NOT RESCUE AN UNDER-FUNDED OUTPUT. MEASURED on preview
|
|
147
|
+
* (2026-09-01): `calculateMinimumUtxoLovelace` is applied ONLY to CHANGE and
|
|
148
|
+
* unfracking outputs. An explicit `payToAddress` amount is passed through
|
|
149
|
+
* verbatim — a build with a deliberately short datum-bearing output produced a
|
|
150
|
+
* transaction carrying exactly the requested lovelace. The shortfall therefore
|
|
151
|
+
* survives to submission, where the ledger rejects it as "insufficient Ada"
|
|
152
|
+
* with a number and NEVER as "your datum grew".
|
|
144
153
|
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
154
|
+
* A flat constant cannot be right for an input the caller controls. This is the
|
|
155
|
+
* successor to {@link REGISTRY_NODE_MIN_ADA}'s "deliberately generous" habit:
|
|
156
|
+
* generous is a guess, and it was already wrong at 3 ADA for a CIP-68 datum
|
|
157
|
+
* whose fields sit within a consumer's own documented caps.
|
|
158
|
+
*
|
|
159
|
+
* Built from PUBLIC Evolution API only, and solved as a fixed point because the
|
|
160
|
+
* lovelace figure is itself part of what gets serialised.
|
|
161
|
+
*/
|
|
162
|
+
export declare function minUtxoForOutput(params: {
|
|
163
|
+
/** Bech32 address the output pays to. */
|
|
164
|
+
address: string;
|
|
165
|
+
/** The output's assets. Its lovelace component is ignored and solved for. */
|
|
166
|
+
assets: Assets.Assets;
|
|
167
|
+
/** Inline datum the output will carry, if any. */
|
|
168
|
+
datum?: Data.Data;
|
|
169
|
+
/** `coinsPerUtxoByte` from the live protocol parameters. */
|
|
170
|
+
coinsPerUtxoByte: bigint;
|
|
171
|
+
}): bigint;
|
|
172
|
+
/** Round up to a whole ADA. */
|
|
173
|
+
export declare function ceilToWholeAda(lovelace: bigint): bigint;
|
|
174
|
+
/**
|
|
175
|
+
* min-UTxO for an output, never returning less than `floor`.
|
|
176
|
+
*
|
|
177
|
+
* The floor keeps this change MONOTONE: every value this package used to emit
|
|
178
|
+
* is preserved for ordinary inputs, and the figure only ever rises — where it
|
|
179
|
+
* had to. A fix that lowered an amount would be a behaviour change smuggled in
|
|
180
|
+
* beside a bug fix.
|
|
181
|
+
*/
|
|
182
|
+
export declare function minUtxoAtLeast(floor: bigint, params: Parameters<typeof minUtxoForOutput>[0]): bigint;
|
|
183
|
+
/**
|
|
184
|
+
* `ProgrammableLogicGlobalParams` — the datum on the protocol-params UTxO.
|
|
185
|
+
*
|
|
186
|
+
* SIX fields in 0.5.0-alpha.4, ordered by upstream BY READ FREQUENCY:
|
|
187
|
+
*
|
|
188
|
+
* 0 plg_cred <- programmable_logic_base, once per programmable INPUT
|
|
189
|
+
* 1 issuance_logic_cred <- issuance_mint, once per issuance tx (mint AND burn)
|
|
190
|
+
* 2 transfer_cred <- issuance_logic, precise delegation (audit finding 04)
|
|
191
|
+
* 3 third_party_cred <- issuance_logic, same reason
|
|
192
|
+
* 4 upgrade_cred <- protocol_params spend, the upgrade authority
|
|
193
|
+
* 5 pending_upgrade_cred <- protocol_params spend, Option<Credential>
|
|
194
|
+
*
|
|
195
|
+
* ⛔ INDEX 1 IS THE TRAP, AND IT IS SILENT BY CONSTRUCTION. alpha.3 had FOUR
|
|
196
|
+
* fields with `transfer_cred` at index 1. alpha.4 INSERTS `issuance_logic_cred`
|
|
197
|
+
* at index 1 — it was not appended — so `transfer_cred` moved to 2 and every
|
|
198
|
+
* later field shifted. BOTH ARE CREDENTIALS. A six-field datum written in
|
|
199
|
+
* alpha.3's order with two fields appended is six fields long, passes the arity
|
|
200
|
+
* check below, decodes without a single error, and hands `issuance_mint` the
|
|
201
|
+
* TRANSFER credential where it expects ISSUANCE_LOGIC.
|
|
202
|
+
*
|
|
203
|
+
* ⇒ No decoder can catch that, here or anywhere. What prevents PRODUCING it is
|
|
204
|
+
* that {@link protocolParamsDatum} takes a KEYED record and offers no positional
|
|
205
|
+
* form. What catches a datum already written that way is a read-back comparison
|
|
206
|
+
* against the deployment record — the devnet bootstrap, which compares every
|
|
207
|
+
* decoded field against what it deployed. See the demonstration test in
|
|
208
|
+
* `test/datum-layout.test.mjs`.
|
|
209
|
+
*
|
|
210
|
+
* ⛔ TWO UPSTREAM COMMENTS ARE STALE AND WILL WALK YOU INTO EXACTLY THAT DEFECT.
|
|
211
|
+
* They are recorded here so the next reader does not have to re-derive it:
|
|
212
|
+
* - `validators/issuance_mint.ak`'s header says `issuance_logic_cred` is
|
|
213
|
+
* "field 5". It is field 1.
|
|
214
|
+
* - `validators/issuance_logic.ak`'s header says "`transfer_cred`, field 1;
|
|
215
|
+
* `third_party_cred`, field 2". They are fields 2 and 3.
|
|
216
|
+
* The `ProgrammableLogicGlobalParams` DECLARATION and the `*_field` accessors'
|
|
217
|
+
* `tail_list` depths in `validators/programmable_logic/params.ak` are the
|
|
218
|
+
* authority, and the vendored blueprint agrees with them. Never take a shape
|
|
219
|
+
* from prose — take it from
|
|
220
|
+
* `blueprints/standard/v0.5.0-alpha.4/plutus.json`'s `definitions`.
|
|
221
|
+
*
|
|
222
|
+
* ⛔ Nor from upstream's CONTRACT_SURFACE_CHANGES.md, which has now been wrong
|
|
223
|
+
* about this repository twice — see the block comment at the top of
|
|
224
|
+
* `src/standard/blueprint.ts`.
|
|
225
|
+
*
|
|
226
|
+
* ⚠ `max_inline_datum_bytes` did not disappear in alpha.3, it CHANGED KIND: a
|
|
227
|
+
* compile-time parameter of transfer / third_party / unfracking rather than a
|
|
228
|
+
* datum field. See DeploymentParams.maxInlineDatumBytes. `unfracking_cred` is
|
|
229
|
+
* gone because the DISPATCHER names unfracking at compile time now, and
|
|
230
|
+
* `registry_node_cs` because the registry reads its own policy off its own
|
|
231
|
+
* input's payment credential (#117).
|
|
151
232
|
*/
|
|
152
233
|
export interface ProtocolParamsData {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
234
|
+
/**
|
|
235
|
+
* index 0 — the dispatcher's credential. Read by programmable_logic_base once
|
|
236
|
+
* per programmable input, which is why upstream put it first.
|
|
237
|
+
*
|
|
238
|
+
* ⛔ COHERENCE HAZARD, unenforceable on chain: nothing verifies that the
|
|
239
|
+
* dispatcher named here was compiled against the delegates whose credentials
|
|
240
|
+
* sit in fields 2 and 3. They must be written together.
|
|
241
|
+
*/
|
|
242
|
+
plgCred: Cip113Credential;
|
|
243
|
+
/**
|
|
244
|
+
* index 1 — NEW IN alpha.4, and it DISPLACED `transferCred` from this slot.
|
|
245
|
+
* The `issuance_logic` withdraw-0 credential, read by `issuance_mint` on every
|
|
246
|
+
* mint and burn. Rewriting this field is how the protocol's issuance rules are
|
|
247
|
+
* upgraded for every token that already exists, without moving a policy id.
|
|
248
|
+
*/
|
|
249
|
+
issuanceLogicCred: Cip113Credential;
|
|
250
|
+
/** index 2 — was index 1 in alpha.3. Read by issuance_logic for precise delegation. */
|
|
156
251
|
transferCred: Cip113Credential;
|
|
157
|
-
/** index 3 —
|
|
252
|
+
/** index 3 — seize / clawback. */
|
|
158
253
|
thirdPartyCred: Cip113Credential;
|
|
159
|
-
/** index 4 —
|
|
160
|
-
unfrackingCred: Cip113Credential;
|
|
161
|
-
/** index 5 — mutable. The upgrade authority this datum trampolines to. */
|
|
254
|
+
/** index 4 — the upgrade authority this datum trampolines to. */
|
|
162
255
|
upgradeCred: Cip113Credential;
|
|
163
256
|
/**
|
|
164
|
-
* index
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
* ⚠ This is a SECURITY PARAMETER with no upstream guidance. Upstream's test
|
|
169
|
-
* fixtures use 1024; that is a fixture value, not a recommendation. See
|
|
170
|
-
* PLAN.md D-17 — 1024 is sanctioned for the DEVNET fixture only.
|
|
257
|
+
* index 5 — NEW IN alpha.4. `Option<Credential>`: the INCOMING upgrade
|
|
258
|
+
* authority while a handover is in flight, `null` at rest. An authority
|
|
259
|
+
* handover is two phases (nominate, then the nominee promotes itself by
|
|
260
|
+
* presenting its own withdraw-0), and this field is phase one's only effect.
|
|
171
261
|
*/
|
|
172
|
-
|
|
262
|
+
pendingUpgradeCred: Cip113Credential | null;
|
|
173
263
|
}
|
|
174
|
-
/** Build the
|
|
264
|
+
/** Build the protocol-params datum. Field order is the on-chain contract. */
|
|
175
265
|
export declare function protocolParamsDatum(p: ProtocolParamsData): Data.Data;
|
|
176
|
-
/**
|
|
266
|
+
/**
|
|
267
|
+
* Parse the protocol-params datum. STRICT on arity — see the block above for
|
|
268
|
+
* why that strictness is load-bearing rather than defensive, AND for the one
|
|
269
|
+
* misread it CANNOT catch.
|
|
270
|
+
*/
|
|
177
271
|
export declare function decodeProtocolParams(d: Data.Data): ProtocolParamsData;
|
|
272
|
+
/**
|
|
273
|
+
* Verify that the deployment record and live protocol-params datum name the
|
|
274
|
+
* same issuance-logic script. They are independent sources: the record drives
|
|
275
|
+
* the withdrawal emitted here, while the datum drives the permanent issuance
|
|
276
|
+
* policy on chain.
|
|
277
|
+
*/
|
|
278
|
+
export declare function assertProtocolParamsIssuanceLogic(utxo: EvoUTxO.UTxO, expectedScriptHash: string): void;
|
|
178
279
|
/** Build a BlacklistNode datum */
|
|
179
280
|
export declare function blacklistNodeDatum(key: HexString, next: HexString): Data.Data;
|
|
180
281
|
/**
|
|
181
|
-
* `
|
|
182
|
-
*
|
|
183
|
-
* Upstream #68 REMOVED the `SmartTokenMintingAction { minting_logic_cred,
|
|
184
|
-
* minting_registry_proof }` wrapper these builders used to emit. The redeemer is
|
|
185
|
-
* now the proof itself, and the minting-logic credential is no longer carried in
|
|
186
|
-
* it at all — it comes from the registry node.
|
|
282
|
+
* A `MintingRegistryProof` — where the token's registry node is in this
|
|
283
|
+
* transaction.
|
|
187
284
|
*
|
|
188
285
|
* ctor 0 RefInput { index } — the registry node is a REFERENCE input
|
|
189
286
|
* ctor 1 OutputIndex { index } — the registry node is an OUTPUT of this tx
|
|
190
287
|
* (registration and first mint in one)
|
|
191
288
|
*
|
|
192
|
-
*
|
|
289
|
+
* ⛔ THIS IS NO LONGER `issuance_mint`'s REDEEMER, AND THE OLD COMMENT HERE WAS
|
|
290
|
+
* AN INSTRUCTION FOR BUILDING A TRANSACTION THE LEDGER REFUSES. In 0.5.0-alpha.3
|
|
291
|
+
* `issuance_mint` took a BARE `MintingRegistryProof`. In alpha.4 issuance was
|
|
292
|
+
* split (upstream #129): the permanent per-token policy's redeemer is now
|
|
293
|
+
* `IssuanceRedeemer { params_idx }` — see {@link issuanceRedeemer} — and the
|
|
294
|
+
* proof travels as a VALUE inside the `issuance_logic` withdraw-0 redeemer's
|
|
295
|
+
* map, keyed by policy id. See {@link issuanceLogicRedeemer}, which is where a
|
|
296
|
+
* proof built here now goes.
|
|
297
|
+
*
|
|
298
|
+
* Signatures and encodings are UNCHANGED on purpose: `src/substandards/**`
|
|
299
|
+
* still calls both, and rewiring those call sites is a separate slice.
|
|
300
|
+
*
|
|
301
|
+
* Verified against the blueprint's own `types/MintingRegistryProof` definition,
|
|
302
|
+
* not upstream's prose.
|
|
193
303
|
*/
|
|
194
304
|
export declare function mintingProofRefInput(registryRefInputIndex: number): Data.Data;
|
|
305
|
+
/** The other arm of {@link mintingProofRefInput} — see its block comment. */
|
|
195
306
|
export declare function mintingProofOutputIndex(registryOutputIndex: number): Data.Data;
|
|
307
|
+
/**
|
|
308
|
+
* `issuance_mint`'s redeemer — `IssuanceRedeemer { params_idx }`.
|
|
309
|
+
*
|
|
310
|
+
* The PERMANENT half of issuance (upstream #129). This script's applied hash IS
|
|
311
|
+
* a token's policy id, so its redeemer is frozen for as long as any token
|
|
312
|
+
* exists: nothing but an index hint locating the protocol-params UTxO among the
|
|
313
|
+
* reference inputs. Everything that could ever change moved to
|
|
314
|
+
* {@link issuanceLogicRedeemer}.
|
|
315
|
+
*
|
|
316
|
+
* ⚠ `params_idx` INDEXES THE COMPLETE, LEDGER-SORTED REFERENCE-INPUT SET, and
|
|
317
|
+
* the validator jumps straight to `list.at(reference_inputs, params_idx)` and
|
|
318
|
+
* authenticates what it finds by the params NFT. Computing this index before
|
|
319
|
+
* the builder has added every reference input is a builder bug, and it does not
|
|
320
|
+
* report as one — it resolves to some other UTxO, fails the NFT check, and dies
|
|
321
|
+
* naming nothing. Use `referenceInputIndexOf` in `src/core/ledger-order.ts`,
|
|
322
|
+
* over the complete set, last.
|
|
323
|
+
*/
|
|
324
|
+
export declare function issuanceRedeemer(paramsIdx: number): Data.Data;
|
|
325
|
+
/**
|
|
326
|
+
* `issuance_logic`'s withdraw-0 redeemer — a MAP from policy id to that
|
|
327
|
+
* policy's `MintingRegistryProof`.
|
|
328
|
+
*
|
|
329
|
+
* The REPLACEABLE half of issuance (upstream #129). This is a Plutus `Pairs`
|
|
330
|
+
* association list, NOT a Constr. The two consumers read disjoint halves of it:
|
|
331
|
+
*
|
|
332
|
+
* - `issuance_mint` reads only the KEYS — `has_key(covered, own_policy)`. It
|
|
333
|
+
* never decodes a value.
|
|
334
|
+
* - `issuance_logic` reads only the VALUES — `list.all` over the entries,
|
|
335
|
+
* running the per-policy rule set on each proof.
|
|
336
|
+
*
|
|
337
|
+
* Entry ORDER is not significant to either, which is why this takes a list and
|
|
338
|
+
* imposes no sort.
|
|
339
|
+
*
|
|
340
|
+
* Three refusals, each closing a builder bug that reports as something else:
|
|
341
|
+
*
|
|
342
|
+
* ⛔ AN EMPTY MAP. `list.all([])` is VACUOUSLY TRUE on chain, so an empty
|
|
343
|
+
* redeemer sails through `issuance_logic` while every `issuance_mint` in the
|
|
344
|
+
* transaction fails its `has_key`. The failure names the mint, not the empty
|
|
345
|
+
* map, and nothing points at the omission.
|
|
346
|
+
*
|
|
347
|
+
* ⛔ A DUPLICATE POLICY ID. Compared as LOWER-CASED HEX STRINGS, not as encoded
|
|
348
|
+
* keys. MEASURED: `Data.map` builds a JS `Map` keyed by `Uint8Array` IDENTITY,
|
|
349
|
+
* so two distinct arrays holding identical bytes BOTH survive and the map is not
|
|
350
|
+
* deduplicated for you. Which of the two proofs governs is then a property of
|
|
351
|
+
* the ledger's map handling rather than of anything you wrote. The keys are
|
|
352
|
+
* lower-cased first because hex case is presentation and two spellings of one
|
|
353
|
+
* policy encode to identical bytes — the same normalisation `cip171.ts` applies
|
|
354
|
+
* to raw script hashes, and the hazard `ledger-order.ts` measures for ordering.
|
|
355
|
+
*
|
|
356
|
+
* ⛔ A VALUE THAT IS NOT A `MintingRegistryProof`. The keys are the frozen
|
|
357
|
+
* interface `issuance_mint` depends on; the values are what `issuance_logic`
|
|
358
|
+
* decodes, and a value it cannot decode aborts the whole withdrawal.
|
|
359
|
+
*/
|
|
360
|
+
export declare function issuanceLogicRedeemer(entries: readonly {
|
|
361
|
+
policyId: PolicyId;
|
|
362
|
+
proof: Data.Data;
|
|
363
|
+
}[]): Data.Data;
|
|
364
|
+
/**
|
|
365
|
+
* Which of the three upgrade-path shapes a `protocol_params` SPEND is.
|
|
366
|
+
* Field-less constructors; the index is the whole payload. Mirrors `PlgAct` in
|
|
367
|
+
* `src/core/ledger-order.ts`.
|
|
368
|
+
*/
|
|
369
|
+
export declare const ProtocolParamsAct: {
|
|
370
|
+
readonly PROTOCOL_UPGRADE: 0n;
|
|
371
|
+
readonly NOMINATE_AUTHORITY: 1n;
|
|
372
|
+
readonly PROMOTE_AUTHORITY: 2n;
|
|
373
|
+
};
|
|
374
|
+
export type ProtocolParamsActVariant = keyof typeof ProtocolParamsAct;
|
|
375
|
+
/**
|
|
376
|
+
* Build a `ProtocolParamsRedeemer`.
|
|
377
|
+
*
|
|
378
|
+
* The arms carry no payload: every value a branch needs is already in the
|
|
379
|
+
* continuing datum, which is validated regardless. They exist to make each
|
|
380
|
+
* transaction DECLARE its intent, so `ProtocolUpgrade` freezes the nomination
|
|
381
|
+
* and `NominateAuthority` freezes everything else — an authority handover can
|
|
382
|
+
* never ride along inside a parameter change.
|
|
383
|
+
*
|
|
384
|
+
* ⛔ HAZARD: `ProtocolUpgrade` IS BYTE-IDENTICAL TO {@link voidData}, which is
|
|
385
|
+
* `Constr(0, [])`. Every existing caller that passes `voidData()` as the params
|
|
386
|
+
* spend redeemer therefore keeps working BY ACCIDENT, and no decoder anywhere —
|
|
387
|
+
* on chain or off — can distinguish a migrated caller from a stale one, because
|
|
388
|
+
* the bytes are the same bytes. Same shape as the `SpendViaTransfer` /
|
|
389
|
+
* `BaseSpendRedeemer` collision recorded in WORKLOG S-6.
|
|
390
|
+
*
|
|
391
|
+
* ⇒ The silence is ASYMMETRIC, and that is the risk profile: the other two arms
|
|
392
|
+
* are constructors 1 and 2, which `voidData()` cannot represent, so they fail
|
|
393
|
+
* loudly. Only the upgrade path is quiet — and it is the one every deployment
|
|
394
|
+
* exercises first.
|
|
395
|
+
*
|
|
396
|
+
* ⇒ Because no offline instrument can settle it, the proof that this redeemer
|
|
397
|
+
* was ever really implemented is a devnet mutation: submit `Constr(1, [])` where
|
|
398
|
+
* the validator expects `ProtocolUpgrade` and require it to go RED on chain. The
|
|
399
|
+
* ledger is the only witness with jurisdiction.
|
|
400
|
+
*/
|
|
401
|
+
export declare function protocolParamsRedeemer(arm: ProtocolParamsActVariant): Data.Data;
|
|
196
402
|
export interface RegistryProof {
|
|
197
403
|
type: "exists" | "not-exists";
|
|
198
404
|
nodeIdx: number;
|
|
@@ -221,6 +427,72 @@ export declare function blacklistInitRedeemer(): Data.Data;
|
|
|
221
427
|
export declare function blacklistAddRedeemer(stakingPkh: HexString): Data.Data;
|
|
222
428
|
/** Blacklist remove (constructor 2) */
|
|
223
429
|
export declare function blacklistRemoveRedeemer(stakingPkh: HexString): Data.Data;
|
|
430
|
+
/**
|
|
431
|
+
* Upper bound on the number of nodes (inner and leaf) a `MultisigScript` may
|
|
432
|
+
* hold, from upstream `lib/multisig.ak`'s `max_size`. Chosen there on MEASURED
|
|
433
|
+
* execution budget, not on feel, and baked into the validator's bytes — so a
|
|
434
|
+
* tree above it is refused on chain and changing the cap is a redeployment.
|
|
435
|
+
*/
|
|
436
|
+
export declare const MULTISIG_MAX_SIZE = 20;
|
|
437
|
+
/**
|
|
438
|
+
* A `MultisigScript` tree — native-script multisig semantics in Plutus, used for
|
|
439
|
+
* the upgrade authority. Constructor indices are the on-chain contract:
|
|
440
|
+
*
|
|
441
|
+
* 0 Signature { key_hash }
|
|
442
|
+
* 1 AllOf { scripts }
|
|
443
|
+
* 2 AnyOf { scripts }
|
|
444
|
+
* 3 AtLeast { required, scripts }
|
|
445
|
+
* 4 Before { time }
|
|
446
|
+
* 5 After { time }
|
|
447
|
+
* 6 Script { script_hash }
|
|
448
|
+
*
|
|
449
|
+
* `time` is a bigint because a POSIX bound is a Plutus Int and must round-trip
|
|
450
|
+
* exactly; `required` is a plain number because it is bounded by
|
|
451
|
+
* {@link MULTISIG_MAX_SIZE}.
|
|
452
|
+
*/
|
|
453
|
+
export type MultisigScriptTree = {
|
|
454
|
+
type: "signature";
|
|
455
|
+
keyHash: HexString;
|
|
456
|
+
} | {
|
|
457
|
+
type: "all-of";
|
|
458
|
+
scripts: readonly MultisigScriptTree[];
|
|
459
|
+
} | {
|
|
460
|
+
type: "any-of";
|
|
461
|
+
scripts: readonly MultisigScriptTree[];
|
|
462
|
+
} | {
|
|
463
|
+
type: "at-least";
|
|
464
|
+
required: number;
|
|
465
|
+
scripts: readonly MultisigScriptTree[];
|
|
466
|
+
} | {
|
|
467
|
+
type: "before";
|
|
468
|
+
time: bigint;
|
|
469
|
+
} | {
|
|
470
|
+
type: "after";
|
|
471
|
+
time: bigint;
|
|
472
|
+
} | {
|
|
473
|
+
type: "script";
|
|
474
|
+
scriptHash: HexString;
|
|
475
|
+
};
|
|
476
|
+
/**
|
|
477
|
+
* Build a `MultisigScript` datum, enforcing upstream `lib/multisig.ak`'s
|
|
478
|
+
* `well_formed` — 28-byte hashes, non-empty and duplicate-free child lists,
|
|
479
|
+
* `1 <= required <= |scripts|`, and at most {@link MULTISIG_MAX_SIZE} nodes.
|
|
480
|
+
*
|
|
481
|
+
* ⛔ THE RAIL LIVES ON THE ENCODER ONLY, AND {@link decodeMultisigScript}
|
|
482
|
+
* DELIBERATELY ENFORCES NONE OF IT. The two functions answer different
|
|
483
|
+
* questions: the encoder decides what may be WRITTEN, the decoder reads what is
|
|
484
|
+
* ON CHAIN. A decoder that refused an ill-formed tree could not be used to
|
|
485
|
+
* inspect one — and inspecting a live authority somebody managed to write is
|
|
486
|
+
* exactly the moment you need to read it. Do not "tidy" the check into the
|
|
487
|
+
* decoder for symmetry.
|
|
488
|
+
*/
|
|
489
|
+
export declare function multisigScriptDatum(tree: MultisigScriptTree): Data.Data;
|
|
490
|
+
/**
|
|
491
|
+
* Parse a `MultisigScript` datum. Reads what is on chain and enforces NO
|
|
492
|
+
* well-formedness — see {@link multisigScriptDatum} for why the asymmetry is
|
|
493
|
+
* deliberate.
|
|
494
|
+
*/
|
|
495
|
+
export declare function decodeMultisigScript(d: Data.Data): MultisigScriptTree;
|
|
224
496
|
/** Build an Assets object with a single native token unit + min lovelace */
|
|
225
497
|
export declare function singleTokenAssets(policyId: string, assetName: string, qty: bigint): Assets.Assets;
|
|
226
498
|
/** Build mint assets map from unit -> qty entries (Evolution SDK format) */
|
|
@@ -273,5 +545,51 @@ export declare function hasCIP67Label(assetNameHex: HexString): boolean;
|
|
|
273
545
|
* Matches real-world CIP-68 FT datums (e.g., FLDT token).
|
|
274
546
|
*/
|
|
275
547
|
export declare function buildCIP68FTDatum(meta: CIP68MetadataInput): Data.Data;
|
|
548
|
+
/**
|
|
549
|
+
* Serialised size, in bytes, of an inline datum.
|
|
550
|
+
*
|
|
551
|
+
* The on-chain counterpart is `bytearray.length(builtin.serialise_data(d))`
|
|
552
|
+
* inside `is_seizable_output_shape_bounded` (upstream `lib/assets.ak`), which
|
|
553
|
+
* every script that creates a programmable-logic-base output applies as
|
|
554
|
+
* `... <= max_inline_datum_bytes`. Since alpha.4 that includes `issuance_logic`,
|
|
555
|
+
* so a CIP-68 mint datum is bounded at BIRTH — the old issuance exemption is
|
|
556
|
+
* expired, and CIP-68 reference tokens carrying data-URI logos were the
|
|
557
|
+
* standing example of the kilobyte datum it now refuses.
|
|
558
|
+
*
|
|
559
|
+
* TWO ENCODERS, AND ONLY ONE DIRECTION IS SAFE. This measures with Evolution's
|
|
560
|
+
* `Data.toCBORBytes`; the chain measures with Plutus's `serialise_data`. They
|
|
561
|
+
* are different implementations and no offline instrument can prove they agree.
|
|
562
|
+
* The SDK must measure GREATER THAN OR EQUAL TO the chain: if it ever measures
|
|
563
|
+
* fewer bytes than the ledger does, it accepts a record the ledger then
|
|
564
|
+
* refuses, which is precisely the failure the bound exists to prevent.
|
|
565
|
+
*
|
|
566
|
+
* That direction is NOT settled here, and nothing in `test/cip68-bound.test.mjs`
|
|
567
|
+
* establishes it — every figure in that file comes from this same encoder. It
|
|
568
|
+
* is settled by the devnet at-bound SUCCESS in T-F04-4: a datum measuring
|
|
569
|
+
* exactly `maxInlineDatumBytes` by this function, accepted by a real ledger.
|
|
570
|
+
* Until that test is green, the agreement of the two encoders is an ASSUMPTION.
|
|
571
|
+
*/
|
|
572
|
+
export declare function inlineDatumBytes(datum: Data.Data): number;
|
|
573
|
+
/**
|
|
574
|
+
* Refuse an inline datum larger than `maxInlineDatumBytes`, naming the bound,
|
|
575
|
+
* the measured size and the parameter the caller would have to change.
|
|
576
|
+
*
|
|
577
|
+
* THE COMPARISON IS `<=`, MATCHING THE CHAIN. A datum measuring EXACTLY
|
|
578
|
+
* `maxInlineDatumBytes` is legal and MUST be accepted. A `<` here would read as
|
|
579
|
+
* prudence and would instead remove CIP-68 registration from this SDK for the
|
|
580
|
+
* boundary case: the caller sees a refusal, concludes the feature does not
|
|
581
|
+
* work, and there is no incident, no log and no corruption for anyone to
|
|
582
|
+
* investigate. `test/cip68-bound.test.mjs` pins both directions one byte apart
|
|
583
|
+
* for that reason.
|
|
584
|
+
*
|
|
585
|
+
* `datum` is a `Data.Data` and NOT a `CIP68MetadataInput` on purpose: the thing
|
|
586
|
+
* the chain bounds is the serialised datum, so a helper taking metadata would
|
|
587
|
+
* be measuring a different object one step removed from the rule it mirrors.
|
|
588
|
+
*
|
|
589
|
+
* @param datum the inline datum that will be attached to the output
|
|
590
|
+
* @param maxInlineDatumBytes the deployment's bound (`DeploymentParams`)
|
|
591
|
+
* @param what what is being measured, for the refusal message
|
|
592
|
+
*/
|
|
593
|
+
export declare function assertInlineDatumWithinBound(datum: Data.Data, maxInlineDatumBytes: number, what: string): void;
|
|
276
594
|
export { Data, Bytes, Assets, Credential, InlineDatum, KeyHash, EvoAddress, EvoScriptHash, TransactionHash, Transaction, UPLC, };
|
|
277
595
|
//# sourceMappingURL=evo-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evo-utils.d.ts","sourceRoot":"","sources":["../../src/core/evo-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,IAAI,EACJ,KAAK,EACL,UAAU,IAAI,aAAa,EAC3B,MAAM,EACN,IAAI,EACJ,OAAO,IAAI,UAAU,EAKrB,MAAM,EACN,UAAU,EACV,WAAW,EACX,OAAO,EACP,eAAe,EACf,IAAI,IAAI,OAAO,EACf,WAAW,
|
|
1
|
+
{"version":3,"file":"evo-utils.d.ts","sourceRoot":"","sources":["../../src/core/evo-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,IAAI,EACJ,KAAK,EACL,UAAU,IAAI,aAAa,EAC3B,MAAM,EACN,IAAI,EACJ,OAAO,IAAI,UAAU,EAKrB,MAAM,EACN,UAAU,EACV,WAAW,EACX,OAAO,EACP,eAAe,EACf,IAAI,IAAI,OAAO,EACf,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAQ1F;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,CAYrE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,SAAS,EACvB,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,GAClB,YAAY,CAKd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,SAAS,GAAG,UAAU,CAGrE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAI/E;AAED;;GAEG;AACH;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,MAAM,CAItF;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAI/E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAQlG;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAIhE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAIhE;AAMD,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC,IAAI,CAKvD;AAED,iDAAiD;AACjD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,IAAI,CAE5D;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC,IAAI,CAExD;AAED,iCAAiC;AACjC,wBAAgB,QAAQ,IAAI,IAAI,CAAC,IAAI,CAEpC;AAMD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAgB9F;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,GACjB;IAAE,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAoBtD;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IACvB,IAAI,EAAE,UAAU,CAAC;CAClB;AAiCD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,SAAS,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;IAChB,8BAA8B;IAC9B,kBAAkB,EAAE,gBAAgB,CAAC;IACrC,mBAAmB,EAAE,gBAAgB,CAAC;IACtC,6BAA6B,EAAE,gBAAgB,CAAC;IAChD,wCAAwC;IACxC,qBAAqB,EAAE,gBAAgB,CAAC;IACxC,aAAa,EAAE,SAAS,CAAC;CAC1B;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAUnE;AAED,yFAAyF;AACzF,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAsBjE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,qBAAqB,WAAa,CAAC;AAWhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IACtB,kDAAkD;IAClD,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;IAClB,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,MAAM,CA6BT;AAED,+BAA+B;AAC/B,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAC7C,MAAM,CAGR;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;OAOG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAC1B;;;;;OAKG;IACH,iBAAiB,EAAE,gBAAgB,CAAC;IACpC,uFAAuF;IACvF,YAAY,EAAE,gBAAgB,CAAC;IAC/B,kCAAkC;IAClC,cAAc,EAAE,gBAAgB,CAAC;IACjC,iEAAiE;IACjE,WAAW,EAAE,gBAAgB,CAAC;IAC9B;;;;;OAKG;IACH,kBAAkB,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC7C;AAED,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAepE;AAkBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAuBrE;AAED;;;;;GAKG;AACH,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,kBAAkB,EAAE,MAAM,GACzB,IAAI,CAkBN;AAED,kCAAkC;AAClC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC,IAAI,CAE7E;AAMD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,oBAAoB,CAAC,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,CAE7E;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,CAE9E;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,CAO7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAA;CAAE,EAAE,GAC3D,IAAI,CAAC,IAAI,CAwCX;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;CAIpB,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAa/E;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,GAAG,YAAY,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iDAAiD;AACjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,IAAI,CAUtE;AAED,mDAAmD;AACnD,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,GACtB,IAAI,CAAC,IAAI,CAKX;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAEhD;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,SAAS,EACd,kBAAkB,EAAE,gBAAgB,GACnC,IAAI,CAAC,IAAI,CAEX;AAED,qCAAqC;AACrC,wBAAgB,qBAAqB,IAAI,IAAI,CAAC,IAAI,CAEjD;AAED,oCAAoC;AACpC,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC,IAAI,CAErE;AAED,uCAAuC;AACvC,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC,IAAI,CAExE;AAMD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,SAAS,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,SAAS,CAAA;CAAE,CAAC;AA4F9C;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAWvE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,kBAAkB,CA+CrE;AAMD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAIjG;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAQ7E;AAED,yDAAyD;AACzD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAU5F;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAMxE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAOrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,MAAM,CAEtD;AAMD,mFAAmF;AACnF,eAAO,MAAM,QAAQ,QAAkB,CAAC;AAExC,oCAAoC;AACpC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAMD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,GAAG,SAAS,CAElF;AAED,6GAA6G;AAC7G,wBAAgB,eAAe,CAAC,YAAY,EAAE,SAAS,GAAG,SAAS,CAclE;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAS9D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC,IAAI,CA0BrE;AAMD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAEzD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,IAAI,CAAC,IAAI,EAChB,mBAAmB,EAAE,MAAM,EAC3B,IAAI,EAAE,MAAM,GACX,IAAI,CAgBN;AAMD,OAAO,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,EACX,IAAI,GACL,CAAC"}
|