quantumcoin 7.0.2 → 7.0.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 (155) hide show
  1. package/.github/workflows/publish-npmjs.yaml +22 -22
  2. package/.gitignore +15 -15
  3. package/LICENSE +21 -21
  4. package/README-SDK.md +756 -756
  5. package/README.md +165 -152
  6. package/SPEC.md +3845 -3845
  7. package/config.d.ts +50 -50
  8. package/config.js +115 -115
  9. package/examples/AllSolidityTypes.sol +184 -184
  10. package/examples/SimpleIERC20.sol +74 -74
  11. package/examples/events.js +41 -35
  12. package/examples/events.ts +35 -0
  13. package/examples/example-generator-sdk-js.js +100 -95
  14. package/examples/example-generator-sdk-js.ts +77 -0
  15. package/examples/example-generator-sdk-ts.js +100 -95
  16. package/examples/example-generator-sdk-ts.ts +77 -0
  17. package/examples/example.js +72 -61
  18. package/examples/example.ts +61 -0
  19. package/examples/offline-signing.js +79 -0
  20. package/examples/offline-signing.ts +66 -0
  21. package/examples/package-lock.json +48 -57
  22. package/examples/package.json +32 -16
  23. package/examples/read-operations.js +32 -27
  24. package/examples/read-operations.ts +31 -0
  25. package/examples/sdk-generator-erc20.inline.json +251 -251
  26. package/examples/solidity-types.ts +43 -43
  27. package/examples/wallet-offline.js +35 -29
  28. package/examples/wallet-offline.ts +34 -0
  29. package/generate-sdk.js +1824 -1383
  30. package/index.js +12 -12
  31. package/package.json +95 -75
  32. package/scripts/copy-declarations.js +31 -0
  33. package/scripts/run-all-one-by-one.js +151 -0
  34. package/src/abi/fragments.d.ts +42 -42
  35. package/src/abi/fragments.js +63 -63
  36. package/src/abi/index.d.ts +13 -13
  37. package/src/abi/index.js +9 -9
  38. package/src/abi/interface.d.ts +128 -132
  39. package/src/abi/interface.js +590 -590
  40. package/src/abi/js-abi-coder.d.ts +8 -0
  41. package/src/abi/js-abi-coder.js +474 -474
  42. package/src/constants.d.ts +66 -61
  43. package/src/constants.js +101 -94
  44. package/src/contract/contract-factory.d.ts +28 -28
  45. package/src/contract/contract-factory.js +105 -105
  46. package/src/contract/contract.d.ts +113 -105
  47. package/src/contract/contract.js +354 -312
  48. package/src/contract/index.d.ts +9 -9
  49. package/src/contract/index.js +9 -9
  50. package/src/errors/index.d.ts +92 -92
  51. package/src/errors/index.js +188 -188
  52. package/src/generator/index.d.ts +74 -0
  53. package/src/generator/index.js +1404 -1201
  54. package/src/index.d.ts +125 -127
  55. package/src/index.js +41 -41
  56. package/src/internal/hex.d.ts +61 -61
  57. package/src/internal/hex.js +144 -144
  58. package/src/providers/extra-providers.d.ts +139 -128
  59. package/src/providers/extra-providers.js +600 -575
  60. package/src/providers/index.d.ts +17 -16
  61. package/src/providers/index.js +10 -10
  62. package/src/providers/json-rpc-provider.d.ts +12 -12
  63. package/src/providers/json-rpc-provider.js +79 -79
  64. package/src/providers/provider.d.ts +207 -196
  65. package/src/providers/provider.js +392 -359
  66. package/src/types/index.d.ts +214 -462
  67. package/src/types/index.js +9 -9
  68. package/src/utils/address.d.ts +72 -72
  69. package/src/utils/address.js +181 -182
  70. package/src/utils/encoding.d.ts +120 -120
  71. package/src/utils/encoding.js +306 -306
  72. package/src/utils/hashing.d.ts +82 -76
  73. package/src/utils/hashing.js +313 -298
  74. package/src/utils/index.d.ts +65 -55
  75. package/src/utils/index.js +13 -13
  76. package/src/utils/result.d.ts +57 -57
  77. package/src/utils/result.js +128 -128
  78. package/src/utils/rlp.d.ts +12 -12
  79. package/src/utils/rlp.js +200 -200
  80. package/src/utils/units.d.ts +29 -29
  81. package/src/utils/units.js +107 -107
  82. package/src/wallet/index.d.ts +10 -10
  83. package/src/wallet/index.js +8 -8
  84. package/src/wallet/wallet.d.ts +160 -160
  85. package/src/wallet/wallet.js +483 -489
  86. package/test/e2e/all-solidity-types.dynamic.test.js +207 -200
  87. package/test/e2e/all-solidity-types.dynamic.test.ts +191 -0
  88. package/test/e2e/all-solidity-types.fixtures.js +231 -231
  89. package/test/e2e/all-solidity-types.generated-sdks.e2e.test.js +387 -361
  90. package/test/e2e/all-solidity-types.generated-sdks.e2e.test.ts +350 -0
  91. package/test/e2e/helpers.js +59 -47
  92. package/test/e2e/signing-context-and-fee.e2e.test.js +137 -0
  93. package/test/e2e/signing-context-and-fee.e2e.test.ts +128 -0
  94. package/test/e2e/simple-erc20.generated-sdks.e2e.test.js +168 -144
  95. package/test/e2e/simple-erc20.generated-sdks.e2e.test.ts +141 -0
  96. package/test/e2e/transactional.test.js +245 -191
  97. package/test/e2e/transactional.test.ts +208 -0
  98. package/test/e2e/typed-generator.e2e.test.js +407 -402
  99. package/test/e2e/typed-generator.e2e.test.ts +337 -0
  100. package/test/fixtures/ConstructorParam.sol +23 -23
  101. package/test/fixtures/MultiContracts.sol +37 -37
  102. package/test/fixtures/SimpleStorage.sol +18 -18
  103. package/test/fixtures/StakingContract.abi.json +1 -1
  104. package/test/integration/ipc-provider.test.js +49 -44
  105. package/test/integration/ipc-provider.test.ts +44 -0
  106. package/test/integration/provider.test.js +88 -72
  107. package/test/integration/provider.test.ts +85 -0
  108. package/test/integration/ws-provider.test.js +41 -33
  109. package/test/integration/ws-provider.test.ts +38 -0
  110. package/test/security/malformed-input.test.js +37 -31
  111. package/test/security/malformed-input.test.ts +35 -0
  112. package/test/unit/_encrypted-output.txt +6 -0
  113. package/test/unit/_log-encrypted-jsons.js +45 -0
  114. package/test/unit/_write-keystore-fixture.js +16 -0
  115. package/test/unit/abi-interface.test.js +103 -98
  116. package/test/unit/abi-interface.test.ts +102 -0
  117. package/test/unit/address-wallet.test.js +355 -257
  118. package/test/unit/address-wallet.test.ts +342 -0
  119. package/test/unit/browser-provider.test.js +85 -82
  120. package/test/unit/browser-provider.test.ts +79 -0
  121. package/test/unit/contract.test.js +85 -82
  122. package/test/unit/contract.test.ts +83 -0
  123. package/test/unit/encoding-units-rlp.test.js +92 -89
  124. package/test/unit/encoding-units-rlp.test.ts +91 -0
  125. package/test/unit/errors.test.js +77 -74
  126. package/test/unit/errors.test.ts +76 -0
  127. package/test/unit/filter-by-blockhash.test.js +55 -52
  128. package/test/unit/filter-by-blockhash.test.ts +54 -0
  129. package/test/unit/fixtures/encrypted-keystores-48-32-36.js +9 -0
  130. package/test/unit/generate-contract-cli.test.js +42 -39
  131. package/test/unit/generate-contract-cli.test.ts +41 -0
  132. package/test/unit/generate-sdk-artifacts-json.test.js +113 -110
  133. package/test/unit/generate-sdk-artifacts-json.test.ts +110 -0
  134. package/test/unit/generator.test.js +102 -98
  135. package/test/unit/generator.test.ts +101 -0
  136. package/test/unit/hashing.test.js +68 -54
  137. package/test/unit/hashing.test.ts +67 -0
  138. package/test/unit/init.test.js +39 -36
  139. package/test/unit/init.test.ts +38 -0
  140. package/test/unit/interface.test.js +56 -53
  141. package/test/unit/interface.test.ts +54 -0
  142. package/test/unit/internal-hex.test.js +50 -47
  143. package/test/unit/internal-hex.test.ts +49 -0
  144. package/test/unit/populate-transaction.test.js +65 -0
  145. package/test/unit/populate-transaction.test.ts +64 -0
  146. package/test/unit/providers.test.js +200 -144
  147. package/test/unit/providers.test.ts +196 -0
  148. package/test/unit/result.test.js +80 -77
  149. package/test/unit/result.test.ts +79 -0
  150. package/test/unit/solidity-types.test.js +49 -46
  151. package/test/unit/solidity-types.test.ts +39 -0
  152. package/test/unit/utils.test.js +57 -54
  153. package/test/unit/utils.test.ts +56 -0
  154. package/test/verbose-logger.js +74 -0
  155. package/tsconfig.build.json +14 -0
@@ -1,54 +1,57 @@
1
- /**
2
- * @testCategory unit
3
- * @blockchainRequired false
4
- * @transactional false
5
- * @description Utility helpers (units, encoding, hashing, rlp, abi coder)
6
- */
7
-
8
- const { describe, it } = require("node:test");
9
- const assert = require("node:assert/strict");
10
-
11
- const { Initialize } = require("../../config");
12
- const qc = require("../../index");
13
-
14
- describe("Utils", () => {
15
- it("parseEther/formatEther roundtrip", () => {
16
- const wei = qc.parseEther("1.5");
17
- assert.equal(wei, 1500000000000000000n);
18
- assert.equal(qc.formatEther(wei), "1.5");
19
- });
20
-
21
- it("encodeBytes32String/decodeBytes32String roundtrip", () => {
22
- const hex = qc.encodeBytes32String("hello");
23
- assert.equal(hex.length, 66);
24
- assert.equal(qc.decodeBytes32String(hex), "hello");
25
- });
26
-
27
- it("base58 encode/decode roundtrip", () => {
28
- const bytes = qc.toUtf8Bytes("hello world");
29
- const b58 = qc.encodeBase58(bytes);
30
- const out = qc.decodeBase58(b58);
31
- assert.equal(qc.toUtf8String(out), "hello world");
32
- });
33
-
34
- it("RLP encode/decode roundtrip (hex bytes)", () => {
35
- const value = ["0x68656c6c6f", "0x7b", "0x01"];
36
- const encoded = qc.encodeRlp(value);
37
- assert.ok(typeof encoded === "string" && encoded.startsWith("0x"));
38
- const decoded = qc.decodeRlp(encoded);
39
- assert.deepEqual(decoded, value);
40
- });
41
-
42
- it("AbiCoder encode/decode roundtrip", async () => {
43
- await Initialize(null);
44
- const coder = new qc.AbiCoder();
45
- const data = coder.encode(["uint256", "bool", "string"], [123n, true, "hello"]);
46
- assert.ok(typeof data === "string" && data.startsWith("0x"));
47
- const decoded = coder.decode(["uint256", "bool", "string"], data);
48
- // qcsdk returns JSON array, so we accept array-like output
49
- assert.equal(decoded[0].toString(), "123");
50
- assert.equal(Boolean(decoded[1]), true);
51
- assert.equal(decoded[2], "hello");
52
- });
53
- });
54
-
1
+ /**
2
+ * @testCategory unit
3
+ * @blockchainRequired false
4
+ * @transactional false
5
+ * @description Utility helpers (units, encoding, hashing, rlp, abi coder)
6
+ */
7
+
8
+ const { describe, it } = require("node:test");
9
+ const assert = require("node:assert/strict");
10
+
11
+ const { Initialize } = require("../../config");
12
+ const qc = require("../../index");
13
+ const { logSuite, logTest } = require("../verbose-logger");
14
+
15
+ describe("Utils", () => {
16
+ logSuite("Utils");
17
+ it("parseEther/formatEther roundtrip", () => {
18
+ logTest("parseEther/formatEther roundtrip", {});
19
+ const wei = qc.parseEther("1.5");
20
+ assert.equal(wei, 1500000000000000000n);
21
+ assert.equal(qc.formatEther(wei), "1.5");
22
+ });
23
+
24
+ it("encodeBytes32String/decodeBytes32String roundtrip", () => {
25
+ const hex = qc.encodeBytes32String("hello");
26
+ assert.equal(hex.length, 66);
27
+ assert.equal(qc.decodeBytes32String(hex), "hello");
28
+ });
29
+
30
+ it("base58 encode/decode roundtrip", () => {
31
+ const bytes = qc.toUtf8Bytes("hello world");
32
+ const b58 = qc.encodeBase58(bytes);
33
+ const out = qc.decodeBase58(b58);
34
+ assert.equal(qc.toUtf8String(out), "hello world");
35
+ });
36
+
37
+ it("RLP encode/decode roundtrip (hex bytes)", () => {
38
+ const value = ["0x68656c6c6f", "0x7b", "0x01"];
39
+ const encoded = qc.encodeRlp(value);
40
+ assert.ok(typeof encoded === "string" && encoded.startsWith("0x"));
41
+ const decoded = qc.decodeRlp(encoded);
42
+ assert.deepEqual(decoded, value);
43
+ });
44
+
45
+ it("AbiCoder encode/decode roundtrip", async () => {
46
+ await Initialize(null);
47
+ const coder = new qc.AbiCoder();
48
+ const data = coder.encode(["uint256", "bool", "string"], [123n, true, "hello"]);
49
+ assert.ok(typeof data === "string" && data.startsWith("0x"));
50
+ const decoded = coder.decode(["uint256", "bool", "string"], data);
51
+ // qcsdk returns JSON array, so we accept array-like output
52
+ assert.equal(decoded[0].toString(), "123");
53
+ assert.equal(Boolean(decoded[1]), true);
54
+ assert.equal(decoded[2], "hello");
55
+ });
56
+ });
57
+
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @testCategory unit
3
+ * @blockchainRequired false
4
+ * @transactional false
5
+ * @description Utility helpers (units, encoding, hashing, rlp, abi coder)
6
+ */
7
+
8
+ import { describe, it } from "node:test";
9
+ import assert from "node:assert/strict";
10
+
11
+ import { Initialize } from "../../config";
12
+ import qc from "../../index";
13
+ import { logSuite, logTest } from "../verbose-logger";
14
+
15
+ describe("Utils", () => {
16
+ logSuite("Utils");
17
+ it("parseEther/formatEther roundtrip", () => {
18
+ logTest("parseEther/formatEther roundtrip", {});
19
+ const wei = qc.parseEther("1.5");
20
+ assert.equal(wei, 1500000000000000000n);
21
+ assert.equal(qc.formatEther(wei), "1.5");
22
+ });
23
+
24
+ it("encodeBytes32String/decodeBytes32String roundtrip", () => {
25
+ const hex = qc.encodeBytes32String("hello");
26
+ assert.equal(hex.length, 66);
27
+ assert.equal(qc.decodeBytes32String(hex), "hello");
28
+ });
29
+
30
+ it("base58 encode/decode roundtrip", () => {
31
+ const bytes = qc.toUtf8Bytes("hello world");
32
+ const b58 = qc.encodeBase58(bytes);
33
+ const out = qc.decodeBase58(b58);
34
+ assert.equal(qc.toUtf8String(out), "hello world");
35
+ });
36
+
37
+ it("RLP encode/decode roundtrip (hex bytes)", () => {
38
+ const value = ["0x68656c6c6f", "0x7b", "0x01"];
39
+ const encoded = qc.encodeRlp(value);
40
+ assert.ok(typeof encoded === "string" && encoded.startsWith("0x"));
41
+ const decoded = qc.decodeRlp(encoded);
42
+ assert.deepEqual(decoded, value);
43
+ });
44
+
45
+ it("AbiCoder encode/decode roundtrip", async () => {
46
+ await Initialize(null);
47
+ const coder = new qc.AbiCoder();
48
+ const data = coder.encode(["uint256", "bool", "string"], [123n, true, "hello"]);
49
+ assert.ok(typeof data === "string" && data.startsWith("0x"));
50
+ const decoded = coder.decode(["uint256", "bool", "string"], data);
51
+ // qcsdk returns JSON array, so we accept array-like output
52
+ assert.equal(decoded[0].toString(), "123");
53
+ assert.equal(Boolean(decoded[1]), true);
54
+ assert.equal(decoded[2], "hello");
55
+ });
56
+ });
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Verbose logging for tests and examples.
3
+ * Enable with: VERBOSE=1 or QC_VERBOSE=1 (e.g. VERBOSE=1 npm test, VERBOSE=1 node examples/example.js)
4
+ */
5
+
6
+ function isVerbose() {
7
+ const v = process.env.QC_VERBOSE || process.env.VERBOSE;
8
+ return v === "1" || v === "true" || v === "yes";
9
+ }
10
+
11
+ function ts() {
12
+ return new Date().toISOString();
13
+ }
14
+
15
+ function log(section, message, data) {
16
+ if (!isVerbose()) return;
17
+ const prefix = `[${ts()}] [${section}]`;
18
+ if (data !== undefined && data !== null && typeof data === "object" && Object.keys(data).length > 0) {
19
+ try {
20
+ console.log(prefix, message, JSON.stringify(data));
21
+ } catch {
22
+ console.log(prefix, message, String(data));
23
+ }
24
+ } else {
25
+ console.log(prefix, message);
26
+ }
27
+ }
28
+
29
+ function logSuite(suiteName) {
30
+ if (!isVerbose()) return;
31
+ console.log(`[${ts()}] [suite] ${suiteName}`);
32
+ }
33
+
34
+ function logTest(testName, data) {
35
+ if (!isVerbose()) return;
36
+ const payload = { test: testName, ...data };
37
+ console.log(`[${ts()}] [test] ${testName}`, JSON.stringify(payload));
38
+ }
39
+
40
+ function logTxn(txHash, data) {
41
+ if (!isVerbose()) return;
42
+ const hash = typeof txHash === "string" ? txHash : (txHash && txHash.hash) || String(txHash);
43
+ console.log(`[${ts()}] [txn] hash=${hash}`, data ? JSON.stringify(data) : "");
44
+ }
45
+
46
+ function logAddress(label, address) {
47
+ if (!isVerbose()) return;
48
+ const addr = typeof address === "string" ? address : (address && address.address) || String(address);
49
+ console.log(`[${ts()}] [address] ${label}=${addr}`);
50
+ }
51
+
52
+ function logExample(exampleName, message, data) {
53
+ if (!isVerbose()) return;
54
+ const prefix = `[${ts()}] [example:${exampleName}]`;
55
+ if (data !== undefined && data !== null && typeof data === "object" && Object.keys(data).length > 0) {
56
+ try {
57
+ console.log(prefix, message, JSON.stringify(data));
58
+ } catch {
59
+ console.log(prefix, message, String(data));
60
+ }
61
+ } else {
62
+ console.log(prefix, message);
63
+ }
64
+ }
65
+
66
+ module.exports = {
67
+ isVerbose,
68
+ log,
69
+ logSuite,
70
+ logTest,
71
+ logTxn,
72
+ logAddress,
73
+ logExample,
74
+ };
@@ -0,0 +1,14 @@
1
+ {
2
+ "compilerOptions": {
3
+ "declaration": true,
4
+ "emitDeclarationOnly": true,
5
+ "allowJs": true,
6
+ "lib": ["ES2015"],
7
+ "skipLibCheck": true,
8
+ "noEmit": false,
9
+ "rootDir": "src",
10
+ "outDir": "dist"
11
+ },
12
+ "include": ["src/**/*.js"],
13
+ "exclude": ["node_modules"]
14
+ }