@nockchain/rose-ts 0.1.1-alpha

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 (242) hide show
  1. package/README.md +373 -0
  2. package/dist/constants.d.ts +2 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/constants.js +2 -0
  5. package/dist/constants.js.map +1 -0
  6. package/dist/core/belt.d.ts +16 -0
  7. package/dist/core/belt.d.ts.map +1 -0
  8. package/dist/core/belt.js +120 -0
  9. package/dist/core/belt.js.map +1 -0
  10. package/dist/core/digest.d.ts +9 -0
  11. package/dist/core/digest.d.ts.map +1 -0
  12. package/dist/core/digest.js +76 -0
  13. package/dist/core/digest.js.map +1 -0
  14. package/dist/core/hashable.d.ts +21 -0
  15. package/dist/core/hashable.d.ts.map +1 -0
  16. package/dist/core/hashable.js +128 -0
  17. package/dist/core/hashable.js.map +1 -0
  18. package/dist/core/lock.d.ts +8 -0
  19. package/dist/core/lock.d.ts.map +1 -0
  20. package/dist/core/lock.js +95 -0
  21. package/dist/core/lock.js.map +1 -0
  22. package/dist/core/merkle.d.ts +7 -0
  23. package/dist/core/merkle.d.ts.map +1 -0
  24. package/dist/core/merkle.js +57 -0
  25. package/dist/core/merkle.js.map +1 -0
  26. package/dist/core/must.d.ts +3 -0
  27. package/dist/core/must.d.ts.map +1 -0
  28. package/dist/core/must.js +14 -0
  29. package/dist/core/must.js.map +1 -0
  30. package/dist/core/tip5/constants.d.ts +10 -0
  31. package/dist/core/tip5/constants.d.ts.map +1 -0
  32. package/dist/core/tip5/constants.js +70 -0
  33. package/dist/core/tip5/constants.js.map +1 -0
  34. package/dist/core/tip5/index.d.ts +5 -0
  35. package/dist/core/tip5/index.d.ts.map +1 -0
  36. package/dist/core/tip5/index.js +100 -0
  37. package/dist/core/tip5/index.js.map +1 -0
  38. package/dist/core/u256.d.ts +21 -0
  39. package/dist/core/u256.d.ts.map +1 -0
  40. package/dist/core/u256.js +96 -0
  41. package/dist/core/u256.js.map +1 -0
  42. package/dist/core/ubig.d.ts +20 -0
  43. package/dist/core/ubig.d.ts.map +1 -0
  44. package/dist/core/ubig.js +81 -0
  45. package/dist/core/ubig.js.map +1 -0
  46. package/dist/core/zbase.d.ts +11 -0
  47. package/dist/core/zbase.d.ts.map +1 -0
  48. package/dist/core/zbase.js +82 -0
  49. package/dist/core/zbase.js.map +1 -0
  50. package/dist/crypto/bpoly.d.ts +3 -0
  51. package/dist/crypto/bpoly.d.ts.map +1 -0
  52. package/dist/crypto/bpoly.js +121 -0
  53. package/dist/crypto/bpoly.js.map +1 -0
  54. package/dist/crypto/cheetah.d.ts +25 -0
  55. package/dist/crypto/cheetah.d.ts.map +1 -0
  56. package/dist/crypto/cheetah.js +250 -0
  57. package/dist/crypto/cheetah.js.map +1 -0
  58. package/dist/crypto/index.d.ts +7 -0
  59. package/dist/crypto/index.d.ts.map +1 -0
  60. package/dist/crypto/index.js +24 -0
  61. package/dist/crypto/index.js.map +1 -0
  62. package/dist/crypto/privateKey.d.ts +11 -0
  63. package/dist/crypto/privateKey.d.ts.map +1 -0
  64. package/dist/crypto/privateKey.js +88 -0
  65. package/dist/crypto/privateKey.js.map +1 -0
  66. package/dist/crypto/publicKey.d.ts +18 -0
  67. package/dist/crypto/publicKey.d.ts.map +1 -0
  68. package/dist/crypto/publicKey.js +79 -0
  69. package/dist/crypto/publicKey.js.map +1 -0
  70. package/dist/crypto/slip10.d.ts +10 -0
  71. package/dist/crypto/slip10.d.ts.map +1 -0
  72. package/dist/crypto/slip10.js +104 -0
  73. package/dist/crypto/slip10.js.map +1 -0
  74. package/dist/grpc/index.d.ts +12 -0
  75. package/dist/grpc/index.d.ts.map +1 -0
  76. package/dist/grpc/index.js +13 -0
  77. package/dist/grpc/index.js.map +1 -0
  78. package/dist/grpc/proto.d.ts +26 -0
  79. package/dist/grpc/proto.d.ts.map +1 -0
  80. package/dist/grpc/proto.js +219 -0
  81. package/dist/grpc/proto.js.map +1 -0
  82. package/dist/hash/index.d.ts +32 -0
  83. package/dist/hash/index.d.ts.map +1 -0
  84. package/dist/hash/index.js +138 -0
  85. package/dist/hash/index.js.map +1 -0
  86. package/dist/hash/note.d.ts +13 -0
  87. package/dist/hash/note.d.ts.map +1 -0
  88. package/dist/hash/note.js +78 -0
  89. package/dist/hash/note.js.map +1 -0
  90. package/dist/hash/noteData.d.ts +12 -0
  91. package/dist/hash/noteData.d.ts.map +1 -0
  92. package/dist/hash/noteData.js +115 -0
  93. package/dist/hash/noteData.js.map +1 -0
  94. package/dist/hash/noun.d.ts +4 -0
  95. package/dist/hash/noun.d.ts.map +1 -0
  96. package/dist/hash/noun.js +15 -0
  97. package/dist/hash/noun.js.map +1 -0
  98. package/dist/hash/structural.d.ts +5 -0
  99. package/dist/hash/structural.d.ts.map +1 -0
  100. package/dist/hash/structural.js +41 -0
  101. package/dist/hash/structural.js.map +1 -0
  102. package/dist/hash/tx.d.ts +15 -0
  103. package/dist/hash/tx.d.ts.map +1 -0
  104. package/dist/hash/tx.js +146 -0
  105. package/dist/hash/tx.js.map +1 -0
  106. package/dist/index.d.ts +14 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +10 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/noun/belts.d.ts +9 -0
  111. package/dist/noun/belts.d.ts.map +1 -0
  112. package/dist/noun/belts.js +73 -0
  113. package/dist/noun/belts.js.map +1 -0
  114. package/dist/noun/bitwriter.d.ts +14 -0
  115. package/dist/noun/bitwriter.d.ts.map +1 -0
  116. package/dist/noun/bitwriter.js +100 -0
  117. package/dist/noun/bitwriter.js.map +1 -0
  118. package/dist/noun/codec.d.ts +9 -0
  119. package/dist/noun/codec.d.ts.map +1 -0
  120. package/dist/noun/codec.js +144 -0
  121. package/dist/noun/codec.js.map +1 -0
  122. package/dist/noun/cue.d.ts +3 -0
  123. package/dist/noun/cue.d.ts.map +1 -0
  124. package/dist/noun/cue.js +152 -0
  125. package/dist/noun/cue.js.map +1 -0
  126. package/dist/noun/encode.d.ts +12 -0
  127. package/dist/noun/encode.d.ts.map +1 -0
  128. package/dist/noun/encode.js +37 -0
  129. package/dist/noun/encode.js.map +1 -0
  130. package/dist/noun/index.d.ts +10 -0
  131. package/dist/noun/index.d.ts.map +1 -0
  132. package/dist/noun/index.js +29 -0
  133. package/dist/noun/index.js.map +1 -0
  134. package/dist/noun/jam.d.ts +3 -0
  135. package/dist/noun/jam.d.ts.map +1 -0
  136. package/dist/noun/jam.js +107 -0
  137. package/dist/noun/jam.js.map +1 -0
  138. package/dist/noun/types.d.ts +21 -0
  139. package/dist/noun/types.d.ts.map +1 -0
  140. package/dist/noun/types.js +66 -0
  141. package/dist/noun/types.js.map +1 -0
  142. package/dist/noun/words.d.ts +3 -0
  143. package/dist/noun/words.d.ts.map +1 -0
  144. package/dist/noun/words.js +6 -0
  145. package/dist/noun/words.js.map +1 -0
  146. package/dist/proto/decode.d.ts +10 -0
  147. package/dist/proto/decode.d.ts.map +1 -0
  148. package/dist/proto/decode.js +44 -0
  149. package/dist/proto/decode.js.map +1 -0
  150. package/dist/proto/digest.d.ts +21 -0
  151. package/dist/proto/digest.d.ts.map +1 -0
  152. package/dist/proto/digest.js +29 -0
  153. package/dist/proto/digest.js.map +1 -0
  154. package/dist/proto/index.d.ts +9 -0
  155. package/dist/proto/index.d.ts.map +1 -0
  156. package/dist/proto/index.js +140 -0
  157. package/dist/proto/index.js.map +1 -0
  158. package/dist/proto/note.d.ts +4 -0
  159. package/dist/proto/note.d.ts.map +1 -0
  160. package/dist/proto/note.js +99 -0
  161. package/dist/proto/note.js.map +1 -0
  162. package/dist/proto/rawTx.d.ts +3 -0
  163. package/dist/proto/rawTx.d.ts.map +1 -0
  164. package/dist/proto/rawTx.js +186 -0
  165. package/dist/proto/rawTx.js.map +1 -0
  166. package/dist/rpc/client.d.ts +13 -0
  167. package/dist/rpc/client.d.ts.map +1 -0
  168. package/dist/rpc/client.js +75 -0
  169. package/dist/rpc/client.js.map +1 -0
  170. package/dist/rpc/types.d.ts +18 -0
  171. package/dist/rpc/types.d.ts.map +1 -0
  172. package/dist/rpc/types.js +2 -0
  173. package/dist/rpc/types.js.map +1 -0
  174. package/dist/rpc/wire/encode.d.ts +4 -0
  175. package/dist/rpc/wire/encode.d.ts.map +1 -0
  176. package/dist/rpc/wire/encode.js +168 -0
  177. package/dist/rpc/wire/encode.js.map +1 -0
  178. package/dist/rpc/wire/protobuf.d.ts +10 -0
  179. package/dist/rpc/wire/protobuf.d.ts.map +1 -0
  180. package/dist/rpc/wire/protobuf.js +50 -0
  181. package/dist/rpc/wire/protobuf.js.map +1 -0
  182. package/dist/stubs.d.ts +6 -0
  183. package/dist/stubs.d.ts.map +1 -0
  184. package/dist/stubs.js +12 -0
  185. package/dist/stubs.js.map +1 -0
  186. package/dist/tx/accessors.d.ts +13 -0
  187. package/dist/tx/accessors.d.ts.map +1 -0
  188. package/dist/tx/accessors.js +65 -0
  189. package/dist/tx/accessors.js.map +1 -0
  190. package/dist/tx/builder.d.ts +63 -0
  191. package/dist/tx/builder.d.ts.map +1 -0
  192. package/dist/tx/builder.js +601 -0
  193. package/dist/tx/builder.js.map +1 -0
  194. package/dist/tx/display.d.ts +7 -0
  195. package/dist/tx/display.d.ts.map +1 -0
  196. package/dist/tx/display.js +34 -0
  197. package/dist/tx/display.js.map +1 -0
  198. package/dist/tx/fee.d.ts +8 -0
  199. package/dist/tx/fee.d.ts.map +1 -0
  200. package/dist/tx/fee.js +81 -0
  201. package/dist/tx/fee.js.map +1 -0
  202. package/dist/tx/htlc.d.ts +21 -0
  203. package/dist/tx/htlc.d.ts.map +1 -0
  204. package/dist/tx/htlc.js +65 -0
  205. package/dist/tx/htlc.js.map +1 -0
  206. package/dist/tx/index.d.ts +19 -0
  207. package/dist/tx/index.d.ts.map +1 -0
  208. package/dist/tx/index.js +64 -0
  209. package/dist/tx/index.js.map +1 -0
  210. package/dist/tx/multisig.d.ts +3 -0
  211. package/dist/tx/multisig.d.ts.map +1 -0
  212. package/dist/tx/multisig.js +8 -0
  213. package/dist/tx/multisig.js.map +1 -0
  214. package/dist/tx/outputs.d.ts +3 -0
  215. package/dist/tx/outputs.d.ts.map +1 -0
  216. package/dist/tx/outputs.js +57 -0
  217. package/dist/tx/outputs.js.map +1 -0
  218. package/dist/tx/spend.d.ts +10 -0
  219. package/dist/tx/spend.d.ts.map +1 -0
  220. package/dist/tx/spend.js +17 -0
  221. package/dist/tx/spend.js.map +1 -0
  222. package/dist/tx/spends.d.ts +8 -0
  223. package/dist/tx/spends.d.ts.map +1 -0
  224. package/dist/tx/spends.js +48 -0
  225. package/dist/tx/spends.js.map +1 -0
  226. package/dist/tx/types.d.ts +5 -0
  227. package/dist/tx/types.d.ts.map +1 -0
  228. package/dist/tx/types.js +2 -0
  229. package/dist/tx/types.js.map +1 -0
  230. package/dist/tx/unlocks.d.ts +4 -0
  231. package/dist/tx/unlocks.d.ts.map +1 -0
  232. package/dist/tx/unlocks.js +49 -0
  233. package/dist/tx/unlocks.js.map +1 -0
  234. package/dist/tx/witness.d.ts +14 -0
  235. package/dist/tx/witness.d.ts.map +1 -0
  236. package/dist/tx/witness.js +81 -0
  237. package/dist/tx/witness.js.map +1 -0
  238. package/dist/types.d.ts +311 -0
  239. package/dist/types.d.ts.map +1 -0
  240. package/dist/types.js +2 -0
  241. package/dist/types.js.map +1 -0
  242. package/package.json +45 -0
@@ -0,0 +1,601 @@
1
+ import { mustAt } from "../core/must.js";
2
+ import { lockRootHash, noteDataEmpty, noteDataPushBlob, noteDataPushLock, noteDataPushMemo, noteHash, pkhSingle, spendConditionNewPkh, } from "../hash/index.js";
3
+ import { encodeLock } from "../noun/codec.js";
4
+ import { toWire } from "../noun/types.js";
5
+ import { hashSpendV1SigHash, rawTxV1CalcId } from "../hash/tx.js";
6
+ import { hashPublicKey } from "../crypto/index.js";
7
+ import { cheetahPointToBase58, publicKeyFromBeBytes } from "../crypto/cheetah.js";
8
+ import { cue } from "../noun/cue.js";
9
+ import { hashNounStructural } from "../hash/structural.js";
10
+ import { noteDataFeeWords } from "../hash/note.js";
11
+ import { calcFeeFromSpends, missingUnlocksFee, spendCalcWords } from "./fee.js";
12
+ import { getDisplayInput, isV1DisplayInput } from "./display.js";
13
+ import { applyWitness, nameKey, splitWitness } from "./spends.js";
14
+ import { computeMissingUnlocks } from "./unlocks.js";
15
+ import { witnessFromLock, witnessWithHaxPreimage, witnessWithPkhSignature } from "./witness.js";
16
+ function compareNames(a, b) {
17
+ if (a.first !== b.first)
18
+ return a.first < b.first ? -1 : 1;
19
+ if (a.last !== b.last)
20
+ return a.last < b.last ? -1 : 1;
21
+ return 0;
22
+ }
23
+ function spendConditionFromLmp(lmp) {
24
+ return lmp.spend_condition;
25
+ }
26
+ function totalGifts(spend) {
27
+ const seeds = spend.tag === 1 ? spend.seeds : spend.seeds;
28
+ let total = 0n;
29
+ for (const seed of seeds)
30
+ total += BigInt(seed.gift);
31
+ return total;
32
+ }
33
+ function noteInfoFromSpend(name, spend) {
34
+ if (spend.tag !== 1)
35
+ return null;
36
+ const firstSeed = spend.seeds[0];
37
+ if (!firstSeed)
38
+ return null;
39
+ const gifts = totalGifts(spend);
40
+ const fee = BigInt(spend.fee);
41
+ return {
42
+ name,
43
+ version: 1,
44
+ assets: String(gifts + fee),
45
+ hash: firstSeed.parent_hash,
46
+ };
47
+ }
48
+ function lockFromLockRoot(lockRoot) {
49
+ if (typeof lockRoot === "string")
50
+ return null;
51
+ if (Array.isArray(lockRoot))
52
+ return lockRoot;
53
+ if ("tag" in lockRoot)
54
+ return lockRoot;
55
+ return null;
56
+ }
57
+ export class SpendBuilder {
58
+ noteInfo;
59
+ spend;
60
+ refundLock;
61
+ constructor(noteInfo, spend, refundLock) {
62
+ this.noteInfo = noteInfo;
63
+ this.spend = spend;
64
+ this.refundLock = refundLock;
65
+ }
66
+ static fromSpend(name, spend, refundLock) {
67
+ const info = noteInfoFromSpend(name, spend);
68
+ if (!info)
69
+ return null;
70
+ return new SpendBuilder(info, structuredClone(spend), refundLock);
71
+ }
72
+ static fromSpendAndInput(name, spend, input, refundLock) {
73
+ if (spend.tag !== 1 || !isV1DisplayInput(input))
74
+ return null;
75
+ return SpendBuilder.fromSpend(name, spend, refundLock);
76
+ }
77
+ missingUnlocks() {
78
+ return computeMissingUnlocks(this.spend);
79
+ }
80
+ static newFromWitness(note, witness, refundLock) {
81
+ if (!("version" in note) || !("note_data" in note)) {
82
+ throw new Error("V0 notes not supported");
83
+ }
84
+ const noteInfo = {
85
+ name: note.name,
86
+ version: 1,
87
+ assets: note.assets,
88
+ hash: noteHash(note),
89
+ };
90
+ const spend = {
91
+ tag: 1,
92
+ witness: structuredClone(witness),
93
+ seeds: [],
94
+ fee: "0",
95
+ };
96
+ return new SpendBuilder(noteInfo, spend, refundLock ?? null);
97
+ }
98
+ static new(note, lock, lockSpIndex, refundLock) {
99
+ if (!("version" in note) || !("note_data" in note)) {
100
+ throw new Error("V0 notes not supported");
101
+ }
102
+ if (lock == null || lockSpIndex == null) {
103
+ throw new Error("MissingSpendCondition");
104
+ }
105
+ const noteInfo = {
106
+ name: note.name,
107
+ version: 1,
108
+ assets: note.assets,
109
+ hash: noteHash(note),
110
+ };
111
+ const witness = witnessFromLock(lock, lockSpIndex);
112
+ const spend = {
113
+ tag: 1,
114
+ witness,
115
+ seeds: [],
116
+ fee: "0",
117
+ };
118
+ return new SpendBuilder(noteInfo, spend, refundLock ?? null);
119
+ }
120
+ buildSeed(lockRoot, gift, includeLockData, outputExtras) {
121
+ let note_data = noteDataEmpty();
122
+ if (includeLockData) {
123
+ const lock = lockFromLockRoot(lockRoot);
124
+ if (!lock)
125
+ throw new Error("include_lock_data set, but lock_root is a hash");
126
+ note_data = noteDataPushLock(note_data, toWire(encodeLock(lock)));
127
+ }
128
+ if (outputExtras?.blob) {
129
+ note_data = noteDataPushBlob(note_data, outputExtras.blob);
130
+ }
131
+ if (outputExtras?.memo) {
132
+ note_data = noteDataPushMemo(note_data, outputExtras.memo);
133
+ }
134
+ return {
135
+ output_source: null,
136
+ lock_root: lockRoot,
137
+ note_data,
138
+ gift,
139
+ parent_hash: this.noteInfo.hash,
140
+ };
141
+ }
142
+ seed(seed) {
143
+ this.invalidateSigs();
144
+ if (this.spend.tag !== 1)
145
+ return;
146
+ this.spend.seeds.push(seed);
147
+ }
148
+ fee(feePortion) {
149
+ if (this.spend.tag !== 1)
150
+ return;
151
+ if (this.spend.fee !== feePortion)
152
+ this.invalidateSigs();
153
+ this.spend.fee = feePortion;
154
+ }
155
+ curRefund() {
156
+ if (!this.refundLock || this.spend.tag !== 1)
157
+ return undefined;
158
+ const rlh = lockRootHash(this.refundLock);
159
+ return this.spend.seeds.find((s) => lockRootHash(s.lock_root) === rlh);
160
+ }
161
+ computeRefund(includeLockData) {
162
+ if (!this.refundLock || this.spend.tag !== 1)
163
+ return;
164
+ this.invalidateSigs();
165
+ const rlh = lockRootHash(this.refundLock);
166
+ this.spend.seeds = this.spend.seeds.filter((s) => lockRootHash(s.lock_root) !== rlh);
167
+ const gifts = this.spend.seeds.reduce((acc, s) => acc + BigInt(s.gift), 0n);
168
+ const refund = BigInt(this.noteInfo.assets) - BigInt(this.spend.fee) - gifts;
169
+ if (refund > 0n) {
170
+ const seed = this.buildSeed(this.refundLock, String(refund), includeLockData);
171
+ this.spend.seeds.unshift(seed);
172
+ }
173
+ }
174
+ isBalanced() {
175
+ if (this.spend.tag !== 1)
176
+ return false;
177
+ let sum = 0n;
178
+ for (const s of this.spend.seeds)
179
+ sum += BigInt(s.gift);
180
+ return this.noteInfo.assets === String(sum + BigInt(this.spend.fee));
181
+ }
182
+ addPreimage(preimageJam) {
183
+ if (this.spend.tag !== 1)
184
+ return undefined;
185
+ const noun = cue(preimageJam);
186
+ if (!noun)
187
+ return undefined;
188
+ const digest = hashNounStructural(noun);
189
+ const sc = spendConditionFromLmp(this.spend.witness.lock_merkle_proof);
190
+ for (const prim of sc) {
191
+ if (prim.tag === "hax") {
192
+ const list = Array.isArray(prim.preimages) ? prim.preimages : [];
193
+ if (list.includes(digest)) {
194
+ const hax = Array.isArray(this.spend.witness.hax_map)
195
+ ? [...this.spend.witness.hax_map]
196
+ : [];
197
+ hax.push([digest, noun]);
198
+ this.spend.witness.hax_map = hax;
199
+ return digest;
200
+ }
201
+ }
202
+ }
203
+ return undefined;
204
+ }
205
+ setWitness(witness) {
206
+ if (this.spend.tag !== 1)
207
+ return;
208
+ this.invalidateSigs();
209
+ this.spend.witness = structuredClone(witness);
210
+ }
211
+ pushPkhSignature(pkh, pubkeyBase58, signature) {
212
+ if (this.spend.tag !== 1)
213
+ return;
214
+ this.spend.witness = witnessWithPkhSignature(this.spend.witness, [
215
+ pkh,
216
+ [pubkeyBase58, signature],
217
+ ]);
218
+ }
219
+ pushHaxPreimage(digest, preimageNoun) {
220
+ if (this.spend.tag !== 1)
221
+ return;
222
+ this.spend.witness = witnessWithHaxPreimage(this.spend.witness, digest, preimageNoun);
223
+ }
224
+ invalidateSigs() {
225
+ if (this.spend.tag !== 1)
226
+ return;
227
+ this.spend.witness.pkh_signature = [];
228
+ }
229
+ async sign(signingKey) {
230
+ if (this.spend.tag !== 1)
231
+ return false;
232
+ const pkh = hashPublicKey(signingKey.publicKey);
233
+ const sc = spendConditionFromLmp(this.spend.witness.lock_merkle_proof);
234
+ for (const prim of sc) {
235
+ if (prim.tag !== "pkh")
236
+ continue;
237
+ const hashes = Array.isArray(prim.hashes) ? prim.hashes : [];
238
+ if (!hashes.includes(pkh))
239
+ continue;
240
+ const sig = signingKey.signDigest(hashSpendV1SigHash(this.spend));
241
+ const pubB58 = cheetahPointToBase58(publicKeyFromBeBytes(signingKey.publicKey));
242
+ const entry = [pkh, [pubB58, sig]];
243
+ const sigs = this.spend.witness.pkh_signature;
244
+ if (Array.isArray(sigs)) {
245
+ const idx = sigs.findIndex(([h]) => h === pkh);
246
+ if (idx >= 0)
247
+ sigs[idx] = entry;
248
+ else
249
+ sigs.push(entry);
250
+ }
251
+ return true;
252
+ }
253
+ return false;
254
+ }
255
+ }
256
+ export class TxBuilder {
257
+ spends;
258
+ feePool;
259
+ settings;
260
+ constructor(settings) {
261
+ this.settings = settings;
262
+ this.spends = new Map();
263
+ this.feePool = [];
264
+ }
265
+ static fromRawTx(tx, settings) {
266
+ const builder = new TxBuilder(settings);
267
+ const spends = tx.spends;
268
+ for (const [name, spend] of spends) {
269
+ const sb = SpendBuilder.fromSpend(name, spend, null);
270
+ if (!sb)
271
+ throw new Error("InvalidSpendCondition");
272
+ builder.spends.set(nameKey(name), sb);
273
+ }
274
+ return builder;
275
+ }
276
+ static fromNockchainTx(tx, settings) {
277
+ const rawSpends = applyWitness(tx.spends, tx.witness_data);
278
+ const builder = new TxBuilder(settings);
279
+ for (const [name, spend] of rawSpends) {
280
+ const input = getDisplayInput(tx.display.inputs, name);
281
+ if (input === undefined)
282
+ throw new Error("InvalidSpendCondition");
283
+ const sb = SpendBuilder.fromSpendAndInput(name, spend, input, null);
284
+ if (!sb)
285
+ throw new Error("InvalidSpendCondition");
286
+ builder.spends.set(nameKey(name), sb);
287
+ }
288
+ return builder;
289
+ }
290
+ spend(spend) {
291
+ const key = nameKey(spend.noteInfo.name);
292
+ const prev = this.spends.get(key);
293
+ this.spends.set(key, spend);
294
+ return prev;
295
+ }
296
+ allSpends() {
297
+ return [...this.spends.values()];
298
+ }
299
+ curFee() {
300
+ let total = 0n;
301
+ for (const sb of this.spends.values()) {
302
+ if (sb.spend.tag === 1)
303
+ total += BigInt(sb.spend.fee);
304
+ }
305
+ return String(total);
306
+ }
307
+ calcFee() {
308
+ const spends = [...this.spends.values()].map((s) => s.spend);
309
+ let fee = calcFeeFromSpends(spends, this.settings);
310
+ for (const sb of this.spends.values()) {
311
+ fee += missingUnlocksFee(sb.spend, this.settings);
312
+ }
313
+ const minFee = BigInt(this.settings.min_fee);
314
+ return String(fee > minFee ? fee : minFee);
315
+ }
316
+ simpleSpendBase(notes, recipient, gift, refundPkh, includeLockData, outputExtras) {
317
+ if (BigInt(gift) === 0n)
318
+ throw new Error("Cannot create a transaction with zero gift");
319
+ const refundLock = spendConditionNewPkh(pkhSingle(refundPkh));
320
+ let remainingGift = BigInt(gift);
321
+ for (const [note, spendCondition] of notes) {
322
+ const noteAssets = BigInt("assets" in note ? note.assets : "0");
323
+ const giftPortion = remainingGift < noteAssets ? remainingGift : noteAssets;
324
+ remainingGift -= giftPortion;
325
+ const lockInput = spendCondition;
326
+ const mutSpend = SpendBuilder.new(note, lockInput?.[0] ?? null, lockInput?.[1] ?? null, refundLock);
327
+ if (giftPortion > 0n) {
328
+ const recipientLock = spendConditionNewPkh(pkhSingle(recipient));
329
+ const seed = mutSpend.buildSeed(recipientLock, String(giftPortion), includeLockData, outputExtras);
330
+ mutSpend.seed(seed);
331
+ mutSpend.computeRefund(includeLockData);
332
+ this.spend(mutSpend);
333
+ }
334
+ else {
335
+ mutSpend.computeRefund(includeLockData);
336
+ this.feePool.push(mutSpend);
337
+ }
338
+ }
339
+ if (remainingGift > 0n) {
340
+ throw new Error("Insufficient funds to pay fee and gift");
341
+ }
342
+ }
343
+ simpleSpend(notes, locks, recipient, gift, feeOverride, refundPkh, includeLockData, outputExtras) {
344
+ if (notes.length !== locks.length) {
345
+ throw new Error("notes and locks must have the same length");
346
+ }
347
+ const zipped = notes.map((n, i) => [
348
+ n,
349
+ [mustAt(locks, i).lock, mustAt(locks, i).lock_sp_index],
350
+ ]);
351
+ this.simpleSpendBase(zipped, recipient, gift, refundPkh, includeLockData, outputExtras);
352
+ this.finishSimpleSpend(feeOverride, includeLockData);
353
+ }
354
+ simpleSpendWithLocks(notes, locks, lockSpIndices, recipient, gift, feeOverride, refundPkh, includeLockData, options) {
355
+ if (notes.length !== locks.length || notes.length !== lockSpIndices.length) {
356
+ throw new Error("notes, locks, and lockSpIndices must have the same length");
357
+ }
358
+ const zipped = notes.map((n, i) => [
359
+ n,
360
+ [mustAt(locks, i), mustAt(lockSpIndices, i)],
361
+ ]);
362
+ this.simpleSpendBase(zipped, recipient, gift, refundPkh, includeLockData, options?.outputExtras);
363
+ if (options?.preimageJam) {
364
+ const digest = this.addPreimage(options.preimageJam);
365
+ if (!digest) {
366
+ throw new Error("preimage does not match any spend condition hax unlock");
367
+ }
368
+ }
369
+ this.finishSimpleSpend(feeOverride, includeLockData);
370
+ }
371
+ simpleSpendHtlc(notes, locks, lockSpIndex, recipient, gift, feeOverride, refundPkh, includeLockData, options) {
372
+ if (lockSpIndex !== 0 && lockSpIndex !== 1) {
373
+ throw new Error("HTLC lock_sp_index must be 0 (claim) or 1 (refund)");
374
+ }
375
+ if (lockSpIndex === 0 && !options?.preimageJam) {
376
+ throw new Error("HTLC claim (lock_sp_index 0) requires options.preimageJam");
377
+ }
378
+ this.simpleSpendWithLocks(notes, locks, locks.map(() => lockSpIndex), recipient, gift, feeOverride, refundPkh, includeLockData, options);
379
+ }
380
+ simpleSpendMultisig(notes, locks, lockSpIndex, recipient, gift, feeOverride, refundPkh, includeLockData, outputExtras) {
381
+ this.simpleSpendWithLocks(notes, locks, locks.map(() => lockSpIndex), recipient, gift, feeOverride, refundPkh, includeLockData, outputExtras != null ? { outputExtras } : undefined);
382
+ }
383
+ finishSimpleSpend(feeOverride, includeLockData) {
384
+ if (feeOverride != null) {
385
+ this.setFeeAndBalanceRefund(feeOverride, false, includeLockData);
386
+ }
387
+ else {
388
+ this.recalcAndSetFee(includeLockData);
389
+ }
390
+ }
391
+ recalcAndSetFee(includeLockData) {
392
+ const fee = this.calcFee();
393
+ this.setFeeAndBalanceRefund(fee, true, includeLockData);
394
+ }
395
+ setFeeAndBalanceRefund(fee, adjustFee, includeLockData) {
396
+ const bythosActive = this.settings.tx_engine_version === 1 && this.settings.tx_engine_patch === 1;
397
+ const refundCounts = new Map();
398
+ for (const s of this.spends.values()) {
399
+ if (!s.refundLock)
400
+ continue;
401
+ const rlh = lockRootHash(s.refundLock);
402
+ const refunds = s.spend.tag === 1
403
+ ? s.spend.seeds.filter((v) => lockRootHash(v.lock_root) === rlh).length
404
+ : 0;
405
+ refundCounts.set(rlh, (refundCounts.get(rlh) ?? 0) + refunds);
406
+ }
407
+ const curFee = BigInt(this.curFee());
408
+ const targetFee = BigInt(fee);
409
+ if (curFee === targetFee)
410
+ return;
411
+ const spends = [...this.spends.values()];
412
+ if (curFee < targetFee) {
413
+ let feeLeft = targetFee - curFee;
414
+ spends.sort((a, b) => {
415
+ const anra = BigInt(a.noteInfo.assets) -
416
+ BigInt(a.curRefund()?.gift ?? "0");
417
+ const bnra = BigInt(b.noteInfo.assets) -
418
+ BigInt(b.curRefund()?.gift ?? "0");
419
+ if (anra !== bnra)
420
+ return bnra > anra ? 1 : -1;
421
+ const af = BigInt(a.spend.tag === 1 ? a.spend.fee : "0");
422
+ const bf = BigInt(b.spend.tag === 1 ? b.spend.fee : "0");
423
+ if (af !== bf)
424
+ return bf > af ? 1 : -1;
425
+ return compareNames(b.noteInfo.name, a.noteInfo.name);
426
+ });
427
+ for (const s of spends) {
428
+ const rs = s.curRefund();
429
+ if (!rs)
430
+ continue;
431
+ const subRefund = BigInt(rs.gift) < feeLeft ? BigInt(rs.gift) : feeLeft;
432
+ if (subRefund > 0n) {
433
+ const cur = BigInt(s.spend.tag === 1 ? s.spend.fee : "0");
434
+ s.fee(String(cur + subRefund));
435
+ feeLeft -= subRefund;
436
+ s.computeRefund(includeLockData);
437
+ if (adjustFee && !s.curRefund()) {
438
+ const ndWords = noteDataFeeWords(rs.note_data);
439
+ const rebate = feeLeft < BigInt(this.settings.cost_per_word) * ndWords
440
+ ? feeLeft
441
+ : BigInt(this.settings.cost_per_word) * ndWords;
442
+ feeLeft -= rebate;
443
+ }
444
+ }
445
+ }
446
+ this.feePool.sort((a, b) => (BigInt(a.noteInfo.assets) > BigInt(b.noteInfo.assets) ? 1 : -1));
447
+ while (feeLeft > 0n) {
448
+ const r = this.feePool.pop();
449
+ if (!r)
450
+ break;
451
+ r.computeRefund(includeLockData);
452
+ const rs = r.curRefund();
453
+ if (!rs)
454
+ throw new Error("Fee pool entry must have refund");
455
+ if (adjustFee) {
456
+ let [sw] = spendCalcWords(r.spend);
457
+ const rsKey = lockRootHash(rs.lock_root);
458
+ const refunds = refundCounts.get(rsKey) ?? 0;
459
+ if (bythosActive && refunds > 0)
460
+ sw = 0n;
461
+ refundCounts.set(rsKey, refunds + 1);
462
+ feeLeft +=
463
+ BigInt(this.settings.cost_per_word) * sw +
464
+ (BigInt(this.settings.cost_per_word) * spendCalcWords(r.spend)[1]) /
465
+ BigInt(this.settings.witness_word_div);
466
+ feeLeft += missingUnlocksFee(r.spend, this.settings);
467
+ }
468
+ const subRefund = BigInt(rs.gift) < feeLeft ? BigInt(rs.gift) : feeLeft;
469
+ if (subRefund > 0n) {
470
+ const cur = BigInt(r.spend.tag === 1 ? r.spend.fee : "0");
471
+ r.fee(String(cur + subRefund));
472
+ feeLeft -= subRefund;
473
+ r.computeRefund(includeLockData);
474
+ }
475
+ this.spend(r);
476
+ }
477
+ if (feeLeft > 0n) {
478
+ throw new Error("Insufficient funds to pay fee and gift");
479
+ }
480
+ }
481
+ else {
482
+ let refundLeft = curFee - targetFee;
483
+ spends.sort((a, b) => {
484
+ const anra = BigInt(a.noteInfo.assets) -
485
+ BigInt(a.curRefund()?.gift ?? "0");
486
+ const bnra = BigInt(b.noteInfo.assets) -
487
+ BigInt(b.curRefund()?.gift ?? "0");
488
+ const aor = a.spend.tag === 1 && a.spend.seeds.length === 1 && !!a.curRefund();
489
+ const bor = b.spend.tag === 1 && b.spend.seeds.length === 1 && !!b.curRefund();
490
+ if (aor !== bor)
491
+ return bor ? 1 : -1;
492
+ const af = BigInt(a.spend.tag === 1 ? a.spend.fee : "0");
493
+ const bf = BigInt(b.spend.tag === 1 ? b.spend.fee : "0");
494
+ if (af !== bf)
495
+ return af > bf ? -1 : 1;
496
+ if (anra !== bnra)
497
+ return anra > bnra ? 1 : -1;
498
+ return compareNames(b.noteInfo.name, a.noteInfo.name);
499
+ });
500
+ const returnToPool = [];
501
+ for (const s of spends) {
502
+ if (!s.refundLock)
503
+ continue;
504
+ const rlh = lockRootHash(s.refundLock);
505
+ const addRefund = BigInt(s.spend.tag === 1 ? s.spend.fee : "0") < refundLeft
506
+ ? BigInt(s.spend.tag === 1 ? s.spend.fee : "0")
507
+ : refundLeft;
508
+ if (addRefund > 0n) {
509
+ const cur = BigInt(s.spend.tag === 1 ? s.spend.fee : "0");
510
+ s.fee(String(cur - addRefund));
511
+ refundLeft -= addRefund;
512
+ s.computeRefund(includeLockData);
513
+ }
514
+ if (BigInt(s.spend.tag === 1 ? s.spend.fee : "0") === addRefund) {
515
+ returnToPool.push(s.noteInfo.name);
516
+ const [swInit, ww] = spendCalcWords(s.spend);
517
+ let sw = swInit;
518
+ const refunds = refundCounts.get(rlh) ?? 0;
519
+ if (bythosActive && refunds > 1)
520
+ sw = 0n;
521
+ refundCounts.set(rlh, Math.max(0, refunds - 1));
522
+ let toRefund = BigInt(this.settings.cost_per_word) * sw +
523
+ (BigInt(this.settings.cost_per_word) * ww) / BigInt(this.settings.witness_word_div);
524
+ toRefund += missingUnlocksFee(s.spend, this.settings);
525
+ refundLeft = refundLeft > toRefund ? refundLeft - toRefund : 0n;
526
+ }
527
+ }
528
+ for (const note of returnToPool) {
529
+ const sp = this.spends.get(nameKey(note));
530
+ if (sp) {
531
+ this.spends.delete(nameKey(note));
532
+ this.feePool.push(sp);
533
+ }
534
+ }
535
+ if (refundLeft > 0n) {
536
+ throw new Error("Assets in must equal gift + fee + refund");
537
+ }
538
+ }
539
+ }
540
+ addPreimage(preimageJam) {
541
+ let ret;
542
+ for (const sb of this.spends.values()) {
543
+ const r = sb.addPreimage(preimageJam);
544
+ if (r !== undefined)
545
+ ret = r;
546
+ }
547
+ return ret;
548
+ }
549
+ async sign(signingKey) {
550
+ for (const sb of this.spends.values()) {
551
+ await sb.sign(signingKey);
552
+ }
553
+ }
554
+ validate() {
555
+ const curFee = BigInt(this.curFee());
556
+ const neededFee = BigInt(this.calcFee());
557
+ if (curFee < neededFee) {
558
+ throw new Error(`InvalidFee: need ${neededFee}, have ${curFee}`);
559
+ }
560
+ for (const sb of this.spends.values()) {
561
+ if (!sb.isBalanced()) {
562
+ throw new Error("UnbalancedSpends");
563
+ }
564
+ }
565
+ const unlocks = [...this.spends.values()].flatMap((sb) => sb.missingUnlocks());
566
+ if (unlocks.length > 0) {
567
+ throw new Error(`MissingUnlocks: ${JSON.stringify(unlocks)}`);
568
+ }
569
+ }
570
+ build() {
571
+ const mixedInputs = [];
572
+ const outputs = [];
573
+ const fullSpends = [];
574
+ for (const sb of this.spends.values()) {
575
+ const spend = structuredClone(sb.spend);
576
+ fullSpends.push([sb.noteInfo.name, spend]);
577
+ if (spend.tag === 1) {
578
+ const sc = spendConditionFromLmp(spend.witness.lock_merkle_proof);
579
+ mixedInputs.push([sb.noteInfo.name, sc]);
580
+ for (const seed of spend.seeds) {
581
+ const lock = lockFromLockRoot(seed.lock_root);
582
+ if (lock) {
583
+ const h = lockRootHash(seed.lock_root);
584
+ outputs.push([h, { lock, include_data: false }]);
585
+ }
586
+ }
587
+ }
588
+ }
589
+ const id = rawTxV1CalcId({ version: 1, id: "", spends: fullSpends });
590
+ const { spends, witnessData } = splitWitness(fullSpends);
591
+ const inputs = { tag: 1, inputs: mixedInputs };
592
+ return {
593
+ version: 1,
594
+ id,
595
+ spends,
596
+ display: { inputs, outputs },
597
+ witness_data: witnessData,
598
+ };
599
+ }
600
+ }
601
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/tx/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { InputDisplay, Name, SpendCondition } from "../types.js";
2
+ export declare function getDisplayInput(display: InputDisplay, name: Name): SpendCondition | {
3
+ tag: "v0";
4
+ sig: unknown;
5
+ } | undefined;
6
+ export declare function isV1DisplayInput(input: ReturnType<typeof getDisplayInput>): input is SpendCondition;
7
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/tx/display.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAetE,wBAAgB,eAAe,CAC7B,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,IAAI,GACT,cAAc,GAAG;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAqB1D;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,GACxC,KAAK,IAAI,cAAc,CAEzB"}