tbc-tx-parser 0.1.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 (183) hide show
  1. package/README.md +214 -0
  2. package/dist/adapters/partial-sha256.d.ts +2 -0
  3. package/dist/adapters/partial-sha256.d.ts.map +1 -0
  4. package/dist/adapters/partial-sha256.js +5 -0
  5. package/dist/adapters/partial-sha256.js.map +1 -0
  6. package/dist/adapters/tbc-lib.d.ts +4 -0
  7. package/dist/adapters/tbc-lib.d.ts.map +1 -0
  8. package/dist/adapters/tbc-lib.js +4 -0
  9. package/dist/adapters/tbc-lib.js.map +1 -0
  10. package/dist/constants/chain.d.ts +4 -0
  11. package/dist/constants/chain.d.ts.map +1 -0
  12. package/dist/constants/chain.js +7 -0
  13. package/dist/constants/chain.js.map +1 -0
  14. package/dist/core/chain.d.ts +10 -0
  15. package/dist/core/chain.d.ts.map +1 -0
  16. package/dist/core/chain.js +41 -0
  17. package/dist/core/chain.js.map +1 -0
  18. package/dist/core/input-utxos.d.ts +3 -0
  19. package/dist/core/input-utxos.d.ts.map +1 -0
  20. package/dist/core/input-utxos.js +69 -0
  21. package/dist/core/input-utxos.js.map +1 -0
  22. package/dist/core/public-chain-compression.d.ts +4 -0
  23. package/dist/core/public-chain-compression.d.ts.map +1 -0
  24. package/dist/core/public-chain-compression.js +87 -0
  25. package/dist/core/public-chain-compression.js.map +1 -0
  26. package/dist/core/public-script.d.ts +4 -0
  27. package/dist/core/public-script.d.ts.map +1 -0
  28. package/dist/core/public-script.js +94 -0
  29. package/dist/core/public-script.js.map +1 -0
  30. package/dist/decode-tx-raw.d.ts +3 -0
  31. package/dist/decode-tx-raw.d.ts.map +1 -0
  32. package/dist/decode-tx-raw.js +350 -0
  33. package/dist/decode-tx-raw.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +3 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/protocols/ft/index.d.ts +7 -0
  39. package/dist/protocols/ft/index.d.ts.map +1 -0
  40. package/dist/protocols/ft/index.js +393 -0
  41. package/dist/protocols/ft/index.js.map +1 -0
  42. package/dist/protocols/index.d.ts +5 -0
  43. package/dist/protocols/index.d.ts.map +1 -0
  44. package/dist/protocols/index.js +61 -0
  45. package/dist/protocols/index.js.map +1 -0
  46. package/dist/protocols/nft/index.d.ts +8 -0
  47. package/dist/protocols/nft/index.d.ts.map +1 -0
  48. package/dist/protocols/nft/index.js +335 -0
  49. package/dist/protocols/nft/index.js.map +1 -0
  50. package/dist/protocols/nft/media.js.map +1 -0
  51. package/dist/protocols/order-book/actions.d.ts +7 -0
  52. package/dist/protocols/order-book/actions.d.ts.map +1 -0
  53. package/dist/protocols/order-book/actions.js +102 -0
  54. package/dist/protocols/order-book/actions.js.map +1 -0
  55. package/dist/protocols/order-book/facts.d.ts +7 -0
  56. package/dist/protocols/order-book/facts.d.ts.map +1 -0
  57. package/dist/protocols/order-book/facts.js +81 -0
  58. package/dist/protocols/order-book/facts.js.map +1 -0
  59. package/dist/protocols/order-book/identity.d.ts +3 -0
  60. package/dist/protocols/order-book/identity.d.ts.map +1 -0
  61. package/dist/protocols/order-book/identity.js +46 -0
  62. package/dist/protocols/order-book/identity.js.map +1 -0
  63. package/dist/protocols/order-book/index.d.ts +12 -0
  64. package/dist/protocols/order-book/index.d.ts.map +1 -0
  65. package/dist/protocols/order-book/index.js +34 -0
  66. package/dist/protocols/order-book/index.js.map +1 -0
  67. package/dist/protocols/order-book/settlement.d.ts +10 -0
  68. package/dist/protocols/order-book/settlement.d.ts.map +1 -0
  69. package/dist/protocols/order-book/settlement.js +318 -0
  70. package/dist/protocols/order-book/settlement.js.map +1 -0
  71. package/dist/protocols/order-book/types.d.ts +101 -0
  72. package/dist/protocols/order-book/types.d.ts.map +1 -0
  73. package/dist/protocols/order-book/types.js +2 -0
  74. package/dist/protocols/order-book/types.js.map +1 -0
  75. package/dist/protocols/piggy-bank/index.d.ts +7 -0
  76. package/dist/protocols/piggy-bank/index.d.ts.map +1 -0
  77. package/dist/protocols/piggy-bank/index.js +91 -0
  78. package/dist/protocols/piggy-bank/index.js.map +1 -0
  79. package/dist/protocols/pool-nft/actions.d.ts +15 -0
  80. package/dist/protocols/pool-nft/actions.d.ts.map +1 -0
  81. package/dist/protocols/pool-nft/actions.js +90 -0
  82. package/dist/protocols/pool-nft/actions.js.map +1 -0
  83. package/dist/protocols/pool-nft/amounts.d.ts +10 -0
  84. package/dist/protocols/pool-nft/amounts.d.ts.map +1 -0
  85. package/dist/protocols/pool-nft/amounts.js +45 -0
  86. package/dist/protocols/pool-nft/amounts.js.map +1 -0
  87. package/dist/protocols/pool-nft/constants.d.ts +15 -0
  88. package/dist/protocols/pool-nft/constants.d.ts.map +1 -0
  89. package/dist/protocols/pool-nft/constants.js +27 -0
  90. package/dist/protocols/pool-nft/constants.js.map +1 -0
  91. package/dist/protocols/pool-nft/facts.d.ts +11 -0
  92. package/dist/protocols/pool-nft/facts.d.ts.map +1 -0
  93. package/dist/protocols/pool-nft/facts.js +113 -0
  94. package/dist/protocols/pool-nft/facts.js.map +1 -0
  95. package/dist/protocols/pool-nft/fees.d.ts +14 -0
  96. package/dist/protocols/pool-nft/fees.d.ts.map +1 -0
  97. package/dist/protocols/pool-nft/fees.js +161 -0
  98. package/dist/protocols/pool-nft/fees.js.map +1 -0
  99. package/dist/protocols/pool-nft/index.d.ts +4 -0
  100. package/dist/protocols/pool-nft/index.d.ts.map +1 -0
  101. package/dist/protocols/pool-nft/index.js +19 -0
  102. package/dist/protocols/pool-nft/index.js.map +1 -0
  103. package/dist/protocols/pool-nft/movements.d.ts +5 -0
  104. package/dist/protocols/pool-nft/movements.d.ts.map +1 -0
  105. package/dist/protocols/pool-nft/movements.js +804 -0
  106. package/dist/protocols/pool-nft/movements.js.map +1 -0
  107. package/dist/protocols/pool-nft/selectors.d.ts +40 -0
  108. package/dist/protocols/pool-nft/selectors.d.ts.map +1 -0
  109. package/dist/protocols/pool-nft/selectors.js +173 -0
  110. package/dist/protocols/pool-nft/selectors.js.map +1 -0
  111. package/dist/protocols/pool-nft/types.d.ts +34 -0
  112. package/dist/protocols/pool-nft/types.d.ts.map +1 -0
  113. package/dist/protocols/pool-nft/types.js +2 -0
  114. package/dist/protocols/pool-nft/types.js.map +1 -0
  115. package/dist/protocols/tbc/index.d.ts +3 -0
  116. package/dist/protocols/tbc/index.d.ts.map +1 -0
  117. package/dist/protocols/tbc/index.js +21 -0
  118. package/dist/protocols/tbc/index.js.map +1 -0
  119. package/dist/protocols/types.d.ts +15 -0
  120. package/dist/protocols/types.d.ts.map +1 -0
  121. package/dist/protocols/types.js +2 -0
  122. package/dist/protocols/types.js.map +1 -0
  123. package/dist/result/index.d.ts +7 -0
  124. package/dist/result/index.d.ts.map +1 -0
  125. package/dist/result/index.js +869 -0
  126. package/dist/result/index.js.map +1 -0
  127. package/dist/result/semantic.d.ts +6 -0
  128. package/dist/result/semantic.d.ts.map +1 -0
  129. package/dist/result/semantic.js +950 -0
  130. package/dist/result/semantic.js.map +1 -0
  131. package/dist/script-parser/contracts.d.ts +7 -0
  132. package/dist/script-parser/contracts.d.ts.map +1 -0
  133. package/dist/script-parser/contracts.js +104 -0
  134. package/dist/script-parser/contracts.js.map +1 -0
  135. package/dist/script-parser/op-return.d.ts +8 -0
  136. package/dist/script-parser/op-return.d.ts.map +1 -0
  137. package/dist/script-parser/op-return.js +315 -0
  138. package/dist/script-parser/op-return.js.map +1 -0
  139. package/dist/script-parser/origin.d.ts +6 -0
  140. package/dist/script-parser/origin.d.ts.map +1 -0
  141. package/dist/script-parser/origin.js +68 -0
  142. package/dist/script-parser/origin.js.map +1 -0
  143. package/dist/script-parser.d.ts +3 -0
  144. package/dist/script-parser.d.ts.map +1 -0
  145. package/dist/script-parser.js +183 -0
  146. package/dist/script-parser.js.map +1 -0
  147. package/dist/types/protocol.d.ts +175 -0
  148. package/dist/types/protocol.d.ts.map +1 -0
  149. package/dist/types/protocol.js +2 -0
  150. package/dist/types/protocol.js.map +1 -0
  151. package/dist/types/result.d.ts +167 -0
  152. package/dist/types/result.d.ts.map +1 -0
  153. package/dist/types/result.js +2 -0
  154. package/dist/types/result.js.map +1 -0
  155. package/dist/types/script.d.ts +180 -0
  156. package/dist/types/script.d.ts.map +1 -0
  157. package/dist/types/script.js +9 -0
  158. package/dist/types/script.js.map +1 -0
  159. package/dist/types/semantic.d.ts +94 -0
  160. package/dist/types/semantic.d.ts.map +1 -0
  161. package/dist/types/semantic.js +2 -0
  162. package/dist/types/semantic.js.map +1 -0
  163. package/dist/types.d.ts +6 -0
  164. package/dist/types.d.ts.map +1 -0
  165. package/dist/types.js +4 -0
  166. package/dist/types.js.map +1 -0
  167. package/dist/utils/asm-converter.d.ts +7 -0
  168. package/dist/utils/asm-converter.d.ts.map +1 -0
  169. package/dist/utils/asm-converter.js +105 -0
  170. package/dist/utils/asm-converter.js.map +1 -0
  171. package/dist/utils/binary.d.ts +3 -0
  172. package/dist/utils/binary.d.ts.map +1 -0
  173. package/dist/utils/binary.js +17 -0
  174. package/dist/utils/binary.js.map +1 -0
  175. package/dist/utils/multi-sig.d.ts +9 -0
  176. package/dist/utils/multi-sig.d.ts.map +1 -0
  177. package/dist/utils/multi-sig.js +125 -0
  178. package/dist/utils/multi-sig.js.map +1 -0
  179. package/dist/utils/token-amount.d.ts +3 -0
  180. package/dist/utils/token-amount.d.ts.map +1 -0
  181. package/dist/utils/token-amount.js +37 -0
  182. package/dist/utils/token-amount.js.map +1 -0
  183. package/package.json +47 -0
@@ -0,0 +1,3 @@
1
+ import type { ScriptDetail } from './types.js';
2
+ export declare function parseScript(scriptHex: string): ScriptDetail;
3
+ //# sourceMappingURL=script-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-parser.d.ts","sourceRoot":"","sources":["../src/script-parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAsB,MAAM,YAAY,CAAC;AAkKnE,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CA2D3D"}
@@ -0,0 +1,183 @@
1
+ import { ScriptType } from './types.js';
2
+ import { tbc } from './adapters/tbc-lib.js';
3
+ import { decodeOrderBookDataFromScript, decodePiggyBankDataFromScript } from './script-parser/contracts.js';
4
+ import { extractOpReturnPushDataParts, buildOpReturnData } from './script-parser/op-return.js';
5
+ import { decodeOriginUtxoFromScript } from './script-parser/origin.js';
6
+ import { parseMultiSigAddressFromASM } from './utils/multi-sig.js';
7
+ // Extract on-chain script facts here; protocol actions and asset flows belong to the protocol and result layers.
8
+ const TBC_CANONICAL_ADDRESS_CONTEXT = tbc.Networks.livenet;
9
+ function toCanonicalTbcAddress(hashBuffer) {
10
+ return new tbc.Address(hashBuffer, TBC_CANONICAL_ADDRESS_CONTEXT).toString();
11
+ }
12
+ function decodeAddressFromHash160(hashBuffer) {
13
+ return toCanonicalTbcAddress(hashBuffer);
14
+ }
15
+ // Centralize the type assertion because tbc-lib does not fully expose its chunk type.
16
+ function scriptChunks(script) {
17
+ return (script.chunks ?? []);
18
+ }
19
+ // Parse standard P2PKH outputs through the SDK first, then fall through to custom-script handling on failure.
20
+ function tryReadP2pkh(script) {
21
+ try {
22
+ const pubKeyHash = script.getPublicKeyHash();
23
+ return { pubKeyHash, address: toCanonicalTbcAddress(pubKeyHash) };
24
+ }
25
+ catch {
26
+ return undefined;
27
+ }
28
+ }
29
+ // Derive an address directly from a P2PK public key without misclassifying the script as P2PKH.
30
+ function tryReadP2pk(script) {
31
+ try {
32
+ const pubKeyBuf = script.getPublicKey();
33
+ const pubKey = tbc.PublicKey.fromBuffer(pubKeyBuf);
34
+ return pubKey.toAddress(TBC_CANONICAL_ADDRESS_CONTEXT).toString();
35
+ }
36
+ catch {
37
+ return undefined;
38
+ }
39
+ }
40
+ // Preserve both the payment address and appended data when an ordinary P2PKH transfer includes OP_RETURN.
41
+ function extractP2pkhOpReturnPrefix(script) {
42
+ const chunks = scriptChunks(script);
43
+ if (chunks.length < 6) {
44
+ return undefined;
45
+ }
46
+ const [opDup, opHash160, pubKeyHash, opEqualVerify, opCheckSig, opReturn] = chunks;
47
+ if (opDup?.opcodenum !== tbc.Opcode.OP_DUP ||
48
+ opHash160?.opcodenum !== tbc.Opcode.OP_HASH160 ||
49
+ !pubKeyHash?.buf ||
50
+ pubKeyHash.buf.length !== 20 ||
51
+ opEqualVerify?.opcodenum !== tbc.Opcode.OP_EQUALVERIFY ||
52
+ opCheckSig?.opcodenum !== tbc.Opcode.OP_CHECKSIG ||
53
+ opReturn?.opcodenum !== tbc.Opcode.OP_RETURN) {
54
+ return undefined;
55
+ }
56
+ return {
57
+ pubKeyHash: pubKeyHash.buf,
58
+ address: toCanonicalTbcAddress(pubKeyHash.buf),
59
+ };
60
+ }
61
+ // Some contract scripts start with standard P2PKH validation followed by protocol or constraint logic.
62
+ function extractLeadingP2pkhCheck(script) {
63
+ const chunks = scriptChunks(script);
64
+ if (chunks.length < 5) {
65
+ return undefined;
66
+ }
67
+ const [opDup, opHash160, pubKeyHash, opEqualVerify, opCheckSig] = chunks;
68
+ if (opDup?.opcodenum !== tbc.Opcode.OP_DUP ||
69
+ opHash160?.opcodenum !== tbc.Opcode.OP_HASH160 ||
70
+ !pubKeyHash?.buf ||
71
+ pubKeyHash.buf.length !== 20 ||
72
+ opEqualVerify?.opcodenum !== tbc.Opcode.OP_EQUALVERIFY ||
73
+ opCheckSig?.opcodenum !== tbc.Opcode.OP_CHECKSIG) {
74
+ return undefined;
75
+ }
76
+ return {
77
+ pubKeyHash: pubKeyHash.buf,
78
+ address: toCanonicalTbcAddress(pubKeyHash.buf),
79
+ };
80
+ }
81
+ // NFT Hold scripts may lock a receiver by HASH160; preserve the hash when an address cannot be recovered.
82
+ function extractLeadingHashCheck(script) {
83
+ const chunks = scriptChunks(script);
84
+ if (chunks.length < 3) {
85
+ return undefined;
86
+ }
87
+ const [opHash160, hash, opEqualVerify] = chunks;
88
+ if (opHash160?.opcodenum !== tbc.Opcode.OP_HASH160 ||
89
+ !hash?.buf ||
90
+ hash.buf.length !== 20 ||
91
+ opEqualVerify?.opcodenum !== tbc.Opcode.OP_EQUALVERIFY) {
92
+ return undefined;
93
+ }
94
+ return {
95
+ hash: hash.buf.toString('hex'),
96
+ };
97
+ }
98
+ // Merge OP_RETURN tape data and contract data inferred from script shape into one data field.
99
+ function mergeProtocolData(opReturnData, orderBook, piggyBank) {
100
+ const data = {
101
+ ...(opReturnData ?? {}),
102
+ ...(orderBook ? { orderBook } : {}),
103
+ ...(piggyBank ? { piggyBank } : {}),
104
+ };
105
+ return Object.keys(data).length ? data : undefined;
106
+ }
107
+ // OP_RETURN scripts may carry an address prefix, tape data, and contract data; combine them into ScriptDetail.
108
+ function parseOpReturnScript(script, asm, originUtxo, orderBook, piggyBank, leadingP2pkhCheck) {
109
+ const dataParts = extractOpReturnPushDataParts(scriptChunks(script));
110
+ const leadingHashCheck = extractLeadingHashCheck(script);
111
+ const opReturnData = buildOpReturnData(dataParts, toCanonicalTbcAddress);
112
+ const hashData = leadingHashCheck && opReturnData?.nftHoldType
113
+ ? { hash: leadingHashCheck.hash, flag: 'hash' }
114
+ : undefined;
115
+ const data = mergeProtocolData({ ...opReturnData, ...hashData }, orderBook, piggyBank);
116
+ const p2pkhInfo = extractP2pkhOpReturnPrefix(script);
117
+ const address = p2pkhInfo?.address ?? leadingP2pkhCheck?.address;
118
+ return {
119
+ asm,
120
+ ...(p2pkhInfo ? { type: ScriptType.P2PKH } : {}),
121
+ ...(address ? { address } : {}),
122
+ ...(data ? { data } : {}),
123
+ ...(originUtxo ? { originUtxo } : {}),
124
+ };
125
+ }
126
+ // Parse as many script facts as possible and return a displayable Parse Error for malformed scripts.
127
+ export function parseScript(scriptHex) {
128
+ try {
129
+ const script = new tbc.Script(scriptHex);
130
+ const asm = script.toASM();
131
+ const originUtxo = decodeOriginUtxoFromScript(script) ?? undefined;
132
+ const orderBook = decodeOrderBookDataFromScript(script, decodeAddressFromHash160);
133
+ const piggyBank = decodePiggyBankDataFromScript(script, decodeAddressFromHash160);
134
+ const leadingP2pkhCheck = extractLeadingP2pkhCheck(script);
135
+ if (script.isPublicKeyHashOut()) {
136
+ const p2pkhInfo = tryReadP2pkh(script);
137
+ if (p2pkhInfo) {
138
+ return {
139
+ asm,
140
+ type: ScriptType.P2PKH,
141
+ address: p2pkhInfo.address,
142
+ ...(originUtxo ? { originUtxo } : {}),
143
+ };
144
+ }
145
+ }
146
+ if (script.isPublicKeyOut()) {
147
+ const address = tryReadP2pk(script);
148
+ if (address) {
149
+ return {
150
+ asm,
151
+ address,
152
+ ...(originUtxo ? { originUtxo } : {}),
153
+ };
154
+ }
155
+ }
156
+ if (asm.includes('OP_CHECKMULTISIG')) {
157
+ const multiSigAddress = parseMultiSigAddressFromASM(asm);
158
+ if (multiSigAddress) {
159
+ return {
160
+ asm,
161
+ type: ScriptType.MULTISIG,
162
+ address: multiSigAddress,
163
+ };
164
+ }
165
+ }
166
+ if (asm.includes('OP_RETURN')) {
167
+ return parseOpReturnScript(script, asm, originUtxo, orderBook, piggyBank, leadingP2pkhCheck);
168
+ }
169
+ const data = mergeProtocolData(undefined, orderBook, piggyBank);
170
+ return {
171
+ asm,
172
+ ...(leadingP2pkhCheck ? { address: leadingP2pkhCheck.address } : {}),
173
+ ...(data ? { data } : {}),
174
+ ...(originUtxo ? { originUtxo } : {}),
175
+ };
176
+ }
177
+ catch {
178
+ return {
179
+ asm: 'Parse Error',
180
+ };
181
+ }
182
+ }
183
+ //# sourceMappingURL=script-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-parser.js","sourceRoot":"","sources":["../src/script-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ export interface PoolNftTapeData {
2
+ version: 1 | 2;
3
+ combinedPartialHash: string;
4
+ ftLpPartialHash: string;
5
+ ftAPartialHash: string;
6
+ ftLpAmountRaw: string;
7
+ ftLpDisplayAmount: string;
8
+ ftAAmountRaw: string;
9
+ ftADisplayAmount?: string;
10
+ tbcSatoshis: number;
11
+ ftContractTxid: string;
12
+ serviceFeeRate?: number;
13
+ lpPlan?: number;
14
+ withLock?: boolean;
15
+ withLockTime?: boolean;
16
+ }
17
+ export interface OrderBookData {
18
+ side: 'buy' | 'sell';
19
+ holdAddress: string;
20
+ saleVolumeSatoshis: number;
21
+ feeRateRaw: string;
22
+ unitPriceRaw: string;
23
+ ftPartialHash: string;
24
+ ftID: string;
25
+ }
26
+ export interface PiggyBankData {
27
+ address: string;
28
+ publicKeyHash: string;
29
+ lockTime: number;
30
+ lockTimeType: 'block-height';
31
+ }
32
+ export interface FungibleTokenMovement {
33
+ outputIndex: number;
34
+ tapeOutputIndex: number;
35
+ receiver?: string;
36
+ receiverHash?: string;
37
+ contractId?: string;
38
+ name: string;
39
+ symbol: string;
40
+ amount: number;
41
+ displayAmount: string;
42
+ rawAmount: string;
43
+ amountSlots: string[];
44
+ decimal: number;
45
+ lockTime?: number;
46
+ isStableCoin: boolean;
47
+ }
48
+ export interface OrderBookOrder {
49
+ outputIndex?: number;
50
+ inputIndex?: number;
51
+ side: 'buy' | 'sell';
52
+ holdAddress: string;
53
+ saleVolumeSatoshis: number;
54
+ feeRateRaw: string;
55
+ unitPriceRaw: string;
56
+ ftPartialHash: string;
57
+ ftID: string;
58
+ satoshis?: number;
59
+ source: 'input' | 'output';
60
+ }
61
+ interface NftMovementBase {
62
+ contractId?: string;
63
+ collectionId?: string;
64
+ tapeOutputIndex: number;
65
+ description?: string;
66
+ }
67
+ export interface NftCollectionMintMovement extends NftMovementBase {
68
+ action: 'mintCollection';
69
+ contractId: string;
70
+ collectionId: string;
71
+ collectionName: string;
72
+ supply: number;
73
+ mintSlotAddress?: string;
74
+ collectionIndex?: never;
75
+ outputIndex?: never;
76
+ holdOutputIndex?: never;
77
+ sender?: never;
78
+ receiver?: never;
79
+ nftName?: never;
80
+ symbol?: never;
81
+ attributes?: never;
82
+ }
83
+ export interface NftTokenMovement extends NftMovementBase {
84
+ action: 'mint' | 'transfer' | 'burn';
85
+ collectionIndex?: number;
86
+ collectionName?: never;
87
+ supply?: never;
88
+ outputIndex?: number;
89
+ holdOutputIndex?: number;
90
+ sender?: string;
91
+ receiver?: string;
92
+ nftName?: string;
93
+ symbol?: string;
94
+ attributes?: string | null;
95
+ }
96
+ export type NftMovement = NftCollectionMintMovement | NftTokenMovement;
97
+ export interface PiggyBankMovement {
98
+ action: 'freeze' | 'unfreeze';
99
+ address: string;
100
+ satoshis: number;
101
+ lockTime: number;
102
+ lockTimeType: 'block-height';
103
+ outputIndex?: number;
104
+ inputIndex?: number;
105
+ receiver?: string;
106
+ unlockHeight?: number;
107
+ releasedSatoshis?: number;
108
+ releaseOutputIndex?: number;
109
+ }
110
+ export interface PoolNftMovement {
111
+ action: 'create' | 'init' | 'increaseLiquidity' | 'consumeLiquidity' | 'swapTbcToFt' | 'swapFtToTbc' | 'mergeFtInPool' | 'mergeFtLp' | 'burnFtLp' | 'unknown';
112
+ transactionType: string;
113
+ contractId?: string;
114
+ version?: 1 | 2;
115
+ reasons?: string[];
116
+ poolId?: string;
117
+ poolStateInputIndex?: number;
118
+ poolStateOutputIndex?: number;
119
+ poolStateAddress?: string;
120
+ poolStateHash?: string;
121
+ poolOutputIndex?: number;
122
+ tapeOutputIndex?: number;
123
+ sender?: string;
124
+ senderHash?: string;
125
+ receiver?: string;
126
+ receiverHash?: string;
127
+ ftName?: string;
128
+ ftSymbol?: string;
129
+ ftDecimal?: number;
130
+ ftContractTxid?: string;
131
+ ftTokenId?: string;
132
+ ftAPartialHash?: string;
133
+ ftAPartialHashSource?: 'poolNftTape';
134
+ ftAPartialHashVerification?: 'matchedComputedPartialHash' | 'computedPartialHashMismatch' | 'matchedScriptLiteral' | 'matchedWrongPartialHashLiteral' | 'notStaticallyVisible' | 'codeTypeMismatch' | 'notChecked';
135
+ lpTokenId?: string;
136
+ lpTokenIdSource?: 'movementContractId' | 'poolNftTape';
137
+ lpTokenIdEvidence?: 'movementContractId' | 'matchedComputedPartialHash' | 'computedPartialHashMismatch' | 'matchedScriptLiteral' | 'matchedWrongPartialHashLiteral' | 'notStaticallyVisible' | 'codeTypeMismatch' | 'notChecked';
138
+ lpPartialHash?: string;
139
+ lpPartialHashSource?: 'poolNftTape';
140
+ lpPartialHashVerification?: 'matchedComputedPartialHash' | 'computedPartialHashMismatch' | 'matchedScriptLiteral' | 'matchedWrongPartialHashLiteral' | 'notStaticallyVisible' | 'codeTypeMismatch' | 'notChecked';
141
+ ftInRawAmount?: string;
142
+ ftInOutputIndex?: number;
143
+ ftOutRawAmount?: string;
144
+ ftOutOutputIndex?: number;
145
+ ftLpInRawAmount?: string;
146
+ ftLpInOutputIndex?: number;
147
+ ftLpOutRawAmount?: string;
148
+ ftLpOutOutputIndex?: number;
149
+ ftLpAmountRaw?: string;
150
+ ftLpDisplayAmount?: string;
151
+ ftAAmountRaw?: string;
152
+ ftADisplayAmount?: string;
153
+ tbcSatoshis?: number;
154
+ tbcInSatoshis?: number;
155
+ tbcOutSatoshis?: number;
156
+ tbcOutOutputIndex?: number;
157
+ stateTbcSatoshis?: number;
158
+ feeSatoshis?: number;
159
+ feeCollector?: string;
160
+ expectedFeeCollector?: string;
161
+ feeOutputIndex?: number;
162
+ feeOutputs?: Array<{
163
+ satoshis: number;
164
+ address?: string;
165
+ outputIndex: number;
166
+ }>;
167
+ serviceFeeRate?: number;
168
+ lpPlan?: number;
169
+ withLock?: boolean;
170
+ withLockTime?: boolean;
171
+ confidence?: 'exact' | 'heuristic';
172
+ note?: string;
173
+ }
174
+ export {};
175
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/types/protocol.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,cAAc,CAAC;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC5B;AAED,UAAU,eAAe;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,yBAA0B,SAAQ,eAAe;IAChE,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,UAAU,CAAC,EAAE,KAAK,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,KAAK,CAAC;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,GAAG,yBAAyB,GAAG,gBAAgB,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,cAAc,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EACF,QAAQ,GACR,MAAM,GACN,mBAAmB,GACnB,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,eAAe,GACf,WAAW,GACX,UAAU,GACV,SAAS,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,aAAa,CAAC;IACrC,0BAA0B,CAAC,EAAE,4BAA4B,GAAG,6BAA6B,GAAG,sBAAsB,GAAG,gCAAgC,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,YAAY,CAAC;IACnN,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAAC;IACvD,iBAAiB,CAAC,EAAE,oBAAoB,GAAG,4BAA4B,GAAG,6BAA6B,GAAG,sBAAsB,GAAG,gCAAgC,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,YAAY,CAAC;IACjO,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,aAAa,CAAC;IACpC,yBAAyB,CAAC,EAAE,4BAA4B,GAAG,6BAA6B,GAAG,sBAAsB,GAAG,gCAAgC,GAAG,sBAAsB,GAAG,kBAAkB,GAAG,YAAY,CAAC;IAClN,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/types/protocol.ts"],"names":[],"mappings":""}
@@ -0,0 +1,167 @@
1
+ import type { DecodeInputUtxo, InputUTXODetail, PublicDecodedInput, PublicDecodedOutput } from './script.js';
2
+ import type { FungibleTokenMovement, NftMovement, OrderBookOrder, PiggyBankMovement, PoolNftMovement } from './protocol.js';
3
+ export interface ChainLayer {
4
+ inputs: PublicDecodedInput[];
5
+ outputs: PublicDecodedOutput[];
6
+ fee?: {
7
+ satoshis: number;
8
+ satoshisPerKB: number;
9
+ };
10
+ }
11
+ export interface ProtocolDetails {
12
+ ft?: {
13
+ type: 'ft';
14
+ transfers: FungibleTokenMovement[];
15
+ };
16
+ stablecoin?: {
17
+ type: 'stablecoin';
18
+ transfers: FungibleTokenMovement[];
19
+ };
20
+ nft?: {
21
+ type: 'nft';
22
+ actions: NftMovement[];
23
+ };
24
+ piggyBank?: {
25
+ type: 'piggyBank';
26
+ actions: PiggyBankMovement[];
27
+ };
28
+ poolNft?: {
29
+ type: 'poolNft';
30
+ actions: PoolNftMovement[];
31
+ };
32
+ orderBook?: {
33
+ type: 'orderBook';
34
+ orders: OrderBookOrder[];
35
+ };
36
+ }
37
+ export interface UnsupportedProtocol {
38
+ inputIndex?: number;
39
+ outputIndex?: number;
40
+ marker?: string;
41
+ reason: string;
42
+ }
43
+ export interface ProtocolLayer {
44
+ markers: string[];
45
+ details?: ProtocolDetails;
46
+ unsupported?: UnsupportedProtocol[];
47
+ }
48
+ export interface PoolNftAssetMetadata {
49
+ version: 1 | 2;
50
+ serviceFeeRate?: number;
51
+ lpPlan?: number;
52
+ withLock?: boolean;
53
+ withLockTime?: boolean;
54
+ }
55
+ export type TransactionAsset = {
56
+ type: 'tbc';
57
+ symbol: 'TBC';
58
+ } | {
59
+ type: 'ft' | 'stablecoin';
60
+ subtype?: never;
61
+ symbol: string;
62
+ name?: string;
63
+ contractId?: string;
64
+ poolId?: never;
65
+ decimal?: number;
66
+ } | {
67
+ type: 'ft';
68
+ subtype: 'poolLp';
69
+ symbol: string;
70
+ name?: string;
71
+ poolId: string;
72
+ contractId?: never;
73
+ decimal?: number;
74
+ } | {
75
+ type: 'nft';
76
+ subtype?: never;
77
+ symbol?: string;
78
+ name?: string;
79
+ collectionId?: string;
80
+ contractId?: string;
81
+ poolNft?: never;
82
+ } | {
83
+ type: 'nft';
84
+ subtype: 'poolNft';
85
+ contractId: string;
86
+ poolNft: PoolNftAssetMetadata;
87
+ symbol?: never;
88
+ name?: never;
89
+ collectionId?: never;
90
+ } | {
91
+ type: 'nftCollection';
92
+ symbol?: never;
93
+ name?: string;
94
+ collectionId: string;
95
+ contractId: string;
96
+ };
97
+ export type TransactionAmount = {
98
+ satoshis: number;
99
+ } | {
100
+ raw: string;
101
+ display?: string;
102
+ decimal?: number;
103
+ };
104
+ export type AssetFlowPurpose = 'transfer' | 'unknown' | 'self' | 'fee' | 'lock' | 'release' | 'mint' | 'burn' | 'state';
105
+ export type AssetFlowDirection = 'in' | 'out' | 'self' | 'unknown';
106
+ export interface AssetFlowContext {
107
+ protocol: string;
108
+ recognized: boolean;
109
+ action?: string;
110
+ markers?: string[];
111
+ }
112
+ export interface AssetFlowEndpoint {
113
+ address?: string;
114
+ addresses?: string[];
115
+ hash?: string;
116
+ poolId?: string;
117
+ txid?: string;
118
+ vout?: number;
119
+ script?: {
120
+ hex?: string;
121
+ asm?: string;
122
+ };
123
+ }
124
+ interface AssetFlowBase {
125
+ purpose: AssetFlowPurpose;
126
+ direction: AssetFlowDirection;
127
+ from?: AssetFlowEndpoint;
128
+ to?: AssetFlowEndpoint;
129
+ context?: AssetFlowContext;
130
+ }
131
+ type NftCollectionTransactionAsset = Extract<TransactionAsset, {
132
+ type: 'nftCollection';
133
+ }>;
134
+ type NonQuantifiedTransactionAsset = Extract<TransactionAsset, {
135
+ type: 'nft';
136
+ }>;
137
+ type QuantifiedTransactionAsset = Exclude<TransactionAsset, {
138
+ type: 'nft' | 'nftCollection';
139
+ }>;
140
+ export type AssetFlow = {
141
+ purpose: 'mint';
142
+ direction: 'in';
143
+ asset: NftCollectionTransactionAsset;
144
+ amount?: never;
145
+ from?: never;
146
+ to?: AssetFlowEndpoint;
147
+ context?: AssetFlowContext;
148
+ } | (AssetFlowBase & {
149
+ asset: NonQuantifiedTransactionAsset;
150
+ amount?: never;
151
+ }) | (AssetFlowBase & {
152
+ asset: QuantifiedTransactionAsset;
153
+ amount: TransactionAmount;
154
+ });
155
+ export interface DecodeTxRawResult {
156
+ txid: string;
157
+ version: number;
158
+ locktime: number;
159
+ size: number;
160
+ chain: ChainLayer;
161
+ assetFlows: AssetFlow[];
162
+ }
163
+ export interface DecodeTxRawOptions {
164
+ inputUtxos?: DecodeInputUtxo[] | Record<string, DecodeInputUtxo>;
165
+ }
166
+ export type { InputUTXODetail };
167
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":""}