tbc-tx-parser 0.1.10 → 0.3.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.
Files changed (62) hide show
  1. package/README.md +93 -9
  2. package/dist/core/asset-identity.d.ts +3 -0
  3. package/dist/core/asset-identity.d.ts.map +1 -0
  4. package/dist/core/asset-identity.js +3 -0
  5. package/dist/core/asset-identity.js.map +1 -0
  6. package/dist/core/input-utxos.d.ts.map +1 -1
  7. package/dist/core/input-utxos.js +4 -1
  8. package/dist/core/input-utxos.js.map +1 -1
  9. package/dist/core/public-script.d.ts.map +1 -1
  10. package/dist/core/public-script.js +7 -2
  11. package/dist/core/public-script.js.map +1 -1
  12. package/dist/decode-tx-raw.d.ts.map +1 -1
  13. package/dist/decode-tx-raw.js +8 -2
  14. package/dist/decode-tx-raw.js.map +1 -1
  15. package/dist/protocols/ft/index.d.ts.map +1 -1
  16. package/dist/protocols/ft/index.js +11 -0
  17. package/dist/protocols/ft/index.js.map +1 -1
  18. package/dist/protocols/modern/amm.d.ts +32 -0
  19. package/dist/protocols/modern/amm.d.ts.map +1 -0
  20. package/dist/protocols/modern/amm.js +79 -0
  21. package/dist/protocols/modern/amm.js.map +1 -0
  22. package/dist/protocols/modern/analyze.d.ts +7 -0
  23. package/dist/protocols/modern/analyze.d.ts.map +1 -0
  24. package/dist/protocols/modern/analyze.js +887 -0
  25. package/dist/protocols/modern/analyze.js.map +1 -0
  26. package/dist/protocols/modern/codecs.d.ts +87 -0
  27. package/dist/protocols/modern/codecs.d.ts.map +1 -0
  28. package/dist/protocols/modern/codecs.js +251 -0
  29. package/dist/protocols/modern/codecs.js.map +1 -0
  30. package/dist/protocols/nft/index.d.ts.map +1 -1
  31. package/dist/protocols/nft/index.js +2 -1
  32. package/dist/protocols/nft/index.js.map +1 -1
  33. package/dist/protocols/piggy-bank/index.js +1 -1
  34. package/dist/protocols/piggy-bank/index.js.map +1 -1
  35. package/dist/protocols/pool-nft/facts.js +1 -1
  36. package/dist/protocols/pool-nft/facts.js.map +1 -1
  37. package/dist/protocols/pool-nft/fees.d.ts.map +1 -1
  38. package/dist/protocols/pool-nft/fees.js +2 -1
  39. package/dist/protocols/pool-nft/fees.js.map +1 -1
  40. package/dist/result/classification-description.d.ts.map +1 -1
  41. package/dist/result/classification-description.js +12 -1
  42. package/dist/result/classification-description.js.map +1 -1
  43. package/dist/result/classification.d.ts.map +1 -1
  44. package/dist/result/classification.js +4 -0
  45. package/dist/result/classification.js.map +1 -1
  46. package/dist/result/index.d.ts.map +1 -1
  47. package/dist/result/index.js +2 -2
  48. package/dist/result/index.js.map +1 -1
  49. package/dist/script-parser/contracts.js +1 -1
  50. package/dist/script-parser/contracts.js.map +1 -1
  51. package/dist/script-parser.d.ts.map +1 -1
  52. package/dist/script-parser.js +34 -1
  53. package/dist/script-parser.js.map +1 -1
  54. package/dist/types/protocol.d.ts +11 -2
  55. package/dist/types/protocol.d.ts.map +1 -1
  56. package/dist/types/result.d.ts +14 -5
  57. package/dist/types/result.d.ts.map +1 -1
  58. package/dist/types/script.d.ts +10 -2
  59. package/dist/types/script.d.ts.map +1 -1
  60. package/dist/types/semantic.d.ts +9 -0
  61. package/dist/types/semantic.d.ts.map +1 -1
  62. package/package.json +11 -6
@@ -0,0 +1,79 @@
1
+ import { createRequire } from 'node:module';
2
+ import { createHash } from 'node:crypto';
3
+ import sdk from 'tbc-contract';
4
+ import { tbc } from '../../adapters/tbc-lib.js';
5
+ const require = createRequire(import.meta.url);
6
+ const currentCode = require('tbc-contract/lib/util/tbc-amm/artifacts.js');
7
+ const legacyCode = require('tbc-contract-172/lib/util/tbc-amm/artifacts.js');
8
+ // Import only the historical codecs, avoiding the old package's global root initializer.
9
+ const legacyTape = require('tbc-contract-172/lib/util/tbc-amm/tape.js');
10
+ const legacyFees = require('tbc-contract-172/lib/util/tbc-amm/fees.js');
11
+ /** Each pinned parser authenticates the complete compiler template, including its tail. */
12
+ export function poolCode(hex) {
13
+ for (const [generation, codec] of [['1.7.3', currentCode], ['1.7.2', legacyCode]]) {
14
+ try {
15
+ return { ...codec.parsePoolCode(Buffer.from(hex, 'hex')), generation };
16
+ }
17
+ catch { /* Another generation or an unsupported/modified script. */ }
18
+ }
19
+ return undefined;
20
+ }
21
+ export function poolTape(hex) {
22
+ try {
23
+ const bytes = Buffer.from(hex, 'hex');
24
+ if (bytes.length === 143)
25
+ return { ...legacyTape.decodePoolTape(bytes), generation: '1.7.2' };
26
+ if (bytes.length === 168)
27
+ return { ...sdk.decodePoolTape(bytes), generation: '1.7.3' };
28
+ }
29
+ catch { /* Invalid framing or fields. */ }
30
+ return undefined;
31
+ }
32
+ /** Normalize an old plan to equivalent explicit rates without inventing a plan for new pools. */
33
+ export function poolFeePolicy(tape) {
34
+ if (tape.generation === '1.7.3')
35
+ return sdk.resolveSwapFeePolicy(tape, new tbc.Address(tape.feeAddress, tbc.Networks.livenet).toString());
36
+ const old = legacyFees.resolveSwapFeePolicy(tape.lpPlan, tape.serviceFeeRate);
37
+ return sdk.resolveSwapFeePolicy({
38
+ lpFeeRate: old.lpFeeBps,
39
+ taxFeeRate: 0,
40
+ serviceProviderFeeRate: old.totalFeeBps - old.lpFeeBps,
41
+ protocolFeeRate: 0,
42
+ }, old.serviceFeeAddress);
43
+ }
44
+ export function poolConfigurationIssues(code, tape) {
45
+ const issues = [];
46
+ if (code.generation !== tape.generation)
47
+ issues.push('POOL_CODE_TAPE_VERSION_MISMATCH');
48
+ const controlled = code.authorization.kind === 'controller';
49
+ if (tape.withSwapHashLock !== controlled || tape.withLpHashLock !== controlled)
50
+ issues.push('POOL_AUTHORIZATION_MISMATCH');
51
+ try {
52
+ const policy = poolFeePolicy(tape);
53
+ const script = tbc.Script.buildPublicKeyHashOut(policy.serviceFeeAddress).toBuffer();
54
+ if (!createHash('sha256').update(script).digest().equals(code.tbcFeeScriptHash))
55
+ issues.push('POOL_FEE_RECIPIENT_MISMATCH');
56
+ }
57
+ catch {
58
+ issues.push('INVALID_POOL_FEE_CONFIGURATION');
59
+ }
60
+ return issues;
61
+ }
62
+ export function poolMetadata(code, tape) {
63
+ const flags = { withLock: tape.withSwapHashLock, withLockTime: tape.withLpLocktime };
64
+ if (tape.generation === '1.7.2')
65
+ return { serviceFeeRate: tape.serviceFeeRate, lpPlan: tape.lpPlan, ...flags };
66
+ return {
67
+ serviceFeeRate: tape.lpFeeRate + tape.taxFeeRate + tape.serviceProviderFeeRate + tape.protocolFeeRate,
68
+ lpFeeRate: tape.lpFeeRate,
69
+ taxFeeRate: tape.taxFeeRate,
70
+ serviceProviderFeeRate: tape.serviceProviderFeeRate,
71
+ protocolFeeRate: tape.protocolFeeRate,
72
+ feeAddress: new tbc.Address(tape.feeAddress, tbc.Networks.livenet).toString(),
73
+ serviceProviderTagHex: code.serviceProviderTag?.toString('hex'),
74
+ ...flags,
75
+ };
76
+ }
77
+ // Both generations use the same reserve equations; normalized policies preserve old rounding.
78
+ export const poolMath = require('tbc-contract/lib/util/tbc-amm/math.js');
79
+ //# sourceMappingURL=amm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amm.js","sourceRoot":"","sources":["../../../src/protocols/modern/amm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { AssetFlow, DecodedInput, DecodedOutput, TransactionClassification } from '../../types.js';
2
+ /** Interpret modern versions within the established families, keeping the complete output ledger. */
3
+ export declare function analyzeModern(inputs: DecodedInput[], outputs: DecodedOutput[], txid: string, locktime: number, baseFlows: AssetFlow[], baseClassification: TransactionClassification): {
4
+ assetFlows: AssetFlow[];
5
+ classification: TransactionClassification;
6
+ } | undefined;
7
+ //# sourceMappingURL=analyze.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../src/protocols/modern/analyze.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EAET,YAAY,EACZ,aAAa,EACb,yBAAyB,EAE1B,MAAM,gBAAgB,CAAC;AAwGxB,qGAAqG;AACrG,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,EAAE,aAAa,EAAE,EACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,EAAE,EACtB,kBAAkB,EAAE,yBAAyB,GAC5C;IAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IAAC,cAAc,EAAE,yBAAyB,CAAA;CAAE,GAAG,SAAS,CA64BpF"}