@matrix-privacy/wallet 0.0.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.
- package/.eslintrc.js +73 -0
- package/.prettierrc.js +21 -0
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/dist/__tests__/index.test.d.ts +1 -0
- package/dist/__tests__/index.test.js +13 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/services/artifacts/__tests__/artifact-downloader.test.d.ts +1 -0
- package/dist/services/artifacts/__tests__/artifact-downloader.test.js +172 -0
- package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +1 -0
- package/dist/services/artifacts/artifact-downloader.d.ts +13 -0
- package/dist/services/artifacts/artifact-downloader.js +142 -0
- package/dist/services/artifacts/artifact-downloader.js.map +1 -0
- package/dist/services/artifacts/artifact-hash.d.ts +3 -0
- package/dist/services/artifacts/artifact-hash.js +53 -0
- package/dist/services/artifacts/artifact-hash.js.map +1 -0
- package/dist/services/artifacts/artifact-store.d.ts +11 -0
- package/dist/services/artifacts/artifact-store.js +15 -0
- package/dist/services/artifacts/artifact-store.js.map +1 -0
- package/dist/services/artifacts/artifact-util.d.ts +7 -0
- package/dist/services/artifacts/artifact-util.js +64 -0
- package/dist/services/artifacts/artifact-util.js.map +1 -0
- package/dist/services/artifacts/index.d.ts +2 -0
- package/dist/services/artifacts/index.js +19 -0
- package/dist/services/artifacts/index.js.map +1 -0
- package/dist/services/artifacts/json/artifact-v2-hashes.json +467 -0
- package/dist/services/ethers/__tests__/ethers-util.test.d.ts +1 -0
- package/dist/services/ethers/__tests__/ethers-util.test.js +19 -0
- package/dist/services/ethers/__tests__/ethers-util.test.js.map +1 -0
- package/dist/services/ethers/ethers-util.d.ts +1 -0
- package/dist/services/ethers/ethers-util.js +9 -0
- package/dist/services/ethers/ethers-util.js.map +1 -0
- package/dist/services/ethers/index.d.ts +1 -0
- package/dist/services/ethers/index.js +18 -0
- package/dist/services/ethers/index.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.js +21 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/matrix/core/__tests__/engine.test.d.ts +1 -0
- package/dist/services/matrix/core/__tests__/engine.test.js +30 -0
- package/dist/services/matrix/core/__tests__/engine.test.js.map +1 -0
- package/dist/services/matrix/core/__tests__/providers.test.d.ts +1 -0
- package/dist/services/matrix/core/__tests__/providers.test.js +54 -0
- package/dist/services/matrix/core/__tests__/providers.test.js.map +1 -0
- package/dist/services/matrix/core/artifacts.d.ts +10 -0
- package/dist/services/matrix/core/artifacts.js +70 -0
- package/dist/services/matrix/core/artifacts.js.map +1 -0
- package/dist/services/matrix/core/engine.d.ts +4 -0
- package/dist/services/matrix/core/engine.js +21 -0
- package/dist/services/matrix/core/engine.js.map +1 -0
- package/dist/services/matrix/core/index.d.ts +8 -0
- package/dist/services/matrix/core/index.js +25 -0
- package/dist/services/matrix/core/index.js.map +1 -0
- package/dist/services/matrix/core/init.d.ts +21 -0
- package/dist/services/matrix/core/init.js +79 -0
- package/dist/services/matrix/core/init.js.map +1 -0
- package/dist/services/matrix/core/load-provider.d.ts +9 -0
- package/dist/services/matrix/core/load-provider.js +100 -0
- package/dist/services/matrix/core/load-provider.js.map +1 -0
- package/dist/services/matrix/core/merkletree.d.ts +5 -0
- package/dist/services/matrix/core/merkletree.js +40 -0
- package/dist/services/matrix/core/merkletree.js.map +1 -0
- package/dist/services/matrix/core/prover.d.ts +3 -0
- package/dist/services/matrix/core/prover.js +14 -0
- package/dist/services/matrix/core/prover.js.map +1 -0
- package/dist/services/matrix/core/providers.d.ts +9 -0
- package/dist/services/matrix/core/providers.js +31 -0
- package/dist/services/matrix/core/providers.js.map +1 -0
- package/dist/services/matrix/core/shields.d.ts +11 -0
- package/dist/services/matrix/core/shields.js +24 -0
- package/dist/services/matrix/core/shields.js.map +1 -0
- package/dist/services/matrix/history/__tests__/transaction-history.test.d.ts +1 -0
- package/dist/services/matrix/history/__tests__/transaction-history.test.js +249 -0
- package/dist/services/matrix/history/__tests__/transaction-history.test.js.map +1 -0
- package/dist/services/matrix/history/transaction-history.d.ts +4 -0
- package/dist/services/matrix/history/transaction-history.js +182 -0
- package/dist/services/matrix/history/transaction-history.js.map +1 -0
- package/dist/services/matrix/index.d.ts +4 -0
- package/dist/services/matrix/index.js +21 -0
- package/dist/services/matrix/index.js.map +1 -0
- package/dist/services/matrix/process/extract-transaction-data.d.ts +3 -0
- package/dist/services/matrix/process/extract-transaction-data.js +19 -0
- package/dist/services/matrix/process/extract-transaction-data.js.map +1 -0
- package/dist/services/matrix/process/index.d.ts +1 -0
- package/dist/services/matrix/process/index.js +18 -0
- package/dist/services/matrix/process/index.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.d.ts +1 -0
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +56 -0
- package/dist/services/matrix/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.d.ts +8 -0
- package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.js +103 -0
- package/dist/services/matrix/quick-sync/V3/graph-type-formatters-v3.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.d.ts +2 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.js +19861 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/introspectionSchema.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.d.ts +1352 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.js +4 -0
- package/dist/services/matrix/quick-sync/V3/graphql/.graphclient/sources/mumbai/types.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/graphql/index.d.ts +1680 -0
- package/dist/services/matrix/quick-sync/V3/graphql/index.js +348 -0
- package/dist/services/matrix/quick-sync/V3/graphql/index.js.map +1 -0
- package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.d.ts +2 -0
- package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.js +99 -0
- package/dist/services/matrix/quick-sync/V3/quick-sync-events-graph-v3.js.map +1 -0
- package/dist/services/matrix/quick-sync/graph-query.d.ts +5 -0
- package/dist/services/matrix/quick-sync/graph-query.js +26 -0
- package/dist/services/matrix/quick-sync/graph-query.js.map +1 -0
- package/dist/services/matrix/quick-sync/quick-sync-events.d.ts +2 -0
- package/dist/services/matrix/quick-sync/quick-sync-events.js +9 -0
- package/dist/services/matrix/quick-sync/quick-sync-events.js.map +1 -0
- package/dist/services/matrix/quick-sync/shared-formatters.d.ts +8 -0
- package/dist/services/matrix/quick-sync/shared-formatters.js +36 -0
- package/dist/services/matrix/quick-sync/shared-formatters.js.map +1 -0
- package/dist/services/matrix/util/__tests__/bytes-util.test.d.ts +1 -0
- package/dist/services/matrix/util/__tests__/bytes-util.test.js +23 -0
- package/dist/services/matrix/util/__tests__/bytes-util.test.js.map +1 -0
- package/dist/services/matrix/util/__tests__/crypto-util.test.d.ts +1 -0
- package/dist/services/matrix/util/__tests__/crypto-util.test.js +62 -0
- package/dist/services/matrix/util/__tests__/crypto-util.test.js.map +1 -0
- package/dist/services/matrix/util/bytes.d.ts +5 -0
- package/dist/services/matrix/util/bytes.js +22 -0
- package/dist/services/matrix/util/bytes.js.map +1 -0
- package/dist/services/matrix/util/crypto.d.ts +14 -0
- package/dist/services/matrix/util/crypto.js +80 -0
- package/dist/services/matrix/util/crypto.js.map +1 -0
- package/dist/services/matrix/util/graph-util.d.ts +3 -0
- package/dist/services/matrix/util/graph-util.js +13 -0
- package/dist/services/matrix/util/graph-util.js.map +1 -0
- package/dist/services/matrix/util/index.d.ts +2 -0
- package/dist/services/matrix/util/index.js +19 -0
- package/dist/services/matrix/util/index.js.map +1 -0
- package/dist/services/matrix/util/runtime.d.ts +2 -0
- package/dist/services/matrix/util/runtime.js +8 -0
- package/dist/services/matrix/util/runtime.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-live.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-live.test.js +48 -0
- package/dist/services/matrix/wallets/__tests__/balances-live.test.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-update.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/balances-update.test.js +85 -0
- package/dist/services/matrix/wallets/__tests__/balances-update.test.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/balances.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/balances.test.js +59 -0
- package/dist/services/matrix/wallets/__tests__/balances.test.js.map +1 -0
- package/dist/services/matrix/wallets/__tests__/wallets.test.d.ts +1 -0
- package/dist/services/matrix/wallets/__tests__/wallets.test.js +80 -0
- package/dist/services/matrix/wallets/__tests__/wallets.test.js.map +1 -0
- package/dist/services/matrix/wallets/balance-update.d.ts +10 -0
- package/dist/services/matrix/wallets/balance-update.js +126 -0
- package/dist/services/matrix/wallets/balance-update.js.map +1 -0
- package/dist/services/matrix/wallets/balances.d.ts +3 -0
- package/dist/services/matrix/wallets/balances.js +32 -0
- package/dist/services/matrix/wallets/balances.js.map +1 -0
- package/dist/services/matrix/wallets/index.d.ts +4 -0
- package/dist/services/matrix/wallets/index.js +21 -0
- package/dist/services/matrix/wallets/index.js.map +1 -0
- package/dist/services/matrix/wallets/wallets.d.ts +22 -0
- package/dist/services/matrix/wallets/wallets.js +252 -0
- package/dist/services/matrix/wallets/wallets.js.map +1 -0
- package/dist/services/transactions/__tests__/json/formatted-relay-adapt-error-logs.json +216 -0
- package/dist/services/transactions/__tests__/proof-cache.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/proof-cache.test.js +114 -0
- package/dist/services/transactions/__tests__/proof-cache.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +376 -0
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-gas-details.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-gas-details.test.js +109 -0
- package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-notes.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-notes.test.js +193 -0
- package/dist/services/transactions/__tests__/tx-notes.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-shield-base-token.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-shield-base-token.test.js +99 -0
- package/dist/services/transactions/__tests__/tx-shield-base-token.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-shield.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-shield.test.js +146 -0
- package/dist/services/transactions/__tests__/tx-shield.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-transfer.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-transfer.test.js +263 -0
- package/dist/services/transactions/__tests__/tx-transfer.test.js.map +1 -0
- package/dist/services/transactions/__tests__/tx-unshield.test.d.ts +1 -0
- package/dist/services/transactions/__tests__/tx-unshield.test.js +759 -0
- package/dist/services/transactions/__tests__/tx-unshield.test.js.map +1 -0
- package/dist/services/transactions/index.d.ts +13 -0
- package/dist/services/transactions/index.js +30 -0
- package/dist/services/transactions/index.js.map +1 -0
- package/dist/services/transactions/proof-cache.d.ts +27 -0
- package/dist/services/transactions/proof-cache.js +130 -0
- package/dist/services/transactions/proof-cache.js.map +1 -0
- package/dist/services/transactions/tx-cross-contract-calls.d.ts +12 -0
- package/dist/services/transactions/tx-cross-contract-calls.js +210 -0
- package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -0
- package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.d.ts +5 -0
- package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js +110 -0
- package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js.map +1 -0
- package/dist/services/transactions/tx-gas-details.d.ts +5 -0
- package/dist/services/transactions/tx-gas-details.js +101 -0
- package/dist/services/transactions/tx-gas-details.js.map +1 -0
- package/dist/services/transactions/tx-generator.d.ts +13 -0
- package/dist/services/transactions/tx-generator.js +168 -0
- package/dist/services/transactions/tx-generator.js.map +1 -0
- package/dist/services/transactions/tx-notes.d.ts +11 -0
- package/dist/services/transactions/tx-notes.js +153 -0
- package/dist/services/transactions/tx-notes.js.map +1 -0
- package/dist/services/transactions/tx-nullifiers.d.ts +2 -0
- package/dist/services/transactions/tx-nullifiers.js +17 -0
- package/dist/services/transactions/tx-nullifiers.js.map +1 -0
- package/dist/services/transactions/tx-proof-transfer.d.ts +3 -0
- package/dist/services/transactions/tx-proof-transfer.js +39 -0
- package/dist/services/transactions/tx-proof-transfer.js.map +1 -0
- package/dist/services/transactions/tx-proof-unshield.d.ts +5 -0
- package/dist/services/transactions/tx-proof-unshield.js +132 -0
- package/dist/services/transactions/tx-proof-unshield.js.map +1 -0
- package/dist/services/transactions/tx-shield-base-token.d.ts +3 -0
- package/dist/services/transactions/tx-shield-base-token.js +55 -0
- package/dist/services/transactions/tx-shield-base-token.js.map +1 -0
- package/dist/services/transactions/tx-shield.d.ts +6 -0
- package/dist/services/transactions/tx-shield.js +77 -0
- package/dist/services/transactions/tx-shield.js.map +1 -0
- package/dist/services/transactions/tx-transfer.d.ts +3 -0
- package/dist/services/transactions/tx-transfer.js +39 -0
- package/dist/services/transactions/tx-transfer.js.map +1 -0
- package/dist/services/transactions/tx-unshield.d.ts +11 -0
- package/dist/services/transactions/tx-unshield.js +224 -0
- package/dist/services/transactions/tx-unshield.js.map +1 -0
- package/dist/tests/local-e2e.d.ts +13 -0
- package/dist/tests/local-e2e.js +487 -0
- package/dist/tests/local-e2e.js.map +1 -0
- package/dist/tests/mocks.test.d.ts +40 -0
- package/dist/tests/mocks.test.js +171 -0
- package/dist/tests/mocks.test.js.map +1 -0
- package/dist/tests/setup.test.d.ts +7 -0
- package/dist/tests/setup.test.js +88 -0
- package/dist/tests/setup.test.js.map +1 -0
- package/dist/tests/stubs/engine-stubs.test.d.ts +7 -0
- package/dist/tests/stubs/engine-stubs.test.js +72 -0
- package/dist/tests/stubs/engine-stubs.test.js.map +1 -0
- package/dist/utils/__tests__/blocked-address.test.d.ts +1 -0
- package/dist/utils/__tests__/blocked-address.test.js +23 -0
- package/dist/utils/__tests__/blocked-address.test.js.map +1 -0
- package/dist/utils/__tests__/logger.test.d.ts +1 -0
- package/dist/utils/__tests__/logger.test.js +28 -0
- package/dist/utils/__tests__/logger.test.js.map +1 -0
- package/dist/utils/__tests__/utils.test.d.ts +1 -0
- package/dist/utils/__tests__/utils.test.js +21 -0
- package/dist/utils/__tests__/utils.test.js.map +1 -0
- package/dist/utils/blocked-address.d.ts +2 -0
- package/dist/utils/blocked-address.js +17 -0
- package/dist/utils/blocked-address.js.map +1 -0
- package/dist/utils/error.d.ts +1 -0
- package/dist/utils/error.js +20 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/gas-price.d.ts +6 -0
- package/dist/utils/gas-price.js +19 -0
- package/dist/utils/gas-price.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.js +21 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/utils.d.ts +4 -0
- package/dist/utils/utils.js +54 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +94 -0
- package/postinstall.js +52 -0
- package/react-native-shims.js +42 -0
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
root: true,
|
|
3
|
+
env: {
|
|
4
|
+
node: true,
|
|
5
|
+
es6: true,
|
|
6
|
+
mocha: true,
|
|
7
|
+
},
|
|
8
|
+
extends: [
|
|
9
|
+
'eslint:recommended',
|
|
10
|
+
'airbnb-base',
|
|
11
|
+
'plugin:import/typescript',
|
|
12
|
+
'plugin:@typescript-eslint/recommended',
|
|
13
|
+
'plugin:@typescript-eslint/recommended-requiring-type-checking',
|
|
14
|
+
'prettier',
|
|
15
|
+
],
|
|
16
|
+
globals: {
|
|
17
|
+
Optional: 'readonly',
|
|
18
|
+
MapType: 'readonly',
|
|
19
|
+
BigInt: 'readonly',
|
|
20
|
+
},
|
|
21
|
+
parser: '@typescript-eslint/parser',
|
|
22
|
+
parserOptions: {
|
|
23
|
+
ecmaVersion: 13,
|
|
24
|
+
sourceType: 'module',
|
|
25
|
+
project: ['./tsconfig.json', './tsconfig.test.json'],
|
|
26
|
+
},
|
|
27
|
+
plugins: ['@typescript-eslint', 'no-only-tests'],
|
|
28
|
+
rules: {
|
|
29
|
+
'arrow-body-style': 0,
|
|
30
|
+
'import/extensions': 0,
|
|
31
|
+
'no-unused-vars': 0,
|
|
32
|
+
'no-use-before-define': 0,
|
|
33
|
+
'import/prefer-default-export': 0,
|
|
34
|
+
'import/no-unresolved': 0,
|
|
35
|
+
'no-restricted-syntax': 0,
|
|
36
|
+
'no-unused-expressions': 0,
|
|
37
|
+
'no-shadow': 0,
|
|
38
|
+
'no-continue': 0,
|
|
39
|
+
'no-console': 1,
|
|
40
|
+
'default-case': 0,
|
|
41
|
+
'@typescript-eslint/switch-exhaustiveness-check': 2,
|
|
42
|
+
'@typescript-eslint/no-explicit-any': 1,
|
|
43
|
+
'@typescript-eslint/ban-ts-comment': 0,
|
|
44
|
+
'@typescript-eslint/no-unused-vars': 1,
|
|
45
|
+
'@typescript-eslint/no-unsafe-call': 1,
|
|
46
|
+
'@typescript-eslint/no-unsafe-member-access': 1,
|
|
47
|
+
'@typescript-eslint/no-unsafe-assignment': 1,
|
|
48
|
+
'@typescript-eslint/no-unsafe-argument': 1,
|
|
49
|
+
'@typescript-eslint/no-unsafe-return': 1,
|
|
50
|
+
'@typescript-eslint/require-await': 0,
|
|
51
|
+
'import/order': 0,
|
|
52
|
+
'consistent-return': 0,
|
|
53
|
+
'prefer-destructuring': 0,
|
|
54
|
+
'lines-between-class-members': 0,
|
|
55
|
+
'@typescript-eslint/no-empty-function': 0,
|
|
56
|
+
'no-promise-executor-return': 0,
|
|
57
|
+
'@typescript-eslint/no-floating-promises': 2,
|
|
58
|
+
'@typescript-eslint/no-non-null-assertion': 2,
|
|
59
|
+
'no-warning-comments': 1,
|
|
60
|
+
'@typescript-eslint/no-duplicate-enum-values': 1,
|
|
61
|
+
'no-only-tests/no-only-tests': 1,
|
|
62
|
+
'@typescript-eslint/strict-boolean-expressions': 2,
|
|
63
|
+
},
|
|
64
|
+
overrides: [
|
|
65
|
+
{
|
|
66
|
+
files: ['**/__tests__/**', './src/tests/**'],
|
|
67
|
+
rules: {
|
|
68
|
+
'@typescript-eslint/no-explicit-any': 0,
|
|
69
|
+
'@typescript-eslint/no-unsafe-member-access': 0,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
};
|
package/.prettierrc.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
default: true,
|
|
3
|
+
'editor.formatOnSave': true,
|
|
4
|
+
'eslint.autoFixOnSave': true,
|
|
5
|
+
bracketSpacing: true,
|
|
6
|
+
singleQuote: true,
|
|
7
|
+
trailingComma: 'all',
|
|
8
|
+
arrowParens: 'avoid',
|
|
9
|
+
'eslint.validate': [
|
|
10
|
+
'javascript',
|
|
11
|
+
'javascriptreact',
|
|
12
|
+
{
|
|
13
|
+
language: 'typescript',
|
|
14
|
+
autoFix: true,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
language: 'typescriptreact',
|
|
18
|
+
autoFix: true,
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
};
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 MATRIX Project Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the “Software”), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# MATRIX Wallet SDK
|
|
2
|
+
|
|
3
|
+
The MATRIX Wallet SDK is an open-source project developed by [MATRIX] contributors.
|
|
4
|
+
|
|
5
|
+
The Wallet SDK enables dApp and DeFi developers to provide privacy to users safely and conveniently on Ethereum, Polygon and BNB Chain.
|
|
6
|
+
|
|
7
|
+
The repo is written in TypeScript, and compatible with node.js and modern web browsers.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const chai_1 = require("chai");
|
|
7
|
+
const index_1 = __importDefault(require("../index"));
|
|
8
|
+
describe('index', () => {
|
|
9
|
+
it('Should load main for test', async () => {
|
|
10
|
+
(0, chai_1.expect)(index_1.default).to.deep.equal({});
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":";;;;;AAAA,+BAA8B;AAC9B,qDAA6B;AAE7B,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,IAAA,aAAM,EAAC,eAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { expect } from 'chai';\nimport index from '../index';\n\ndescribe('index', () => {\n it('Should load main for test', async () => {\n expect(index).to.deep.equal({});\n });\n});\n"]}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./services"), exports);
|
|
18
|
+
__exportStar(require("./utils"), exports);
|
|
19
|
+
exports.default = {};
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,0CAAwB;AAExB,kBAAe,EAAE,CAAC","sourcesContent":["export * from './services';\nexport * from './utils';\n\nexport default {};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
/// <reference types="../../../types/global" />
|
|
7
|
+
const chai_1 = __importDefault(require("chai"));
|
|
8
|
+
const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
|
|
9
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
10
|
+
const setup_test_1 = require("../../../tests/setup.test");
|
|
11
|
+
const artifacts_1 = require("../../matrix/core/artifacts");
|
|
12
|
+
const artifact_util_1 = require("../artifact-util");
|
|
13
|
+
chai_1.default.use(chai_as_promised_1.default);
|
|
14
|
+
const { expect } = chai_1.default;
|
|
15
|
+
describe('artifact-downloader', () => {
|
|
16
|
+
before(async () => {
|
|
17
|
+
const useNativeArtifacts = false;
|
|
18
|
+
await (0, setup_test_1.initTestEngine)(useNativeArtifacts);
|
|
19
|
+
});
|
|
20
|
+
it('Should set and get artifacts', async () => {
|
|
21
|
+
(0, artifacts_1.setUseNativeArtifacts)(false);
|
|
22
|
+
(0, artifacts_1.clearArtifactCache)();
|
|
23
|
+
const inputs11By2 = {
|
|
24
|
+
nullifiers: [
|
|
25
|
+
BigInt(1),
|
|
26
|
+
BigInt(1),
|
|
27
|
+
BigInt(1),
|
|
28
|
+
BigInt(1),
|
|
29
|
+
BigInt(1),
|
|
30
|
+
BigInt(1),
|
|
31
|
+
BigInt(1),
|
|
32
|
+
BigInt(1),
|
|
33
|
+
BigInt(1),
|
|
34
|
+
BigInt(1),
|
|
35
|
+
BigInt(1),
|
|
36
|
+
],
|
|
37
|
+
merkleRoot: BigInt(0),
|
|
38
|
+
boundParamsHash: BigInt(0),
|
|
39
|
+
commitmentsOut: [BigInt(0), BigInt(1)],
|
|
40
|
+
};
|
|
41
|
+
await expect(artifacts_1.artifactGetterDownloadJustInTime.getArtifacts(inputs11By2)).to.be.rejectedWith('No artifacts for inputs: 11-2');
|
|
42
|
+
const mockArtifact = {
|
|
43
|
+
[shared_models_1.ArtifactName.ZKEY]: Buffer.from('123'),
|
|
44
|
+
[shared_models_1.ArtifactName.WASM]: Buffer.from('456'),
|
|
45
|
+
[shared_models_1.ArtifactName.DAT]: undefined,
|
|
46
|
+
[shared_models_1.ArtifactName.VKEY]: { data: '789' },
|
|
47
|
+
};
|
|
48
|
+
const artifactVariantString2by2 = (0, artifact_util_1.getArtifactVariantString)(2, 2);
|
|
49
|
+
(0, artifacts_1.overrideArtifact)(artifactVariantString2by2, mockArtifact);
|
|
50
|
+
// Pre-set in test.
|
|
51
|
+
const inputs2By2 = {
|
|
52
|
+
nullifiers: [BigInt(1), BigInt(2)],
|
|
53
|
+
merkleRoot: BigInt(0),
|
|
54
|
+
boundParamsHash: BigInt(0),
|
|
55
|
+
commitmentsOut: [BigInt(0), BigInt(1)],
|
|
56
|
+
};
|
|
57
|
+
await expect(artifacts_1.artifactGetterDownloadJustInTime.getArtifacts(inputs2By2)).to
|
|
58
|
+
.be.fulfilled;
|
|
59
|
+
});
|
|
60
|
+
it('Should download artifacts - snarkjs', async () => {
|
|
61
|
+
(0, artifacts_1.setUseNativeArtifacts)(false);
|
|
62
|
+
(0, artifacts_1.clearArtifactCache)();
|
|
63
|
+
// Requires download.
|
|
64
|
+
const inputs = {
|
|
65
|
+
nullifiers: [
|
|
66
|
+
BigInt(1),
|
|
67
|
+
BigInt(1),
|
|
68
|
+
BigInt(1),
|
|
69
|
+
BigInt(1),
|
|
70
|
+
BigInt(1),
|
|
71
|
+
BigInt(1),
|
|
72
|
+
BigInt(1),
|
|
73
|
+
BigInt(1),
|
|
74
|
+
],
|
|
75
|
+
merkleRoot: BigInt(0),
|
|
76
|
+
boundParamsHash: BigInt(0),
|
|
77
|
+
commitmentsOut: [BigInt(0), BigInt(1)],
|
|
78
|
+
};
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
80
|
+
const artifacts = await artifacts_1.artifactGetterDownloadJustInTime.getArtifacts(inputs);
|
|
81
|
+
expect(artifacts.vkey).to.not.be.undefined;
|
|
82
|
+
expect(artifacts.zkey).to.not.be.undefined;
|
|
83
|
+
expect(artifacts.wasm).to.not.be.undefined;
|
|
84
|
+
expect(artifacts.dat).to.be.undefined;
|
|
85
|
+
const cached = artifacts_1.artifactCache['08x02'];
|
|
86
|
+
expect(cached?.vkey).to.not.be.undefined;
|
|
87
|
+
expect(cached?.zkey).to.not.be.undefined;
|
|
88
|
+
expect(cached?.wasm).to.not.be.undefined;
|
|
89
|
+
expect(cached?.dat).to.be.undefined;
|
|
90
|
+
}).timeout(30000);
|
|
91
|
+
it('Should download artifacts - native', async () => {
|
|
92
|
+
(0, artifacts_1.setUseNativeArtifacts)(true);
|
|
93
|
+
(0, artifacts_1.clearArtifactCache)();
|
|
94
|
+
// Requires download.
|
|
95
|
+
const inputs = {
|
|
96
|
+
nullifiers: [
|
|
97
|
+
BigInt(1),
|
|
98
|
+
BigInt(1),
|
|
99
|
+
BigInt(1),
|
|
100
|
+
BigInt(1),
|
|
101
|
+
BigInt(1),
|
|
102
|
+
BigInt(1),
|
|
103
|
+
],
|
|
104
|
+
merkleRoot: BigInt(0),
|
|
105
|
+
boundParamsHash: BigInt(0),
|
|
106
|
+
commitmentsOut: [BigInt(0), BigInt(1), BigInt(1)],
|
|
107
|
+
};
|
|
108
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
109
|
+
const artifacts = await artifacts_1.artifactGetterDownloadJustInTime.getArtifacts(inputs);
|
|
110
|
+
expect(artifacts.vkey).to.not.be.undefined;
|
|
111
|
+
expect(artifacts.zkey).to.not.be.undefined;
|
|
112
|
+
expect(artifacts.wasm).to.be.undefined;
|
|
113
|
+
expect(artifacts.dat).to.not.be.undefined;
|
|
114
|
+
const cached = artifacts_1.artifactCache['06x03'];
|
|
115
|
+
expect(cached?.vkey).to.not.be.undefined;
|
|
116
|
+
expect(cached?.zkey).to.not.be.undefined;
|
|
117
|
+
expect(cached?.wasm).to.be.undefined;
|
|
118
|
+
expect(cached?.dat).to.not.be.undefined;
|
|
119
|
+
}).timeout(30000);
|
|
120
|
+
// Skipped because we don't want to run this on every build.
|
|
121
|
+
it.skip('Should download ALL artifacts - native and nodejs', async () => {
|
|
122
|
+
(0, artifacts_1.setUseNativeArtifacts)(true);
|
|
123
|
+
(0, artifacts_1.clearArtifactCache)();
|
|
124
|
+
for (let i = 1; i <= 10; i += 1) {
|
|
125
|
+
for (let j = 1; j <= 3; j += 1) {
|
|
126
|
+
if (i === 10 && j === 5) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// console.log(`NATIVE: ${i}x${j}...`);
|
|
130
|
+
const inputs = {
|
|
131
|
+
nullifiers: new Array(i),
|
|
132
|
+
merkleRoot: BigInt(0),
|
|
133
|
+
boundParamsHash: BigInt(0),
|
|
134
|
+
commitmentsOut: new Array(j),
|
|
135
|
+
};
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
137
|
+
const artifacts =
|
|
138
|
+
// eslint-disable-next-line no-await-in-loop
|
|
139
|
+
await artifacts_1.artifactGetterDownloadJustInTime.getArtifacts(inputs);
|
|
140
|
+
expect(artifacts.vkey).to.not.be.undefined;
|
|
141
|
+
expect(artifacts.zkey).to.not.be.undefined;
|
|
142
|
+
expect(artifacts.wasm).to.be.undefined;
|
|
143
|
+
expect(artifacts.dat).to.not.be.undefined;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
(0, artifacts_1.clearArtifactCache)();
|
|
147
|
+
(0, artifacts_1.setUseNativeArtifacts)(false);
|
|
148
|
+
for (let i = 1; i <= 10; i += 1) {
|
|
149
|
+
for (let j = 1; j <= 5; j += 1) {
|
|
150
|
+
if (i === 10 && j === 5) {
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
// console.log(`NODEJS: ${i}x${j}...`);
|
|
154
|
+
const inputs = {
|
|
155
|
+
nullifiers: new Array(i),
|
|
156
|
+
merkleRoot: BigInt(0),
|
|
157
|
+
boundParamsHash: BigInt(0),
|
|
158
|
+
commitmentsOut: new Array(j),
|
|
159
|
+
};
|
|
160
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
161
|
+
const artifacts =
|
|
162
|
+
// eslint-disable-next-line no-await-in-loop
|
|
163
|
+
await artifacts_1.artifactGetterDownloadJustInTime.getArtifacts(inputs);
|
|
164
|
+
expect(artifacts.vkey).to.not.be.undefined;
|
|
165
|
+
expect(artifacts.zkey).to.not.be.undefined;
|
|
166
|
+
expect(artifacts.wasm).to.not.be.undefined;
|
|
167
|
+
expect(artifacts.dat).to.be.undefined;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}).timeout(30000);
|
|
171
|
+
});
|
|
172
|
+
//# sourceMappingURL=artifact-downloader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-downloader.test.js","sourceRoot":"","sources":["../../../../src/services/artifacts/__tests__/artifact-downloader.test.ts"],"names":[],"mappings":";;;;;AAAA,+CAA+C;AAC/C,gDAAwB;AACxB,wEAA8C;AAC9C,iEAAuE;AACvE,0DAA2D;AAC3D,2DAMqC;AAErC,oDAA4D;AAE5D,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AACzB,MAAM,EAAE,MAAM,EAAE,GAAG,cAAI,CAAC;AAExB,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,kBAAkB,GAAG,KAAK,CAAC;QACjC,MAAM,IAAA,2BAAc,EAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,IAAA,iCAAqB,EAAC,KAAK,CAAC,CAAC;QAE7B,IAAA,8BAAkB,GAAE,CAAC;QAErB,MAAM,WAAW,GAAuB;YACtC,UAAU,EAAE;gBACV,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;aACV;YACD,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACrB,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1B,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC;QACF,MAAM,MAAM,CACV,4CAAgC,CAAC,YAAY,CAAC,WAAW,CAAC,CAC3D,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC;QAEtD,MAAM,YAAY,GAAa;YAC7B,CAAC,4BAAY,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACvC,CAAC,4BAAY,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACvC,CAAC,4BAAY,CAAC,GAAG,CAAC,EAAE,SAAS;YAC7B,CAAC,4BAAY,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SACrC,CAAC;QACF,MAAM,yBAAyB,GAAG,IAAA,wCAAwB,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,IAAA,4BAAgB,EAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;QAE1D,mBAAmB;QACnB,MAAM,UAAU,GAAuB;YACrC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAClC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACrB,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1B,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC;QACF,MAAM,MAAM,CAAC,4CAAgC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;aACvE,EAAE,CAAC,SAAS,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,IAAA,iCAAqB,EAAC,KAAK,CAAC,CAAC;QAE7B,IAAA,8BAAkB,GAAE,CAAC;QAErB,qBAAqB;QACrB,MAAM,MAAM,GAAuB;YACjC,UAAU,EAAE;gBACV,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;aACV;YACD,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACrB,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1B,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SACvC,CAAC;QAEF,mEAAmE;QACnE,MAAM,SAAS,GACb,MAAM,4CAAgC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE9D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAEtC,MAAM,MAAM,GAAG,yBAAa,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;IACtC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;IAEnB,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;QAClD,IAAA,iCAAqB,EAAC,IAAI,CAAC,CAAC;QAE5B,IAAA,8BAAkB,GAAE,CAAC;QAErB,qBAAqB;QACrB,MAAM,MAAM,GAAuB;YACjC,UAAU,EAAE;gBACV,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;gBACT,MAAM,CAAC,CAAC,CAAC;aACV;YACD,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACrB,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1B,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;SAClD,CAAC;QAEF,mEAAmE;QACnE,MAAM,SAAS,GACb,MAAM,4CAAgC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE9D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACvC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QAE1C,MAAM,MAAM,GAAG,yBAAa,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACrC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;IAC1C,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;IAEnB,4DAA4D;IAC5D,EAAE,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACtE,IAAA,iCAAqB,EAAC,IAAI,CAAC,CAAC;QAE5B,IAAA,8BAAkB,GAAE,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACvB,SAAS;iBACV;gBAED,uCAAuC;gBAEvC,MAAM,MAAM,GAAuB;oBACjC,UAAU,EAAE,IAAI,KAAK,CAAS,CAAC,CAAC;oBAChC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;oBACrB,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC1B,cAAc,EAAE,IAAI,KAAK,CAAS,CAAC,CAAC;iBACrC,CAAC;gBAEF,mEAAmE;gBACnE,MAAM,SAAS;gBACb,4CAA4C;gBAC5C,MAAM,4CAAgC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAE9D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;gBACvC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;aAC3C;SACF;QAED,IAAA,8BAAkB,GAAE,CAAC;QACrB,IAAA,iCAAqB,EAAC,KAAK,CAAC,CAAC;QAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC9B,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;oBACvB,SAAS;iBACV;gBAED,uCAAuC;gBAEvC,MAAM,MAAM,GAAuB;oBACjC,UAAU,EAAE,IAAI,KAAK,CAAS,CAAC,CAAC;oBAChC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;oBACrB,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;oBAC1B,cAAc,EAAE,IAAI,KAAK,CAAS,CAAC,CAAC;iBACrC,CAAC;gBAEF,mEAAmE;gBACnE,MAAM,SAAS;gBACb,4CAA4C;gBAC5C,MAAM,4CAAgC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAE9D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC;gBAC3C,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;aACvC;SACF;IACH,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC","sourcesContent":["/// <reference types=\"../../../types/global\" />\nimport chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport { Artifact, ArtifactName } from '@matrix-privacy/shared-models';\nimport { initTestEngine } from '../../../tests/setup.test';\nimport {\n clearArtifactCache,\n overrideArtifact,\n artifactGetterDownloadJustInTime,\n artifactCache,\n setUseNativeArtifacts,\n} from '../../matrix/core/artifacts';\nimport { PublicInputsMatrix } from '@matrix-privacy/engine';\nimport { getArtifactVariantString } from '../artifact-util';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\ndescribe('artifact-downloader', () => {\n before(async () => {\n const useNativeArtifacts = false;\n await initTestEngine(useNativeArtifacts);\n });\n\n it('Should set and get artifacts', async () => {\n setUseNativeArtifacts(false);\n\n clearArtifactCache();\n\n const inputs11By2: PublicInputsMatrix = {\n nullifiers: [\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n ],\n merkleRoot: BigInt(0),\n boundParamsHash: BigInt(0),\n commitmentsOut: [BigInt(0), BigInt(1)],\n };\n await expect(\n artifactGetterDownloadJustInTime.getArtifacts(inputs11By2),\n ).to.be.rejectedWith('No artifacts for inputs: 11-2');\n\n const mockArtifact: Artifact = {\n [ArtifactName.ZKEY]: Buffer.from('123'),\n [ArtifactName.WASM]: Buffer.from('456'),\n [ArtifactName.DAT]: undefined,\n [ArtifactName.VKEY]: { data: '789' },\n };\n const artifactVariantString2by2 = getArtifactVariantString(2, 2);\n overrideArtifact(artifactVariantString2by2, mockArtifact);\n\n // Pre-set in test.\n const inputs2By2: PublicInputsMatrix = {\n nullifiers: [BigInt(1), BigInt(2)],\n merkleRoot: BigInt(0),\n boundParamsHash: BigInt(0),\n commitmentsOut: [BigInt(0), BigInt(1)],\n };\n await expect(artifactGetterDownloadJustInTime.getArtifacts(inputs2By2)).to\n .be.fulfilled;\n });\n\n it('Should download artifacts - snarkjs', async () => {\n setUseNativeArtifacts(false);\n\n clearArtifactCache();\n\n // Requires download.\n const inputs: PublicInputsMatrix = {\n nullifiers: [\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n ],\n merkleRoot: BigInt(0),\n boundParamsHash: BigInt(0),\n commitmentsOut: [BigInt(0), BigInt(1)],\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const artifacts: Artifact =\n await artifactGetterDownloadJustInTime.getArtifacts(inputs);\n\n expect(artifacts.vkey).to.not.be.undefined;\n expect(artifacts.zkey).to.not.be.undefined;\n expect(artifacts.wasm).to.not.be.undefined;\n expect(artifacts.dat).to.be.undefined;\n\n const cached = artifactCache['08x02'];\n expect(cached?.vkey).to.not.be.undefined;\n expect(cached?.zkey).to.not.be.undefined;\n expect(cached?.wasm).to.not.be.undefined;\n expect(cached?.dat).to.be.undefined;\n }).timeout(30_000);\n\n it('Should download artifacts - native', async () => {\n setUseNativeArtifacts(true);\n\n clearArtifactCache();\n\n // Requires download.\n const inputs: PublicInputsMatrix = {\n nullifiers: [\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n BigInt(1),\n ],\n merkleRoot: BigInt(0),\n boundParamsHash: BigInt(0),\n commitmentsOut: [BigInt(0), BigInt(1), BigInt(1)],\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const artifacts: Artifact =\n await artifactGetterDownloadJustInTime.getArtifacts(inputs);\n\n expect(artifacts.vkey).to.not.be.undefined;\n expect(artifacts.zkey).to.not.be.undefined;\n expect(artifacts.wasm).to.be.undefined;\n expect(artifacts.dat).to.not.be.undefined;\n\n const cached = artifactCache['06x03'];\n expect(cached?.vkey).to.not.be.undefined;\n expect(cached?.zkey).to.not.be.undefined;\n expect(cached?.wasm).to.be.undefined;\n expect(cached?.dat).to.not.be.undefined;\n }).timeout(30_000);\n\n // Skipped because we don't want to run this on every build.\n it.skip('Should download ALL artifacts - native and nodejs', async () => {\n setUseNativeArtifacts(true);\n\n clearArtifactCache();\n\n for (let i = 1; i <= 10; i += 1) {\n for (let j = 1; j <= 3; j += 1) {\n if (i === 10 && j === 5) {\n continue;\n }\n\n // console.log(`NATIVE: ${i}x${j}...`);\n\n const inputs: PublicInputsMatrix = {\n nullifiers: new Array<bigint>(i),\n merkleRoot: BigInt(0),\n boundParamsHash: BigInt(0),\n commitmentsOut: new Array<bigint>(j),\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const artifacts: Artifact =\n // eslint-disable-next-line no-await-in-loop\n await artifactGetterDownloadJustInTime.getArtifacts(inputs);\n\n expect(artifacts.vkey).to.not.be.undefined;\n expect(artifacts.zkey).to.not.be.undefined;\n expect(artifacts.wasm).to.be.undefined;\n expect(artifacts.dat).to.not.be.undefined;\n }\n }\n\n clearArtifactCache();\n setUseNativeArtifacts(false);\n\n for (let i = 1; i <= 10; i += 1) {\n for (let j = 1; j <= 5; j += 1) {\n if (i === 10 && j === 5) {\n continue;\n }\n\n // console.log(`NODEJS: ${i}x${j}...`);\n\n const inputs: PublicInputsMatrix = {\n nullifiers: new Array<bigint>(i),\n merkleRoot: BigInt(0),\n boundParamsHash: BigInt(0),\n commitmentsOut: new Array<bigint>(j),\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const artifacts: Artifact =\n // eslint-disable-next-line no-await-in-loop\n await artifactGetterDownloadJustInTime.getArtifacts(inputs);\n\n expect(artifacts.vkey).to.not.be.undefined;\n expect(artifacts.zkey).to.not.be.undefined;\n expect(artifacts.wasm).to.not.be.undefined;\n expect(artifacts.dat).to.be.undefined;\n }\n }\n }).timeout(30_000);\n});\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Artifact } from '@matrix-privacy/shared-models';
|
|
2
|
+
import { ArtifactStore } from './artifact-store';
|
|
3
|
+
export declare class ArtifactDownloader {
|
|
4
|
+
private artifactStore;
|
|
5
|
+
private useNativeArtifacts;
|
|
6
|
+
constructor(artifactStore: ArtifactStore, useNativeArtifacts: boolean);
|
|
7
|
+
downloadArtifacts: (artifactVariantString: string) => Promise<void>;
|
|
8
|
+
private downloadArtifact;
|
|
9
|
+
private static getArtifactData;
|
|
10
|
+
private static artifactResponseType;
|
|
11
|
+
private getDownloadedArtifact;
|
|
12
|
+
getDownloadedArtifacts: (artifactVariantString: string) => Promise<Artifact>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ArtifactDownloader = void 0;
|
|
7
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
|
+
const artifact_util_1 = require("./artifact-util");
|
|
10
|
+
const error_1 = require("../../utils/error");
|
|
11
|
+
const logger_1 = require("../../utils/logger");
|
|
12
|
+
const artifact_hash_1 = require("./artifact-hash");
|
|
13
|
+
class ArtifactDownloader {
|
|
14
|
+
artifactStore;
|
|
15
|
+
useNativeArtifacts;
|
|
16
|
+
constructor(artifactStore, useNativeArtifacts) {
|
|
17
|
+
this.artifactStore = artifactStore;
|
|
18
|
+
this.useNativeArtifacts = useNativeArtifacts;
|
|
19
|
+
}
|
|
20
|
+
downloadArtifacts = async (artifactVariantString) => {
|
|
21
|
+
(0, logger_1.sendMessage)(`Downloading artifacts: ${artifactVariantString}`);
|
|
22
|
+
const [vkeyPath, zkeyPath, wasmOrDatPath] = await (0, shared_models_1.promiseTimeout)(Promise.all([
|
|
23
|
+
this.downloadArtifact(shared_models_1.ArtifactName.VKEY, artifactVariantString),
|
|
24
|
+
this.downloadArtifact(shared_models_1.ArtifactName.ZKEY, artifactVariantString),
|
|
25
|
+
this.downloadArtifact(this.useNativeArtifacts ? shared_models_1.ArtifactName.DAT : shared_models_1.ArtifactName.WASM, artifactVariantString),
|
|
26
|
+
]), 45000, new Error(`Timed out downloading artifact files for ${artifactVariantString} circuit. Please try again.`));
|
|
27
|
+
if (!(0, shared_models_1.isDefined)(vkeyPath)) {
|
|
28
|
+
throw new Error('Could not download vkey artifact.');
|
|
29
|
+
}
|
|
30
|
+
if (!(0, shared_models_1.isDefined)(zkeyPath)) {
|
|
31
|
+
throw new Error('Could not download zkey artifact.');
|
|
32
|
+
}
|
|
33
|
+
if (!(0, shared_models_1.isDefined)(wasmOrDatPath)) {
|
|
34
|
+
throw new Error(this.useNativeArtifacts
|
|
35
|
+
? 'Could not download dat artifact.'
|
|
36
|
+
: 'Could not download wasm artifact.');
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
downloadArtifact = async (artifactName, artifactVariantString) => {
|
|
40
|
+
const path = (0, artifact_util_1.artifactDownloadsPath)(artifactName, artifactVariantString);
|
|
41
|
+
if (await this.artifactStore.exists(path)) {
|
|
42
|
+
return path;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const url = (0, artifact_util_1.getArtifactUrl)(artifactName, artifactVariantString);
|
|
46
|
+
const { data } = await axios_1.default.get(url, {
|
|
47
|
+
method: 'GET',
|
|
48
|
+
responseType: ArtifactDownloader.artifactResponseType(artifactName),
|
|
49
|
+
});
|
|
50
|
+
// NodeJS downloads as Buffer.
|
|
51
|
+
// Browser downloads as ArrayBuffer.
|
|
52
|
+
// Both will validate with the same hash.
|
|
53
|
+
let dataFormatted;
|
|
54
|
+
if (data instanceof ArrayBuffer || data instanceof Buffer) {
|
|
55
|
+
dataFormatted = data;
|
|
56
|
+
}
|
|
57
|
+
else if (typeof data === 'object') {
|
|
58
|
+
dataFormatted = JSON.stringify(data);
|
|
59
|
+
}
|
|
60
|
+
else if (typeof data === 'string') {
|
|
61
|
+
dataFormatted = JSON.stringify(JSON.parse(data));
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
throw new Error('Unexpected response data type');
|
|
65
|
+
}
|
|
66
|
+
const decompressedData = ArtifactDownloader.getArtifactData(dataFormatted, artifactName);
|
|
67
|
+
const isValid = await (0, artifact_hash_1.validateArtifactDownload)(decompressedData, artifactName, artifactVariantString);
|
|
68
|
+
if (isValid) {
|
|
69
|
+
await this.artifactStore.store((0, artifact_util_1.artifactDownloadsDir)(artifactVariantString), path, decompressedData);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
throw new Error(`Invalid hash for artifact download: ${artifactName} for ${artifactVariantString}.`);
|
|
73
|
+
}
|
|
74
|
+
return path;
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
throw (0, error_1.reportAndSanitizeError)(this.downloadArtifact.name, err);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
static getArtifactData = (data, artifactName) => {
|
|
81
|
+
switch (artifactName) {
|
|
82
|
+
case shared_models_1.ArtifactName.VKEY:
|
|
83
|
+
return data;
|
|
84
|
+
case shared_models_1.ArtifactName.ZKEY:
|
|
85
|
+
case shared_models_1.ArtifactName.DAT:
|
|
86
|
+
case shared_models_1.ArtifactName.WASM:
|
|
87
|
+
return (0, artifact_util_1.decompressArtifact)(data);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
static artifactResponseType = (artifactName) => {
|
|
91
|
+
switch (artifactName) {
|
|
92
|
+
case shared_models_1.ArtifactName.VKEY:
|
|
93
|
+
return 'text';
|
|
94
|
+
case shared_models_1.ArtifactName.ZKEY:
|
|
95
|
+
case shared_models_1.ArtifactName.DAT:
|
|
96
|
+
case shared_models_1.ArtifactName.WASM:
|
|
97
|
+
return 'arraybuffer';
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
getDownloadedArtifact = async (path) => {
|
|
101
|
+
try {
|
|
102
|
+
const storedItem = await this.artifactStore.get(path);
|
|
103
|
+
return storedItem;
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
getDownloadedArtifacts = async (artifactVariantString) => {
|
|
110
|
+
const artifactDownloadsPaths = (0, artifact_util_1.getArtifactDownloadsPaths)(artifactVariantString);
|
|
111
|
+
const [vkeyString, zkeyBuffer, datBuffer, wasmBuffer] = await Promise.all([
|
|
112
|
+
this.getDownloadedArtifact(artifactDownloadsPaths[shared_models_1.ArtifactName.VKEY]),
|
|
113
|
+
this.getDownloadedArtifact(artifactDownloadsPaths[shared_models_1.ArtifactName.ZKEY]),
|
|
114
|
+
this.useNativeArtifacts
|
|
115
|
+
? this.getDownloadedArtifact(artifactDownloadsPaths[shared_models_1.ArtifactName.DAT])
|
|
116
|
+
: Promise.resolve(undefined),
|
|
117
|
+
!this.useNativeArtifacts
|
|
118
|
+
? this.getDownloadedArtifact(artifactDownloadsPaths[shared_models_1.ArtifactName.WASM])
|
|
119
|
+
: Promise.resolve(undefined),
|
|
120
|
+
]);
|
|
121
|
+
if (vkeyString == null) {
|
|
122
|
+
throw new Error('Could not retrieve vkey artifact.');
|
|
123
|
+
}
|
|
124
|
+
if (zkeyBuffer == null) {
|
|
125
|
+
throw new Error('Could not retrieve zkey artifact.');
|
|
126
|
+
}
|
|
127
|
+
if (this.useNativeArtifacts && datBuffer == null) {
|
|
128
|
+
throw new Error('Could not retrieve dat artifact.');
|
|
129
|
+
}
|
|
130
|
+
if (!this.useNativeArtifacts && wasmBuffer == null) {
|
|
131
|
+
throw new Error('Could not retrieve wasm artifact.');
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
vkey: JSON.parse(vkeyString),
|
|
135
|
+
zkey: zkeyBuffer,
|
|
136
|
+
wasm: wasmBuffer,
|
|
137
|
+
dat: datBuffer,
|
|
138
|
+
};
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
exports.ArtifactDownloader = ArtifactDownloader;
|
|
142
|
+
//# sourceMappingURL=artifact-downloader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-downloader.js","sourceRoot":"","sources":["../../../src/services/artifacts/artifact-downloader.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Artifact,\n ArtifactName,\n isDefined,\n promiseTimeout,\n} from '@matrix-privacy/shared-models';\nimport axios, { ResponseType } from 'axios';\nimport {\n artifactDownloadsDir,\n artifactDownloadsPath,\n decompressArtifact,\n getArtifactDownloadsPaths,\n getArtifactUrl,\n} from './artifact-util';\nimport { ArtifactStore } from './artifact-store';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { sendMessage } from '../../utils/logger';\nimport { validateArtifactDownload } from './artifact-hash';\n\nexport class ArtifactDownloader {\n private artifactStore: ArtifactStore;\n private useNativeArtifacts: boolean;\n\n constructor(artifactStore: ArtifactStore, useNativeArtifacts: boolean) {\n this.artifactStore = artifactStore;\n this.useNativeArtifacts = useNativeArtifacts;\n }\n\n downloadArtifacts = async (artifactVariantString: string): Promise<void> => {\n sendMessage(`Downloading artifacts: ${artifactVariantString}`);\n\n const [vkeyPath, zkeyPath, wasmOrDatPath] = await promiseTimeout(\n Promise.all([\n this.downloadArtifact(ArtifactName.VKEY, artifactVariantString),\n this.downloadArtifact(ArtifactName.ZKEY, artifactVariantString),\n this.downloadArtifact(\n this.useNativeArtifacts ? ArtifactName.DAT : ArtifactName.WASM,\n artifactVariantString,\n ),\n ]),\n 45000,\n new Error(\n `Timed out downloading artifact files for ${artifactVariantString} circuit. Please try again.`,\n ),\n );\n\n if (!isDefined(vkeyPath)) {\n throw new Error('Could not download vkey artifact.');\n }\n if (!isDefined(zkeyPath)) {\n throw new Error('Could not download zkey artifact.');\n }\n if (!isDefined(wasmOrDatPath)) {\n throw new Error(\n this.useNativeArtifacts\n ? 'Could not download dat artifact.'\n : 'Could not download wasm artifact.',\n );\n }\n };\n\n private downloadArtifact = async (\n artifactName: ArtifactName,\n artifactVariantString: string,\n ): Promise<string | undefined> => {\n const path = artifactDownloadsPath(artifactName, artifactVariantString);\n if (await this.artifactStore.exists(path)) {\n return path;\n }\n try {\n const url = getArtifactUrl(artifactName, artifactVariantString);\n\n const { data } = await axios.get<ArrayBuffer | Buffer | object>(url, {\n method: 'GET',\n responseType: ArtifactDownloader.artifactResponseType(artifactName),\n });\n\n // NodeJS downloads as Buffer.\n // Browser downloads as ArrayBuffer.\n // Both will validate with the same hash.\n\n let dataFormatted: ArrayBuffer | Buffer | string;\n\n if (data instanceof ArrayBuffer || data instanceof Buffer) {\n dataFormatted = data;\n } else if (typeof data === 'object') {\n dataFormatted = JSON.stringify(data);\n } else if (typeof data === 'string') {\n dataFormatted = JSON.stringify(JSON.parse(data));\n } else {\n throw new Error('Unexpected response data type');\n }\n\n const decompressedData = ArtifactDownloader.getArtifactData(\n dataFormatted,\n artifactName,\n );\n\n const isValid = await validateArtifactDownload(\n decompressedData,\n artifactName,\n artifactVariantString,\n );\n if (isValid) {\n await this.artifactStore.store(\n artifactDownloadsDir(artifactVariantString),\n path,\n decompressedData,\n );\n } else {\n throw new Error(\n `Invalid hash for artifact download: ${artifactName} for ${artifactVariantString}.`,\n );\n }\n\n return path;\n } catch (err) {\n throw reportAndSanitizeError(this.downloadArtifact.name, err);\n }\n };\n\n private static getArtifactData = (\n data: string | ArrayBuffer,\n artifactName: ArtifactName,\n ): string | Uint8Array => {\n switch (artifactName) {\n case ArtifactName.VKEY:\n return data as string;\n case ArtifactName.ZKEY:\n case ArtifactName.DAT:\n case ArtifactName.WASM:\n return decompressArtifact(data as ArrayBuffer);\n }\n };\n\n private static artifactResponseType = (\n artifactName: ArtifactName,\n ): ResponseType => {\n switch (artifactName) {\n case ArtifactName.VKEY:\n return 'text';\n case ArtifactName.ZKEY:\n case ArtifactName.DAT:\n case ArtifactName.WASM:\n return 'arraybuffer';\n }\n };\n\n private getDownloadedArtifact = async (\n path: string,\n ): Promise<string | Buffer | null> => {\n try {\n const storedItem = await this.artifactStore.get(path);\n return storedItem;\n } catch (err) {\n return null;\n }\n };\n\n getDownloadedArtifacts = async (\n artifactVariantString: string,\n ): Promise<Artifact> => {\n const artifactDownloadsPaths = getArtifactDownloadsPaths(\n artifactVariantString,\n );\n\n const [vkeyString, zkeyBuffer, datBuffer, wasmBuffer] = await Promise.all([\n this.getDownloadedArtifact(artifactDownloadsPaths[ArtifactName.VKEY]),\n this.getDownloadedArtifact(artifactDownloadsPaths[ArtifactName.ZKEY]),\n this.useNativeArtifacts\n ? this.getDownloadedArtifact(artifactDownloadsPaths[ArtifactName.DAT])\n : Promise.resolve(undefined),\n !this.useNativeArtifacts\n ? this.getDownloadedArtifact(artifactDownloadsPaths[ArtifactName.WASM])\n : Promise.resolve(undefined),\n ]);\n if (vkeyString == null) {\n throw new Error('Could not retrieve vkey artifact.');\n }\n if (zkeyBuffer == null) {\n throw new Error('Could not retrieve zkey artifact.');\n }\n if (this.useNativeArtifacts && datBuffer == null) {\n throw new Error('Could not retrieve dat artifact.');\n }\n if (!this.useNativeArtifacts && wasmBuffer == null) {\n throw new Error('Could not retrieve wasm artifact.');\n }\n\n return {\n vkey: JSON.parse(vkeyString as string),\n zkey: zkeyBuffer as Buffer,\n wasm: wasmBuffer as Buffer | undefined,\n dat: datBuffer as Buffer | undefined,\n };\n };\n}\n"]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.validateArtifactDownload = void 0;
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const shared_models_1 = require("@matrix-privacy/shared-models");
|
|
9
|
+
const sha256_js_1 = require("ethereum-cryptography/sha256.js");
|
|
10
|
+
const logger_1 = require("../../utils/logger");
|
|
11
|
+
const engine_1 = require("@matrix-privacy/engine");
|
|
12
|
+
const runtime_1 = require("../matrix/util/runtime");
|
|
13
|
+
const artifact_v2_hashes_json_1 = __importDefault(require("./json/artifact-v2-hashes.json"));
|
|
14
|
+
const getExpectedArtifactHash = (artifactName, artifactVariantString) => {
|
|
15
|
+
const hashes = artifact_v2_hashes_json_1.default;
|
|
16
|
+
const variantHashes = hashes[artifactVariantString];
|
|
17
|
+
if (!(0, shared_models_1.isDefined)(variantHashes)) {
|
|
18
|
+
throw new Error(`No hashes for variant ${artifactName}: ${artifactVariantString}`);
|
|
19
|
+
}
|
|
20
|
+
if (artifactName === shared_models_1.ArtifactName.VKEY) {
|
|
21
|
+
throw new Error(`No artifact hashes for vkey.`);
|
|
22
|
+
}
|
|
23
|
+
const hash = variantHashes[artifactName];
|
|
24
|
+
if (!hash) {
|
|
25
|
+
throw new Error(`No hash for artifact ${artifactName}: ${artifactVariantString}`);
|
|
26
|
+
}
|
|
27
|
+
return hash;
|
|
28
|
+
};
|
|
29
|
+
const getDataBytes = (data) => {
|
|
30
|
+
if (data instanceof Uint8Array) {
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
if (Buffer.isBuffer(data)) {
|
|
34
|
+
return data.buffer;
|
|
35
|
+
}
|
|
36
|
+
return engine_1.ByteUtils.hexStringToBytes(data);
|
|
37
|
+
};
|
|
38
|
+
const validateArtifactDownload = async (data, artifactName, artifactVariantString) => {
|
|
39
|
+
if (artifactName === shared_models_1.ArtifactName.VKEY) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
const dataBytes = getDataBytes(data);
|
|
43
|
+
const expectedHash = getExpectedArtifactHash(artifactName, artifactVariantString);
|
|
44
|
+
const hash = runtime_1.isReactNative
|
|
45
|
+
? engine_1.ByteUtils.hexlify((0, sha256_js_1.sha256)(dataBytes))
|
|
46
|
+
: (0, crypto_1.createHash)('sha256').update(dataBytes).digest('hex');
|
|
47
|
+
if (hash !== expectedHash) {
|
|
48
|
+
(0, logger_1.sendErrorMessage)(`Validate artifact blob for ${artifactName}: ${artifactVariantString}. Got ${hash}, expected ${expectedHash}.`);
|
|
49
|
+
}
|
|
50
|
+
return hash === expectedHash;
|
|
51
|
+
};
|
|
52
|
+
exports.validateArtifactDownload = validateArtifactDownload;
|
|
53
|
+
//# sourceMappingURL=artifact-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-hash.js","sourceRoot":"","sources":["../../../src/services/artifacts/artifact-hash.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAoC;AACpC,iEAAwE;AACxE,+DAAyD;AACzD,+CAAsD;AACtD,mDAAmD;AACnD,oDAAuD;AACvD,6FAAgE;AAOhE,MAAM,uBAAuB,GAAG,CAC9B,YAA0B,EAC1B,qBAA6B,EACrB,EAAE;IACV,MAAM,MAAM,GAAG,iCAAwC,CAAC;IACxD,MAAM,aAAa,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACpD,IAAI,CAAC,IAAA,yBAAS,EAAC,aAAa,CAAC,EAAE;QAC7B,MAAM,IAAI,KAAK,CACb,yBAAyB,YAAY,KAAK,qBAAqB,EAAE,CAClE,CAAC;KACH;IACD,IAAI,YAAY,KAAK,4BAAY,CAAC,IAAI,EAAE;QACtC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;KACjD;IACD,MAAM,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,IAAI,KAAK,CACb,wBAAwB,YAAY,KAAK,qBAAqB,EAAE,CACjE,CAAC;KACH;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAkC,EAAc,EAAE;IACtE,IAAI,IAAI,YAAY,UAAU,EAAE;QAC9B,OAAO,IAAI,CAAC;KACb;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACzB,OAAO,IAAI,CAAC,MAAoB,CAAC;KAClC;IACD,OAAO,kBAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEK,MAAM,wBAAwB,GAAG,KAAK,EAC3C,IAAkC,EAClC,YAA0B,EAC1B,qBAA6B,EACX,EAAE;IACpB,IAAI,YAAY,KAAK,4BAAY,CAAC,IAAI,EAAE;QACtC,OAAO,IAAI,CAAC;KACb;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,YAAY,GAAG,uBAAuB,CAC1C,YAAY,EACZ,qBAAqB,CACtB,CAAC;IACF,MAAM,IAAI,GAAG,uBAAa;QACxB,CAAC,CAAC,kBAAS,CAAC,OAAO,CAAC,IAAA,kBAAM,EAAC,SAAS,CAAC,CAAC;QACtC,CAAC,CAAC,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,IAAI,KAAK,YAAY,EAAE;QACzB,IAAA,yBAAgB,EACd,8BAA8B,YAAY,KAAK,qBAAqB,SAAS,IAAI,cAAc,YAAY,GAAG,CAC/G,CAAC;KACH;IACD,OAAO,IAAI,KAAK,YAAY,CAAC;AAC/B,CAAC,CAAC;AAtBW,QAAA,wBAAwB,4BAsBnC","sourcesContent":["import { createHash } from 'crypto';\nimport { ArtifactName, isDefined } from '@matrix-privacy/shared-models';\nimport { sha256 } from 'ethereum-cryptography/sha256.js';\nimport { sendErrorMessage } from '../../utils/logger';\nimport { ByteUtils } from '@matrix-privacy/engine';\nimport { isReactNative } from '../matrix/util/runtime';\nimport ARTIFACT_V2_HASHES from './json/artifact-v2-hashes.json';\n\ntype ArtifactHashesJson = Record<\n string,\n Record<ArtifactName.DAT | ArtifactName.WASM | ArtifactName.ZKEY, string>\n>;\n\nconst getExpectedArtifactHash = (\n artifactName: ArtifactName,\n artifactVariantString: string,\n): string => {\n const hashes = ARTIFACT_V2_HASHES as ArtifactHashesJson;\n const variantHashes = hashes[artifactVariantString];\n if (!isDefined(variantHashes)) {\n throw new Error(\n `No hashes for variant ${artifactName}: ${artifactVariantString}`,\n );\n }\n if (artifactName === ArtifactName.VKEY) {\n throw new Error(`No artifact hashes for vkey.`);\n }\n const hash = variantHashes[artifactName];\n if (!hash) {\n throw new Error(\n `No hash for artifact ${artifactName}: ${artifactVariantString}`,\n );\n }\n return hash;\n};\n\nconst getDataBytes = (data: Uint8Array | Buffer | string): Uint8Array => {\n if (data instanceof Uint8Array) {\n return data;\n }\n if (Buffer.isBuffer(data)) {\n return data.buffer as Uint8Array;\n }\n return ByteUtils.hexStringToBytes(data);\n};\n\nexport const validateArtifactDownload = async (\n data: Uint8Array | Buffer | string,\n artifactName: ArtifactName,\n artifactVariantString: string,\n): Promise<boolean> => {\n if (artifactName === ArtifactName.VKEY) {\n return true;\n }\n const dataBytes = getDataBytes(data);\n const expectedHash = getExpectedArtifactHash(\n artifactName,\n artifactVariantString,\n );\n const hash = isReactNative\n ? ByteUtils.hexlify(sha256(dataBytes))\n : createHash('sha256').update(dataBytes).digest('hex');\n if (hash !== expectedHash) {\n sendErrorMessage(\n `Validate artifact blob for ${artifactName}: ${artifactVariantString}. Got ${hash}, expected ${expectedHash}.`,\n );\n }\n return hash === expectedHash;\n};\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
type GetArtifact = (path: string) => Promise<string | Buffer | null>;
|
|
3
|
+
type StoreArtifact = (dir: string, path: string, item: string | Uint8Array) => Promise<void>;
|
|
4
|
+
type ArtifactExists = (path: string) => Promise<boolean>;
|
|
5
|
+
export declare class ArtifactStore {
|
|
6
|
+
get: GetArtifact;
|
|
7
|
+
store: StoreArtifact;
|
|
8
|
+
exists: ArtifactExists;
|
|
9
|
+
constructor(get: GetArtifact, store: StoreArtifact, exists: ArtifactExists);
|
|
10
|
+
}
|
|
11
|
+
export {};
|