@acala-network/chopsticks-core 0.8.2 → 0.8.4

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 (43) hide show
  1. package/lib/blockchain/block-builder.d.ts +5 -1
  2. package/lib/blockchain/block-builder.js +21 -20
  3. package/lib/blockchain/block.d.ts +1 -1
  4. package/lib/blockchain/block.js +4 -4
  5. package/lib/blockchain/index.d.ts +2 -2
  6. package/lib/blockchain/index.js +4 -2
  7. package/lib/blockchain/inherent/parachain/validation-data.js +5 -5
  8. package/lib/blockchain/storage-layer.js +25 -2
  9. package/lib/blockchain/txpool.js +18 -2
  10. package/lib/chopsticks-provider.d.ts +0 -0
  11. package/lib/chopsticks-provider.js +249 -0
  12. package/lib/chopsticks-worker.d.ts +1 -0
  13. package/lib/chopsticks-worker.js +101 -0
  14. package/lib/genesis-provider.d.ts +1 -1
  15. package/lib/genesis-provider.js +3 -3
  16. package/lib/index.d.ts +2 -1
  17. package/lib/index.js +3 -1
  18. package/lib/rpc/index.d.ts +5 -0
  19. package/lib/rpc/index.js +26 -0
  20. package/lib/rpc/shared.d.ts +27 -0
  21. package/lib/rpc/shared.js +19 -0
  22. package/lib/rpc/substrate/author.d.ts +28 -0
  23. package/lib/rpc/substrate/author.js +98 -0
  24. package/lib/rpc/substrate/chain.d.ts +45 -0
  25. package/lib/rpc/substrate/chain.js +103 -0
  26. package/lib/rpc/substrate/index.d.ts +66 -0
  27. package/lib/rpc/substrate/index.js +38 -0
  28. package/lib/rpc/substrate/payment.d.ts +16 -0
  29. package/lib/rpc/substrate/payment.js +54 -0
  30. package/lib/rpc/substrate/state.d.ts +97 -0
  31. package/lib/rpc/substrate/state.js +184 -0
  32. package/lib/rpc/substrate/system.d.ts +28 -0
  33. package/lib/rpc/substrate/system.js +71 -0
  34. package/lib/utils/time-travel.js +2 -2
  35. package/lib/wasm-executor/browser-wasm-executor.mjs +37 -0
  36. package/lib/wasm-executor/browser-worker.d.ts +5 -0
  37. package/lib/wasm-executor/browser-worker.js +28 -0
  38. package/lib/{executor.d.ts → wasm-executor/index.d.ts} +18 -1
  39. package/lib/{executor.js → wasm-executor/index.js} +60 -15
  40. package/lib/wasm-executor/node-wasm-executor.mjs +34 -0
  41. package/lib/wasm-executor/node-worker.d.ts +5 -0
  42. package/lib/wasm-executor/node-worker.js +31 -0
  43. package/package.json +6 -4
@@ -1,4 +1,27 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -12,16 +35,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
36
  };
14
37
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.getAuraSlotDuration = exports.emptyTaskHandler = exports.taskHandler = exports.runTask = exports.createProof = exports.decodeProof = exports.calculateStateRoot = exports.getRuntimeVersion = void 0;
38
+ exports.releaseWorker = exports.getAuraSlotDuration = exports.emptyTaskHandler = exports.taskHandler = exports.runTask = exports.createProof = exports.decodeProof = exports.calculateStateRoot = exports.getRuntimeVersion = void 0;
39
+ const Comlink = __importStar(require("comlink"));
16
40
  const util_1 = require("@polkadot/util");
17
41
  const util_crypto_1 = require("@polkadot/util-crypto");
18
- const key_cache_1 = require("./utils/key-cache");
19
- const chopsticks_executor_1 = require("@acala-network/chopsticks-executor");
20
- const logger_1 = require("./logger");
21
42
  const lodash_1 = __importDefault(require("lodash"));
43
+ const key_cache_1 = require("../utils/key-cache");
44
+ const logger_1 = require("../logger");
45
+ const utils_1 = require("../utils");
22
46
  const logger = logger_1.defaultLogger.child({ name: 'executor' });
47
+ let __executor_worker;
48
+ const getWorker = () => __awaiter(void 0, void 0, void 0, function* () {
49
+ if (__executor_worker)
50
+ return __executor_worker;
51
+ if (typeof Worker !== 'undefined') {
52
+ __executor_worker = Promise.resolve().then(() => __importStar(require('./browser-worker'))).then(({ startWorker }) => startWorker());
53
+ }
54
+ else {
55
+ __executor_worker = Promise.resolve().then(() => __importStar(require('./node-worker'))).then(({ startWorker }) => startWorker());
56
+ }
57
+ return __executor_worker;
58
+ });
23
59
  const getRuntimeVersion = (code) => __awaiter(void 0, void 0, void 0, function* () {
24
- return (0, chopsticks_executor_1.get_runtime_version)(code).then((version) => {
60
+ const worker = yield getWorker();
61
+ return worker.remote.getRuntimeVersion(code).then((version) => {
25
62
  version.specName = (0, util_1.hexToString)(version.specName);
26
63
  version.implName = (0, util_1.hexToString)(version.implName);
27
64
  return version;
@@ -30,25 +67,24 @@ const getRuntimeVersion = (code) => __awaiter(void 0, void 0, void 0, function*
30
67
  exports.getRuntimeVersion = getRuntimeVersion;
31
68
  // trie_version: 0 for old trie, 1 for new trie
32
69
  const calculateStateRoot = (entries, trie_version) => __awaiter(void 0, void 0, void 0, function* () {
33
- return (0, chopsticks_executor_1.calculate_state_root)(entries, trie_version);
70
+ const worker = yield getWorker();
71
+ return worker.remote.calculateStateRoot(entries, trie_version);
34
72
  });
35
73
  exports.calculateStateRoot = calculateStateRoot;
36
74
  const decodeProof = (trieRootHash, keys, nodes) => __awaiter(void 0, void 0, void 0, function* () {
37
- const decoded = yield (0, chopsticks_executor_1.decode_proof)(trieRootHash, keys, nodes);
38
- return decoded.reduce((accum, [key, value]) => {
39
- accum[key] = value;
40
- return accum;
41
- }, {});
75
+ const worker = yield getWorker();
76
+ return worker.remote.decodeProof(trieRootHash, keys, nodes);
42
77
  });
43
78
  exports.decodeProof = decodeProof;
44
79
  const createProof = (nodes, entries) => __awaiter(void 0, void 0, void 0, function* () {
45
- const result = yield (0, chopsticks_executor_1.create_proof)(nodes, entries);
46
- return { trieRootHash: result[0], nodes: result[1] };
80
+ const worker = yield getWorker();
81
+ return worker.remote.createProof(nodes, entries);
47
82
  });
48
83
  exports.createProof = createProof;
49
84
  const runTask = (task, callback = exports.emptyTaskHandler) => __awaiter(void 0, void 0, void 0, function* () {
85
+ const worker = yield getWorker();
50
86
  logger.trace((0, logger_1.truncate)(task), 'taskRun');
51
- const response = yield (0, chopsticks_executor_1.run_task)(task, callback, typeof process === 'object' ? process.env.RUST_LOG : 'info');
87
+ const response = yield worker.remote.runTask(task, Comlink.proxy(callback));
52
88
  if (response.Call) {
53
89
  logger.trace((0, logger_1.truncate)(response.Call), 'taskResponse');
54
90
  }
@@ -78,7 +114,7 @@ const taskHandler = (block) => {
78
114
  pageSize: 1,
79
115
  startKey: key,
80
116
  });
81
- return nextKey;
117
+ return nextKey && (0, utils_1.stripChildPrefix)(nextKey);
82
118
  });
83
119
  },
84
120
  offchainGetStorage: function (key) {
@@ -166,3 +202,12 @@ exports.getAuraSlotDuration = lodash_1.default.memoize((wasm, registry) => __awa
166
202
  const slotDuration = registry.createType('u64', (0, util_1.hexToU8a)(result.Call.result)).toNumber();
167
203
  return slotDuration;
168
204
  }));
205
+ const releaseWorker = () => __awaiter(void 0, void 0, void 0, function* () {
206
+ if (!__executor_worker)
207
+ return;
208
+ const executor = yield __executor_worker;
209
+ executor.remote[Comlink.releaseProxy]();
210
+ yield executor.terminate();
211
+ __executor_worker = undefined;
212
+ });
213
+ exports.releaseWorker = releaseWorker;
@@ -0,0 +1,34 @@
1
+ import * as Comlink from 'comlink'
2
+ import * as pkg from '@acala-network/chopsticks-executor'
3
+ import { parentPort } from 'node:worker_threads'
4
+ import nodeEndpoint from 'comlink/dist/umd/node-adapter.js'
5
+
6
+ const getRuntimeVersion = async (code) => {
7
+ return pkg.get_runtime_version(code)
8
+ }
9
+
10
+ // trie_version: 0 for old trie, 1 for new trie
11
+ const calculateStateRoot = async (entries, trie_version) => {
12
+ return pkg.calculate_state_root(entries, trie_version)
13
+ }
14
+
15
+ const decodeProof = async (trieRootHash, keys, nodes) => {
16
+ const decoded = await pkg.decode_proof(trieRootHash, keys, nodes)
17
+ return decoded.reduce((accum, [key, value]) => {
18
+ accum[key] = value
19
+ return accum
20
+ }, {})
21
+ }
22
+
23
+ const createProof = async (nodes, entries) => {
24
+ const result = await pkg.create_proof(nodes, entries)
25
+ return { trieRootHash: result[0], nodes: result[1] }
26
+ }
27
+
28
+ const runTask = async (task, callback) => {
29
+ return pkg.run_task(task, callback, process.env.RUST_LOG)
30
+ }
31
+
32
+ export const wasmExecutor = { runTask, getRuntimeVersion, calculateStateRoot, createProof, decodeProof }
33
+
34
+ Comlink.expose(wasmExecutor, nodeEndpoint(parentPort))
@@ -0,0 +1,5 @@
1
+ import type { WasmExecutor } from '.';
2
+ export declare const startWorker: () => Promise<{
3
+ remote: import("comlink").Remote<WasmExecutor>;
4
+ terminate: () => Promise<void>;
5
+ }>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.startWorker = void 0;
16
+ const comlink_1 = require("comlink");
17
+ const node_adapter_js_1 = __importDefault(require("comlink/dist/umd/node-adapter.js"));
18
+ const node_worker_threads_1 = __importDefault(require("node:worker_threads"));
19
+ const node_url_1 = __importDefault(require("node:url"));
20
+ const startWorker = () => __awaiter(void 0, void 0, void 0, function* () {
21
+ const worker = new node_worker_threads_1.default.Worker(node_url_1.default.resolve(__filename, 'node-wasm-executor.mjs'), {
22
+ name: 'chopsticks-wasm-executor',
23
+ });
24
+ return {
25
+ remote: (0, comlink_1.wrap)((0, node_adapter_js_1.default)(worker)),
26
+ terminate: () => __awaiter(void 0, void 0, void 0, function* () {
27
+ yield worker.terminate();
28
+ }),
29
+ };
30
+ });
31
+ exports.startWorker = startWorker;
package/package.json CHANGED
@@ -1,19 +1,21 @@
1
1
  {
2
2
  "name": "@acala-network/chopsticks-core",
3
- "version": "0.8.2",
3
+ "version": "0.8.4",
4
4
  "author": "Acala Developers <hello@acala.network>",
5
5
  "license": "Apache-2.0",
6
6
  "scripts": {
7
7
  "clean": "rm -rf lib tsconfig.tsbuildinfo",
8
- "pack-wasm": "scripts/pack-wasm.js",
9
- "build": "yarn pack-wasm; tsc -p ./tsconfig.json",
8
+ "pack-wasm": "scripts/pack-wasm.cjs",
9
+ "build": "yarn pack-wasm; tsc -p ./tsconfig.json; yarn copyfiles",
10
+ "copyfiles": "cp -r src/wasm-executor/*.mjs lib/wasm-executor/",
10
11
  "docs:prep": "typedoc"
11
12
  },
12
13
  "dependencies": {
13
- "@acala-network/chopsticks-executor": "0.8.2",
14
+ "@acala-network/chopsticks-executor": "0.8.4",
14
15
  "@polkadot/api": "^10.9.1",
15
16
  "@polkadot/util-crypto": "^12.3.2",
16
17
  "axios": "^1.5.1",
18
+ "comlink": "^4.4.1",
17
19
  "eventemitter3": "^5.0.1",
18
20
  "localforage": "^1.10.0",
19
21
  "lodash": "^4.17.21",