dop-wallet-v6 1.3.2 → 1.3.31

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 (118) hide show
  1. package/.eslintrc.js +5 -0
  2. package/dist/services/dop/crypto/react-native-crypto-provider.js +4 -2
  3. package/dist/services/dop/crypto/react-native-crypto-provider.js.map +1 -1
  4. package/dist/services/dop/wallets/wallets.js +12 -17
  5. package/dist/services/dop/wallets/wallets.js.map +1 -1
  6. package/package.json +6 -1
  7. package/dist/__tests__/index.test.d.ts +0 -1
  8. package/dist/__tests__/index.test.js +0 -13
  9. package/dist/__tests__/index.test.js.map +0 -1
  10. package/dist/services/artifacts/__tests__/artifact-downloader.test.d.ts +0 -1
  11. package/dist/services/artifacts/__tests__/artifact-downloader.test.js +0 -70
  12. package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +0 -1
  13. package/dist/services/dop/__tests__/integration.test.d.ts +0 -1
  14. package/dist/services/dop/__tests__/integration.test.js +0 -378
  15. package/dist/services/dop/__tests__/integration.test.js.map +0 -1
  16. package/dist/services/dop/core/__tests__/engine.test.d.ts +0 -1
  17. package/dist/services/dop/core/__tests__/engine.test.js +0 -30
  18. package/dist/services/dop/core/__tests__/engine.test.js.map +0 -1
  19. package/dist/services/dop/core/__tests__/providers.test.d.ts +0 -1
  20. package/dist/services/dop/core/__tests__/providers.test.js +0 -69
  21. package/dist/services/dop/core/__tests__/providers.test.js.map +0 -1
  22. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.d.ts +0 -1
  23. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js +0 -168
  24. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js.map +0 -1
  25. package/dist/services/dop/history/__tests__/transaction-history.test.d.ts +0 -0
  26. package/dist/services/dop/history/__tests__/transaction-history.test.js +0 -2
  27. package/dist/services/dop/history/__tests__/transaction-history.test.js.map +0 -1
  28. package/dist/services/dop/profile/__tests__/profile-manager.test.d.ts +0 -1
  29. package/dist/services/dop/profile/__tests__/profile-manager.test.js +0 -170
  30. package/dist/services/dop/profile/__tests__/profile-manager.test.js.map +0 -1
  31. package/dist/services/dop/profile/__tests__/selective-transparency.test.d.ts +0 -1
  32. package/dist/services/dop/profile/__tests__/selective-transparency.test.js +0 -256
  33. package/dist/services/dop/profile/__tests__/selective-transparency.test.js.map +0 -1
  34. package/dist/services/dop/profile/__tests__/storage.test.d.ts +0 -1
  35. package/dist/services/dop/profile/__tests__/storage.test.js +0 -174
  36. package/dist/services/dop/profile/__tests__/storage.test.js.map +0 -1
  37. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.d.ts +0 -1
  38. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js +0 -126
  39. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js.map +0 -1
  40. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.d.ts +0 -1
  41. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +0 -63
  42. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +0 -1
  43. package/dist/services/dop/util/__tests__/bytes-util.test.d.ts +0 -1
  44. package/dist/services/dop/util/__tests__/bytes-util.test.js +0 -23
  45. package/dist/services/dop/util/__tests__/bytes-util.test.js.map +0 -1
  46. package/dist/services/dop/util/__tests__/crypto-util.test.d.ts +0 -1
  47. package/dist/services/dop/util/__tests__/crypto-util.test.js +0 -62
  48. package/dist/services/dop/util/__tests__/crypto-util.test.js.map +0 -1
  49. package/dist/services/dop/wallets/__tests__/balances-live.test.d.ts +0 -1
  50. package/dist/services/dop/wallets/__tests__/balances-live.test.js +0 -58
  51. package/dist/services/dop/wallets/__tests__/balances-live.test.js.map +0 -1
  52. package/dist/services/dop/wallets/__tests__/balances-update.test.d.ts +0 -1
  53. package/dist/services/dop/wallets/__tests__/balances-update.test.js +0 -90
  54. package/dist/services/dop/wallets/__tests__/balances-update.test.js.map +0 -1
  55. package/dist/services/dop/wallets/__tests__/balances.test.d.ts +0 -1
  56. package/dist/services/dop/wallets/__tests__/balances.test.js +0 -59
  57. package/dist/services/dop/wallets/__tests__/balances.test.js.map +0 -1
  58. package/dist/services/dop/wallets/__tests__/wallets.test.d.ts +0 -1
  59. package/dist/services/dop/wallets/__tests__/wallets.test.js +0 -80
  60. package/dist/services/dop/wallets/__tests__/wallets.test.js.map +0 -1
  61. package/dist/services/ethers/__tests__/ethers-util.test.d.ts +0 -1
  62. package/dist/services/ethers/__tests__/ethers-util.test.js +0 -19
  63. package/dist/services/ethers/__tests__/ethers-util.test.js.map +0 -1
  64. package/dist/services/transactions/__tests__/json/formatted-relay-adapt-error-logs.json +0 -216
  65. package/dist/services/transactions/__tests__/proof-cache.test.d.ts +0 -1
  66. package/dist/services/transactions/__tests__/proof-cache.test.js +0 -128
  67. package/dist/services/transactions/__tests__/proof-cache.test.js.map +0 -1
  68. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.d.ts +0 -1
  69. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +0 -385
  70. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +0 -1
  71. package/dist/services/transactions/__tests__/tx-decrypt.test.d.ts +0 -0
  72. package/dist/services/transactions/__tests__/tx-decrypt.test.js +0 -2
  73. package/dist/services/transactions/__tests__/tx-decrypt.test.js.map +0 -1
  74. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.d.ts +0 -1
  75. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js +0 -101
  76. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js.map +0 -1
  77. package/dist/services/transactions/__tests__/tx-encrypt.test.d.ts +0 -0
  78. package/dist/services/transactions/__tests__/tx-encrypt.test.js +0 -2
  79. package/dist/services/transactions/__tests__/tx-encrypt.test.js.map +0 -1
  80. package/dist/services/transactions/__tests__/tx-gas-details.test.d.ts +0 -1
  81. package/dist/services/transactions/__tests__/tx-gas-details.test.js +0 -112
  82. package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +0 -1
  83. package/dist/services/transactions/__tests__/tx-notes.test.d.ts +0 -1
  84. package/dist/services/transactions/__tests__/tx-notes.test.js +0 -193
  85. package/dist/services/transactions/__tests__/tx-notes.test.js.map +0 -1
  86. package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.d.ts +0 -1
  87. package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.js +0 -50
  88. package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.js.map +0 -1
  89. package/dist/services/transactions/__tests__/tx-transfer.test.d.ts +0 -1
  90. package/dist/services/transactions/__tests__/tx-transfer.test.js +0 -280
  91. package/dist/services/transactions/__tests__/tx-transfer.test.js.map +0 -1
  92. package/dist/tests/balances.test.d.ts +0 -1
  93. package/dist/tests/balances.test.js +0 -419
  94. package/dist/tests/balances.test.js.map +0 -1
  95. package/dist/tests/helper.test.d.ts +0 -3
  96. package/dist/tests/helper.test.js +0 -16
  97. package/dist/tests/helper.test.js.map +0 -1
  98. package/dist/tests/mocks.test.d.ts +0 -50
  99. package/dist/tests/mocks.test.js +0 -202
  100. package/dist/tests/mocks.test.js.map +0 -1
  101. package/dist/tests/poi/test-wallet-poi-requester.test.d.ts +0 -10
  102. package/dist/tests/poi/test-wallet-poi-requester.test.js +0 -15
  103. package/dist/tests/poi/test-wallet-poi-requester.test.js.map +0 -1
  104. package/dist/tests/setup.test.d.ts +0 -9
  105. package/dist/tests/setup.test.js +0 -110
  106. package/dist/tests/setup.test.js.map +0 -1
  107. package/dist/tests/stubs/engine-stubs.test.d.ts +0 -7
  108. package/dist/tests/stubs/engine-stubs.test.js +0 -75
  109. package/dist/tests/stubs/engine-stubs.test.js.map +0 -1
  110. package/dist/utils/__tests__/blocked-address.test.d.ts +0 -1
  111. package/dist/utils/__tests__/blocked-address.test.js +0 -23
  112. package/dist/utils/__tests__/blocked-address.test.js.map +0 -1
  113. package/dist/utils/__tests__/logger.test.d.ts +0 -1
  114. package/dist/utils/__tests__/logger.test.js +0 -28
  115. package/dist/utils/__tests__/logger.test.js.map +0 -1
  116. package/dist/utils/__tests__/utils.test.d.ts +0 -1
  117. package/dist/utils/__tests__/utils.test.js +0 -21
  118. package/dist/utils/__tests__/utils.test.js.map +0 -1
@@ -1,280 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const chai_1 = __importDefault(require("chai"));
30
- const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
31
- const sinon_1 = __importDefault(require("sinon"));
32
- const dop_engine_v3_1 = require("dop-engine-v3");
33
- const dop_sharedmodels_v3_1 = require("dop-sharedmodels-v3");
34
- const setup_test_1 = require("../../../tests/setup.test");
35
- const mocks_test_1 = require("../../../tests/mocks.test");
36
- const tx_transfer_1 = require("../tx-transfer");
37
- const txGasDetailsModule = __importStar(require("../tx-gas-details"));
38
- const tx_proof_transfer_1 = require("../tx-proof-transfer");
39
- const wallets_1 = require("../../dop/wallets/wallets");
40
- const proof_cache_1 = require("../proof-cache");
41
- const txNotes = __importStar(require("../tx-notes"));
42
- const helper_test_1 = require("../../../tests/helper.test");
43
- let gasEstimateStub;
44
- let dopProveStub;
45
- let dopDummyProveStub;
46
- let dopTransactStub;
47
- let relayAdaptPopulateDecryptBaseToken;
48
- let setDecryptSpy;
49
- let erc20NoteSpy;
50
- let nftNoteSpy;
51
- let dopWallet;
52
- let broadcasterFeeERC20AmountRecipient;
53
- chai_1.default.use(chai_as_promised_1.default);
54
- const { expect } = chai_1.default;
55
- const txidVersion = (0, helper_test_1.getTestTXIDVersion)();
56
- const MOCK_TOKEN_AMOUNTS_DIFFERENT = [
57
- {
58
- tokenAddress: mocks_test_1.MOCK_TOKEN_ADDRESS,
59
- amount: 100n,
60
- },
61
- {
62
- tokenAddress: mocks_test_1.MOCK_TOKEN_ADDRESS_2,
63
- amount: 300n,
64
- },
65
- ];
66
- const overallBatchMinGasPrice = BigInt('0x1000');
67
- const gasDetails = {
68
- evmGasType: dop_sharedmodels_v3_1.EVMGasType.Type1,
69
- gasEstimate: 1000n,
70
- gasPrice: overallBatchMinGasPrice,
71
- };
72
- const MOCK_TOKEN_AMOUNT_RECIPIENTS_INVALID = mocks_test_1.MOCK_TOKEN_AMOUNTS.map(erc20Amount => ({
73
- ...erc20Amount,
74
- recipientAddress: mocks_test_1.MOCK_ETH_WALLET_ADDRESS,
75
- }));
76
- const MOCK_NFT_AMOUNT_RECIPIENTS_INVALID = mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS.map(nftAmountRecipient => ({
77
- ...nftAmountRecipient,
78
- recipientAddress: mocks_test_1.MOCK_ETH_WALLET_ADDRESS,
79
- }));
80
- const MOCK_TOKEN_AMOUNT_RECIPIENTS = mocks_test_1.MOCK_TOKEN_AMOUNTS.map(erc20Amount => ({
81
- ...erc20Amount,
82
- recipientAddress: mocks_test_1.MOCK_DOP_WALLET_ADDRESS,
83
- }));
84
- const MOCK_TOKEN_AMOUNT_RECIPIENTS_DIFFERENT = MOCK_TOKEN_AMOUNTS_DIFFERENT.map(erc20Amount => ({
85
- ...erc20Amount,
86
- recipientAddress: mocks_test_1.MOCK_ETH_WALLET_ADDRESS,
87
- }));
88
- const stubGasEstimateSuccess = () => {
89
- gasEstimateStub = sinon_1.default.stub(txGasDetailsModule, 'getGasEstimate').resolves(BigInt('200'));
90
- };
91
- const stubGasEstimateFailure = () => {
92
- gasEstimateStub = sinon_1.default.stub(txGasDetailsModule, 'getGasEstimate').rejects(new Error('test rejection - gas estimate'));
93
- };
94
- const spyOnERC20Note = () => {
95
- erc20NoteSpy = sinon_1.default.spy(txNotes, 'erc20NoteFromERC20AmountRecipient');
96
- };
97
- const spyOnNFTNote = () => {
98
- nftNoteSpy = sinon_1.default.spy(txNotes, 'nftNoteFromNFTAmountRecipient');
99
- };
100
- describe('tx-transfer', () => {
101
- before(async function run() {
102
- this.timeout(60000);
103
- await (0, setup_test_1.initTestEngine)();
104
- await (0, setup_test_1.initTestEngineNetworks)();
105
- const dopWalletInfo = await (0, wallets_1.createDopWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
106
- if (!(0, dop_sharedmodels_v3_1.isDefined)(dopWalletInfo)) {
107
- throw new Error('Expected dopWalletInfo');
108
- }
109
- dopWallet = (0, wallets_1.fullWalletForID)(dopWalletInfo.id);
110
- const broadcasterWalletInfo = await (0, wallets_1.createDopWallet)(mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MNEMONIC, undefined);
111
- if (!(0, dop_sharedmodels_v3_1.isDefined)(broadcasterWalletInfo)) {
112
- throw new Error('Expected broadcasterWalletInfo');
113
- }
114
- const broadcasterDopAddress = broadcasterWalletInfo.dopAddress;
115
- broadcasterFeeERC20AmountRecipient = {
116
- ...mocks_test_1.MOCK_TOKEN_FEE,
117
- recipientAddress: broadcasterDopAddress,
118
- };
119
- dopProveStub = sinon_1.default.stub(dop_engine_v3_1.TransactionBatch.prototype, 'generateTransactions').resolves({
120
- provedTransactions: [
121
- {
122
- nullifiers: mocks_test_1.MOCK_NULLIFIERS,
123
- },
124
- ],
125
- preTransactionPOIsPerTxidLeafPerList: {},
126
- });
127
- dopDummyProveStub = sinon_1.default.stub(dop_engine_v3_1.TransactionBatch.prototype, 'generateDummyTransactions').resolves([
128
- {
129
- txidVersion,
130
- commitments: mocks_test_1.MOCK_COMMITMENTS,
131
- boundParams: (0, helper_test_1.isV2Test)() ? mocks_test_1.MOCK_BOUND_PARAMS_V2 : mocks_test_1.MOCK_BOUND_PARAMS_V3,
132
- nullifiers: mocks_test_1.MOCK_NULLIFIERS,
133
- },
134
- ]);
135
- dopTransactStub = sinon_1.default.stub(dop_engine_v3_1.DopVersionedSmartContracts, 'generateTransact').resolves({ data: '0x0123' });
136
- relayAdaptPopulateDecryptBaseToken = sinon_1.default.stub(dop_engine_v3_1.RelayAdaptVersionedSmartContracts, 'populateDecryptBaseToken').resolves({ data: '0x0123' });
137
- });
138
- afterEach(() => {
139
- gasEstimateStub?.restore();
140
- setDecryptSpy?.restore();
141
- erc20NoteSpy?.restore();
142
- nftNoteSpy?.restore();
143
- });
144
- after(async () => {
145
- dopProveStub.restore();
146
- dopDummyProveStub.restore();
147
- dopTransactStub.restore();
148
- relayAdaptPopulateDecryptBaseToken.restore();
149
- await (0, setup_test_1.closeTestEngine)();
150
- });
151
- // TRANSFER ERC20 - GAS ESTIMATE
152
- it('Should get gas estimates for valid erc20 transfer', async () => {
153
- stubGasEstimateSuccess();
154
- spyOnERC20Note();
155
- const rsp = await (0, tx_transfer_1.gasEstimateForUnprovenTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MEMO, MOCK_TOKEN_AMOUNT_RECIPIENTS, [], // nftAmountRecipients
156
- mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false);
157
- expect(erc20NoteSpy.called).to.be.true;
158
- expect(erc20NoteSpy.args.length).to.equal(6); // Number of calls - 3 for each of 2 broadcaster fee iterations
159
- expect(erc20NoteSpy.args[0][0].amount).to.equal(BigInt('0x00')); // original broadcaster fee
160
- expect(erc20NoteSpy.args[1][0].amount).to.equal(BigInt('0x100')); // token1
161
- expect(erc20NoteSpy.args[2][0].amount).to.equal(BigInt('0x200')); // token2
162
- expect(erc20NoteSpy.args[3][0].amount).to.equal(BigInt('0x0275a61bf8737eb4')); // New estimated Broadcaster Fee
163
- expect(erc20NoteSpy.args[4][0].amount).to.equal(BigInt('0x100')); // token1
164
- expect(erc20NoteSpy.args[5][0].amount).to.equal(BigInt('0x200')); // token2
165
- expect(rsp.broadcasterFeeCommitment).to.not.be.undefined;
166
- expect(rsp.broadcasterFeeCommitment?.commitmentCiphertext).to.deep.equal((0, helper_test_1.isV2Test)()
167
- ? mocks_test_1.MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V2
168
- : mocks_test_1.MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V3);
169
- // Add 9000 for the dummy tx variance
170
- expect(rsp.gasEstimate).to.equal(9000n + 200n);
171
- }).timeout(10000);
172
- it('Should get gas estimates for valid erc20 transfer: public wallet', async () => {
173
- stubGasEstimateSuccess();
174
- spyOnERC20Note();
175
- const rsp = await (0, tx_transfer_1.gasEstimateForUnprovenTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MEMO, MOCK_TOKEN_AMOUNT_RECIPIENTS, [], // nftAmountRecipients
176
- mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, true);
177
- expect(erc20NoteSpy.called).to.be.true;
178
- expect(erc20NoteSpy.args.length).to.equal(2); // Number of calls (without broadcaster fees)
179
- expect(erc20NoteSpy.args[0][0].amount).to.equal(BigInt('0x100')); // token1
180
- expect(erc20NoteSpy.args[1][0].amount).to.equal(BigInt('0x200')); // token2
181
- expect(rsp.broadcasterFeeCommitment).to.be.undefined;
182
- // Add 9000 for the dummy tx variance
183
- expect(rsp.gasEstimate).to.equal(9000n + 200n);
184
- }).timeout(10000);
185
- it('Should error on gas estimates for invalid erc20 transfer', async () => {
186
- stubGasEstimateSuccess();
187
- await expect((0, tx_transfer_1.gasEstimateForUnprovenTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MEMO, MOCK_TOKEN_AMOUNT_RECIPIENTS_INVALID, [], // nftAmountRecipients
188
- mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false)).rejectedWith('Invalid DOP address.');
189
- });
190
- it('Should error on transfer gas estimate for ethers rejections', async () => {
191
- stubGasEstimateFailure();
192
- await expect((0, tx_transfer_1.gasEstimateForUnprovenTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MEMO, MOCK_TOKEN_AMOUNT_RECIPIENTS, [], // nftAmountRecipients
193
- mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false)).rejectedWith('test rejection - gas estimate');
194
- });
195
- // TRANSFER NFT - GAS ESTIMATE
196
- it('Should get gas estimates for valid NFT transfer', async () => {
197
- stubGasEstimateSuccess();
198
- spyOnNFTNote();
199
- const rsp = await (0, tx_transfer_1.gasEstimateForUnprovenTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MEMO, [], // erc20AmountRecipients
200
- mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, // nftAmountRecipients
201
- mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false);
202
- expect(nftNoteSpy.called).to.be.true;
203
- expect(nftNoteSpy.args.length).to.equal(4); // Number of calls - 2 for each of 2 broadcaster fee iterations
204
- expect(nftNoteSpy.args[0][0].tokenSubID).to.equal('0x01'); // nft1
205
- expect(nftNoteSpy.args[1][0].tokenSubID).to.equal('0x02'); // nft2
206
- expect(nftNoteSpy.args[2][0].tokenSubID).to.equal('0x01'); // nft1
207
- expect(nftNoteSpy.args[3][0].tokenSubID).to.equal('0x02'); // nft2
208
- expect(rsp.broadcasterFeeCommitment).to.not.be.undefined;
209
- expect(rsp.broadcasterFeeCommitment?.commitmentCiphertext).to.deep.equal((0, helper_test_1.isV2Test)()
210
- ? mocks_test_1.MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V2
211
- : mocks_test_1.MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V3);
212
- // Add 9000 for the dummy tx variance
213
- expect(rsp.gasEstimate).to.equal(9000n + 200n);
214
- }).timeout(10000);
215
- it('Should get gas estimates for valid NFT transfer: public wallet', async () => {
216
- stubGasEstimateSuccess();
217
- spyOnNFTNote();
218
- const rsp = await (0, tx_transfer_1.gasEstimateForUnprovenTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MEMO, [], // erc20AmountRecipients
219
- mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, true);
220
- expect(nftNoteSpy.called).to.be.true;
221
- expect(nftNoteSpy.args.length).to.equal(2); // Number of calls (without broadcaster fees)
222
- expect(nftNoteSpy.args[0][0].tokenSubID).to.equal('0x01'); // nft1
223
- expect(nftNoteSpy.args[1][0].tokenSubID).to.equal('0x02'); // nft2
224
- expect(rsp.broadcasterFeeCommitment).to.be.undefined;
225
- // Add 9000 for the dummy tx variance
226
- expect(rsp.gasEstimate).to.equal(9000n + 200n);
227
- }).timeout(10000);
228
- it('Should error on gas estimates for invalid NFT transfer', async () => {
229
- stubGasEstimateSuccess();
230
- await expect((0, tx_transfer_1.gasEstimateForUnprovenTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, mocks_test_1.MOCK_MEMO, [], // erc20AmountRecipients
231
- MOCK_NFT_AMOUNT_RECIPIENTS_INVALID, mocks_test_1.MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2, mocks_test_1.MOCK_FEE_TOKEN_DETAILS, false)).rejectedWith('Invalid DOP address.');
232
- });
233
- // TRANSFER ERC20 - PROVE AND SEND
234
- it('Should populate tx for valid transfer', async () => {
235
- stubGasEstimateSuccess();
236
- (0, proof_cache_1.setCachedProvedTransaction)(undefined);
237
- spyOnERC20Note();
238
- spyOnNFTNote();
239
- await (0, tx_proof_transfer_1.generateTransferProofInternal)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, true, // showSenderAddressToRecipient
240
- mocks_test_1.MOCK_MEMO, MOCK_TOKEN_AMOUNT_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
241
- overallBatchMinGasPrice, () => { });
242
- expect(erc20NoteSpy.called).to.be.true;
243
- expect(erc20NoteSpy.args[0][0].amount).to.equal(mocks_test_1.MOCK_TOKEN_FEE.amount);
244
- expect(nftNoteSpy.called).to.be.true;
245
- expect(nftNoteSpy.args[0][0].nftAddress).to.equal(mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS[0].nftAddress);
246
- const populateResponse = await (0, tx_transfer_1.populateProvedTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, true, // showSenderAddressToRecipient
247
- mocks_test_1.MOCK_MEMO, MOCK_TOKEN_AMOUNT_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
248
- overallBatchMinGasPrice, gasDetails);
249
- expect(populateResponse.nullifiers).to.deep.equal([
250
- '0x0000000000000000000000000000000000000000000000000000000000000001',
251
- '0x0000000000000000000000000000000000000000000000000000000000000002',
252
- ]);
253
- const { transaction } = populateResponse;
254
- expect(transaction.nonce).to.equal(undefined);
255
- expect(transaction.gasPrice?.toString()).to.equal('4096');
256
- expect(transaction.gasLimit).to.equal(1200n);
257
- expect(transaction.value?.toString()).to.equal(undefined);
258
- expect(transaction.data).to.equal('0x0123');
259
- expect(transaction.to).to.equal(undefined);
260
- expect(transaction.chainId).to.equal(undefined);
261
- expect(transaction.type).to.equal(1);
262
- });
263
- it('Should error on populate transfer tx for unproved transaction', async () => {
264
- stubGasEstimateSuccess();
265
- (0, proof_cache_1.setCachedProvedTransaction)(undefined);
266
- await expect((0, tx_transfer_1.populateProvedTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, false, // showSenderAddressToRecipient
267
- mocks_test_1.MOCK_MEMO, MOCK_TOKEN_AMOUNT_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
268
- overallBatchMinGasPrice, gasDetails)).rejectedWith('Invalid proof for this transaction');
269
- });
270
- it('Should error on populate transfer tx when params changed (invalid cached proof)', async () => {
271
- stubGasEstimateSuccess();
272
- await (0, tx_proof_transfer_1.generateTransferProofInternal)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, mocks_test_1.MOCK_DB_ENCRYPTION_KEY, true, // showSenderAddressToRecipient
273
- mocks_test_1.MOCK_MEMO, MOCK_TOKEN_AMOUNT_RECIPIENTS, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
274
- overallBatchMinGasPrice, () => { });
275
- await expect((0, tx_transfer_1.populateProvedTransfer)(txidVersion, dop_sharedmodels_v3_1.NetworkName.Polygon, dopWallet.id, true, // showSenderAddressToRecipient
276
- mocks_test_1.MOCK_MEMO, MOCK_TOKEN_AMOUNT_RECIPIENTS_DIFFERENT, mocks_test_1.MOCK_NFT_AMOUNT_RECIPIENTS, broadcasterFeeERC20AmountRecipient, false, // sendWithPublicWallet
277
- overallBatchMinGasPrice, gasDetails)).rejectedWith('Invalid proof for this transaction');
278
- });
279
- });
280
- //# sourceMappingURL=tx-transfer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tx-transfer.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/tx-transfer.test.ts"],"names":[],"mappings":"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","sourcesContent":["import chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport Sinon, { SinonStub, SinonSpy } from 'sinon';\nimport {\n DopWallet,\n TransactionBatch,\n RelayAdaptVersionedSmartContracts,\n TransactionStructV2,\n TransactionStructV3,\n DopVersionedSmartContracts,\n} from 'dop-engine-v3';\nimport {\n DopERC20Amount,\n NetworkName,\n EVMGasType,\n DopERC20AmountRecipient,\n DopNFTAmountRecipient,\n TransactionGasDetails,\n isDefined,\n} from 'dop-sharedmodels-v3';\nimport {\n closeTestEngine,\n initTestEngine,\n initTestEngineNetworks,\n} from '../../../tests/setup.test';\nimport {\n MOCK_BOUND_PARAMS_V2,\n MOCK_BOUND_PARAMS_V3,\n MOCK_COMMITMENTS,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_ETH_WALLET_ADDRESS,\n MOCK_FEE_TOKEN_DETAILS,\n MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V2,\n MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V3,\n MOCK_MEMO,\n MOCK_MNEMONIC,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n MOCK_NULLIFIERS,\n MOCK_DOP_WALLET_ADDRESS,\n MOCK_TOKEN_ADDRESS,\n MOCK_TOKEN_ADDRESS_2,\n MOCK_TOKEN_AMOUNTS,\n MOCK_TOKEN_FEE,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n} from '../../../tests/mocks.test';\nimport {\n populateProvedTransfer,\n gasEstimateForUnprovenTransfer,\n} from '../tx-transfer';\nimport * as txGasDetailsModule from '../tx-gas-details';\nimport { generateTransferProofInternal } from '../tx-proof-transfer';\nimport {\n createDopWallet,\n fullWalletForID,\n} from '../../dop/wallets/wallets';\nimport { setCachedProvedTransaction } from '../proof-cache';\nimport * as txNotes from '../tx-notes';\nimport { ContractTransaction, FallbackProvider } from 'ethers';\nimport { getTestTXIDVersion, isV2Test } from '../../../tests/helper.test';\n\nlet gasEstimateStub: SinonStub;\nlet dopProveStub: SinonStub;\nlet dopDummyProveStub: SinonStub;\nlet dopTransactStub: SinonStub;\nlet relayAdaptPopulateDecryptBaseToken: SinonStub;\nlet setDecryptSpy: SinonSpy;\nlet erc20NoteSpy: SinonSpy;\nlet nftNoteSpy: SinonSpy;\n\nlet dopWallet: DopWallet;\nlet broadcasterFeeERC20AmountRecipient: DopERC20AmountRecipient;\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst txidVersion = getTestTXIDVersion();\n\nconst MOCK_TOKEN_AMOUNTS_DIFFERENT: DopERC20Amount[] = [\n {\n tokenAddress: MOCK_TOKEN_ADDRESS,\n amount: 100n,\n },\n {\n tokenAddress: MOCK_TOKEN_ADDRESS_2,\n amount: 300n,\n },\n];\n\nconst overallBatchMinGasPrice = BigInt('0x1000');\n\nconst gasDetails: TransactionGasDetails = {\n evmGasType: EVMGasType.Type1,\n gasEstimate: 1000n,\n gasPrice: overallBatchMinGasPrice,\n};\n\nconst MOCK_TOKEN_AMOUNT_RECIPIENTS_INVALID: DopERC20AmountRecipient[] =\n MOCK_TOKEN_AMOUNTS.map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n }));\n\nconst MOCK_NFT_AMOUNT_RECIPIENTS_INVALID: DopNFTAmountRecipient[] =\n MOCK_NFT_AMOUNT_RECIPIENTS.map(nftAmountRecipient => ({\n ...nftAmountRecipient,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n }));\n\nconst MOCK_TOKEN_AMOUNT_RECIPIENTS: DopERC20AmountRecipient[] =\n MOCK_TOKEN_AMOUNTS.map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n }));\n\nconst MOCK_TOKEN_AMOUNT_RECIPIENTS_DIFFERENT: DopERC20AmountRecipient[] =\n MOCK_TOKEN_AMOUNTS_DIFFERENT.map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n }));\n\nconst stubGasEstimateSuccess = () => {\n gasEstimateStub = Sinon.stub(txGasDetailsModule, 'getGasEstimate').resolves(\n BigInt('200'),\n );\n};\n\nconst stubGasEstimateFailure = () => {\n gasEstimateStub = Sinon.stub(txGasDetailsModule, 'getGasEstimate').rejects(\n new Error('test rejection - gas estimate'),\n );\n};\n\nconst spyOnERC20Note = () => {\n erc20NoteSpy = Sinon.spy(txNotes, 'erc20NoteFromERC20AmountRecipient');\n};\n\nconst spyOnNFTNote = () => {\n nftNoteSpy = Sinon.spy(txNotes, 'nftNoteFromNFTAmountRecipient');\n};\n\ndescribe('tx-transfer', () => {\n before(async function run() {\n this.timeout(60_000);\n await initTestEngine();\n await initTestEngineNetworks();\n const dopWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(dopWalletInfo)) {\n throw new Error('Expected dopWalletInfo');\n }\n dopWallet = fullWalletForID(dopWalletInfo.id);\n\n const broadcasterWalletInfo = await createDopWallet(\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MNEMONIC,\n undefined, // creationBlockNumbers\n );\n if (!isDefined(broadcasterWalletInfo)) {\n throw new Error('Expected broadcasterWalletInfo');\n }\n\n const broadcasterDopAddress = broadcasterWalletInfo.dopAddress;\n\n broadcasterFeeERC20AmountRecipient = {\n ...MOCK_TOKEN_FEE,\n recipientAddress: broadcasterDopAddress,\n };\n\n dopProveStub = Sinon.stub(\n TransactionBatch.prototype,\n 'generateTransactions',\n ).resolves({\n provedTransactions: [\n {\n nullifiers: MOCK_NULLIFIERS,\n },\n ] as (TransactionStructV2 | TransactionStructV3)[],\n preTransactionPOIsPerTxidLeafPerList: {},\n });\n dopDummyProveStub = Sinon.stub(\n TransactionBatch.prototype,\n 'generateDummyTransactions',\n ).resolves([\n {\n txidVersion,\n commitments: MOCK_COMMITMENTS,\n boundParams: isV2Test() ? MOCK_BOUND_PARAMS_V2 : MOCK_BOUND_PARAMS_V3,\n nullifiers: MOCK_NULLIFIERS,\n },\n ] as (TransactionStructV2 | TransactionStructV3)[]);\n dopTransactStub = Sinon.stub(\n DopVersionedSmartContracts,\n 'generateTransact',\n ).resolves({ data: '0x0123' } as ContractTransaction);\n relayAdaptPopulateDecryptBaseToken = Sinon.stub(\n RelayAdaptVersionedSmartContracts,\n 'populateDecryptBaseToken',\n ).resolves({ data: '0x0123' } as ContractTransaction);\n });\n afterEach(() => {\n gasEstimateStub?.restore();\n setDecryptSpy?.restore();\n erc20NoteSpy?.restore();\n nftNoteSpy?.restore();\n });\n after(async () => {\n dopProveStub.restore();\n dopDummyProveStub.restore();\n dopTransactStub.restore();\n relayAdaptPopulateDecryptBaseToken.restore();\n await closeTestEngine();\n });\n\n // TRANSFER ERC20 - GAS ESTIMATE\n\n it('Should get gas estimates for valid erc20 transfer', async () => {\n stubGasEstimateSuccess();\n spyOnERC20Note();\n const rsp = await gasEstimateForUnprovenTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MEMO,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n [], // nftAmountRecipients\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n );\n expect(erc20NoteSpy.called).to.be.true;\n expect(erc20NoteSpy.args.length).to.equal(6); // Number of calls - 3 for each of 2 broadcaster fee iterations\n expect(erc20NoteSpy.args[0][0].amount).to.equal(BigInt('0x00')); // original broadcaster fee\n expect(erc20NoteSpy.args[1][0].amount).to.equal(BigInt('0x100')); // token1\n expect(erc20NoteSpy.args[2][0].amount).to.equal(BigInt('0x200')); // token2\n expect(erc20NoteSpy.args[3][0].amount).to.equal(\n BigInt('0x0275a61bf8737eb4'),\n ); // New estimated Broadcaster Fee\n expect(erc20NoteSpy.args[4][0].amount).to.equal(BigInt('0x100')); // token1\n expect(erc20NoteSpy.args[5][0].amount).to.equal(BigInt('0x200')); // token2\n expect(rsp.broadcasterFeeCommitment).to.not.be.undefined;\n expect(rsp.broadcasterFeeCommitment?.commitmentCiphertext).to.deep.equal(\n isV2Test()\n ? MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V2\n : MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V3,\n );\n // Add 9000 for the dummy tx variance\n expect(rsp.gasEstimate).to.equal(9000n + 200n);\n }).timeout(10_000);\n\n it('Should get gas estimates for valid erc20 transfer: public wallet', async () => {\n stubGasEstimateSuccess();\n spyOnERC20Note();\n const rsp = await gasEstimateForUnprovenTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MEMO,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n [], // nftAmountRecipients\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n true, // sendWithPublicWallet\n );\n expect(erc20NoteSpy.called).to.be.true;\n expect(erc20NoteSpy.args.length).to.equal(2); // Number of calls (without broadcaster fees)\n expect(erc20NoteSpy.args[0][0].amount).to.equal(BigInt('0x100')); // token1\n expect(erc20NoteSpy.args[1][0].amount).to.equal(BigInt('0x200')); // token2\n expect(rsp.broadcasterFeeCommitment).to.be.undefined;\n // Add 9000 for the dummy tx variance\n expect(rsp.gasEstimate).to.equal(9000n + 200n);\n }).timeout(10_000);\n\n it('Should error on gas estimates for invalid erc20 transfer', async () => {\n stubGasEstimateSuccess();\n await expect(\n gasEstimateForUnprovenTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MEMO,\n MOCK_TOKEN_AMOUNT_RECIPIENTS_INVALID,\n [], // nftAmountRecipients\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n ),\n ).rejectedWith('Invalid DOP address.');\n });\n\n it('Should error on transfer gas estimate for ethers rejections', async () => {\n stubGasEstimateFailure();\n await expect(\n gasEstimateForUnprovenTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MEMO,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n [], // nftAmountRecipients\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n ),\n ).rejectedWith('test rejection - gas estimate');\n });\n\n // TRANSFER NFT - GAS ESTIMATE\n\n it('Should get gas estimates for valid NFT transfer', async () => {\n stubGasEstimateSuccess();\n spyOnNFTNote();\n const rsp = await gasEstimateForUnprovenTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MEMO,\n [], // erc20AmountRecipients\n MOCK_NFT_AMOUNT_RECIPIENTS, // nftAmountRecipients\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n );\n expect(nftNoteSpy.called).to.be.true;\n expect(nftNoteSpy.args.length).to.equal(4); // Number of calls - 2 for each of 2 broadcaster fee iterations\n expect(nftNoteSpy.args[0][0].tokenSubID).to.equal('0x01'); // nft1\n expect(nftNoteSpy.args[1][0].tokenSubID).to.equal('0x02'); // nft2\n expect(nftNoteSpy.args[2][0].tokenSubID).to.equal('0x01'); // nft1\n expect(nftNoteSpy.args[3][0].tokenSubID).to.equal('0x02'); // nft2\n expect(rsp.broadcasterFeeCommitment).to.not.be.undefined;\n expect(rsp.broadcasterFeeCommitment?.commitmentCiphertext).to.deep.equal(\n isV2Test()\n ? MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V2\n : MOCK_FORMATTED_BROADCASTER_FEE_COMMITMENT_CIPHERTEXT_V3,\n );\n // Add 9000 for the dummy tx variance\n expect(rsp.gasEstimate).to.equal(9000n + 200n);\n }).timeout(10_000);\n\n it('Should get gas estimates for valid NFT transfer: public wallet', async () => {\n stubGasEstimateSuccess();\n spyOnNFTNote();\n const rsp = await gasEstimateForUnprovenTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MEMO,\n [], // erc20AmountRecipients\n MOCK_NFT_AMOUNT_RECIPIENTS,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n true, // sendWithPublicWallet\n );\n expect(nftNoteSpy.called).to.be.true;\n expect(nftNoteSpy.args.length).to.equal(2); // Number of calls (without broadcaster fees)\n expect(nftNoteSpy.args[0][0].tokenSubID).to.equal('0x01'); // nft1\n expect(nftNoteSpy.args[1][0].tokenSubID).to.equal('0x02'); // nft2\n expect(rsp.broadcasterFeeCommitment).to.be.undefined;\n // Add 9000 for the dummy tx variance\n expect(rsp.gasEstimate).to.equal(9000n + 200n);\n }).timeout(10_000);\n\n it('Should error on gas estimates for invalid NFT transfer', async () => {\n stubGasEstimateSuccess();\n await expect(\n gasEstimateForUnprovenTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_MEMO,\n [], // erc20AmountRecipients\n MOCK_NFT_AMOUNT_RECIPIENTS_INVALID,\n MOCK_TRANSACTION_GAS_DETAILS_SERIALIZED_TYPE_2,\n MOCK_FEE_TOKEN_DETAILS,\n false, // sendWithPublicWallet\n ),\n ).rejectedWith('Invalid DOP address.');\n });\n\n // TRANSFER ERC20 - PROVE AND SEND\n\n it('Should populate tx for valid transfer', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n spyOnERC20Note();\n spyOnNFTNote();\n await generateTransferProofInternal(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n true, // showSenderAddressToRecipient\n MOCK_MEMO,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n () => {}, // progressCallback\n );\n expect(erc20NoteSpy.called).to.be.true;\n expect(erc20NoteSpy.args[0][0].amount).to.equal(MOCK_TOKEN_FEE.amount);\n expect(nftNoteSpy.called).to.be.true;\n expect(nftNoteSpy.args[0][0].nftAddress).to.equal(\n MOCK_NFT_AMOUNT_RECIPIENTS[0].nftAddress,\n );\n const populateResponse = await populateProvedTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n true, // showSenderAddressToRecipient\n MOCK_MEMO,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n );\n expect(populateResponse.nullifiers).to.deep.equal([\n '0x0000000000000000000000000000000000000000000000000000000000000001',\n '0x0000000000000000000000000000000000000000000000000000000000000002',\n ]);\n\n const { transaction } = populateResponse;\n\n expect(transaction.nonce).to.equal(undefined);\n expect(transaction.gasPrice?.toString()).to.equal('4096');\n expect(transaction.gasLimit).to.equal(1200n);\n expect(transaction.value?.toString()).to.equal(undefined);\n expect(transaction.data).to.equal('0x0123');\n expect(transaction.to).to.equal(undefined);\n expect(transaction.chainId).to.equal(undefined);\n expect(transaction.type).to.equal(1);\n });\n\n it('Should error on populate transfer tx for unproved transaction', async () => {\n stubGasEstimateSuccess();\n setCachedProvedTransaction(undefined);\n await expect(\n populateProvedTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n false, // showSenderAddressToRecipient\n MOCK_MEMO,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n\n it('Should error on populate transfer tx when params changed (invalid cached proof)', async () => {\n stubGasEstimateSuccess();\n await generateTransferProofInternal(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n MOCK_DB_ENCRYPTION_KEY,\n true, // showSenderAddressToRecipient\n MOCK_MEMO,\n MOCK_TOKEN_AMOUNT_RECIPIENTS,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n () => {}, // progressCallback\n );\n await expect(\n populateProvedTransfer(\n txidVersion,\n NetworkName.Polygon,\n dopWallet.id,\n true, // showSenderAddressToRecipient\n MOCK_MEMO,\n MOCK_TOKEN_AMOUNT_RECIPIENTS_DIFFERENT,\n MOCK_NFT_AMOUNT_RECIPIENTS,\n broadcasterFeeERC20AmountRecipient,\n false, // sendWithPublicWallet\n overallBatchMinGasPrice,\n gasDetails,\n ),\n ).rejectedWith('Invalid proof for this transaction');\n });\n});\n"]}
@@ -1 +0,0 @@
1
- export {};