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,335 @@
1
+ import tbcContract from 'tbc-contract';
2
+ import { ScriptType } from '../../types.js';
3
+ const NFT_CODE_SATOSHIS = 200;
4
+ const NFT_HOLD_SATOSHIS = 100;
5
+ const NFT_V0_CODE_MARKER_HEX = '33436f6465';
6
+ const { NFT } = tbcContract;
7
+ function collectionMintShape(outputs) {
8
+ // The standard shape is a Collection Tape followed by supply Mint NHolds and optionally one ordinary change output.
9
+ const tapeOutput = outputs[0];
10
+ const collectionTape = tapeOutput?.script.data?.collectionTape;
11
+ if (!tapeOutput ||
12
+ !collectionTape?.collectionName ||
13
+ typeof collectionTape.supply !== 'number' ||
14
+ !Number.isInteger(collectionTape.supply) ||
15
+ collectionTape.supply <= 0) {
16
+ return undefined;
17
+ }
18
+ const mintOutputs = outputs.slice(1, collectionTape.supply + 1);
19
+ if (mintOutputs.length !== collectionTape.supply ||
20
+ mintOutputs.some((output) => output.satoshis !== NFT_HOLD_SATOSHIS ||
21
+ output.script.type !== ScriptType.P2PKH ||
22
+ !output.address ||
23
+ output.script.data?.nftHoldType !== 'mint')) {
24
+ return undefined;
25
+ }
26
+ const trailingOutputs = outputs.slice(collectionTape.supply + 1);
27
+ if (trailingOutputs.length > 1 || trailingOutputs[0]?.script.data?.nftHoldType === 'mint') {
28
+ return undefined;
29
+ }
30
+ return {
31
+ tapeOutput,
32
+ mintOutputs,
33
+ changeOutput: trailingOutputs[0],
34
+ };
35
+ }
36
+ function isCollectionMint(outputs) {
37
+ return collectionMintShape(outputs) !== undefined;
38
+ }
39
+ export function optimizeCollectionMintOutputs(outputs) {
40
+ // Collection mint may create many slots, so the public chain layer keeps an explicitly labeled compressed summary.
41
+ const shape = collectionMintShape(outputs);
42
+ if (!shape) {
43
+ return outputs;
44
+ }
45
+ const { tapeOutput, mintOutputs, changeOutput } = shape;
46
+ const representativeMintOutput = mintOutputs[0];
47
+ if (!representativeMintOutput) {
48
+ return outputs;
49
+ }
50
+ return [
51
+ tapeOutput,
52
+ {
53
+ ...representativeMintOutput,
54
+ satoshis: mintOutputs.reduce((sum, output) => sum + output.satoshis, 0),
55
+ compression: {
56
+ type: 'nftMintSlots',
57
+ count: mintOutputs.length,
58
+ indexRange: {
59
+ from: mintOutputs[0]?.index ?? representativeMintOutput.index,
60
+ to: mintOutputs[mintOutputs.length - 1]?.index ?? representativeMintOutput.index,
61
+ },
62
+ satoshisPerOutput: representativeMintOutput.satoshis,
63
+ },
64
+ },
65
+ ...(changeOutput ? [changeOutput] : []),
66
+ ];
67
+ }
68
+ export const nftProtocolDecoder = {
69
+ id: 'NTape',
70
+ analyze({ outputs }) {
71
+ // Candidate detection checks NTape or NFT Code evidence; Code/Hold/Tape state relationships must prove mint or transfer.
72
+ const hasNtapeData = outputs.some((output) => Boolean(output.script.data?.nftTape || output.script.data?.collectionTape));
73
+ const hasNftCodeOrigin = outputs.some((output) => output.script.originUtxo && output.script.data?.codeType?.toLowerCase().includes('nft'));
74
+ if (!hasNtapeData && !hasNftCodeOrigin) {
75
+ return null;
76
+ }
77
+ return {
78
+ id: this.id,
79
+ transactionType: isCollectionMint(outputs) ? 'NFT collection mint' : 'NFT contract',
80
+ priority: 90,
81
+ };
82
+ },
83
+ };
84
+ function readCollectionIndexFromFile(file) {
85
+ // NFT transfer file references usually contain a collection txid plus little-endian vout for collectionIndex recovery.
86
+ if (typeof file !== 'string' || file.length < 72 || !/^[0-9a-f]{72}$/iu.test(file)) {
87
+ return undefined;
88
+ }
89
+ const voutHex = file.slice(64, 72);
90
+ const buffer = Buffer.from(voutHex, 'hex');
91
+ if (buffer.length !== 4) {
92
+ return undefined;
93
+ }
94
+ return buffer.readUInt32LE(0);
95
+ }
96
+ function isNftCodeScript(script) {
97
+ const hex = script.hex?.toLowerCase();
98
+ return Boolean(script.originUtxo ||
99
+ hex?.endsWith(NFT_V0_CODE_MARKER_HEX) ||
100
+ script.data?.codeType?.toLowerCase().includes('nft'));
101
+ }
102
+ function isNftCodeOutput(output) {
103
+ return output.satoshis >= NFT_CODE_SATOSHIS && isNftCodeScript(output.script);
104
+ }
105
+ function isNftHoldOutput(output) {
106
+ return output.satoshis >= NFT_HOLD_SATOSHIS && output.script.data?.nftHoldType === 'current';
107
+ }
108
+ function isVerifiedNftCodePrevout(input) {
109
+ // A transfer Code input must include a zero-satoshi associated NTape at vout + 2.
110
+ const prevout = input.prevout;
111
+ if (!prevout || (prevout.satoshis ?? 0) < NFT_CODE_SATOSHIS || !isNftCodeScript(prevout.script)) {
112
+ return false;
113
+ }
114
+ return prevout.associatedTape?.outputIndex === input.vout + 2 &&
115
+ prevout.associatedTape.satoshis === 0 &&
116
+ Boolean(prevout.associatedTape.script.data?.nftTape);
117
+ }
118
+ function isVerifiedNftHoldPrevout(input) {
119
+ const prevout = input.prevout;
120
+ return (prevout?.satoshis ?? 0) >= NFT_HOLD_SATOSHIS &&
121
+ prevout?.script.type === ScriptType.P2PKH &&
122
+ Boolean(prevout.address ?? prevout.script.address ?? prevout.script.data?.address) &&
123
+ prevout.script.data?.nftHoldType === 'current';
124
+ }
125
+ function isVerifiedNftMintSlotPrevout(input, codeOutput) {
126
+ // NFT mint consumes a slot reserved by collection mint and must match the new Code output's origin UTXO.
127
+ const prevout = input.prevout;
128
+ return input.prevTxid === codeOutput.script.originUtxo?.txid &&
129
+ input.vout === codeOutput.script.originUtxo.vout &&
130
+ (prevout?.satoshis ?? 0) >= NFT_HOLD_SATOSHIS &&
131
+ prevout?.script.type === ScriptType.P2PKH &&
132
+ Boolean(prevout.address ?? prevout.script.address ?? prevout.script.data?.address) &&
133
+ prevout?.script.data?.nftHoldType === 'mint';
134
+ }
135
+ function isCanonicalNftCodeOutput(output) {
136
+ const origin = output.script.originUtxo;
137
+ const actualHex = output.script.hex?.toLowerCase();
138
+ if (!origin || !actualHex) {
139
+ return false;
140
+ }
141
+ try {
142
+ const canonicalHex = NFT.buildCodeScript(origin.txid, origin.vout)
143
+ .toBuffer()
144
+ .toString('hex')
145
+ .toLowerCase();
146
+ return actualHex === canonicalHex;
147
+ }
148
+ catch {
149
+ return false;
150
+ }
151
+ }
152
+ function isVerifiedStandaloneNftMintOrigin(input, codeOutput) {
153
+ const origin = codeOutput.script.originUtxo;
154
+ return Boolean(origin &&
155
+ input.prevTxid === origin.txid &&
156
+ input.vout === origin.vout &&
157
+ input.prevout?.script.type === ScriptType.P2PKH &&
158
+ !input.prevout.script.data?.nftHoldType &&
159
+ isCanonicalNftCodeOutput(codeOutput));
160
+ }
161
+ function verifiedCollectionIdentity(codeInput, codeOutput) {
162
+ const origin = codeOutput.script.originUtxo;
163
+ const associatedOrigin = codeInput?.prevout?.associatedOrigin;
164
+ if (!origin || !associatedOrigin) {
165
+ return {};
166
+ }
167
+ const isMatchingMintSlot = associatedOrigin.txid === origin.txid &&
168
+ associatedOrigin.outputIndex === origin.vout &&
169
+ associatedOrigin.satoshis >= NFT_HOLD_SATOSHIS &&
170
+ associatedOrigin.script.data?.nftHoldType === 'mint';
171
+ return isMatchingMintSlot
172
+ ? { collectionId: origin.txid, collectionIndex: origin.vout }
173
+ : {};
174
+ }
175
+ function nftFileIdentity(file) {
176
+ return typeof file === 'string' && file.length >= 64 ? file : undefined;
177
+ }
178
+ function nftReferenceIdentity(file) {
179
+ return typeof file === 'string' && /^[0-9a-f]{72}$/iu.test(file) ? file : undefined;
180
+ }
181
+ function nftReceiverFromOutput(output) {
182
+ if (output?.script.type !== ScriptType.P2PKH) {
183
+ return {};
184
+ }
185
+ const receiver = output.address ?? output.script.address ?? output.script.data?.address;
186
+ return {
187
+ ...(receiver ? { receiver } : {}),
188
+ };
189
+ }
190
+ function nftSenderFromInput(input) {
191
+ const sender = input?.prevout?.address ?? input?.prevout?.script.address ?? input?.prevout?.script.data?.address;
192
+ return {
193
+ ...(sender ? { sender } : {}),
194
+ };
195
+ }
196
+ function isMatchingVerifiedNftCodeInput(input, nftTape) {
197
+ // The Code input first proves historical NFT state, then file identity prevents cross-NFT or cross-collection reuse.
198
+ if (!isVerifiedNftCodePrevout(input)) {
199
+ return false;
200
+ }
201
+ const outputFile = nftFileIdentity(nftTape?.file);
202
+ const inputFile = nftFileIdentity(input.prevout?.associatedTape?.script.data?.nftTape?.file);
203
+ if (!outputFile || !inputFile || outputFile === inputFile) {
204
+ return true;
205
+ }
206
+ const outputReference = nftReferenceIdentity(outputFile);
207
+ const inputReference = nftReferenceIdentity(inputFile);
208
+ // A real mint tape often stores a data URI, while transfer tape is rewritten as a previous-NFT txid/vout reference.
209
+ // If the input tape already contains another on-chain reference, require an exact match instead of trusting input.prevTxid alone.
210
+ return Boolean(outputReference?.startsWith(input.prevTxid) && !inputReference);
211
+ }
212
+ function isPairedNftHoldInput(codeInput, holdInput) {
213
+ return isVerifiedNftHoldPrevout(holdInput) &&
214
+ holdInput.prevTxid === codeInput.prevTxid &&
215
+ holdInput.vout === codeInput.vout + 1;
216
+ }
217
+ function findVerifiedNftTransferInputPair(inputs, nftTape) {
218
+ for (const codeInput of inputs) {
219
+ if (!isMatchingVerifiedNftCodeInput(codeInput, nftTape)) {
220
+ continue;
221
+ }
222
+ // Transfer must spend one previous NFT state bundle: Code at vout, Hold at vout + 1, and verified tape at vout + 2.
223
+ const holdInput = inputs.find((input) => isPairedNftHoldInput(codeInput, input));
224
+ if (holdInput) {
225
+ return { codeInput, holdInput };
226
+ }
227
+ }
228
+ return undefined;
229
+ }
230
+ function isSameNftCodeOrigin(codeOutput, codeInput) {
231
+ // Transfer outputs must not replace the collection origin from the previous Code input.
232
+ const outputOrigin = codeOutput.script.originUtxo;
233
+ const inputOrigin = codeInput.prevout?.script.originUtxo;
234
+ if (!outputOrigin || !inputOrigin) {
235
+ return true;
236
+ }
237
+ return outputOrigin.txid === inputOrigin.txid && outputOrigin.vout === inputOrigin.vout;
238
+ }
239
+ export function collectNftMovements(txid, inputs, outputs) {
240
+ // State bundles must prove NFT movements: output shape proves collection mint, while Code/Hold/Tape relations prove mint or transfer.
241
+ const movements = [];
242
+ // Require the complete collection-mint output shape so a forged Collection Tape cannot override a real NFT transfer.
243
+ const collectionTapeOutput = isCollectionMint(outputs) ? outputs[0] : undefined;
244
+ if (collectionTapeOutput?.script.data?.collectionTape) {
245
+ const tape = collectionTapeOutput.script.data.collectionTape;
246
+ const mintOutputs = outputs.filter((output) => output.script.data?.nftHoldType === 'mint');
247
+ const slotController = nftReceiverFromOutput(mintOutputs[0]);
248
+ movements.push({
249
+ action: 'mintCollection',
250
+ contractId: txid,
251
+ collectionId: txid,
252
+ collectionName: tape.collectionName,
253
+ supply: tape.supply,
254
+ tapeOutputIndex: collectionTapeOutput.index,
255
+ ...(slotController.receiver ? { mintSlotAddress: slotController.receiver } : {}),
256
+ description: tape.description,
257
+ });
258
+ return movements;
259
+ }
260
+ for (let index = 0; index < outputs.length - 2; index++) {
261
+ const codeOutput = outputs[index];
262
+ const holdOutput = outputs[index + 1];
263
+ const tapeOutput = outputs[index + 2];
264
+ const nftTape = tapeOutput?.script.data?.nftTape;
265
+ if (!codeOutput || !holdOutput || !tapeOutput || !nftTape) {
266
+ continue;
267
+ }
268
+ if (!isNftCodeOutput(codeOutput) || !isNftHoldOutput(holdOutput)) {
269
+ continue;
270
+ }
271
+ const fileReference = nftReferenceIdentity(nftTape.file);
272
+ const receiver = nftReceiverFromOutput(holdOutput);
273
+ const isBurn = !receiver.receiver;
274
+ const collectionMintInput = inputs.find((input) => isVerifiedNftMintSlotPrevout(input, codeOutput));
275
+ const standaloneMintInput = collectionMintInput
276
+ ? undefined
277
+ : inputs.find((input) => isVerifiedStandaloneNftMintOrigin(input, codeOutput));
278
+ const isMint = Boolean(collectionMintInput ?? standaloneMintInput);
279
+ const transferInputPair = isMint ? undefined : findVerifiedNftTransferInputPair(inputs, nftTape);
280
+ if (!isMint && !transferInputPair) {
281
+ continue;
282
+ }
283
+ if (transferInputPair && !isSameNftCodeOrigin(codeOutput, transferInputPair.codeInput)) {
284
+ continue;
285
+ }
286
+ const sender = isMint ? {} : nftSenderFromInput(transferInputPair?.holdInput);
287
+ const collectionIdentity = collectionMintInput
288
+ ? {
289
+ collectionId: codeOutput.script.originUtxo?.txid,
290
+ collectionIndex: codeOutput.script.originUtxo?.vout ?? readCollectionIndexFromFile(nftTape.file),
291
+ }
292
+ : verifiedCollectionIdentity(transferInputPair?.codeInput, codeOutput);
293
+ // Transfer contractId prefers the file reference, then the input prevout, and finally the on-chain origin.
294
+ const transferFileContractId = !isMint && transferInputPair && fileReference?.startsWith(transferInputPair.codeInput.prevTxid)
295
+ ? fileReference.slice(0, 64)
296
+ : undefined;
297
+ movements.push({
298
+ action: isBurn ? 'burn' : isMint ? 'mint' : 'transfer',
299
+ contractId: isMint
300
+ ? txid
301
+ : transferFileContractId ??
302
+ transferInputPair?.codeInput.prevout?.contractId ??
303
+ transferInputPair?.codeInput.prevTxid ??
304
+ fileReference?.slice(0, 64) ??
305
+ codeOutput.script.originUtxo?.txid,
306
+ ...collectionIdentity,
307
+ outputIndex: codeOutput.index,
308
+ holdOutputIndex: holdOutput.index,
309
+ tapeOutputIndex: tapeOutput.index,
310
+ ...sender,
311
+ ...receiver,
312
+ nftName: nftTape.nftName,
313
+ symbol: nftTape.symbol,
314
+ description: nftTape.description,
315
+ attributes: typeof nftTape.attributes === 'string' || nftTape.attributes === null ? nftTape.attributes : undefined,
316
+ });
317
+ index += 2;
318
+ }
319
+ return movements;
320
+ }
321
+ export function inferNftTransactionType(movements) {
322
+ // Infer an NFT transaction type only when a verified NFT movement exists.
323
+ const firstMovement = movements[0];
324
+ if (!firstMovement) {
325
+ return undefined;
326
+ }
327
+ if (firstMovement.action === 'mintCollection') {
328
+ return 'NFT collection mint';
329
+ }
330
+ if (firstMovement.action === 'mint') {
331
+ return 'NFT mint';
332
+ }
333
+ return firstMovement.action === 'burn' ? 'NFT burn' : 'NFT transfer';
334
+ }
335
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/protocols/nft/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/protocols/nft/media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { DecodedOutput } from '../../types.js';
2
+ import type { FungibleTokenMovement, OrderBookOrder } from '../../types/protocol.js';
3
+ import type { OrderBookAction, OrderBookActionMatch, OrderBookFacts } from './types.js';
4
+ export declare function matchOrderBookAction(facts: OrderBookFacts): OrderBookActionMatch | undefined;
5
+ export declare function orderBookTransactionType(action: OrderBookAction | undefined): "OrderBook buy order" | "OrderBook sell order" | "OrderBook buy order cancel" | "OrderBook sell order cancel" | "OrderBook order update" | "OrderBook match" | "OrderBook transaction";
6
+ export declare function inferOrderBookActionMatch(orderBookOrders: OrderBookOrder[], ftMovements: FungibleTokenMovement[], outputs?: DecodedOutput[]): OrderBookActionMatch | undefined;
7
+ //# sourceMappingURL=actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/protocols/order-book/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAIrF,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,cAAc,EAAqB,MAAM,YAAY,CAAC;AAmD3G,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,oBAAoB,GAAG,SAAS,CAsE5F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,0LAiB3E;AAED,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,cAAc,EAAE,EACjC,WAAW,EAAE,qBAAqB,EAAE,EACpC,OAAO,GAAE,aAAa,EAAO,oCAG9B"}
@@ -0,0 +1,102 @@
1
+ import { buildOrderBookFacts } from './facts.js';
2
+ import { verifyOrderBookUpdateContinuity } from './identity.js';
3
+ import { settleOrderBookCancel, settleOrderBookMatch, settleOrderBookPlace, settleOrderBookUpdateDelta } from './settlement.js';
4
+ function createOrderBookActionMatch(action, facts, reasons, confidence = 'heuristic', extra = {}) {
5
+ return {
6
+ action,
7
+ confidence,
8
+ reasons,
9
+ inputOrders: facts.inputOrders,
10
+ outputOrders: facts.outputOrders,
11
+ ...extra,
12
+ };
13
+ }
14
+ function firstOutputOrder(facts) {
15
+ return facts.outputOrders[0];
16
+ }
17
+ function firstInputOrder(facts) {
18
+ return facts.inputOrders[0];
19
+ }
20
+ function cancelAction(order) {
21
+ if (order?.side === 'buy') {
22
+ return 'cancelBuy';
23
+ }
24
+ if (order?.side === 'sell') {
25
+ return 'cancelSell';
26
+ }
27
+ return 'unknown';
28
+ }
29
+ function placeAction(order) {
30
+ if (order?.side === 'buy') {
31
+ return 'placeBuy';
32
+ }
33
+ if (order?.side === 'sell') {
34
+ return 'placeSell';
35
+ }
36
+ return 'unknown';
37
+ }
38
+ export function matchOrderBookAction(facts) {
39
+ if (!facts.orders.length) {
40
+ return undefined;
41
+ }
42
+ const buyOrder = facts.buyInputOrders[0];
43
+ const sellOrder = facts.sellInputOrders[0];
44
+ if (buyOrder && sellOrder) {
45
+ const settlement = settleOrderBookMatch(buyOrder, sellOrder, facts.ftMovements, facts.tbcOutputs, facts.outputOrders);
46
+ return createOrderBookActionMatch('match', facts, [
47
+ 'input buy and sell orders are both spent',
48
+ ...(settlement.isComplete ? ['settlement outputs match OrderBook amount formulas'] : settlement.reasons),
49
+ ], settlement.isComplete ? 'exact' : 'partial', { buyOrder, sellOrder, settlement });
50
+ }
51
+ if (facts.inputOrders.length && facts.outputOrders.length) {
52
+ const updateContinuity = verifyOrderBookUpdateContinuity(facts.inputOrders, facts.outputOrders);
53
+ const updateDelta = updateContinuity.isContinuous && updateContinuity.inputOrder && updateContinuity.outputOrder
54
+ ? settleOrderBookUpdateDelta(updateContinuity.inputOrder, updateContinuity.outputOrder, facts.ftMovements, facts.tbcOutputs)
55
+ : undefined;
56
+ return createOrderBookActionMatch('update', facts, [
57
+ 'input order is spent and output order state is created in the same transaction',
58
+ ...(updateContinuity.isContinuous ? ['old and new order identity is continuous'] : updateContinuity.reasons),
59
+ ...(updateDelta
60
+ ? updateDelta.isComplete
61
+ ? ['update asset delta matches chain evidence']
62
+ : updateDelta.reasons
63
+ : []),
64
+ ], updateContinuity.isContinuous && (updateDelta?.isComplete ?? true) ? 'exact' : 'partial', { updateContinuity, ...(updateDelta ? { updateDelta } : {}) });
65
+ }
66
+ if (facts.inputOrders.length) {
67
+ const order = firstInputOrder(facts);
68
+ const cancelRelease = order ? settleOrderBookCancel(order, facts.ftMovements, facts.tbcOutputs) : undefined;
69
+ return createOrderBookActionMatch(cancelAction(order), facts, [
70
+ 'input order is spent without an output order continuation',
71
+ ...(cancelRelease?.isComplete ? ['cancel release asset matches chain evidence'] : cancelRelease?.reasons ?? []),
72
+ ], cancelRelease?.isComplete ? 'exact' : 'partial', cancelRelease ? { cancelRelease } : {});
73
+ }
74
+ const order = firstOutputOrder(facts);
75
+ const placeLock = order ? settleOrderBookPlace(order, facts.ftMovements, facts.tbcOutputs) : undefined;
76
+ return createOrderBookActionMatch(placeAction(order), facts, [
77
+ 'output order state is created',
78
+ ...(placeLock?.isComplete ? ['place order lock asset matches chain evidence'] : placeLock?.reasons ?? []),
79
+ ], placeLock?.isComplete ? 'exact' : 'partial', placeLock ? { placeLock } : {});
80
+ }
81
+ export function orderBookTransactionType(action) {
82
+ switch (action) {
83
+ case 'placeBuy':
84
+ return 'OrderBook buy order';
85
+ case 'placeSell':
86
+ return 'OrderBook sell order';
87
+ case 'cancelBuy':
88
+ return 'OrderBook buy order cancel';
89
+ case 'cancelSell':
90
+ return 'OrderBook sell order cancel';
91
+ case 'update':
92
+ return 'OrderBook order update';
93
+ case 'match':
94
+ return 'OrderBook match';
95
+ default:
96
+ return 'OrderBook transaction';
97
+ }
98
+ }
99
+ export function inferOrderBookActionMatch(orderBookOrders, ftMovements, outputs = []) {
100
+ return matchOrderBookAction(buildOrderBookFacts(orderBookOrders, ftMovements, outputs));
101
+ }
102
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/protocols/order-book/actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { DecodedInput, DecodedOutput } from '../../types.js';
2
+ import type { FungibleTokenMovement, OrderBookOrder } from '../../types/protocol.js';
3
+ import type { OrderBookFacts } from './types.js';
4
+ export declare function buildOrderBookFacts(orders: OrderBookOrder[], ftMovements: FungibleTokenMovement[], outputs?: DecodedOutput[]): OrderBookFacts;
5
+ export declare function collectOrderBookFacts(inputs: DecodedInput[], outputs: DecodedOutput[], ftMovements?: FungibleTokenMovement[]): OrderBookFacts;
6
+ export declare function orderBookOrdersFromFacts(facts: OrderBookFacts): OrderBookOrder[];
7
+ //# sourceMappingURL=facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../../src/protocols/order-book/facts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,YAAY,CAAC;AAgDpE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,cAAc,EAAE,EACxB,WAAW,EAAE,qBAAqB,EAAE,EACpC,OAAO,GAAE,aAAa,EAAO,GAC5B,cAAc,CA6BhB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,EAAE,aAAa,EAAE,EACxB,WAAW,GAAE,qBAAqB,EAAO,GACxC,cAAc,CAWhB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,EAAE,CAEhF"}
@@ -0,0 +1,81 @@
1
+ import { tbc } from '../../adapters/tbc-lib.js';
2
+ function scriptLockHash(scriptHex) {
3
+ if (!scriptHex || scriptHex.length % 2 !== 0) {
4
+ return undefined;
5
+ }
6
+ return tbc.crypto.Hash.sha256ripemd160(tbc.crypto.Hash.sha256(Buffer.from(scriptHex, 'hex'))).toString('hex');
7
+ }
8
+ function stateRefFromInput(input, orderIndex) {
9
+ const orderBook = input.prevout?.script.data?.orderBook;
10
+ if (!orderBook) {
11
+ return undefined;
12
+ }
13
+ const scriptHex = input.prevout?.script.hex;
14
+ return {
15
+ orderIndex,
16
+ inputIndex: input.index,
17
+ source: 'input',
18
+ satoshis: input.prevout?.satoshis,
19
+ scriptHex,
20
+ scriptHash: scriptLockHash(scriptHex),
21
+ ...orderBook,
22
+ };
23
+ }
24
+ function stateRefFromOutput(output, orderIndex) {
25
+ const orderBook = output.script.data?.orderBook;
26
+ if (!orderBook) {
27
+ return undefined;
28
+ }
29
+ return {
30
+ orderIndex,
31
+ outputIndex: output.index,
32
+ source: 'output',
33
+ satoshis: output.satoshis,
34
+ scriptHex: output.script.hex,
35
+ scriptHash: scriptLockHash(output.script.hex),
36
+ ...orderBook,
37
+ };
38
+ }
39
+ export function buildOrderBookFacts(orders, ftMovements, outputs = []) {
40
+ const stateRefs = orders.map((order, orderIndex) => {
41
+ const outputScriptHex = order.source === 'output' && order.outputIndex !== undefined
42
+ ? outputs.find((output) => output.index === order.outputIndex)?.script.hex
43
+ : undefined;
44
+ return {
45
+ ...order,
46
+ ...(outputScriptHex
47
+ ? {
48
+ scriptHex: outputScriptHex,
49
+ scriptHash: scriptLockHash(outputScriptHex),
50
+ }
51
+ : {}),
52
+ orderIndex,
53
+ };
54
+ });
55
+ return {
56
+ orders: stateRefs,
57
+ inputOrders: stateRefs.filter((order) => order.source === 'input'),
58
+ outputOrders: stateRefs.filter((order) => order.source === 'output'),
59
+ buyInputOrders: stateRefs.filter((order) => order.source === 'input' && order.side === 'buy'),
60
+ sellInputOrders: stateRefs.filter((order) => order.source === 'input' && order.side === 'sell'),
61
+ buyOutputOrders: stateRefs.filter((order) => order.source === 'output' && order.side === 'buy'),
62
+ sellOutputOrders: stateRefs.filter((order) => order.source === 'output' && order.side === 'sell'),
63
+ ftMovements,
64
+ tbcOutputs: outputs.filter((output) => output.satoshis > 0),
65
+ };
66
+ }
67
+ export function collectOrderBookFacts(inputs, outputs, ftMovements = []) {
68
+ const inputOrders = inputs
69
+ .map((input, index) => stateRefFromInput(input, index))
70
+ .filter((order) => Boolean(order));
71
+ const outputOrders = outputs
72
+ .map((output, index) => stateRefFromOutput(output, inputOrders.length + index))
73
+ .filter((order) => Boolean(order))
74
+ .map((order, index) => ({ ...order, orderIndex: inputOrders.length + index }));
75
+ const orders = [...inputOrders, ...outputOrders];
76
+ return buildOrderBookFacts(orders, ftMovements, outputs);
77
+ }
78
+ export function orderBookOrdersFromFacts(facts) {
79
+ return facts.orders.map(({ orderIndex: _orderIndex, scriptHex: _scriptHex, scriptHash: _scriptHash, ...order }) => order);
80
+ }
81
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../../src/protocols/order-book/facts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { OrderBookStateRef, OrderBookUpdateContinuity } from './types.js';
2
+ export declare function verifyOrderBookUpdateContinuity(inputOrders: OrderBookStateRef[], outputOrders: OrderBookStateRef[]): OrderBookUpdateContinuity;
3
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/protocols/order-book/identity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAa/E,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,iBAAiB,EAAE,EAChC,YAAY,EAAE,iBAAiB,EAAE,GAChC,yBAAyB,CA0C3B"}