dop-wallet-v6 1.1.5 → 1.1.6
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/README.md +0 -2
- package/dist/services/artifacts/artifact-downloader.d.ts +1 -1
- package/dist/services/artifacts/artifact-downloader.js +20 -20
- package/dist/services/artifacts/artifact-downloader.js.map +1 -1
- package/dist/services/artifacts/artifact-hash.d.ts +1 -2
- package/dist/services/artifacts/artifact-hash.js +8 -8
- package/dist/services/artifacts/artifact-hash.js.map +1 -1
- package/dist/services/artifacts/artifact-store.d.ts +0 -1
- package/dist/services/artifacts/artifact-util.d.ts +1 -1
- package/dist/services/artifacts/artifact-util.js +18 -26
- package/dist/services/artifacts/artifact-util.js.map +1 -1
- package/dist/services/artifacts/json/artifact-v2-hashes.json +0 -65
- package/dist/services/dop/core/artifacts.d.ts +3 -3
- package/dist/services/dop/core/artifacts.js +6 -8
- package/dist/services/dop/core/artifacts.js.map +1 -1
- package/dist/services/dop/core/engine.d.ts +2 -2
- package/dist/services/dop/core/engine.js +13 -16
- package/dist/services/dop/core/engine.js.map +1 -1
- package/dist/services/dop/core/prover.d.ts +1 -1
- package/dist/services/dop/core/prover.js +2 -2
- package/dist/services/dop/core/prover.js.map +1 -1
- package/dist/services/dop/core/providers.d.ts +3 -3
- package/dist/services/dop/core/providers.js +16 -16
- package/dist/services/dop/core/providers.js.map +1 -1
- package/dist/services/dop/core/shields.d.ts +1 -1
- package/dist/services/dop/core/shields.js +2 -2
- package/dist/services/dop/core/shields.js.map +1 -1
- package/dist/services/dop/history/transaction-history.d.ts +2 -2
- package/dist/services/dop/history/transaction-history.js +14 -14
- package/dist/services/dop/history/transaction-history.js.map +1 -1
- package/dist/services/dop/process/extract-first-note.d.ts +2 -2
- package/dist/services/dop/process/extract-first-note.js +15 -15
- package/dist/services/dop/process/extract-first-note.js.map +1 -1
- package/dist/services/dop/quick-sync/empty-events.d.ts +1 -1
- package/dist/services/dop/quick-sync/empty-events.js.map +1 -1
- package/dist/services/dop/quick-sync/graph-type-formatters.d.ts +1 -1
- package/dist/services/dop/quick-sync/graph-type-formatters.js +15 -15
- package/dist/services/dop/quick-sync/graph-type-formatters.js.map +1 -1
- package/dist/services/dop/quick-sync/graphql/index.js +5 -5
- package/dist/services/dop/quick-sync/graphql/index.js.map +1 -1
- package/dist/services/dop/quick-sync/quick-sync-graph.d.ts +1 -1
- package/dist/services/dop/quick-sync/quick-sync-graph.js +17 -17
- package/dist/services/dop/quick-sync/quick-sync-graph.js.map +1 -1
- package/dist/services/dop/util/bytes.d.ts +1 -1
- package/dist/services/dop/util/bytes.js +7 -7
- package/dist/services/dop/util/bytes.js.map +1 -1
- package/dist/services/dop/util/commitment.d.ts +2 -1
- package/dist/services/dop/util/commitment.js +4 -5
- package/dist/services/dop/util/commitment.js.map +1 -1
- package/dist/services/dop/util/crypto.d.ts +2 -2
- package/dist/services/dop/util/crypto.js +15 -15
- package/dist/services/dop/util/crypto.js.map +1 -1
- package/dist/services/dop/util/db.d.ts +1 -1
- package/dist/services/dop/util/db.js +2 -2
- package/dist/services/dop/util/db.js.map +1 -1
- package/dist/services/dop/wallets/balance-update.d.ts +2 -2
- package/dist/services/dop/wallets/balance-update.js +6 -6
- package/dist/services/dop/wallets/balance-update.js.map +1 -1
- package/dist/services/dop/wallets/balances.d.ts +2 -2
- package/dist/services/dop/wallets/balances.js.map +1 -1
- package/dist/services/dop/wallets/wallets.d.ts +2 -4
- package/dist/services/dop/wallets/wallets.js +12 -27
- package/dist/services/dop/wallets/wallets.js.map +1 -1
- package/dist/services/ethers/ethers-util.js +2 -2
- package/dist/services/ethers/ethers-util.js.map +1 -1
- package/dist/services/transactions/proof-cache.d.ts +1 -1
- package/dist/services/transactions/proof-cache.js +16 -16
- package/dist/services/transactions/proof-cache.js.map +1 -1
- package/dist/services/transactions/tx-cross-contract-calls.d.ts +4 -2
- package/dist/services/transactions/tx-cross-contract-calls.js +117 -269
- package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -1
- package/dist/services/transactions/tx-gas-details.d.ts +1 -1
- package/dist/services/transactions/tx-gas-details.js +24 -36
- package/dist/services/transactions/tx-gas-details.js.map +1 -1
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.d.ts +4 -1
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js +88 -187
- package/dist/services/transactions/tx-gas-relayer-fee-estimator.js.map +1 -1
- package/dist/services/transactions/tx-generator.d.ts +5 -4
- package/dist/services/transactions/tx-generator.js +42 -71
- package/dist/services/transactions/tx-generator.js.map +1 -1
- package/dist/services/transactions/tx-notes.d.ts +2 -2
- package/dist/services/transactions/tx-notes.js +13 -13
- package/dist/services/transactions/tx-notes.js.map +1 -1
- package/dist/services/transactions/tx-nullifiers.d.ts +1 -1
- package/dist/services/transactions/tx-nullifiers.js.map +1 -1
- package/dist/services/transactions/tx-proof-transfer.d.ts +3 -4
- package/dist/services/transactions/tx-proof-transfer.js +19 -13
- package/dist/services/transactions/tx-proof-transfer.js.map +1 -1
- package/dist/services/transactions/tx-proof-unshield.d.ts +4 -3
- package/dist/services/transactions/tx-proof-unshield.js +87 -146
- package/dist/services/transactions/tx-proof-unshield.js.map +1 -1
- package/dist/services/transactions/tx-shield-base-token.d.ts +2 -2
- package/dist/services/transactions/tx-shield-base-token.js +10 -13
- package/dist/services/transactions/tx-shield-base-token.js.map +1 -1
- package/dist/services/transactions/tx-shield.d.ts +1 -1
- package/dist/services/transactions/tx-shield.js +12 -16
- package/dist/services/transactions/tx-shield.js.map +1 -1
- package/dist/services/transactions/tx-transfer.d.ts +2 -1
- package/dist/services/transactions/tx-transfer.js +16 -55
- package/dist/services/transactions/tx-transfer.js.map +1 -1
- package/dist/services/transactions/tx-unshield.d.ts +3 -1
- package/dist/services/transactions/tx-unshield.js +40 -119
- package/dist/services/transactions/tx-unshield.js.map +1 -1
- package/dist/utils/blocked-address.js +3 -3
- package/dist/utils/blocked-address.js.map +1 -1
- package/dist/utils/error.js +2 -2
- package/dist/utils/error.js.map +1 -1
- package/dist/utils/gas-price.d.ts +1 -1
- package/dist/utils/gas-price.js +13 -13
- package/dist/utils/gas-price.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseRelayAdaptReturnValue = exports.getRelayAdaptTransactionError = exports.populateProvedCrossContractCalls = exports.createNFTTokenDataFromDopNFTAmount = exports.createRelayAdaptUnshieldNFTAmountRecipients = exports.createRelayAdaptUnshieldERC20AmountRecipients = void 0;
|
|
4
|
-
const
|
|
3
|
+
exports.parseRelayAdaptReturnValue = exports.getRelayAdaptTransactionError = exports.generateCrossContractCallsProof = exports.gasEstimateForUnprovenCrossContractCalls = exports.populateProvedCrossContractCalls = exports.createNFTTokenDataFromDopNFTAmount = exports.createRelayAdaptUnshieldNFTAmountRecipients = exports.createRelayAdaptUnshieldERC20AmountRecipients = void 0;
|
|
4
|
+
const dop_sharedmodel_1 = require("dop-sharedmodel");
|
|
5
5
|
const providers_1 = require("../dop/core/providers");
|
|
6
|
+
const tx_generator_1 = require("./tx-generator");
|
|
6
7
|
const proof_cache_1 = require("./proof-cache");
|
|
7
8
|
const logger_1 = require("../../utils/logger");
|
|
8
|
-
const
|
|
9
|
+
const dop_engine_1 = require("dop-engine");
|
|
9
10
|
const blocked_address_1 = require("../../utils/blocked-address");
|
|
10
|
-
|
|
11
|
+
const tx_gas_relayer_fee_estimator_1 = require("./tx-gas-relayer-fee-estimator");
|
|
11
12
|
const error_1 = require("../../utils/error");
|
|
12
13
|
const createValidCrossContractCalls = (crossContractCalls) => {
|
|
13
14
|
if (!crossContractCalls.length) {
|
|
@@ -21,7 +22,7 @@ const createValidCrossContractCalls = (crossContractCalls) => {
|
|
|
21
22
|
const transaction = {
|
|
22
23
|
to: transactionRequest.to,
|
|
23
24
|
value: transactionRequest.value,
|
|
24
|
-
data: (0,
|
|
25
|
+
data: (0, dop_engine_1.hexlify)(transactionRequest.data, true),
|
|
25
26
|
};
|
|
26
27
|
(0, blocked_address_1.assertNotBlockedAddress)(transaction.to);
|
|
27
28
|
return transaction;
|
|
@@ -64,9 +65,9 @@ const createNFTTokenDataFromDopNFTAmount = (nftAmount) => {
|
|
|
64
65
|
// ? bigIntStringToHex(nftAmount.tokenSubID)
|
|
65
66
|
// : nftAmount.tokenSubID;
|
|
66
67
|
return {
|
|
67
|
-
tokenAddress: (0,
|
|
68
|
+
tokenAddress: (0, dop_engine_1.formatToByteLength)(nftAmount.nftAddress, dop_engine_1.ByteLength.Address, true),
|
|
68
69
|
tokenType: nftAmount.nftTokenType,
|
|
69
|
-
tokenSubID: (0,
|
|
70
|
+
tokenSubID: (0, dop_engine_1.formatToByteLength)(nftAmount.tokenSubID, dop_engine_1.ByteLength.UINT_256, true),
|
|
70
71
|
};
|
|
71
72
|
};
|
|
72
73
|
exports.createNFTTokenDataFromDopNFTAmount = createNFTTokenDataFromDopNFTAmount;
|
|
@@ -78,7 +79,7 @@ const createRelayAdaptShieldNFTRecipients = (relayAdaptShieldNFTRecipients) => {
|
|
|
78
79
|
};
|
|
79
80
|
const populateProvedCrossContractCalls = async (networkName, dopWalletID, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, gasDetails) => {
|
|
80
81
|
try {
|
|
81
|
-
const { transaction, nullifiers } = await (0, proof_cache_1.populateProvedTransaction)(networkName,
|
|
82
|
+
const { transaction, nullifiers } = await (0, proof_cache_1.populateProvedTransaction)(networkName, dop_sharedmodel_1.ProofType.CrossContractCalls, dopWalletID, false, // showSenderAddressToRecipient
|
|
82
83
|
undefined, // memoText
|
|
83
84
|
[], // erc20AmountRecipients
|
|
84
85
|
[], // nftAmountRecipients
|
|
@@ -94,271 +95,118 @@ const populateProvedCrossContractCalls = async (networkName, dopWalletID, relayA
|
|
|
94
95
|
}
|
|
95
96
|
};
|
|
96
97
|
exports.populateProvedCrossContractCalls = populateProvedCrossContractCalls;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
);
|
|
133
|
-
|
|
134
|
-
const shieldRandom = randomHex(16);
|
|
135
|
-
const relayShieldRequests =
|
|
136
|
-
await RelayAdaptHelper.generateRelayShieldRequests(
|
|
137
|
-
shieldRandom,
|
|
138
|
-
relayAdaptShieldERC20Recipients,
|
|
139
|
-
createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
const minimumGasLimit =
|
|
143
|
-
minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;
|
|
144
|
-
|
|
145
|
-
const response = await gasEstimateResponseDummyProofIterativeRelayerFee(
|
|
146
|
-
(relayerFeeERC20Amount: Optional<DopERC20Amount>) =>
|
|
147
|
-
generateDummyProofTransactions(
|
|
148
|
-
ProofType.CrossContractCalls,
|
|
149
|
-
networkName,
|
|
150
|
-
dopWalletID,
|
|
151
|
-
encryptionKey,
|
|
152
|
-
false, // showSenderAddressToRecipient
|
|
153
|
-
undefined, // memoText
|
|
154
|
-
relayAdaptUnshieldERC20AmountRecipients,
|
|
155
|
-
relayAdaptUnshieldNFTAmountRecipients,
|
|
156
|
-
relayerFeeERC20Amount,
|
|
157
|
-
sendWithPublicWallet,
|
|
158
|
-
overallBatchMinGasPrice,
|
|
159
|
-
valueCheck
|
|
160
|
-
),
|
|
161
|
-
async (txs: TransactionStruct[]) => {
|
|
162
|
-
const relayAdaptParamsRandom = randomHex(31);
|
|
163
|
-
|
|
164
|
-
// TODO: We should add the relay adapt contract gas limit here.
|
|
165
|
-
const transaction = await relayAdaptContract.populateCrossContractCalls(
|
|
166
|
-
txs,
|
|
167
|
-
validCrossContractCalls,
|
|
168
|
-
relayShieldRequests,
|
|
169
|
-
relayAdaptParamsRandom,
|
|
170
|
-
true, // isGasEstimate
|
|
171
|
-
!sendWithPublicWallet, // isRelayerTransaction
|
|
172
|
-
minimumGasLimit,
|
|
173
|
-
);
|
|
174
|
-
// Remove gasLimit, we'll set to the minimum below.
|
|
175
|
-
// TODO: Remove after callbacks upgrade.
|
|
176
|
-
delete transaction.gasLimit;
|
|
177
|
-
return transaction;
|
|
178
|
-
},
|
|
179
|
-
networkName,
|
|
180
|
-
dopWalletID,
|
|
181
|
-
relayAdaptUnshieldERC20AmountRecipients,
|
|
182
|
-
originalGasDetails,
|
|
183
|
-
feeTokenDetails,
|
|
184
|
-
sendWithPublicWallet,
|
|
185
|
-
true, // isCrossContractCall
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
// TODO: Remove this after callbacks upgrade.
|
|
189
|
-
// If gas estimate is under the cross-contract-minimum, replace it with the minimum.
|
|
190
|
-
if (response.gasEstimate) {
|
|
191
|
-
if (response.gasEstimate < minimumGasLimit) {
|
|
192
|
-
response.gasEstimate = minimumGasLimit;
|
|
193
|
-
}
|
|
98
|
+
const gasEstimateForUnprovenCrossContractCalls = async (networkName, dopWalletID, encryptionKey, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, originalGasDetails, feeTokenDetails, sendWithPublicWallet, minGasLimit) => {
|
|
99
|
+
try {
|
|
100
|
+
(0, proof_cache_1.setCachedProvedTransaction)(undefined);
|
|
101
|
+
const overallBatchMinGasPrice = 0n;
|
|
102
|
+
const validCrossContractCalls = createValidCrossContractCalls(crossContractCalls);
|
|
103
|
+
const relayAdaptContract = (0, providers_1.getRelayAdaptContractForNetwork)(networkName);
|
|
104
|
+
const relayAdaptUnshieldERC20AmountRecipients = (0, exports.createRelayAdaptUnshieldERC20AmountRecipients)(networkName, relayAdaptUnshieldERC20Amounts);
|
|
105
|
+
const relayAdaptUnshieldNFTAmountRecipients = (0, exports.createRelayAdaptUnshieldNFTAmountRecipients)(networkName, relayAdaptUnshieldNFTAmounts);
|
|
106
|
+
const shieldRandom = (0, dop_engine_1.randomHex)(16);
|
|
107
|
+
const relayShieldRequests = await dop_engine_1.RelayAdaptHelper.generateRelayShieldRequests(shieldRandom, relayAdaptShieldERC20Recipients, createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients));
|
|
108
|
+
const minimumGasLimit = minGasLimit ?? dop_engine_1.MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;
|
|
109
|
+
const response = await (0, tx_gas_relayer_fee_estimator_1.gasEstimateResponseDummyProofIterativeRelayerFee)((relayerFeeERC20Amount) => (0, tx_generator_1.generateDummyProofTransactions)(dop_sharedmodel_1.ProofType.CrossContractCalls, networkName, dopWalletID, encryptionKey, false, // showSenderAddressToRecipient
|
|
110
|
+
undefined, // memoText
|
|
111
|
+
relayAdaptUnshieldERC20AmountRecipients, relayAdaptUnshieldNFTAmountRecipients, relayerFeeERC20Amount, sendWithPublicWallet, overallBatchMinGasPrice), async (txs) => {
|
|
112
|
+
const relayAdaptParamsRandom = (0, dop_engine_1.randomHex)(31);
|
|
113
|
+
// TODO: We should add the relay adapt contract gas limit here.
|
|
114
|
+
const transaction = await relayAdaptContract.populateCrossContractCalls(txs, validCrossContractCalls, relayShieldRequests, relayAdaptParamsRandom, true, // isGasEstimate
|
|
115
|
+
!sendWithPublicWallet, // isRelayerTransaction
|
|
116
|
+
minimumGasLimit);
|
|
117
|
+
// Remove gasLimit, we'll set to the minimum below.
|
|
118
|
+
// TODO: Remove after callbacks upgrade.
|
|
119
|
+
delete transaction.gasLimit;
|
|
120
|
+
return transaction;
|
|
121
|
+
}, networkName, dopWalletID, relayAdaptUnshieldERC20AmountRecipients, originalGasDetails, feeTokenDetails, sendWithPublicWallet, true);
|
|
122
|
+
// TODO: Remove this after callbacks upgrade.
|
|
123
|
+
// If gas estimate is under the cross-contract-minimum, replace it with the minimum.
|
|
124
|
+
if (response.gasEstimate) {
|
|
125
|
+
if (response.gasEstimate < minimumGasLimit) {
|
|
126
|
+
response.gasEstimate = minimumGasLimit;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return response;
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
throw (0, error_1.reportAndSanitizeError)(exports.gasEstimateForUnprovenCrossContractCalls.name, err);
|
|
194
133
|
}
|
|
195
|
-
|
|
196
|
-
return response;
|
|
197
|
-
} catch (err) {
|
|
198
|
-
throw reportAndSanitizeError(
|
|
199
|
-
gasEstimateForUnprovenCrossContractCalls.name,
|
|
200
|
-
err,
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
134
|
};
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(
|
|
274
|
-
dummyUnshieldTxs,
|
|
275
|
-
validCrossContractCalls,
|
|
276
|
-
relayShieldRequests,
|
|
277
|
-
relayAdaptParamsRandom,
|
|
278
|
-
isRelayerTransaction,
|
|
279
|
-
minimumGasLimit,
|
|
280
|
-
);
|
|
281
|
-
const relayAdaptID: AdaptID = {
|
|
282
|
-
contract: relayAdaptContract.address,
|
|
283
|
-
parameters: relayAdaptParams,
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
// console.log("====== 4",
|
|
288
|
-
// ProofType.CrossContractCalls,
|
|
289
|
-
// networkName,
|
|
290
|
-
// dopWalletID,
|
|
291
|
-
// encryptionKey,
|
|
292
|
-
// false, // showSenderAddressToRecipient
|
|
293
|
-
// undefined, // memoText
|
|
294
|
-
// relayAdaptUnshieldERC20AmountRecipients,
|
|
295
|
-
// relayAdaptUnshieldNFTAmountRecipients,
|
|
296
|
-
// relayerFeeERC20AmountRecipient,
|
|
297
|
-
// sendWithPublicWallet,
|
|
298
|
-
// relayAdaptID,
|
|
299
|
-
// false, // useDummyProof
|
|
300
|
-
// overallBatchMinGasPrice,
|
|
301
|
-
// progressCallback);
|
|
302
|
-
|
|
303
|
-
// Create real transactions with relay adapt params.
|
|
304
|
-
const transactions = await generateProofTransactions(
|
|
305
|
-
ProofType.CrossContractCalls,
|
|
306
|
-
networkName,
|
|
307
|
-
dopWalletID,
|
|
308
|
-
encryptionKey,
|
|
309
|
-
false, // showSenderAddressToRecipient
|
|
310
|
-
undefined, // memoText
|
|
311
|
-
relayAdaptUnshieldERC20AmountRecipients,
|
|
312
|
-
relayAdaptUnshieldNFTAmountRecipients,
|
|
313
|
-
relayerFeeERC20AmountRecipient,
|
|
314
|
-
sendWithPublicWallet,
|
|
315
|
-
relayAdaptID,
|
|
316
|
-
false, // useDummyProof
|
|
317
|
-
overallBatchMinGasPrice,
|
|
318
|
-
progressCallback,
|
|
319
|
-
valueCheck
|
|
320
|
-
);
|
|
321
|
-
|
|
322
|
-
const nullifiers = nullifiersForTransactions(transactions);
|
|
323
|
-
|
|
324
|
-
const transaction = await relayAdaptContract.populateCrossContractCalls(
|
|
325
|
-
transactions,
|
|
326
|
-
validCrossContractCalls,
|
|
327
|
-
relayShieldRequests,
|
|
328
|
-
relayAdaptParamsRandom,
|
|
329
|
-
false, // isGasEstimate
|
|
330
|
-
isRelayerTransaction,
|
|
331
|
-
minimumGasLimit,
|
|
332
|
-
);
|
|
333
|
-
delete transaction.from;
|
|
334
|
-
|
|
335
|
-
setCachedProvedTransaction({
|
|
336
|
-
proofType: ProofType.CrossContractCalls,
|
|
337
|
-
dopWalletID,
|
|
338
|
-
showSenderAddressToRecipient: false,
|
|
339
|
-
memoText: undefined,
|
|
340
|
-
erc20AmountRecipients: [],
|
|
341
|
-
nftAmountRecipients: [],
|
|
342
|
-
relayAdaptUnshieldERC20Amounts,
|
|
343
|
-
relayAdaptUnshieldNFTAmounts,
|
|
344
|
-
relayAdaptShieldERC20Recipients,
|
|
345
|
-
relayAdaptShieldNFTRecipients,
|
|
346
|
-
crossContractCalls: validCrossContractCalls,
|
|
347
|
-
relayerFeeERC20AmountRecipient,
|
|
348
|
-
sendWithPublicWallet,
|
|
349
|
-
transaction,
|
|
350
|
-
overallBatchMinGasPrice,
|
|
351
|
-
nullifiers,
|
|
352
|
-
});
|
|
353
|
-
} catch (err) {
|
|
354
|
-
throw reportAndSanitizeError(generateCrossContractCallsProof.name, err);
|
|
355
|
-
}
|
|
135
|
+
exports.gasEstimateForUnprovenCrossContractCalls = gasEstimateForUnprovenCrossContractCalls;
|
|
136
|
+
const generateCrossContractCallsProof = async (networkName, dopWalletID, encryptionKey, relayAdaptUnshieldERC20Amounts, relayAdaptUnshieldNFTAmounts, relayAdaptShieldERC20Recipients, relayAdaptShieldNFTRecipients, crossContractCalls, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice, minGasLimit, progressCallback) => {
|
|
137
|
+
try {
|
|
138
|
+
(0, proof_cache_1.setCachedProvedTransaction)(undefined);
|
|
139
|
+
const validCrossContractCalls = createValidCrossContractCalls(crossContractCalls);
|
|
140
|
+
const relayAdaptContract = (0, providers_1.getRelayAdaptContractForNetwork)(networkName);
|
|
141
|
+
const relayAdaptUnshieldERC20AmountRecipients = (0, exports.createRelayAdaptUnshieldERC20AmountRecipients)(networkName, relayAdaptUnshieldERC20Amounts);
|
|
142
|
+
const relayAdaptUnshieldNFTAmountRecipients = (0, exports.createRelayAdaptUnshieldNFTAmountRecipients)(networkName, relayAdaptUnshieldNFTAmounts);
|
|
143
|
+
// Generate dummy txs for relay adapt params.
|
|
144
|
+
const dummyUnshieldTxs = await (0, tx_generator_1.generateDummyProofTransactions)(dop_sharedmodel_1.ProofType.CrossContractCalls, networkName, dopWalletID, encryptionKey, false, // showSenderAddressToRecipient
|
|
145
|
+
undefined, // memoText
|
|
146
|
+
relayAdaptUnshieldERC20AmountRecipients, relayAdaptUnshieldNFTAmountRecipients, relayerFeeERC20AmountRecipient, sendWithPublicWallet, overallBatchMinGasPrice);
|
|
147
|
+
// Generate relay adapt params from dummy transactions.
|
|
148
|
+
const shieldRandom = (0, dop_engine_1.randomHex)(16);
|
|
149
|
+
const relayShieldRequests = await dop_engine_1.RelayAdaptHelper.generateRelayShieldRequests(shieldRandom, relayAdaptShieldERC20Recipients, createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients));
|
|
150
|
+
const minimumGasLimit = minGasLimit ?? dop_engine_1.MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;
|
|
151
|
+
const isRelayerTransaction = !sendWithPublicWallet;
|
|
152
|
+
const relayAdaptParamsRandom = (0, dop_engine_1.randomHex)(31);
|
|
153
|
+
const relayAdaptParams = await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(dummyUnshieldTxs, validCrossContractCalls, relayShieldRequests, relayAdaptParamsRandom, isRelayerTransaction, minimumGasLimit);
|
|
154
|
+
const relayAdaptID = {
|
|
155
|
+
contract: relayAdaptContract.address,
|
|
156
|
+
parameters: relayAdaptParams,
|
|
157
|
+
};
|
|
158
|
+
// console.log("====== 4",
|
|
159
|
+
// ProofType.CrossContractCalls,
|
|
160
|
+
// networkName,
|
|
161
|
+
// dopWalletID,
|
|
162
|
+
// encryptionKey,
|
|
163
|
+
// false, // showSenderAddressToRecipient
|
|
164
|
+
// undefined, // memoText
|
|
165
|
+
// relayAdaptUnshieldERC20AmountRecipients,
|
|
166
|
+
// relayAdaptUnshieldNFTAmountRecipients,
|
|
167
|
+
// relayerFeeERC20AmountRecipient,
|
|
168
|
+
// sendWithPublicWallet,
|
|
169
|
+
// relayAdaptID,
|
|
170
|
+
// false, // useDummyProof
|
|
171
|
+
// overallBatchMinGasPrice,
|
|
172
|
+
// progressCallback);
|
|
173
|
+
// Create real transactions with relay adapt params.
|
|
174
|
+
const transactions = await (0, tx_generator_1.generateProofTransactions)(dop_sharedmodel_1.ProofType.CrossContractCalls, networkName, dopWalletID, encryptionKey, false, // showSenderAddressToRecipient
|
|
175
|
+
undefined, // memoText
|
|
176
|
+
relayAdaptUnshieldERC20AmountRecipients, relayAdaptUnshieldNFTAmountRecipients, relayerFeeERC20AmountRecipient, sendWithPublicWallet, relayAdaptID, false, // useDummyProof
|
|
177
|
+
overallBatchMinGasPrice, progressCallback);
|
|
178
|
+
const nullifiers = (0, tx_generator_1.nullifiersForTransactions)(transactions);
|
|
179
|
+
const transaction = await relayAdaptContract.populateCrossContractCalls(transactions, validCrossContractCalls, relayShieldRequests, relayAdaptParamsRandom, false, // isGasEstimate
|
|
180
|
+
isRelayerTransaction, minimumGasLimit);
|
|
181
|
+
delete transaction.from;
|
|
182
|
+
(0, proof_cache_1.setCachedProvedTransaction)({
|
|
183
|
+
proofType: dop_sharedmodel_1.ProofType.CrossContractCalls,
|
|
184
|
+
dopWalletID,
|
|
185
|
+
showSenderAddressToRecipient: false,
|
|
186
|
+
memoText: undefined,
|
|
187
|
+
erc20AmountRecipients: [],
|
|
188
|
+
nftAmountRecipients: [],
|
|
189
|
+
relayAdaptUnshieldERC20Amounts,
|
|
190
|
+
relayAdaptUnshieldNFTAmounts,
|
|
191
|
+
relayAdaptShieldERC20Recipients,
|
|
192
|
+
relayAdaptShieldNFTRecipients,
|
|
193
|
+
crossContractCalls: validCrossContractCalls,
|
|
194
|
+
relayerFeeERC20AmountRecipient,
|
|
195
|
+
sendWithPublicWallet,
|
|
196
|
+
transaction,
|
|
197
|
+
overallBatchMinGasPrice,
|
|
198
|
+
nullifiers,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
throw (0, error_1.reportAndSanitizeError)(exports.generateCrossContractCallsProof.name, err);
|
|
203
|
+
}
|
|
356
204
|
};
|
|
357
|
-
|
|
205
|
+
exports.generateCrossContractCallsProof = generateCrossContractCallsProof;
|
|
358
206
|
const getRelayAdaptTransactionError = (receiptLogs) => {
|
|
359
207
|
try {
|
|
360
|
-
const relayAdaptError =
|
|
361
|
-
if ((0,
|
|
208
|
+
const relayAdaptError = dop_engine_1.RelayAdaptContract.getRelayAdaptCallError(receiptLogs);
|
|
209
|
+
if ((0, dop_sharedmodel_1.isDefined)(relayAdaptError)) {
|
|
362
210
|
(0, logger_1.sendErrorMessage)(relayAdaptError);
|
|
363
211
|
return relayAdaptError;
|
|
364
212
|
}
|
|
@@ -371,7 +219,7 @@ const getRelayAdaptTransactionError = (receiptLogs) => {
|
|
|
371
219
|
exports.getRelayAdaptTransactionError = getRelayAdaptTransactionError;
|
|
372
220
|
const parseRelayAdaptReturnValue = (data) => {
|
|
373
221
|
try {
|
|
374
|
-
const relayAdaptErrorParsed =
|
|
222
|
+
const relayAdaptErrorParsed = dop_engine_1.RelayAdaptContract.parseRelayAdaptReturnValue(data);
|
|
375
223
|
if (relayAdaptErrorParsed) {
|
|
376
224
|
(0, logger_1.sendErrorMessage)(relayAdaptErrorParsed.error);
|
|
377
225
|
return relayAdaptErrorParsed.error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tx-cross-contract-calls.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-cross-contract-calls.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopPopulateTransactionResponse,\n DopTransactionGasEstimateResponse,\n DopERC20Amount,\n NetworkName,\n ProofType,\n TransactionReceiptLog,\n FeeTokenDetails,\n DopERC20AmountRecipient,\n DopNFTAmountRecipient,\n DopNFTAmount,\n TransactionGasDetails,\n isDefined,\n DopERC20Recipient,\n} from 'dop-sharedmodel-v5';\nimport { getRelayAdaptContractForNetwork } from '../dop/core/providers';\nimport {\n generateDummyProofTransactions,\n generateProofTransactions,\n nullifiersForTransactions,\n} from './tx-generator';\nimport {\n populateProvedTransaction,\n setCachedProvedTransaction,\n} from './proof-cache';\nimport { sendErrorMessage } from '../../utils/logger';\nimport {\n RelayAdaptHelper,\n AdaptID,\n TransactionStruct,\n hexlify,\n randomHex,\n RelayAdaptContract,\n ProverProgressCallback,\n NFTTokenData,\n formatToByteLength,\n ByteLength,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT,\n RelayAdaptShieldNFTRecipient,\n} from 'dop-engine-v5';\nimport { assertNotBlockedAddress } from '../../utils/blocked-address';\n// import { gasEstimateResponseDummyProofIterativeRelayerFee } from './tx-gas-relayer-fee-estimator';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction, Log } from 'ethers';\n\nconst createValidCrossContractCalls = (\n crossContractCalls: ContractTransaction[],\n): ContractTransaction[] => {\n if (!crossContractCalls.length) {\n throw new Error('No cross contract calls in transaction.');\n }\n try {\n return crossContractCalls.map(transactionRequest => {\n if (!transactionRequest.to || !transactionRequest.data) {\n throw new Error(`Cross-contract calls require 'to' and 'data' fields.`);\n }\n const transaction: ContractTransaction = {\n to: transactionRequest.to,\n value: transactionRequest.value,\n data: hexlify(transactionRequest.data, true),\n };\n assertNotBlockedAddress(transaction.to);\n return transaction;\n });\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n throw reportAndSanitizeError(createValidCrossContractCalls.name, err);\n }\n};\n\nexport const createRelayAdaptUnshieldERC20AmountRecipients = (\n networkName: NetworkName,\n unshieldERC20Amounts: DopERC20Amount[],\n): DopERC20AmountRecipient[] => {\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n const unshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n unshieldERC20Amounts.map(unshieldERC20Amount => ({\n ...unshieldERC20Amount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldERC20AmountRecipients;\n};\n\nexport const createRelayAdaptUnshieldNFTAmountRecipients = (\n networkName: NetworkName,\n unshieldNFTAmounts: DopNFTAmount[],\n): DopNFTAmountRecipient[] => {\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n const unshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n unshieldNFTAmounts.map(unshieldNFTAmount => ({\n ...unshieldNFTAmount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldNFTAmountRecipients;\n};\n\nconst isDecimalStr = (str: string): boolean => {\n const decimalPattern = /^[-+]?(\\d+(\\.\\d*)?|\\.\\d+)$/;\n return decimalPattern.test(str);\n}\n\nconst bigIntStringToHex = (bigintString: string): string => {\n return `0x${BigInt(bigintString).toString(16)}`;\n};\n\nexport const createNFTTokenDataFromDopNFTAmount = (\n nftAmount: DopNFTAmount,\n): NFTTokenData => {\n\n // const tokenSubIDHex = isDecimalStr(nftAmount.tokenSubID)\n // ? bigIntStringToHex(nftAmount.tokenSubID)\n // : nftAmount.tokenSubID;\n\n return {\n tokenAddress: formatToByteLength(\n nftAmount.nftAddress,\n ByteLength.Address,\n true,\n ),\n tokenType: nftAmount.nftTokenType as 1 | 2,\n tokenSubID: formatToByteLength(\n nftAmount.tokenSubID,\n ByteLength.UINT_256,\n true,\n ),\n };\n};\n\nconst createRelayAdaptShieldNFTRecipients = (\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n): RelayAdaptShieldNFTRecipient[] => {\n return relayAdaptShieldNFTRecipients.map(\n (nftRecipient: DopNFTAmountRecipient) => ({\n nftTokenData: createNFTTokenDataFromDopNFTAmount(nftRecipient),\n recipientAddress: nftRecipient.recipientAddress,\n }),\n );\n};\n\nexport const populateProvedCrossContractCalls = async (\n networkName: NetworkName,\n dopWalletID: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } = await populateProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n [], // erc20AmountRecipients\n [], // nftAmountRecipients\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n delete transaction.from;\n\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedCrossContractCalls.name, err);\n }\n};\n/*\nexport const gasEstimateForUnprovenCrossContractCalls = async (\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n minGasLimit: Optional<bigint>,\n valueCheck: bigint\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const overallBatchMinGasPrice = 0n;\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n const shieldRandom = randomHex(16);\n const relayShieldRequests =\n await RelayAdaptHelper.generateRelayShieldRequests(\n shieldRandom,\n relayAdaptShieldERC20Recipients,\n createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),\n );\n\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;\n\n const response = await gasEstimateResponseDummyProofIterativeRelayerFee(\n (relayerFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n valueCheck\n ),\n async (txs: TransactionStruct[]) => {\n const relayAdaptParamsRandom = randomHex(31);\n\n // TODO: We should add the relay adapt contract gas limit here.\n const transaction = await relayAdaptContract.populateCrossContractCalls(\n txs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n true, // isGasEstimate\n !sendWithPublicWallet, // isRelayerTransaction\n minimumGasLimit,\n );\n // Remove gasLimit, we'll set to the minimum below.\n // TODO: Remove after callbacks upgrade.\n delete transaction.gasLimit;\n return transaction;\n },\n networkName,\n dopWalletID,\n relayAdaptUnshieldERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n true, // isCrossContractCall\n );\n\n // TODO: Remove this after callbacks upgrade.\n // If gas estimate is under the cross-contract-minimum, replace it with the minimum.\n if (response.gasEstimate) {\n if (response.gasEstimate < minimumGasLimit) {\n response.gasEstimate = minimumGasLimit;\n }\n }\n\n return response;\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenCrossContractCalls.name,\n err,\n );\n }\n};\n*/\n/*\nexport const generateCrossContractCallsProof = async (\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n minGasLimit: Optional<bigint>,\n progressCallback: ProverProgressCallback,\n valueCheck: bigint\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n // Generate dummy txs for relay adapt params.\n const dummyUnshieldTxs = await generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n valueCheck\n );\n\n // Generate relay adapt params from dummy transactions.\n const shieldRandom = randomHex(16);\n\n const relayShieldRequests =\n await RelayAdaptHelper.generateRelayShieldRequests(\n shieldRandom,\n relayAdaptShieldERC20Recipients,\n createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),\n );\n\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;\n\n const isRelayerTransaction = !sendWithPublicWallet;\n const relayAdaptParamsRandom = randomHex(31);\n const relayAdaptParams =\n await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(\n dummyUnshieldTxs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n isRelayerTransaction,\n minimumGasLimit,\n );\n const relayAdaptID: AdaptID = {\n contract: relayAdaptContract.address,\n parameters: relayAdaptParams,\n };\n\n\n // console.log(\"====== 4\",\n // ProofType.CrossContractCalls,\n // networkName,\n // dopWalletID,\n // encryptionKey,\n // false, // showSenderAddressToRecipient\n // undefined, // memoText\n // relayAdaptUnshieldERC20AmountRecipients,\n // relayAdaptUnshieldNFTAmountRecipients,\n // relayerFeeERC20AmountRecipient,\n // sendWithPublicWallet,\n // relayAdaptID,\n // false, // useDummyProof\n // overallBatchMinGasPrice,\n // progressCallback);\n\n // Create real transactions with relay adapt params.\n const transactions = await generateProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n relayAdaptID,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n valueCheck\n );\n\n const nullifiers = nullifiersForTransactions(transactions);\n\n const transaction = await relayAdaptContract.populateCrossContractCalls(\n transactions,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n false, // isGasEstimate\n isRelayerTransaction,\n minimumGasLimit,\n );\n delete transaction.from;\n\n setCachedProvedTransaction({\n proofType: ProofType.CrossContractCalls,\n dopWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients: [],\n nftAmountRecipients: [],\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls: validCrossContractCalls,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n transaction,\n overallBatchMinGasPrice,\n nullifiers,\n });\n } catch (err) {\n throw reportAndSanitizeError(generateCrossContractCallsProof.name, err);\n }\n};\n*/\n\nexport const getRelayAdaptTransactionError = (\n receiptLogs: TransactionReceiptLog[] | readonly Log[],\n): Optional<string> => {\n try {\n const relayAdaptError =\n RelayAdaptContract.getRelayAdaptCallError(receiptLogs);\n if (isDefined(relayAdaptError)) {\n sendErrorMessage(relayAdaptError);\n return relayAdaptError;\n }\n return undefined;\n } catch (err) {\n throw reportAndSanitizeError(getRelayAdaptTransactionError.name, err);\n }\n};\n\nexport const parseRelayAdaptReturnValue = (data: string): Optional<string> => {\n try {\n const relayAdaptErrorParsed =\n RelayAdaptContract.parseRelayAdaptReturnValue(data);\n if (relayAdaptErrorParsed) {\n sendErrorMessage(relayAdaptErrorParsed.error);\n return relayAdaptErrorParsed.error;\n }\n return undefined;\n } catch (err) {\n throw reportAndSanitizeError(getRelayAdaptTransactionError.name, err);\n }\n};\n"]}
|
|
1
|
+
{"version":3,"file":"tx-cross-contract-calls.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-cross-contract-calls.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopPopulateTransactionResponse,\n DopTransactionGasEstimateResponse,\n DopERC20Amount,\n NetworkName,\n ProofType,\n TransactionReceiptLog,\n FeeTokenDetails,\n DopERC20AmountRecipient,\n DopNFTAmountRecipient,\n DopNFTAmount,\n TransactionGasDetails,\n isDefined,\n DopERC20Recipient,\n} from 'dop-sharedmodel';\nimport { getRelayAdaptContractForNetwork } from '../dop/core/providers';\nimport {\n generateDummyProofTransactions,\n generateProofTransactions,\n nullifiersForTransactions,\n} from './tx-generator';\nimport {\n populateProvedTransaction,\n setCachedProvedTransaction,\n} from './proof-cache';\nimport { sendErrorMessage } from '../../utils/logger';\nimport {\n RelayAdaptHelper,\n AdaptID,\n TransactionStruct,\n hexlify,\n randomHex,\n RelayAdaptContract,\n ProverProgressCallback,\n NFTTokenData,\n formatToByteLength,\n ByteLength,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT,\n RelayAdaptShieldNFTRecipient,\n} from 'dop-engine';\nimport { assertNotBlockedAddress } from '../../utils/blocked-address';\nimport { gasEstimateResponseDummyProofIterativeRelayerFee } from './tx-gas-relayer-fee-estimator';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction, Log } from 'ethers';\n\nconst createValidCrossContractCalls = (\n crossContractCalls: ContractTransaction[],\n): ContractTransaction[] => {\n if (!crossContractCalls.length) {\n throw new Error('No cross contract calls in transaction.');\n }\n try {\n return crossContractCalls.map(transactionRequest => {\n if (!transactionRequest.to || !transactionRequest.data) {\n throw new Error(`Cross-contract calls require 'to' and 'data' fields.`);\n }\n const transaction: ContractTransaction = {\n to: transactionRequest.to,\n value: transactionRequest.value,\n data: hexlify(transactionRequest.data, true),\n };\n assertNotBlockedAddress(transaction.to);\n return transaction;\n });\n } catch (err) {\n if (!(err instanceof Error)) {\n throw err;\n }\n throw reportAndSanitizeError(createValidCrossContractCalls.name, err);\n }\n};\n\nexport const createRelayAdaptUnshieldERC20AmountRecipients = (\n networkName: NetworkName,\n unshieldERC20Amounts: DopERC20Amount[],\n): DopERC20AmountRecipient[] => {\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n const unshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n unshieldERC20Amounts.map(unshieldERC20Amount => ({\n ...unshieldERC20Amount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldERC20AmountRecipients;\n};\n\nexport const createRelayAdaptUnshieldNFTAmountRecipients = (\n networkName: NetworkName,\n unshieldNFTAmounts: DopNFTAmount[],\n): DopNFTAmountRecipient[] => {\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n const unshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n unshieldNFTAmounts.map(unshieldNFTAmount => ({\n ...unshieldNFTAmount,\n recipientAddress: relayAdaptContract.address,\n }));\n return unshieldNFTAmountRecipients;\n};\n\nconst isDecimalStr = (str: string): boolean => {\n const decimalPattern = /^[-+]?(\\d+(\\.\\d*)?|\\.\\d+)$/;\n return decimalPattern.test(str);\n}\n\nconst bigIntStringToHex = (bigintString: string): string => {\n return `0x${BigInt(bigintString).toString(16)}`;\n};\n\nexport const createNFTTokenDataFromDopNFTAmount = (\n nftAmount: DopNFTAmount,\n): NFTTokenData => {\n\n // const tokenSubIDHex = isDecimalStr(nftAmount.tokenSubID)\n // ? bigIntStringToHex(nftAmount.tokenSubID)\n // : nftAmount.tokenSubID;\n\n return {\n tokenAddress: formatToByteLength(\n nftAmount.nftAddress,\n ByteLength.Address,\n true,\n ),\n tokenType: nftAmount.nftTokenType as 1 | 2,\n tokenSubID: formatToByteLength(\n nftAmount.tokenSubID,\n ByteLength.UINT_256,\n true,\n ),\n };\n};\n\nconst createRelayAdaptShieldNFTRecipients = (\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n): RelayAdaptShieldNFTRecipient[] => {\n return relayAdaptShieldNFTRecipients.map(\n (nftRecipient: DopNFTAmountRecipient) => ({\n nftTokenData: createNFTTokenDataFromDopNFTAmount(nftRecipient),\n recipientAddress: nftRecipient.recipientAddress,\n }),\n );\n};\n\nexport const populateProvedCrossContractCalls = async (\n networkName: NetworkName,\n dopWalletID: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } = await populateProvedTransaction(\n networkName,\n ProofType.CrossContractCalls,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n [], // erc20AmountRecipients\n [], // nftAmountRecipients\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n delete transaction.from;\n\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedCrossContractCalls.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenCrossContractCalls = async (\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n minGasLimit: Optional<bigint>,\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const overallBatchMinGasPrice = 0n;\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n const shieldRandom = randomHex(16);\n const relayShieldRequests =\n await RelayAdaptHelper.generateRelayShieldRequests(\n shieldRandom,\n relayAdaptShieldERC20Recipients,\n createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),\n );\n\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;\n\n const response = await gasEstimateResponseDummyProofIterativeRelayerFee(\n (relayerFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n async (txs: TransactionStruct[]) => {\n const relayAdaptParamsRandom = randomHex(31);\n\n // TODO: We should add the relay adapt contract gas limit here.\n const transaction = await relayAdaptContract.populateCrossContractCalls(\n txs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n true, // isGasEstimate\n !sendWithPublicWallet, // isRelayerTransaction\n minimumGasLimit,\n );\n // Remove gasLimit, we'll set to the minimum below.\n // TODO: Remove after callbacks upgrade.\n delete transaction.gasLimit;\n return transaction;\n },\n networkName,\n dopWalletID,\n relayAdaptUnshieldERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n true, // isCrossContractCall\n );\n\n // TODO: Remove this after callbacks upgrade.\n // If gas estimate is under the cross-contract-minimum, replace it with the minimum.\n if (response.gasEstimate) {\n if (response.gasEstimate < minimumGasLimit) {\n response.gasEstimate = minimumGasLimit;\n }\n }\n\n return response;\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenCrossContractCalls.name,\n err,\n );\n }\n};\n\nexport const generateCrossContractCallsProof = async (\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptUnshieldERC20Amounts: DopERC20Amount[],\n relayAdaptUnshieldNFTAmounts: DopNFTAmount[],\n relayAdaptShieldERC20Recipients: DopERC20Recipient[],\n relayAdaptShieldNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n relayerFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n minGasLimit: Optional<bigint>,\n progressCallback: ProverProgressCallback,\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptContract = getRelayAdaptContractForNetwork(networkName);\n\n const relayAdaptUnshieldERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptUnshieldERC20AmountRecipients(\n networkName,\n relayAdaptUnshieldERC20Amounts,\n );\n const relayAdaptUnshieldNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptUnshieldNFTAmountRecipients(\n networkName,\n relayAdaptUnshieldNFTAmounts,\n );\n\n // Generate dummy txs for relay adapt params.\n const dummyUnshieldTxs = await generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n\n // Generate relay adapt params from dummy transactions.\n const shieldRandom = randomHex(16);\n\n const relayShieldRequests =\n await RelayAdaptHelper.generateRelayShieldRequests(\n shieldRandom,\n relayAdaptShieldERC20Recipients,\n createRelayAdaptShieldNFTRecipients(relayAdaptShieldNFTRecipients),\n );\n\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT;\n\n const isRelayerTransaction = !sendWithPublicWallet;\n const relayAdaptParamsRandom = randomHex(31);\n const relayAdaptParams =\n await relayAdaptContract.getRelayAdaptParamsCrossContractCalls(\n dummyUnshieldTxs,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n isRelayerTransaction,\n minimumGasLimit,\n );\n const relayAdaptID: AdaptID = {\n contract: relayAdaptContract.address,\n parameters: relayAdaptParams,\n };\n\n\n // console.log(\"====== 4\",\n // ProofType.CrossContractCalls,\n // networkName,\n // dopWalletID,\n // encryptionKey,\n // false, // showSenderAddressToRecipient\n // undefined, // memoText\n // relayAdaptUnshieldERC20AmountRecipients,\n // relayAdaptUnshieldNFTAmountRecipients,\n // relayerFeeERC20AmountRecipient,\n // sendWithPublicWallet,\n // relayAdaptID,\n // false, // useDummyProof\n // overallBatchMinGasPrice,\n // progressCallback);\n\n // Create real transactions with relay adapt params.\n const transactions = await generateProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptUnshieldERC20AmountRecipients,\n relayAdaptUnshieldNFTAmountRecipients,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n relayAdaptID,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n );\n\n const nullifiers = nullifiersForTransactions(transactions);\n\n const transaction = await relayAdaptContract.populateCrossContractCalls(\n transactions,\n validCrossContractCalls,\n relayShieldRequests,\n relayAdaptParamsRandom,\n false, // isGasEstimate\n isRelayerTransaction,\n minimumGasLimit,\n );\n delete transaction.from;\n\n setCachedProvedTransaction({\n proofType: ProofType.CrossContractCalls,\n dopWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients: [],\n nftAmountRecipients: [],\n relayAdaptUnshieldERC20Amounts,\n relayAdaptUnshieldNFTAmounts,\n relayAdaptShieldERC20Recipients,\n relayAdaptShieldNFTRecipients,\n crossContractCalls: validCrossContractCalls,\n relayerFeeERC20AmountRecipient,\n sendWithPublicWallet,\n transaction,\n overallBatchMinGasPrice,\n nullifiers,\n });\n } catch (err) {\n throw reportAndSanitizeError(generateCrossContractCallsProof.name, err);\n }\n};\n\nexport const getRelayAdaptTransactionError = (\n receiptLogs: TransactionReceiptLog[] | readonly Log[],\n): Optional<string> => {\n try {\n const relayAdaptError =\n RelayAdaptContract.getRelayAdaptCallError(receiptLogs);\n if (isDefined(relayAdaptError)) {\n sendErrorMessage(relayAdaptError);\n return relayAdaptError;\n }\n return undefined;\n } catch (err) {\n throw reportAndSanitizeError(getRelayAdaptTransactionError.name, err);\n }\n};\n\nexport const parseRelayAdaptReturnValue = (data: string): Optional<string> => {\n try {\n const relayAdaptErrorParsed =\n RelayAdaptContract.parseRelayAdaptReturnValue(data);\n if (relayAdaptErrorParsed) {\n sendErrorMessage(relayAdaptErrorParsed.error);\n return relayAdaptErrorParsed.error;\n }\n return undefined;\n } catch (err) {\n throw reportAndSanitizeError(getRelayAdaptTransactionError.name, err);\n }\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DopTransactionGasEstimateResponse, NetworkName, CommitmentSummary, TransactionGasDetails } from 'dop-sharedmodel
|
|
1
|
+
import { DopTransactionGasEstimateResponse, NetworkName, CommitmentSummary, TransactionGasDetails } from 'dop-sharedmodel';
|
|
2
2
|
import { ContractTransaction } from 'ethers';
|
|
3
3
|
export declare const getGasEstimate: (networkName: NetworkName, transaction: ContractTransaction, fromWalletAddress: string, sendWithPublicWallet: boolean, isCrossContractCall: boolean) => Promise<bigint>;
|
|
4
4
|
export declare const gasEstimateResponse: (gasEstimate: bigint, relayerFeeCommitment: Optional<CommitmentSummary>, isGasEstimateWithDummyProof: boolean) => DopTransactionGasEstimateResponse;
|