@ickb/sdk 9000.0.1 → 9001.0.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 (138) hide show
  1. package/README.md +14 -11
  2. package/dist/constants.d.ts +0 -4
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +6 -24
  5. package/dist/constants.js.map +1 -1
  6. package/dist/conversion/estimate.d.ts +0 -6
  7. package/dist/conversion/estimate.d.ts.map +1 -1
  8. package/dist/conversion/estimate.js +1 -1
  9. package/dist/conversion/estimate.js.map +1 -1
  10. package/dist/conversion/maturity.d.ts +1 -1
  11. package/dist/conversion/maturity.js +13 -12
  12. package/dist/conversion/maturity.js.map +1 -1
  13. package/dist/conversion/plans.d.ts.map +1 -1
  14. package/dist/conversion/plans.js +6 -6
  15. package/dist/conversion/plans.js.map +1 -1
  16. package/dist/conversion/projection.d.ts +5 -6
  17. package/dist/conversion/projection.d.ts.map +1 -1
  18. package/dist/conversion/projection.js +11 -8
  19. package/dist/conversion/projection.js.map +1 -1
  20. package/dist/conversion/types.d.ts +29 -17
  21. package/dist/conversion/types.d.ts.map +1 -1
  22. package/dist/conversion/withdrawal_ring.d.ts +1 -3
  23. package/dist/conversion/withdrawal_ring.d.ts.map +1 -1
  24. package/dist/conversion/withdrawal_ring.js +4 -4
  25. package/dist/conversion/withdrawal_ring.js.map +1 -1
  26. package/dist/dao.d.ts +19 -5
  27. package/dist/dao.d.ts.map +1 -1
  28. package/dist/dao.js +24 -12
  29. package/dist/dao.js.map +1 -1
  30. package/dist/index.d.ts +9 -11
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -2
  33. package/dist/index.js.map +1 -1
  34. package/dist/logic.d.ts +10 -14
  35. package/dist/logic.d.ts.map +1 -1
  36. package/dist/logic.js +28 -39
  37. package/dist/logic.js.map +1 -1
  38. package/dist/order/cells.d.ts +10 -49
  39. package/dist/order/cells.d.ts.map +1 -1
  40. package/dist/order/cells.js +28 -146
  41. package/dist/order/cells.js.map +1 -1
  42. package/dist/order/conversion.d.ts +3 -9
  43. package/dist/order/conversion.d.ts.map +1 -1
  44. package/dist/order/conversion.js +8 -11
  45. package/dist/order/conversion.js.map +1 -1
  46. package/dist/order/fill.d.ts +2 -2
  47. package/dist/order/fill.js +3 -3
  48. package/dist/order/fill.js.map +1 -1
  49. package/dist/order/info.d.ts.map +1 -1
  50. package/dist/order/info.js +3 -0
  51. package/dist/order/info.js.map +1 -1
  52. package/dist/order/matcher.d.ts +1 -1
  53. package/dist/order/matcher.d.ts.map +1 -1
  54. package/dist/order/matcher.js +3 -2
  55. package/dist/order/matcher.js.map +1 -1
  56. package/dist/order/order.d.ts +6 -2
  57. package/dist/order/order.d.ts.map +1 -1
  58. package/dist/order/order.js +32 -37
  59. package/dist/order/order.js.map +1 -1
  60. package/dist/order/order_data.d.ts.map +1 -1
  61. package/dist/order/order_data.js +3 -0
  62. package/dist/order/order_data.js.map +1 -1
  63. package/dist/order/ratio.d.ts +0 -2
  64. package/dist/order/ratio.d.ts.map +1 -1
  65. package/dist/order/ratio.js +3 -11
  66. package/dist/order/ratio.js.map +1 -1
  67. package/dist/order/relative.d.ts.map +1 -1
  68. package/dist/order/relative.js +3 -0
  69. package/dist/order/relative.js.map +1 -1
  70. package/dist/owned_owner.d.ts +10 -15
  71. package/dist/owned_owner.d.ts.map +1 -1
  72. package/dist/owned_owner.js +27 -47
  73. package/dist/owned_owner.js.map +1 -1
  74. package/dist/sdk.d.ts +74 -31
  75. package/dist/sdk.d.ts.map +1 -1
  76. package/dist/sdk.js +81 -59
  77. package/dist/sdk.js.map +1 -1
  78. package/dist/send/sign_and_send_transaction.d.ts +32 -17
  79. package/dist/send/sign_and_send_transaction.d.ts.map +1 -1
  80. package/dist/send/sign_and_send_transaction.js +128 -28
  81. package/dist/send/sign_and_send_transaction.js.map +1 -1
  82. package/dist/send/wait_transaction.d.ts +7 -6
  83. package/dist/send/wait_transaction.d.ts.map +1 -1
  84. package/dist/send/wait_transaction.js +29 -61
  85. package/dist/send/wait_transaction.js.map +1 -1
  86. package/dist/udt.d.ts +20 -35
  87. package/dist/udt.d.ts.map +1 -1
  88. package/dist/udt.js +39 -103
  89. package/dist/udt.js.map +1 -1
  90. package/dist/utils/chain.d.ts +0 -35
  91. package/dist/utils/chain.d.ts.map +1 -1
  92. package/dist/utils/chain.js +1 -19
  93. package/dist/utils/chain.js.map +1 -1
  94. package/dist/utils/codec.d.ts.map +1 -1
  95. package/dist/utils/codec.js +3 -0
  96. package/dist/utils/codec.js.map +1 -1
  97. package/dist/utils/utils.d.ts +19 -46
  98. package/dist/utils/utils.d.ts.map +1 -1
  99. package/dist/utils/utils.js +53 -74
  100. package/dist/utils/utils.js.map +1 -1
  101. package/dist/utils/verified_client.d.ts +19 -0
  102. package/dist/utils/verified_client.d.ts.map +1 -0
  103. package/dist/utils/verified_client.js +92 -0
  104. package/dist/utils/verified_client.js.map +1 -0
  105. package/package.json +2 -2
  106. package/src/constants.ts +6 -25
  107. package/src/conversion/estimate.ts +1 -3
  108. package/src/conversion/maturity.ts +13 -14
  109. package/src/conversion/plans.ts +6 -6
  110. package/src/conversion/projection.ts +15 -7
  111. package/src/conversion/types.ts +32 -17
  112. package/src/conversion/withdrawal_ring.ts +4 -8
  113. package/src/dao.ts +38 -14
  114. package/src/index.ts +8 -8
  115. package/src/logic.ts +40 -52
  116. package/src/order/cells.ts +37 -174
  117. package/src/order/conversion.ts +8 -19
  118. package/src/order/fill.ts +3 -3
  119. package/src/order/info.ts +3 -0
  120. package/src/order/matcher.ts +3 -3
  121. package/src/order/order.ts +38 -52
  122. package/src/order/order_data.ts +3 -0
  123. package/src/order/ratio.ts +3 -20
  124. package/src/order/relative.ts +3 -0
  125. package/src/owned_owner.ts +47 -77
  126. package/src/sdk.ts +95 -108
  127. package/src/send/sign_and_send_transaction.ts +164 -28
  128. package/src/send/wait_transaction.ts +44 -88
  129. package/src/udt.ts +56 -124
  130. package/src/utils/chain.ts +0 -41
  131. package/src/utils/codec.ts +4 -0
  132. package/src/utils/utils.ts +76 -105
  133. package/src/utils/verified_client.ts +136 -0
  134. package/dist/utils/transaction_header.d.ts +0 -17
  135. package/dist/utils/transaction_header.d.ts.map +0 -1
  136. package/dist/utils/transaction_header.js +0 -44
  137. package/dist/utils/transaction_header.js.map +0 -1
  138. package/src/utils/transaction_header.ts +0 -66
package/dist/sdk.js CHANGED
@@ -2,10 +2,11 @@ import { ccc } from "@ckb-ccc/core";
2
2
  import { getConfig } from "./constants.js";
3
3
  import { minimumOrderAmount } from "./conversion/estimate.js";
4
4
  import { ckbToIckbConversionPlans, ickbToCkbConversionPlans, } from "./conversion/plans.js";
5
- import { assertDaoOutputLimit, broadcastDeadline, DaoHeaderIndexError, DaoOutputLimitError, } from "./dao.js";
5
+ import { assertDaoOutputLimit, assertFresh, broadcastDeadline, DaoHeaderIndexError, DaoOutputLimitError, pushHeaderDep, tipMaxAgeMs, } from "./dao.js";
6
6
  import { Ratio } from "./order/ratio.js";
7
7
  import { ickbExchangeRatio } from "./udt.js";
8
8
  import { compareBigInt, findCells, isPlainCapacityCell, unique } from "./utils/utils.js";
9
+ import { verifiedClient } from "./utils/verified_client.js";
9
10
  /**
10
11
  * Input count up to which one own transaction sweeps liquid cells.
11
12
  *
@@ -17,8 +18,11 @@ import { compareBigInt, findCells, isPlainCapacityCell, unique } from "./utils/u
17
18
  * turn, which this outpaces; a larger backlog takes several transactions.
18
19
  */
19
20
  export const SWEEP_INPUT_LIMIT = 1000;
20
- // eslint-disable-next-line @typescript-eslint/no-shadow -- Preserve the runtime constructor name.
21
- const IckbSdkImplementation = class IckbSdk {
21
+ /**
22
+ * The whole SDK, which the Node actors drive by relative import; the package barrel
23
+ * exposes the two conversion-workflow methods, and its assignment checks they agree.
24
+ */
25
+ export class IckbSdk {
22
26
  ickbUdt;
23
27
  ownedOwner;
24
28
  ickbLogic;
@@ -35,20 +39,38 @@ const IckbSdkImplementation = class IckbSdk {
35
39
  }
36
40
  // ---- State reads -------------------------------------------------------------------
37
41
  /**
38
- * Reads system, user-order, and account state against one sampled tip, under the
39
- * caller's withdrawal timing rules (`BOT_LOCK_UP` or `WALLET_LOCK_UP`).
42
+ * Reads system, user-order, and account state at the sampled tip's parent, under the
43
+ * caller's withdrawal timing rules (`BOT_LOCK_UP` or `WALLET_LOCK_UP`) and, when given, a
44
+ * positive fee rate cap that replaces CCC's ceiling; a cap of zero or less throws.
40
45
  *
41
- * @remarks Every read is complete and uncapped: a large book or pool costs a slower
42
- * read, never a partial or failed one. Each account lock is enumerated by one uncached
43
- * unfiltered exact-lock scan and classified client-side.
46
+ * @remarks Every read goes through `verifiedClient` and the tip's parent is bounded by the
47
+ * policy's slack, so a caller passes a plain client. Every read is complete and uncapped: a large
48
+ * book or pool costs a slower read, never a partial or failed one. Each account lock is
49
+ * enumerated by one uncached unfiltered exact-lock scan and classified client-side.
44
50
  */
45
- async getL1AccountState(client, locks, lockUp) {
46
- const tip = await client.getTipHeader();
51
+ async getL1AccountState(plainClient, locks, lockUp, maxFeeRate) {
52
+ // CCC reads a zero cap as no cap at all and would plan at a negative one.
53
+ if (maxFeeRate !== undefined && ccc.numFrom(maxFeeRate) <= ccc.Zero) {
54
+ throw new RangeError("maxFeeRate must be positive");
55
+ }
56
+ const client = verifiedClient(plainClient);
57
+ const live = await client.getTipHeader();
58
+ // The live tip can still lose a one-block race, and a transaction naming it as a header
59
+ // dep is then refused after signing; every recorded fork was one block deep.
60
+ const tip = await client.getHeaderByNumber(live.number - 1n);
61
+ if (tip?.hash !== live.parentHash) {
62
+ throw new Error(`Block ${String(live.number - 1n)} is not the parent of tip ${live.hash}`);
63
+ }
64
+ // The age bound is on the header the read is priced at: a fresh tip a node invented can
65
+ // name any old block as its parent.
66
+ assertFresh(tip, tipMaxAgeMs(lockUp));
47
67
  const exchangeRatio = Ratio.from(ickbExchangeRatio(tip));
48
68
  const [poolDeposits, orders, feeRate, accounts] = await Promise.all([
49
69
  this.ickbLogic.findDeposits(client, tip),
50
70
  this.order.findOrders(client),
51
- getFeeRate(client),
71
+ // CCC clamps the sampled median at the cap, the connector's chosen rate too. A given cap
72
+ // replaces CCC's default ceiling, on purpose: the caller's cap is the ceiling.
73
+ client.getFeeRate(undefined, maxFeeRate === undefined ? undefined : { maxFeeRate }),
52
74
  Promise.all([...unique(locks)].map(async (lock) => this.readLockCells(client, lock, tip))),
53
75
  ]);
54
76
  return {
@@ -62,7 +84,7 @@ const IckbSdkImplementation = class IckbSdk {
62
84
  poolDeposits,
63
85
  lockUp,
64
86
  },
65
- user: { orders: orders.filter((group) => group.isOwner(...locks)) },
87
+ userOrders: orders.filter((group) => group.isOwner(...locks)),
66
88
  account: {
67
89
  capacityCells: accounts.flatMap((account) => account.capacityCells),
68
90
  nativeUdtCells: accounts.flatMap((account) => account.nativeUdtCells),
@@ -73,15 +95,16 @@ const IckbSdkImplementation = class IckbSdk {
73
95
  }
74
96
  /** Every Stack cell one lock owns, classified from a single exact-lock scan. */
75
97
  async readLockCells(client, lock, tip) {
76
- const cells = await findCells(client, {
98
+ const scanned = await findCells(client, {
77
99
  script: lock,
78
100
  scriptType: "lock",
79
101
  scriptSearchMode: "exact",
80
102
  withData: true,
81
103
  });
104
+ const cells = scanned.map(({ cell }) => cell);
82
105
  const [receipts, withdrawalGroups] = await Promise.all([
83
- this.ickbLogic.receiptsFrom(client, cells),
84
- this.ownedOwner.withdrawalGroupsFrom(client, cells, tip),
106
+ this.ickbLogic.receiptsFrom(client, scanned),
107
+ this.ownedOwner.withdrawalGroupsFrom(client, scanned, tip),
85
108
  ]);
86
109
  return {
87
110
  capacityCells: cells.filter(isPlainCapacityCell),
@@ -102,7 +125,7 @@ const IckbSdkImplementation = class IckbSdk {
102
125
  * order rather than failing. Failure results are
103
126
  * expected planning outcomes; when no plan can be funded the last completion error throws.
104
127
  */
105
- async buildConversionTransaction(txLike, options) {
128
+ async buildConversionTransaction(options) {
106
129
  const { amount, context, direction } = options;
107
130
  if (amount < 0n) {
108
131
  return conversionFailure("amount-negative", context.estimatedMaturity);
@@ -113,21 +136,20 @@ const IckbSdkImplementation = class IckbSdk {
113
136
  if (direction === "ickb-to-ckb" && amount > context.ickbAvailable) {
114
137
  return conversionFailure("insufficient-ickb", context.estimatedMaturity);
115
138
  }
116
- const baseTx = ccc.Transaction.from(txLike);
117
139
  const resolved = {
118
140
  ...options,
119
141
  lock: options.lock ?? (await options.signer.getRecommendedAddressObj()).script,
120
142
  };
121
143
  if (amount === 0n) {
122
- return this.buildCollectOnlyConversion(baseTx, resolved);
144
+ return this.buildCollectOnlyConversion(resolved);
123
145
  }
124
146
  return direction === "ckb-to-ickb"
125
- ? this.buildCkbToIckbConversion(baseTx, resolved)
126
- : this.buildIckbToCkbConversion(baseTx, resolved);
147
+ ? this.buildCkbToIckbConversion(resolved)
148
+ : this.buildIckbToCkbConversion(resolved);
127
149
  }
128
- async buildCollectOnlyConversion(baseTx, options) {
150
+ async buildCollectOnlyConversion(options) {
129
151
  const { context, lock, signer } = options;
130
- const tx = this.buildBaseTransaction(baseTx, context);
152
+ const tx = this.buildBaseTransaction(ccc.Transaction.default(), context);
131
153
  // An empty collection to a lock of the signer's own would only compact the account;
132
154
  // to another lock it moves the liquid cells, which completion builds from the sweep.
133
155
  if (!hasTransactionActivity(tx) &&
@@ -139,19 +161,24 @@ const IckbSdkImplementation = class IckbSdk {
139
161
  ok: true,
140
162
  tx: completed,
141
163
  estimatedMaturity: context.estimatedMaturity,
142
- conversion: { kind: "collect-only" },
164
+ conversionKind: "collect-only",
143
165
  isSweepComplete: sweepsAll(completed, context.cells),
144
166
  };
145
167
  }
146
- async buildCkbToIckbConversion(baseTx, options) {
168
+ async buildCkbToIckbConversion(options) {
147
169
  const { context, lock } = options;
148
170
  // A plan is dropped only for an unrepresentable remainder order.
149
171
  const plans = ckbToIckbConversionPlans(options);
150
172
  if (plans.length === 0) {
151
- return conversionFailure("amount-too-small", context.estimatedMaturity, minimumOrderAmount(true, context.system));
173
+ return {
174
+ ok: false,
175
+ reason: "amount-too-small",
176
+ estimatedMaturity: context.estimatedMaturity,
177
+ minimum: minimumOrderAmount(true, context.system),
178
+ };
152
179
  }
153
180
  const { candidate: plan, tx } = await completeFirstFundable(plans, (candidate) => {
154
- let partial = this.buildBaseTransaction(baseTx.clone(), context);
181
+ let partial = this.buildBaseTransaction(ccc.Transaction.default(), context);
155
182
  if (candidate.depositCount > 0) {
156
183
  partial = this.ickbLogic.deposit(partial, candidate.depositCount, candidate.depositCapacity, lock);
157
184
  }
@@ -164,20 +191,23 @@ const IckbSdkImplementation = class IckbSdk {
164
191
  ok: true,
165
192
  tx,
166
193
  estimatedMaturity: plan.estimatedMaturity,
167
- conversion: {
168
- kind: conversionKind(plan.depositCount > 0, plan.order !== undefined),
169
- },
194
+ conversionKind: conversionKind(plan.depositCount > 0, plan.order !== undefined),
170
195
  isSweepComplete: sweepsAll(tx, context.cells),
171
196
  };
172
197
  }
173
- async buildIckbToCkbConversion(baseTx, options) {
198
+ async buildIckbToCkbConversion(options) {
174
199
  const { context, lock } = options;
175
200
  const plans = ickbToCkbConversionPlans(options, context.system.poolDeposits);
176
201
  if (plans.length === 0) {
177
- return conversionFailure("amount-too-small", context.estimatedMaturity, minimumOrderAmount(false, context.system));
202
+ return {
203
+ ok: false,
204
+ reason: "amount-too-small",
205
+ estimatedMaturity: context.estimatedMaturity,
206
+ minimum: minimumOrderAmount(false, context.system),
207
+ };
178
208
  }
179
209
  const { candidate: plan, tx } = await completeFirstFundable(plans, (candidate) => {
180
- let partial = this.buildBaseTransaction(baseTx.clone(), context, {
210
+ let partial = this.buildBaseTransaction(ccc.Transaction.default(), context, {
181
211
  deposits: candidate.selectedDeposits,
182
212
  lock,
183
213
  });
@@ -192,9 +222,7 @@ const IckbSdkImplementation = class IckbSdk {
192
222
  ok: true,
193
223
  tx,
194
224
  estimatedMaturity: plan.estimatedMaturity,
195
- conversion: {
196
- kind: conversionKind(plan.selectedDeposits.length > 0, plan.order !== undefined),
197
- },
225
+ conversionKind: conversionKind(plan.selectedDeposits.length > 0, plan.order !== undefined),
198
226
  ...(notice === undefined ? {} : { conversionNotice: notice }),
199
227
  isSweepComplete: sweepsAll(tx, context.cells),
200
228
  ...(broadcastBefore === undefined ? {} : { broadcastBefore }),
@@ -206,6 +234,11 @@ const IckbSdkImplementation = class IckbSdk {
206
234
  lock: options.lock,
207
235
  feeRate: options.context.system.feeRate,
208
236
  cells: options.context.cells,
237
+ protocolCells: [
238
+ ...options.context.receipts,
239
+ ...options.context.system.poolDeposits,
240
+ ],
241
+ tip: options.context.system.tip,
209
242
  });
210
243
  }
211
244
  // ---- Transaction building ----------------------------------------------------------
@@ -246,7 +279,8 @@ const IckbSdkImplementation = class IckbSdk {
246
279
  */
247
280
  async completeTransaction(txLike, options) {
248
281
  const { signer, feeRate } = options;
249
- const tx = this.ickbUdt.addCellDeps(ccc.Transaction.from(txLike).clone());
282
+ const tx = ccc.Transaction.from(txLike).clone();
283
+ tx.addCellDeps(this.ickbUdt.cellDeps);
250
284
  const changeLock = options.lock ?? (await signer.getRecommendedAddressObj()).script;
251
285
  // Inputs come from one state read, each cell once, and each action spends its own
252
286
  // cell kind, so a repeated out point is a builder bug: this is the one place that
@@ -266,17 +300,20 @@ const IckbSdkImplementation = class IckbSdk {
266
300
  const plainCells = unspent
267
301
  .filter(isPlainCapacityCell)
268
302
  .toSorted((left, right) => compareBigInt(right.cellOutput.capacity, left.cellOutput.capacity));
269
- await this.completeIckb(tx, signer.client, changeLock, ickbCells);
303
+ await this.completeIckb(tx, signer.client, changeLock, ickbCells, options.protocolCells);
270
304
  // Plain CKB: the sweep first, then whatever the fee still needs beyond the limit.
271
305
  const swept = sweep(tx, plainCells);
306
+ // Last of the header deps, so no index another step names shifts, and before the fee so
307
+ // its 32 bytes are paid for.
308
+ pushHeaderDep(tx, options.tip.hash);
272
309
  await completeFee(tx, signer, changeLock, feeRate, plainCells.slice(swept));
273
310
  assertDaoOutputLimit(tx, this.ickbLogic.dao.script);
274
311
  return tx;
275
312
  }
276
313
  /** iCKB: what the outputs need first, then the sweep while the limit allows, then change. */
277
- async completeIckb(tx, client, changeLock, ickbCells) {
278
- const required = this.ickbUdt.outputBalance(tx);
279
- let balance = await this.ickbUdt.inputBalance(tx, client);
314
+ async completeIckb(tx, client, changeLock, ickbCells, protocolCells) {
315
+ const required = tx.getOutputsUdtBalance(this.ickbUdt.script);
316
+ let balance = await this.ickbUdt.inputBalance(tx, client, protocolCells);
280
317
  for (const cell of ickbCells) {
281
318
  if (balance >= required && tx.inputs.length >= SWEEP_INPUT_LIMIT) {
282
319
  break;
@@ -291,12 +328,9 @@ const IckbSdkImplementation = class IckbSdk {
291
328
  }
292
329
  this.ickbUdt.addChange(tx, changeLock, balance - required);
293
330
  }
294
- };
295
- /** Concrete iCKB SDK constructor and static estimators. */
296
- // eslint-disable-next-line @typescript-eslint/no-redeclare -- The public type and runtime constructor intentionally share a name.
297
- export const IckbSdk = IckbSdkImplementation;
331
+ }
298
332
  /** Whether the transaction already carries any input or output. */
299
- export function hasTransactionActivity(tx) {
333
+ function hasTransactionActivity(tx) {
300
334
  return tx.inputs.length > 0 || tx.outputs.length > 0;
301
335
  }
302
336
  /** An order the market can fill at a gain: priced past the DAO ratio on its matchable side. */
@@ -306,13 +340,8 @@ function isPastPar(group, exchangeRatio) {
306
340
  return ((order.isCkb2UdtMatchable() && info.ckbToUdt.compare(exchangeRatio) < 0) ||
307
341
  (order.isUdt2CkbMatchable() && exchangeRatio.compare(info.udtToCkb) < 0));
308
342
  }
309
- function conversionFailure(reason, estimatedMaturity, minimum) {
310
- return {
311
- ok: false,
312
- reason,
313
- estimatedMaturity,
314
- ...(minimum === undefined ? {} : { minimum }),
315
- };
343
+ function conversionFailure(reason, estimatedMaturity) {
344
+ return { ok: false, reason, estimatedMaturity };
316
345
  }
317
346
  /** A plan always carries a deposit or an order, else it would be a collection. */
318
347
  function conversionKind(hasDirect, hasOrder) {
@@ -329,13 +358,6 @@ function sweepsAll(tx, cells) {
329
358
  async function isOwnLock(signer, lock) {
330
359
  return (await signer.getAddressObjs()).some(({ script }) => script.eq(lock));
331
360
  }
332
- async function getFeeRate(client) {
333
- const feeRate = await client.getFeeRate();
334
- if (feeRate < 0n) {
335
- throw new Error("Client fee rate must be non-negative");
336
- }
337
- return feeRate;
338
- }
339
361
  function udtBalance(cell) {
340
362
  return ccc.udtBalanceFrom(cell.outputData);
341
363
  }
package/dist/sdk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GAEpB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAgB,MAAM,UAAU,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAmCzF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAWtC,kGAAkG;AAClG,MAAM,qBAAqB,GAAG,MAAM,OAAO;IACxB,OAAO,CAAU;IACjB,UAAU,CAAoB;IAC9B,SAAS,CAAe;IACxB,KAAK,CAAe;IAErC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAe;QAChE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,kDAAkD;IAC3C,MAAM,CAAC,SAAS,CAAC,KAAqB;QAC3C,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,uFAAuF;IAEvF;;;;;;;OAOG;IACI,KAAK,CAAC,iBAAiB,CAC5B,MAAkB,EAClB,KAAmB,EACnB,MAAoB;QAMpB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QACxC,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAClE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAC7B,UAAU,CAAC,MAAM,CAAC;YAClB,OAAO,CAAC,GAAG,CACT,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAC9E;SACF,CAAC,CAAC;QACH,OAAO;YACL,MAAM,EAAE;gBACN,OAAO;gBACP,GAAG;gBACH,aAAa;gBACb,wDAAwD;gBACxD,mFAAmF;gBACnF,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBACpE,YAAY;gBACZ,MAAM;aACP;YACD,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE;YACnE,OAAO,EAAE;gBACP,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;gBACnE,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC;gBACrE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACzD,gBAAgB,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;aAC1E;SACF,CAAC;IACJ,CAAC;IAED,gFAAgF;IACxE,KAAK,CAAC,aAAa,CACzB,MAAkB,EAClB,IAAgB,EAChB,GAA0B;QAE1B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE;YACpC,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,MAAM;YAClB,gBAAgB,EAAE,OAAO;YACzB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;YAC1C,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC;SACzD,CAAC,CAAC;QACH,OAAO;YACL,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC;YAChD,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChE,QAAQ;YACR,gBAAgB;SACjB,CAAC;IACJ,CAAC;IAED,uFAAuF;IAEvF;;;;;;;;;;OAUG;IACI,KAAK,CAAC,0BAA0B,CACrC,MAA2B,EAC3B,OAAqC;QAErC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC/C,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;YAChB,OAAO,iBAAiB,CAAC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,SAAS,KAAK,aAAa,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YACjE,OAAO,iBAAiB,CAAC,kBAAkB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,SAAS,KAAK,aAAa,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAClE,OAAO,iBAAiB,CAAC,mBAAmB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG;YACf,GAAG,OAAO;YACV,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,MAAM;SAC/E,CAAC;QACF,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,SAAS,KAAK,aAAa;YAChC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAEO,KAAK,CAAC,0BAA0B,CACtC,MAAuB,EACvB,OAAkC;QAElC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACtD,oFAAoF;QACpF,qFAAqF;QACrF,IACE,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC3B,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAC/D,CAAC;YACD,OAAO,iBAAiB,CAAC,eAAe,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7D,OAAO;YACL,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,SAAS;YACb,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;YACpC,eAAe,EAAE,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC;SACrD,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,MAAuB,EACvB,OAAkC;QAElC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAClC,iEAAiE;QACjE,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,iBAAiB,CACtB,kBAAkB,EAClB,OAAO,CAAC,iBAAiB,EACzB,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CACzC,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,qBAAqB,CACzD,KAAK,EACL,CAAC,SAAS,EAAE,EAAE;YACZ,IAAI,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;YACjE,IAAI,SAAS,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAC9B,OAAO,EACP,SAAS,CAAC,YAAY,EACtB,SAAS,CAAC,eAAe,EACzB,IAAI,CACL,CAAC;YACJ,CAAC;YACD,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CACvB,OAAO,EACP,IAAI,EACJ,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAC7B,SAAS,CAAC,KAAK,CAAC,OAAO,CACxB,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,EACD,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAC7D,CAAC;QACF,OAAO;YACL,EAAE,EAAE,IAAI;YACR,EAAE;YACF,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,UAAU,EAAE;gBACV,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;aACtE;YACD,eAAe,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC;SAC9C,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,wBAAwB,CACpC,MAAuB,EACvB,OAAkC;QAElC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAClC,MAAM,KAAK,GAAG,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,iBAAiB,CACtB,kBAAkB,EAClB,OAAO,CAAC,iBAAiB,EACzB,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAC1C,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,qBAAqB,CACzD,KAAK,EACL,CAAC,SAAS,EAAE,EAAE;YACZ,IAAI,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE;gBAC/D,QAAQ,EAAE,SAAS,CAAC,gBAAgB;gBACpC,IAAI;aACL,CAAC,CAAC;YACH,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAClC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CACvB,OAAO,EACP,IAAI,EACJ,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAC7B,SAAS,CAAC,KAAK,CAAC,OAAO,CACxB,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,EACD,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAC7D,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC;QAC3C,MAAM,eAAe,GAAG,iBAAiB,CACvC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAC1D,OAAO,CAAC,MAAM,CAAC,MAAM,CACtB,CAAC;QACF,OAAO;YACL,EAAE,EAAE,IAAI;YACR,EAAE;YACF,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,UAAU,EAAE;gBACV,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;aACjF;YACD,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;YAC7D,eAAe,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC;YAC7C,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;SAC9D,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,EAAmB,EACnB,OAAkC;QAElC,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO;YACvC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,uFAAuF;IAEvF;;;;;;;;OAQG;IACI,oBAAoB,CACzB,MAA2B,EAC3B,KAAmB,EACnB,iBAAqE;QAErE,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7E,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,CACpC,EAAE,EACF,iBAAiB,CAAC,QAAQ,EAC1B,iBAAiB,CAAC,IAAI,CACvB,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;;;;OASG;IACI,KAAK,CAAC,mBAAmB,CAC9B,MAA2B,EAC3B,OAAuC;QAEvC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,MAAM,CAAC;QACpF,kFAAkF;QAClF,kFAAkF;QAClF,0DAA0D;QAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,iBAAiB,CAAC,CAAC;YACjD,CAAC;YACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,OAAO;aACtB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC1C,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,UAAU,GAAG,OAAO;aACvB,MAAM,CAAC,mBAAmB,CAAC;aAC3B,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACxB,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CACnE,CAAC;QAEJ,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAClE,kFAAkF;QAClF,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACpC,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5E,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,6FAA6F;IACrF,KAAK,CAAC,YAAY,CACxB,EAAmB,EACnB,MAAkB,EAClB,UAAsB,EACtB,SAA8B;QAE9B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC1D,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,OAAO,IAAI,QAAQ,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC;gBACjE,MAAM;YACR,CAAC;YACD,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;YACvB,MAAM,IAAI,SAAS,CAAC,2BAA2B,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE;gBAChF,IAAI,EAAE,mBAAmB;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC;IAC7D,CAAC;CACF,CAAC;AAEF,2DAA2D;AAC3D,kIAAkI;AAClI,MAAM,CAAC,MAAM,OAAO,GAGhB,qBAAqB,CAAC;AAE1B,mEAAmE;AACnE,MAAM,UAAU,sBAAsB,CAAC,EAAmB;IACxD,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,+FAA+F;AAC/F,SAAS,SAAS,CAAC,KAAiB,EAAE,aAAoB;IACxD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;IAC5B,OAAO,CACL,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACxE,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CACzE,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,MAA0C,EAC1C,iBAAyB,EACzB,OAAgB;IAEhB,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM;QACN,iBAAiB;QACjB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,SAAS,cAAc,CACrB,SAAkB,EAClB,QAAiB;IAEjB,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC1B,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,OAAO,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AACxC,CAAC;AAED,2FAA2F;AAC3F,SAAS,SAAS,CAAC,EAAmB,EAAE,KAA0B;IAChE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAkB,EAAE,IAAgB;IAC3D,OAAO,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAkB;IAC1C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1C,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,OAAO,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7C,CAAC;AAED,2FAA2F;AAC3F,SAAS,KAAK,CAAC,EAAmB,EAAE,KAA0B;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACxF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QACzC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,KAAK,UAAU,WAAW,CACxB,EAAmB,EACnB,MAAkB,EAClB,UAAsB,EACtB,OAAgB,EAChB,OAA4B;IAE5B,MAAM,SAAS,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC/B,SAAS,CAAC;QACR,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE;gBACvE,eAAe,EAAE,KAAK;aACvB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,oCAAoC,CAAC,EAAE,CAAC;gBACjE,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;oBACjC,IAAI,EAAE,uBAAuB;oBAC7B,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;YACD,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAKD,6DAA6D;AAC7D,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,yDAAyD;IACzC,IAAI,CAAgB;IAEpC,8DAA8D;IAC9D,YAAY,OAAe,EAAE,OAA+C;QAC1E,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,UAAuB,EACvB,KAAwC,EACxC,QAA2D;IAE3D,IAAI,KAAwB,CAAC;IAC7B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC7D,CAAC;QAAC,OAAO,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,MAAM,OAAO,CAAC;YAChB,CAAC;YACD,KAAK,GAAG,OAAO,CAAC;QAClB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAC9D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,KAAK,YAAY,SAAS;QAC1B,KAAK,YAAY,GAAG,CAAC,oCAAoC;QACzD,KAAK,YAAY,mBAAmB;QACpC,KAAK,YAAY,mBAAmB,CACrC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { ccc } from "@ckb-ccc/core";
2
+ import { type BroadcastDeadline } from "../dao.js";
2
3
  /** Error from a broadcast whose outcome is unknown; the local transaction hash is retained. */
3
4
  export declare class TransactionBroadcastError extends Error {
4
5
  /** Chain transaction hash computed from the signed transaction before broadcast. */
@@ -20,25 +21,39 @@ export declare class TransactionExpiredError extends Error {
20
21
  }, options?: ErrorOptions);
21
22
  }
22
23
  /**
23
- * Signs locally, records chain identity before RPC, then broadcasts without
24
- * CCC's cache wrapper.
24
+ * Verifies the inputs against the chain, signs locally, records chain identity before
25
+ * RPC, then broadcasts without CCC's cache wrapper.
25
26
  *
26
- * @remarks The connector must not alter the economic body it was handed: the
27
- * ordered inputs, outputs and outputs data are compared against a digest taken
28
- * before signing, so in-place mutation cannot evade the check. Witnesses and
29
- * cell/header dependency preparation stay signer-owned. The fee ceiling values
30
- * inputs from the pre-sign transaction rather than connector-supplied metadata,
31
- * while measuring the signed bytes. When `broadcastBefore` is given, one fresh tip
32
- * is read after the signature and the fee check, and the send is refused with
33
- * `TransactionExpiredError` once the tip's epoch has reached it: a withdrawal
34
- * request that commits after its claim locks the deposit for another cycle, and a
35
- * wallet may hold the signature for a while.
36
- * `recordTxHash` is called after these checks and before the send RPC starts. A
37
- * node that already holds this exact transaction is an acceptance; any other send
38
- * failure remains ambiguous and throws `TransactionBroadcastError`. The client
39
- * cache is never marked: later attempts rebuild from exact committed reads.
27
+ * @remarks Nothing is signed unless every cell attached to an input equals the output
28
+ * its creating transaction made, a bare `OutPoint` being valued from that output, and the
29
+ * signer kept the ordered inputs, outputs and outputs data.
30
+ * Nothing is sent when the chain would take more fee than `plannedFee`, the fee completion
31
+ * priced, `tx.estimateFee(feeRate)` at its rate. That fee is measured from verified values,
32
+ * a phase-2 DAO input proven in its request block with `get_transaction_proof`, so the
33
+ * client must be JSON-RPC. When `broadcastBefore` is given, the send is refused with
34
+ * `TransactionExpiredError` once a fresh tip reaches it.
35
+ * `recordTxHash` runs before the send RPC, for a caller that must record the hash before a
36
+ * send that may never answer; every later failure carries it as `TransactionBroadcastError`. A node already holding this exact transaction
37
+ * is an acceptance; any other send failure throws `TransactionBroadcastError`. Why each
38
+ * check exists: SDK README, Signing and broadcast.
40
39
  */
41
- export declare function signAndSendTransaction(signer: ccc.Signer, tx: ccc.TransactionLike, recordTxHash?: (txHash: ccc.Hex) => void, broadcastBefore?: ccc.Epoch): Promise<ccc.Hex>;
40
+ export declare function signAndSendTransaction(signer: ccc.Signer, tx: ccc.TransactionLike, plannedFee: ccc.Num, recordTxHash?: (txHash: ccc.Hex) => void, broadcastBefore?: BroadcastDeadline): Promise<ccc.Hex>;
41
+ /** The node's `get_transaction_proof` answer for one transaction, the fields checked. */
42
+ export interface TransactionProof {
43
+ witnesses_root: ccc.Hex;
44
+ proof: {
45
+ indices: readonly ccc.Hex[];
46
+ lemmas: readonly ccc.Hex[];
47
+ };
48
+ }
49
+ /**
50
+ * Whether `proof` is a path from `txHash` to `header`'s transactions root. CKB builds that
51
+ * root over two subtrees, `blake2b(raw transactions root || witnesses root)`, each a
52
+ * complete binary Merkle tree whose node at position `i` has its parent at `(i - 1) / 2`
53
+ * and is a left child when `i` is odd; the index is the leaf's position and the lemmas are
54
+ * its siblings bottom up.
55
+ */
56
+ export declare function isCommittedIn(txHash: ccc.Hex, header: ccc.ClientBlockHeader, { witnesses_root: witnessesRoot, proof }: TransactionProof): boolean;
42
57
  /**
43
58
  * Returns the primary lock plus all signer address locks, deduplicated by script hash.
44
59
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sign_and_send_transaction.d.ts","sourceRoot":"","sources":["../../src/send/sign_and_send_transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAIpC,+FAA+F;AAC/F,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,oFAAoF;IACpF,SAAgB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAEhC,iDAAiD;IACjD,YAAY,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAIjD;CACF;AAED,gGAAgG;AAChG,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,sDAAsD;IACtD,SAAgB,MAAM,EAAE;QAAE,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAA;KAAE,CAAC;IAEvE,8EAA8E;IAC9E,YACE,MAAM,EAAE;QAAE,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAA;KAAE,EACtD,OAAO,CAAC,EAAE,YAAY,EAKvB;CACF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,EAAE,EAAE,GAAG,CAAC,eAAe,EACvB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,IAAI,EACxC,eAAe,CAAC,EAAE,GAAG,CAAC,KAAK,GAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAuClB;AAUD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAOvB"}
1
+ {"version":3,"file":"sign_and_send_transaction.d.ts","sourceRoot":"","sources":["../../src/send/sign_and_send_transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAIhE,+FAA+F;AAC/F,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,oFAAoF;IACpF,SAAgB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC;IAEhC,iDAAiD;IACjD,YAAY,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAIjD;CACF;AAED,gGAAgG;AAChG,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,sDAAsD;IACtD,SAAgB,MAAM,EAAE;QAAE,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAA;KAAE,CAAC;IAEvE,8EAA8E;IAC9E,YACE,MAAM,EAAE;QAAE,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC;QAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAA;KAAE,EACtD,OAAO,CAAC,EAAE,YAAY,EAKvB;CACF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,EAAE,EAAE,GAAG,CAAC,eAAe,EACvB,UAAU,EAAE,GAAG,CAAC,GAAG,EACnB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,IAAI,EACxC,eAAe,CAAC,EAAE,iBAAiB,GAClC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAkDlB;AA6FD,yFAAyF;AACzF,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC;IACxB,KAAK,EAAE;QAAE,OAAO,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,CAAC,GAAG,EAAE,CAAA;KAAE,CAAC;CACpE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,GAAG,CAAC,GAAG,EACf,MAAM,EAAE,GAAG,CAAC,iBAAiB,EAC7B,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,gBAAgB,GACzD,OAAO,CAeT;AAUD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,WAAW,EAAE,GAAG,CAAC,MAAM,GACtB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAOvB"}
@@ -1,6 +1,7 @@
1
1
  import { ccc } from "@ckb-ccc/core";
2
- import { cccA } from "@ckb-ccc/core/advanced";
3
- import { unique } from "../utils/utils.js";
2
+ import { assertFresh } from "../dao.js";
3
+ import { jsonRpcRequestor, unique } from "../utils/utils.js";
4
+ import { verifiedClient } from "../utils/verified_client.js";
4
5
  /** Error from a broadcast whose outcome is unknown; the local transaction hash is retained. */
5
6
  export class TransactionBroadcastError extends Error {
6
7
  /** Chain transaction hash computed from the signed transaction before broadcast. */
@@ -24,44 +25,51 @@ export class TransactionExpiredError extends Error {
24
25
  }
25
26
  }
26
27
  /**
27
- * Signs locally, records chain identity before RPC, then broadcasts without
28
- * CCC's cache wrapper.
28
+ * Verifies the inputs against the chain, signs locally, records chain identity before
29
+ * RPC, then broadcasts without CCC's cache wrapper.
29
30
  *
30
- * @remarks The connector must not alter the economic body it was handed: the
31
- * ordered inputs, outputs and outputs data are compared against a digest taken
32
- * before signing, so in-place mutation cannot evade the check. Witnesses and
33
- * cell/header dependency preparation stay signer-owned. The fee ceiling values
34
- * inputs from the pre-sign transaction rather than connector-supplied metadata,
35
- * while measuring the signed bytes. When `broadcastBefore` is given, one fresh tip
36
- * is read after the signature and the fee check, and the send is refused with
37
- * `TransactionExpiredError` once the tip's epoch has reached it: a withdrawal
38
- * request that commits after its claim locks the deposit for another cycle, and a
39
- * wallet may hold the signature for a while.
40
- * `recordTxHash` is called after these checks and before the send RPC starts. A
41
- * node that already holds this exact transaction is an acceptance; any other send
42
- * failure remains ambiguous and throws `TransactionBroadcastError`. The client
43
- * cache is never marked: later attempts rebuild from exact committed reads.
31
+ * @remarks Nothing is signed unless every cell attached to an input equals the output
32
+ * its creating transaction made, a bare `OutPoint` being valued from that output, and the
33
+ * signer kept the ordered inputs, outputs and outputs data.
34
+ * Nothing is sent when the chain would take more fee than `plannedFee`, the fee completion
35
+ * priced, `tx.estimateFee(feeRate)` at its rate. That fee is measured from verified values,
36
+ * a phase-2 DAO input proven in its request block with `get_transaction_proof`, so the
37
+ * client must be JSON-RPC. When `broadcastBefore` is given, the send is refused with
38
+ * `TransactionExpiredError` once a fresh tip reaches it.
39
+ * `recordTxHash` runs before the send RPC, for a caller that must record the hash before a
40
+ * send that may never answer; every later failure carries it as `TransactionBroadcastError`. A node already holding this exact transaction
41
+ * is an acceptance; any other send failure throws `TransactionBroadcastError`. Why each
42
+ * check exists: SDK README, Signing and broadcast.
44
43
  */
45
- export async function signAndSendTransaction(signer, tx, recordTxHash, broadcastBefore) {
44
+ export async function signAndSendTransaction(signer, tx, plannedFee, recordTxHash, broadcastBefore) {
46
45
  // Transaction.from reuses Transaction instances, which a signer may mutate in place.
47
46
  const requested = ccc.Transaction.from(tx).clone();
48
47
  const requestedBody = economicBody(requested);
48
+ // The checks read through a verified client, whatever client the signer holds.
49
+ const client = verifiedClient(signer.client);
50
+ const inputs = await verifiedInputs(client, requested.inputs);
49
51
  const signed = await signer.signTransaction(tx);
50
52
  if (economicBody(signed) !== requestedBody) {
51
53
  throw new Error("Signer altered the transaction inputs, outputs or outputs data");
52
54
  }
53
55
  const txHash = signed.hash();
54
- // CCC trusts input cell metadata already attached to the connector-controlled result.
55
- const feeTransaction = signed.clone();
56
- feeTransaction.inputs = requested.inputs;
57
- const feeRate = await feeTransaction.getFeeRate(signer.client);
58
- if (feeRate > cccA.DEFAULT_MAX_FEE_RATE) {
59
- throw new ccc.ErrorClientMaxFeeRateExceeded(cccA.DEFAULT_MAX_FEE_RATE, feeRate);
56
+ const fee = await verifiedFee(client, signed, inputs);
57
+ // A plain JavaScript caller of the earlier signature passes undefined or its recordTxHash
58
+ // here: numFrom throws on undefined, and on a function either throws or reads 0n. A bare
59
+ // comparison of a bigint with either is false and would skip the check.
60
+ const planned = ccc.numFrom(plannedFee);
61
+ if (fee > planned) {
62
+ throw new Error(`Transaction ${txHash} pays ${String(fee)} shannons of fee, more than the ${String(planned)} planned`);
60
63
  }
61
64
  if (broadcastBefore !== undefined) {
62
- const { epoch } = await signer.client.getTipHeader();
63
- if (broadcastBefore.compare(epoch) <= 0) {
64
- throw new TransactionExpiredError({ broadcastBefore, tip: epoch });
65
+ const tip = await client.getTipHeader();
66
+ assertFresh(tip, broadcastBefore.tipMaxAgeMs);
67
+ const { epoch } = tip;
68
+ if (broadcastBefore.epoch.compare(epoch) <= 0) {
69
+ throw new TransactionExpiredError({
70
+ broadcastBefore: broadcastBefore.epoch,
71
+ tip: epoch,
72
+ });
65
73
  }
66
74
  }
67
75
  recordTxHash?.(txHash);
@@ -80,6 +88,98 @@ export async function signAndSendTransaction(signer, tx, recordTxHash, broadcast
80
88
  }
81
89
  return txHash;
82
90
  }
91
+ // The default lock signs each input as its OutPoint only, never the cell behind it, so
92
+ // the capacity, lock, type and data attached to an input are a node's claim: a node
93
+ // understating a plain cell's capacity or a UDT amount would turn the difference into
94
+ // fee or a burn on a transaction that passes every other check. The verified client reads
95
+ // the cell from its creating transaction, whose hash certifies its body.
96
+ async function verifiedInputs(client, inputs) {
97
+ return Promise.all(inputs.map(async (input) => {
98
+ const outPoint = input.previousOutput.toHex();
99
+ const cell = await client.getCell(input.previousOutput);
100
+ if (cell === undefined) {
101
+ throw new Error(`Input ${outPoint} is not an output of a known transaction`);
102
+ }
103
+ if ((input.cellOutput !== undefined && !cell.cellOutput.eq(input.cellOutput)) ||
104
+ (input.outputData !== undefined && input.outputData !== cell.outputData)) {
105
+ throw new Error(`Input ${outPoint} differs from the cell its transaction created`);
106
+ }
107
+ return cell;
108
+ }));
109
+ }
110
+ // The fee the chain will take: the verified inputs' capacity, plus the interest a phase-2
111
+ // DAO input collects, less the outputs. Completion priced that interest through the
112
+ // signer's client at whatever header the node named, so a lower rate there shortened the
113
+ // change; the miner would keep the difference under any fee-rate ceiling. A node names
114
+ // which block created a cell; the chain values it at headers the transaction names in its
115
+ // deps, the deposit header at the number the cell's data records and the request header
116
+ // at the block that committed the request, which the node must prove
117
+ // (assertCommittedIn), once per request transaction. The deposit header is then the one
118
+ // the cell's data numbers and the request header the real request block, so dao.c's own
119
+ // rules settle the rest on chain.
120
+ async function verifiedFee(client, signed, inputs) {
121
+ const deps = new Set(signed.headerDeps);
122
+ const proven = new Set();
123
+ let capacity = ccc.Zero;
124
+ for (const cell of inputs) {
125
+ capacity += cell.cellOutput.capacity;
126
+ const { depositHeader, withdrawHeader } = await cell.getNervosDaoInfo(client);
127
+ if (withdrawHeader === undefined) {
128
+ continue;
129
+ }
130
+ if (!deps.has(depositHeader.hash) || !deps.has(withdrawHeader.hash)) {
131
+ throw new Error(`Input ${cell.outPoint.toHex()} is valued at a header the transaction does not name`);
132
+ }
133
+ const { txHash } = cell.outPoint;
134
+ if (!proven.has(`${txHash}${withdrawHeader.hash}`)) {
135
+ await assertCommittedIn(client, txHash, withdrawHeader);
136
+ proven.add(`${txHash}${withdrawHeader.hash}`);
137
+ }
138
+ capacity += ccc.calcDaoProfit(cell.capacityFree, depositHeader, withdrawHeader);
139
+ }
140
+ return capacity - signed.getOutputsCapacity();
141
+ }
142
+ /**
143
+ * Refuses unless the node proves `txHash` is among the transactions of `header`'s block.
144
+ * An outpoint names its transaction, not the block that committed it, so a phase-2 input
145
+ * valued at the request header the node names could otherwise be valued at another
146
+ * request block of the same transaction. The proof is a Merkle path from the transaction
147
+ * hash to the header's transactions root, which the header's own hash binds.
148
+ */
149
+ async function assertCommittedIn(client, txHash, header) {
150
+ const requestor = jsonRpcRequestor(client);
151
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion, no-restricted-syntax -- the node's answer, checked field by field in isCommittedIn.
152
+ const proof = (await requestor.request("get_transaction_proof", [
153
+ [txHash],
154
+ header.hash,
155
+ ]));
156
+ if (!isCommittedIn(txHash, header, proof)) {
157
+ throw new Error(`Transaction ${txHash} is not proven in block ${header.hash}`);
158
+ }
159
+ }
160
+ /**
161
+ * Whether `proof` is a path from `txHash` to `header`'s transactions root. CKB builds that
162
+ * root over two subtrees, `blake2b(raw transactions root || witnesses root)`, each a
163
+ * complete binary Merkle tree whose node at position `i` has its parent at `(i - 1) / 2`
164
+ * and is a left child when `i` is odd; the index is the leaf's position and the lemmas are
165
+ * its siblings bottom up.
166
+ */
167
+ export function isCommittedIn(txHash, header, { witnesses_root: witnessesRoot, proof }) {
168
+ const [index, ...extra] = proof.indices;
169
+ if (index === undefined || extra.length > 0) {
170
+ return false;
171
+ }
172
+ let node = txHash;
173
+ let position = Number(index);
174
+ for (const lemma of proof.lemmas) {
175
+ if (position === 0) {
176
+ return false;
177
+ }
178
+ node = position % 2 === 1 ? ccc.hashCkb(node, lemma) : ccc.hashCkb(lemma, node);
179
+ position = (position - 1) >> 1;
180
+ }
181
+ return position === 0 && ccc.hashCkb(node, witnessesRoot) === header.transactionsRoot;
182
+ }
83
183
  // Hashing a body-only transaction reuses CCC serialization to freeze the ordered
84
184
  // inputs, outputs and outputs data, while ignoring signer-owned witnesses and
85
185
  // the cell/header deps a connector may still have to prepare.