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.
- package/.github/workflows/publish-npmjs.yaml +22 -22
- package/.gitignore +15 -15
- package/LICENSE +21 -21
- package/README-SDK.md +756 -756
- package/README.md +165 -152
- package/SPEC.md +3845 -3845
- package/config.d.ts +50 -50
- package/config.js +115 -115
- package/examples/AllSolidityTypes.sol +184 -184
- package/examples/SimpleIERC20.sol +74 -74
- package/examples/events.js +41 -35
- package/examples/events.ts +35 -0
- package/examples/example-generator-sdk-js.js +100 -95
- package/examples/example-generator-sdk-js.ts +77 -0
- package/examples/example-generator-sdk-ts.js +100 -95
- package/examples/example-generator-sdk-ts.ts +77 -0
- package/examples/example.js +72 -61
- package/examples/example.ts +61 -0
- package/examples/offline-signing.js +79 -0
- package/examples/offline-signing.ts +66 -0
- package/examples/package-lock.json +48 -57
- package/examples/package.json +32 -16
- package/examples/read-operations.js +32 -27
- package/examples/read-operations.ts +31 -0
- package/examples/sdk-generator-erc20.inline.json +251 -251
- package/examples/solidity-types.ts +43 -43
- package/examples/wallet-offline.js +35 -29
- package/examples/wallet-offline.ts +34 -0
- package/generate-sdk.js +1824 -1383
- package/index.js +12 -12
- package/package.json +95 -75
- package/scripts/copy-declarations.js +31 -0
- package/scripts/run-all-one-by-one.js +151 -0
- package/src/abi/fragments.d.ts +42 -42
- package/src/abi/fragments.js +63 -63
- package/src/abi/index.d.ts +13 -13
- package/src/abi/index.js +9 -9
- package/src/abi/interface.d.ts +128 -132
- package/src/abi/interface.js +590 -590
- package/src/abi/js-abi-coder.d.ts +8 -0
- package/src/abi/js-abi-coder.js +474 -474
- package/src/constants.d.ts +66 -61
- package/src/constants.js +101 -94
- package/src/contract/contract-factory.d.ts +28 -28
- package/src/contract/contract-factory.js +105 -105
- package/src/contract/contract.d.ts +113 -105
- package/src/contract/contract.js +354 -312
- package/src/contract/index.d.ts +9 -9
- package/src/contract/index.js +9 -9
- package/src/errors/index.d.ts +92 -92
- package/src/errors/index.js +188 -188
- package/src/generator/index.d.ts +74 -0
- package/src/generator/index.js +1404 -1201
- package/src/index.d.ts +125 -127
- package/src/index.js +41 -41
- package/src/internal/hex.d.ts +61 -61
- package/src/internal/hex.js +144 -144
- package/src/providers/extra-providers.d.ts +139 -128
- package/src/providers/extra-providers.js +600 -575
- package/src/providers/index.d.ts +17 -16
- package/src/providers/index.js +10 -10
- package/src/providers/json-rpc-provider.d.ts +12 -12
- package/src/providers/json-rpc-provider.js +79 -79
- package/src/providers/provider.d.ts +207 -196
- package/src/providers/provider.js +392 -359
- package/src/types/index.d.ts +214 -462
- package/src/types/index.js +9 -9
- package/src/utils/address.d.ts +72 -72
- package/src/utils/address.js +181 -182
- package/src/utils/encoding.d.ts +120 -120
- package/src/utils/encoding.js +306 -306
- package/src/utils/hashing.d.ts +82 -76
- package/src/utils/hashing.js +313 -298
- package/src/utils/index.d.ts +65 -55
- package/src/utils/index.js +13 -13
- package/src/utils/result.d.ts +57 -57
- package/src/utils/result.js +128 -128
- package/src/utils/rlp.d.ts +12 -12
- package/src/utils/rlp.js +200 -200
- package/src/utils/units.d.ts +29 -29
- package/src/utils/units.js +107 -107
- package/src/wallet/index.d.ts +10 -10
- package/src/wallet/index.js +8 -8
- package/src/wallet/wallet.d.ts +160 -160
- package/src/wallet/wallet.js +483 -489
- package/test/e2e/all-solidity-types.dynamic.test.js +207 -200
- package/test/e2e/all-solidity-types.dynamic.test.ts +191 -0
- package/test/e2e/all-solidity-types.fixtures.js +231 -231
- package/test/e2e/all-solidity-types.generated-sdks.e2e.test.js +387 -361
- package/test/e2e/all-solidity-types.generated-sdks.e2e.test.ts +350 -0
- package/test/e2e/helpers.js +59 -47
- package/test/e2e/signing-context-and-fee.e2e.test.js +137 -0
- package/test/e2e/signing-context-and-fee.e2e.test.ts +128 -0
- package/test/e2e/simple-erc20.generated-sdks.e2e.test.js +168 -144
- package/test/e2e/simple-erc20.generated-sdks.e2e.test.ts +141 -0
- package/test/e2e/transactional.test.js +245 -191
- package/test/e2e/transactional.test.ts +208 -0
- package/test/e2e/typed-generator.e2e.test.js +407 -402
- package/test/e2e/typed-generator.e2e.test.ts +337 -0
- package/test/fixtures/ConstructorParam.sol +23 -23
- package/test/fixtures/MultiContracts.sol +37 -37
- package/test/fixtures/SimpleStorage.sol +18 -18
- package/test/fixtures/StakingContract.abi.json +1 -1
- package/test/integration/ipc-provider.test.js +49 -44
- package/test/integration/ipc-provider.test.ts +44 -0
- package/test/integration/provider.test.js +88 -72
- package/test/integration/provider.test.ts +85 -0
- package/test/integration/ws-provider.test.js +41 -33
- package/test/integration/ws-provider.test.ts +38 -0
- package/test/security/malformed-input.test.js +37 -31
- package/test/security/malformed-input.test.ts +35 -0
- package/test/unit/_encrypted-output.txt +6 -0
- package/test/unit/_log-encrypted-jsons.js +45 -0
- package/test/unit/_write-keystore-fixture.js +16 -0
- package/test/unit/abi-interface.test.js +103 -98
- package/test/unit/abi-interface.test.ts +102 -0
- package/test/unit/address-wallet.test.js +355 -257
- package/test/unit/address-wallet.test.ts +342 -0
- package/test/unit/browser-provider.test.js +85 -82
- package/test/unit/browser-provider.test.ts +79 -0
- package/test/unit/contract.test.js +85 -82
- package/test/unit/contract.test.ts +83 -0
- package/test/unit/encoding-units-rlp.test.js +92 -89
- package/test/unit/encoding-units-rlp.test.ts +91 -0
- package/test/unit/errors.test.js +77 -74
- package/test/unit/errors.test.ts +76 -0
- package/test/unit/filter-by-blockhash.test.js +55 -52
- package/test/unit/filter-by-blockhash.test.ts +54 -0
- package/test/unit/fixtures/encrypted-keystores-48-32-36.js +9 -0
- package/test/unit/generate-contract-cli.test.js +42 -39
- package/test/unit/generate-contract-cli.test.ts +41 -0
- package/test/unit/generate-sdk-artifacts-json.test.js +113 -110
- package/test/unit/generate-sdk-artifacts-json.test.ts +110 -0
- package/test/unit/generator.test.js +102 -98
- package/test/unit/generator.test.ts +101 -0
- package/test/unit/hashing.test.js +68 -54
- package/test/unit/hashing.test.ts +67 -0
- package/test/unit/init.test.js +39 -36
- package/test/unit/init.test.ts +38 -0
- package/test/unit/interface.test.js +56 -53
- package/test/unit/interface.test.ts +54 -0
- package/test/unit/internal-hex.test.js +50 -47
- package/test/unit/internal-hex.test.ts +49 -0
- package/test/unit/populate-transaction.test.js +65 -0
- package/test/unit/populate-transaction.test.ts +64 -0
- package/test/unit/providers.test.js +200 -144
- package/test/unit/providers.test.ts +196 -0
- package/test/unit/result.test.js +80 -77
- package/test/unit/result.test.ts +79 -0
- package/test/unit/solidity-types.test.js +49 -46
- package/test/unit/solidity-types.test.ts +39 -0
- package/test/unit/utils.test.js +57 -54
- package/test/unit/utils.test.ts +56 -0
- package/test/verbose-logger.js +74 -0
- package/tsconfig.build.json +14 -0
package/test/unit/utils.test.js
CHANGED
|
@@ -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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
assert.
|
|
50
|
-
|
|
51
|
-
|
|
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
|
+
}
|