tbc-tx-parser 0.1.7 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,7 +16,7 @@ pnpm add tbc-tx-parser
16
16
 
17
17
  Currently supported:
18
18
 
19
- - Native TBC transfers, coinbase rewards, self/change flows, fees, and common locking-script outputs.
19
+ - Native TBC transfers, coinbase rewards, source-linked returns, fees, and common locking-script outputs.
20
20
  - FT / StableCoin mint, transfer, merge, and mixed FT/TBC transactions.
21
21
  - NFT collection mint, ordinary NFT mint/transfer, and hash-only Hold transfer destinations.
22
22
  - OrderBook placement, cancellation, update, and matching semantics.
@@ -36,6 +36,40 @@ const result = await decodeTxRaw(txraw, {
36
36
  });
37
37
  ```
38
38
 
39
+ ### Classification TBC display unit
40
+
41
+ Native TBC values in `classification.description` use satoshis by default. Callers may request TBC display values without changing any structured amount fields:
42
+
43
+ ```ts
44
+ const result = await decodeTxRaw(txraw, {
45
+ inputUtxos,
46
+ display: {
47
+ tbcUnit: 'tbc', // "satoshi" (default) or "tbc"
48
+ },
49
+ });
50
+ ```
51
+
52
+ For example, the same description can be rendered as either:
53
+
54
+ ```text
55
+ Sends 100,000,000 satoshis to address ...; network fee: 80 satoshis.
56
+ Sends 100 TBC to address ...; network fee: 0.000080 TBC.
57
+ ```
58
+
59
+ This option affects only native amounts embedded in `classification.description`. Fields such as `chain.outputs[].satoshis`, `chain.fee.satoshis`, and `assetFlows[].amount.satoshis` always remain exact satoshi values. Normal TBC amounts use up to six decimal places with trailing zeroes removed; network fees use exactly six decimal places.
60
+
61
+ To switch units after a transaction has already been decoded, render the description directly from the existing result:
62
+
63
+ ```ts
64
+ import { renderTransactionDescription } from 'tbc-tx-parser';
65
+
66
+ const description = renderTransactionDescription(result, {
67
+ tbcUnit: 'tbc',
68
+ });
69
+ ```
70
+
71
+ `renderTransactionDescription` is synchronous and does not parse `txraw`, fetch input UTXOs, mutate the result, or repeat protocol classification. This makes it suitable for a UI unit selector while keeping structured amounts unchanged.
72
+
39
73
  ## Input UTXOs
40
74
 
41
75
  Asset-flow decoding requires the prevout for every input. Passing only `txraw` throws because the parser cannot reliably determine where assets originated:
@@ -92,6 +126,8 @@ result.chain.inputs;
92
126
  result.chain.outputs;
93
127
  result.chain.fee;
94
128
  result.assetFlows;
129
+ result.unspendableAssetFlows;
130
+ result.classification;
95
131
  ```
96
132
 
97
133
  Common fields:
@@ -100,8 +136,28 @@ Common fields:
100
136
  - `chain.outputs`: transaction outputs, addresses, script classifications, and protocol tape state.
101
137
  - `chain.fee`: transaction fee.
102
138
  - `assetFlows`: primary asset-flow data for application displays.
139
+ - `unspendableAssetFlows`: optional FT declarations excluded from normal asset flows after a verified token-amount conservation violation.
140
+ - `classification`: deterministic transaction type, protocol conformance, and an English result description.
141
+
142
+ The SDK exposes transaction classification separately from asset flows so applications can show a concise conclusion without treating weak protocol evidence as definitive:
143
+
144
+ ```ts
145
+ result.classification.protocol; // e.g. "orderBook"
146
+ result.classification.action; // e.g. "match"
147
+ result.classification.conformance; // standard | nonstandard | indeterminate
148
+ result.classification.description; // fact-based English conclusion for this transaction
149
+ result.classification.issues; // optional stable issue codes
150
+ ```
151
+
152
+ `standard` means the transaction matches a supported protocol action and every invariant currently implemented by this SDK for that action. It is not a consensus-validity or spendability guarantee. `nonstandard` means the protocol family or action is recognizable but an implemented rule is violated. `indeterminate` means the available chain evidence is insufficient to run the relevant checks; missing associated prevouts are not reported as protocol violations.
153
+
154
+ For non-mint FT transactions, classification includes token-amount conservation. If declared FT outputs exceed fully verified FT inputs, the result is `nonstandard` with issue code `FT_OUTPUT_AMOUNT_EXCEEDS_VERIFIED_INPUT`. Those FT declarations are excluded from `assetFlows` and returned in `unspendableAssetFlows`; their decoded scripts also remain available in `chain.outputs`. The field name describes the SDK's conservative application view and does not independently prove consensus-level unspendability. If the relevant FT input amounts are incomplete, conformance is `indeterminate` instead of reporting a violation.
155
+
156
+ `protocol` and `action` form the structured transaction type. Their TypeScript definitions are correlated, so unsupported combinations are rejected at compile time. Classification confidence remains an internal parsing concern rather than a public result field.
157
+
158
+ `description` is generated from the classified action together with the transaction's verified `assetFlows`, endpoint types, and network fee. It summarizes the primary business action instead of replacing the full chain or asset-flow data, for example: `Sends 1,000 PFT to address 1Pz2eAg3JjXQSqs5nGQj7XGhPzvBEbaiP9; network fee: 445 satoshis.` A single verified destination includes its full address, multisignature address, pool ID, or hash; callers decide whether to shorten it in the UI. Multiple destinations are deduplicated and summarized using one total amount and a destination count, never per-destination amounts. Source-linked `self` flows remain available in `assetFlows`, but are omitted from descriptions that already contain an external transfer. Transactions containing only `self` flows use neutral `Internal transfer ...; no funds were sent ...` wording without describing UTXO split/merge mechanics or unknown attached data. Protocol carrier values are omitted from material secondary transfers unless they also match a standalone payment output. When evidence is incomplete, the wording becomes explicitly cautious and does not invent amounts or actions. The final `network fee` clause is the chain transaction fee only; protocol-specific trading or liquidity fees are not folded into it.
103
159
 
104
- The top-level SDK result does not expose `transactionType`. Transaction-type labels can make `unknown` or weakly evidenced transactions look definitive, so presentation layers should build descriptions from verifiable facts in `assetFlows`, `chain.inputs`, and `chain.outputs`.
160
+ The first classification release is intentionally fixture-driven: it covers native TBC coinbase, transfer, and MultiSig transactions; StableCoin bootstrap and token actions; and the FT, NFT, PiggyBank, OrderBook, and PoolNFT actions already represented by the SDK test corpus. Unknown contracts remain `indeterminate` instead of receiving a guessed definitive type.
105
161
 
106
162
  The current version also keeps internal `semantic`, `protocolDetails`, and `unsupported` data private. These remain internal protocol-classification and diagnostic capabilities and can later be exposed through an optional diagnostic result if an explorer or protocol-details view needs them.
107
163
 
@@ -121,23 +177,24 @@ Canonical flow combinations and endpoint rules:
121
177
 
122
178
  | Purpose | Direction | Endpoints |
123
179
  | --- | --- | --- |
124
- | `self` | `self` | `from` and `to` identify the same owner; this includes change and consolidation |
180
+ | `self` | `self` | `to` matches a verified source endpoint; this covers address returns and consolidations without asserting wallet intent |
125
181
  | `transfer` | `out` | both `from` and `to` are present |
126
182
  | `mint` | `in` | no `from`; `to` is present only when a recipient is decoded |
127
183
  | `burn` | `out` | `from` is present; no `to` |
128
184
  | `lock` | `out` | both `from` and `to` are present |
129
185
  | `release` | `in` | both `from` and `to` are present |
130
186
 
131
- The parser never emits public `purpose: "transfer"` with `direction: "self"`; a verified same-owner transfer is normalized to `self/self`. A self flow retains both endpoints even when they are equal. When a consumed asset's owner address or hash is unavailable, `from` uses the verified input `{ txid, vout }`, or `outpoints` for multiple source UTXOs, instead of guessing an address. Explicitly partial `unknown` flows may keep optional endpoints.
187
+ The parser never emits public `purpose: "transfer"` with `direction: "self"`; a verified source-linked return is normalized to `self/self`. A self flow retains both endpoints even when they are equal, but its presence alone does not make the whole transaction a self-transfer. When a consumed asset's source address or hash is unavailable, `from` uses the verified input `{ txid, vout }`, or `outpoints` for multiple source UTXOs, instead of guessing an address. Explicitly partial `unknown` flows may keep optional endpoints.
132
188
 
133
189
  A mint may omit `to` when asset creation is verified but no recipient identity is decoded. PoolNFT create is the canonical example: its Pool Code output is a state anchor, so the contract outpoint remains in `chain.outputs` and is not presented as an asset-flow destination.
134
190
 
135
- Protocol-specific flows retain a generic `purpose` and may include `context`. For example, PiggyBank freeze and OrderBook placement both use `purpose: "lock"`, while `context.protocol` and `context.action` distinguish `piggyBank/freeze` from `orderBook/placeBuy` or `orderBook/placeSell`. Recognized OrderBook context is attached only to placement locks. Match settlement and match fee-recipient payments are plain transfers, cancellation refunds are releases, and recreated partial-fill or update order state is read from `chain.outputs[].script.data.orderBook` rather than exposed as an asset flow. OrderBook fee-recipient payments use `purpose: "transfer"`. PoolNFT reserve snapshots are likewise read from `chain.outputs[].script.data.poolNft`; `assetFlows` contains only the pool's observable transfers, LP mint/burn, self/change, and visible fee flows. Unknown contract carriers remain `purpose: "transfer"` and use `protocol: "unknown"` with `recognized: false`; marker evidence may be included without guessing a protocol name. When no owner address or hash can be extracted from a locking script, the destination is represented by `to.script`.
191
+ Protocol-specific flows retain a generic `purpose` and may include `context`. For example, PiggyBank freeze and OrderBook placement both use `purpose: "lock"`, while `context.protocol` and `context.action` distinguish `piggyBank/freeze` from `orderBook/placeBuy` or `orderBook/placeSell`. Recognized OrderBook context is attached only to placement locks. Match settlement and match fee-recipient payments are plain transfers, cancellation refunds are releases, and recreated partial-fill or update order state is read from `chain.outputs[].script.data.orderBook` rather than exposed as an asset flow. OrderBook fee-recipient payments use `purpose: "transfer"`. PoolNFT reserve snapshots are likewise read from `chain.outputs[].script.data.poolNft`; `assetFlows` contains only the pool's observable transfers, LP mint/burn, source-linked returns, and visible fee flows. Unknown contract carriers remain `purpose: "transfer"` and use `protocol: "unknown"` with `recognized: false`; marker evidence may be included without guessing a protocol name. When no source address or hash can be extracted from a locking script, the destination is represented by `to.script`.
136
192
 
137
193
  Display guidance:
138
194
 
139
195
  - Summarize what a transaction does from `assetFlows`, script facts, and application context.
140
196
  - Use `assetFlows` as the primary source for showing how assets move.
197
+ - Treat `self` as a source-linked structural flow. Do not present it as change or returned funds; omit it from the primary description when external `transfer` flows are also present.
141
198
  - Read `chain.inputs` / `chain.outputs` `script.data` when displaying contract state or protocol tape fields.
142
199
 
143
200
  ## Amount Units
@@ -174,7 +231,7 @@ Current PoolNFT coverage includes the primary paths and several false-positive p
174
231
 
175
232
  - Reserve delta, FT A amount, and fee relationships for both swap directions.
176
233
  - FT A, LP, and TBC relationships for increase / consume liquidity.
177
- - LP change, no-visible-fee cases, and small TBC rounding boundaries during consume.
234
+ - Returned LP amounts, no-visible-fee cases, and small TBC rounding boundaries during consume.
178
235
  - Current FT A reserve validation for merge FT in pool.
179
236
  - Standalone FTLP merges remain FT self flows without recreating PoolNFT state.
180
237
  - Standalone FTLP burns remain FT burn flows without recreating PoolNFT state.
@@ -216,7 +273,7 @@ TBC_POOL_NFT_JOURNAL=/absolute/path/to/pool-nft-broadcast-journal.json \
216
273
  npm run pool-nft:fixtures
217
274
  ```
218
275
 
219
- The generator re-fetches every target raw transaction from testnet, verifies its txid, decodes its prevouts, validates lock flags, rejects public `purpose: "state"` flows, and writes candidates under `scripts/pool-nft-generated/`. Pool reserve state belongs under `chain.outputs[].script.data.poolNft`; only observable transfers, mint/burn, self/change, and visible fees belong in `assetFlows`.
276
+ The generator re-fetches every target raw transaction from testnet, verifies its txid, decodes its prevouts, validates lock flags, rejects public `purpose: "state"` flows, and writes candidates under `scripts/pool-nft-generated/`. Pool reserve state belongs under `chain.outputs[].script.data.poolNft`; only observable transfers, mint/burn, source-linked returns, and visible fees belong in `assetFlows`.
220
277
 
221
278
  ## Notes
222
279
 
@@ -224,7 +281,7 @@ The generator re-fetches every target raw transaction from testnet, verifies its
224
281
  - The SDK does not accept a `network` parameter.
225
282
  - The SDK does not query transactions by `txid`.
226
283
  - The SDK does not fetch input prevouts; callers must provide `inputUtxos`.
227
- - The SDK does not currently expose top-level `transactionType`, `semantic`, `protocolDetails`, or `unsupported` fields.
284
+ - The SDK exposes top-level `classification`; internal `semantic`, `protocolDetails`, and `unsupported` fields remain private.
228
285
  - TBC addresses use canonical TBC address encoding.
229
286
  - `tbc-lib-js` and `tbc-contract` are runtime dependencies installed with the npm package.
230
287
  - `docs/`, `scripts/`, and `tests/` are not published to npm; the package contains only `dist`, `README.md`, and `package.json`.
@@ -1 +1 @@
1
- {"version":3,"file":"decode-tx-raw.d.ts","sourceRoot":"","sources":["../src/decode-tx-raw.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EASlB,MAAM,YAAY,CAAC;AAiapB,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAwE5B"}
1
+ {"version":3,"file":"decode-tx-raw.d.ts","sourceRoot":"","sources":["../src/decode-tx-raw.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EASlB,MAAM,YAAY,CAAC;AAiapB,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAgG5B"}
@@ -3,9 +3,10 @@ import { calculateChainStats, inferScriptKind, parseScriptWithHex } from './core
3
3
  import { parseInputUtxo } from './core/input-utxos.js';
4
4
  import { compressPublicInputs, compressPublicOutputs } from './core/public-chain-compression.js';
5
5
  import { sanitizeScriptForPublicResult } from './core/public-script.js';
6
- import { buildAssetFlows } from './result/index.js';
6
+ import { buildAssetFlows, buildUnspendableFtAssetFlows } from './result/index.js';
7
+ import { buildTransactionClassification } from './result/classification.js';
7
8
  import { buildFallbackSemantic, buildSemantic } from './result/semantic.js';
8
- import { collectFtMovements, inferFtTransactionType } from './protocols/ft/index.js';
9
+ import { collectFtMovements, inferFtTransactionType, validateFtConservation } from './protocols/ft/index.js';
9
10
  import { collectNftMovements, inferNftTransactionType, optimizeCollectionMintOutputs } from './protocols/nft/index.js';
10
11
  import { collectOrderBookOrders, inferOrderBookTransactionType } from './protocols/order-book/index.js';
11
12
  import { collectPiggyBankMovements, inferPiggyBankTransactionType } from './protocols/piggy-bank/index.js';
@@ -307,6 +308,11 @@ export async function decodeTxRaw(txraw, options = {}) {
307
308
  if (!normalizedTxraw || !/^[0-9a-f]+$/.test(normalizedTxraw) || normalizedTxraw.length % 2 !== 0) {
308
309
  throw new Error('Invalid txraw hex');
309
310
  }
311
+ if (options.display?.tbcUnit !== undefined &&
312
+ options.display.tbcUnit !== 'satoshi' &&
313
+ options.display.tbcUnit !== 'tbc') {
314
+ throw new Error('Invalid display.tbcUnit; expected "satoshi" or "tbc"');
315
+ }
310
316
  const txObject = parseTransactionObject(normalizedTxraw);
311
317
  const isCoinbase = isCoinbaseTransaction(txObject);
312
318
  if (!isCoinbase && (!options.inputUtxos || Object.keys(options.inputUtxos).length === 0)) {
@@ -328,12 +334,27 @@ export async function decodeTxRaw(txraw, options = {}) {
328
334
  inferNftTransactionType(nftMovements) ??
329
335
  inferFtTransactionType(inputs, outputs, ftMovements) ??
330
336
  inferTransactionType(protocolAnalyses, protocols, ftMovements);
337
+ const ftConformance = validateFtConservation(transactionType, inputs, ftMovements);
331
338
  const chainStats = calculateChainStats(inputs, outputs, size);
332
- const protocolDetails = buildProtocolDetails(ftMovements, nftMovements, piggyBankMovements, poolNftMovements, orderBookOrders);
339
+ const protocolDetails = buildProtocolDetails(ftConformance.movements, nftMovements, piggyBankMovements, poolNftMovements, orderBookOrders);
333
340
  const unsupported = buildUnsupportedProtocols(inputs, outputs, protocols, protocolDetails);
334
- const semantic = buildSemantic(transactionType, inputs, outputs, ftMovements, nftMovements, orderBookOrders, poolNftMovements) ??
341
+ const semantic = buildSemantic(transactionType, inputs, outputs, ftConformance.movements, nftMovements, orderBookOrders, poolNftMovements) ??
335
342
  buildFallbackSemantic(transactionType, unsupported);
336
- const assetFlows = buildAssetFlows(transactionType, inputs, outputs, ftMovements, nftMovements, piggyBankMovements, poolNftMovements, orderBookOrders, semantic, unsupported);
343
+ const assetFlows = buildAssetFlows(transactionType, inputs, outputs, ftConformance.movements, nftMovements, piggyBankMovements, poolNftMovements, orderBookOrders, semantic, unsupported);
344
+ const unspendableAssetFlows = buildUnspendableFtAssetFlows(ftConformance.unspendableMovements);
345
+ const classification = buildTransactionClassification({
346
+ transactionType,
347
+ semantic,
348
+ protocolDetails,
349
+ unsupported,
350
+ protocolMarkers: protocols,
351
+ inputs,
352
+ outputs,
353
+ assetFlows,
354
+ feeSatoshis: chainStats.fee,
355
+ display: options.display,
356
+ conformanceIssues: ftConformance.issues,
357
+ });
337
358
  return {
338
359
  txid: txObject.hash,
339
360
  version: txObject.version,
@@ -345,6 +366,8 @@ export async function decodeTxRaw(txraw, options = {}) {
345
366
  ...(chainStats.fee === undefined ? {} : { fee: { satoshis: chainStats.fee, satoshisPerKB: chainStats.feeRate ?? 0 } }),
346
367
  },
347
368
  assetFlows,
369
+ ...(unspendableAssetFlows.length ? { unspendableAssetFlows } : {}),
370
+ classification,
348
371
  };
349
372
  }
350
373
  //# sourceMappingURL=decode-tx-raw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"decode-tx-raw.js","sourceRoot":"","sources":["../src/decode-tx-raw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AACjG,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACvH,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACxG,OAAO,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AACrG,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAoD5C,0GAA0G;AAC1G,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AACjD,CAAC;AAED,4FAA4F;AAC5F,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,MAAc;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,GAAG,IAAI,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;IACxE,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;AACnF,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CACvB,OAAe,EACf,QAAgB,EAChB,MAAiG,EACjG,OAAoD;IAEpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAExC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAClF,CAAC;IAEF,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;QACtD,MAAM;QACN,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACrD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACnD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KACpD,CAAC,CAAC,CAAC;IAEJ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,IAAI,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC3B,MAAM,SAAS,GAA8F,EAAE,CAAC;IAChH,MAAM,MAAM,GAAgC,EAAE,CAAC;IAE/C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC;QACvD,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,CAAC;QACZ,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC;QAC7B,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,CAAC;QAEZ,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC1D,WAAW;YACX,cAAc;YACd,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAC5B,MAAM,UAAU,GAAgD,EAAE,CAAC;IACnE,MAAM,OAAO,GAAiC,EAAE,CAAC;IAEjD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,MAAM,IAAI,CAAC,CAAC;QACZ,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC;QAE7B,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ;YACR,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO;QACL,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC;QACjE,OAAO;QACP,SAAS;QACT,MAAM;QACN,OAAO;KACR,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAgC;IACvD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,UAAU,CAAC;AAC1E,CAAC;AAED,SAAS,qBAAqB,CAAC,QAA8B;IAC3D,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO,WAAW,CAAC,QAAQ,EAA0B,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,8GAA8G;AAC9G,SAAS,oBAAoB,CAC3B,gBAAoC,EACpC,eAAyB,EACzB,WAAoC;IAEpC,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAC3C,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CACvF,CAAC;IACF,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAC,eAAe,CAAC;IACzC,CAAC;IAED,IAAI,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC/G,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,wGAAwG;AACxG,SAAS,oBAAoB,CAC3B,WAAoC,EACpC,YAA2B,EAC3B,kBAAuC,EACvC,gBAAmC,EACnC,eAAiC;IAEjC,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC7E,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACpF,MAAM,OAAO,GAAoB;QAC/B,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAa,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,YAAqB,EAAE,SAAS,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtH,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChH,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1G,CAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAoC;IACnE,OAAO,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,wHAAwH;AACxH,SAAS,mCAAmC,CAAC,OAAwB;IACnE,MAAM,EACJ,MAAM,EACN,cAAc,EACd,gBAAgB,EAChB,GAAG,YAAY,EAChB,GAAG,OAAO,CAAC;IAEZ,OAAO;QACL,GAAG,YAAY;QACf,MAAM,EAAE,6BAA6B,CAAC,MAAM,CAAC;QAC7C,GAAG,CAAC,cAAc;YAChB,CAAC,CAAC;gBACA,cAAc,EAAE;oBACd,GAAG,cAAc;oBACjB,MAAM,EAAE,6BAA6B,CAAC,cAAc,CAAC,MAAM,CAAC;iBAC7D;aACF;YACD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,gBAAgB;YAClB,CAAC,CAAC;gBACA,gBAAgB,EAAE;oBAChB,GAAG,gBAAgB;oBACnB,MAAM,EAAE,6BAA6B,CAAC,gBAAgB,CAAC,MAAM,CAAC;iBAC/D;aACF;YACD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,MAAsB;IAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/E,GAAG,KAAK;QACR,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,mCAAmC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAC,CAAC,CAAC;AACN,CAAC;AAED,sHAAsH;AACtH,SAAS,8BAA8B,CAAC,OAAwB;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9D,GAAG,MAAM;QACT,MAAM,EAAE,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC;KACrD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,6FAA6F;AAC7F,SAAS,yBAAyB,CAChC,MAAsB,EACtB,OAAwB,EACxB,eAAyB,EACzB,OAAoC;IAEpC,IAAI,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAA0B,EAAE,CAAC;IAC9C,MAAM,iBAAiB,GAAG,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC;QACjE,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxH,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;YACjD,SAAS;QACX,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACf,UAAU,EAAE,KAAK,CAAC,KAAK;YACvB,MAAM;YACN,MAAM,EAAE,4FAA4F;SACrG,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC5I,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClC,SAAS;QACX,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,IAAI,MAAM,EAAE,CAAC;YAC/C,WAAW,CAAC,IAAI,CAAC;gBACf,WAAW,EAAE,MAAM,CAAC,KAAK;gBACzB,MAAM;gBACN,MAAM,EAAE,qFAAqF;aAC9F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,iHAAiH;AACjH,SAAS,YAAY,CACnB,QAA8B,EAC9B,OAA2B;IAE3B,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAElF,OAAO;YACL,KAAK;YACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,WAAW;YACvB,QAAQ,EAAE,KAAK,CAAC,cAAc;YAC9B,eAAe;YACf,OAAO;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,oGAAoG;AACpG,SAAS,aAAa,CACpB,QAA8B;IAE9B,MAAM,aAAa,GAAoB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC5E,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO;YACL,KAAK;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM;YACN,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO;YAC/C,UAAU,EAAE,eAAe,CAAC,MAAM,CAAC;SACpC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,aAAa;QACb,OAAO,EAAE,6BAA6B,CAAC,aAAa,CAAC;KACtD,CAAC;AACJ,CAAC;AAED,sGAAsG;AACtG,SAAS,oBAAoB,CAC3B,QAA8B,EAC9B,MAAsB,EACtB,aAA8B,EAC9B,OAAwB;IAExB,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC/E,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,kBAAkB,GAAG,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;IAC/F,MAAM,eAAe,GAAG,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAE9F,IAAI,kBAAkB,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9D,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO;QACL,gBAAgB;QAChB,SAAS;QACT,WAAW;QACX,YAAY;QACZ,kBAAkB;QAClB,gBAAgB;QAChB,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAa,EACb,UAA8B,EAAE;IAEhC,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAE9C,IAAI,CAAC,eAAe,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACjG,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,IAAI,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5G,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,6FAA6F,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;IACrI,CAAC;IACD,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,EACJ,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,GAChB,GAAG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,UAAU;QAChC,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,6BAA6B,CAAC,kBAAkB,CAAC;YACjD,2BAA2B,CAAC,gBAAgB,CAAC;YAC7C,6BAA6B,CAAC,eAAe,EAAE,WAAW,EAAE,OAAO,CAAC;YACpE,uBAAuB,CAAC,YAAY,CAAC;YACrC,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;YACpD,oBAAoB,CAAC,gBAAgB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,oBAAoB,CAC1C,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,CAChB,CAAC;IACF,MAAM,WAAW,GAAG,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,aAAa,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,CAAC;QAC5H,qBAAqB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,eAAe,CAChC,eAAe,EACf,MAAM,EACN,OAAO,EACP,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,WAAW,CACZ,CAAC;IACF,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,QAAQ,EAAE,QAAQ,CAAC,SAAS,IAAI,CAAC;QACjC,IAAI;QACJ,KAAK,EAAE;YACL,MAAM,EAAE,oBAAoB,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;YACnE,OAAO,EAAE,qBAAqB,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;YACvE,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC;SACvH;QACD,UAAU;KACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"decode-tx-raw.js","sourceRoot":"","sources":["../src/decode-tx-raw.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { decodeTxRaw } from './decode-tx-raw.js';
2
- export type { DecodeInputUtxo, DecodeTxRawOptions, DecodeTxRawResult, ChainLayer, CollectionTapeData, CompactPublicAsm, CompactPublicHex, DecodedInput, DecodedOutput, AssetFlow, AssetFlowContext, AssetFlowDirection, AssetFlowEndpoint, AssetFlowOutpoint, AssetFlowPurpose, FungibleTokenMovement, InputUTXODetail, NftMovement, NftTapeData, OrderBookData, OrderBookOrder, PiggyBankData, PiggyBankMovement, PoolNftMovement, PoolNftTapeData, PublicScriptHex, PublicScriptDetail, PublicCollectionTapeData, PublicNftTapeData, ProtocolDetails, ScriptKind, ScriptType, ScriptDetail, ScriptOpReturnData, TransactionAmount, TransactionAsset, UnsupportedProtocol, } from './types.js';
2
+ export { renderTransactionDescription } from './render-transaction-description.js';
3
+ export type { DecodeInputUtxo, DecodeDisplayOptions, DecodeTxRawOptions, DecodeTxRawResult, ChainLayer, CollectionTapeData, CompactPublicAsm, CompactPublicHex, DecodedInput, DecodedOutput, AssetFlow, AssetFlowContext, AssetFlowDirection, AssetFlowEndpoint, AssetFlowOutpoint, AssetFlowPurpose, FungibleTokenMovement, InputUTXODetail, NftMovement, NftTapeData, OrderBookData, OrderBookOrder, PiggyBankData, PiggyBankMovement, PoolNftMovement, PoolNftTapeData, PublicScriptHex, PublicScriptDetail, PublicCollectionTapeData, PublicNftTapeData, ProtocolDetails, ScriptKind, ScriptType, ScriptDetail, ScriptOpReturnData, TransactionAmount, TransactionAction, TransactionActionMap, TransactionAsset, TransactionClassification, TransactionClassificationBase, TransactionConformance, TransactionProtocol, TbcDisplayUnit, UnspendableAssetFlow, UnsupportedProtocol, } from './types.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC;AACnF,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,yBAAyB,EACzB,6BAA6B,EAC7B,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
1
  // Public SDK entry point: export only stable APIs, types, and chain constants.
2
2
  export { decodeTxRaw } from './decode-tx-raw.js';
3
+ export { renderTransactionDescription } from './render-transaction-description.js';
3
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,qCAAqC,CAAC"}
@@ -4,4 +4,16 @@ import type { ProtocolDecoder } from '../types.js';
4
4
  export declare const ftProtocolDecoder: ProtocolDecoder;
5
5
  export declare function collectFtMovements(outputs: DecodedOutput[], inputs?: DecodedInput[], txid?: string): FungibleTokenMovement[];
6
6
  export declare function inferFtTransactionType(inputs: DecodedInput[], outputs: DecodedOutput[], movements: FungibleTokenMovement[]): string | undefined;
7
+ export interface FtConformanceIssue {
8
+ protocol: 'ft';
9
+ conformance: 'nonstandard' | 'indeterminate';
10
+ code: 'FT_OUTPUT_AMOUNT_EXCEEDS_VERIFIED_INPUT' | 'INSUFFICIENT_FT_AMOUNT_EVIDENCE';
11
+ description: string;
12
+ }
13
+ export interface FtConformanceResult {
14
+ movements: FungibleTokenMovement[];
15
+ unspendableMovements: FungibleTokenMovement[];
16
+ issues: FtConformanceIssue[];
17
+ }
18
+ export declare function validateFtConservation(transactionType: string, inputs: DecodedInput[], movements: FungibleTokenMovement[]): FtConformanceResult;
7
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/protocols/ft/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,aAAa,CAAC;AAMrE,eAAO,MAAM,iBAAiB,EAAE,eAoB/B,CAAC;AAsUF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,MAAM,GAAE,YAAY,EAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,qBAAqB,EAAE,CA8GhI;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,EAAE,aAAa,EAAE,EACxB,SAAS,EAAE,qBAAqB,EAAE,sBAsCnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/protocols/ft/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAoB,eAAe,EAAE,MAAM,aAAa,CAAC;AAMrE,eAAO,MAAM,iBAAiB,EAAE,eAoB/B,CAAC;AA8UF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,MAAM,GAAE,YAAY,EAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAqHhI;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,EAAE,aAAa,EAAE,EACxB,SAAS,EAAE,qBAAqB,EAAE,sBAwDnC;AAqBD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,aAAa,GAAG,eAAe,CAAC;IAC7C,IAAI,EAAE,yCAAyC,GAAG,iCAAiC,CAAC;IACpF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,oBAAoB,EAAE,qBAAqB,EAAE,CAAC;IAC9C,MAAM,EAAE,kBAAkB,EAAE,CAAC;CAC9B;AAcD,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,EAAE,qBAAqB,EAAE,GACjC,mBAAmB,CA8FrB"}
@@ -145,12 +145,6 @@ function coinSupplySnapshot(nftTape) {
145
145
  coinDecimal: numberValue(nftTape?.coinDecimal),
146
146
  };
147
147
  }
148
- function inputCoinSupplySnapshots(inputs) {
149
- return inputs.flatMap((input) => [
150
- coinSupplySnapshot(input.prevout?.script.data?.nftTape),
151
- coinSupplySnapshot(input.prevout?.associatedTape?.script.data?.nftTape),
152
- ].filter((snapshot) => snapshot !== undefined));
153
- }
154
148
  function outputCoinSupplySnapshots(outputs) {
155
149
  return outputs
156
150
  .map((output) => coinSupplySnapshot(output.script.data?.nftTape))
@@ -199,21 +193,29 @@ function hasMergedAmountSlots(movement) {
199
193
  }
200
194
  }).length > 1;
201
195
  }
202
- function isStablecoinMintMovement(inputs, outputs, movement) {
196
+ function stablecoinMintSourceInput(inputs, outputs, movement) {
203
197
  if (!movement.isStableCoin) {
204
- return false;
198
+ return undefined;
205
199
  }
206
200
  let rawAmount;
207
201
  try {
208
202
  rawAmount = BigInt(movement.rawAmount);
209
203
  }
210
204
  catch {
211
- return false;
205
+ return undefined;
212
206
  }
213
- return inputCoinSupplySnapshots(inputs).some((previous) => coinDecimalMatches(previous, movement) &&
214
- outputCoinSupplySnapshots(outputs).some((current) => current.identity === previous.identity &&
207
+ const currentSnapshots = outputCoinSupplySnapshots(outputs);
208
+ return inputs.find((input) => [
209
+ coinSupplySnapshot(input.prevout?.script.data?.nftTape),
210
+ coinSupplySnapshot(input.prevout?.associatedTape?.script.data?.nftTape),
211
+ ].some((previous) => previous !== undefined &&
212
+ coinDecimalMatches(previous, movement) &&
213
+ currentSnapshots.some((current) => current.identity === previous.identity &&
215
214
  coinDecimalMatches(current, movement) &&
216
- current.supply - previous.supply === rawAmount));
215
+ current.supply - previous.supply === rawAmount)));
216
+ }
217
+ function isStablecoinMintMovement(inputs, outputs, movement) {
218
+ return stablecoinMintSourceInput(inputs, outputs, movement) !== undefined;
217
219
  }
218
220
  function isOrderBookContext(inputs, outputs) {
219
221
  return outputs.some((output) => Boolean(output.script.data?.orderBook)) ||
@@ -321,6 +323,12 @@ export function collectFtMovements(outputs, inputs = [], txid) {
321
323
  if (!amountSlotsSumMatchesRawAmount(movement)) {
322
324
  continue;
323
325
  }
326
+ if (!movement.contractId && movement.isStableCoin) {
327
+ const certificateContractId = stablecoinMintSourceInput(inputs, outputs, movement)?.prevout?.contractId;
328
+ if (certificateContractId) {
329
+ movement.contractId = certificateContractId;
330
+ }
331
+ }
324
332
  outputMovements.push({
325
333
  codeIdentity,
326
334
  movement,
@@ -379,16 +387,131 @@ export function inferFtTransactionType(inputs, outputs, movements) {
379
387
  if (isMint) {
380
388
  return `${prefix} mint`;
381
389
  }
390
+ // A verified token merge can carry ordinary TBC outputs, but the merged
391
+ // amount slots remain the primary action.
392
+ if (movements.length === 1 && hasMergedSlots) {
393
+ return `${prefix} merge`;
394
+ }
382
395
  const firstReceiver = firstMovement?.receiver;
383
- const nativeOutputs = outputs.filter((output) => output.satoshis > 500 && output.address && output.script.type === ScriptType.P2PKH);
384
- const hasNativeTransfer = nativeOutputs.some((output) => firstReceiver && output.address === firstReceiver);
385
- const hasNativeChangeCandidate = nativeOutputs.some((output) => firstReceiver && output.address !== firstReceiver);
396
+ const nativeInputAddresses = new Set(inputs
397
+ .filter((input) => input.prevout?.script.type === ScriptType.P2PKH ||
398
+ input.prevout?.script.type === ScriptType.MULTISIG)
399
+ .flatMap((input) => [input.prevout?.address, input.prevout?.script.address])
400
+ .filter((address) => Boolean(address)));
401
+ const nativeOutputs = outputs.filter((output) => output.satoshis > 500 && Boolean(output.address) && output.script.type === ScriptType.P2PKH);
402
+ const hasNativeTransfer = nativeOutputs.some((output) => output.address === firstReceiver ||
403
+ (nativeInputAddresses.size > 0 && !nativeInputAddresses.has(output.address)));
404
+ const hasNativeChangeCandidate = nativeOutputs.some((output) => nativeInputAddresses.has(output.address) ||
405
+ Boolean(firstReceiver && output.address !== firstReceiver));
386
406
  if (hasNativeTransfer && (movements.length > 1 || hasNativeChangeCandidate || inputs.length <= 1)) {
387
407
  return `${prefix} transfer with TBC`;
388
408
  }
389
- if (movements.length === 1 && hasMergedSlots) {
390
- return `${prefix} merge`;
391
- }
392
409
  return `${prefix} transfer`;
393
410
  }
411
+ const CONSERVING_FT_TRANSACTION_TYPES = new Set([
412
+ 'FT transfer',
413
+ 'FT transfer with TBC',
414
+ 'FT merge',
415
+ ]);
416
+ function verifiedFtInputRawAmount(input, contractId) {
417
+ if (!isVerifiedFtCodePrevout(input) || input.prevout?.contractId !== contractId) {
418
+ return undefined;
419
+ }
420
+ const tape = input.prevout.associatedTape?.script.data?.ftTape;
421
+ if (!tape || tape.isStableCoin) {
422
+ return undefined;
423
+ }
424
+ return parseNonNegativeBigInt(tape.rawAmount);
425
+ }
426
+ function ftActionSubject(transactionType) {
427
+ if (transactionType === 'FT merge') {
428
+ return 'an FT merge';
429
+ }
430
+ if (transactionType === 'FT transfer with TBC') {
431
+ return 'a combined FT and TBC transfer';
432
+ }
433
+ return 'an FT transfer';
434
+ }
435
+ export function validateFtConservation(transactionType, inputs, movements) {
436
+ if (!CONSERVING_FT_TRANSACTION_TYPES.has(transactionType)) {
437
+ return { movements, unspendableMovements: [], issues: [] };
438
+ }
439
+ const movementsByContract = new Map();
440
+ let hasIncompleteEvidence = false;
441
+ for (const movement of movements) {
442
+ if (movement.isStableCoin || movement.isFtLp) {
443
+ continue;
444
+ }
445
+ if (!movement.contractId) {
446
+ hasIncompleteEvidence = true;
447
+ continue;
448
+ }
449
+ const grouped = movementsByContract.get(movement.contractId) ?? [];
450
+ grouped.push(movement);
451
+ movementsByContract.set(movement.contractId, grouped);
452
+ }
453
+ const ftInputCandidates = inputs.filter(isFtCodePrevoutCandidate);
454
+ const inputsWithUnknownContract = ftInputCandidates.filter((input) => !input.prevout?.contractId);
455
+ const rejectedOutputIndexes = new Set();
456
+ let hasConservationViolation = false;
457
+ for (const [contractId, contractMovements] of movementsByContract) {
458
+ const contractInputs = ftInputCandidates.filter((input) => input.prevout?.contractId === contractId);
459
+ const hasPossiblyMatchingUnknownInput = inputsWithUnknownContract.some((input) => {
460
+ const tape = input.prevout?.associatedTape?.script.data?.ftTape;
461
+ if (!tape || tape.isStableCoin) {
462
+ return true;
463
+ }
464
+ return contractMovements.some((movement) => movement.symbol === tape.symbol &&
465
+ movement.name === tape.name &&
466
+ movement.decimal === tape.decimal);
467
+ });
468
+ if (!contractInputs.length || hasPossiblyMatchingUnknownInput) {
469
+ hasIncompleteEvidence = true;
470
+ continue;
471
+ }
472
+ const parsedInputAmounts = contractInputs.map((input) => verifiedFtInputRawAmount(input, contractId));
473
+ if (parsedInputAmounts.some((amount) => amount === undefined)) {
474
+ hasIncompleteEvidence = true;
475
+ continue;
476
+ }
477
+ const inputAmounts = parsedInputAmounts.filter((amount) => amount !== undefined);
478
+ const inputRaw = inputAmounts.reduce((sum, amount) => sum + amount, 0n);
479
+ const outputAmounts = contractMovements
480
+ .map((movement) => parseNonNegativeBigInt(movement.rawAmount));
481
+ if (outputAmounts.some((amount) => amount === undefined)) {
482
+ hasIncompleteEvidence = true;
483
+ continue;
484
+ }
485
+ const declaredOutputRaw = outputAmounts
486
+ .reduce((sum, amount) => sum + (amount ?? 0n), 0n);
487
+ if (declaredOutputRaw <= inputRaw) {
488
+ continue;
489
+ }
490
+ hasConservationViolation = true;
491
+ contractMovements.forEach((movement) => rejectedOutputIndexes.add(movement.outputIndex));
492
+ }
493
+ const subject = ftActionSubject(transactionType);
494
+ const issues = [];
495
+ if (hasConservationViolation) {
496
+ issues.push({
497
+ protocol: 'ft',
498
+ conformance: 'nonstandard',
499
+ code: 'FT_OUTPUT_AMOUNT_EXCEEDS_VERIFIED_INPUT',
500
+ description: `Looks like ${subject}, but the declared token amount exceeds the verified available balance.`,
501
+ });
502
+ }
503
+ if (hasIncompleteEvidence) {
504
+ issues.push({
505
+ protocol: 'ft',
506
+ conformance: 'indeterminate',
507
+ code: 'INSUFFICIENT_FT_AMOUNT_EVIDENCE',
508
+ description: `Likely ${subject}, but the FT input amounts needed to verify token conservation are incomplete.`,
509
+ });
510
+ }
511
+ return {
512
+ movements: movements.filter((movement) => !rejectedOutputIndexes.has(movement.outputIndex)),
513
+ unspendableMovements: movements.filter((movement) => rejectedOutputIndexes.has(movement.outputIndex)),
514
+ issues,
515
+ };
516
+ }
394
517
  //# sourceMappingURL=index.js.map