crypto-aio 0.1.0 → 0.2.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 (163) hide show
  1. package/CHANGELOG.md +151 -1
  2. package/README.md +32 -12
  3. package/dist/adapters/evm/builder.js +64 -4
  4. package/dist/adapters/evm/builder.js.map +1 -1
  5. package/dist/adapters/evm/decode.js +6 -1
  6. package/dist/adapters/evm/decode.js.map +1 -1
  7. package/dist/adapters/evm/ethers-client.js +4 -0
  8. package/dist/adapters/evm/ethers-client.js.map +1 -1
  9. package/dist/adapters/evm/fees.d.ts +24 -0
  10. package/dist/adapters/evm/fees.js +47 -4
  11. package/dist/adapters/evm/fees.js.map +1 -1
  12. package/dist/adapters/evm/index.d.ts +1 -1
  13. package/dist/adapters/evm/index.js +2 -1
  14. package/dist/adapters/evm/index.js.map +1 -1
  15. package/dist/adapters/evm/network.d.ts +5 -0
  16. package/dist/adapters/evm/network.js +21 -2
  17. package/dist/adapters/evm/network.js.map +1 -1
  18. package/dist/adapters/evm/plugin.d.ts +5 -6
  19. package/dist/adapters/evm/plugin.js +50 -2
  20. package/dist/adapters/evm/plugin.js.map +1 -1
  21. package/dist/adapters/evm/proofs.js +17 -5
  22. package/dist/adapters/evm/proofs.js.map +1 -1
  23. package/dist/adapters/evm/reader.d.ts +18 -0
  24. package/dist/adapters/evm/reader.js +34 -0
  25. package/dist/adapters/evm/reader.js.map +1 -1
  26. package/dist/adapters/evm/tokens.d.ts +3 -0
  27. package/dist/adapters/evm/tokens.js.map +1 -1
  28. package/dist/adapters/evm/types.d.ts +10 -0
  29. package/dist/adapters/evm/types.js.map +1 -1
  30. package/dist/adapters/evm/web3-client.d.ts +6 -3
  31. package/dist/adapters/evm/web3-client.js +19 -2
  32. package/dist/adapters/evm/web3-client.js.map +1 -1
  33. package/dist/adapters/solana/builder.js +29 -18
  34. package/dist/adapters/solana/builder.js.map +1 -1
  35. package/dist/adapters/solana/fees.d.ts +12 -3
  36. package/dist/adapters/solana/fees.js +13 -4
  37. package/dist/adapters/solana/fees.js.map +1 -1
  38. package/dist/adapters/solana/message.d.ts +15 -0
  39. package/dist/adapters/solana/message.js +120 -0
  40. package/dist/adapters/solana/message.js.map +1 -0
  41. package/dist/adapters/solana/plugin.js +4 -1
  42. package/dist/adapters/solana/plugin.js.map +1 -1
  43. package/dist/adapters/solana/types.d.ts +8 -5
  44. package/dist/adapters/solana/types.js.map +1 -1
  45. package/dist/adapters/solana/web3.js +10 -32
  46. package/dist/adapters/solana/web3.js.map +1 -1
  47. package/dist/adapters/ton/proofs.js +18 -76
  48. package/dist/adapters/ton/proofs.js.map +1 -1
  49. package/dist/adapters/ton/reader.d.ts +45 -4
  50. package/dist/adapters/ton/reader.js +200 -5
  51. package/dist/adapters/ton/reader.js.map +1 -1
  52. package/dist/adapters/ton/trace.d.ts +26 -0
  53. package/dist/adapters/ton/trace.js +35 -9
  54. package/dist/adapters/ton/trace.js.map +1 -1
  55. package/dist/adapters/tron/abi.d.ts +2 -0
  56. package/dist/adapters/tron/abi.js +2 -0
  57. package/dist/adapters/tron/abi.js.map +1 -1
  58. package/dist/adapters/tron/builder.js +20 -4
  59. package/dist/adapters/tron/builder.js.map +1 -1
  60. package/dist/adapters/tron/decode.d.ts +2 -0
  61. package/dist/adapters/tron/decode.js +1 -1
  62. package/dist/adapters/tron/decode.js.map +1 -1
  63. package/dist/adapters/tron/proofs.js +1 -0
  64. package/dist/adapters/tron/proofs.js.map +1 -1
  65. package/dist/adapters/tron/reader.d.ts +10 -0
  66. package/dist/adapters/tron/reader.js +17 -0
  67. package/dist/adapters/tron/reader.js.map +1 -1
  68. package/dist/adapters/tron/tokens.d.ts +2 -0
  69. package/dist/adapters/tron/tokens.js.map +1 -1
  70. package/dist/adapters/utxo/builder.js +1 -1
  71. package/dist/adapters/utxo/builder.js.map +1 -1
  72. package/dist/adapters/utxo/chains.js +2 -1
  73. package/dist/adapters/utxo/chains.js.map +1 -1
  74. package/dist/adapters/utxo/context.d.ts +6 -0
  75. package/dist/adapters/utxo/context.js +8 -1
  76. package/dist/adapters/utxo/context.js.map +1 -1
  77. package/dist/adapters/utxo/decode.d.ts +8 -0
  78. package/dist/adapters/utxo/decode.js +36 -0
  79. package/dist/adapters/utxo/decode.js.map +1 -1
  80. package/dist/adapters/utxo/driver.js +5 -0
  81. package/dist/adapters/utxo/driver.js.map +1 -1
  82. package/dist/adapters/utxo/esplora.d.ts +23 -2
  83. package/dist/adapters/utxo/esplora.js +49 -2
  84. package/dist/adapters/utxo/esplora.js.map +1 -1
  85. package/dist/adapters/utxo/proofs.d.ts +15 -6
  86. package/dist/adapters/utxo/proofs.js +185 -47
  87. package/dist/adapters/utxo/proofs.js.map +1 -1
  88. package/dist/adapters/utxo/rawblock.d.ts +46 -0
  89. package/dist/adapters/utxo/rawblock.js +159 -0
  90. package/dist/adapters/utxo/rawblock.js.map +1 -0
  91. package/dist/adapters/utxo/rawtx.d.ts +14 -0
  92. package/dist/adapters/utxo/rawtx.js +44 -14
  93. package/dist/adapters/utxo/rawtx.js.map +1 -1
  94. package/dist/core/blockchain/handle.d.ts +6 -27
  95. package/dist/core/blockchain/handle.js +112 -112
  96. package/dist/core/blockchain/handle.js.map +1 -1
  97. package/dist/core/config/types.d.ts +15 -0
  98. package/dist/core/config/types.js.map +1 -1
  99. package/dist/core/container/container.d.ts +1 -8
  100. package/dist/core/container/container.js +42 -8
  101. package/dist/core/container/container.js.map +1 -1
  102. package/dist/core/driver/types.d.ts +34 -1
  103. package/dist/core/driver/types.js.map +1 -1
  104. package/dist/core/errors/codes.d.ts +10 -0
  105. package/dist/core/errors/codes.js +4 -0
  106. package/dist/core/errors/codes.js.map +1 -1
  107. package/dist/core/lifecycle/engine-rules.d.ts +3 -4
  108. package/dist/core/lifecycle/engine-rules.js +16 -6
  109. package/dist/core/lifecycle/engine-rules.js.map +1 -1
  110. package/dist/core/lifecycle/engine.d.ts +2 -0
  111. package/dist/core/lifecycle/engine.js +19 -1
  112. package/dist/core/lifecycle/engine.js.map +1 -1
  113. package/dist/core/lifecycle/evaluate.js +9 -4
  114. package/dist/core/lifecycle/evaluate.js.map +1 -1
  115. package/dist/core/lifecycle/monitor.js +16 -6
  116. package/dist/core/lifecycle/monitor.js.map +1 -1
  117. package/dist/core/lifecycle/reconcile.d.ts +1 -1
  118. package/dist/core/lifecycle/reconcile.js +1 -1
  119. package/dist/core/lifecycle/reconcile.js.map +1 -1
  120. package/dist/core/lifecycle/workers.d.ts +9 -3
  121. package/dist/core/lifecycle/workers.js +32 -14
  122. package/dist/core/lifecycle/workers.js.map +1 -1
  123. package/dist/core/model/ids.d.ts +1 -0
  124. package/dist/core/model/ids.js +1 -0
  125. package/dist/core/model/ids.js.map +1 -1
  126. package/dist/core/model/ordering.d.ts +8 -0
  127. package/dist/core/model/ordering.js.map +1 -1
  128. package/dist/core/model/transaction.d.ts +7 -0
  129. package/dist/core/model/transaction.js.map +1 -1
  130. package/dist/core/observe/scanner.js +3 -0
  131. package/dist/core/observe/scanner.js.map +1 -1
  132. package/dist/core/signing/wallet.js +8 -0
  133. package/dist/core/signing/wallet.js.map +1 -1
  134. package/dist/core/store/format.d.ts +20 -0
  135. package/dist/core/store/format.js +86 -0
  136. package/dist/core/store/format.js.map +1 -0
  137. package/dist/core/store/memory.js +2 -2
  138. package/dist/core/store/memory.js.map +1 -1
  139. package/dist/core/store/types.d.ts +15 -3
  140. package/dist/core/store/types.js +2 -0
  141. package/dist/core/store/types.js.map +1 -1
  142. package/dist/core/transport/http-transport.js +21 -13
  143. package/dist/core/transport/http-transport.js.map +1 -1
  144. package/dist/core/transport/types.d.ts +16 -1
  145. package/dist/core/transport/types.js.map +1 -1
  146. package/dist/core/util/json.d.ts +7 -1
  147. package/dist/core/util/json.js +13 -4
  148. package/dist/core/util/json.js.map +1 -1
  149. package/dist/core/util/names.d.ts +6 -0
  150. package/dist/core/util/names.js +10 -0
  151. package/dist/core/util/names.js.map +1 -1
  152. package/dist/index.d.ts +2 -1
  153. package/dist/index.js +4 -2
  154. package/dist/index.js.map +1 -1
  155. package/dist/testing/contracts/operations.js +20 -1
  156. package/dist/testing/contracts/operations.js.map +1 -1
  157. package/dist/testing/env.d.ts +5 -0
  158. package/dist/testing/env.js +1 -1
  159. package/dist/testing/env.js.map +1 -1
  160. package/dist/testing/faulty-store.d.ts +2 -0
  161. package/dist/testing/faulty-store.js +5 -0
  162. package/dist/testing/faulty-store.js.map +1 -1
  163. package/package.json +17 -7
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Blockchain = void 0;
4
+ exports.createBlockchain = createBlockchain;
4
5
  const resolve_1 = require("../config/resolve");
5
6
  const internals_1 = require("../container/internals");
6
7
  const error_1 = require("../errors/error");
@@ -22,7 +23,7 @@ const internal_1 = require("./internal");
22
23
  const mapping_1 = require("./mapping");
23
24
  /** Immutable handle bound to one chain, network, library, provider set and wallet. */
24
25
  class Blockchain {
25
- /** @internal Use `CryptoAio#blockchain` or `Blockchain.create`. */
26
+ /** Handles come from `CryptoAio#blockchain` or `Blockchain.create`. */
26
27
  constructor(internals) {
27
28
  (0, internal_1.bindInternals)(this, internals);
28
29
  Object.freeze(this);
@@ -98,10 +99,10 @@ class Blockchain {
98
99
  });
99
100
  }
100
101
  async validateAddress(address) {
101
- return (await this.mapping()).driver.address.validate(address);
102
+ return (await mappingOf(this)).driver.address.validate(address);
102
103
  }
103
104
  async normalizeAddress(address) {
104
- return (0, mapping_1.toAddress)(await this.mapping(), address);
105
+ return (0, mapping_1.toAddress)(await mappingOf(this), address);
105
106
  }
106
107
  /** The chain's address for `publicKey`. `options.hd` is reserved: the core builds it
107
108
  * from a wallet's `xpub`, so a caller's `hd` is dropped and never reaches the driver.
@@ -109,7 +110,7 @@ class Blockchain {
109
110
  async addressFromPublicKey(publicKey, options = {}) {
110
111
  const { hd: _reserved, ...callerOptions } = options ?? {};
111
112
  const bytes = typeof publicKey === 'string' ? (0, bytes_1.fromHex)(publicKey) : publicKey;
112
- return this.driverAddress(bytes, callerOptions);
113
+ return driverAddress(this, bytes, callerOptions);
113
114
  }
114
115
  /** Address of the handle's own selected wallet, or of another configured `wallet` by name
115
116
  * — resolved fresh against this handle's driver, without switching the handle.
@@ -165,14 +166,14 @@ class Blockchain {
165
166
  const classed = chain.xpubNetworkClass ?? chain.model === 'utxo';
166
167
  const publicKey = (0, hd_1.deriveXpubChild)(config.xpub, path, config.xpubVersions, classed ? { testnet: network.testnet } : undefined);
167
168
  // The core's own options, with the wallet's `hd`, reach the driver directly.
168
- return this.driverAddress(publicKey, (0, wallet_1.walletOptionsOf)(config));
169
+ return driverAddress(this, publicKey, (0, wallet_1.walletOptionsOf)(config));
169
170
  }
170
171
  async resolveAsset(asset) {
171
- const m = await this.mapping();
172
+ const m = await mappingOf(this);
172
173
  return m.assets.resolve(m.selection, m.driver, asset);
173
174
  }
174
175
  async getBalance(address, asset) {
175
- const m = await this.mapping();
176
+ const m = await mappingOf(this);
176
177
  const target = (0, mapping_1.toAddress)(m, address);
177
178
  const info = await m.assets.resolve(m.selection, m.driver, asset);
178
179
  const base = await m.driver.reader.getBalance(target.canonical, info.ref);
@@ -182,7 +183,7 @@ class Blockchain {
182
183
  return Promise.all(assets.map((asset) => this.getBalance(address, asset)));
183
184
  }
184
185
  async estimateFee(intent) {
185
- const m = await this.mapping();
186
+ const m = await mappingOf(this);
186
187
  const internals = (0, internal_1.internalsOf)(this);
187
188
  const wallet = internals.selection.wallet ? await internals.wallet() : undefined;
188
189
  const from = intent.from !== undefined ? (0, mapping_1.toAddress)(m, intent.from) : wallet?.address;
@@ -193,11 +194,12 @@ class Blockchain {
193
194
  from: from.canonical,
194
195
  keys: wallet?.keys ?? [],
195
196
  wallet: wallet?.options ?? {},
197
+ decimals: normalized.asset.metadata.decimals,
196
198
  });
197
199
  return (0, mapping_1.toFeeEstimate)(m, draft);
198
200
  }
199
201
  async getTransaction(id) {
200
- const m = await this.mapping();
202
+ const m = await mappingOf(this);
201
203
  const tx = await m.driver.reader.getTransaction(id);
202
204
  if (!tx)
203
205
  return null;
@@ -209,7 +211,7 @@ class Blockchain {
209
211
  }
210
212
  /** Status of a managed Operation (by id, Attempt ref or tx hash) or of any transaction id. */
211
213
  async getTransactionStatus(id) {
212
- return (await this.monitor().status(await this.readTarget(), id)).status;
214
+ return (await monitorOf(this).status(await readTargetOf(this), id)).status;
213
215
  }
214
216
  /**
215
217
  * Resolves once `confirmations` (default: the handle's) are reached. With
@@ -222,14 +224,14 @@ class Blockchain {
222
224
  * with the reason of an aborted `signal`.
223
225
  */
224
226
  async waitForConfirmation(ref, options = {}) {
225
- const { status, record } = await this.monitor().waitFor(await this.readTarget(), ref, options);
226
- return { status, ...(record ? { operation: await this.view(record) } : {}) };
227
+ const { status, record } = await monitorOf(this).waitFor(await readTargetOf(this), ref, options);
228
+ return { status, ...(record ? { operation: await viewOf(this, record) } : {}) };
227
229
  }
228
230
  /** Yields each status change until the Operation is terminal (or the transaction is final). */
229
231
  watch(ref, options = {}) {
230
- const readTarget = () => this.readTarget();
231
- const monitor = () => this.monitor();
232
- const view = (record) => this.view(record);
232
+ const readTarget = () => readTargetOf(this);
233
+ const monitor = () => monitorOf(this);
234
+ const view = (record) => viewOf(this, record);
233
235
  return {
234
236
  async *[Symbol.asyncIterator]() {
235
237
  const target = await readTarget();
@@ -243,10 +245,10 @@ class Blockchain {
243
245
  };
244
246
  }
245
247
  async getBlockHeight() {
246
- return (await this.mapping()).driver.reader.getBlockHeight();
248
+ return (await mappingOf(this)).driver.reader.getBlockHeight();
247
249
  }
248
250
  async getBlock(ref) {
249
- const block = await (await this.mapping()).driver.reader.getBlock(ref);
251
+ const block = await (await mappingOf(this)).driver.reader.getBlock(ref);
250
252
  return block ? (0, mapping_1.toBlock)(block) : null;
251
253
  }
252
254
  /**
@@ -297,7 +299,7 @@ class Blockchain {
297
299
  if (cursor !== undefined && typeof cursor !== 'string') {
298
300
  throw new error_1.ConfigError('CONFIG_INVALID', 'history cursor must be a string');
299
301
  }
300
- const m = await this.mapping();
302
+ const m = await mappingOf(this);
301
303
  const source = m.driver.history;
302
304
  if (!source)
303
305
  throw new error_1.UnsupportedCapabilityError('UNSUPPORTED_CAPABILITY', `${this.chain} driver has no history source`);
@@ -337,8 +339,8 @@ class Blockchain {
337
339
  }
338
340
  /** Builds and persists the unsigned transaction (reserving nonce/inputs) for offline or async signing. */
339
341
  async prepareTransfer(intent, options = {}) {
340
- const target = await this.target();
341
- return this.prepared(target, await this.engine().prepare(target, intent, options));
342
+ const target = await targetOf(this);
343
+ return preparedOf(this, target, await engineOf(this).prepare(target, intent, options));
342
344
  }
343
345
  /**
344
346
  * Idempotent transfer. Throws the mapped chain error when the Operation stalls or fails;
@@ -346,8 +348,8 @@ class Blockchain {
346
348
  * unknown. Retry with the same `idempotencyKey` in both cases.
347
349
  */
348
350
  async transfer(intent, options = {}) {
349
- const target = await this.target();
350
- return this.submission(await this.engine().transfer(target, intent, options));
351
+ const target = await targetOf(this);
352
+ return submissionOf(this, await engineOf(this).transfer(target, intent, options));
351
353
  }
352
354
  /**
353
355
  * Completes an Operation that awaits signatures, with signature bundles or with the whole
@@ -356,7 +358,7 @@ class Blockchain {
356
358
  * like a bundle. `UNSUPPORTED_CAPABILITY` when the chain's driver cannot read one.
357
359
  */
358
360
  async submitSignatures(operationId, signatures) {
359
- const target = await this.target();
361
+ const target = await targetOf(this);
360
362
  let bundles;
361
363
  if (Array.isArray(signatures)) {
362
364
  bundles = signatures;
@@ -370,7 +372,7 @@ class Blockchain {
370
372
  throw new error_1.UnsupportedCapabilityError('UNSUPPORTED_CAPABILITY', `${this.chain} cannot read a signed payload; submit signature bundles`);
371
373
  }
372
374
  // Ownership first, so another wallet's Operation never reaches the driver.
373
- const record = await this.engine().requireOwned(target, operationId);
375
+ const record = await engineOf(this).requireOwned(target, operationId);
374
376
  if (!record.unsigned) {
375
377
  throw new error_1.StateError('INVALID_TRANSITION', `operation '${operationId}' has no transaction awaiting signatures`, { context: { operationId } });
376
378
  }
@@ -385,11 +387,11 @@ class Blockchain {
385
387
  throw new error_1.ValidationError('INVALID_INTENT', 'the signed payload could not be read');
386
388
  }
387
389
  }
388
- return this.submission(await this.engine().submitSignatures(target, operationId, bundles));
390
+ return submissionOf(this, await engineOf(this).submitSignatures(target, operationId, bundles));
389
391
  }
390
392
  /** Resends the active Attempt's stored raw transaction (e.g. after topping up a stalled wallet). */
391
393
  async rebroadcast(operationId) {
392
- return this.submission(await this.engine().rebroadcast(await this.target(), operationId));
394
+ return submissionOf(this, await engineOf(this).rebroadcast(await targetOf(this), operationId));
393
395
  }
394
396
  /**
395
397
  * Replaces a pending transfer with a higher-fee, mutually exclusive Attempt (capability
@@ -406,7 +408,7 @@ class Blockchain {
406
408
  * refused with `INVALID_TRANSITION`: repeat the same spec, or call `rebroadcast`, first.
407
409
  */
408
410
  async replace(operationId, options) {
409
- return this.submission(await this.engine().replace(await this.target(), operationId, options.fee));
411
+ return submissionOf(this, await engineOf(this).replace(await targetOf(this), operationId, options.fee));
410
412
  }
411
413
  /**
412
414
  * Tries to cancel with a conflicting Attempt (capability `cancel`); the outcome is
@@ -424,11 +426,11 @@ class Blockchain {
424
426
  * `INVALID_TRANSITION`: repeat that replacement's fee, or call `rebroadcast`, first.
425
427
  */
426
428
  async cancel(operationId, options = {}) {
427
- return this.submission(await this.engine().cancel(await this.target(), operationId, options.fee));
429
+ return submissionOf(this, await engineOf(this).cancel(await targetOf(this), operationId, options.fee));
428
430
  }
429
431
  /** Expiry-based chains: re-issues an Operation whose earlier Attempts are provably expired. */
430
432
  async rebuild(operationId) {
431
- return this.submission(await this.engine().rebuild(await this.target(), operationId));
433
+ return submissionOf(this, await engineOf(this).rebuild(await targetOf(this), operationId));
432
434
  }
433
435
  /**
434
436
  * Broadcasts an externally signed transaction WITHOUT creating an Operation: no idempotency,
@@ -443,15 +445,15 @@ class Blockchain {
443
445
  }
444
446
  /** Abandons an Operation that has no signed transaction yet and releases its reservation. */
445
447
  async abandon(operationId) {
446
- return this.view(await this.engine().abandon(await this.target(), operationId));
448
+ return viewOf(this, await engineOf(this).abandon(await targetOf(this), operationId));
447
449
  }
448
450
  /** An Operation of this handle's chain and network (another one is INVALID_INTENT). */
449
451
  async getOperation(operationId) {
450
- const record = await this.engine().get(operationId);
452
+ const record = await engineOf(this).get(operationId);
451
453
  if (!record)
452
454
  return null;
453
455
  (0, monitor_1.assertSameNetwork)((0, internal_1.internalsOf)(this).selection, record);
454
- return this.view(record);
456
+ return viewOf(this, record);
455
457
  }
456
458
  /** Typed family extensions: `bc.ext.<family>.<method>(...)` (async, loads the adapter on demand). */
457
459
  get ext() {
@@ -486,88 +488,86 @@ class Blockchain {
486
488
  },
487
489
  });
488
490
  }
489
- /** @internal The driver's address for `publicKey` under options the core built. */
490
- async driverAddress(publicKey, options) {
491
- const { driver, selection } = await this.mapping();
492
- return new address_1.Address(selection.chain.id, driver.address.fromPublicKey(publicKey, options), driver.address.format);
493
- }
494
- /** @internal */
495
- async mapping() {
496
- const internals = (0, internal_1.internalsOf)(this);
497
- const { driver } = await internals.pooled();
498
- return {
499
- selection: internals.selection,
500
- driver,
501
- assets: (0, internals_1.containerOf)(internals.container).runtime.assets,
502
- };
503
- }
504
- /** @internal */
505
- engine() {
506
- const internals = (0, internal_1.internalsOf)(this);
507
- internals.assertOpen();
508
- return (0, internals_1.containerOf)(internals.container).engine();
509
- }
510
- /** @internal */
511
- monitor() {
512
- return (0, internals_1.containerOf)((0, internal_1.internalsOf)(this).container).monitor();
513
- }
514
- /** @internal */
515
- async readTarget() {
516
- const internals = (0, internal_1.internalsOf)(this);
517
- return { selection: internals.selection, pooled: await internals.pooled() };
518
- }
519
- /** @internal */
520
- async target() {
521
- const internals = (0, internal_1.internalsOf)(this);
522
- const [pooled, wallet] = await Promise.all([internals.pooled(), internals.wallet()]);
523
- return {
524
- selection: internals.selection,
525
- pooled,
526
- wallet,
527
- assets: (0, internals_1.containerOf)(internals.container).runtime.assets,
528
- };
529
- }
530
- /** @internal */
531
- async view(record) {
532
- const { runtime } = (0, internals_1.containerOf)((0, internal_1.internalsOf)(this).container);
533
- return (0, views_1.toView)(record, await (0, observations_1.loadObservations)(runtime.stores.operations, record));
534
- }
535
- /** @internal */
536
- async submission(record) {
537
- const view = await this.view(record);
538
- return {
539
- ...view,
540
- operationId: view.id,
541
- ...(view.activeAttempt ? { attempt: view.activeAttempt } : {}),
542
- wait: (options) => this.waitForConfirmation(view.id, options),
543
- };
544
- }
545
- /**
546
- * @internal Signing material only while the Operation awaits signatures: an idempotent
547
- * repeat of an abandoned Operation returns its view alone.
548
- */
549
- async prepared(target, record) {
550
- const operation = await this.view(record);
551
- const unsigned = record.unsigned;
552
- if (!unsigned || !engine_1.PRE_SIGNING_STATES.has(record.state))
553
- return { operation };
554
- const fee = await (0, mapping_1.toFeeEstimate)({
555
- selection: target.selection,
556
- driver: target.pooled.driver,
557
- assets: target.assets,
558
- }, unsigned.fee);
559
- return {
560
- operation,
561
- unsigned: {
562
- payload: unsigned.payload,
563
- signingRequests: unsigned.signingRequests,
564
- ...(unsigned.expectedRef ? { expectedRef: unsigned.expectedRef } : {}),
565
- fee,
566
- },
567
- };
568
- }
569
491
  }
570
492
  exports.Blockchain = Blockchain;
493
+ /** A handle on `internals`; the container's way past the private constructor. */
494
+ function createBlockchain(internals) {
495
+ const Handle = Blockchain;
496
+ return new Handle(internals);
497
+ }
498
+ /** The driver's address for `publicKey` under options the core built. */
499
+ async function driverAddress(handle, publicKey, options) {
500
+ const { driver, selection } = await mappingOf(handle);
501
+ return new address_1.Address(selection.chain.id, driver.address.fromPublicKey(publicKey, options), driver.address.format);
502
+ }
503
+ async function mappingOf(handle) {
504
+ const internals = (0, internal_1.internalsOf)(handle);
505
+ const { driver } = await internals.pooled();
506
+ return {
507
+ selection: internals.selection,
508
+ driver,
509
+ assets: (0, internals_1.containerOf)(internals.container).runtime.assets,
510
+ };
511
+ }
512
+ function engineOf(handle) {
513
+ const internals = (0, internal_1.internalsOf)(handle);
514
+ internals.assertOpen();
515
+ return (0, internals_1.containerOf)(internals.container).engine();
516
+ }
517
+ function monitorOf(handle) {
518
+ return (0, internals_1.containerOf)((0, internal_1.internalsOf)(handle).container).monitor();
519
+ }
520
+ async function readTargetOf(handle) {
521
+ const internals = (0, internal_1.internalsOf)(handle);
522
+ return { selection: internals.selection, pooled: await internals.pooled() };
523
+ }
524
+ async function targetOf(handle) {
525
+ const internals = (0, internal_1.internalsOf)(handle);
526
+ const [pooled, wallet] = await Promise.all([internals.pooled(), internals.wallet()]);
527
+ return {
528
+ selection: internals.selection,
529
+ pooled,
530
+ wallet,
531
+ assets: (0, internals_1.containerOf)(internals.container).runtime.assets,
532
+ };
533
+ }
534
+ async function viewOf(handle, record) {
535
+ const { runtime } = (0, internals_1.containerOf)((0, internal_1.internalsOf)(handle).container);
536
+ return (0, views_1.toView)(record, await (0, observations_1.loadObservations)(runtime.stores.operations, record));
537
+ }
538
+ async function submissionOf(handle, record) {
539
+ const view = await viewOf(handle, record);
540
+ return {
541
+ ...view,
542
+ operationId: view.id,
543
+ ...(view.activeAttempt ? { attempt: view.activeAttempt } : {}),
544
+ wait: (options) => handle.waitForConfirmation(view.id, options),
545
+ };
546
+ }
547
+ /**
548
+ * Signing material only while the Operation awaits signatures: an idempotent repeat of an
549
+ * abandoned Operation returns its view alone.
550
+ */
551
+ async function preparedOf(handle, target, record) {
552
+ const operation = await viewOf(handle, record);
553
+ const unsigned = record.unsigned;
554
+ if (!unsigned || !engine_1.PRE_SIGNING_STATES.has(record.state))
555
+ return { operation };
556
+ const fee = await (0, mapping_1.toFeeEstimate)({
557
+ selection: target.selection,
558
+ driver: target.pooled.driver,
559
+ assets: target.assets,
560
+ }, unsigned.fee);
561
+ return {
562
+ operation,
563
+ unsigned: {
564
+ payload: unsigned.payload,
565
+ signingRequests: unsigned.signingRequests,
566
+ ...(unsigned.expectedRef ? { expectedRef: unsigned.expectedRef } : {}),
567
+ fee,
568
+ },
569
+ };
570
+ }
571
571
  /** The shape of a signed payload (`RawTx`), checked at run time. */
572
572
  function isRawTx(value) {
573
573
  if (value === null || typeof value !== 'object')
@@ -1 +1 @@
1
- {"version":3,"file":"handle.js","sourceRoot":"","sources":["../../../src/core/blockchain/handle.ts"],"names":[],"mappings":"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","sourcesContent":["import { describeSelection, resolveSelection } from '../config/resolve';\nimport type { HandleConfig, HandleOptions } from '../config/types';\nimport { containerOf } from '../container/internals';\nimport type { BroadcastResult, DriverLimits, WalletOptions } from '../driver/types';\nimport {\n ConfigError,\n ProviderError,\n StateError,\n UnsupportedCapabilityError,\n ValidationError,\n isCryptoAioError,\n} from '../errors/error';\nimport { Address } from '../model/address';\nimport { Amount } from '../model/amount';\nimport type { AssetInfo, AssetRef } from '../model/asset';\nimport type { Capability } from '../model/capability';\nimport type { FeeEstimate, FeeOverride, FeeSpeed } from '../model/fee';\nimport type { ChainId, ExtOf, LibraryOf, NetworkOf } from '../model/ids';\nimport { toStoredIntent, type TransferIntent } from '../model/intent';\nimport type { Block, RawTx, Transaction, TxStatus } from '../model/transaction';\nimport {\n PRE_SIGNING_STATES,\n withLifecycleDefaults,\n type OperationEngine,\n type OperationTarget,\n type ReadTarget,\n type TransferOptions,\n} from '../lifecycle/engine';\nimport { normalizeIntent } from '../lifecycle/intent';\nimport {\n assertSameNetwork,\n type ConfirmationResult,\n type Monitor,\n type TxStatusEvent,\n type WaitOptions,\n} from '../lifecycle/monitor';\nimport { loadObservations } from '../lifecycle/observations';\nimport {\n toView,\n type OperationView,\n type PreparedOperation,\n type Submission,\n} from '../lifecycle/views';\nimport { Scanner, type ScannerOptions } from '../observe/scanner';\nimport { deriveXpubChild } from '../signing/hd';\nimport type { SignatureBundle } from '../signing/types';\nimport { resolveWallet, walletOptionsOf, xpubPathOf } from '../signing/wallet';\nimport type { OperationRecord } from '../store/types';\nimport type { EndpointState, EndpointStatus } from '../transport/types';\nimport { fromHex } from '../util/bytes';\nimport { unknownName } from '../util/names';\nimport { defaultBlockchain } from './default-ref';\nimport { bindInternals, internalsOf, type HandleInternals } from './internal';\nimport {\n toAddress,\n toBlock,\n toFeeEstimate,\n toTransaction,\n type MappingContext,\n} from './mapping';\n\nexport interface Balance {\n readonly address: Address;\n readonly asset: AssetInfo;\n readonly amount: Amount;\n}\n\nexport interface NetworkStatus {\n readonly chain: string;\n readonly network: string;\n readonly height: bigint;\n readonly finalizedHeight: bigint;\n readonly endpoints: readonly EndpointStatus[];\n readonly indexers: readonly EndpointStatus[];\n}\n\n/** Immutable handle bound to one chain, network, library, provider set and wallet. */\nexport class Blockchain<C extends ChainId = ChainId> {\n /** @internal Use `CryptoAio#blockchain` or `Blockchain.create`. */\n constructor(internals: HandleInternals) {\n bindInternals(this, internals);\n Object.freeze(this);\n }\n\n /** Creates a handle on the default container (see `configure`). */\n static create<C extends ChainId>(config: HandleConfig<C>): Blockchain<C> {\n return defaultBlockchain(config as HandleOptions) as unknown as Blockchain<C>;\n }\n\n get chain(): C {\n return internalsOf(this).selection.chain.id as C;\n }\n\n get network(): NetworkOf<C> {\n return internalsOf(this).selection.network.id as NetworkOf<C>;\n }\n\n get library(): LibraryOf<C> {\n return internalsOf(this).selection.library as LibraryOf<C>;\n }\n\n /** Frozen, redacted snapshot of the resolved configuration. */\n get config(): Readonly<Record<string, unknown>> {\n return describeSelection(internalsOf(this).selection);\n }\n\n /** A fresh copy on every read; mutating the result never affects `supports()`. */\n get capabilities(): ReadonlySet<Capability> {\n return new Set(internalsOf(this).selection.capabilities);\n }\n\n supports(capability: Capability): boolean {\n return internalsOf(this).selection.capabilities.has(capability);\n }\n\n /** Returns a NEW handle; this handle and operations started from it are unaffected. */\n with(overrides: Partial<Omit<HandleConfig<C>, 'chain'>>): Blockchain<C> {\n const { selection, container } = internalsOf(this);\n return container.blockchain({\n ...selection.handle,\n ...overrides,\n chain: this.chain,\n } as HandleConfig<C>);\n }\n\n /**\n * Loads the adapter, connects its transport and validates it's actually usable; fails fast\n * on a missing dependency (`DEPENDENCY_MISSING`), an invalid wallet (surfaced by resolving\n * it), or a provider that can't serve reads: `PROVIDER_UNAVAILABLE` when no configured\n * endpoint is usable, `PROVIDER_MISCONFIGURED` (non-retryable) when every endpoint's\n * identity mismatches the configured network. An endpoint is usable when it's 'healthy',\n * 'lagging' or 'half-open' (the breaker is willing to try it), or 'unknown' while the\n * transport has no health probes configured at all — nothing could ever have marked it\n * healthy/lagging in that case, so 'unknown' is simply its steady state.\n */\n async ready(): Promise<this> {\n const internals = internalsOf(this);\n const pooled = await internals.pooled();\n await pooled.transport.refreshHealth();\n const statuses = pooled.transport.status();\n if (statuses.length > 0 && statuses.every((s) => s.state === 'disabled')) {\n throw new ProviderError(\n 'PROVIDER_MISCONFIGURED',\n `every endpoint for ${this.chain} serves a different network than configured`,\n { retryable: false },\n );\n }\n const usable = (state: EndpointState): boolean =>\n state === 'healthy' ||\n state === 'lagging' ||\n state === 'half-open' ||\n (state === 'unknown' && !pooled.transport.hasProbes());\n if (!statuses.some((s) => usable(s.state))) {\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n `no healthy endpoint for ${this.chain}`,\n );\n }\n if (internals.selection.wallet) await internals.wallet();\n return this;\n }\n\n async limits(): Promise<DriverLimits> {\n const { driver } = await internalsOf(this).pooled();\n const wallet = internalsOf(this).selection.wallet;\n const options: WalletOptions = wallet ? walletOptionsOf(wallet.config) : {};\n return (\n driver.limits?.(options) ?? {\n maxOutputs: this.supports('batch-transfer') ? Number.MAX_SAFE_INTEGER : 1,\n }\n );\n }\n\n async validateAddress(address: string): Promise<boolean> {\n return (await this.mapping()).driver.address.validate(address);\n }\n\n async normalizeAddress(address: string): Promise<Address> {\n return toAddress(await this.mapping(), address);\n }\n\n /** The chain's address for `publicKey`. `options.hd` is reserved: the core builds it\n * from a wallet's `xpub`, so a caller's `hd` is dropped and never reaches the driver.\n * `null` options (from an untyped caller) are none. */\n async addressFromPublicKey(\n publicKey: Uint8Array | string,\n options: WalletOptions = {},\n ): Promise<Address> {\n const { hd: _reserved, ...callerOptions } = options ?? {};\n const bytes = typeof publicKey === 'string' ? fromHex(publicKey) : publicKey;\n return this.driverAddress(bytes, callerOptions);\n }\n\n /** Address of the handle's own selected wallet, or of another configured `wallet` by name\n * — resolved fresh against this handle's driver, without switching the handle.\n * Re-resolved through `resolveSelection` (not `resolveWallet` directly) so a\n * named wallet gets the same `wallet.chains` enablement check, unknown-signer validation and\n * signer-scheme compatibility check that the handle's own wallet got at construction. */\n async walletAddress(wallet?: string): Promise<Address> {\n const internals = internalsOf(this);\n const selection = internals.selection;\n if (wallet === undefined || wallet === selection.wallet?.name) {\n return (await internals.wallet()).address;\n }\n const container = containerOf(internals.container);\n const effective = container.effective();\n // An own-property check, so a wallet literally named 'constructor' (or any other\n // Object.prototype key) can never be mistaken for one that exists.\n if (!Object.hasOwn(effective.wallets, wallet)) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n unknownName('wallet', Object.keys(effective.wallets)),\n );\n }\n const { driver } = await internals.pooled();\n const resolved = resolveSelection({\n handle: { ...selection.handle, wallet, signer: undefined },\n effective,\n catalogs: container.runtime.catalogs,\n });\n const resolvedWallet = await resolveWallet(\n resolved,\n driver,\n effective.signers,\n container.runtime.catalogs.schemes,\n container.signerDeadline(),\n );\n return resolvedWallet.address;\n }\n\n /** Derives a deposit address from the wallet's xpub (capability `hd-public-derivation`). */\n async deriveAddress(wallet: string, index: number): Promise<Address> {\n if (!this.supports('hd-public-derivation')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} does not support public derivation`,\n );\n }\n if (!Number.isInteger(index) || index < 0 || index >= 2 ** 31) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'derivation index must be an integer in [0, 2^31)',\n );\n }\n const internals = internalsOf(this);\n const { wallets } = containerOf(internals.container).effective();\n // Own keys only, so `toString` is no wallet. The caller's text is never repeated: it\n // may be a pasted secret.\n if (!Object.hasOwn(wallets, wallet)) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n unknownName('wallet', Object.keys(wallets)),\n );\n }\n const config = wallets[wallet];\n if (!config?.xpub)\n throw new ConfigError('CONFIG_INVALID', `wallet '${wallet}' has no xpub`);\n // A non-string xpubPath is CONFIG_INVALID, as at wallet resolution.\n const path = (xpubPathOf(config) ?? '0/{index}').replace('{index}', String(index));\n // A UTXO chain's extended keys carry its network class; account-model\n // wallets (EVM, Tron) export `xpub` on every network, so theirs is not checked. A chain\n // whose wallets do the same says so (`xpubNetworkClass: false`, Avalanche X/P).\n const { chain, network } = internals.selection;\n const classed = chain.xpubNetworkClass ?? chain.model === 'utxo';\n const publicKey = deriveXpubChild(\n config.xpub,\n path,\n config.xpubVersions,\n classed ? { testnet: network.testnet } : undefined,\n );\n // The core's own options, with the wallet's `hd`, reach the driver directly.\n return this.driverAddress(publicKey, walletOptionsOf(config));\n }\n\n async resolveAsset(asset?: AssetRef | string): Promise<AssetInfo> {\n const m = await this.mapping();\n return m.assets.resolve(m.selection, m.driver, asset);\n }\n\n async getBalance(address: string, asset?: AssetRef | string): Promise<Balance> {\n const m = await this.mapping();\n const target = toAddress(m, address);\n const info = await m.assets.resolve(m.selection, m.driver, asset);\n const base = await m.driver.reader.getBalance(target.canonical, info.ref);\n return { address: target, asset: info, amount: Amount.fromBase(base, info) };\n }\n\n async getBalances(\n address: string,\n assets: readonly (AssetRef | string)[],\n ): Promise<Balance[]> {\n return Promise.all(assets.map((asset) => this.getBalance(address, asset)));\n }\n\n async estimateFee(intent: TransferIntent): Promise<FeeEstimate> {\n const m = await this.mapping();\n const internals = internalsOf(this);\n const wallet = internals.selection.wallet ? await internals.wallet() : undefined;\n const from = intent.from !== undefined ? toAddress(m, intent.from) : wallet?.address;\n if (!from)\n throw new ValidationError(\n 'INVALID_INTENT',\n 'estimateFee needs a wallet or intent.from',\n );\n const normalized = await normalizeIntent(m, intent, from);\n const draft = await m.driver.builder.estimateFee(toStoredIntent(normalized), {\n from: from.canonical,\n keys: wallet?.keys ?? [],\n wallet: wallet?.options ?? {},\n });\n return toFeeEstimate(m, draft);\n }\n\n async getTransaction(id: string): Promise<Transaction | null> {\n const m = await this.mapping();\n const tx = await m.driver.reader.getTransaction(id);\n if (!tx) return null;\n const [head, finalized] = await Promise.all([\n m.driver.reader.getBlockHeight(),\n m.driver.reader.getFinalizedHeight(),\n ]);\n return toTransaction(m, tx, head, finalized);\n }\n\n /** Status of a managed Operation (by id, Attempt ref or tx hash) or of any transaction id. */\n async getTransactionStatus(id: string): Promise<TxStatus> {\n return (await this.monitor().status(await this.readTarget(), id)).status;\n }\n\n /**\n * Resolves once `confirmations` (default: the handle's) are reached. With\n * `finality: 'final'`, a managed Operation (by id, Attempt ref or tx hash) resolves on\n * **proven** finality (finalized data confirmed by quorum proof reads); a transaction the\n * library does not manage resolves on **observed** finality (one endpoint's view of a\n * block at or below the finalized height). Rejects with the chain error when the\n * Operation fails, expires or is replaced (`TX_REVERTED` for an unmanaged transaction\n * that reverted), with `TIMEOUT` (retryable, state unchanged) when time runs out, and\n * with the reason of an aborted `signal`.\n */\n async waitForConfirmation(\n ref: string,\n options: WaitOptions = {},\n ): Promise<ConfirmationResult> {\n const { status, record } = await this.monitor().waitFor(\n await this.readTarget(),\n ref,\n options,\n );\n return { status, ...(record ? { operation: await this.view(record) } : {}) };\n }\n\n /** Yields each status change until the Operation is terminal (or the transaction is final). */\n watch(\n ref: string,\n options: { readonly pollIntervalMs?: number; readonly signal?: AbortSignal } = {},\n ): AsyncIterable<TxStatusEvent> {\n const readTarget = () => this.readTarget();\n const monitor = () => this.monitor();\n const view = (record: OperationRecord) => this.view(record);\n return {\n async *[Symbol.asyncIterator]() {\n const target = await readTarget();\n for await (const snapshot of monitor().watch(target, ref, options)) {\n yield {\n status: snapshot.status,\n ...(snapshot.record ? { operation: await view(snapshot.record) } : {}),\n };\n }\n },\n };\n }\n\n async getBlockHeight(): Promise<bigint> {\n return (await this.mapping()).driver.reader.getBlockHeight();\n }\n\n async getBlock(ref: bigint | string): Promise<Block | null> {\n const block = await (await this.mapping()).driver.reader.getBlock(ref);\n return block ? toBlock(block) : null;\n }\n\n /**\n * Reorg-aware, at-least-once block scanner (capability `block-scan`): `ack()` each event\n * to commit the cursor before asking for the next. Invalid options throw `CONFIG_INVALID`.\n */\n scanner(options: ScannerOptions): Scanner {\n if (!this.supports('block-scan')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} does not support block scanning`,\n );\n }\n const internals = internalsOf(this);\n const container = containerOf(internals.container);\n const { runtime } = container;\n return new Scanner(\n {\n load: async () => {\n // One pooled entry, so the driver and its transport always belong together.\n const { driver, transport } = await internals.pooled();\n const blocks = driver.blocks;\n if (!blocks)\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} driver has no block source`,\n );\n const mapping = {\n selection: internals.selection,\n driver,\n assets: runtime.assets,\n };\n return { mapping, blocks, transport };\n },\n cursors: runtime.stores.cursors,\n events: runtime.events,\n clock: runtime.clock,\n namespace: runtime.namespace,\n defaults: {\n reorgWindow: internals.selection.network.reorgWindow,\n pollIntervalMs: withLifecycleDefaults(container.effective().lifecycle)\n .pollIntervalMs,\n },\n },\n options,\n );\n }\n\n /** Indexer-backed transaction history of an address (capability `address-history`). */\n async history(\n address: string,\n options: { readonly cursor?: string; readonly limit?: number } = {},\n ): Promise<{ readonly items: readonly Transaction[]; readonly next?: string }> {\n if (!this.supports('address-history')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} has no address history (configure an indexer)`,\n );\n }\n const { cursor, limit = 50 } = options;\n if (!Number.isSafeInteger(limit) || limit < 1) {\n throw new ConfigError('CONFIG_INVALID', 'history limit must be a positive integer');\n }\n if (cursor !== undefined && typeof cursor !== 'string') {\n throw new ConfigError('CONFIG_INVALID', 'history cursor must be a string');\n }\n const m = await this.mapping();\n const source = m.driver.history;\n if (!source)\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} driver has no history source`,\n );\n const page = await source.list(toAddress(m, address).canonical, {\n ...(cursor !== undefined ? { cursor } : {}),\n limit,\n });\n const [head, finalized] = await Promise.all([\n m.driver.reader.getBlockHeight(),\n m.driver.reader.getFinalizedHeight(),\n ]);\n return {\n items: await Promise.all(\n page.items.map((tx) => toTransaction(m, tx, head, finalized)),\n ),\n ...(page.next !== undefined ? { next: page.next } : {}),\n };\n }\n\n async getNetworkStatus(): Promise<NetworkStatus> {\n const pooled = await internalsOf(this).pooled();\n await pooled.transport.refreshHealth();\n if (pooled.indexer) await pooled.indexer.refreshHealth();\n const [height, finalized] = await Promise.all([\n pooled.driver.reader.getBlockHeight(),\n pooled.driver.reader.getFinalizedHeight(),\n ]);\n return {\n chain: this.chain,\n network: this.network,\n height,\n // Two reads, possibly from different endpoints, with blocks landing between\n // them: where the latest block is final, the finalized height can pass the head read.\n // Every height below a final one is final, so the clamp keeps the status true.\n finalizedHeight: finalized > height ? height : finalized,\n endpoints: pooled.transport.status(),\n indexers: pooled.indexer?.status() ?? [],\n };\n }\n\n /** Builds and persists the unsigned transaction (reserving nonce/inputs) for offline or async signing. */\n async prepareTransfer(\n intent: TransferIntent,\n options: TransferOptions = {},\n ): Promise<PreparedOperation> {\n const target = await this.target();\n return this.prepared(target, await this.engine().prepare(target, intent, options));\n }\n\n /**\n * Idempotent transfer. Throws the mapped chain error when the Operation stalls or fails;\n * throws an `ambiguous` error (with `context.operationId`) when the broadcast outcome is\n * unknown. Retry with the same `idempotencyKey` in both cases.\n */\n async transfer(\n intent: TransferIntent,\n options: TransferOptions = {},\n ): Promise<Submission> {\n const target = await this.target();\n return this.submission(await this.engine().transfer(target, intent, options));\n }\n\n /**\n * Completes an Operation that awaits signatures, with signature bundles or with the whole\n * payload signed elsewhere, e.g. a signed PSBT: the driver extracts its signatures\n * (`TxBuilder.signaturesFrom`), and each is verified against the stored request exactly\n * like a bundle. `UNSUPPORTED_CAPABILITY` when the chain's driver cannot read one.\n */\n async submitSignatures(\n operationId: string,\n signatures: readonly SignatureBundle[] | RawTx,\n ): Promise<Submission> {\n const target = await this.target();\n let bundles: readonly SignatureBundle[];\n if (Array.isArray(signatures)) {\n bundles = signatures;\n } else {\n if (!isRawTx(signatures)) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'signatures must be signature bundles or a signed payload { encoding, data }',\n );\n }\n const { builder } = target.pooled.driver;\n if (!builder.signaturesFrom) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} cannot read a signed payload; submit signature bundles`,\n );\n }\n // Ownership first, so another wallet's Operation never reaches the driver.\n const record = await this.engine().requireOwned(target, operationId);\n if (!record.unsigned) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `operation '${operationId}' has no transaction awaiting signatures`,\n { context: { operationId } },\n );\n }\n try {\n bundles = builder.signaturesFrom(record.unsigned, signatures);\n } catch (error) {\n // A driver's own classified error passes through; a foreign one (an SDK's\n // parse error, which may quote the payload) becomes a fixed text with no cause.\n if (isCryptoAioError(error)) throw error;\n throw new ValidationError(\n 'INVALID_INTENT',\n 'the signed payload could not be read',\n );\n }\n }\n return this.submission(\n await this.engine().submitSignatures(target, operationId, bundles),\n );\n }\n\n /** Resends the active Attempt's stored raw transaction (e.g. after topping up a stalled wallet). */\n async rebroadcast(operationId: string): Promise<Submission> {\n return this.submission(\n await this.engine().rebroadcast(await this.target(), operationId),\n );\n }\n\n /**\n * Replaces a pending transfer with a higher-fee, mutually exclusive Attempt (capability\n * `replace-fee`; a synchronous signer). If the node refuses it, the original stays live\n * and active, and the node's error is thrown.\n *\n * Idempotent per fee spec: repeating the call with the same `fee` (the same speed name,\n * or an equal override) returns the replacement it already made, resending it if its\n * broadcast was never recorded or it was refused; nothing is signed again, and a refusal\n * is thrown, never reported as a success. To bump again, pass another spec, such as a\n * higher explicit override.\n *\n * While that replacement is stored but not yet sent, another fee spec (or a cancel) is\n * refused with `INVALID_TRANSITION`: repeat the same spec, or call `rebroadcast`, first.\n */\n async replace(\n operationId: string,\n options: { readonly fee: FeeSpeed | FeeOverride },\n ): Promise<Submission> {\n return this.submission(\n await this.engine().replace(await this.target(), operationId, options.fee),\n );\n }\n\n /**\n * Tries to cancel with a conflicting Attempt (capability `cancel`); the outcome is\n * `cancelled` only if the cancel wins at finality, and the original may still win. The\n * cancel pays the network's minimum bump over the highest earlier cancel, or `options.fee`\n * (refused below that bump).\n *\n * Repeating the call while a cancel is pending resends it if its broadcast was never\n * recorded, and returns it while a node holds it or once it is on chain, so concurrent and\n * retried calls create one cancel. Only a cancel the node refused or dropped is bumped by\n * a repeat, one step at a time; when the node's minimum fee is more than one bump away,\n * pass `options.fee`, which always builds a new cancel while none is on chain.\n *\n * While a replacement is stored but not yet sent, a cancel is refused with\n * `INVALID_TRANSITION`: repeat that replacement's fee, or call `rebroadcast`, first.\n */\n async cancel(\n operationId: string,\n options: { readonly fee?: FeeSpeed | FeeOverride } = {},\n ): Promise<Submission> {\n return this.submission(\n await this.engine().cancel(await this.target(), operationId, options.fee),\n );\n }\n\n /** Expiry-based chains: re-issues an Operation whose earlier Attempts are provably expired. */\n async rebuild(operationId: string): Promise<Submission> {\n return this.submission(await this.engine().rebuild(await this.target(), operationId));\n }\n\n /**\n * Broadcasts an externally signed transaction WITHOUT creating an Operation: no idempotency,\n * persistence or monitoring. Prefer prepareTransfer + submitSignatures for managed flows.\n */\n async broadcast(raw: RawTx): Promise<BroadcastResult> {\n const { driver } = await internalsOf(this).pooled();\n return driver.broadcaster.broadcast({\n raw,\n ref: { id: '', idKind: 'tx-hash', canonical: false },\n });\n }\n\n /** Abandons an Operation that has no signed transaction yet and releases its reservation. */\n async abandon(operationId: string): Promise<OperationView> {\n return this.view(await this.engine().abandon(await this.target(), operationId));\n }\n\n /** An Operation of this handle's chain and network (another one is INVALID_INTENT). */\n async getOperation(operationId: string): Promise<OperationView | null> {\n const record = await this.engine().get(operationId);\n if (!record) return null;\n assertSameNetwork(internalsOf(this).selection, record);\n return this.view(record);\n }\n\n /** Typed family extensions: `bc.ext.<family>.<method>(...)` (async, loads the adapter on demand). */\n get ext(): ExtOf<C> {\n const internals = internalsOf(this);\n const where = `${internals.selection.chain.id}/${internals.selection.library}`;\n return new Proxy(\n {},\n {\n get: (_target, family) => {\n if (typeof family !== 'string' || family === 'then') return undefined;\n return new Proxy(\n {},\n {\n get: (_inner, method) => {\n if (typeof method !== 'string' || method === 'then') return undefined;\n return async (...args: unknown[]) => {\n const { driver } = await internals.pooled();\n // Own-property checks at both levels, so a name inherited from\n // Object.prototype (`constructor`, `toString`, ...) can never be mistaken\n // for a real family method.\n const familyExt =\n driver.ext && Object.hasOwn(driver.ext, family)\n ? driver.ext[family]\n : undefined;\n const fn =\n familyExt && Object.hasOwn(familyExt, method)\n ? (familyExt[method] as (...a: unknown[]) => Promise<unknown>)\n : undefined;\n if (typeof fn !== 'function') {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `ext.${family}.${method} is not available on ${where}`,\n );\n }\n return fn(...args);\n };\n },\n },\n );\n },\n },\n ) as ExtOf<C>;\n }\n\n /** @internal The driver's address for `publicKey` under options the core built. */\n protected async driverAddress(\n publicKey: Uint8Array,\n options: WalletOptions,\n ): Promise<Address> {\n const { driver, selection } = await this.mapping();\n return new Address(\n selection.chain.id,\n driver.address.fromPublicKey(publicKey, options),\n driver.address.format,\n );\n }\n\n /** @internal */\n protected async mapping(): Promise<MappingContext> {\n const internals = internalsOf(this);\n const { driver } = await internals.pooled();\n return {\n selection: internals.selection,\n driver,\n assets: containerOf(internals.container).runtime.assets,\n };\n }\n\n /** @internal */\n protected engine(): OperationEngine {\n const internals = internalsOf(this);\n internals.assertOpen();\n return containerOf(internals.container).engine();\n }\n\n /** @internal */\n protected monitor(): Monitor {\n return containerOf(internalsOf(this).container).monitor();\n }\n\n /** @internal */\n protected async readTarget(): Promise<ReadTarget> {\n const internals = internalsOf(this);\n return { selection: internals.selection, pooled: await internals.pooled() };\n }\n\n /** @internal */\n protected async target(): Promise<OperationTarget> {\n const internals = internalsOf(this);\n const [pooled, wallet] = await Promise.all([internals.pooled(), internals.wallet()]);\n return {\n selection: internals.selection,\n pooled,\n wallet,\n assets: containerOf(internals.container).runtime.assets,\n };\n }\n\n /** @internal */\n protected async view(record: OperationRecord): Promise<OperationView> {\n const { runtime } = containerOf(internalsOf(this).container);\n return toView(record, await loadObservations(runtime.stores.operations, record));\n }\n\n /** @internal */\n protected async submission(record: OperationRecord): Promise<Submission> {\n const view = await this.view(record);\n return {\n ...view,\n operationId: view.id,\n ...(view.activeAttempt ? { attempt: view.activeAttempt } : {}),\n wait: (options?: WaitOptions) => this.waitForConfirmation(view.id, options),\n };\n }\n\n /**\n * @internal Signing material only while the Operation awaits signatures: an idempotent\n * repeat of an abandoned Operation returns its view alone.\n */\n protected async prepared(\n target: OperationTarget,\n record: OperationRecord,\n ): Promise<PreparedOperation> {\n const operation = await this.view(record);\n const unsigned = record.unsigned;\n if (!unsigned || !PRE_SIGNING_STATES.has(record.state)) return { operation };\n const fee = await toFeeEstimate(\n {\n selection: target.selection,\n driver: target.pooled.driver,\n assets: target.assets,\n },\n unsigned.fee,\n );\n return {\n operation,\n unsigned: {\n payload: unsigned.payload,\n signingRequests: unsigned.signingRequests,\n ...(unsigned.expectedRef ? { expectedRef: unsigned.expectedRef } : {}),\n fee,\n },\n };\n }\n}\n\n/** The shape of a signed payload (`RawTx`), checked at run time. */\nfunction isRawTx(value: unknown): value is RawTx {\n if (value === null || typeof value !== 'object') return false;\n const { encoding, data } = value as { encoding?: unknown; data?: unknown };\n return (\n (encoding === 'hex' || encoding === 'base64' || encoding === 'json') &&\n typeof data === 'string'\n );\n}\n"]}
1
+ {"version":3,"file":"handle.js","sourceRoot":"","sources":["../../../src/core/blockchain/handle.ts"],"names":[],"mappings":"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","sourcesContent":["import { describeSelection, resolveSelection } from '../config/resolve';\nimport type { HandleConfig, HandleOptions } from '../config/types';\nimport { containerOf } from '../container/internals';\nimport type { BroadcastResult, DriverLimits, WalletOptions } from '../driver/types';\nimport {\n ConfigError,\n ProviderError,\n StateError,\n UnsupportedCapabilityError,\n ValidationError,\n isCryptoAioError,\n} from '../errors/error';\nimport { Address } from '../model/address';\nimport { Amount } from '../model/amount';\nimport type { AssetInfo, AssetRef } from '../model/asset';\nimport type { Capability } from '../model/capability';\nimport type { FeeEstimate, FeeOverride, FeeSpeed } from '../model/fee';\nimport type { ChainId, ExtOf, LibraryOf, NetworkOf } from '../model/ids';\nimport { toStoredIntent, type TransferIntent } from '../model/intent';\nimport type { Block, RawTx, Transaction, TxStatus } from '../model/transaction';\nimport {\n PRE_SIGNING_STATES,\n withLifecycleDefaults,\n type OperationEngine,\n type OperationTarget,\n type ReadTarget,\n type TransferOptions,\n} from '../lifecycle/engine';\nimport { normalizeIntent } from '../lifecycle/intent';\nimport {\n assertSameNetwork,\n type ConfirmationResult,\n type Monitor,\n type TxStatusEvent,\n type WaitOptions,\n} from '../lifecycle/monitor';\nimport { loadObservations } from '../lifecycle/observations';\nimport {\n toView,\n type OperationView,\n type PreparedOperation,\n type Submission,\n} from '../lifecycle/views';\nimport { Scanner, type ScannerOptions } from '../observe/scanner';\nimport { deriveXpubChild } from '../signing/hd';\nimport type { SignatureBundle } from '../signing/types';\nimport { resolveWallet, walletOptionsOf, xpubPathOf } from '../signing/wallet';\nimport type { OperationRecord } from '../store/types';\nimport type { EndpointState, EndpointStatus } from '../transport/types';\nimport { fromHex } from '../util/bytes';\nimport { unknownName } from '../util/names';\nimport { defaultBlockchain } from './default-ref';\nimport { bindInternals, internalsOf, type HandleInternals } from './internal';\nimport {\n toAddress,\n toBlock,\n toFeeEstimate,\n toTransaction,\n type MappingContext,\n} from './mapping';\n\nexport interface Balance {\n readonly address: Address;\n readonly asset: AssetInfo;\n readonly amount: Amount;\n}\n\nexport interface NetworkStatus {\n readonly chain: string;\n readonly network: string;\n readonly height: bigint;\n readonly finalizedHeight: bigint;\n readonly endpoints: readonly EndpointStatus[];\n readonly indexers: readonly EndpointStatus[];\n}\n\n/** Immutable handle bound to one chain, network, library, provider set and wallet. */\nexport class Blockchain<C extends ChainId = ChainId> {\n /** Handles come from `CryptoAio#blockchain` or `Blockchain.create`. */\n private constructor(internals: HandleInternals) {\n bindInternals(this, internals);\n Object.freeze(this);\n }\n\n /** Creates a handle on the default container (see `configure`). */\n static create<C extends ChainId>(config: HandleConfig<C>): Blockchain<C> {\n return defaultBlockchain(config as HandleOptions) as unknown as Blockchain<C>;\n }\n\n get chain(): C {\n return internalsOf(this).selection.chain.id as C;\n }\n\n get network(): NetworkOf<C> {\n return internalsOf(this).selection.network.id as NetworkOf<C>;\n }\n\n get library(): LibraryOf<C> {\n return internalsOf(this).selection.library as LibraryOf<C>;\n }\n\n /** Frozen, redacted snapshot of the resolved configuration. */\n get config(): Readonly<Record<string, unknown>> {\n return describeSelection(internalsOf(this).selection);\n }\n\n /** A fresh copy on every read; mutating the result never affects `supports()`. */\n get capabilities(): ReadonlySet<Capability> {\n return new Set(internalsOf(this).selection.capabilities);\n }\n\n supports(capability: Capability): boolean {\n return internalsOf(this).selection.capabilities.has(capability);\n }\n\n /** Returns a NEW handle; this handle and operations started from it are unaffected. */\n with(overrides: Partial<Omit<HandleConfig<C>, 'chain'>>): Blockchain<C> {\n const { selection, container } = internalsOf(this);\n return container.blockchain({\n ...selection.handle,\n ...overrides,\n chain: this.chain,\n } as HandleConfig<C>);\n }\n\n /**\n * Loads the adapter, connects its transport and validates it's actually usable; fails fast\n * on a missing dependency (`DEPENDENCY_MISSING`), an invalid wallet (surfaced by resolving\n * it), or a provider that can't serve reads: `PROVIDER_UNAVAILABLE` when no configured\n * endpoint is usable, `PROVIDER_MISCONFIGURED` (non-retryable) when every endpoint's\n * identity mismatches the configured network. An endpoint is usable when it's 'healthy',\n * 'lagging' or 'half-open' (the breaker is willing to try it), or 'unknown' while the\n * transport has no health probes configured at all — nothing could ever have marked it\n * healthy/lagging in that case, so 'unknown' is simply its steady state.\n */\n async ready(): Promise<this> {\n const internals = internalsOf(this);\n const pooled = await internals.pooled();\n await pooled.transport.refreshHealth();\n const statuses = pooled.transport.status();\n if (statuses.length > 0 && statuses.every((s) => s.state === 'disabled')) {\n throw new ProviderError(\n 'PROVIDER_MISCONFIGURED',\n `every endpoint for ${this.chain} serves a different network than configured`,\n { retryable: false },\n );\n }\n const usable = (state: EndpointState): boolean =>\n state === 'healthy' ||\n state === 'lagging' ||\n state === 'half-open' ||\n (state === 'unknown' && !pooled.transport.hasProbes());\n if (!statuses.some((s) => usable(s.state))) {\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n `no healthy endpoint for ${this.chain}`,\n );\n }\n if (internals.selection.wallet) await internals.wallet();\n return this;\n }\n\n async limits(): Promise<DriverLimits> {\n const { driver } = await internalsOf(this).pooled();\n const wallet = internalsOf(this).selection.wallet;\n const options: WalletOptions = wallet ? walletOptionsOf(wallet.config) : {};\n return (\n driver.limits?.(options) ?? {\n maxOutputs: this.supports('batch-transfer') ? Number.MAX_SAFE_INTEGER : 1,\n }\n );\n }\n\n async validateAddress(address: string): Promise<boolean> {\n return (await mappingOf(this)).driver.address.validate(address);\n }\n\n async normalizeAddress(address: string): Promise<Address> {\n return toAddress(await mappingOf(this), address);\n }\n\n /** The chain's address for `publicKey`. `options.hd` is reserved: the core builds it\n * from a wallet's `xpub`, so a caller's `hd` is dropped and never reaches the driver.\n * `null` options (from an untyped caller) are none. */\n async addressFromPublicKey(\n publicKey: Uint8Array | string,\n options: WalletOptions = {},\n ): Promise<Address> {\n const { hd: _reserved, ...callerOptions } = options ?? {};\n const bytes = typeof publicKey === 'string' ? fromHex(publicKey) : publicKey;\n return driverAddress(this, bytes, callerOptions);\n }\n\n /** Address of the handle's own selected wallet, or of another configured `wallet` by name\n * — resolved fresh against this handle's driver, without switching the handle.\n * Re-resolved through `resolveSelection` (not `resolveWallet` directly) so a\n * named wallet gets the same `wallet.chains` enablement check, unknown-signer validation and\n * signer-scheme compatibility check that the handle's own wallet got at construction. */\n async walletAddress(wallet?: string): Promise<Address> {\n const internals = internalsOf(this);\n const selection = internals.selection;\n if (wallet === undefined || wallet === selection.wallet?.name) {\n return (await internals.wallet()).address;\n }\n const container = containerOf(internals.container);\n const effective = container.effective();\n // An own-property check, so a wallet literally named 'constructor' (or any other\n // Object.prototype key) can never be mistaken for one that exists.\n if (!Object.hasOwn(effective.wallets, wallet)) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n unknownName('wallet', Object.keys(effective.wallets)),\n );\n }\n const { driver } = await internals.pooled();\n const resolved = resolveSelection({\n handle: { ...selection.handle, wallet, signer: undefined },\n effective,\n catalogs: container.runtime.catalogs,\n });\n const resolvedWallet = await resolveWallet(\n resolved,\n driver,\n effective.signers,\n container.runtime.catalogs.schemes,\n container.signerDeadline(),\n );\n return resolvedWallet.address;\n }\n\n /** Derives a deposit address from the wallet's xpub (capability `hd-public-derivation`). */\n async deriveAddress(wallet: string, index: number): Promise<Address> {\n if (!this.supports('hd-public-derivation')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} does not support public derivation`,\n );\n }\n if (!Number.isInteger(index) || index < 0 || index >= 2 ** 31) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'derivation index must be an integer in [0, 2^31)',\n );\n }\n const internals = internalsOf(this);\n const { wallets } = containerOf(internals.container).effective();\n // Own keys only, so `toString` is no wallet. The caller's text is never repeated: it\n // may be a pasted secret.\n if (!Object.hasOwn(wallets, wallet)) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n unknownName('wallet', Object.keys(wallets)),\n );\n }\n const config = wallets[wallet];\n if (!config?.xpub)\n throw new ConfigError('CONFIG_INVALID', `wallet '${wallet}' has no xpub`);\n // A non-string xpubPath is CONFIG_INVALID, as at wallet resolution.\n const path = (xpubPathOf(config) ?? '0/{index}').replace('{index}', String(index));\n // A UTXO chain's extended keys carry its network class; account-model\n // wallets (EVM, Tron) export `xpub` on every network, so theirs is not checked. A chain\n // whose wallets do the same says so (`xpubNetworkClass: false`, Avalanche X/P).\n const { chain, network } = internals.selection;\n const classed = chain.xpubNetworkClass ?? chain.model === 'utxo';\n const publicKey = deriveXpubChild(\n config.xpub,\n path,\n config.xpubVersions,\n classed ? { testnet: network.testnet } : undefined,\n );\n // The core's own options, with the wallet's `hd`, reach the driver directly.\n return driverAddress(this, publicKey, walletOptionsOf(config));\n }\n\n async resolveAsset(asset?: AssetRef | string): Promise<AssetInfo> {\n const m = await mappingOf(this);\n return m.assets.resolve(m.selection, m.driver, asset);\n }\n\n async getBalance(address: string, asset?: AssetRef | string): Promise<Balance> {\n const m = await mappingOf(this);\n const target = toAddress(m, address);\n const info = await m.assets.resolve(m.selection, m.driver, asset);\n const base = await m.driver.reader.getBalance(target.canonical, info.ref);\n return { address: target, asset: info, amount: Amount.fromBase(base, info) };\n }\n\n async getBalances(\n address: string,\n assets: readonly (AssetRef | string)[],\n ): Promise<Balance[]> {\n return Promise.all(assets.map((asset) => this.getBalance(address, asset)));\n }\n\n async estimateFee(intent: TransferIntent): Promise<FeeEstimate> {\n const m = await mappingOf(this);\n const internals = internalsOf(this);\n const wallet = internals.selection.wallet ? await internals.wallet() : undefined;\n const from = intent.from !== undefined ? toAddress(m, intent.from) : wallet?.address;\n if (!from)\n throw new ValidationError(\n 'INVALID_INTENT',\n 'estimateFee needs a wallet or intent.from',\n );\n const normalized = await normalizeIntent(m, intent, from);\n const draft = await m.driver.builder.estimateFee(toStoredIntent(normalized), {\n from: from.canonical,\n keys: wallet?.keys ?? [],\n wallet: wallet?.options ?? {},\n decimals: normalized.asset.metadata.decimals,\n });\n return toFeeEstimate(m, draft);\n }\n\n async getTransaction(id: string): Promise<Transaction | null> {\n const m = await mappingOf(this);\n const tx = await m.driver.reader.getTransaction(id);\n if (!tx) return null;\n const [head, finalized] = await Promise.all([\n m.driver.reader.getBlockHeight(),\n m.driver.reader.getFinalizedHeight(),\n ]);\n return toTransaction(m, tx, head, finalized);\n }\n\n /** Status of a managed Operation (by id, Attempt ref or tx hash) or of any transaction id. */\n async getTransactionStatus(id: string): Promise<TxStatus> {\n return (await monitorOf(this).status(await readTargetOf(this), id)).status;\n }\n\n /**\n * Resolves once `confirmations` (default: the handle's) are reached. With\n * `finality: 'final'`, a managed Operation (by id, Attempt ref or tx hash) resolves on\n * **proven** finality (finalized data confirmed by quorum proof reads); a transaction the\n * library does not manage resolves on **observed** finality (one endpoint's view of a\n * block at or below the finalized height). Rejects with the chain error when the\n * Operation fails, expires or is replaced (`TX_REVERTED` for an unmanaged transaction\n * that reverted), with `TIMEOUT` (retryable, state unchanged) when time runs out, and\n * with the reason of an aborted `signal`.\n */\n async waitForConfirmation(\n ref: string,\n options: WaitOptions = {},\n ): Promise<ConfirmationResult> {\n const { status, record } = await monitorOf(this).waitFor(\n await readTargetOf(this),\n ref,\n options,\n );\n return { status, ...(record ? { operation: await viewOf(this, record) } : {}) };\n }\n\n /** Yields each status change until the Operation is terminal (or the transaction is final). */\n watch(\n ref: string,\n options: { readonly pollIntervalMs?: number; readonly signal?: AbortSignal } = {},\n ): AsyncIterable<TxStatusEvent> {\n const readTarget = () => readTargetOf(this);\n const monitor = () => monitorOf(this);\n const view = (record: OperationRecord) => viewOf(this, record);\n return {\n async *[Symbol.asyncIterator]() {\n const target = await readTarget();\n for await (const snapshot of monitor().watch(target, ref, options)) {\n yield {\n status: snapshot.status,\n ...(snapshot.record ? { operation: await view(snapshot.record) } : {}),\n };\n }\n },\n };\n }\n\n async getBlockHeight(): Promise<bigint> {\n return (await mappingOf(this)).driver.reader.getBlockHeight();\n }\n\n async getBlock(ref: bigint | string): Promise<Block | null> {\n const block = await (await mappingOf(this)).driver.reader.getBlock(ref);\n return block ? toBlock(block) : null;\n }\n\n /**\n * Reorg-aware, at-least-once block scanner (capability `block-scan`): `ack()` each event\n * to commit the cursor before asking for the next. Invalid options throw `CONFIG_INVALID`.\n */\n scanner(options: ScannerOptions): Scanner {\n if (!this.supports('block-scan')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} does not support block scanning`,\n );\n }\n const internals = internalsOf(this);\n const container = containerOf(internals.container);\n const { runtime } = container;\n return new Scanner(\n {\n load: async () => {\n // One pooled entry, so the driver and its transport always belong together.\n const { driver, transport } = await internals.pooled();\n const blocks = driver.blocks;\n if (!blocks)\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} driver has no block source`,\n );\n const mapping = {\n selection: internals.selection,\n driver,\n assets: runtime.assets,\n };\n return { mapping, blocks, transport };\n },\n cursors: runtime.stores.cursors,\n events: runtime.events,\n clock: runtime.clock,\n namespace: runtime.namespace,\n defaults: {\n reorgWindow: internals.selection.network.reorgWindow,\n pollIntervalMs: withLifecycleDefaults(container.effective().lifecycle)\n .pollIntervalMs,\n },\n },\n options,\n );\n }\n\n /** Indexer-backed transaction history of an address (capability `address-history`). */\n async history(\n address: string,\n options: { readonly cursor?: string; readonly limit?: number } = {},\n ): Promise<{ readonly items: readonly Transaction[]; readonly next?: string }> {\n if (!this.supports('address-history')) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} has no address history (configure an indexer)`,\n );\n }\n const { cursor, limit = 50 } = options;\n if (!Number.isSafeInteger(limit) || limit < 1) {\n throw new ConfigError('CONFIG_INVALID', 'history limit must be a positive integer');\n }\n if (cursor !== undefined && typeof cursor !== 'string') {\n throw new ConfigError('CONFIG_INVALID', 'history cursor must be a string');\n }\n const m = await mappingOf(this);\n const source = m.driver.history;\n if (!source)\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} driver has no history source`,\n );\n const page = await source.list(toAddress(m, address).canonical, {\n ...(cursor !== undefined ? { cursor } : {}),\n limit,\n });\n const [head, finalized] = await Promise.all([\n m.driver.reader.getBlockHeight(),\n m.driver.reader.getFinalizedHeight(),\n ]);\n return {\n items: await Promise.all(\n page.items.map((tx) => toTransaction(m, tx, head, finalized)),\n ),\n ...(page.next !== undefined ? { next: page.next } : {}),\n };\n }\n\n async getNetworkStatus(): Promise<NetworkStatus> {\n const pooled = await internalsOf(this).pooled();\n await pooled.transport.refreshHealth();\n if (pooled.indexer) await pooled.indexer.refreshHealth();\n const [height, finalized] = await Promise.all([\n pooled.driver.reader.getBlockHeight(),\n pooled.driver.reader.getFinalizedHeight(),\n ]);\n return {\n chain: this.chain,\n network: this.network,\n height,\n // Two reads, possibly from different endpoints, with blocks landing between\n // them: where the latest block is final, the finalized height can pass the head read.\n // Every height below a final one is final, so the clamp keeps the status true.\n finalizedHeight: finalized > height ? height : finalized,\n endpoints: pooled.transport.status(),\n indexers: pooled.indexer?.status() ?? [],\n };\n }\n\n /** Builds and persists the unsigned transaction (reserving nonce/inputs) for offline or async signing. */\n async prepareTransfer(\n intent: TransferIntent,\n options: TransferOptions = {},\n ): Promise<PreparedOperation> {\n const target = await targetOf(this);\n return preparedOf(\n this,\n target,\n await engineOf(this).prepare(target, intent, options),\n );\n }\n\n /**\n * Idempotent transfer. Throws the mapped chain error when the Operation stalls or fails;\n * throws an `ambiguous` error (with `context.operationId`) when the broadcast outcome is\n * unknown. Retry with the same `idempotencyKey` in both cases.\n */\n async transfer(\n intent: TransferIntent,\n options: TransferOptions = {},\n ): Promise<Submission> {\n const target = await targetOf(this);\n return submissionOf(this, await engineOf(this).transfer(target, intent, options));\n }\n\n /**\n * Completes an Operation that awaits signatures, with signature bundles or with the whole\n * payload signed elsewhere, e.g. a signed PSBT: the driver extracts its signatures\n * (`TxBuilder.signaturesFrom`), and each is verified against the stored request exactly\n * like a bundle. `UNSUPPORTED_CAPABILITY` when the chain's driver cannot read one.\n */\n async submitSignatures(\n operationId: string,\n signatures: readonly SignatureBundle[] | RawTx,\n ): Promise<Submission> {\n const target = await targetOf(this);\n let bundles: readonly SignatureBundle[];\n if (Array.isArray(signatures)) {\n bundles = signatures;\n } else {\n if (!isRawTx(signatures)) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'signatures must be signature bundles or a signed payload { encoding, data }',\n );\n }\n const { builder } = target.pooled.driver;\n if (!builder.signaturesFrom) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `${this.chain} cannot read a signed payload; submit signature bundles`,\n );\n }\n // Ownership first, so another wallet's Operation never reaches the driver.\n const record = await engineOf(this).requireOwned(target, operationId);\n if (!record.unsigned) {\n throw new StateError(\n 'INVALID_TRANSITION',\n `operation '${operationId}' has no transaction awaiting signatures`,\n { context: { operationId } },\n );\n }\n try {\n bundles = builder.signaturesFrom(record.unsigned, signatures);\n } catch (error) {\n // A driver's own classified error passes through; a foreign one (an SDK's\n // parse error, which may quote the payload) becomes a fixed text with no cause.\n if (isCryptoAioError(error)) throw error;\n throw new ValidationError(\n 'INVALID_INTENT',\n 'the signed payload could not be read',\n );\n }\n }\n return submissionOf(\n this,\n await engineOf(this).submitSignatures(target, operationId, bundles),\n );\n }\n\n /** Resends the active Attempt's stored raw transaction (e.g. after topping up a stalled wallet). */\n async rebroadcast(operationId: string): Promise<Submission> {\n return submissionOf(\n this,\n await engineOf(this).rebroadcast(await targetOf(this), operationId),\n );\n }\n\n /**\n * Replaces a pending transfer with a higher-fee, mutually exclusive Attempt (capability\n * `replace-fee`; a synchronous signer). If the node refuses it, the original stays live\n * and active, and the node's error is thrown.\n *\n * Idempotent per fee spec: repeating the call with the same `fee` (the same speed name,\n * or an equal override) returns the replacement it already made, resending it if its\n * broadcast was never recorded or it was refused; nothing is signed again, and a refusal\n * is thrown, never reported as a success. To bump again, pass another spec, such as a\n * higher explicit override.\n *\n * While that replacement is stored but not yet sent, another fee spec (or a cancel) is\n * refused with `INVALID_TRANSITION`: repeat the same spec, or call `rebroadcast`, first.\n */\n async replace(\n operationId: string,\n options: { readonly fee: FeeSpeed | FeeOverride },\n ): Promise<Submission> {\n return submissionOf(\n this,\n await engineOf(this).replace(await targetOf(this), operationId, options.fee),\n );\n }\n\n /**\n * Tries to cancel with a conflicting Attempt (capability `cancel`); the outcome is\n * `cancelled` only if the cancel wins at finality, and the original may still win. The\n * cancel pays the network's minimum bump over the highest earlier cancel, or `options.fee`\n * (refused below that bump).\n *\n * Repeating the call while a cancel is pending resends it if its broadcast was never\n * recorded, and returns it while a node holds it or once it is on chain, so concurrent and\n * retried calls create one cancel. Only a cancel the node refused or dropped is bumped by\n * a repeat, one step at a time; when the node's minimum fee is more than one bump away,\n * pass `options.fee`, which always builds a new cancel while none is on chain.\n *\n * While a replacement is stored but not yet sent, a cancel is refused with\n * `INVALID_TRANSITION`: repeat that replacement's fee, or call `rebroadcast`, first.\n */\n async cancel(\n operationId: string,\n options: { readonly fee?: FeeSpeed | FeeOverride } = {},\n ): Promise<Submission> {\n return submissionOf(\n this,\n await engineOf(this).cancel(await targetOf(this), operationId, options.fee),\n );\n }\n\n /** Expiry-based chains: re-issues an Operation whose earlier Attempts are provably expired. */\n async rebuild(operationId: string): Promise<Submission> {\n return submissionOf(\n this,\n await engineOf(this).rebuild(await targetOf(this), operationId),\n );\n }\n\n /**\n * Broadcasts an externally signed transaction WITHOUT creating an Operation: no idempotency,\n * persistence or monitoring. Prefer prepareTransfer + submitSignatures for managed flows.\n */\n async broadcast(raw: RawTx): Promise<BroadcastResult> {\n const { driver } = await internalsOf(this).pooled();\n return driver.broadcaster.broadcast({\n raw,\n ref: { id: '', idKind: 'tx-hash', canonical: false },\n });\n }\n\n /** Abandons an Operation that has no signed transaction yet and releases its reservation. */\n async abandon(operationId: string): Promise<OperationView> {\n return viewOf(this, await engineOf(this).abandon(await targetOf(this), operationId));\n }\n\n /** An Operation of this handle's chain and network (another one is INVALID_INTENT). */\n async getOperation(operationId: string): Promise<OperationView | null> {\n const record = await engineOf(this).get(operationId);\n if (!record) return null;\n assertSameNetwork(internalsOf(this).selection, record);\n return viewOf(this, record);\n }\n\n /** Typed family extensions: `bc.ext.<family>.<method>(...)` (async, loads the adapter on demand). */\n get ext(): ExtOf<C> {\n const internals = internalsOf(this);\n const where = `${internals.selection.chain.id}/${internals.selection.library}`;\n return new Proxy(\n {},\n {\n get: (_target, family) => {\n if (typeof family !== 'string' || family === 'then') return undefined;\n return new Proxy(\n {},\n {\n get: (_inner, method) => {\n if (typeof method !== 'string' || method === 'then') return undefined;\n return async (...args: unknown[]) => {\n const { driver } = await internals.pooled();\n // Own-property checks at both levels, so a name inherited from\n // Object.prototype (`constructor`, `toString`, ...) can never be mistaken\n // for a real family method.\n const familyExt =\n driver.ext && Object.hasOwn(driver.ext, family)\n ? driver.ext[family]\n : undefined;\n const fn =\n familyExt && Object.hasOwn(familyExt, method)\n ? (familyExt[method] as (...a: unknown[]) => Promise<unknown>)\n : undefined;\n if (typeof fn !== 'function') {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n `ext.${family}.${method} is not available on ${where}`,\n );\n }\n return fn(...args);\n };\n },\n },\n );\n },\n },\n ) as ExtOf<C>;\n }\n}\n\n/** A handle on `internals`; the container's way past the private constructor. */\nexport function createBlockchain<C extends ChainId>(\n internals: HandleInternals,\n): Blockchain<C> {\n const Handle = Blockchain as unknown as new (\n internals: HandleInternals,\n ) => Blockchain<C>;\n return new Handle(internals);\n}\n\n/** The driver's address for `publicKey` under options the core built. */\nasync function driverAddress(\n handle: Blockchain,\n publicKey: Uint8Array,\n options: WalletOptions,\n): Promise<Address> {\n const { driver, selection } = await mappingOf(handle);\n return new Address(\n selection.chain.id,\n driver.address.fromPublicKey(publicKey, options),\n driver.address.format,\n );\n}\n\nasync function mappingOf(handle: Blockchain): Promise<MappingContext> {\n const internals = internalsOf(handle);\n const { driver } = await internals.pooled();\n return {\n selection: internals.selection,\n driver,\n assets: containerOf(internals.container).runtime.assets,\n };\n}\n\nfunction engineOf(handle: Blockchain): OperationEngine {\n const internals = internalsOf(handle);\n internals.assertOpen();\n return containerOf(internals.container).engine();\n}\n\nfunction monitorOf(handle: Blockchain): Monitor {\n return containerOf(internalsOf(handle).container).monitor();\n}\n\nasync function readTargetOf(handle: Blockchain): Promise<ReadTarget> {\n const internals = internalsOf(handle);\n return { selection: internals.selection, pooled: await internals.pooled() };\n}\n\nasync function targetOf(handle: Blockchain): Promise<OperationTarget> {\n const internals = internalsOf(handle);\n const [pooled, wallet] = await Promise.all([internals.pooled(), internals.wallet()]);\n return {\n selection: internals.selection,\n pooled,\n wallet,\n assets: containerOf(internals.container).runtime.assets,\n };\n}\n\nasync function viewOf(\n handle: Blockchain,\n record: OperationRecord,\n): Promise<OperationView> {\n const { runtime } = containerOf(internalsOf(handle).container);\n return toView(record, await loadObservations(runtime.stores.operations, record));\n}\n\nasync function submissionOf(\n handle: Blockchain,\n record: OperationRecord,\n): Promise<Submission> {\n const view = await viewOf(handle, record);\n return {\n ...view,\n operationId: view.id,\n ...(view.activeAttempt ? { attempt: view.activeAttempt } : {}),\n wait: (options?: WaitOptions) => handle.waitForConfirmation(view.id, options),\n };\n}\n\n/**\n * Signing material only while the Operation awaits signatures: an idempotent repeat of an\n * abandoned Operation returns its view alone.\n */\nasync function preparedOf(\n handle: Blockchain,\n target: OperationTarget,\n record: OperationRecord,\n): Promise<PreparedOperation> {\n const operation = await viewOf(handle, record);\n const unsigned = record.unsigned;\n if (!unsigned || !PRE_SIGNING_STATES.has(record.state)) return { operation };\n const fee = await toFeeEstimate(\n {\n selection: target.selection,\n driver: target.pooled.driver,\n assets: target.assets,\n },\n unsigned.fee,\n );\n return {\n operation,\n unsigned: {\n payload: unsigned.payload,\n signingRequests: unsigned.signingRequests,\n ...(unsigned.expectedRef ? { expectedRef: unsigned.expectedRef } : {}),\n fee,\n },\n };\n}\n\n/** The shape of a signed payload (`RawTx`), checked at run time. */\nfunction isRawTx(value: unknown): value is RawTx {\n if (value === null || typeof value !== 'object') return false;\n const { encoding, data } = value as { encoding?: unknown; data?: unknown };\n return (\n (encoding === 'hex' || encoding === 'base64' || encoding === 'json') &&\n typeof data === 'string'\n );\n}\n"]}