dxs-stas-sdk 1.0.18 → 2.0.2

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 (172) hide show
  1. package/CODEBASE_MAP.json +1 -1
  2. package/README.md +186 -13
  3. package/dist/bitcoin/out-point.d.ts.map +1 -1
  4. package/dist/bitcoin/out-point.js +7 -2
  5. package/dist/bitcoin/out-point.js.map +1 -1
  6. package/dist/bitcoin/script-type.d.ts +3 -1
  7. package/dist/bitcoin/script-type.d.ts.map +1 -1
  8. package/dist/bitcoin/script-type.js +2 -0
  9. package/dist/bitcoin/script-type.js.map +1 -1
  10. package/dist/bitcoin/token-scheme.d.ts +15 -1
  11. package/dist/bitcoin/token-scheme.d.ts.map +1 -1
  12. package/dist/bitcoin/token-scheme.js +9 -1
  13. package/dist/bitcoin/token-scheme.js.map +1 -1
  14. package/dist/bitcoin/transaction-output.d.ts +0 -3
  15. package/dist/bitcoin/transaction-output.d.ts.map +1 -1
  16. package/dist/bitcoin/transaction-output.js +28 -73
  17. package/dist/bitcoin/transaction-output.js.map +1 -1
  18. package/dist/dstas-bundle-factory.d.ts +91 -0
  19. package/dist/dstas-bundle-factory.d.ts.map +1 -0
  20. package/dist/dstas-bundle-factory.js +436 -0
  21. package/dist/dstas-bundle-factory.js.map +1 -0
  22. package/dist/dstas-factory.d.ts +107 -0
  23. package/dist/dstas-factory.d.ts.map +1 -0
  24. package/dist/dstas-factory.js +298 -0
  25. package/dist/dstas-factory.js.map +1 -0
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +5 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/script/build/asm-template-builder.d.ts +4 -0
  31. package/dist/script/build/asm-template-builder.d.ts.map +1 -0
  32. package/dist/script/build/asm-template-builder.js +50 -0
  33. package/dist/script/build/asm-template-builder.js.map +1 -0
  34. package/dist/script/build/p2mpkh-builder.d.ts +6 -0
  35. package/dist/script/build/p2mpkh-builder.d.ts.map +1 -0
  36. package/dist/script/build/p2mpkh-builder.js +24 -0
  37. package/dist/script/build/p2mpkh-builder.js.map +1 -0
  38. package/dist/script/build/script-builder.d.ts +1 -0
  39. package/dist/script/build/script-builder.d.ts.map +1 -1
  40. package/dist/script/build/script-builder.js +19 -1
  41. package/dist/script/build/script-builder.js.map +1 -1
  42. package/dist/script/build/stas3-freeze-multisig-builder.d.ts +22 -0
  43. package/dist/script/build/stas3-freeze-multisig-builder.d.ts.map +1 -0
  44. package/dist/script/build/stas3-freeze-multisig-builder.js +99 -0
  45. package/dist/script/build/stas3-freeze-multisig-builder.js.map +1 -0
  46. package/dist/script/build/unlocking-script-builder.d.ts +11 -0
  47. package/dist/script/build/unlocking-script-builder.d.ts.map +1 -0
  48. package/dist/script/build/unlocking-script-builder.js +19 -0
  49. package/dist/script/build/unlocking-script-builder.js.map +1 -0
  50. package/dist/script/eval/script-evaluator.d.ts +60 -0
  51. package/dist/script/eval/script-evaluator.d.ts.map +1 -0
  52. package/dist/script/eval/script-evaluator.js +1038 -0
  53. package/dist/script/eval/script-evaluator.js.map +1 -0
  54. package/dist/script/index.d.ts +13 -0
  55. package/dist/script/index.d.ts.map +1 -1
  56. package/dist/script/index.js +13 -0
  57. package/dist/script/index.js.map +1 -1
  58. package/dist/script/read/base-script-reader.d.ts +19 -0
  59. package/dist/script/read/base-script-reader.d.ts.map +1 -0
  60. package/dist/script/read/base-script-reader.js +136 -0
  61. package/dist/script/read/base-script-reader.js.map +1 -0
  62. package/dist/script/read/locking-script-reader.d.ts +40 -0
  63. package/dist/script/read/locking-script-reader.d.ts.map +1 -0
  64. package/dist/script/read/locking-script-reader.js +272 -0
  65. package/dist/script/read/locking-script-reader.js.map +1 -0
  66. package/dist/script/read/script-read-token.d.ts +9 -0
  67. package/dist/script/read/script-read-token.d.ts.map +1 -0
  68. package/dist/script/read/script-read-token.js +15 -0
  69. package/dist/script/read/script-read-token.js.map +1 -0
  70. package/dist/script/read/script-reader-extensions.d.ts +7 -0
  71. package/dist/script/read/script-reader-extensions.d.ts.map +1 -0
  72. package/dist/script/read/script-reader-extensions.js +22 -0
  73. package/dist/script/read/script-reader-extensions.js.map +1 -0
  74. package/dist/script/read/script-reader.js +1 -1
  75. package/dist/script/read/script-reader.js.map +1 -1
  76. package/dist/script/read/stas3-locking-script-decomposer.d.ts +20 -0
  77. package/dist/script/read/stas3-locking-script-decomposer.d.ts.map +1 -0
  78. package/dist/script/read/stas3-locking-script-decomposer.js +128 -0
  79. package/dist/script/read/stas3-locking-script-decomposer.js.map +1 -0
  80. package/dist/script/read/stas3-unlocking-script-decomposer.d.ts +19 -0
  81. package/dist/script/read/stas3-unlocking-script-decomposer.d.ts.map +1 -0
  82. package/dist/script/read/stas3-unlocking-script-decomposer.js +223 -0
  83. package/dist/script/read/stas3-unlocking-script-decomposer.js.map +1 -0
  84. package/dist/script/script-samples.d.ts +2 -0
  85. package/dist/script/script-samples.d.ts.map +1 -1
  86. package/dist/script/script-samples.js +102 -1
  87. package/dist/script/script-samples.js.map +1 -1
  88. package/dist/script/script-token.d.ts +3 -0
  89. package/dist/script/script-token.d.ts.map +1 -1
  90. package/dist/script/script-token.js +6 -0
  91. package/dist/script/script-token.js.map +1 -1
  92. package/dist/script/stas3-second-field.d.ts +30 -0
  93. package/dist/script/stas3-second-field.d.ts.map +1 -0
  94. package/dist/script/stas3-second-field.js +110 -0
  95. package/dist/script/stas3-second-field.js.map +1 -0
  96. package/dist/script/templates/stas3-freeze-multisig-base.d.ts +8 -0
  97. package/dist/script/templates/stas3-freeze-multisig-base.d.ts.map +1 -0
  98. package/dist/script/templates/stas3-freeze-multisig-base.js +2488 -0
  99. package/dist/script/templates/stas3-freeze-multisig-base.js.map +1 -0
  100. package/dist/script/templates/stas3-freeze-multisig.d.ts +2 -0
  101. package/dist/script/templates/stas3-freeze-multisig.d.ts.map +1 -0
  102. package/dist/script/templates/stas3-freeze-multisig.js +7 -0
  103. package/dist/script/templates/stas3-freeze-multisig.js.map +1 -0
  104. package/dist/stas-bundle-factory.d.ts.map +1 -1
  105. package/dist/stas-bundle-factory.js +4 -0
  106. package/dist/stas-bundle-factory.js.map +1 -1
  107. package/dist/transaction/build/input-builder.d.ts +12 -1
  108. package/dist/transaction/build/input-builder.d.ts.map +1 -1
  109. package/dist/transaction/build/input-builder.js +191 -22
  110. package/dist/transaction/build/input-builder.js.map +1 -1
  111. package/dist/transaction/build/transaction-builder.d.ts +2 -1
  112. package/dist/transaction/build/transaction-builder.d.ts.map +1 -1
  113. package/dist/transaction/build/transaction-builder.js +8 -2
  114. package/dist/transaction/build/transaction-builder.js.map +1 -1
  115. package/dist/transaction-factory.d.ts +9 -5
  116. package/dist/transaction-factory.d.ts.map +1 -1
  117. package/dist/transaction-factory.js +10 -10
  118. package/dist/transaction-factory.js.map +1 -1
  119. package/docs/AGENT_HANDBOOK.md +107 -46
  120. package/docs/COMMAND_LOG.md +59 -0
  121. package/docs/DSTAS_SCRIPT_INVARIANTS.md +109 -0
  122. package/docs/MIGRATION.md +10 -9
  123. package/docs/PR_SUMMARY.md +38 -20
  124. package/docs/STAS3_FREEZE_MULTISIG.md +92 -0
  125. package/package.json +2 -2
  126. package/src/bitcoin/out-point.ts +11 -3
  127. package/src/bitcoin/script-type.ts +2 -0
  128. package/src/bitcoin/token-scheme.ts +25 -0
  129. package/src/bitcoin/transaction-output.ts +26 -75
  130. package/src/dstas-bundle-factory.ts +799 -0
  131. package/src/dstas-factory.ts +589 -0
  132. package/src/index.ts +18 -0
  133. package/src/script/build/asm-template-builder.ts +52 -0
  134. package/src/script/build/p2mpkh-builder.ts +22 -0
  135. package/src/script/build/script-builder.ts +22 -1
  136. package/src/script/build/stas3-freeze-multisig-builder.ts +158 -0
  137. package/src/script/build/unlocking-script-builder.ts +18 -0
  138. package/src/script/eval/script-evaluator.ts +1236 -0
  139. package/src/script/index.ts +13 -0
  140. package/src/script/read/base-script-reader.ts +192 -0
  141. package/src/script/read/locking-script-reader.ts +334 -0
  142. package/src/script/read/script-read-token.ts +17 -0
  143. package/src/script/read/script-reader-extensions.ts +21 -0
  144. package/src/script/read/script-reader.ts +1 -1
  145. package/src/script/read/stas3-locking-script-decomposer.ts +162 -0
  146. package/src/script/read/stas3-unlocking-script-decomposer.ts +255 -0
  147. package/src/script/script-samples.ts +107 -0
  148. package/src/script/script-token.ts +6 -0
  149. package/src/script/stas3-second-field.ts +161 -0
  150. package/src/script/templates/stas3-freeze-multisig-base.ts +2490 -0
  151. package/src/script/templates/stas3-freeze-multisig.ts +3 -0
  152. package/src/stas-bundle-factory.ts +4 -0
  153. package/src/transaction/build/input-builder.ts +268 -28
  154. package/src/transaction/build/transaction-builder.ts +9 -2
  155. package/src/transaction-factory.ts +14 -6
  156. package/tests/address-outpoint.test.ts +49 -0
  157. package/tests/debug/dstas-transfer-debug.ts +160 -0
  158. package/tests/debug/dstas-with-change-probe.test.ts +123 -0
  159. package/tests/dstas-bundle-factory.test.ts +403 -0
  160. package/tests/dstas-factory-guards.test.ts +50 -0
  161. package/tests/dstas-flow.test.ts +2069 -0
  162. package/tests/dstas-multisig-authority-flow.test.ts +518 -0
  163. package/tests/dstas-swap-mode.test.ts +89 -0
  164. package/tests/fixtures/dstas-reference-transfer-p2pkh.txt +1 -0
  165. package/tests/helpers/dstas-flow-helpers.ts +156 -0
  166. package/tests/helpers/fee-assertions.ts +38 -0
  167. package/tests/locking-script-reader.test.ts +173 -0
  168. package/tests/script-build.test.ts +49 -1
  169. package/tests/script-eval.test.ts +153 -0
  170. package/tests/stas3-second-field.test.ts +73 -0
  171. package/tests/token-scheme.test.ts +34 -0
  172. package/tests/transaction-build.test.ts +53 -0
package/CODEBASE_MAP.json CHANGED
@@ -375,7 +375,7 @@
375
375
  "name": "FeeRate",
376
376
  "kind": "const",
377
377
  "from": "src/transaction-factory.ts",
378
- "signature": "const FeeRate = 0.05"
378
+ "signature": "const FeeRate = 0.1"
379
379
  },
380
380
  {
381
381
  "name": "TBuildTransferTxRequest",
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # dxs-stas-sdk
2
2
 
3
- TypeScript SDK for building and reading Bitcoin SV transactions, with first-class support for STAS token scripts. It includes script builders/readers, transaction builders/parsers, STAS issue/transfer/split/merge helpers, and address/key utilities.
3
+ TypeScript SDK for building and reading Bitcoin SV transactions, with first-class support for DSTAS/STAS token scripts. It includes script builders/readers, transaction builders/parsers, DSTAS and STAS factories, and address/key utilities.
4
4
 
5
5
  ## Binary types
6
6
 
@@ -16,6 +16,177 @@ npm install dxs-stas-sdk
16
16
 
17
17
  An `OutPoint` represents a spendable UTXO: txid, vout, locking script, satoshis, and owner address.
18
18
 
19
+ ## Example: build a DSTAS issue + transfer flow
20
+
21
+ ```ts
22
+ import {
23
+ BuildDstasIssueTxs,
24
+ BuildDstasTransferTx,
25
+ OutPoint,
26
+ PrivateKey,
27
+ TokenScheme,
28
+ TransactionReader,
29
+ toHex,
30
+ utf8ToBytes,
31
+ fromHex,
32
+ } from "dxs-stas-sdk";
33
+
34
+ const bob = new PrivateKey(
35
+ fromHex("b62fd57a07804f79291317261054eb9b19c9ccec49146c38b30a29d48636c368"),
36
+ );
37
+ const alice = new PrivateKey(
38
+ fromHex("77b1b7d5bfe1288d94f829baba86d503e1a06b571aaa5d36820be19ef2fe520e"),
39
+ );
40
+
41
+ const scheme = new TokenScheme(
42
+ "Divisible STAS",
43
+ toHex(bob.Address.Hash160), // issuer token id
44
+ "DSTAS",
45
+ 1,
46
+ { isDivisible: true },
47
+ );
48
+
49
+ // Parse a funding transaction that belongs to issuer address (bob).
50
+ const sourceTx = TransactionReader.readHex("<funding-tx-hex>");
51
+ const fundingOut = OutPoint.fromTransaction(sourceTx, 0);
52
+
53
+ const { issueTxHex } = BuildDstasIssueTxs({
54
+ fundingPayment: { OutPoint: fundingOut, Owner: bob },
55
+ scheme,
56
+ destinations: [{ Satoshis: 100, To: bob.Address }],
57
+ feeRate: 0.1,
58
+ });
59
+
60
+ const issueTx = TransactionReader.readHex(issueTxHex);
61
+ const stasOut = OutPoint.fromTransaction(issueTx, 0);
62
+ const feeOut = OutPoint.fromTransaction(issueTx, 1);
63
+
64
+ const transferTxHex = BuildDstasTransferTx({
65
+ stasPayment: { OutPoint: stasOut, Owner: bob },
66
+ feePayment: { OutPoint: feeOut, Owner: bob },
67
+ destination: { Satoshis: 100, To: alice.Address },
68
+ Scheme: scheme,
69
+ note: [utf8ToBytes("DSTAS"), utf8ToBytes("transfer")],
70
+ });
71
+ ```
72
+
73
+ ## Example: high-level DSTAS payouts with `DstasBundleFactory`
74
+
75
+ ```ts
76
+ import {
77
+ Address,
78
+ DstasBundleFactory,
79
+ DstasSpendType,
80
+ LockingScriptReader,
81
+ OutPoint,
82
+ ScriptType,
83
+ Transaction,
84
+ Wallet,
85
+ hash160,
86
+ toHex,
87
+ utf8ToBytes,
88
+ } from "dxs-stas-sdk";
89
+
90
+ const stasWallet =
91
+ Wallet.fromMnemonic("<mnemonic>").deriveWallet("m/44'/236'/0'/0/0");
92
+ const feeWallet =
93
+ Wallet.fromMnemonic("<mnemonic>").deriveWallet("m/44'/236'/0'/0/1");
94
+
95
+ // You provide these integrations from your indexer/wallet backend.
96
+ const getStasUtxoSet = async (minSats = 0): Promise<OutPoint[]> => {
97
+ return await fetchDstasUtxosForAddress(stasWallet.Address, minSats);
98
+ };
99
+
100
+ const getFundingUtxo = async ({
101
+ estimatedFeeSatoshis,
102
+ }: {
103
+ utxoIdsToSpend: string[];
104
+ estimatedFeeSatoshis: number;
105
+ transactionsCount: number;
106
+ }): Promise<OutPoint> => {
107
+ return await fetchFeeUtxoForAddress(feeWallet.Address, estimatedFeeSatoshis);
108
+ };
109
+
110
+ const getTransactions = async (
111
+ ids: string[],
112
+ ): Promise<Record<string, Transaction>> => {
113
+ return await fetchTransactionsByIds(ids);
114
+ };
115
+
116
+ const mapSpendTypeToCode = (spendType: DstasSpendType): number => {
117
+ if (spendType === "swap") return 4;
118
+ if (spendType === "freeze" || spendType === "unfreeze") return 2;
119
+ return 1;
120
+ };
121
+
122
+ const factory = new DstasBundleFactory(
123
+ stasWallet,
124
+ feeWallet,
125
+ getFundingUtxo,
126
+ getStasUtxoSet,
127
+ getTransactions,
128
+ ({ fromOutPoint, recipient, spendType, isFreezeLike, isChange }) => {
129
+ const parsed = LockingScriptReader.read(fromOutPoint.LockignScript).Dstas;
130
+ if (!parsed) throw new Error("Expected DSTAS input locking script");
131
+ if (recipient.m !== 1 || recipient.addresses.length !== 1) {
132
+ throw new Error("README example supports only m=1 recipient");
133
+ }
134
+
135
+ return {
136
+ owner: recipient.addresses[0].Hash160,
137
+ actionData:
138
+ spendType === "swap" && !isChange ? parsed.ActionDataRaw : null,
139
+ redemptionPkh: parsed.Redemption,
140
+ frozen:
141
+ spendType === "freeze"
142
+ ? true
143
+ : spendType === "unfreeze"
144
+ ? false
145
+ : isFreezeLike,
146
+ flags: parsed.Flags,
147
+ serviceFields: parsed.ServiceFields,
148
+ optionalData: parsed.OptionalData,
149
+ };
150
+ },
151
+ ({ txBuilder, inputIndex, spendType, isMerge }) => {
152
+ const input = txBuilder.Inputs[inputIndex];
153
+ input.Merge = isMerge;
154
+ input.DstasSpendingType = mapSpendTypeToCode(spendType);
155
+ input.sign(true);
156
+ if (!input.UnlockingScript) {
157
+ throw new Error("Failed to build DSTAS unlocking script");
158
+ }
159
+ return input.UnlockingScript;
160
+ },
161
+ );
162
+
163
+ const recipients = [
164
+ {
165
+ recipient: { m: 1, addresses: [Address.fromBase58("<alice-address>")] },
166
+ satoshis: 150,
167
+ },
168
+ {
169
+ recipient: { m: 1, addresses: [Address.fromBase58("<bob-address>")] },
170
+ satoshis: 200,
171
+ },
172
+ ];
173
+
174
+ const bundle = await factory.transfer({
175
+ outputs: recipients,
176
+ spendType: "transfer",
177
+ note: [utf8ToBytes("DSTAS"), utf8ToBytes("bundle transfer")],
178
+ });
179
+
180
+ console.log("transactions:", bundle.transactions?.length ?? 0);
181
+ console.log("paid fee satoshis:", bundle.feeSatoshis);
182
+ ```
183
+
184
+ Notes:
185
+
186
+ - `DstasBundleFactory` plans merge/split/transfer service transactions automatically.
187
+ - `note` is attached only to final transfer transaction(s), not to intermediate service transactions.
188
+ - For recipient multisig (`m > 1`), replace the simple `owner` derivation with your protocol-specific owner preimage/hash strategy.
189
+
19
190
  ## Example: build a simple P2PKH transaction
20
191
 
21
192
  ```ts
@@ -31,6 +202,7 @@ import {
31
202
  const pk = new PrivateKey(
32
203
  fromHex("b62fd57a07804f79291317261054eb9b19c9ccec49146c38b30a29d48636c368"),
33
204
  );
205
+ const from = pk.Address;
34
206
  const to = Address.fromBase58("1MkvWa82XHFqmRHaiRZ8BqZS7Uc83wekjp");
35
207
  const lockingScript = fromHex(
36
208
  "76a914e3b111de8fec527b41f4189e313638075d96ccd688ac",
@@ -79,7 +251,7 @@ const tokenScheme = new TokenScheme(
79
251
  "Token Name",
80
252
  "e3b111de8fec527b41f4189e313638075d96ccd6",
81
253
  "TokenSymbol",
82
- satoshisPerToken, //
254
+ 1,
83
255
  );
84
256
 
85
257
  // Parse a previous transaction that produced a STAS output + fee output.
@@ -119,7 +291,7 @@ const tokenScheme = new TokenScheme(
119
291
  "Token Name",
120
292
  "e3b111de8fec527b41f4189e313638075d96ccd6",
121
293
  "Token Symbol",
122
- SatoshisPerToken,
294
+ 1,
123
295
  );
124
296
 
125
297
  // Parse a funding transaction with two outputs:
@@ -140,8 +312,8 @@ const txHex = TransactionBuilder.init()
140
312
  ## What this library is for
141
313
 
142
314
  - Construct and parse raw Bitcoin SV transactions.
143
- - Build and read scripts (P2PKH, OP_RETURN, STAS).
144
- - Create STAS token transactions (issue, transfer, split, merge, redeem).
315
+ - Build and read scripts (P2PKH, OP_RETURN, DSTAS, STAS).
316
+ - Create DSTAS and STAS token transactions.
145
317
  - Work with keys, addresses, and standard hashing helpers.
146
318
 
147
319
  ## FAQ / common pitfalls
@@ -154,14 +326,15 @@ const txHex = TransactionBuilder.init()
154
326
 
155
327
  ## API overview (high level)
156
328
 
157
- | Area | Purpose | Key exports |
158
- | ----------------------- | ------------------------------------ | ----------------------------------------------------------------------------------- |
159
- | Bytes | Hex/UTF-8 helpers and byte utilities | `fromHex`, `toHex`, `utf8ToBytes`, `bytesToUtf8`, `concat`, `equal` |
160
- | Bitcoin primitives | Keys, addresses, transactions | `PrivateKey`, `Address`, `Transaction`, `OutPoint` |
161
- | Script builders/readers | Build and parse scripts | `ScriptBuilder`, `P2pkhBuilder`, `P2stasBuilder`, `NullDataBuilder`, `ScriptReader` |
162
- | Transaction building | Assemble raw txs | `TransactionBuilder`, `TransactionReader` |
163
- | STAS factories | STAS workflows | `BuildTransferTx`, `BuildSplitTx`, `BuildMergeTx`, `BuildRedeemTx` |
329
+ | Area | Purpose | Key exports |
330
+ | ----------------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------- |
331
+ | Bytes | Hex/UTF-8 helpers and byte utilities | `fromHex`, `toHex`, `utf8ToBytes`, `bytesToUtf8`, `concat`, `equal` |
332
+ | Bitcoin primitives | Keys, addresses, transactions | `PrivateKey`, `Address`, `Transaction`, `OutPoint` |
333
+ | Script builders/readers | Build and parse scripts | `ScriptBuilder`, `P2pkhBuilder`, `P2stasBuilder`, `NullDataBuilder`, `ScriptReader` |
334
+ | Transaction building | Assemble raw txs | `TransactionBuilder`, `TransactionReader` |
335
+ | Token factories | DSTAS/STAS workflows | `DstasBundleFactory`, `BuildDstasIssueTxs`, `BuildDstasTransferTx`, `BuildTransferTx`, `BuildSplitTx` |
164
336
 
165
337
  ## Author
166
338
 
167
- - Oleg Panagushin (author) — https://github.com/panagushin
339
+ - Author: [Oleg Panagushin](https://github.com/panagushin)
340
+ CTO / System Architect — Crypto & FinTech
@@ -1 +1 @@
1
- {"version":3,"file":"out-point.d.ts","sourceRoot":"","sources":["../../src/bitcoin/out-point.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,qBAAa,QAAQ;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,KAAK,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;gBAGxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,KAAK,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU;IAUxB,MAAM,CAAC,eAAe,gBAAiB,WAAW,QAAQ,MAAM,kBAC1B;IAEtC,MAAM,CAAC,OAAO,QAAS,MAAM,QAAQ,MAAM,kBACc;IAEzD,QAAQ,eAAqC;CAC9C;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM;CAoBnD"}
1
+ {"version":3,"file":"out-point.d.ts","sourceRoot":"","sources":["../../src/bitcoin/out-point.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,qBAAa,QAAQ;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,KAAK,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,CAAC,EAAE,WAAW,CAAC;gBAGxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,KAAK,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU;IAUxB,MAAM,CAAC,eAAe,gBAAiB,WAAW,QAAQ,MAAM,kBAC1B;IAEtC,MAAM,CAAC,OAAO,QAAS,MAAM,QAAQ,MAAM,kBACc;IAEzD,QAAQ,eAAqC;CAC9C;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM;CA4BnD"}
@@ -21,8 +21,13 @@ class OutPointFull extends OutPoint {
21
21
  constructor(transaction, vout) {
22
22
  const output = transaction.Outputs[vout];
23
23
  if (output.ScriptType !== script_type_1.ScriptType.p2pkh &&
24
- output.ScriptType !== script_type_1.ScriptType.p2stas)
25
- throw new Error("p2pkh or p2stat output must be provided");
24
+ output.ScriptType !== script_type_1.ScriptType.p2mpkh &&
25
+ output.ScriptType !== script_type_1.ScriptType.p2stas &&
26
+ output.ScriptType !== script_type_1.ScriptType.dstas)
27
+ throw new Error("p2pkh, p2mpkh, p2stas or dstas output must be provided");
28
+ if (!output.Address) {
29
+ throw new Error("Output does not expose address (for example, DSTAS multisig owner). Build OutPoint manually.");
30
+ }
26
31
  super(transaction.Id, vout, output.LockignScript, output.Satoshis, output.Address, output.ScriptType);
27
32
  this.Transaction = transaction;
28
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"out-point.js","sourceRoot":"","sources":["../../src/bitcoin/out-point.ts"],"names":[],"mappings":";;;AAAA,gDAAmD;AAEnD,+CAA2C;AAI3C,MAAa,QAAQ;IASnB,YACE,IAAY,EACZ,IAAY,EACZ,aAAoB,EACpB,QAAgB,EAChB,OAAgB,EAChB,UAAsB;QAgBxB,aAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAd3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;;AAvBH,4BAgCC;AAPQ,wBAAe,GAAG,CAAC,WAAwB,EAAE,IAAY,EAAE,EAAE,CAClE,IAAI,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,AADf,CACgB;AAE/B,gBAAO,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE,CAC7C,IAAI,YAAY,CAAC,+BAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,AAD1C,CAC2C;AAK3D,MAAa,YAAa,SAAQ,QAAQ;IACxC,YAAY,WAAwB,EAAE,IAAY;QAChD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEzC,IACE,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,KAAK;YACtC,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,MAAM;YAEvC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAE7D,KAAK,CACH,WAAW,CAAC,EAAE,EACd,IAAI,EACJ,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAQ,EACf,MAAM,CAAC,UAAU,CAClB,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AArBD,oCAqBC"}
1
+ {"version":3,"file":"out-point.js","sourceRoot":"","sources":["../../src/bitcoin/out-point.ts"],"names":[],"mappings":";;;AAAA,gDAAmD;AAEnD,+CAA2C;AAI3C,MAAa,QAAQ;IASnB,YACE,IAAY,EACZ,IAAY,EACZ,aAAoB,EACpB,QAAgB,EAChB,OAAgB,EAChB,UAAsB;QAgBxB,aAAQ,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAd3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;;AAvBH,4BAgCC;AAPQ,wBAAe,GAAG,CAAC,WAAwB,EAAE,IAAY,EAAE,EAAE,CAClE,IAAI,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,AADf,CACgB;AAE/B,gBAAO,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,EAAE,CAC7C,IAAI,YAAY,CAAC,+BAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,AAD1C,CAC2C;AAK3D,MAAa,YAAa,SAAQ,QAAQ;IACxC,YAAY,WAAwB,EAAE,IAAY;QAChD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEzC,IACE,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,KAAK;YACtC,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,MAAM;YACvC,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,MAAM;YACvC,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,KAAK;YAEtC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAE5E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAC;SACH;QAED,KAAK,CACH,WAAW,CAAC,EAAE,EACd,IAAI,EACJ,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,UAAU,CAClB,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;CACF;AA7BD,oCA6BC"}
@@ -5,6 +5,8 @@ export declare enum ScriptType {
5
5
  p2sh = 3,
6
6
  p2ms = 4,
7
7
  nullData = 5,
8
- p2stas = 6
8
+ p2stas = 6,
9
+ dstas = 7,
10
+ p2mpkh = 8
9
11
  }
10
12
  //# sourceMappingURL=script-type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"script-type.d.ts","sourceRoot":"","sources":["../../src/bitcoin/script-type.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACpB,OAAO,IAAI;IACX,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,QAAQ,IAAI;IACZ,MAAM,IAAI;CACX"}
1
+ {"version":3,"file":"script-type.d.ts","sourceRoot":"","sources":["../../src/bitcoin/script-type.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACpB,OAAO,IAAI;IACX,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,QAAQ,IAAI;IACZ,MAAM,IAAI;IACV,KAAK,IAAI;IACT,MAAM,IAAI;CACX"}
@@ -10,5 +10,7 @@ var ScriptType;
10
10
  ScriptType[ScriptType["p2ms"] = 4] = "p2ms";
11
11
  ScriptType[ScriptType["nullData"] = 5] = "nullData";
12
12
  ScriptType[ScriptType["p2stas"] = 6] = "p2stas";
13
+ ScriptType[ScriptType["dstas"] = 7] = "dstas";
14
+ ScriptType[ScriptType["p2mpkh"] = 8] = "p2mpkh";
13
15
  })(ScriptType || (exports.ScriptType = ScriptType = {}));
14
16
  //# sourceMappingURL=script-type.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"script-type.js","sourceRoot":"","sources":["../../src/bitcoin/script-type.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAQX;AARD,WAAY,UAAU;IACpB,iDAAW,CAAA;IACX,2CAAQ,CAAA;IACR,6CAAS,CAAA;IACT,2CAAQ,CAAA;IACR,2CAAQ,CAAA;IACR,mDAAY,CAAA;IACZ,+CAAU,CAAA;AACZ,CAAC,EARW,UAAU,0BAAV,UAAU,QAQrB"}
1
+ {"version":3,"file":"script-type.js","sourceRoot":"","sources":["../../src/bitcoin/script-type.ts"],"names":[],"mappings":";;;AAAA,IAAY,UAUX;AAVD,WAAY,UAAU;IACpB,iDAAW,CAAA;IACX,2CAAQ,CAAA;IACR,6CAAS,CAAA;IACT,2CAAQ,CAAA;IACR,2CAAQ,CAAA;IACR,mDAAY,CAAA;IACZ,+CAAU,CAAA;IACV,6CAAS,CAAA;IACT,+CAAU,CAAA;AACZ,CAAC,EAVW,UAAU,0BAAV,UAAU,QAUrB"}
@@ -1,9 +1,23 @@
1
+ export type TokenAuthority = {
2
+ m: number;
3
+ publicKeys: string[];
4
+ };
5
+ export type TokenSchemeOptions = {
6
+ freeze?: boolean;
7
+ confiscation?: boolean;
8
+ isDivisible?: boolean;
9
+ authority?: TokenAuthority;
10
+ };
1
11
  export declare class TokenScheme {
2
12
  Name: string;
3
13
  TokenId: string;
4
14
  Symbol: string;
5
15
  SatoshisPerToken: number;
6
- constructor(name: string, tokenId: string, symbol: string, satoshisPerToken: number);
16
+ Freeze: boolean;
17
+ Confiscation: boolean;
18
+ IsDivisible: boolean;
19
+ Authority?: TokenAuthority;
20
+ constructor(name: string, tokenId: string, symbol: string, satoshisPerToken: number, options?: TokenSchemeOptions);
7
21
  toJson: () => string;
8
22
  toBytes: () => Uint8Array;
9
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"token-scheme.d.ts","sourceRoot":"","sources":["../../src/bitcoin/token-scheme.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;gBAGvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM;IAQ1B,MAAM,eAMD;IAEL,OAAO,mBAAiD;CACzD"}
1
+ {"version":3,"file":"token-scheme.d.ts","sourceRoot":"","sources":["../../src/bitcoin/token-scheme.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B,CAAC;AAEF,qBAAa,WAAW;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,cAAc,CAAC;gBAGzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,kBAAuB;IAYlC,MAAM,eAUD;IAEL,OAAO,mBAAiD;CACzD"}
@@ -2,18 +2,26 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TokenScheme = void 0;
4
4
  class TokenScheme {
5
- constructor(name, tokenId, symbol, satoshisPerToken) {
5
+ constructor(name, tokenId, symbol, satoshisPerToken, options = {}) {
6
6
  this.toJson = () => JSON.stringify({
7
7
  name: this.Name,
8
8
  tokenId: this.TokenId,
9
9
  symbol: this.Symbol,
10
10
  satoshisPerToken: this.SatoshisPerToken,
11
+ freeze: this.Freeze,
12
+ confiscation: this.Confiscation,
13
+ isDivisible: this.IsDivisible,
14
+ authority: this.Authority,
11
15
  });
12
16
  this.toBytes = () => new TextEncoder().encode(this.toJson());
13
17
  this.Name = name;
14
18
  this.TokenId = tokenId;
15
19
  this.Symbol = symbol;
16
20
  this.SatoshisPerToken = satoshisPerToken;
21
+ this.Freeze = options.freeze === true;
22
+ this.Confiscation = options.confiscation === true;
23
+ this.IsDivisible = options.isDivisible === true;
24
+ this.Authority = options.authority;
17
25
  }
18
26
  }
19
27
  exports.TokenScheme = TokenScheme;
@@ -1 +1 @@
1
- {"version":3,"file":"token-scheme.js","sourceRoot":"","sources":["../../src/bitcoin/token-scheme.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAW;IAMtB,YACE,IAAY,EACZ,OAAe,EACf,MAAc,EACd,gBAAwB;QAQ1B,WAAM,GAAG,GAAG,EAAE,CACZ,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;SACxC,CAAC,CAAC;QAEL,YAAO,GAAG,GAAG,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAdtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CAWF;AA3BD,kCA2BC"}
1
+ {"version":3,"file":"token-scheme.js","sourceRoot":"","sources":["../../src/bitcoin/token-scheme.ts"],"names":[],"mappings":";;;AAYA,MAAa,WAAW;IAUtB,YACE,IAAY,EACZ,OAAe,EACf,MAAc,EACd,gBAAwB,EACxB,UAA8B,EAAE;QAYlC,WAAM,GAAG,GAAG,EAAE,CACZ,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QAEL,YAAO,GAAG,GAAG,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAtBtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;CAeF;AAxCD,kCAwCC"}
@@ -10,8 +10,5 @@ export declare class TransactionOutput {
10
10
  Symbol?: string;
11
11
  data: Bytes[];
12
12
  constructor(satoshis: number, lockignScript: Bytes);
13
- private _isNulData;
14
- private _isP2pkh;
15
- private _isP2stas;
16
13
  }
17
14
  //# sourceMappingURL=transaction-output.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-output.d.ts","sourceRoot":"","sources":["../../src/bitcoin/transaction-output.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAsB,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,qBAAa,iBAAiB;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,KAAK,CAAC;IACrB,UAAU,EAAE,UAAU,CAAsB;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,EAAE,CAAM;gBAEP,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK;IAalD,OAAO,CAAC,UAAU,CAehB;IAEF,OAAO,CAAC,QAAQ,CAyBd;IAEF,OAAO,CAAC,SAAS,CA6Bf;CACH"}
1
+ {"version":3,"file":"transaction-output.d.ts","sourceRoot":"","sources":["../../src/bitcoin/transaction-output.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAS,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,qBAAa,iBAAiB;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,KAAK,CAAC;IACrB,UAAU,EAAE,UAAU,CAAsB;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,KAAK,EAAE,CAAM;gBAEP,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK;CAyCnD"}
@@ -1,88 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TransactionOutput = void 0;
4
- const script_reader_1 = require("../script/read/script-reader");
5
- const script_samples_1 = require("../script/script-samples");
4
+ const locking_script_reader_1 = require("../script/read/locking-script-reader");
6
5
  const bytes_1 = require("../bytes");
7
- const address_1 = require("./address");
8
- const op_codes_1 = require("./op-codes");
9
6
  const script_type_1 = require("./script-type");
10
7
  class TransactionOutput {
11
8
  constructor(satoshis, lockignScript) {
9
+ var _a, _b, _c, _d;
12
10
  this.ScriptType = script_type_1.ScriptType.unknown;
13
11
  this.data = [];
14
- this._isNulData = (scriptTokens) => {
15
- if (scriptTokens.length > 2 &&
16
- scriptTokens[0].OpCodeNum === op_codes_1.OpCode.OP_0 &&
17
- scriptTokens[1].OpCodeNum === op_codes_1.OpCode.OP_RETURN) {
18
- for (let i = 2; i < scriptTokens.length; i++)
19
- this.data.push(scriptTokens[i].Data);
20
- this.ScriptType = script_type_1.ScriptType.nullData;
21
- return true;
22
- }
23
- return false;
24
- };
25
- this._isP2pkh = (scriptTokens) => {
26
- if (scriptTokens.length > script_samples_1.p2phkTokens.length)
27
- return false;
28
- let opReturnReached = false;
29
- for (let i = 0; i < scriptTokens.length; i++) {
30
- const token = scriptTokens[i];
31
- if (!opReturnReached) {
32
- if (token.OpCodeNum === op_codes_1.OpCode.OP_RETURN) {
33
- opReturnReached = true;
34
- }
35
- else {
36
- if (token.OpCodeNum !== script_samples_1.p2phkTokens[i].OpCodeNum)
37
- return false;
38
- if (script_samples_1.p2phkTokens[i].IsReceiverId)
39
- this.Address = new address_1.Address(token.Data);
40
- }
41
- }
42
- else {
43
- this.data.push(token.Data);
44
- }
45
- }
46
- this.ScriptType = script_type_1.ScriptType.p2pkh;
47
- return true;
48
- };
49
- this._isP2stas = (scriptTokens) => {
50
- const p2stasTokens = (0, script_samples_1.getP2stasTokens)();
51
- if (scriptTokens.length < p2stasTokens.length)
52
- return false;
53
- let opReturnIdx = -1;
54
- for (let i = 0; i < scriptTokens.length; i++) {
55
- const token = scriptTokens[i];
56
- if (opReturnIdx === -1) {
57
- if (token.OpCodeNum === op_codes_1.OpCode.OP_RETURN) {
58
- opReturnIdx = i;
59
- }
60
- else {
61
- if (token.OpCodeNum !== p2stasTokens[i].OpCodeNum)
62
- return false;
63
- if (p2stasTokens[i].IsReceiverId)
64
- this.Address = new address_1.Address(token.Data);
65
- }
66
- }
67
- else {
68
- if (i === opReturnIdx + 1)
69
- this.TokenId = (0, bytes_1.toHex)(token.Data);
70
- else if (i === opReturnIdx + 2)
71
- this.Symbol = (0, bytes_1.bytesToUtf8)(token.Data);
72
- else
73
- this.data.push(token.Data);
74
- }
75
- }
76
- this.ScriptType = script_type_1.ScriptType.p2stas;
77
- return true;
78
- };
79
12
  this.Satoshis = satoshis;
80
13
  this.LockignScript = lockignScript;
81
- const scriptTokens = script_reader_1.ScriptReader.read(this.LockignScript);
82
- if (!this._isNulData(scriptTokens)) {
83
- if (!this._isP2pkh(scriptTokens)) {
84
- this._isP2stas(scriptTokens);
14
+ const reader = locking_script_reader_1.LockingScriptReader.read(this.LockignScript);
15
+ this.ScriptType = reader.ScriptType;
16
+ this.Address = reader.Address;
17
+ if (reader.ScriptType === script_type_1.ScriptType.nullData) {
18
+ this.data = (_a = reader.Data) !== null && _a !== void 0 ? _a : [];
19
+ return;
20
+ }
21
+ if (reader.ScriptType === script_type_1.ScriptType.p2pkh ||
22
+ reader.ScriptType === script_type_1.ScriptType.p2mpkh) {
23
+ this.data = (_b = reader.Data) !== null && _b !== void 0 ? _b : [];
24
+ return;
25
+ }
26
+ if (reader.ScriptType === script_type_1.ScriptType.p2stas) {
27
+ this.TokenId = (_c = reader.getTokenId()) !== null && _c !== void 0 ? _c : undefined;
28
+ this.Symbol = (_d = reader.getSymbol()) !== null && _d !== void 0 ? _d : undefined;
29
+ if (reader.Data && reader.Data.length > 2) {
30
+ for (let i = 2; i < reader.Data.length; i++) {
31
+ this.data.push(reader.Data[i]);
32
+ }
85
33
  }
34
+ return;
35
+ }
36
+ if (reader.ScriptType === script_type_1.ScriptType.dstas && reader.Dstas) {
37
+ this.TokenId = (0, bytes_1.toHex)(reader.Dstas.Redemption);
38
+ this.data.push(reader.Dstas.Flags);
39
+ this.data.push(...reader.Dstas.ServiceFields);
40
+ this.data.push(...reader.Dstas.OptionalData);
86
41
  }
87
42
  }
88
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-output.js","sourceRoot":"","sources":["../../src/bitcoin/transaction-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction-output.js","sourceRoot":"","sources":["../../src/bitcoin/transaction-output.ts"],"names":[],"mappings":";;;AAAA,gFAA2E;AAC3E,oCAAwC;AAExC,+CAA2C;AAE3C,MAAa,iBAAiB;IAS5B,YAAY,QAAgB,EAAE,aAAoB;;QANlD,eAAU,GAAe,wBAAU,CAAC,OAAO,CAAC;QAI5C,SAAI,GAAY,EAAE,CAAC;QAGjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,MAAM,MAAM,GAAG,2CAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE5D,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAE9B,IAAI,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,QAAQ,EAAE;YAC7C,IAAI,CAAC,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,EAAE,CAAC;YAC9B,OAAO;SACR;QAED,IACE,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,KAAK;YACtC,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,MAAM,EACvC;YACA,IAAI,CAAC,IAAI,GAAG,MAAA,MAAM,CAAC,IAAI,mCAAI,EAAE,CAAC;YAC9B,OAAO;SACR;QAED,IAAI,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,MAAM,EAAE;YAC3C,IAAI,CAAC,OAAO,GAAG,MAAA,MAAM,CAAC,UAAU,EAAE,mCAAI,SAAS,CAAC;YAChD,IAAI,CAAC,MAAM,GAAG,MAAA,MAAM,CAAC,SAAS,EAAE,mCAAI,SAAS,CAAC;YAE9C,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChC;aACF;YACD,OAAO;SACR;QAED,IAAI,MAAM,CAAC,UAAU,KAAK,wBAAU,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE;YAC1D,IAAI,CAAC,OAAO,GAAG,IAAA,aAAK,EAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;SAC9C;IACH,CAAC;CACF;AAlDD,8CAkDC"}
@@ -0,0 +1,91 @@
1
+ import { Address, OutPoint, TPayment, Transaction, Wallet } from "./bitcoin";
2
+ import { Bytes } from "./bytes";
3
+ import { TransactionBuilder } from "./transaction";
4
+ import { Stas3FreezeMultisigParams } from "./script/build/stas3-freeze-multisig-builder";
5
+ export declare const AvgFeeForStas30Merge = 500;
6
+ export type TDstasFundingUtxoRequest = {
7
+ utxoIdsToSpend: string[];
8
+ estimatedFeeSatoshis: number;
9
+ transactionsCount: number;
10
+ };
11
+ export type TDstasGetUtxoFunction = (satoshis?: number) => Promise<OutPoint[]>;
12
+ export type TDstasGetFundingUtxoFunction = (request: TDstasFundingUtxoRequest) => Promise<OutPoint>;
13
+ export type TDstasGetTransactionsFunction = (ids: string[]) => Promise<Record<string, Transaction>>;
14
+ export type TDstasPayoutBundle = {
15
+ transactions?: string[];
16
+ feeSatoshis: number;
17
+ message?: string;
18
+ devMessage?: string;
19
+ };
20
+ export type DstasSpendType = "transfer" | "split" | "merge" | "freeze" | "unfreeze" | "swap";
21
+ export type TDstasRecipient = {
22
+ m: number;
23
+ addresses: Address[];
24
+ };
25
+ export type TDstasTransferOutput = {
26
+ recipient: TDstasRecipient;
27
+ satoshis: number;
28
+ };
29
+ export type TDstasTransferRequest = {
30
+ outputs: TDstasTransferOutput[];
31
+ spendType?: "transfer" | "freeze" | "unfreeze";
32
+ note?: Bytes[];
33
+ };
34
+ export type TDstasLockingParamsBuilder = (args: {
35
+ fromOutPoint: OutPoint;
36
+ recipient: TDstasRecipient;
37
+ spendType: DstasSpendType;
38
+ isFreezeLike: boolean;
39
+ outputIndex: number;
40
+ outputCount: number;
41
+ isChange: boolean;
42
+ }) => Stas3FreezeMultisigParams;
43
+ export type TDstasUnlockingScriptBuilder = (args: {
44
+ txBuilder: TransactionBuilder;
45
+ inputIndex: number;
46
+ outPoint: OutPoint;
47
+ spendType: DstasSpendType;
48
+ isFreezeLike: boolean;
49
+ isMerge: boolean;
50
+ }) => Bytes;
51
+ export type TDstasPayment = TPayment & {
52
+ UnlockingScript?: Bytes;
53
+ };
54
+ export type TDstasDestination = {
55
+ Satoshis: number;
56
+ LockingParams: Stas3FreezeMultisigParams;
57
+ };
58
+ export declare class DstasBundleFactory {
59
+ private readonly stasWallet;
60
+ private readonly feeWallet;
61
+ private readonly getFundingUtxo;
62
+ private readonly getStasUtxoSet;
63
+ private readonly getTransactions;
64
+ private readonly buildLockingParams;
65
+ private readonly buildUnlockingScript;
66
+ constructor(stasWallet: Wallet, feeWallet: Wallet, getFundingUtxo: TDstasGetFundingUtxoFunction, getStasUtxoSet: TDstasGetUtxoFunction, getTransactions: TDstasGetTransactionsFunction, buildLockingParams: TDstasLockingParamsBuilder, buildUnlockingScript: TDstasUnlockingScriptBuilder);
67
+ transfer: ({ outputs, spendType, note, }: TDstasTransferRequest) => Promise<TDstasPayoutBundle>;
68
+ createTransferBundle: (amountSatoshis: number, recipient: TDstasRecipient, note?: Bytes[]) => Promise<TDstasPayoutBundle>;
69
+ createFreezeBundle: (amountSatoshis: number, recipient: TDstasRecipient, note?: Bytes[]) => Promise<TDstasPayoutBundle>;
70
+ createUnfreezeBundle: (amountSatoshis: number, recipient: TDstasRecipient, note?: Bytes[]) => Promise<TDstasPayoutBundle>;
71
+ createSwapBundle: (amountSatoshis: number, recipient: TDstasRecipient, note?: Bytes[]) => Promise<TDstasPayoutBundle>;
72
+ createBundle: (amountSatoshis: number, recipient: TDstasRecipient, spendType: DstasSpendType, note?: Bytes[]) => Promise<TDstasPayoutBundle>;
73
+ private buildBundleWithResolvedFunding;
74
+ private estimateTransactionsCount;
75
+ private estimateMergeTransactionsCount;
76
+ private estimateFinalTransferTransactionsCount;
77
+ private estimateBundleFeeUpperBound;
78
+ private isInsufficientFeeError;
79
+ private _createTransferBundle;
80
+ private buildTransferPlanTransactions;
81
+ private getStasUtxo;
82
+ private mergeStasTransactions;
83
+ private buildStas30Tx;
84
+ private buildDestinations;
85
+ private validateStasAmounts;
86
+ private buildDstasLockingScriptBuilder;
87
+ private outPointFromTransaction;
88
+ private getStasOutPoint;
89
+ private getFeeOutPoint;
90
+ }
91
+ //# sourceMappingURL=dstas-bundle-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dstas-bundle-factory.d.ts","sourceRoot":"","sources":["../src/dstas-bundle-factory.ts"],"names":[],"mappings":"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"}