dop-wallet-v6 1.1.5

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 (206) hide show
  1. package/.eslintrc.js +73 -0
  2. package/.prettierrc.js +21 -0
  3. package/LICENSE +21 -0
  4. package/README.md +2 -0
  5. package/dist/index.d.ts +4 -0
  6. package/dist/index.js +20 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/services/artifacts/artifact-downloader.d.ts +13 -0
  9. package/dist/services/artifacts/artifact-downloader.js +131 -0
  10. package/dist/services/artifacts/artifact-downloader.js.map +1 -0
  11. package/dist/services/artifacts/artifact-hash.d.ts +4 -0
  12. package/dist/services/artifacts/artifact-hash.js +54 -0
  13. package/dist/services/artifacts/artifact-hash.js.map +1 -0
  14. package/dist/services/artifacts/artifact-store.d.ts +12 -0
  15. package/dist/services/artifacts/artifact-store.js +12 -0
  16. package/dist/services/artifacts/artifact-store.js.map +1 -0
  17. package/dist/services/artifacts/artifact-util.d.ts +7 -0
  18. package/dist/services/artifacts/artifact-util.js +83 -0
  19. package/dist/services/artifacts/artifact-util.js.map +1 -0
  20. package/dist/services/artifacts/index.d.ts +2 -0
  21. package/dist/services/artifacts/index.js +19 -0
  22. package/dist/services/artifacts/index.js.map +1 -0
  23. package/dist/services/artifacts/json/artifact-v2-hashes.json +337 -0
  24. package/dist/services/dop/core/artifacts.d.ts +10 -0
  25. package/dist/services/dop/core/artifacts.js +69 -0
  26. package/dist/services/dop/core/artifacts.js.map +1 -0
  27. package/dist/services/dop/core/engine.d.ts +25 -0
  28. package/dist/services/dop/core/engine.js +103 -0
  29. package/dist/services/dop/core/engine.js.map +1 -0
  30. package/dist/services/dop/core/index.d.ts +5 -0
  31. package/dist/services/dop/core/index.js +22 -0
  32. package/dist/services/dop/core/index.js.map +1 -0
  33. package/dist/services/dop/core/prover.d.ts +3 -0
  34. package/dist/services/dop/core/prover.js +14 -0
  35. package/dist/services/dop/core/prover.js.map +1 -0
  36. package/dist/services/dop/core/providers.d.ts +18 -0
  37. package/dist/services/dop/core/providers.js +162 -0
  38. package/dist/services/dop/core/providers.js.map +1 -0
  39. package/dist/services/dop/core/shields.d.ts +7 -0
  40. package/dist/services/dop/core/shields.js +20 -0
  41. package/dist/services/dop/core/shields.js.map +1 -0
  42. package/dist/services/dop/history/transaction-history.d.ts +4 -0
  43. package/dist/services/dop/history/transaction-history.js +166 -0
  44. package/dist/services/dop/history/transaction-history.js.map +1 -0
  45. package/dist/services/dop/index.d.ts +4 -0
  46. package/dist/services/dop/index.js +21 -0
  47. package/dist/services/dop/index.js.map +1 -0
  48. package/dist/services/dop/process/extract-first-note.d.ts +6 -0
  49. package/dist/services/dop/process/extract-first-note.js +163 -0
  50. package/dist/services/dop/process/extract-first-note.js.map +1 -0
  51. package/dist/services/dop/process/index.d.ts +1 -0
  52. package/dist/services/dop/process/index.js +18 -0
  53. package/dist/services/dop/process/index.js.map +1 -0
  54. package/dist/services/dop/quick-sync/empty-events.d.ts +2 -0
  55. package/dist/services/dop/quick-sync/empty-events.js +9 -0
  56. package/dist/services/dop/quick-sync/empty-events.js.map +1 -0
  57. package/dist/services/dop/quick-sync/graph-type-formatters.d.ts +13 -0
  58. package/dist/services/dop/quick-sync/graph-type-formatters.js +168 -0
  59. package/dist/services/dop/quick-sync/graph-type-formatters.js.map +1 -0
  60. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/introspectionSchema.d.ts +2 -0
  61. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/introspectionSchema.js +24081 -0
  62. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/introspectionSchema.js.map +1 -0
  63. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/types.d.ts +1628 -0
  64. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/types.js +4 -0
  65. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-goerli/types.js.map +1 -0
  66. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/introspectionSchema.d.ts +2 -0
  67. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/introspectionSchema.js +24081 -0
  68. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/introspectionSchema.js.map +1 -0
  69. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/types.d.ts +1628 -0
  70. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/types.js +4 -0
  71. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/arbitrum-one/types.js.map +1 -0
  72. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/introspectionSchema.d.ts +2 -0
  73. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/introspectionSchema.js +24081 -0
  74. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/introspectionSchema.js.map +1 -0
  75. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/types.d.ts +1628 -0
  76. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/types.js +4 -0
  77. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/bsc/types.js.map +1 -0
  78. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/introspectionSchema.d.ts +2 -0
  79. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/introspectionSchema.js +24081 -0
  80. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/introspectionSchema.js.map +1 -0
  81. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/types.d.ts +1628 -0
  82. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/types.js +4 -0
  83. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/ethereum/types.js.map +1 -0
  84. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/introspectionSchema.d.ts +2 -0
  85. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/introspectionSchema.js +24081 -0
  86. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/introspectionSchema.js.map +1 -0
  87. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/types.d.ts +1628 -0
  88. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/types.js +4 -0
  89. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/goerli/types.js.map +1 -0
  90. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/introspectionSchema.d.ts +2 -0
  91. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/introspectionSchema.js +24081 -0
  92. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/introspectionSchema.js.map +1 -0
  93. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/types.d.ts +1628 -0
  94. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/types.js +4 -0
  95. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/matic/types.js.map +1 -0
  96. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/introspectionSchema.d.ts +2 -0
  97. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/introspectionSchema.js +24081 -0
  98. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/introspectionSchema.js.map +1 -0
  99. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/types.d.ts +1628 -0
  100. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/types.js +4 -0
  101. package/dist/services/dop/quick-sync/graphql/.graphclient/sources/mumbai/types.js.map +1 -0
  102. package/dist/services/dop/quick-sync/graphql/index.d.ts +1976 -0
  103. package/dist/services/dop/quick-sync/graphql/index.js +512 -0
  104. package/dist/services/dop/quick-sync/graphql/index.js.map +1 -0
  105. package/dist/services/dop/quick-sync/quick-sync-graph.d.ts +2 -0
  106. package/dist/services/dop/quick-sync/quick-sync-graph.js +150 -0
  107. package/dist/services/dop/quick-sync/quick-sync-graph.js.map +1 -0
  108. package/dist/services/dop/util/bytes.d.ts +5 -0
  109. package/dist/services/dop/util/bytes.js +21 -0
  110. package/dist/services/dop/util/bytes.js.map +1 -0
  111. package/dist/services/dop/util/commitment.d.ts +2 -0
  112. package/dist/services/dop/util/commitment.js +17 -0
  113. package/dist/services/dop/util/commitment.js.map +1 -0
  114. package/dist/services/dop/util/crypto.d.ts +14 -0
  115. package/dist/services/dop/util/crypto.js +79 -0
  116. package/dist/services/dop/util/crypto.js.map +1 -0
  117. package/dist/services/dop/util/db.d.ts +2 -0
  118. package/dist/services/dop/util/db.js +6 -0
  119. package/dist/services/dop/util/db.js.map +1 -0
  120. package/dist/services/dop/util/index.d.ts +4 -0
  121. package/dist/services/dop/util/index.js +21 -0
  122. package/dist/services/dop/util/index.js.map +1 -0
  123. package/dist/services/dop/wallets/balance-update.d.ts +8 -0
  124. package/dist/services/dop/wallets/balance-update.js +90 -0
  125. package/dist/services/dop/wallets/balance-update.js.map +1 -0
  126. package/dist/services/dop/wallets/balances.d.ts +6 -0
  127. package/dist/services/dop/wallets/balances.js +57 -0
  128. package/dist/services/dop/wallets/balances.js.map +1 -0
  129. package/dist/services/dop/wallets/index.d.ts +4 -0
  130. package/dist/services/dop/wallets/index.js +21 -0
  131. package/dist/services/dop/wallets/index.js.map +1 -0
  132. package/dist/services/dop/wallets/wallets.d.ts +19 -0
  133. package/dist/services/dop/wallets/wallets.js +226 -0
  134. package/dist/services/dop/wallets/wallets.js.map +1 -0
  135. package/dist/services/ethers/ethers-util.d.ts +1 -0
  136. package/dist/services/ethers/ethers-util.js +9 -0
  137. package/dist/services/ethers/ethers-util.js.map +1 -0
  138. package/dist/services/ethers/index.d.ts +1 -0
  139. package/dist/services/ethers/index.js +18 -0
  140. package/dist/services/ethers/index.js.map +1 -0
  141. package/dist/services/index.d.ts +4 -0
  142. package/dist/services/index.js +21 -0
  143. package/dist/services/index.js.map +1 -0
  144. package/dist/services/transactions/index.d.ts +13 -0
  145. package/dist/services/transactions/index.js +30 -0
  146. package/dist/services/transactions/index.js.map +1 -0
  147. package/dist/services/transactions/proof-cache.d.ts +27 -0
  148. package/dist/services/transactions/proof-cache.js +128 -0
  149. package/dist/services/transactions/proof-cache.js.map +1 -0
  150. package/dist/services/transactions/tx-cross-contract-calls.d.ts +9 -0
  151. package/dist/services/transactions/tx-cross-contract-calls.js +386 -0
  152. package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -0
  153. package/dist/services/transactions/tx-gas-details.d.ts +5 -0
  154. package/dist/services/transactions/tx-gas-details.js +120 -0
  155. package/dist/services/transactions/tx-gas-details.js.map +1 -0
  156. package/dist/services/transactions/tx-gas-relayer-fee-estimator.d.ts +2 -0
  157. package/dist/services/transactions/tx-gas-relayer-fee-estimator.js +209 -0
  158. package/dist/services/transactions/tx-gas-relayer-fee-estimator.js.map +1 -0
  159. package/dist/services/transactions/tx-generator.d.ts +9 -0
  160. package/dist/services/transactions/tx-generator.js +205 -0
  161. package/dist/services/transactions/tx-generator.js.map +1 -0
  162. package/dist/services/transactions/tx-notes.d.ts +10 -0
  163. package/dist/services/transactions/tx-notes.js +154 -0
  164. package/dist/services/transactions/tx-notes.js.map +1 -0
  165. package/dist/services/transactions/tx-nullifiers.d.ts +2 -0
  166. package/dist/services/transactions/tx-nullifiers.js +17 -0
  167. package/dist/services/transactions/tx-nullifiers.js.map +1 -0
  168. package/dist/services/transactions/tx-proof-transfer.d.ts +4 -0
  169. package/dist/services/transactions/tx-proof-transfer.js +49 -0
  170. package/dist/services/transactions/tx-proof-transfer.js.map +1 -0
  171. package/dist/services/transactions/tx-proof-unshield.d.ts +3 -0
  172. package/dist/services/transactions/tx-proof-unshield.js +183 -0
  173. package/dist/services/transactions/tx-proof-unshield.js.map +1 -0
  174. package/dist/services/transactions/tx-shield-base-token.d.ts +3 -0
  175. package/dist/services/transactions/tx-shield-base-token.js +61 -0
  176. package/dist/services/transactions/tx-shield-base-token.js.map +1 -0
  177. package/dist/services/transactions/tx-shield.d.ts +6 -0
  178. package/dist/services/transactions/tx-shield.js +84 -0
  179. package/dist/services/transactions/tx-shield.js.map +1 -0
  180. package/dist/services/transactions/tx-transfer.d.ts +2 -0
  181. package/dist/services/transactions/tx-transfer.js +78 -0
  182. package/dist/services/transactions/tx-transfer.js.map +1 -0
  183. package/dist/services/transactions/tx-unshield.d.ts +3 -0
  184. package/dist/services/transactions/tx-unshield.js +174 -0
  185. package/dist/services/transactions/tx-unshield.js.map +1 -0
  186. package/dist/utils/blocked-address.d.ts +2 -0
  187. package/dist/utils/blocked-address.js +21 -0
  188. package/dist/utils/blocked-address.js.map +1 -0
  189. package/dist/utils/error.d.ts +1 -0
  190. package/dist/utils/error.js +20 -0
  191. package/dist/utils/error.js.map +1 -0
  192. package/dist/utils/gas-price.d.ts +6 -0
  193. package/dist/utils/gas-price.js +31 -0
  194. package/dist/utils/gas-price.js.map +1 -0
  195. package/dist/utils/index.d.ts +3 -0
  196. package/dist/utils/index.js +20 -0
  197. package/dist/utils/index.js.map +1 -0
  198. package/dist/utils/logger.d.ts +3 -0
  199. package/dist/utils/logger.js +21 -0
  200. package/dist/utils/logger.js.map +1 -0
  201. package/dist/utils/utils.d.ts +3 -0
  202. package/dist/utils/utils.js +47 -0
  203. package/dist/utils/utils.js.map +1 -0
  204. package/package.json +85 -0
  205. package/postinstall.js +52 -0
  206. package/react-native-shims.js +42 -0
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getWalletShareableViewingKey = exports.getDopAddress = exports.validateEthAddress = exports.assertValidEthAddress = exports.validateDopAddress = exports.assertValidDopAddress = exports.signWithWalletViewingKey = exports.getDopWalletPrivateViewingKey = exports.getDopWalletAddressData = exports.getWalletMnemonic = exports.deleteWalletByID = exports.unloadWalletByID = exports.loadWalletByID = exports.createViewOnlyDopWallet = exports.createDopWallet = exports.createUserWalletWithID = exports.createWalletFromTransaction = void 0;
4
+ const dop_engine_v5_1 = require("dop-engine-v5");
5
+ const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
6
+ const engine_1 = require("../core/engine");
7
+ const balance_update_1 = require("./balance-update");
8
+ const error_1 = require("../../../utils/error");
9
+ const ethers_1 = require("ethers");
10
+ const subscribeToBalanceEvents = (wallet) => {
11
+ wallet.on(dop_engine_v5_1.EngineEvent.WalletScanComplete, ({ chain }) => {
12
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
13
+ (0, balance_update_1.onBalancesUpdate)(wallet, chain);
14
+ });
15
+ };
16
+ const addressForWallet = (wallet) => {
17
+ return wallet.getAddress();
18
+ };
19
+ const infoForWallet = (wallet) => {
20
+ const dopAddress = addressForWallet(wallet);
21
+ return {
22
+ id: wallet.id,
23
+ dopAddress,
24
+ };
25
+ };
26
+ const getExistingWallet = (dopWalletID) => {
27
+ try {
28
+ const existingWallet = (0, engine_1.walletForID)(dopWalletID);
29
+ return existingWallet;
30
+ }
31
+ catch (_err) {
32
+ return undefined;
33
+ }
34
+ };
35
+ const loadExistingWallet = async (encryptionKey, dopWalletID, isViewOnlyWallet) => {
36
+ const existingWallet = getExistingWallet(dopWalletID);
37
+ if (existingWallet) {
38
+ return infoForWallet(existingWallet);
39
+ }
40
+ const engine = (0, engine_1.getEngine)();
41
+ let wallet;
42
+ if (isViewOnlyWallet) {
43
+ wallet = await engine.loadExistingViewOnlyWallet(encryptionKey, dopWalletID);
44
+ }
45
+ else {
46
+ wallet = await engine.loadExistingWallet(encryptionKey, dopWalletID);
47
+ }
48
+ subscribeToBalanceEvents(wallet);
49
+ return infoForWallet(wallet);
50
+ };
51
+ // here
52
+ const createWalletFromTransaction = async (leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index = 0) => {
53
+ const engine = (0, engine_1.getEngine)();
54
+ const res = engine.createUserWalletFromTransaction(leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index);
55
+ return res;
56
+ };
57
+ exports.createWalletFromTransaction = createWalletFromTransaction;
58
+ // here
59
+ const createUserWalletWithID = async (encryptionKey, id, leaf, viewingPrivateKey, chain) => {
60
+ const engine = (0, engine_1.getEngine)();
61
+ const res = engine.createUserWalletWithID(encryptionKey, id, leaf, viewingPrivateKey, chain);
62
+ return res;
63
+ };
64
+ exports.createUserWalletWithID = createUserWalletWithID;
65
+ const createWallet = async (encryptionKey, mnemonic, creationBlockNumbers) => {
66
+ const formattedCreationBlockNumbers = formatCreationBlockNumbers(creationBlockNumbers);
67
+ const engine = (0, engine_1.getEngine)();
68
+ const wallet = await engine.createWalletFromMnemonic(encryptionKey, mnemonic, 0, formattedCreationBlockNumbers);
69
+ subscribeToBalanceEvents(wallet);
70
+ return infoForWallet(wallet);
71
+ };
72
+ const createViewOnlyWallet = async (encryptionKey, shareableViewingKey, creationBlockNumbers) => {
73
+ const formattedCreationBlockNumbers = formatCreationBlockNumbers(creationBlockNumbers);
74
+ const engine = (0, engine_1.getEngine)();
75
+ const wallet = await engine.createViewOnlyWalletFromShareableViewingKey(encryptionKey, shareableViewingKey, formattedCreationBlockNumbers);
76
+ subscribeToBalanceEvents(wallet);
77
+ return infoForWallet(wallet);
78
+ };
79
+ // here
80
+ const createDopWallet = async (encryptionKey, mnemonic, creationBlockNumbers) => {
81
+ try {
82
+ return await createWallet(encryptionKey, mnemonic, creationBlockNumbers);
83
+ }
84
+ catch (err) {
85
+ throw (0, error_1.reportAndSanitizeError)(exports.createDopWallet.name, err);
86
+ }
87
+ };
88
+ exports.createDopWallet = createDopWallet;
89
+ const createViewOnlyDopWallet = async (encryptionKey, shareableViewingKey, creationBlockNumbers) => {
90
+ try {
91
+ return await createViewOnlyWallet(encryptionKey, shareableViewingKey, creationBlockNumbers);
92
+ }
93
+ catch (err) {
94
+ throw (0, error_1.reportAndSanitizeError)(exports.createViewOnlyDopWallet.name, err);
95
+ }
96
+ };
97
+ exports.createViewOnlyDopWallet = createViewOnlyDopWallet;
98
+ const loadWalletByID = async (encryptionKey, dopWalletID, isViewOnlyWallet) => {
99
+ try {
100
+ return await loadExistingWallet(encryptionKey, dopWalletID, isViewOnlyWallet);
101
+ }
102
+ catch (err) {
103
+ const sanitizedError = (0, error_1.reportAndSanitizeError)(exports.loadWalletByID.name, err);
104
+ throw new Error(`Could not load DOP wallet: ${sanitizedError.message}`);
105
+ }
106
+ };
107
+ exports.loadWalletByID = loadWalletByID;
108
+ const unloadWalletByID = (dopWalletID) => {
109
+ try {
110
+ const engine = (0, engine_1.getEngine)();
111
+ engine.unloadWallet(dopWalletID);
112
+ }
113
+ catch (err) {
114
+ throw new Error('Could not unload DOP wallet.');
115
+ }
116
+ };
117
+ exports.unloadWalletByID = unloadWalletByID;
118
+ const deleteWalletByID = async (dopWalletID) => {
119
+ try {
120
+ const engine = (0, engine_1.getEngine)();
121
+ await engine.deleteWallet(dopWalletID);
122
+ }
123
+ catch (err) {
124
+ throw new Error('Could not delete DOP wallet.');
125
+ }
126
+ };
127
+ exports.deleteWalletByID = deleteWalletByID;
128
+ const getWalletMnemonic = async (encryptionKey, dopWalletID) => {
129
+ const { db } = (0, engine_1.getEngine)();
130
+ // Reload wallet to ensure that encryption key is valid.
131
+ const walletData = (await dop_engine_v5_1.DopWallet.getEncryptedData(db, encryptionKey, dopWalletID));
132
+ if (!walletData.mnemonic) {
133
+ throw new Error('No mnemonic for wallet.');
134
+ }
135
+ return walletData.mnemonic;
136
+ };
137
+ exports.getWalletMnemonic = getWalletMnemonic;
138
+ const getDopWalletAddressData = (address) => {
139
+ (0, exports.assertValidDopAddress)(address);
140
+ return dop_engine_v5_1.DopEngine.decodeAddress(address);
141
+ };
142
+ exports.getDopWalletAddressData = getDopWalletAddressData;
143
+ const getDopWalletPrivateViewingKey = (dopWalletID) => {
144
+ const wallet = (0, engine_1.walletForID)(dopWalletID);
145
+ return wallet.getViewingKeyPair().privateKey;
146
+ };
147
+ exports.getDopWalletPrivateViewingKey = getDopWalletPrivateViewingKey;
148
+ const signWithWalletViewingKey = async (dopWalletID, message) => {
149
+ const wallet = (0, engine_1.walletForID)(dopWalletID);
150
+ const signature = await wallet.signWithViewingKey((0, dop_engine_v5_1.hexStringToBytes)(message));
151
+ return (0, dop_engine_v5_1.hexlify)(signature);
152
+ };
153
+ exports.signWithWalletViewingKey = signWithWalletViewingKey;
154
+ const assertValidDopAddress = (address) => {
155
+ if (!(0, exports.validateDopAddress)(address)) {
156
+ throw new Error('Invalid DOP address.');
157
+ }
158
+ };
159
+ exports.assertValidDopAddress = assertValidDopAddress;
160
+ const validateDopAddress = (address) => {
161
+ try {
162
+ return dop_engine_v5_1.DopEngine.decodeAddress(address) != null;
163
+ }
164
+ catch (err) {
165
+ return false;
166
+ }
167
+ };
168
+ exports.validateDopAddress = validateDopAddress;
169
+ const assertValidEthAddress = (address) => {
170
+ if (!(0, exports.validateEthAddress)(address)) {
171
+ throw new Error('Invalid wallet address.');
172
+ }
173
+ };
174
+ exports.assertValidEthAddress = assertValidEthAddress;
175
+ const validateEthAddress = (address) => {
176
+ try {
177
+ (0, ethers_1.getAddress)(address);
178
+ return true;
179
+ }
180
+ catch (err) {
181
+ return false;
182
+ }
183
+ };
184
+ exports.validateEthAddress = validateEthAddress;
185
+ const getDopAddress = (dopWalletID) => {
186
+ try {
187
+ const wallet = (0, engine_1.walletForID)(dopWalletID);
188
+ return wallet.getAddress();
189
+ }
190
+ catch (err) {
191
+ (0, error_1.reportAndSanitizeError)(exports.getDopAddress.name, err);
192
+ return undefined;
193
+ }
194
+ };
195
+ exports.getDopAddress = getDopAddress;
196
+ const getWalletShareableViewingKey = async (dopWalletID) => {
197
+ try {
198
+ const wallet = (0, engine_1.walletForID)(dopWalletID);
199
+ return wallet.generateShareableViewingKey();
200
+ }
201
+ catch (err) {
202
+ (0, error_1.reportAndSanitizeError)(exports.getWalletShareableViewingKey.name, err);
203
+ return undefined;
204
+ }
205
+ };
206
+ exports.getWalletShareableViewingKey = getWalletShareableViewingKey;
207
+ const formatCreationBlockNumbers = (creationBlockNumbers) => {
208
+ var _a;
209
+ // Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine-v5's number[][] type
210
+ if (!creationBlockNumbers)
211
+ return;
212
+ const formattedCreationBlockNumbers = [];
213
+ const networksNames = Object.keys(creationBlockNumbers);
214
+ for (const networkName of networksNames) {
215
+ const network = dop_sharedmodel_v5_1.NETWORK_CONFIG[networkName];
216
+ const blockNumber = creationBlockNumbers[networkName];
217
+ if (!(0, dop_sharedmodel_v5_1.isDefined)(blockNumber)) {
218
+ continue;
219
+ }
220
+ formattedCreationBlockNumbers[_a = network.chain.type] ?? (formattedCreationBlockNumbers[_a] = []);
221
+ formattedCreationBlockNumbers[network.chain.type][network.chain.id] =
222
+ blockNumber;
223
+ }
224
+ return formattedCreationBlockNumbers;
225
+ };
226
+ //# sourceMappingURL=wallets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallets.js","sourceRoot":"","sources":["../../../../src/services/dop/wallets/wallets.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopWallet,\n EngineEvent,\n WalletScannedEventData,\n AbstractWallet,\n WalletData,\n AddressData,\n DopEngine,\n hexlify,\n hexStringToBytes,\n} from 'dop-engine-v5';\nimport {\n DopWalletInfo,\n NetworkName,\n NETWORK_CONFIG,\n isDefined,\n} from 'dop-sharedmodel-v5';\nimport { getEngine, walletForID } from '../core/engine';\nimport { onBalancesUpdate } from './balance-update';\nimport { reportAndSanitizeError } from '../../../utils/error';\nimport { getAddress } from 'ethers';\n\nconst subscribeToBalanceEvents = (wallet: AbstractWallet) => {\n wallet.on(\n EngineEvent.WalletScanComplete,\n ({ chain }: WalletScannedEventData) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n onBalancesUpdate(wallet, chain);\n },\n );\n};\n\nconst addressForWallet = (wallet: AbstractWallet): string => {\n return wallet.getAddress();\n};\n\nconst infoForWallet = (wallet: AbstractWallet): DopWalletInfo => {\n const dopAddress = addressForWallet(wallet);\n return {\n id: wallet.id,\n dopAddress,\n };\n};\n\nconst getExistingWallet = (\n dopWalletID: string,\n): Optional<AbstractWallet> => {\n try {\n const existingWallet = walletForID(dopWalletID);\n return existingWallet;\n } catch (_err) {\n return undefined;\n }\n};\n\nconst loadExistingWallet = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n const existingWallet = getExistingWallet(dopWalletID);\n if (existingWallet) {\n return infoForWallet(existingWallet);\n }\n const engine = getEngine();\n let wallet: AbstractWallet;\n\n if (isViewOnlyWallet) {\n wallet = await engine.loadExistingViewOnlyWallet(\n encryptionKey,\n dopWalletID,\n );\n } else {\n wallet = await engine.loadExistingWallet(encryptionKey, dopWalletID);\n }\n\n subscribeToBalanceEvents(wallet);\n return infoForWallet(wallet);\n};\n// here\nexport const createWalletFromTransaction = async (\n leaf: any,\n viewingPrivateKey: Uint8Array,\n chain: any,\n encryptionKey: string,\n mnemonic: string,\n index: number = 0,\n): Promise<any> => {\n\n const engine = getEngine();\n const res = engine.createUserWalletFromTransaction(leaf, viewingPrivateKey, chain, encryptionKey, mnemonic, index);\n return res;\n};\n\n// here\nexport const createUserWalletWithID = async (\n encryptionKey: string,\n id: string,\n leaf: any,\n viewingPrivateKey: Uint8Array,\n chain: any\n): Promise<any> => {\n\n const engine = getEngine();\n const res = engine.createUserWalletWithID(\n encryptionKey,\n id,\n leaf,\n viewingPrivateKey,\n chain\n );\n return res;\n};\n\n\nconst createWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n\n const wallet = await engine.createWalletFromMnemonic(\n encryptionKey,\n mnemonic,\n 0,\n formattedCreationBlockNumbers,\n );\n subscribeToBalanceEvents(wallet);\n return infoForWallet(wallet);\n};\n\nconst createViewOnlyWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n const formattedCreationBlockNumbers =\n formatCreationBlockNumbers(creationBlockNumbers);\n\n const engine = getEngine();\n const wallet = await engine.createViewOnlyWalletFromShareableViewingKey(\n encryptionKey,\n shareableViewingKey,\n formattedCreationBlockNumbers,\n );\n subscribeToBalanceEvents(wallet);\n return infoForWallet(wallet);\n};\n// here \nexport const createDopWallet = async (\n encryptionKey: string,\n mnemonic: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n\n return await createWallet(encryptionKey, mnemonic, creationBlockNumbers);\n } catch (err) {\n throw reportAndSanitizeError(createDopWallet.name, err);\n }\n};\n\nexport const createViewOnlyDopWallet = async (\n encryptionKey: string,\n shareableViewingKey: string,\n creationBlockNumbers: Optional<MapType<number>>,\n): Promise<DopWalletInfo> => {\n try {\n return await createViewOnlyWallet(\n encryptionKey,\n shareableViewingKey,\n creationBlockNumbers,\n );\n } catch (err) {\n throw reportAndSanitizeError(createViewOnlyDopWallet.name, err);\n }\n};\n\nexport const loadWalletByID = async (\n encryptionKey: string,\n dopWalletID: string,\n isViewOnlyWallet: boolean,\n): Promise<DopWalletInfo> => {\n try {\n return await loadExistingWallet(\n encryptionKey,\n dopWalletID,\n isViewOnlyWallet,\n );\n } catch (err) {\n const sanitizedError = reportAndSanitizeError(loadWalletByID.name, err);\n throw new Error(`Could not load DOP wallet: ${sanitizedError.message}`);\n }\n};\n\nexport const unloadWalletByID = (dopWalletID: string): void => {\n try {\n const engine = getEngine();\n engine.unloadWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not unload DOP wallet.');\n }\n};\n\nexport const deleteWalletByID = async (\n dopWalletID: string,\n): Promise<void> => {\n try {\n const engine = getEngine();\n await engine.deleteWallet(dopWalletID);\n } catch (err) {\n throw new Error('Could not delete DOP wallet.');\n }\n};\n\nexport const getWalletMnemonic = async (\n encryptionKey: string,\n dopWalletID: string,\n) => {\n const { db } = getEngine();\n // Reload wallet to ensure that encryption key is valid.\n const walletData = (await DopWallet.getEncryptedData(\n db,\n encryptionKey,\n dopWalletID,\n )) as WalletData;\n\n if (!walletData.mnemonic) {\n throw new Error('No mnemonic for wallet.');\n }\n return walletData.mnemonic;\n};\n\nexport const getDopWalletAddressData = (address: string): AddressData => {\n assertValidDopAddress(address);\n return DopEngine.decodeAddress(address);\n};\n\nexport const getDopWalletPrivateViewingKey = (\n dopWalletID: string,\n): Uint8Array => {\n const wallet = walletForID(dopWalletID);\n return wallet.getViewingKeyPair().privateKey;\n};\n\nexport const signWithWalletViewingKey = async (\n dopWalletID: string,\n message: string,\n): Promise<string> => {\n const wallet = walletForID(dopWalletID);\n const signature = await wallet.signWithViewingKey(hexStringToBytes(message));\n return hexlify(signature);\n};\n\n\n\nexport const assertValidDopAddress = (address: string): void => {\n if (!validateDopAddress(address)) {\n throw new Error('Invalid DOP address.');\n }\n};\n\nexport const validateDopAddress = (address: string): boolean => {\n try {\n return DopEngine.decodeAddress(address) != null;\n } catch (err) {\n return false;\n }\n};\n\nexport const assertValidEthAddress = (address: string) => {\n if (!validateEthAddress(address)) {\n throw new Error('Invalid wallet address.');\n }\n};\n\nexport const validateEthAddress = (address: string): boolean => {\n try {\n getAddress(address);\n return true;\n } catch (err) {\n return false;\n }\n};\n\nexport const getDopAddress = (\n dopWalletID: string,\n): Optional<string> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.getAddress();\n } catch (err) {\n reportAndSanitizeError(getDopAddress.name, err);\n return undefined;\n }\n};\n\nexport const getWalletShareableViewingKey = async (\n dopWalletID: string,\n): Promise<Optional<string>> => {\n try {\n const wallet = walletForID(dopWalletID);\n return wallet.generateShareableViewingKey();\n } catch (err) {\n reportAndSanitizeError(getWalletShareableViewingKey.name, err);\n return undefined;\n }\n};\n\nconst formatCreationBlockNumbers = (\n creationBlockNumbers: Optional<MapType<number>>,\n): Optional<number[][]> => {\n // Format creationBlockNumbers from client side { <NetworkName>: <BlockNumber> } map to dop-engine-v5's number[][] type\n if (!creationBlockNumbers) return;\n\n const formattedCreationBlockNumbers: number[][] = [];\n const networksNames = Object.keys(creationBlockNumbers) as NetworkName[];\n\n for (const networkName of networksNames) {\n const network = NETWORK_CONFIG[networkName];\n\n const blockNumber = creationBlockNumbers[networkName];\n if (!isDefined(blockNumber)) {\n continue;\n }\n\n formattedCreationBlockNumbers[network.chain.type] ??= [];\n formattedCreationBlockNumbers[network.chain.type][network.chain.id] =\n blockNumber;\n }\n\n return formattedCreationBlockNumbers;\n};\n"]}
@@ -0,0 +1 @@
1
+ export declare const mnemonicToPKey: (mnemonic: string, derivationIndex?: number) => string;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mnemonicToPKey = void 0;
4
+ const dop_engine_v5_1 = require("dop-engine-v5");
5
+ const mnemonicToPKey = (mnemonic, derivationIndex) => {
6
+ return `0x${(0, dop_engine_v5_1.mnemonicToPrivateKey)(mnemonic, derivationIndex)}`;
7
+ };
8
+ exports.mnemonicToPKey = mnemonicToPKey;
9
+ //# sourceMappingURL=ethers-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ethers-util.js","sourceRoot":"","sources":["../../../src/services/ethers/ethers-util.ts"],"names":[],"mappings":";;;AAAA,iDAAqD;AAE9C,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,eAAwB,EAAE,EAAE;IAC3E,OAAO,KAAK,IAAA,oCAAoB,EAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;AAChE,CAAC,CAAC;AAFW,QAAA,cAAc,kBAEzB","sourcesContent":["import { mnemonicToPrivateKey } from 'dop-engine-v5';\n\nexport const mnemonicToPKey = (mnemonic: string, derivationIndex?: number) => {\n return `0x${mnemonicToPrivateKey(mnemonic, derivationIndex)}`;\n};\n"]}
@@ -0,0 +1 @@
1
+ export * from './ethers-util';
@@ -0,0 +1,18 @@
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("./ethers-util"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/ethers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B","sourcesContent":["export * from './ethers-util';\n"]}
@@ -0,0 +1,4 @@
1
+ export * from './artifacts';
2
+ export * from './ethers';
3
+ export * from './dop';
4
+ export * from './transactions';
@@ -0,0 +1,21 @@
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("./artifacts"), exports);
18
+ __exportStar(require("./ethers"), exports);
19
+ __exportStar(require("./dop"), exports);
20
+ __exportStar(require("./transactions"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,2CAAyB;AACzB,wCAAsB;AACtB,iDAA+B","sourcesContent":["export * from './artifacts';\nexport * from './ethers';\nexport * from './dop';\nexport * from './transactions';\n"]}
@@ -0,0 +1,13 @@
1
+ export * from './proof-cache';
2
+ export * from './tx-cross-contract-calls';
3
+ export * from './tx-shield-base-token';
4
+ export * from './tx-shield';
5
+ export * from './tx-notes';
6
+ export * from './tx-gas-details';
7
+ export * from './tx-gas-relayer-fee-estimator';
8
+ export * from './tx-generator';
9
+ export * from './tx-proof-transfer';
10
+ export * from './tx-proof-unshield';
11
+ export * from './tx-nullifiers';
12
+ export * from './tx-transfer';
13
+ export * from './tx-unshield';
@@ -0,0 +1,30 @@
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("./proof-cache"), exports);
18
+ __exportStar(require("./tx-cross-contract-calls"), exports);
19
+ __exportStar(require("./tx-shield-base-token"), exports);
20
+ __exportStar(require("./tx-shield"), exports);
21
+ __exportStar(require("./tx-notes"), exports);
22
+ __exportStar(require("./tx-gas-details"), exports);
23
+ __exportStar(require("./tx-gas-relayer-fee-estimator"), exports);
24
+ __exportStar(require("./tx-generator"), exports);
25
+ __exportStar(require("./tx-proof-transfer"), exports);
26
+ __exportStar(require("./tx-proof-unshield"), exports);
27
+ __exportStar(require("./tx-nullifiers"), exports);
28
+ __exportStar(require("./tx-transfer"), exports);
29
+ __exportStar(require("./tx-unshield"), exports);
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/transactions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,4DAA0C;AAC1C,yDAAuC;AACvC,8CAA4B;AAC5B,6CAA2B;AAC3B,mDAAiC;AACjC,iEAA+C;AAC/C,iDAA+B;AAC/B,sDAAoC;AACpC,sDAAoC;AACpC,kDAAgC;AAChC,gDAA8B;AAC9B,gDAA8B","sourcesContent":["export * from './proof-cache';\nexport * from './tx-cross-contract-calls';\nexport * from './tx-shield-base-token';\nexport * from './tx-shield';\nexport * from './tx-notes';\nexport * from './tx-gas-details';\nexport * from './tx-gas-relayer-fee-estimator';\nexport * from './tx-generator';\nexport * from './tx-proof-transfer';\nexport * from './tx-proof-unshield';\nexport * from './tx-nullifiers';\nexport * from './tx-transfer';\nexport * from './tx-unshield';\n"]}
@@ -0,0 +1,27 @@
1
+ import { NetworkName, ProofType, DopNFTAmountRecipient, DopERC20Amount, DopERC20AmountRecipient, DopNFTAmount, TransactionGasDetails, DopERC20Recipient } from 'dop-sharedmodel-v5';
2
+ import { ContractTransaction } from 'ethers';
3
+ export type ProvedTransaction = {
4
+ proofType: ProofType;
5
+ transaction: ContractTransaction;
6
+ dopWalletID: string;
7
+ showSenderAddressToRecipient: boolean;
8
+ memoText: Optional<string>;
9
+ erc20AmountRecipients: DopERC20AmountRecipient[];
10
+ nftAmountRecipients: DopNFTAmountRecipient[];
11
+ relayAdaptUnshieldERC20Amounts: Optional<DopERC20Amount[]>;
12
+ relayAdaptUnshieldNFTAmounts: Optional<DopNFTAmount[]>;
13
+ relayAdaptShieldERC20Recipients: Optional<DopERC20Recipient[]>;
14
+ relayAdaptShieldNFTRecipients: Optional<DopNFTAmount[]>;
15
+ crossContractCalls: Optional<ContractTransaction[]>;
16
+ relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>;
17
+ sendWithPublicWallet: boolean;
18
+ overallBatchMinGasPrice: Optional<bigint>;
19
+ nullifiers: string[];
20
+ };
21
+ export declare const populateProvedTransaction: (networkName: NetworkName, proofType: ProofType, dopWalletID: string, showSenderAddressToRecipient: boolean, memoText: Optional<string>, erc20AmountRecipients: DopERC20AmountRecipient[], nftAmountRecipients: DopNFTAmountRecipient[], relayAdaptUnshieldERC20Amounts: Optional<DopERC20Amount[]>, relayAdaptUnshieldNFTAmounts: Optional<DopNFTAmount[]>, relayAdaptShieldERC20Recipients: Optional<DopERC20Recipient[]>, relayAdaptShieldNFTRecipients: Optional<DopNFTAmount[]>, crossContractCalls: Optional<ContractTransaction[]>, relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<{
22
+ transaction: ContractTransaction;
23
+ nullifiers: string[];
24
+ }>;
25
+ export declare const setCachedProvedTransaction: (tx?: ProvedTransaction) => void;
26
+ export declare const getCachedProvedTransaction: () => ProvedTransaction;
27
+ export declare const validateCachedProvedTransaction: (networkName: NetworkName, proofType: ProofType, dopWalletID: string, showSenderAddressToRecipient: boolean, memoText: Optional<string>, erc20AmountRecipients: DopERC20AmountRecipient[], nftAmountRecipients: DopNFTAmountRecipient[], relayAdaptUnshieldERC20Amounts: Optional<DopERC20Amount[]>, relayAdaptUnshieldNFTAmounts: Optional<DopNFTAmount[]>, relayAdaptShieldERC20Recipients: Optional<DopERC20Recipient[]>, relayAdaptShieldNFTRecipients: Optional<DopNFTAmount[]>, crossContractCalls: Optional<ContractTransaction[]>, relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>) => void;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateCachedProvedTransaction = exports.getCachedProvedTransaction = exports.setCachedProvedTransaction = exports.populateProvedTransaction = void 0;
4
+ const dop_sharedmodel_v5_1 = require("dop-sharedmodel-v5");
5
+ const gas_price_1 = require("../../utils/gas-price");
6
+ const utils_1 = require("../../utils/utils");
7
+ const tx_gas_details_1 = require("./tx-gas-details");
8
+ const tx_notes_1 = require("./tx-notes");
9
+ let cachedProvedTransaction;
10
+ const populateProvedTransaction = async (networkName, proofType, dopWalletID, showSenderAddressToRecipient, memoText, erc20AmountRecipients, nftAmountRecipients, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails) => {
11
+ try {
12
+ (0, exports.validateCachedProvedTransaction)(networkName, proofType, dopWalletID, showSenderAddressToRecipient, memoText, erc20AmountRecipients, nftAmountRecipients, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice);
13
+ }
14
+ catch (err) {
15
+ if (!(err instanceof Error)) {
16
+ throw err;
17
+ }
18
+ throw new Error(`Invalid proof for this transaction. ${err.message}`);
19
+ }
20
+ const { transaction, nullifiers } = (0, exports.getCachedProvedTransaction)();
21
+ (0, tx_gas_details_1.setGasDetailsForTransaction)(networkName, transaction, gasDetails, sendWithPublicWallet);
22
+ return { transaction, nullifiers };
23
+ };
24
+ exports.populateProvedTransaction = populateProvedTransaction;
25
+ const setCachedProvedTransaction = (tx) => {
26
+ if ((0, dop_sharedmodel_v5_1.isDefined)(tx?.transaction?.from)) {
27
+ throw new Error(`Cannot cache a transaction with a 'from' address.`);
28
+ }
29
+ cachedProvedTransaction = tx;
30
+ };
31
+ exports.setCachedProvedTransaction = setCachedProvedTransaction;
32
+ const getCachedProvedTransaction = () => {
33
+ return cachedProvedTransaction;
34
+ };
35
+ exports.getCachedProvedTransaction = getCachedProvedTransaction;
36
+ const shouldValidateERC20AmountRecipients = (proofType) => {
37
+ switch (proofType) {
38
+ case dop_sharedmodel_v5_1.ProofType.CrossContractCalls:
39
+ // Skip validation for erc20AmountRecipients, which is not used
40
+ // in this transaction type.
41
+ return false;
42
+ case dop_sharedmodel_v5_1.ProofType.Transfer:
43
+ case dop_sharedmodel_v5_1.ProofType.Unshield:
44
+ case dop_sharedmodel_v5_1.ProofType.UnshieldBaseToken:
45
+ return true;
46
+ }
47
+ };
48
+ const shouldValidateRelayAdaptAmounts = (proofType) => {
49
+ switch (proofType) {
50
+ case dop_sharedmodel_v5_1.ProofType.CrossContractCalls:
51
+ case dop_sharedmodel_v5_1.ProofType.UnshieldBaseToken:
52
+ // Only validate for Cross Contract and Unshield Base Token proofs.
53
+ return true;
54
+ case dop_sharedmodel_v5_1.ProofType.Transfer:
55
+ case dop_sharedmodel_v5_1.ProofType.Unshield:
56
+ return false;
57
+ }
58
+ };
59
+ const shouldValidateCrossContractCalls = (proofType) => {
60
+ switch (proofType) {
61
+ case dop_sharedmodel_v5_1.ProofType.CrossContractCalls:
62
+ // Only validate for Cross Contract proofs.
63
+ return true;
64
+ case dop_sharedmodel_v5_1.ProofType.Transfer:
65
+ case dop_sharedmodel_v5_1.ProofType.Unshield:
66
+ case dop_sharedmodel_v5_1.ProofType.UnshieldBaseToken:
67
+ return false;
68
+ }
69
+ };
70
+ const validateCachedProvedTransaction = (networkName, proofType, dopWalletID, showSenderAddressToRecipient, memoText, erc20AmountRecipients, nftAmountRecipients, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice) => {
71
+ if (!cachedProvedTransaction) {
72
+ throw new Error('No proof found.');
73
+ }
74
+ else if (cachedProvedTransaction.proofType !== proofType) {
75
+ throw new Error('Mismatch: proofType.');
76
+ }
77
+ else if (cachedProvedTransaction.dopWalletID !== dopWalletID) {
78
+ throw new Error('Mismatch: dopWalletID.');
79
+ }
80
+ else if (proofType === dop_sharedmodel_v5_1.ProofType.Transfer &&
81
+ cachedProvedTransaction.showSenderAddressToRecipient !==
82
+ showSenderAddressToRecipient) {
83
+ throw new Error('Mismatch: showSenderAddressToRecipient.');
84
+ }
85
+ else if (proofType === dop_sharedmodel_v5_1.ProofType.Transfer &&
86
+ cachedProvedTransaction.memoText !== memoText) {
87
+ throw new Error('Mismatch: memoText.');
88
+ }
89
+ else if (shouldValidateERC20AmountRecipients(proofType) &&
90
+ !(0, tx_notes_1.compareERC20AmountRecipientArrays)(erc20AmountRecipients, cachedProvedTransaction.erc20AmountRecipients)) {
91
+ throw new Error('Mismatch: erc20AmountRecipients.');
92
+ }
93
+ else if (!(0, tx_notes_1.compareNFTAmountRecipientArrays)(nftAmountRecipients, cachedProvedTransaction.nftAmountRecipients)) {
94
+ throw new Error('Mismatch: nftAmountRecipients.');
95
+ }
96
+ else if (shouldValidateRelayAdaptAmounts(proofType) &&
97
+ !(0, tx_notes_1.compareERC20AmountArrays)(relayAdaptUnshieldERC20Amounts, cachedProvedTransaction.relayAdaptUnshieldERC20Amounts)) {
98
+ throw new Error('Mismatch: relayAdaptUnshieldERC20Amounts.');
99
+ }
100
+ else if (shouldValidateRelayAdaptAmounts(proofType) &&
101
+ !(0, tx_notes_1.compareNFTAmountArrays)(relayAdaptUnshieldNFTAmounts, cachedProvedTransaction.relayAdaptUnshieldNFTAmounts)) {
102
+ throw new Error('Mismatch: relayAdaptUnshieldNFTAmounts.');
103
+ }
104
+ else if (shouldValidateRelayAdaptAmounts(proofType) &&
105
+ !(0, tx_notes_1.compareERC20RecipientArrays)(relayAdaptShieldERC20Recipients, cachedProvedTransaction.relayAdaptShieldERC20Recipients)) {
106
+ throw new Error('Mismatch: relayAdaptShieldERC20Recipients.');
107
+ }
108
+ else if (shouldValidateRelayAdaptAmounts(proofType) &&
109
+ !(0, tx_notes_1.compareNFTAmountArrays)(relayAdaptShieldNFTRecipients, cachedProvedTransaction.relayAdaptShieldNFTRecipients)) {
110
+ throw new Error('Mismatch: relayAdaptShieldNFTRecipients.');
111
+ }
112
+ else if (shouldValidateCrossContractCalls(proofType) &&
113
+ !(0, utils_1.compareContractTransactionArrays)(crossContractCalls, cachedProvedTransaction.crossContractCalls)) {
114
+ throw new Error('Mismatch: crossContractCalls.');
115
+ }
116
+ else if (!(0, tx_notes_1.compareERC20AmountRecipients)(cachedProvedTransaction.relayerFeeERC20AmountRecipient, relayerFeeERC20AmountRecipient)) {
117
+ throw new Error('Mismatch: relayerFeeERC20AmountRecipient.');
118
+ }
119
+ else if (sendWithPublicWallet !== cachedProvedTransaction.sendWithPublicWallet) {
120
+ throw new Error('Mismatch: sendWithPublicWallet.');
121
+ }
122
+ else if ((0, gas_price_1.shouldSetOverallBatchMinGasPriceForNetwork)(networkName) &&
123
+ overallBatchMinGasPrice !== cachedProvedTransaction.overallBatchMinGasPrice) {
124
+ throw new Error('Mismatch: overallBatchMinGasPrice.');
125
+ }
126
+ };
127
+ exports.validateCachedProvedTransaction = validateCachedProvedTransaction;
128
+ //# sourceMappingURL=proof-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof-cache.js","sourceRoot":"","sources":["../../../src/services/transactions/proof-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n NetworkName,\n ProofType,\n DopNFTAmountRecipient,\n DopERC20Amount,\n DopERC20AmountRecipient,\n DopNFTAmount,\n TransactionGasDetails,\n isDefined,\n DopERC20Recipient,\n} from 'dop-sharedmodel-v5';\nimport { shouldSetOverallBatchMinGasPriceForNetwork } from '../../utils/gas-price';\nimport { compareContractTransactionArrays } from '../../utils/utils';\nimport { setGasDetailsForTransaction } from './tx-gas-details';\nimport {\n compareERC20AmountRecipients,\n compareERC20AmountRecipientArrays,\n compareERC20AmountArrays,\n compareNFTAmountRecipientArrays,\n compareNFTAmountArrays,\n compareERC20RecipientArrays,\n} from './tx-notes';\nimport { ContractTransaction } from 'ethers';\n\nexport type ProvedTransaction = {\n proofType: ProofType;\n transaction: ContractTransaction;\n dopWalletID: string;\n showSenderAddressToRecipient: boolean;\n memoText: Optional<string>;\n erc20AmountRecipients: DopERC20AmountRecipient[];\n nftAmountRecipients: DopNFTAmountRecipient[];\n relayAdaptUnshieldERC20Amounts: Optional<DopERC20Amount[]>;\n relayAdaptUnshieldNFTAmounts: Optional<DopNFTAmount[]>;\n relayAdaptShieldERC20Recipients: Optional<DopERC20Recipient[]>;\n relayAdaptShieldNFTRecipients: Optional<DopNFTAmount[]>;\n crossContractCalls: Optional<ContractTransaction[]>;\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>;\n sendWithPublicWallet: boolean;\n overallBatchMinGasPrice: Optional<bigint>;\n nullifiers: string[];\n};\n\nlet cachedProvedTransaction: Optional<ProvedTransaction>;\n\nexport const populateProvedTransaction = async (\n networkName: NetworkName,\n proofType: ProofType,\n dopWalletID: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayAdaptUnshieldERC20Amounts: Optional<DopERC20Amount[]>,\n relayAdaptUnshieldNFTAmounts: Optional<DopNFTAmount[]>,\n relayAdaptShieldERC20Recipients: Optional<DopERC20Recipient[]>,\n relayAdaptShieldNFTRecipients: Optional<DopNFTAmount[]>,\n crossContractCalls: Optional<ContractTransaction[]>,\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<{\n transaction: ContractTransaction;\n nullifiers: string[];\n}> => {\n try {\n validateCachedProvedTransaction(\n networkName,\n proofType,\n dopWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n throw new Error(`Invalid proof for this transaction. ${err.message}`);\n }\n\n const { transaction, nullifiers } = getCachedProvedTransaction();\n\n setGasDetailsForTransaction(\n networkName,\n transaction,\n gasDetails,\n sendWithPublicWallet,\n );\n\n return { transaction, nullifiers };\n};\n\nexport const setCachedProvedTransaction = (tx?: ProvedTransaction) => {\n if (isDefined(tx?.transaction?.from)) {\n throw new Error(`Cannot cache a transaction with a 'from' address.`);\n }\n cachedProvedTransaction = tx;\n};\n\nexport const getCachedProvedTransaction = (): ProvedTransaction => {\n return cachedProvedTransaction as ProvedTransaction;\n};\n\nconst shouldValidateERC20AmountRecipients = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n // Skip validation for erc20AmountRecipients, which is not used\n // in this transaction type.\n return false;\n case ProofType.Transfer:\n case ProofType.Unshield:\n case ProofType.UnshieldBaseToken:\n return true;\n }\n};\n\nconst shouldValidateRelayAdaptAmounts = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n case ProofType.UnshieldBaseToken:\n // Only validate for Cross Contract and Unshield Base Token proofs.\n return true;\n case ProofType.Transfer:\n case ProofType.Unshield:\n return false;\n }\n};\n\nconst shouldValidateCrossContractCalls = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n // Only validate for Cross Contract proofs.\n return true;\n case ProofType.Transfer:\n case ProofType.Unshield:\n case ProofType.UnshieldBaseToken:\n return false;\n }\n};\n\nexport const validateCachedProvedTransaction = (\n networkName: NetworkName,\n proofType: ProofType,\n dopWalletID: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayAdaptUnshieldERC20Amounts: Optional<DopERC20Amount[]>,\n relayAdaptUnshieldNFTAmounts: Optional<DopNFTAmount[]>,\n relayAdaptShieldERC20Recipients: Optional<DopERC20Recipient[]>,\n relayAdaptShieldNFTRecipients: Optional<DopNFTAmount[]>,\n crossContractCalls: Optional<ContractTransaction[]>,\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n): void => {\n if (!cachedProvedTransaction) {\n throw new Error('No proof found.');\n } else if (cachedProvedTransaction.proofType !== proofType) {\n throw new Error('Mismatch: proofType.');\n } else if (cachedProvedTransaction.dopWalletID !== dopWalletID) {\n throw new Error('Mismatch: dopWalletID.');\n } else if (\n proofType === ProofType.Transfer &&\n cachedProvedTransaction.showSenderAddressToRecipient !==\n showSenderAddressToRecipient\n ) {\n throw new Error('Mismatch: showSenderAddressToRecipient.');\n } else if (\n proofType === ProofType.Transfer &&\n cachedProvedTransaction.memoText !== memoText\n ) {\n throw new Error('Mismatch: memoText.');\n } else if (\n shouldValidateERC20AmountRecipients(proofType) &&\n !compareERC20AmountRecipientArrays(\n erc20AmountRecipients,\n cachedProvedTransaction.erc20AmountRecipients,\n )\n ) {\n throw new Error('Mismatch: erc20AmountRecipients.');\n } else if (\n !compareNFTAmountRecipientArrays(\n nftAmountRecipients,\n cachedProvedTransaction.nftAmountRecipients,\n )\n ) {\n throw new Error('Mismatch: nftAmountRecipients.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareERC20AmountArrays(\n relayAdaptUnshieldERC20Amounts,\n cachedProvedTransaction.relayAdaptUnshieldERC20Amounts,\n )\n ) {\n throw new Error('Mismatch: relayAdaptUnshieldERC20Amounts.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareNFTAmountArrays(\n relayAdaptUnshieldNFTAmounts,\n cachedProvedTransaction.relayAdaptUnshieldNFTAmounts,\n )\n ) {\n throw new Error('Mismatch: relayAdaptUnshieldNFTAmounts.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareERC20RecipientArrays(\n relayAdaptShieldERC20Recipients,\n cachedProvedTransaction.relayAdaptShieldERC20Recipients,\n )\n ) {\n throw new Error('Mismatch: relayAdaptShieldERC20Recipients.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareNFTAmountArrays(\n relayAdaptShieldNFTRecipients,\n cachedProvedTransaction.relayAdaptShieldNFTRecipients,\n )\n ) {\n throw new Error('Mismatch: relayAdaptShieldNFTRecipients.');\n } else if (\n shouldValidateCrossContractCalls(proofType) &&\n !compareContractTransactionArrays(\n crossContractCalls,\n cachedProvedTransaction.crossContractCalls,\n )\n ) {\n throw new Error('Mismatch: crossContractCalls.');\n } else if (\n !compareERC20AmountRecipients(\n cachedProvedTransaction.relayerFeeERC20AmountRecipient,\n relayerFeeERC20AmountRecipient,\n )\n ) {\n throw new Error('Mismatch: relayerFeeERC20AmountRecipient.');\n } else if (\n sendWithPublicWallet !== cachedProvedTransaction.sendWithPublicWallet\n ) {\n throw new Error('Mismatch: sendWithPublicWallet.');\n } else if (\n shouldSetOverallBatchMinGasPriceForNetwork(networkName) &&\n overallBatchMinGasPrice !== cachedProvedTransaction.overallBatchMinGasPrice\n ) {\n throw new Error('Mismatch: overallBatchMinGasPrice.');\n }\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import { DopPopulateTransactionResponse, DopERC20Amount, NetworkName, TransactionReceiptLog, DopERC20AmountRecipient, DopNFTAmountRecipient, DopNFTAmount, TransactionGasDetails, DopERC20Recipient } from 'dop-sharedmodel-v5';
2
+ import { NFTTokenData } from 'dop-engine-v5';
3
+ import { ContractTransaction, Log } from 'ethers';
4
+ export declare const createRelayAdaptUnshieldERC20AmountRecipients: (networkName: NetworkName, unshieldERC20Amounts: DopERC20Amount[]) => DopERC20AmountRecipient[];
5
+ export declare const createRelayAdaptUnshieldNFTAmountRecipients: (networkName: NetworkName, unshieldNFTAmounts: DopNFTAmount[]) => DopNFTAmountRecipient[];
6
+ export declare const createNFTTokenDataFromDopNFTAmount: (nftAmount: DopNFTAmount) => NFTTokenData;
7
+ export declare const populateProvedCrossContractCalls: (networkName: NetworkName, dopWalletID: string, relayAdaptUnshieldERC20Amounts: DopERC20Amount[], relayAdaptUnshieldNFTAmounts: DopNFTAmount[], relayAdaptShieldERC20Recipients: DopERC20Recipient[], relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[], crossContractCalls: ContractTransaction[], relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<DopPopulateTransactionResponse>;
8
+ export declare const getRelayAdaptTransactionError: (receiptLogs: TransactionReceiptLog[] | readonly Log[]) => Optional<string>;
9
+ export declare const parseRelayAdaptReturnValue: (data: string) => Optional<string>;