dop-wallet-v6 1.3.1 → 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.
- package/.eslintrc.js +5 -0
- package/dist/services/dop/core/react-native-init.d.ts +2 -2
- package/dist/services/dop/core/react-native-init.js +36 -15
- package/dist/services/dop/core/react-native-init.js.map +1 -1
- package/dist/services/dop/crypto/react-native-crypto-provider.js +4 -2
- package/dist/services/dop/crypto/react-native-crypto-provider.js.map +1 -1
- package/dist/services/dop/wallets/balances.js +49 -2
- package/dist/services/dop/wallets/balances.js.map +1 -1
- package/dist/services/dop/wallets/wallets.js +12 -17
- package/dist/services/dop/wallets/wallets.js.map +1 -1
- package/package.json +6 -1
- package/patches/dop-engine-v3+1.4.9.patch +55 -33
- package/dist/__tests__/index.test.d.ts +0 -1
- package/dist/__tests__/index.test.js +0 -13
- package/dist/__tests__/index.test.js.map +0 -1
- package/dist/services/artifacts/__tests__/artifact-downloader.test.d.ts +0 -1
- package/dist/services/artifacts/__tests__/artifact-downloader.test.js +0 -70
- package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +0 -1
- package/dist/services/dop/__tests__/integration.test.d.ts +0 -1
- package/dist/services/dop/__tests__/integration.test.js +0 -378
- package/dist/services/dop/__tests__/integration.test.js.map +0 -1
- package/dist/services/dop/core/__tests__/engine.test.d.ts +0 -1
- package/dist/services/dop/core/__tests__/engine.test.js +0 -30
- package/dist/services/dop/core/__tests__/engine.test.js.map +0 -1
- package/dist/services/dop/core/__tests__/providers.test.d.ts +0 -1
- package/dist/services/dop/core/__tests__/providers.test.js +0 -69
- package/dist/services/dop/core/__tests__/providers.test.js.map +0 -1
- package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.d.ts +0 -1
- package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js +0 -168
- package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js.map +0 -1
- package/dist/services/dop/history/__tests__/transaction-history.test.d.ts +0 -0
- package/dist/services/dop/history/__tests__/transaction-history.test.js +0 -2
- package/dist/services/dop/history/__tests__/transaction-history.test.js.map +0 -1
- package/dist/services/dop/profile/__tests__/profile-manager.test.d.ts +0 -1
- package/dist/services/dop/profile/__tests__/profile-manager.test.js +0 -170
- package/dist/services/dop/profile/__tests__/profile-manager.test.js.map +0 -1
- package/dist/services/dop/profile/__tests__/selective-transparency.test.d.ts +0 -1
- package/dist/services/dop/profile/__tests__/selective-transparency.test.js +0 -256
- package/dist/services/dop/profile/__tests__/selective-transparency.test.js.map +0 -1
- package/dist/services/dop/profile/__tests__/storage.test.d.ts +0 -1
- package/dist/services/dop/profile/__tests__/storage.test.js +0 -174
- package/dist/services/dop/profile/__tests__/storage.test.js.map +0 -1
- package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.d.ts +0 -1
- package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js +0 -126
- package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js.map +0 -1
- package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.d.ts +0 -1
- package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js +0 -63
- package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +0 -1
- package/dist/services/dop/util/__tests__/bytes-util.test.d.ts +0 -1
- package/dist/services/dop/util/__tests__/bytes-util.test.js +0 -23
- package/dist/services/dop/util/__tests__/bytes-util.test.js.map +0 -1
- package/dist/services/dop/util/__tests__/crypto-util.test.d.ts +0 -1
- package/dist/services/dop/util/__tests__/crypto-util.test.js +0 -62
- package/dist/services/dop/util/__tests__/crypto-util.test.js.map +0 -1
- package/dist/services/dop/wallets/__tests__/balances-live.test.d.ts +0 -1
- package/dist/services/dop/wallets/__tests__/balances-live.test.js +0 -58
- package/dist/services/dop/wallets/__tests__/balances-live.test.js.map +0 -1
- package/dist/services/dop/wallets/__tests__/balances-update.test.d.ts +0 -1
- package/dist/services/dop/wallets/__tests__/balances-update.test.js +0 -90
- package/dist/services/dop/wallets/__tests__/balances-update.test.js.map +0 -1
- package/dist/services/dop/wallets/__tests__/balances.test.d.ts +0 -1
- package/dist/services/dop/wallets/__tests__/balances.test.js +0 -59
- package/dist/services/dop/wallets/__tests__/balances.test.js.map +0 -1
- package/dist/services/dop/wallets/__tests__/wallets.test.d.ts +0 -1
- package/dist/services/dop/wallets/__tests__/wallets.test.js +0 -80
- package/dist/services/dop/wallets/__tests__/wallets.test.js.map +0 -1
- package/dist/services/ethers/__tests__/ethers-util.test.d.ts +0 -1
- package/dist/services/ethers/__tests__/ethers-util.test.js +0 -19
- package/dist/services/ethers/__tests__/ethers-util.test.js.map +0 -1
- package/dist/services/transactions/__tests__/json/formatted-relay-adapt-error-logs.json +0 -216
- package/dist/services/transactions/__tests__/proof-cache.test.d.ts +0 -1
- package/dist/services/transactions/__tests__/proof-cache.test.js +0 -128
- package/dist/services/transactions/__tests__/proof-cache.test.js.map +0 -1
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.d.ts +0 -1
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +0 -385
- package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +0 -1
- package/dist/services/transactions/__tests__/tx-decrypt.test.d.ts +0 -0
- package/dist/services/transactions/__tests__/tx-decrypt.test.js +0 -2
- package/dist/services/transactions/__tests__/tx-decrypt.test.js.map +0 -1
- package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.d.ts +0 -1
- package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js +0 -101
- package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js.map +0 -1
- package/dist/services/transactions/__tests__/tx-encrypt.test.d.ts +0 -0
- package/dist/services/transactions/__tests__/tx-encrypt.test.js +0 -2
- package/dist/services/transactions/__tests__/tx-encrypt.test.js.map +0 -1
- package/dist/services/transactions/__tests__/tx-gas-details.test.d.ts +0 -1
- package/dist/services/transactions/__tests__/tx-gas-details.test.js +0 -112
- package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +0 -1
- package/dist/services/transactions/__tests__/tx-notes.test.d.ts +0 -1
- package/dist/services/transactions/__tests__/tx-notes.test.js +0 -193
- package/dist/services/transactions/__tests__/tx-notes.test.js.map +0 -1
- package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.d.ts +0 -1
- package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.js +0 -50
- package/dist/services/transactions/__tests__/tx-proof-transfer-with-data.test.js.map +0 -1
- package/dist/services/transactions/__tests__/tx-transfer.test.d.ts +0 -1
- package/dist/services/transactions/__tests__/tx-transfer.test.js +0 -280
- package/dist/services/transactions/__tests__/tx-transfer.test.js.map +0 -1
- package/dist/tests/balances.test.d.ts +0 -1
- package/dist/tests/balances.test.js +0 -419
- package/dist/tests/balances.test.js.map +0 -1
- package/dist/tests/helper.test.d.ts +0 -3
- package/dist/tests/helper.test.js +0 -16
- package/dist/tests/helper.test.js.map +0 -1
- package/dist/tests/mocks.test.d.ts +0 -50
- package/dist/tests/mocks.test.js +0 -202
- package/dist/tests/mocks.test.js.map +0 -1
- package/dist/tests/poi/test-wallet-poi-requester.test.d.ts +0 -10
- package/dist/tests/poi/test-wallet-poi-requester.test.js +0 -15
- package/dist/tests/poi/test-wallet-poi-requester.test.js.map +0 -1
- package/dist/tests/setup.test.d.ts +0 -9
- package/dist/tests/setup.test.js +0 -110
- package/dist/tests/setup.test.js.map +0 -1
- package/dist/tests/stubs/engine-stubs.test.d.ts +0 -7
- package/dist/tests/stubs/engine-stubs.test.js +0 -75
- package/dist/tests/stubs/engine-stubs.test.js.map +0 -1
- package/dist/utils/__tests__/blocked-address.test.d.ts +0 -1
- package/dist/utils/__tests__/blocked-address.test.js +0 -23
- package/dist/utils/__tests__/blocked-address.test.js.map +0 -1
- package/dist/utils/__tests__/logger.test.d.ts +0 -1
- package/dist/utils/__tests__/logger.test.js +0 -28
- package/dist/utils/__tests__/logger.test.js.map +0 -1
- package/dist/utils/__tests__/utils.test.d.ts +0 -1
- package/dist/utils/__tests__/utils.test.js +0 -21
- 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 {};
|