@ckb-ccc/core 0.0.15 → 0.0.16-alpha.1

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 (52) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/ckb/transaction.d.ts +4 -4
  3. package/dist/ckb/transaction.d.ts.map +1 -1
  4. package/dist/ckb/transaction.js +2 -1
  5. package/dist/client/client.d.ts +14 -2
  6. package/dist/client/client.d.ts.map +1 -1
  7. package/dist/client/client.js +47 -5
  8. package/dist/client/clientPublicMainnet.advanced.d.ts.map +1 -1
  9. package/dist/client/clientPublicMainnet.advanced.js +98 -8
  10. package/dist/client/clientPublicTestnet.advanced.d.ts.map +1 -1
  11. package/dist/client/clientPublicTestnet.advanced.js +98 -8
  12. package/dist/client/clientTypes.d.ts +3 -0
  13. package/dist/client/clientTypes.d.ts.map +1 -1
  14. package/dist/client/clientTypes.js +5 -0
  15. package/dist/client/jsonRpc/index.d.ts +9 -0
  16. package/dist/client/jsonRpc/index.d.ts.map +1 -1
  17. package/dist/client/jsonRpc/index.js +11 -5
  18. package/dist/client/transports/webSocket.d.ts.map +1 -1
  19. package/dist/client/transports/webSocket.js +14 -11
  20. package/dist/utils/index.d.ts +2 -0
  21. package/dist/utils/index.d.ts.map +1 -1
  22. package/dist/utils/index.js +4 -0
  23. package/dist.commonjs/ckb/transaction.d.ts +4 -4
  24. package/dist.commonjs/ckb/transaction.d.ts.map +1 -1
  25. package/dist.commonjs/ckb/transaction.js +2 -1
  26. package/dist.commonjs/client/client.d.ts +14 -2
  27. package/dist.commonjs/client/client.d.ts.map +1 -1
  28. package/dist.commonjs/client/client.js +44 -2
  29. package/dist.commonjs/client/clientPublicMainnet.advanced.d.ts.map +1 -1
  30. package/dist.commonjs/client/clientPublicMainnet.advanced.js +98 -8
  31. package/dist.commonjs/client/clientPublicTestnet.advanced.d.ts.map +1 -1
  32. package/dist.commonjs/client/clientPublicTestnet.advanced.js +98 -8
  33. package/dist.commonjs/client/clientTypes.d.ts +3 -0
  34. package/dist.commonjs/client/clientTypes.d.ts.map +1 -1
  35. package/dist.commonjs/client/clientTypes.js +7 -1
  36. package/dist.commonjs/client/jsonRpc/index.d.ts +9 -0
  37. package/dist.commonjs/client/jsonRpc/index.d.ts.map +1 -1
  38. package/dist.commonjs/client/jsonRpc/index.js +11 -5
  39. package/dist.commonjs/client/transports/webSocket.d.ts.map +1 -1
  40. package/dist.commonjs/client/transports/webSocket.js +14 -11
  41. package/dist.commonjs/utils/index.d.ts +2 -0
  42. package/dist.commonjs/utils/index.d.ts.map +1 -1
  43. package/dist.commonjs/utils/index.js +6 -1
  44. package/package.json +1 -1
  45. package/src/ckb/transaction.ts +6 -4
  46. package/src/client/client.ts +64 -4
  47. package/src/client/clientPublicMainnet.advanced.ts +110 -8
  48. package/src/client/clientPublicTestnet.advanced.ts +110 -8
  49. package/src/client/clientTypes.ts +6 -0
  50. package/src/client/jsonRpc/index.ts +22 -15
  51. package/src/client/transports/webSocket.ts +44 -39
  52. package/src/utils/index.ts +6 -0
@@ -6,6 +6,23 @@ export const MAINNET_SCRIPTS: Record<
6
6
  | (Pick<Script, "codeHash" | "hashType"> & { cellDeps: CellDepInfoLike[] })
7
7
  | undefined
8
8
  > = Object.freeze({
9
+ [KnownScript.NervosDao]: {
10
+ codeHash:
11
+ "0x82d76d1b75fe2fd9a27dfbaa65a039221a380d76c926f378d3f81cf3e7e13f2e",
12
+ hashType: "type",
13
+ cellDeps: [
14
+ {
15
+ cellDep: {
16
+ outPoint: {
17
+ txHash:
18
+ "0xe2fb199810d49a4d8beec56718ba2593b665db9d52299a0f9e6e75416d73ff5c",
19
+ index: 2,
20
+ },
21
+ depType: "code",
22
+ },
23
+ },
24
+ ],
25
+ },
9
26
  [KnownScript.Secp256k1Blake160]: {
10
27
  codeHash:
11
28
  "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
@@ -220,9 +237,9 @@ export const MAINNET_SCRIPTS: Record<
220
237
  },
221
238
  ],
222
239
  },
223
- [KnownScript.SingleUseLock]: {
240
+ [KnownScript.AlwaysSuccess]: {
224
241
  codeHash:
225
- "0x8290467a512e5b9a6b816469b0edabba1f4ac474e28ffdd604c2a7c76446bbaf",
242
+ "0x3b521cc4b552f109d092d8cc468a8048acb53c5952dbe769d2b2f9cf6e47f7f1",
226
243
  hashType: "data1",
227
244
  cellDeps: [
228
245
  {
@@ -230,7 +247,24 @@ export const MAINNET_SCRIPTS: Record<
230
247
  outPoint: {
231
248
  txHash:
232
249
  "0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b",
233
- index: 4,
250
+ index: 0,
251
+ },
252
+ depType: "code",
253
+ },
254
+ },
255
+ ],
256
+ },
257
+ [KnownScript.InputTypeProxyLock]: {
258
+ codeHash:
259
+ "0x5123908965c711b0ffd8aec642f1ede329649bda1ebdca6bd24124d3796f768a",
260
+ hashType: "data1",
261
+ cellDeps: [
262
+ {
263
+ cellDep: {
264
+ outPoint: {
265
+ txHash:
266
+ "0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b",
267
+ index: 1,
234
268
  },
235
269
  depType: "code",
236
270
  },
@@ -254,17 +288,85 @@ export const MAINNET_SCRIPTS: Record<
254
288
  },
255
289
  ],
256
290
  },
257
- [KnownScript.NervosDao]: {
291
+ [KnownScript.LockProxyLock]: {
258
292
  codeHash:
259
- "0x82d76d1b75fe2fd9a27dfbaa65a039221a380d76c926f378d3f81cf3e7e13f2e",
260
- hashType: "type",
293
+ "0x5d41e32e224c15f152b7e6529100ebeac83b162f5f692a5365774dad2c1a1d02",
294
+ hashType: "data1",
261
295
  cellDeps: [
262
296
  {
263
297
  cellDep: {
264
298
  outPoint: {
265
299
  txHash:
266
- "0xe2fb199810d49a4d8beec56718ba2593b665db9d52299a0f9e6e75416d73ff5c",
267
- index: 2,
300
+ "0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b",
301
+ index: 3,
302
+ },
303
+ depType: "code",
304
+ },
305
+ },
306
+ ],
307
+ },
308
+ [KnownScript.SingleUseLock]: {
309
+ codeHash:
310
+ "0x8290467a512e5b9a6b816469b0edabba1f4ac474e28ffdd604c2a7c76446bbaf",
311
+ hashType: "data1",
312
+ cellDeps: [
313
+ {
314
+ cellDep: {
315
+ outPoint: {
316
+ txHash:
317
+ "0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b",
318
+ index: 4,
319
+ },
320
+ depType: "code",
321
+ },
322
+ },
323
+ ],
324
+ },
325
+ [KnownScript.TypeBurnLock]: {
326
+ codeHash:
327
+ "0xff78bae0abf17d7a404c0be0f9ad9c9185b3f88dcc60403453d5ba8e1f22f53a",
328
+ hashType: "data1",
329
+ cellDeps: [
330
+ {
331
+ cellDep: {
332
+ outPoint: {
333
+ txHash:
334
+ "0x10d63a996157d32c01078058000052674ca58d15f921bec7f1dcdac2160eb66b",
335
+ index: 5,
336
+ },
337
+ depType: "code",
338
+ },
339
+ },
340
+ ],
341
+ },
342
+ [KnownScript.EasyToDiscoverType]: {
343
+ codeHash:
344
+ "0xaba4430cc7110d699007095430a1faa72973edf2322ddbfd4d1d219cacf237af",
345
+ hashType: "data1",
346
+ cellDeps: [
347
+ {
348
+ cellDep: {
349
+ outPoint: {
350
+ txHash:
351
+ "0xb0ed754fb27d67fd8388c97fed914fb7998eceaa01f3e6f967e498de1ba0ac9b",
352
+ index: 0,
353
+ },
354
+ depType: "code",
355
+ },
356
+ },
357
+ ],
358
+ },
359
+ [KnownScript.TimeLock]: {
360
+ codeHash:
361
+ "0x6fac4b2e89360a1e692efcddcb3a28656d8446549fb83da6d896db8b714f4451",
362
+ hashType: "data1",
363
+ cellDeps: [
364
+ {
365
+ cellDep: {
366
+ outPoint: {
367
+ txHash:
368
+ "0xb0ed754fb27d67fd8388c97fed914fb7998eceaa01f3e6f967e498de1ba0ac9b",
369
+ index: 1,
268
370
  },
269
371
  depType: "code",
270
372
  },
@@ -5,6 +5,23 @@ export const TESTNET_SCRIPTS: Record<
5
5
  KnownScript,
6
6
  Pick<Script, "codeHash" | "hashType"> & { cellDeps: CellDepInfoLike[] }
7
7
  > = Object.freeze({
8
+ [KnownScript.NervosDao]: {
9
+ codeHash:
10
+ "0x82d76d1b75fe2fd9a27dfbaa65a039221a380d76c926f378d3f81cf3e7e13f2e",
11
+ hashType: "type",
12
+ cellDeps: [
13
+ {
14
+ cellDep: {
15
+ outPoint: {
16
+ txHash:
17
+ "0x8f8c79eb6671709633fe6a46de93c0fedc9c1b8a6527a18d3983879542635c9f",
18
+ index: 2,
19
+ },
20
+ depType: "code",
21
+ },
22
+ },
23
+ ],
24
+ },
8
25
  [KnownScript.Secp256k1Blake160]: {
9
26
  codeHash:
10
27
  "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
@@ -231,9 +248,9 @@ export const TESTNET_SCRIPTS: Record<
231
248
  },
232
249
  ],
233
250
  },
234
- [KnownScript.SingleUseLock]: {
251
+ [KnownScript.AlwaysSuccess]: {
235
252
  codeHash:
236
- "0x8290467a512e5b9a6b816469b0edabba1f4ac474e28ffdd604c2a7c76446bbaf",
253
+ "0x3b521cc4b552f109d092d8cc468a8048acb53c5952dbe769d2b2f9cf6e47f7f1",
237
254
  hashType: "data1",
238
255
  cellDeps: [
239
256
  {
@@ -241,7 +258,24 @@ export const TESTNET_SCRIPTS: Record<
241
258
  outPoint: {
242
259
  txHash:
243
260
  "0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93",
244
- index: 4,
261
+ index: 0,
262
+ },
263
+ depType: "code",
264
+ },
265
+ },
266
+ ],
267
+ },
268
+ [KnownScript.InputTypeProxyLock]: {
269
+ codeHash:
270
+ "0x5123908965c711b0ffd8aec642f1ede329649bda1ebdca6bd24124d3796f768a",
271
+ hashType: "data1",
272
+ cellDeps: [
273
+ {
274
+ cellDep: {
275
+ outPoint: {
276
+ txHash:
277
+ "0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93",
278
+ index: 1,
245
279
  },
246
280
  depType: "code",
247
281
  },
@@ -265,17 +299,85 @@ export const TESTNET_SCRIPTS: Record<
265
299
  },
266
300
  ],
267
301
  },
268
- [KnownScript.NervosDao]: {
302
+ [KnownScript.LockProxyLock]: {
269
303
  codeHash:
270
- "0x82d76d1b75fe2fd9a27dfbaa65a039221a380d76c926f378d3f81cf3e7e13f2e",
271
- hashType: "type",
304
+ "0x5d41e32e224c15f152b7e6529100ebeac83b162f5f692a5365774dad2c1a1d02",
305
+ hashType: "data1",
272
306
  cellDeps: [
273
307
  {
274
308
  cellDep: {
275
309
  outPoint: {
276
310
  txHash:
277
- "0x8f8c79eb6671709633fe6a46de93c0fedc9c1b8a6527a18d3983879542635c9f",
278
- index: 2,
311
+ "0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93",
312
+ index: 3,
313
+ },
314
+ depType: "code",
315
+ },
316
+ },
317
+ ],
318
+ },
319
+ [KnownScript.SingleUseLock]: {
320
+ codeHash:
321
+ "0x8290467a512e5b9a6b816469b0edabba1f4ac474e28ffdd604c2a7c76446bbaf",
322
+ hashType: "data1",
323
+ cellDeps: [
324
+ {
325
+ cellDep: {
326
+ outPoint: {
327
+ txHash:
328
+ "0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93",
329
+ index: 4,
330
+ },
331
+ depType: "code",
332
+ },
333
+ },
334
+ ],
335
+ },
336
+ [KnownScript.TypeBurnLock]: {
337
+ codeHash:
338
+ "0xff78bae0abf17d7a404c0be0f9ad9c9185b3f88dcc60403453d5ba8e1f22f53a",
339
+ hashType: "data1",
340
+ cellDeps: [
341
+ {
342
+ cellDep: {
343
+ outPoint: {
344
+ txHash:
345
+ "0xb4f171c9c9caf7401f54a8e56225ae21d95032150a87a4678eac3f66a3137b93",
346
+ index: 5,
347
+ },
348
+ depType: "code",
349
+ },
350
+ },
351
+ ],
352
+ },
353
+ [KnownScript.EasyToDiscoverType]: {
354
+ codeHash:
355
+ "0xaba4430cc7110d699007095430a1faa72973edf2322ddbfd4d1d219cacf237af",
356
+ hashType: "data1",
357
+ cellDeps: [
358
+ {
359
+ cellDep: {
360
+ outPoint: {
361
+ txHash:
362
+ "0x1b4ffcad55ecd36ffb2715b6816b83da73851f1a24fe594f263c4f34dad90792",
363
+ index: 0,
364
+ },
365
+ depType: "code",
366
+ },
367
+ },
368
+ ],
369
+ },
370
+ [KnownScript.TimeLock]: {
371
+ codeHash:
372
+ "0x6fac4b2e89360a1e692efcddcb3a28656d8446549fb83da6d896db8b714f4451",
373
+ hashType: "data1",
374
+ cellDeps: [
375
+ {
376
+ cellDep: {
377
+ outPoint: {
378
+ txHash:
379
+ "0x1b4ffcad55ecd36ffb2715b6816b83da73851f1a24fe594f263c4f34dad90792",
380
+ index: 1,
279
381
  },
280
382
  depType: "code",
281
383
  },
@@ -304,3 +304,9 @@ export class ErrorClientRBFRejected extends ErrorClientBase {
304
304
  this.leastFee = numFrom(leastFee);
305
305
  }
306
306
  }
307
+
308
+ export class ErrorClientWaitTransactionTimeout extends Error {
309
+ constructor() {
310
+ super("Wait transaction timeout");
311
+ }
312
+ }
@@ -37,15 +37,12 @@ import { JsonRpcCellOutput, JsonRpcTransformers } from "./advanced.js";
37
37
  *
38
38
  * @example
39
39
  * ```typescript
40
- * const result = await transform(5, (x) => x * 2); // Outputs 10
41
- * const resultWithoutTransformer = await transform(5); // Outputs 5
40
+ * const result = transform(5, (x) => x * 2); // Outputs 10
41
+ * const resultWithoutTransformer = transform(5); // Outputs 5
42
42
  * ```
43
43
  */
44
44
 
45
- async function transform(
46
- value: unknown,
47
- transformer?: (i: unknown) => unknown,
48
- ) {
45
+ function transform(value: unknown, transformer?: (i: unknown) => unknown) {
49
46
  if (transformer) {
50
47
  return transformer(value);
51
48
  }
@@ -122,6 +119,18 @@ export abstract class ClientJsonRpc extends Client {
122
119
  return this.url_;
123
120
  }
124
121
 
122
+ /**
123
+ * Get fee rate statistics
124
+ *
125
+ * @returns Fee rate statistics
126
+ */
127
+
128
+ getFeeRateStatistics = this.buildSender(
129
+ "get_fee_rate_statistics",
130
+ [(n) => apply(numFrom, n)],
131
+ ({ mean, median }) => ({ mean: numFrom(mean), median: numFrom(median) }),
132
+ ) as Client["getFeeRateStatistics"];
133
+
125
134
  /**
126
135
  * Get tip block number
127
136
  *
@@ -367,15 +376,13 @@ export abstract class ClientJsonRpc extends Client {
367
376
  return async (...req: unknown[]) => {
368
377
  const payload = this.buildPayload(
369
378
  rpcMethod,
370
- await Promise.all(
371
- req
372
- .concat(
373
- Array.from(
374
- new Array(Math.max(inTransformers.length - req.length, 0)),
375
- ),
376
- )
377
- .map((v, i) => transform(v, inTransformers[i])),
378
- ),
379
+ req
380
+ .concat(
381
+ Array.from(
382
+ new Array(Math.max(inTransformers.length - req.length, 0)),
383
+ ),
384
+ )
385
+ .map((v, i) => transform(v, inTransformers[i])),
379
386
  );
380
387
 
381
388
  try {
@@ -17,55 +17,60 @@ export class TransportWebSocket implements Transport {
17
17
  private readonly timeout = 30000,
18
18
  ) {}
19
19
 
20
- async request(data: JsonRpcPayload) {
21
- const socket = (() => {
22
- if (this.socket) {
23
- return this.socket;
24
- }
25
-
26
- const socket = new WebSocket(this.url);
27
- const onMessage = ({ data }: { data: string }) => {
28
- const res = JSON.parse(data);
29
- if (typeof res !== "object" || res === null) {
30
- throw new Error(`Unknown response ${data}`);
20
+ request(data: JsonRpcPayload) {
21
+ const socket = (this.socket ?? Promise.resolve(undefined)).then(
22
+ (existed) => {
23
+ if (existed && existed.readyState === existed.OPEN) {
24
+ return existed;
31
25
  }
32
26
 
33
- const req = this.ongoing.get(res.id);
34
- if (!req) {
35
- return;
36
- }
37
- clearTimeout(req[2]);
38
- this.ongoing.delete(res.id);
27
+ const socket = new WebSocket(this.url);
28
+ const onMessage = ({ data }: { data: string }) => {
29
+ const res = JSON.parse(data);
30
+ if (typeof res !== "object" || res === null) {
31
+ throw new Error(`Unknown response ${data}`);
32
+ }
39
33
 
40
- req[0](res);
41
- };
42
- const onClose = (error?: unknown) => {
43
- this.socket = undefined;
44
- this.ongoing.forEach(([_, onError]) =>
45
- onError(error ?? new Error("Connection closed")),
46
- );
47
- this.ongoing.clear();
48
- };
34
+ const req = this.ongoing.get(res.id);
35
+ if (!req) {
36
+ return;
37
+ }
38
+ clearTimeout(req[2]);
39
+ this.ongoing.delete(res.id);
49
40
 
50
- socket.onclose = onClose;
51
- socket.onerror = onClose;
52
- socket.onmessage = onMessage;
41
+ req[0](res);
42
+ };
43
+ const onClose = () => {
44
+ this.socket = undefined;
45
+ this.ongoing.forEach(([_, onError]) =>
46
+ onError(new Error("Connection closed")),
47
+ );
48
+ this.ongoing.clear();
49
+ };
53
50
 
54
- this.socket = new Promise((resolve) => {
55
- if (socket.readyState === socket.CONNECTING) {
56
- socket.onopen = resolve;
57
- } else {
58
- resolve(undefined);
59
- }
60
- }).then(() => socket);
61
- return this.socket;
62
- })();
51
+ socket.onclose = onClose;
52
+ socket.onerror = onClose;
53
+ socket.onmessage = onMessage;
54
+
55
+ this.socket = new Promise((resolve) => {
56
+ if (socket.readyState === socket.OPEN) {
57
+ resolve(undefined);
58
+ } else {
59
+ socket.onopen = resolve;
60
+ }
61
+ }).then(() => socket);
62
+ return this.socket;
63
+ },
64
+ );
63
65
 
64
66
  return new Promise((resolve, reject) => {
65
67
  this.ongoing.set(data.id, [
66
68
  resolve,
67
69
  reject,
68
- setTimeout(() => reject(new Error("Request timeout")), this.timeout),
70
+ setTimeout(() => {
71
+ socket.then((socket) => socket.close());
72
+ reject(new Error("Request timeout"));
73
+ }, this.timeout),
69
74
  ]);
70
75
  socket.then((socket) => {
71
76
  if (
@@ -1,3 +1,5 @@
1
+ import { NumLike, numFrom } from "../num/index.js";
2
+
1
3
  /**
2
4
  * A type safe way to apply a transformer on a value if it's not empty.
3
5
  * @public
@@ -166,6 +168,10 @@ export async function reduceAsync<T, V>(
166
168
  );
167
169
  }
168
170
 
171
+ export function sleep(ms: NumLike) {
172
+ return new Promise((resolve) => setTimeout(resolve, Number(numFrom(ms))));
173
+ }
174
+
169
175
  /**
170
176
  * @public
171
177
  */