dop-wallet-v6 1.2.2 → 1.2.4

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 (155) hide show
  1. package/dist/services/artifacts/__tests__/artifact-downloader.test.js.map +1 -1
  2. package/dist/services/artifacts/artifact-downloader.d.ts +1 -1
  3. package/dist/services/artifacts/artifact-downloader.js.map +1 -1
  4. package/dist/services/artifacts/artifact-hash.d.ts +1 -1
  5. package/dist/services/artifacts/artifact-hash.js.map +1 -1
  6. package/dist/services/artifacts/artifact-util.d.ts +1 -1
  7. package/dist/services/artifacts/artifact-util.js.map +1 -1
  8. package/dist/services/dop/core/__tests__/providers.test.js +2 -2
  9. package/dist/services/dop/core/__tests__/providers.test.js.map +1 -1
  10. package/dist/services/dop/core/artifacts.d.ts +2 -2
  11. package/dist/services/dop/core/artifacts.js.map +1 -1
  12. package/dist/services/dop/core/encrypts.d.ts +1 -1
  13. package/dist/services/dop/core/encrypts.js.map +1 -1
  14. package/dist/services/dop/core/engine.d.ts +1 -1
  15. package/dist/services/dop/core/engine.js.map +1 -1
  16. package/dist/services/dop/core/init.d.ts +2 -2
  17. package/dist/services/dop/core/init.js.map +1 -1
  18. package/dist/services/dop/core/load-provider.d.ts +1 -1
  19. package/dist/services/dop/core/load-provider.js.map +1 -1
  20. package/dist/services/dop/core/merkletree.d.ts +2 -2
  21. package/dist/services/dop/core/merkletree.js.map +1 -1
  22. package/dist/services/dop/core/prover.d.ts +1 -1
  23. package/dist/services/dop/core/prover.js.map +1 -1
  24. package/dist/services/dop/core/providers.d.ts +2 -2
  25. package/dist/services/dop/core/providers.js.map +1 -1
  26. package/dist/services/dop/dop-txids/__tests__/dop-txid-sync-graph-v2.test.js.map +1 -1
  27. package/dist/services/dop/dop-txids/blinded-commitments.d.ts +1 -1
  28. package/dist/services/dop/dop-txids/blinded-commitments.js.map +1 -1
  29. package/dist/services/dop/dop-txids/dop-txid-graph-type-formatters.d.ts +1 -1
  30. package/dist/services/dop/dop-txids/dop-txid-graph-type-formatters.js.map +1 -1
  31. package/dist/services/dop/dop-txids/dop-txid-merkletrees.d.ts +1 -1
  32. package/dist/services/dop/dop-txids/dop-txid-merkletrees.js.map +1 -1
  33. package/dist/services/dop/dop-txids/dop-txid-sync-graph-v2.d.ts +1 -1
  34. package/dist/services/dop/dop-txids/dop-txid-sync-graph-v2.js.map +1 -1
  35. package/dist/services/dop/dop-txids/graphql/index.js +1 -1
  36. package/dist/services/dop/dop-txids/graphql/index.js.map +1 -1
  37. package/dist/services/dop/history/transaction-history.d.ts +2 -2
  38. package/dist/services/dop/history/transaction-history.js.map +1 -1
  39. package/dist/services/dop/index.d.ts +1 -0
  40. package/dist/services/dop/index.js +1 -0
  41. package/dist/services/dop/index.js.map +1 -1
  42. package/dist/services/dop/process/extract-transaction-data.d.ts +1 -1
  43. package/dist/services/dop/process/extract-transaction-data.js.map +1 -1
  44. package/dist/services/dop/profile/__tests__/profile-manager.test.d.ts +1 -0
  45. package/dist/services/dop/profile/__tests__/profile-manager.test.js +170 -0
  46. package/dist/services/dop/profile/__tests__/profile-manager.test.js.map +1 -0
  47. package/dist/services/dop/profile/__tests__/selective-transparency.test.d.ts +1 -0
  48. package/dist/services/dop/profile/__tests__/selective-transparency.test.js +256 -0
  49. package/dist/services/dop/profile/__tests__/selective-transparency.test.js.map +1 -0
  50. package/dist/services/dop/profile/__tests__/storage.test.d.ts +1 -0
  51. package/dist/services/dop/profile/__tests__/storage.test.js +174 -0
  52. package/dist/services/dop/profile/__tests__/storage.test.js.map +1 -0
  53. package/dist/services/dop/profile/index.d.ts +3 -0
  54. package/dist/services/dop/profile/index.js +20 -0
  55. package/dist/services/dop/profile/index.js.map +1 -0
  56. package/dist/services/dop/profile/profile-manager.d.ts +32 -0
  57. package/dist/services/dop/profile/profile-manager.js +235 -0
  58. package/dist/services/dop/profile/profile-manager.js.map +1 -0
  59. package/dist/services/dop/profile/selective-transparency.d.ts +82 -0
  60. package/dist/services/dop/profile/selective-transparency.js +447 -0
  61. package/dist/services/dop/profile/selective-transparency.js.map +1 -0
  62. package/dist/services/dop/profile/storage.d.ts +27 -0
  63. package/dist/services/dop/profile/storage.js +648 -0
  64. package/dist/services/dop/profile/storage.js.map +1 -0
  65. package/dist/services/dop/profile/types.d.ts +106 -0
  66. package/dist/services/dop/profile/types.js +3 -0
  67. package/dist/services/dop/profile/types.js.map +1 -0
  68. package/dist/services/dop/profile/usage-example.d.ts +11 -0
  69. package/dist/services/dop/profile/usage-example.js +143 -0
  70. package/dist/services/dop/profile/usage-example.js.map +1 -0
  71. package/dist/services/dop/quick-sync/V2/__tests__/quick-sync-events-graph-v2.test.js.map +1 -1
  72. package/dist/services/dop/quick-sync/V2/graph-type-formatters-v2.d.ts +1 -1
  73. package/dist/services/dop/quick-sync/V2/graph-type-formatters-v2.js.map +1 -1
  74. package/dist/services/dop/quick-sync/V2/graphql/index.js +1 -1
  75. package/dist/services/dop/quick-sync/V2/graphql/index.js.map +1 -1
  76. package/dist/services/dop/quick-sync/V2/quick-sync-events-graph-v2.d.ts +1 -1
  77. package/dist/services/dop/quick-sync/V2/quick-sync-events-graph-v2.js.map +1 -1
  78. package/dist/services/dop/quick-sync/V3/__tests__/quick-sync-events-graph-v3.test.js.map +1 -1
  79. package/dist/services/dop/quick-sync/V3/graph-type-formatters-v3.d.ts +1 -1
  80. package/dist/services/dop/quick-sync/V3/graph-type-formatters-v3.js.map +1 -1
  81. package/dist/services/dop/quick-sync/V3/quick-sync-events-graph-v3.d.ts +1 -1
  82. package/dist/services/dop/quick-sync/V3/quick-sync-events-graph-v3.js.map +1 -1
  83. package/dist/services/dop/quick-sync/graph-query.d.ts +1 -1
  84. package/dist/services/dop/quick-sync/graph-query.js.map +1 -1
  85. package/dist/services/dop/quick-sync/quick-sync-events.d.ts +1 -1
  86. package/dist/services/dop/quick-sync/quick-sync-events.js.map +1 -1
  87. package/dist/services/dop/quick-sync/shared-formatters.d.ts +1 -1
  88. package/dist/services/dop/quick-sync/shared-formatters.js.map +1 -1
  89. package/dist/services/dop/util/__tests__/bytes-util.test.js +1 -1
  90. package/dist/services/dop/util/__tests__/bytes-util.test.js.map +1 -1
  91. package/dist/services/dop/util/bytes.d.ts +1 -1
  92. package/dist/services/dop/util/bytes.js.map +1 -1
  93. package/dist/services/dop/util/crypto.d.ts +2 -2
  94. package/dist/services/dop/util/crypto.js.map +1 -1
  95. package/dist/services/dop/wallets/__tests__/balances-live.test.js.map +1 -1
  96. package/dist/services/dop/wallets/__tests__/balances-update.test.js.map +1 -1
  97. package/dist/services/dop/wallets/__tests__/balances.test.js.map +1 -1
  98. package/dist/services/dop/wallets/__tests__/wallets.test.js.map +1 -1
  99. package/dist/services/dop/wallets/balance-update.d.ts +2 -2
  100. package/dist/services/dop/wallets/balance-update.js.map +1 -1
  101. package/dist/services/dop/wallets/balances.d.ts +1 -1
  102. package/dist/services/dop/wallets/balances.js.map +1 -1
  103. package/dist/services/dop/wallets/wallets.d.ts +2 -2
  104. package/dist/services/dop/wallets/wallets.js.map +1 -1
  105. package/dist/services/ethers/ethers-util.js.map +1 -1
  106. package/dist/services/transactions/__tests__/proof-cache.test.js.map +1 -1
  107. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js +6 -6
  108. package/dist/services/transactions/__tests__/tx-cross-contract-calls.test.js.map +1 -1
  109. package/dist/services/transactions/__tests__/tx-encrypt-base-token.test.js.map +1 -1
  110. package/dist/services/transactions/__tests__/tx-gas-details.test.js.map +1 -1
  111. package/dist/services/transactions/__tests__/tx-notes.test.js.map +1 -1
  112. package/dist/services/transactions/__tests__/tx-transfer.test.js +9 -9
  113. package/dist/services/transactions/__tests__/tx-transfer.test.js.map +1 -1
  114. package/dist/services/transactions/proof-cache.d.ts +1 -1
  115. package/dist/services/transactions/proof-cache.js.map +1 -1
  116. package/dist/services/transactions/tx-cross-contract-calls.d.ts +2 -2
  117. package/dist/services/transactions/tx-cross-contract-calls.js.map +1 -1
  118. package/dist/services/transactions/tx-decrypt.d.ts +1 -1
  119. package/dist/services/transactions/tx-decrypt.js.map +1 -1
  120. package/dist/services/transactions/tx-encrypt-base-token.d.ts +1 -1
  121. package/dist/services/transactions/tx-encrypt-base-token.js.map +1 -1
  122. package/dist/services/transactions/tx-encrypt.d.ts +1 -1
  123. package/dist/services/transactions/tx-encrypt.js.map +1 -1
  124. package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.d.ts +2 -2
  125. package/dist/services/transactions/tx-gas-broadcaster-fee-estimator.js.map +1 -1
  126. package/dist/services/transactions/tx-gas-details.d.ts +1 -1
  127. package/dist/services/transactions/tx-gas-details.js.map +1 -1
  128. package/dist/services/transactions/tx-generator.d.ts +2 -2
  129. package/dist/services/transactions/tx-generator.js.map +1 -1
  130. package/dist/services/transactions/tx-notes.d.ts +2 -2
  131. package/dist/services/transactions/tx-notes.js.map +1 -1
  132. package/dist/services/transactions/tx-nullifiers.d.ts +1 -1
  133. package/dist/services/transactions/tx-nullifiers.js.map +1 -1
  134. package/dist/services/transactions/tx-proof-decrypt.d.ts +1 -1
  135. package/dist/services/transactions/tx-proof-decrypt.js.map +1 -1
  136. package/dist/services/transactions/tx-proof-transfer.d.ts +1 -1
  137. package/dist/services/transactions/tx-proof-transfer.js.map +1 -1
  138. package/dist/services/transactions/tx-transfer.d.ts +1 -1
  139. package/dist/services/transactions/tx-transfer.js.map +1 -1
  140. package/dist/tests/helper.test.d.ts +1 -1
  141. package/dist/tests/helper.test.js.map +1 -1
  142. package/dist/tests/mocks.test.d.ts +2 -2
  143. package/dist/tests/mocks.test.js.map +1 -1
  144. package/dist/tests/poi/test-wallet-poi-requester.test.d.ts +2 -2
  145. package/dist/tests/poi/test-wallet-poi-requester.test.js.map +1 -1
  146. package/dist/tests/setup.test.d.ts +1 -1
  147. package/dist/tests/setup.test.js.map +1 -1
  148. package/dist/tests/stubs/engine-stubs.test.d.ts +1 -1
  149. package/dist/tests/stubs/engine-stubs.test.js.map +1 -1
  150. package/dist/utils/blocked-address.js.map +1 -1
  151. package/dist/utils/error.js.map +1 -1
  152. package/dist/utils/gas-price.d.ts +1 -1
  153. package/dist/utils/gas-price.js.map +1 -1
  154. package/package.json +13 -3
  155. package/postinstall.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tx-notes.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/tx-notes.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n OutputType,\n ByteLength,\n ByteUtils,\n DopEngine,\n} from 'dop-engine-v5';\nimport chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {\n DopERC20Amount,\n DopERC20AmountRecipient,\n} from 'dop-sharedmodels-v5';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_ETH_WALLET_ADDRESS,\n MOCK_MEMO,\n MOCK_MNEMONIC,\n MOCK_DOP_WALLET_ADDRESS,\n} from '../../../tests/mocks.test';\nimport {\n closeTestEngine,\n initTestEngine,\n initTestEngineNetworks,\n} from '../../../tests/setup.test';\nimport {\n createDopWallet,\n fullWalletForID,\n} from '../../dop/wallets/wallets';\nimport {\n compareERC20AmountRecipientArrays,\n erc20NoteFromERC20AmountRecipient,\n} from '../tx-notes';\n\nconst MOCK_TOKEN = '0x236c614a38362644deb15c9789779faf508bc6fe';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst padTo32BytesUnHex = (str: string) => {\n return ByteUtils.padToLength(ByteUtils.strip0x(str), ByteLength.UINT_256);\n};\n\nconst formatAmountString = (erc20Amount: DopERC20Amount) => {\n return BigInt(erc20Amount.amount);\n};\n\nlet dopWalletID: string;\n\ndescribe('tx-notes', () => {\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 dopWalletID = dopWalletInfo.id;\n });\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should test erc20 note creation', () => {\n const erc20AmountRecipient: DopERC20AmountRecipient = {\n tokenAddress: MOCK_TOKEN,\n amount: BigInt(0x100),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n };\n const dopWallet = fullWalletForID(dopWalletID);\n const note = erc20NoteFromERC20AmountRecipient(\n erc20AmountRecipient,\n dopWallet,\n OutputType.Transfer,\n true, // showSenderAddressToRecipient\n MOCK_MEMO,\n );\n\n const addressData = DopEngine.decodeAddress(\n MOCK_DOP_WALLET_ADDRESS,\n );\n\n expect(note.value).to.equal(formatAmountString(erc20AmountRecipient));\n expect(note.receiverAddressData.masterPublicKey).to.equal(\n addressData.masterPublicKey,\n );\n expect(note.tokenHash).to.equal(padTo32BytesUnHex(MOCK_TOKEN));\n });\n\n it('Should test NFT note creation', () => {\n const erc20AmountRecipient: DopERC20AmountRecipient = {\n tokenAddress: MOCK_TOKEN,\n amount: BigInt(0x100),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n };\n const dopWallet = fullWalletForID(dopWalletID);\n const note = erc20NoteFromERC20AmountRecipient(\n erc20AmountRecipient,\n dopWallet,\n OutputType.Transfer,\n true, // showSenderAddressToRecipient\n MOCK_MEMO,\n );\n\n const addressData = DopEngine.decodeAddress(\n MOCK_DOP_WALLET_ADDRESS,\n );\n\n expect(note.value).to.equal(formatAmountString(erc20AmountRecipient));\n expect(note.receiverAddressData.masterPublicKey).to.equal(\n addressData.masterPublicKey,\n );\n expect(note.tokenHash).to.equal(padTo32BytesUnHex(MOCK_TOKEN));\n });\n\n it('Should test token array comparisons', () => {\n const erc20AmountRecipients1: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '2',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: 300n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n ];\n\n // Same same\n const erc20AmountRecipients2: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '2',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: 300n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n ];\n\n // Different addresses\n const erc20AmountRecipients3: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '5',\n amount: 300n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n ];\n\n // Different amounts\n const erc20AmountRecipients4: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '2',\n amount: 300n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n ];\n\n // Different recipients\n const erc20AmountRecipients5: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '2',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: 300n,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n },\n ];\n\n expect(\n compareERC20AmountRecipientArrays(\n erc20AmountRecipients1,\n erc20AmountRecipients2,\n ),\n ).to.be.true;\n expect(\n compareERC20AmountRecipientArrays(\n erc20AmountRecipients1,\n erc20AmountRecipients3,\n ),\n ).to.be.false;\n expect(\n compareERC20AmountRecipientArrays(\n erc20AmountRecipients1,\n erc20AmountRecipients4,\n ),\n ).to.be.false;\n expect(\n compareERC20AmountRecipientArrays(\n erc20AmountRecipients1,\n erc20AmountRecipients5,\n ),\n ).to.be.false;\n });\n\n it('Should compare erc20 amount recipients', () => {\n const sameA: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '0x1234',\n amount: 100n,\n recipientAddress: 'hello',\n },\n {\n tokenAddress: '0x1234',\n amount: BigInt(200),\n recipientAddress: 'hello2',\n },\n ];\n const sameB: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '0x1234',\n amount: BigInt(200),\n recipientAddress: 'hello2',\n },\n {\n tokenAddress: '0x1234',\n amount: 100n,\n recipientAddress: 'hello',\n },\n ];\n const differentC: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '0x1234',\n amount: 100n,\n recipientAddress: 'hello',\n },\n ];\n\n expect(compareERC20AmountRecipientArrays(sameA, sameB)).to.be.true;\n expect(compareERC20AmountRecipientArrays(sameA, differentC)).to.be.false;\n });\n});\n"]}
1
+ {"version":3,"file":"tx-notes.test.js","sourceRoot":"","sources":["../../../../src/services/transactions/__tests__/tx-notes.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n OutputType,\n ByteLength,\n ByteUtils,\n DopEngine,\n} from 'dop-engine-v3';\nimport chai from 'chai';\nimport chaiAsPromised from 'chai-as-promised';\nimport {\n DopERC20Amount,\n DopERC20AmountRecipient,\n} from 'dop-sharedmodels-v3';\nimport {\n MOCK_DB_ENCRYPTION_KEY,\n MOCK_ETH_WALLET_ADDRESS,\n MOCK_MEMO,\n MOCK_MNEMONIC,\n MOCK_DOP_WALLET_ADDRESS,\n} from '../../../tests/mocks.test';\nimport {\n closeTestEngine,\n initTestEngine,\n initTestEngineNetworks,\n} from '../../../tests/setup.test';\nimport {\n createDopWallet,\n fullWalletForID,\n} from '../../dop/wallets/wallets';\nimport {\n compareERC20AmountRecipientArrays,\n erc20NoteFromERC20AmountRecipient,\n} from '../tx-notes';\n\nconst MOCK_TOKEN = '0x236c614a38362644deb15c9789779faf508bc6fe';\n\nchai.use(chaiAsPromised);\nconst { expect } = chai;\n\nconst padTo32BytesUnHex = (str: string) => {\n return ByteUtils.padToLength(ByteUtils.strip0x(str), ByteLength.UINT_256);\n};\n\nconst formatAmountString = (erc20Amount: DopERC20Amount) => {\n return BigInt(erc20Amount.amount);\n};\n\nlet dopWalletID: string;\n\ndescribe('tx-notes', () => {\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 dopWalletID = dopWalletInfo.id;\n });\n after(async () => {\n await closeTestEngine();\n });\n\n it('Should test erc20 note creation', () => {\n const erc20AmountRecipient: DopERC20AmountRecipient = {\n tokenAddress: MOCK_TOKEN,\n amount: BigInt(0x100),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n };\n const dopWallet = fullWalletForID(dopWalletID);\n const note = erc20NoteFromERC20AmountRecipient(\n erc20AmountRecipient,\n dopWallet,\n OutputType.Transfer,\n true, // showSenderAddressToRecipient\n MOCK_MEMO,\n );\n\n const addressData = DopEngine.decodeAddress(\n MOCK_DOP_WALLET_ADDRESS,\n );\n\n expect(note.value).to.equal(formatAmountString(erc20AmountRecipient));\n expect(note.receiverAddressData.masterPublicKey).to.equal(\n addressData.masterPublicKey,\n );\n expect(note.tokenHash).to.equal(padTo32BytesUnHex(MOCK_TOKEN));\n });\n\n it('Should test NFT note creation', () => {\n const erc20AmountRecipient: DopERC20AmountRecipient = {\n tokenAddress: MOCK_TOKEN,\n amount: BigInt(0x100),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n };\n const dopWallet = fullWalletForID(dopWalletID);\n const note = erc20NoteFromERC20AmountRecipient(\n erc20AmountRecipient,\n dopWallet,\n OutputType.Transfer,\n true, // showSenderAddressToRecipient\n MOCK_MEMO,\n );\n\n const addressData = DopEngine.decodeAddress(\n MOCK_DOP_WALLET_ADDRESS,\n );\n\n expect(note.value).to.equal(formatAmountString(erc20AmountRecipient));\n expect(note.receiverAddressData.masterPublicKey).to.equal(\n addressData.masterPublicKey,\n );\n expect(note.tokenHash).to.equal(padTo32BytesUnHex(MOCK_TOKEN));\n });\n\n it('Should test token array comparisons', () => {\n const erc20AmountRecipients1: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '2',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: 300n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n ];\n\n // Same same\n const erc20AmountRecipients2: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '2',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: 300n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n ];\n\n // Different addresses\n const erc20AmountRecipients3: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '5',\n amount: 300n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n ];\n\n // Different amounts\n const erc20AmountRecipients4: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '2',\n amount: 300n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n ];\n\n // Different recipients\n const erc20AmountRecipients5: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '1',\n amount: 100n,\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '2',\n amount: BigInt(200),\n recipientAddress: MOCK_DOP_WALLET_ADDRESS,\n },\n {\n tokenAddress: '3',\n amount: 300n,\n recipientAddress: MOCK_ETH_WALLET_ADDRESS,\n },\n ];\n\n expect(\n compareERC20AmountRecipientArrays(\n erc20AmountRecipients1,\n erc20AmountRecipients2,\n ),\n ).to.be.true;\n expect(\n compareERC20AmountRecipientArrays(\n erc20AmountRecipients1,\n erc20AmountRecipients3,\n ),\n ).to.be.false;\n expect(\n compareERC20AmountRecipientArrays(\n erc20AmountRecipients1,\n erc20AmountRecipients4,\n ),\n ).to.be.false;\n expect(\n compareERC20AmountRecipientArrays(\n erc20AmountRecipients1,\n erc20AmountRecipients5,\n ),\n ).to.be.false;\n });\n\n it('Should compare erc20 amount recipients', () => {\n const sameA: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '0x1234',\n amount: 100n,\n recipientAddress: 'hello',\n },\n {\n tokenAddress: '0x1234',\n amount: BigInt(200),\n recipientAddress: 'hello2',\n },\n ];\n const sameB: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '0x1234',\n amount: BigInt(200),\n recipientAddress: 'hello2',\n },\n {\n tokenAddress: '0x1234',\n amount: 100n,\n recipientAddress: 'hello',\n },\n ];\n const differentC: DopERC20AmountRecipient[] = [\n {\n tokenAddress: '0x1234',\n amount: 100n,\n recipientAddress: 'hello',\n },\n ];\n\n expect(compareERC20AmountRecipientArrays(sameA, sameB)).to.be.true;\n expect(compareERC20AmountRecipientArrays(sameA, differentC)).to.be.false;\n });\n});\n"]}
@@ -41,9 +41,9 @@ const proof_cache_1 = require("../proof-cache");
41
41
  const txNotes = __importStar(require("../tx-notes"));
42
42
  const helper_test_1 = require("../../../tests/helper.test");
43
43
  let gasEstimateStub;
44
- let railProveStub;
45
- let railDummyProveStub;
46
- let railTransactStub;
44
+ let dopProveStub;
45
+ let dopDummyProveStub;
46
+ let dopTransactStub;
47
47
  let relayAdaptPopulateDecryptBaseToken;
48
48
  let setDecryptSpy;
49
49
  let erc20NoteSpy;
@@ -116,7 +116,7 @@ describe('tx-transfer', () => {
116
116
  ...mocks_test_1.MOCK_TOKEN_FEE,
117
117
  recipientAddress: broadcasterDopAddress,
118
118
  };
119
- railProveStub = sinon_1.default.stub(dop_engine_v3_1.TransactionBatch.prototype, 'generateTransactions').resolves({
119
+ dopProveStub = sinon_1.default.stub(dop_engine_v3_1.TransactionBatch.prototype, 'generateTransactions').resolves({
120
120
  provedTransactions: [
121
121
  {
122
122
  nullifiers: mocks_test_1.MOCK_NULLIFIERS,
@@ -124,7 +124,7 @@ describe('tx-transfer', () => {
124
124
  ],
125
125
  preTransactionPOIsPerTxidLeafPerList: {},
126
126
  });
127
- railDummyProveStub = sinon_1.default.stub(dop_engine_v3_1.TransactionBatch.prototype, 'generateDummyTransactions').resolves([
127
+ dopDummyProveStub = sinon_1.default.stub(dop_engine_v3_1.TransactionBatch.prototype, 'generateDummyTransactions').resolves([
128
128
  {
129
129
  txidVersion,
130
130
  commitments: mocks_test_1.MOCK_COMMITMENTS,
@@ -132,7 +132,7 @@ describe('tx-transfer', () => {
132
132
  nullifiers: mocks_test_1.MOCK_NULLIFIERS,
133
133
  },
134
134
  ]);
135
- railTransactStub = sinon_1.default.stub(dop_engine_v3_1.DopVersionedSmartContracts, 'generateTransact').resolves({ data: '0x0123' });
135
+ dopTransactStub = sinon_1.default.stub(dop_engine_v3_1.DopVersionedSmartContracts, 'generateTransact').resolves({ data: '0x0123' });
136
136
  relayAdaptPopulateDecryptBaseToken = sinon_1.default.stub(dop_engine_v3_1.RelayAdaptVersionedSmartContracts, 'populateDecryptBaseToken').resolves({ data: '0x0123' });
137
137
  });
138
138
  afterEach(() => {
@@ -142,9 +142,9 @@ describe('tx-transfer', () => {
142
142
  nftNoteSpy?.restore();
143
143
  });
144
144
  after(async () => {
145
- railProveStub.restore();
146
- railDummyProveStub.restore();
147
- railTransactStub.restore();
145
+ dopProveStub.restore();
146
+ dopDummyProveStub.restore();
147
+ dopTransactStub.restore();
148
148
  relayAdaptPopulateDecryptBaseToken.restore();
149
149
  await (0, setup_test_1.closeTestEngine)();
150
150
  });
@@ -1 +1 @@
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-v5';\nimport {\n DopERC20Amount,\n NetworkName,\n EVMGasType,\n DopERC20AmountRecipient,\n DopNFTAmountRecipient,\n TransactionGasDetails,\n isDefined,\n} from 'dop-sharedmodels-v5';\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 { generateTransferProof } 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 railProveStub: SinonStub;\nlet railDummyProveStub: SinonStub;\nlet railTransactStub: 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 railProveStub = 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 railDummyProveStub = 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 railTransactStub = 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 railProveStub.restore();\n railDummyProveStub.restore();\n railTransactStub.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 generateTransferProof(\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 generateTransferProof(\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
+ {"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 { generateTransferProof } 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 generateTransferProof(\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 generateTransferProof(\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,4 +1,4 @@
1
- import { NetworkName, ProofType, DopNFTAmountRecipient, DopERC20Amount, DopERC20AmountRecipient, DopNFTAmount, TransactionGasDetails, DopERC20Recipient, TXIDVersion } from 'dop-sharedmodels-v5';
1
+ import { NetworkName, ProofType, DopNFTAmountRecipient, DopERC20Amount, DopERC20AmountRecipient, DopNFTAmount, TransactionGasDetails, DopERC20Recipient, TXIDVersion } from 'dop-sharedmodels-v3';
2
2
  import { ContractTransaction } from 'ethers';
3
3
  export type ProvedTransaction = {
4
4
  proofType: ProofType;
@@ -1 +1 @@
1
- {"version":3,"file":"proof-cache.js","sourceRoot":"","sources":["../../../src/services/transactions/proof-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n NetworkName,\n ProofType,\n DopNFTAmountRecipient,\n DopERC20Amount,\n DopERC20AmountRecipient,\n DopNFTAmount,\n TransactionGasDetails,\n isDefined,\n DopERC20Recipient,\n TXIDVersion,\n} from 'dop-sharedmodels-v5';\nimport { shouldSetOverallBatchMinGasPriceForNetwork } from '../../utils/gas-price';\nimport { compareContractTransactionArrays } from '../../utils/utils';\nimport { setGasDetailsForTransaction } from './tx-gas-details';\nimport {\n compareERC20AmountRecipients,\n compareERC20AmountRecipientArrays,\n compareERC20AmountArrays,\n compareNFTAmountRecipientArrays,\n compareNFTAmountArrays,\n compareERC20RecipientArrays,\n} from './tx-notes';\nimport { ContractTransaction } from 'ethers';\n\nexport type ProvedTransaction = {\n proofType: ProofType;\n txidVersion: TXIDVersion;\n transaction: ContractTransaction;\n dopWalletID: string;\n showSenderAddressToRecipient: boolean;\n memoText: Optional<string>;\n erc20AmountRecipients: DopERC20AmountRecipient[];\n nftAmountRecipients: DopNFTAmountRecipient[];\n relayAdaptDecryptERC20Amounts: Optional<DopERC20Amount[]>;\n relayAdaptDecryptNFTAmounts: Optional<DopNFTAmount[]>;\n relayAdaptEncryptERC20Recipients: Optional<DopERC20Recipient[]>;\n relayAdaptEncryptNFTRecipients: Optional<DopNFTAmount[]>;\n crossContractCalls: Optional<ContractTransaction[]>;\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>;\n sendWithPublicWallet: boolean;\n overallBatchMinGasPrice: Optional<bigint>;\n nullifiers: string[];\n};\n\nlet cachedProvedTransaction: Optional<ProvedTransaction>;\n\nexport const populateProvedTransaction = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n proofType: ProofType,\n dopWalletID: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayAdaptDecryptERC20Amounts: Optional<DopERC20Amount[]>,\n relayAdaptDecryptNFTAmounts: Optional<DopNFTAmount[]>,\n relayAdaptEncryptERC20Recipients: Optional<DopERC20Recipient[]>,\n relayAdaptEncryptNFTRecipients: Optional<DopNFTAmount[]>,\n crossContractCalls: Optional<ContractTransaction[]>,\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<{\n transaction: ContractTransaction;\n nullifiers: string[];\n}> => {\n try {\n validateCachedProvedTransaction(\n txidVersion,\n networkName,\n proofType,\n dopWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptDecryptERC20Amounts,\n relayAdaptDecryptNFTAmounts,\n relayAdaptEncryptERC20Recipients,\n relayAdaptEncryptNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n } catch (cause) {\n if (!(cause instanceof Error)) {\n throw new Error('Non-error thrown from populateProvedTransaction', {\n cause,\n });\n }\n throw new Error(`Invalid proof for this transaction`, { cause });\n }\n\n const { transaction, nullifiers } =\n getCachedProvedTransaction();\n\n setGasDetailsForTransaction(\n networkName,\n transaction,\n gasDetails,\n sendWithPublicWallet,\n );\n\n return { transaction, nullifiers };\n};\n\nexport const setCachedProvedTransaction = (tx?: ProvedTransaction) => {\n if (isDefined(tx?.transaction?.from)) {\n throw new Error(`Cannot cache a transaction with a 'from' address.`);\n }\n cachedProvedTransaction = tx;\n};\n\nexport const getCachedProvedTransaction = (): ProvedTransaction => {\n return cachedProvedTransaction as ProvedTransaction;\n};\n\nconst shouldValidateERC20AmountRecipients = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n // Skip validation for erc20AmountRecipients, which is not used\n // in this transaction type.\n return false;\n case ProofType.Transfer:\n case ProofType.Decrypt:\n case ProofType.DecryptBaseToken:\n return true;\n }\n};\n\nconst shouldValidateRelayAdaptAmounts = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n case ProofType.DecryptBaseToken:\n // Only validate for Cross Contract and Decrypt Base Token proofs.\n return true;\n case ProofType.Transfer:\n case ProofType.Decrypt:\n return false;\n }\n};\n\nconst shouldValidateCrossContractCalls = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n // Only validate for Cross Contract proofs.\n return true;\n case ProofType.Transfer:\n case ProofType.Decrypt:\n case ProofType.DecryptBaseToken:\n return false;\n }\n};\n\nexport const validateCachedProvedTransaction = (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n proofType: ProofType,\n dopWalletID: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayAdaptDecryptERC20Amounts: Optional<DopERC20Amount[]>,\n relayAdaptDecryptNFTAmounts: Optional<DopNFTAmount[]>,\n relayAdaptEncryptERC20Recipients: Optional<DopERC20Recipient[]>,\n relayAdaptEncryptNFTRecipients: Optional<DopNFTAmount[]>,\n crossContractCalls: Optional<ContractTransaction[]>,\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n): void => {\n if (!cachedProvedTransaction) {\n throw new Error('No proof found.');\n } else if (cachedProvedTransaction.txidVersion !== txidVersion) {\n throw new Error('Mismatch: txidVersion.');\n } else if (cachedProvedTransaction.proofType !== proofType) {\n throw new Error('Mismatch: proofType.');\n } else if (cachedProvedTransaction.dopWalletID !== dopWalletID) {\n throw new Error('Mismatch: dopWalletID.');\n } else if (\n proofType === ProofType.Transfer &&\n cachedProvedTransaction.showSenderAddressToRecipient !==\n showSenderAddressToRecipient\n ) {\n throw new Error('Mismatch: showSenderAddressToRecipient.');\n } else if (\n proofType === ProofType.Transfer &&\n cachedProvedTransaction.memoText !== memoText\n ) {\n throw new Error('Mismatch: memoText.');\n } else if (\n shouldValidateERC20AmountRecipients(proofType) &&\n !compareERC20AmountRecipientArrays(\n erc20AmountRecipients,\n cachedProvedTransaction.erc20AmountRecipients,\n )\n ) {\n throw new Error('Mismatch: erc20AmountRecipients.');\n } else if (\n !compareNFTAmountRecipientArrays(\n nftAmountRecipients,\n cachedProvedTransaction.nftAmountRecipients,\n )\n ) {\n throw new Error('Mismatch: nftAmountRecipients.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareERC20AmountArrays(\n relayAdaptDecryptERC20Amounts,\n cachedProvedTransaction.relayAdaptDecryptERC20Amounts,\n )\n ) {\n throw new Error('Mismatch: relayAdaptDecryptERC20Amounts.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareNFTAmountArrays(\n relayAdaptDecryptNFTAmounts,\n cachedProvedTransaction.relayAdaptDecryptNFTAmounts,\n )\n ) {\n throw new Error('Mismatch: relayAdaptDecryptNFTAmounts.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareERC20RecipientArrays(\n relayAdaptEncryptERC20Recipients,\n cachedProvedTransaction.relayAdaptEncryptERC20Recipients,\n )\n ) {\n throw new Error('Mismatch: relayAdaptEncryptERC20Recipients.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareNFTAmountArrays(\n relayAdaptEncryptNFTRecipients,\n cachedProvedTransaction.relayAdaptEncryptNFTRecipients,\n )\n ) {\n throw new Error('Mismatch: relayAdaptEncryptNFTRecipients.');\n } else if (\n shouldValidateCrossContractCalls(proofType) &&\n !compareContractTransactionArrays(\n crossContractCalls,\n cachedProvedTransaction.crossContractCalls,\n )\n ) {\n throw new Error('Mismatch: crossContractCalls.');\n } else if (\n !compareERC20AmountRecipients(\n cachedProvedTransaction.broadcasterFeeERC20AmountRecipient,\n broadcasterFeeERC20AmountRecipient,\n )\n ) {\n throw new Error('Mismatch: broadcasterFeeERC20AmountRecipient.');\n } else if (\n sendWithPublicWallet !== cachedProvedTransaction.sendWithPublicWallet\n ) {\n throw new Error('Mismatch: sendWithPublicWallet.');\n } else if (\n shouldSetOverallBatchMinGasPriceForNetwork(\n cachedProvedTransaction.sendWithPublicWallet,\n networkName,\n ) &&\n overallBatchMinGasPrice !== cachedProvedTransaction.overallBatchMinGasPrice\n ) {\n throw new Error('Mismatch: overallBatchMinGasPrice.');\n }\n};\n"]}
1
+ {"version":3,"file":"proof-cache.js","sourceRoot":"","sources":["../../../src/services/transactions/proof-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n NetworkName,\n ProofType,\n DopNFTAmountRecipient,\n DopERC20Amount,\n DopERC20AmountRecipient,\n DopNFTAmount,\n TransactionGasDetails,\n isDefined,\n DopERC20Recipient,\n TXIDVersion,\n} from 'dop-sharedmodels-v3';\nimport { shouldSetOverallBatchMinGasPriceForNetwork } from '../../utils/gas-price';\nimport { compareContractTransactionArrays } from '../../utils/utils';\nimport { setGasDetailsForTransaction } from './tx-gas-details';\nimport {\n compareERC20AmountRecipients,\n compareERC20AmountRecipientArrays,\n compareERC20AmountArrays,\n compareNFTAmountRecipientArrays,\n compareNFTAmountArrays,\n compareERC20RecipientArrays,\n} from './tx-notes';\nimport { ContractTransaction } from 'ethers';\n\nexport type ProvedTransaction = {\n proofType: ProofType;\n txidVersion: TXIDVersion;\n transaction: ContractTransaction;\n dopWalletID: string;\n showSenderAddressToRecipient: boolean;\n memoText: Optional<string>;\n erc20AmountRecipients: DopERC20AmountRecipient[];\n nftAmountRecipients: DopNFTAmountRecipient[];\n relayAdaptDecryptERC20Amounts: Optional<DopERC20Amount[]>;\n relayAdaptDecryptNFTAmounts: Optional<DopNFTAmount[]>;\n relayAdaptEncryptERC20Recipients: Optional<DopERC20Recipient[]>;\n relayAdaptEncryptNFTRecipients: Optional<DopNFTAmount[]>;\n crossContractCalls: Optional<ContractTransaction[]>;\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>;\n sendWithPublicWallet: boolean;\n overallBatchMinGasPrice: Optional<bigint>;\n nullifiers: string[];\n};\n\nlet cachedProvedTransaction: Optional<ProvedTransaction>;\n\nexport const populateProvedTransaction = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n proofType: ProofType,\n dopWalletID: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayAdaptDecryptERC20Amounts: Optional<DopERC20Amount[]>,\n relayAdaptDecryptNFTAmounts: Optional<DopNFTAmount[]>,\n relayAdaptEncryptERC20Recipients: Optional<DopERC20Recipient[]>,\n relayAdaptEncryptNFTRecipients: Optional<DopNFTAmount[]>,\n crossContractCalls: Optional<ContractTransaction[]>,\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<{\n transaction: ContractTransaction;\n nullifiers: string[];\n}> => {\n try {\n validateCachedProvedTransaction(\n txidVersion,\n networkName,\n proofType,\n dopWalletID,\n showSenderAddressToRecipient,\n memoText,\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptDecryptERC20Amounts,\n relayAdaptDecryptNFTAmounts,\n relayAdaptEncryptERC20Recipients,\n relayAdaptEncryptNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n } catch (cause) {\n if (!(cause instanceof Error)) {\n throw new Error('Non-error thrown from populateProvedTransaction', {\n cause,\n });\n }\n throw new Error(`Invalid proof for this transaction`, { cause });\n }\n\n const { transaction, nullifiers } =\n getCachedProvedTransaction();\n\n setGasDetailsForTransaction(\n networkName,\n transaction,\n gasDetails,\n sendWithPublicWallet,\n );\n\n return { transaction, nullifiers };\n};\n\nexport const setCachedProvedTransaction = (tx?: ProvedTransaction) => {\n if (isDefined(tx?.transaction?.from)) {\n throw new Error(`Cannot cache a transaction with a 'from' address.`);\n }\n cachedProvedTransaction = tx;\n};\n\nexport const getCachedProvedTransaction = (): ProvedTransaction => {\n return cachedProvedTransaction as ProvedTransaction;\n};\n\nconst shouldValidateERC20AmountRecipients = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n // Skip validation for erc20AmountRecipients, which is not used\n // in this transaction type.\n return false;\n case ProofType.Transfer:\n case ProofType.Decrypt:\n case ProofType.DecryptBaseToken:\n return true;\n }\n};\n\nconst shouldValidateRelayAdaptAmounts = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n case ProofType.DecryptBaseToken:\n // Only validate for Cross Contract and Decrypt Base Token proofs.\n return true;\n case ProofType.Transfer:\n case ProofType.Decrypt:\n return false;\n }\n};\n\nconst shouldValidateCrossContractCalls = (proofType: ProofType) => {\n switch (proofType) {\n case ProofType.CrossContractCalls:\n // Only validate for Cross Contract proofs.\n return true;\n case ProofType.Transfer:\n case ProofType.Decrypt:\n case ProofType.DecryptBaseToken:\n return false;\n }\n};\n\nexport const validateCachedProvedTransaction = (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n proofType: ProofType,\n dopWalletID: string,\n showSenderAddressToRecipient: boolean,\n memoText: Optional<string>,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n relayAdaptDecryptERC20Amounts: Optional<DopERC20Amount[]>,\n relayAdaptDecryptNFTAmounts: Optional<DopNFTAmount[]>,\n relayAdaptEncryptERC20Recipients: Optional<DopERC20Recipient[]>,\n relayAdaptEncryptNFTRecipients: Optional<DopNFTAmount[]>,\n crossContractCalls: Optional<ContractTransaction[]>,\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n): void => {\n if (!cachedProvedTransaction) {\n throw new Error('No proof found.');\n } else if (cachedProvedTransaction.txidVersion !== txidVersion) {\n throw new Error('Mismatch: txidVersion.');\n } else if (cachedProvedTransaction.proofType !== proofType) {\n throw new Error('Mismatch: proofType.');\n } else if (cachedProvedTransaction.dopWalletID !== dopWalletID) {\n throw new Error('Mismatch: dopWalletID.');\n } else if (\n proofType === ProofType.Transfer &&\n cachedProvedTransaction.showSenderAddressToRecipient !==\n showSenderAddressToRecipient\n ) {\n throw new Error('Mismatch: showSenderAddressToRecipient.');\n } else if (\n proofType === ProofType.Transfer &&\n cachedProvedTransaction.memoText !== memoText\n ) {\n throw new Error('Mismatch: memoText.');\n } else if (\n shouldValidateERC20AmountRecipients(proofType) &&\n !compareERC20AmountRecipientArrays(\n erc20AmountRecipients,\n cachedProvedTransaction.erc20AmountRecipients,\n )\n ) {\n throw new Error('Mismatch: erc20AmountRecipients.');\n } else if (\n !compareNFTAmountRecipientArrays(\n nftAmountRecipients,\n cachedProvedTransaction.nftAmountRecipients,\n )\n ) {\n throw new Error('Mismatch: nftAmountRecipients.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareERC20AmountArrays(\n relayAdaptDecryptERC20Amounts,\n cachedProvedTransaction.relayAdaptDecryptERC20Amounts,\n )\n ) {\n throw new Error('Mismatch: relayAdaptDecryptERC20Amounts.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareNFTAmountArrays(\n relayAdaptDecryptNFTAmounts,\n cachedProvedTransaction.relayAdaptDecryptNFTAmounts,\n )\n ) {\n throw new Error('Mismatch: relayAdaptDecryptNFTAmounts.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareERC20RecipientArrays(\n relayAdaptEncryptERC20Recipients,\n cachedProvedTransaction.relayAdaptEncryptERC20Recipients,\n )\n ) {\n throw new Error('Mismatch: relayAdaptEncryptERC20Recipients.');\n } else if (\n shouldValidateRelayAdaptAmounts(proofType) &&\n !compareNFTAmountArrays(\n relayAdaptEncryptNFTRecipients,\n cachedProvedTransaction.relayAdaptEncryptNFTRecipients,\n )\n ) {\n throw new Error('Mismatch: relayAdaptEncryptNFTRecipients.');\n } else if (\n shouldValidateCrossContractCalls(proofType) &&\n !compareContractTransactionArrays(\n crossContractCalls,\n cachedProvedTransaction.crossContractCalls,\n )\n ) {\n throw new Error('Mismatch: crossContractCalls.');\n } else if (\n !compareERC20AmountRecipients(\n cachedProvedTransaction.broadcasterFeeERC20AmountRecipient,\n broadcasterFeeERC20AmountRecipient,\n )\n ) {\n throw new Error('Mismatch: broadcasterFeeERC20AmountRecipient.');\n } else if (\n sendWithPublicWallet !== cachedProvedTransaction.sendWithPublicWallet\n ) {\n throw new Error('Mismatch: sendWithPublicWallet.');\n } else if (\n shouldSetOverallBatchMinGasPriceForNetwork(\n cachedProvedTransaction.sendWithPublicWallet,\n networkName,\n ) &&\n overallBatchMinGasPrice !== cachedProvedTransaction.overallBatchMinGasPrice\n ) {\n throw new Error('Mismatch: overallBatchMinGasPrice.');\n }\n};\n"]}
@@ -1,6 +1,6 @@
1
- import { DopPopulateTransactionResponse, DopTransactionGasEstimateResponse, DopERC20Amount, NetworkName, TransactionReceiptLog, FeeTokenDetails, DopERC20AmountRecipient, DopNFTAmountRecipient, DopNFTAmount, TransactionGasDetails, DopERC20Recipient, TXIDVersion } from 'dop-sharedmodels-v5';
1
+ import { DopPopulateTransactionResponse, DopTransactionGasEstimateResponse, DopERC20Amount, NetworkName, TransactionReceiptLog, FeeTokenDetails, DopERC20AmountRecipient, DopNFTAmountRecipient, DopNFTAmount, TransactionGasDetails, DopERC20Recipient, TXIDVersion } from 'dop-sharedmodels-v3';
2
2
  import { GenerateTransactionsProgressCallback } from './tx-generator';
3
- import { NFTTokenData } from 'dop-engine-v5';
3
+ import { NFTTokenData } from 'dop-engine-v3';
4
4
  import { ContractTransaction } from 'ethers';
5
5
  export declare const createRelayAdaptDecryptERC20AmountRecipients: (txidVersion: TXIDVersion, networkName: NetworkName, decryptERC20Amounts: DopERC20Amount[]) => DopERC20AmountRecipient[];
6
6
  export declare const createRelayAdaptDecryptNFTAmountRecipients: (txidVersion: TXIDVersion, networkName: NetworkName, decryptNFTAmounts: DopNFTAmount[]) => DopNFTAmountRecipient[];
@@ -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 TXIDVersion,\n NETWORK_CONFIG,\n} from 'dop-sharedmodels-v5';\nimport {\n GenerateTransactionsProgressCallback,\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 NFTTokenData,\n ByteUtils,\n ByteLength,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2,\n RelayAdaptEncryptNFTRecipient,\n TransactionStructV2,\n TransactionStructV3,\n RelayAdaptVersionedSmartContracts,\n} from 'dop-engine-v5';\nimport { assertNotBlockedAddress } from '../../utils/blocked-address';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction } from 'ethers';\nimport { isDecimalStr } from '../../utils';\nimport { bigIntStringToHex } from '../dop/quick-sync/shared-formatters';\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: ByteUtils.hexlify(transactionRequest.data, true),\n };\n assertNotBlockedAddress(transaction.to);\n return transaction;\n });\n } catch (cause) {\n if (!(cause instanceof Error)) {\n throw new Error('Non-error thrown from createValidCrossContractCalls', {\n cause,\n });\n }\n throw reportAndSanitizeError(createValidCrossContractCalls.name, cause);\n }\n};\n\nexport const createRelayAdaptDecryptERC20AmountRecipients = (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n decryptERC20Amounts: DopERC20Amount[],\n): DopERC20AmountRecipient[] => {\n const chain = NETWORK_CONFIG[networkName].chain;\n const relayAdaptContract =\n RelayAdaptVersionedSmartContracts.getRelayAdaptContract(txidVersion, chain);\n const decryptERC20AmountRecipients: DopERC20AmountRecipient[] =\n decryptERC20Amounts.map(decryptERC20Amount => ({\n ...decryptERC20Amount,\n recipientAddress: relayAdaptContract.address,\n }));\n return decryptERC20AmountRecipients;\n};\n\nexport const createRelayAdaptDecryptNFTAmountRecipients = (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n decryptNFTAmounts: DopNFTAmount[],\n): DopNFTAmountRecipient[] => {\n const chain = NETWORK_CONFIG[networkName].chain;\n const relayAdaptContract =\n RelayAdaptVersionedSmartContracts.getRelayAdaptContract(txidVersion, chain);\n const decryptNFTAmountRecipients: DopNFTAmountRecipient[] =\n decryptNFTAmounts.map(decryptNFTAmount => ({\n ...decryptNFTAmount,\n recipientAddress: relayAdaptContract.address,\n }));\n return decryptNFTAmountRecipients;\n};\n\nexport const createNFTTokenDataFromDopNFTAmount = (\n nftAmount: DopNFTAmount,\n): NFTTokenData => {\n const tokenSubIDHex = isDecimalStr(nftAmount.tokenSubID)\n ? bigIntStringToHex(nftAmount.tokenSubID)\n : nftAmount.tokenSubID;\n\n return {\n tokenAddress: ByteUtils.formatToByteLength(\n nftAmount.nftAddress,\n ByteLength.Address,\n true,\n ),\n tokenType: nftAmount.nftTokenType as 1 | 2,\n tokenSubID: ByteUtils.formatToByteLength(\n tokenSubIDHex,\n ByteLength.UINT_256,\n true,\n ),\n };\n};\n\nconst createRelayAdaptEncryptNFTRecipients = (\n relayAdaptEncryptNFTRecipients: DopNFTAmountRecipient[],\n): RelayAdaptEncryptNFTRecipient[] => {\n return relayAdaptEncryptNFTRecipients.map(\n (nftRecipient: DopNFTAmountRecipient) => ({\n nftTokenData: createNFTTokenDataFromDopNFTAmount(nftRecipient),\n recipientAddress: nftRecipient.recipientAddress,\n }),\n );\n};\n\nexport const populateProvedCrossContractCalls = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n relayAdaptDecryptERC20Amounts: DopERC20Amount[],\n relayAdaptDecryptNFTAmounts: DopNFTAmount[],\n relayAdaptEncryptERC20Recipients: DopERC20Recipient[],\n relayAdaptEncryptNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n txidVersion,\n networkName,\n ProofType.CrossContractCalls,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n [], // erc20AmountRecipients\n [], // nftAmountRecipients\n relayAdaptDecryptERC20Amounts,\n relayAdaptDecryptNFTAmounts,\n relayAdaptEncryptERC20Recipients,\n relayAdaptEncryptNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\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 txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptDecryptERC20Amounts: DopERC20Amount[],\n relayAdaptDecryptNFTAmounts: DopNFTAmount[],\n relayAdaptEncryptERC20Recipients: DopERC20Recipient[],\n relayAdaptEncryptNFTRecipients: 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 chain = NETWORK_CONFIG[networkName].chain;\n\n const relayAdaptDecryptERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptDecryptERC20AmountRecipients(\n txidVersion,\n networkName,\n relayAdaptDecryptERC20Amounts,\n );\n const relayAdaptDecryptNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptDecryptNFTAmountRecipients(\n txidVersion,\n networkName,\n relayAdaptDecryptNFTAmounts,\n );\n\n const encryptRandom = ByteUtils.randomHex(16);\n const relayEncryptRequests =\n await RelayAdaptHelper.generateRelayEncryptRequests(\n encryptRandom,\n relayAdaptEncryptERC20Recipients,\n createRelayAdaptEncryptNFTRecipients(relayAdaptEncryptNFTRecipients),\n );\n\n // TODO-V3: Needs modification\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptDecryptERC20AmountRecipients,\n relayAdaptDecryptNFTAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n async (txs: (TransactionStructV2 | TransactionStructV3)[]) => {\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n\n // TODO: We should add the relay adapt contract gas limit here.\n const transaction =\n await RelayAdaptVersionedSmartContracts.populateCrossContractCalls(\n txidVersion,\n chain,\n txs,\n validCrossContractCalls,\n relayEncryptRequests,\n relayAdaptParamsRandom,\n true, // isGasEstimate\n !sendWithPublicWallet, // isBroadcasterTransaction\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 txidVersion,\n networkName,\n dopWalletID,\n relayAdaptDecryptERC20AmountRecipients,\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 txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptDecryptERC20Amounts: DopERC20Amount[],\n relayAdaptDecryptNFTAmounts: DopNFTAmount[],\n relayAdaptEncryptERC20Recipients: DopERC20Recipient[],\n relayAdaptEncryptNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n minGasLimit: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptDecryptERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptDecryptERC20AmountRecipients(\n txidVersion,\n networkName,\n relayAdaptDecryptERC20Amounts,\n );\n const relayAdaptDecryptNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptDecryptNFTAmountRecipients(\n txidVersion,\n networkName,\n relayAdaptDecryptNFTAmounts,\n );\n\n // Generate dummy txs for relay adapt params.\n const dummyDecryptTxs = await generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptDecryptERC20AmountRecipients,\n relayAdaptDecryptNFTAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n\n // Generate relay adapt params from dummy transactions.\n const encryptRandom = ByteUtils.randomHex(16);\n\n const relayEncryptRequests =\n await RelayAdaptHelper.generateRelayEncryptRequests(\n encryptRandom,\n relayAdaptEncryptERC20Recipients,\n createRelayAdaptEncryptNFTRecipients(relayAdaptEncryptNFTRecipients),\n );\n\n // TODO-V3: Needs modification\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2;\n\n const { chain } = NETWORK_CONFIG[networkName];\n\n const isBroadcasterTransaction = !sendWithPublicWallet;\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n const relayAdaptParams =\n await RelayAdaptVersionedSmartContracts.getRelayAdaptParamsCrossContractCalls(\n txidVersion,\n chain,\n dummyDecryptTxs,\n validCrossContractCalls,\n relayEncryptRequests,\n relayAdaptParamsRandom,\n isBroadcasterTransaction,\n minimumGasLimit,\n );\n const relayAdaptContract =\n RelayAdaptVersionedSmartContracts.getRelayAdaptContract(\n txidVersion,\n chain,\n );\n const relayAdaptID: AdaptID = {\n contract: relayAdaptContract.address,\n parameters: relayAdaptParams,\n };\n\n // Create real transactions with relay adapt params.\n const { provedTransactions } =\n await generateProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptDecryptERC20AmountRecipients,\n relayAdaptDecryptNFTAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n relayAdaptID,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n );\n\n const nullifiers = nullifiersForTransactions(provedTransactions);\n\n const transaction =\n await RelayAdaptVersionedSmartContracts.populateCrossContractCalls(\n txidVersion,\n chain,\n provedTransactions,\n validCrossContractCalls,\n relayEncryptRequests,\n relayAdaptParamsRandom,\n false, // isGasEstimate\n isBroadcasterTransaction,\n minimumGasLimit,\n );\n delete transaction.from;\n\n setCachedProvedTransaction({\n proofType: ProofType.CrossContractCalls,\n txidVersion,\n dopWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients: [],\n nftAmountRecipients: [],\n relayAdaptDecryptERC20Amounts,\n relayAdaptDecryptNFTAmounts,\n relayAdaptEncryptERC20Recipients,\n relayAdaptEncryptNFTRecipients,\n crossContractCalls: validCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\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 txidVersion: TXIDVersion,\n receiptLogs: TransactionReceiptLog[],\n // receiptLogs: TransactionReceiptLog[] | readonly Log[],\n): Optional<string> => {\n try {\n const relayAdaptError =\n RelayAdaptVersionedSmartContracts.getRelayAdaptCallError(\n txidVersion,\n receiptLogs,\n );\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 = (\n txidVersion: TXIDVersion,\n data: string,\n): Optional<string> => {\n try {\n const relayAdaptErrorParsed =\n RelayAdaptVersionedSmartContracts.parseRelayAdaptReturnValue(\n txidVersion,\n data,\n );\n if (isDefined(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":";;;AAAA,6DAgB6B;AAC7B,iDAKwB;AACxB,+CAGuB;AACvB,+CAAsD;AACtD,iDAWuB;AACvB,iEAAsE;AACtE,yFAA0G;AAC1G,6CAA2D;AAE3D,uCAA2C;AAC3C,2EAAwE;AAExE,MAAM,6BAA6B,GAAG,CACpC,kBAAyC,EAClB,EAAE;IACzB,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;KAC5D;IACD,IAAI;QACF,OAAO,kBAAkB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE;YACjD,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;gBACtD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;aACzE;YACD,MAAM,WAAW,GAAwB;gBACvC,EAAE,EAAE,kBAAkB,CAAC,EAAE;gBACzB,KAAK,EAAE,kBAAkB,CAAC,KAAK;gBAC/B,IAAI,EAAE,yBAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;aACvD,CAAC;YACF,IAAA,yCAAuB,EAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACxC,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC,CAAC;KACJ;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CAAC,qDAAqD,EAAE;gBACrE,KAAK;aACN,CAAC,CAAC;SACJ;QACD,MAAM,IAAA,8BAAsB,EAAC,6BAA6B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACzE;AACH,CAAC,CAAC;AAEK,MAAM,4CAA4C,GAAG,CAC1D,WAAwB,EACxB,WAAwB,EACxB,mBAAqC,EACV,EAAE;IAC7B,MAAM,KAAK,GAAG,oCAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;IAChD,MAAM,kBAAkB,GACtB,iDAAiC,CAAC,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC9E,MAAM,4BAA4B,GAChC,mBAAmB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC7C,GAAG,kBAAkB;QACrB,gBAAgB,EAAE,kBAAkB,CAAC,OAAO;KAC7C,CAAC,CAAC,CAAC;IACN,OAAO,4BAA4B,CAAC;AACtC,CAAC,CAAC;AAdW,QAAA,4CAA4C,gDAcvD;AAEK,MAAM,0CAA0C,GAAG,CACxD,WAAwB,EACxB,WAAwB,EACxB,iBAAiC,EACR,EAAE;IAC3B,MAAM,KAAK,GAAG,oCAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;IAChD,MAAM,kBAAkB,GACtB,iDAAiC,CAAC,qBAAqB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC9E,MAAM,0BAA0B,GAC9B,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACzC,GAAG,gBAAgB;QACnB,gBAAgB,EAAE,kBAAkB,CAAC,OAAO;KAC7C,CAAC,CAAC,CAAC;IACN,OAAO,0BAA0B,CAAC;AACpC,CAAC,CAAC;AAdW,QAAA,0CAA0C,8CAcrD;AAEK,MAAM,kCAAkC,GAAG,CAChD,SAAuB,EACT,EAAE;IAChB,MAAM,aAAa,GAAG,IAAA,oBAAY,EAAC,SAAS,CAAC,UAAU,CAAC;QACtD,CAAC,CAAC,IAAA,qCAAiB,EAAC,SAAS,CAAC,UAAU,CAAC;QACzC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC;IAEzB,OAAO;QACL,YAAY,EAAE,yBAAS,CAAC,kBAAkB,CACxC,SAAS,CAAC,UAAU,EACpB,0BAAU,CAAC,OAAO,EAClB,IAAI,CACL;QACD,SAAS,EAAE,SAAS,CAAC,YAAqB;QAC1C,UAAU,EAAE,yBAAS,CAAC,kBAAkB,CACtC,aAAa,EACb,0BAAU,CAAC,QAAQ,EACnB,IAAI,CACL;KACF,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,kCAAkC,sCAoB7C;AAEF,MAAM,oCAAoC,GAAG,CAC3C,8BAAuD,EACtB,EAAE;IACnC,OAAO,8BAA8B,CAAC,GAAG,CACvC,CAAC,YAAmC,EAAE,EAAE,CAAC,CAAC;QACxC,YAAY,EAAE,IAAA,0CAAkC,EAAC,YAAY,CAAC;QAC9D,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;KAChD,CAAC,CACH,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,gCAAgC,GAAG,KAAK,EACnD,WAAwB,EACxB,WAAwB,EACxB,WAAmB,EACnB,6BAA+C,EAC/C,2BAA2C,EAC3C,gCAAqD,EACrD,8BAAuD,EACvD,kBAAyC,EACzC,kCAAqE,EACrE,oBAA6B,EAC7B,uBAAyC,EACzC,UAAiC,EACQ,EAAE;IAC3C,IAAI;QACF,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAC/B,MAAM,IAAA,uCAAyB,EAC7B,WAAW,EACX,WAAW,EACX,+BAAS,CAAC,kBAAkB,EAC5B,WAAW,EACX,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,EAAE,EAAE,wBAAwB;QAC5B,EAAE,EAAE,sBAAsB;QAC1B,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,8BAA8B,EAC9B,kBAAkB,EAClB,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,EACvB,UAAU,CACX,CAAC;QACJ,OAAO,WAAW,CAAC,IAAI,CAAC;QAExB,OAAO;YACL,UAAU;YACV,WAAW;SACZ,CAAC;KACH;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,wCAAgC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC1E;AACH,CAAC,CAAC;AA5CW,QAAA,gCAAgC,oCA4C3C;AAEK,MAAM,wCAAwC,GAAG,KAAK,EAC3D,WAAwB,EACxB,WAAwB,EACxB,WAAmB,EACnB,aAAqB,EACrB,6BAA+C,EAC/C,2BAA2C,EAC3C,gCAAqD,EACrD,8BAAuD,EACvD,kBAAyC,EACzC,kBAAyC,EACzC,eAA0C,EAC1C,oBAA6B,EAC7B,WAA6B,EACe,EAAE;IAC9C,IAAI;QACF,IAAA,wCAA0B,EAAC,SAAS,CAAC,CAAC;QAEtC,MAAM,uBAAuB,GAAG,EAAE,CAAC;QAEnC,MAAM,uBAAuB,GAC3B,6BAA6B,CAAC,kBAAkB,CAAC,CAAC;QAEpD,MAAM,KAAK,GAAG,oCAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;QAEhD,MAAM,sCAAsC,GAC1C,IAAA,oDAA4C,EAC1C,WAAW,EACX,WAAW,EACX,6BAA6B,CAC9B,CAAC;QACJ,MAAM,oCAAoC,GACxC,IAAA,kDAA0C,EACxC,WAAW,EACX,WAAW,EACX,2BAA2B,CAC5B,CAAC;QAEJ,MAAM,aAAa,GAAG,yBAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,oBAAoB,GACxB,MAAM,gCAAgB,CAAC,4BAA4B,CACjD,aAAa,EACb,gCAAgC,EAChC,oCAAoC,CAAC,8BAA8B,CAAC,CACrE,CAAC;QAEJ,8BAA8B;QAC9B,MAAM,eAAe,GACnB,WAAW,IAAI,qEAAqD,CAAC;QAEvE,MAAM,QAAQ,GAAG,MAAM,IAAA,uFAAoD,EACzE,CAAC,yBAAmD,EAAE,EAAE,CACtD,IAAA,6CAA8B,EAC5B,+BAAS,CAAC,kBAAkB,EAC5B,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,sCAAsC,EACtC,oCAAoC,EACpC,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,CACxB,EACH,KAAK,EAAE,GAAkD,EAAE,EAAE;YAC3D,MAAM,sBAAsB,GAAG,yBAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAEvD,+DAA+D;YAC/D,MAAM,WAAW,GACf,MAAM,iDAAiC,CAAC,0BAA0B,CAChE,WAAW,EACX,KAAK,EACL,GAAG,EACH,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,IAAI,EAAE,gBAAgB;YACtB,CAAC,oBAAoB,EAAE,2BAA2B;YAClD,eAAe,CAChB,CAAC;YACJ,mDAAmD;YACnD,wCAAwC;YACxC,OAAO,WAAW,CAAC,QAAQ,CAAC;YAC5B,OAAO,WAAW,CAAC;QACrB,CAAC,EACD,WAAW,EACX,WAAW,EACX,WAAW,EACX,sCAAsC,EACtC,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,IAAI,CACL,CAAC;QAEF,6CAA6C;QAC7C,oFAAoF;QACpF,IAAI,QAAQ,CAAC,WAAW,EAAE;YACxB,IAAI,QAAQ,CAAC,WAAW,GAAG,eAAe,EAAE;gBAC1C,QAAQ,CAAC,WAAW,GAAG,eAAe,CAAC;aACxC;SACF;QAED,OAAO,QAAQ,CAAC;KACjB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAC1B,gDAAwC,CAAC,IAAI,EAC7C,GAAG,CACJ,CAAC;KACH;AACH,CAAC,CAAC;AAhHW,QAAA,wCAAwC,4CAgHnD;AAEK,MAAM,+BAA+B,GAAG,KAAK,EAClD,WAAwB,EACxB,WAAwB,EACxB,WAAmB,EACnB,aAAqB,EACrB,6BAA+C,EAC/C,2BAA2C,EAC3C,gCAAqD,EACrD,8BAAuD,EACvD,kBAAyC,EACzC,kCAAqE,EACrE,oBAA6B,EAC7B,uBAAyC,EACzC,WAA6B,EAC7B,gBAAsD,EACvC,EAAE;IACjB,IAAI;QACF,IAAA,wCAA0B,EAAC,SAAS,CAAC,CAAC;QAEtC,MAAM,uBAAuB,GAC3B,6BAA6B,CAAC,kBAAkB,CAAC,CAAC;QAEpD,MAAM,sCAAsC,GAC1C,IAAA,oDAA4C,EAC1C,WAAW,EACX,WAAW,EACX,6BAA6B,CAC9B,CAAC;QACJ,MAAM,oCAAoC,GACxC,IAAA,kDAA0C,EACxC,WAAW,EACX,WAAW,EACX,2BAA2B,CAC5B,CAAC;QAEJ,6CAA6C;QAC7C,MAAM,eAAe,GAAG,MAAM,IAAA,6CAA8B,EAC1D,+BAAS,CAAC,kBAAkB,EAC5B,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,sCAAsC,EACtC,oCAAoC,EACpC,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,CACxB,CAAC;QAEF,uDAAuD;QACvD,MAAM,aAAa,GAAG,yBAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE9C,MAAM,oBAAoB,GACxB,MAAM,gCAAgB,CAAC,4BAA4B,CACjD,aAAa,EACb,gCAAgC,EAChC,oCAAoC,CAAC,8BAA8B,CAAC,CACrE,CAAC;QAEJ,8BAA8B;QAC9B,MAAM,eAAe,GACnB,WAAW,IAAI,qEAAqD,CAAC;QAEvE,MAAM,EAAE,KAAK,EAAE,GAAG,oCAAc,CAAC,WAAW,CAAC,CAAC;QAE9C,MAAM,wBAAwB,GAAG,CAAC,oBAAoB,CAAC;QACvD,MAAM,sBAAsB,GAAG,yBAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,gBAAgB,GACpB,MAAM,iDAAiC,CAAC,qCAAqC,CAC3E,WAAW,EACX,KAAK,EACL,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,wBAAwB,EACxB,eAAe,CAChB,CAAC;QACJ,MAAM,kBAAkB,GACtB,iDAAiC,CAAC,qBAAqB,CACrD,WAAW,EACX,KAAK,CACN,CAAC;QACJ,MAAM,YAAY,GAAY;YAC5B,QAAQ,EAAE,kBAAkB,CAAC,OAAO;YACpC,UAAU,EAAE,gBAAgB;SAC7B,CAAC;QAEF,oDAAoD;QACpD,MAAM,EAAE,kBAAkB,EAAE,GAC1B,MAAM,IAAA,wCAAyB,EAC7B,+BAAS,CAAC,kBAAkB,EAC5B,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,KAAK,EAAE,+BAA+B;QACtC,SAAS,EAAE,WAAW;QACtB,sCAAsC,EACtC,oCAAoC,EACpC,kCAAkC,EAClC,oBAAoB,EACpB,YAAY,EACZ,KAAK,EAAE,gBAAgB;QACvB,uBAAuB,EACvB,gBAAgB,CACjB,CAAC;QAEJ,MAAM,UAAU,GAAG,IAAA,wCAAyB,EAAC,kBAAkB,CAAC,CAAC;QAEjE,MAAM,WAAW,GACf,MAAM,iDAAiC,CAAC,0BAA0B,CAChE,WAAW,EACX,KAAK,EACL,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,KAAK,EAAE,gBAAgB;QACvB,wBAAwB,EACxB,eAAe,CAChB,CAAC;QACJ,OAAO,WAAW,CAAC,IAAI,CAAC;QAExB,IAAA,wCAA0B,EAAC;YACzB,SAAS,EAAE,+BAAS,CAAC,kBAAkB;YACvC,WAAW;YACX,WAAW;YACX,4BAA4B,EAAE,KAAK;YACnC,QAAQ,EAAE,SAAS;YACnB,qBAAqB,EAAE,EAAE;YACzB,mBAAmB,EAAE,EAAE;YACvB,6BAA6B;YAC7B,2BAA2B;YAC3B,gCAAgC;YAChC,8BAA8B;YAC9B,kBAAkB,EAAE,uBAAuB;YAC3C,kCAAkC;YAClC,oBAAoB;YACpB,WAAW;YACX,uBAAuB;YACvB,UAAU;SACX,CAAC,CAAC;KACJ;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,uCAA+B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACzE;AACH,CAAC,CAAC;AApJW,QAAA,+BAA+B,mCAoJ1C;AAEK,MAAM,6BAA6B,GAAG,CAC3C,WAAwB,EACxB,WAAoC,EAElB,EAAE;IACpB,IAAI;QACF,MAAM,eAAe,GACnB,iDAAiC,CAAC,sBAAsB,CACtD,WAAW,EACX,WAAW,CACZ,CAAC;QACJ,IAAI,IAAA,+BAAS,EAAC,eAAe,CAAC,EAAE;YAC9B,IAAA,yBAAgB,EAAC,eAAe,CAAC,CAAC;YAClC,OAAO,eAAe,CAAC;SACxB;QACD,OAAO,SAAS,CAAC;KAClB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,qCAA6B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACvE;AACH,CAAC,CAAC;AAnBW,QAAA,6BAA6B,iCAmBxC;AAEK,MAAM,0BAA0B,GAAG,CACxC,WAAwB,EACxB,IAAY,EACM,EAAE;IACpB,IAAI;QACF,MAAM,qBAAqB,GACzB,iDAAiC,CAAC,0BAA0B,CAC1D,WAAW,EACX,IAAI,CACL,CAAC;QACJ,IAAI,IAAA,+BAAS,EAAC,qBAAqB,CAAC,EAAE;YACpC,IAAA,yBAAgB,EAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,qBAAqB,CAAC,KAAK,CAAC;SACpC;QACD,OAAO,SAAS,CAAC;KAClB;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,IAAA,8BAAsB,EAAC,qCAA6B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACvE;AACH,CAAC,CAAC;AAlBW,QAAA,0BAA0B,8BAkBrC","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 TXIDVersion,\n NETWORK_CONFIG,\n} from 'dop-sharedmodels-v3';\nimport {\n GenerateTransactionsProgressCallback,\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 NFTTokenData,\n ByteUtils,\n ByteLength,\n MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2,\n RelayAdaptEncryptNFTRecipient,\n TransactionStructV2,\n TransactionStructV3,\n RelayAdaptVersionedSmartContracts,\n} from 'dop-engine-v3';\nimport { assertNotBlockedAddress } from '../../utils/blocked-address';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { ContractTransaction } from 'ethers';\nimport { isDecimalStr } from '../../utils';\nimport { bigIntStringToHex } from '../dop/quick-sync/shared-formatters';\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: ByteUtils.hexlify(transactionRequest.data, true),\n };\n assertNotBlockedAddress(transaction.to);\n return transaction;\n });\n } catch (cause) {\n if (!(cause instanceof Error)) {\n throw new Error('Non-error thrown from createValidCrossContractCalls', {\n cause,\n });\n }\n throw reportAndSanitizeError(createValidCrossContractCalls.name, cause);\n }\n};\n\nexport const createRelayAdaptDecryptERC20AmountRecipients = (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n decryptERC20Amounts: DopERC20Amount[],\n): DopERC20AmountRecipient[] => {\n const chain = NETWORK_CONFIG[networkName].chain;\n const relayAdaptContract =\n RelayAdaptVersionedSmartContracts.getRelayAdaptContract(txidVersion, chain);\n const decryptERC20AmountRecipients: DopERC20AmountRecipient[] =\n decryptERC20Amounts.map(decryptERC20Amount => ({\n ...decryptERC20Amount,\n recipientAddress: relayAdaptContract.address,\n }));\n return decryptERC20AmountRecipients;\n};\n\nexport const createRelayAdaptDecryptNFTAmountRecipients = (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n decryptNFTAmounts: DopNFTAmount[],\n): DopNFTAmountRecipient[] => {\n const chain = NETWORK_CONFIG[networkName].chain;\n const relayAdaptContract =\n RelayAdaptVersionedSmartContracts.getRelayAdaptContract(txidVersion, chain);\n const decryptNFTAmountRecipients: DopNFTAmountRecipient[] =\n decryptNFTAmounts.map(decryptNFTAmount => ({\n ...decryptNFTAmount,\n recipientAddress: relayAdaptContract.address,\n }));\n return decryptNFTAmountRecipients;\n};\n\nexport const createNFTTokenDataFromDopNFTAmount = (\n nftAmount: DopNFTAmount,\n): NFTTokenData => {\n const tokenSubIDHex = isDecimalStr(nftAmount.tokenSubID)\n ? bigIntStringToHex(nftAmount.tokenSubID)\n : nftAmount.tokenSubID;\n\n return {\n tokenAddress: ByteUtils.formatToByteLength(\n nftAmount.nftAddress,\n ByteLength.Address,\n true,\n ),\n tokenType: nftAmount.nftTokenType as 1 | 2,\n tokenSubID: ByteUtils.formatToByteLength(\n tokenSubIDHex,\n ByteLength.UINT_256,\n true,\n ),\n };\n};\n\nconst createRelayAdaptEncryptNFTRecipients = (\n relayAdaptEncryptNFTRecipients: DopNFTAmountRecipient[],\n): RelayAdaptEncryptNFTRecipient[] => {\n return relayAdaptEncryptNFTRecipients.map(\n (nftRecipient: DopNFTAmountRecipient) => ({\n nftTokenData: createNFTTokenDataFromDopNFTAmount(nftRecipient),\n recipientAddress: nftRecipient.recipientAddress,\n }),\n );\n};\n\nexport const populateProvedCrossContractCalls = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n relayAdaptDecryptERC20Amounts: DopERC20Amount[],\n relayAdaptDecryptNFTAmounts: DopNFTAmount[],\n relayAdaptEncryptERC20Recipients: DopERC20Recipient[],\n relayAdaptEncryptNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n txidVersion,\n networkName,\n ProofType.CrossContractCalls,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n [], // erc20AmountRecipients\n [], // nftAmountRecipients\n relayAdaptDecryptERC20Amounts,\n relayAdaptDecryptNFTAmounts,\n relayAdaptEncryptERC20Recipients,\n relayAdaptEncryptNFTRecipients,\n crossContractCalls,\n broadcasterFeeERC20AmountRecipient,\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 txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptDecryptERC20Amounts: DopERC20Amount[],\n relayAdaptDecryptNFTAmounts: DopNFTAmount[],\n relayAdaptEncryptERC20Recipients: DopERC20Recipient[],\n relayAdaptEncryptNFTRecipients: 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 chain = NETWORK_CONFIG[networkName].chain;\n\n const relayAdaptDecryptERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptDecryptERC20AmountRecipients(\n txidVersion,\n networkName,\n relayAdaptDecryptERC20Amounts,\n );\n const relayAdaptDecryptNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptDecryptNFTAmountRecipients(\n txidVersion,\n networkName,\n relayAdaptDecryptNFTAmounts,\n );\n\n const encryptRandom = ByteUtils.randomHex(16);\n const relayEncryptRequests =\n await RelayAdaptHelper.generateRelayEncryptRequests(\n encryptRandom,\n relayAdaptEncryptERC20Recipients,\n createRelayAdaptEncryptNFTRecipients(relayAdaptEncryptNFTRecipients),\n );\n\n // TODO-V3: Needs modification\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptDecryptERC20AmountRecipients,\n relayAdaptDecryptNFTAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n async (txs: (TransactionStructV2 | TransactionStructV3)[]) => {\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n\n // TODO: We should add the relay adapt contract gas limit here.\n const transaction =\n await RelayAdaptVersionedSmartContracts.populateCrossContractCalls(\n txidVersion,\n chain,\n txs,\n validCrossContractCalls,\n relayEncryptRequests,\n relayAdaptParamsRandom,\n true, // isGasEstimate\n !sendWithPublicWallet, // isBroadcasterTransaction\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 txidVersion,\n networkName,\n dopWalletID,\n relayAdaptDecryptERC20AmountRecipients,\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 txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n relayAdaptDecryptERC20Amounts: DopERC20Amount[],\n relayAdaptDecryptNFTAmounts: DopNFTAmount[],\n relayAdaptEncryptERC20Recipients: DopERC20Recipient[],\n relayAdaptEncryptNFTRecipients: DopNFTAmountRecipient[],\n crossContractCalls: ContractTransaction[],\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n minGasLimit: Optional<bigint>,\n progressCallback: GenerateTransactionsProgressCallback,\n): Promise<void> => {\n try {\n setCachedProvedTransaction(undefined);\n\n const validCrossContractCalls =\n createValidCrossContractCalls(crossContractCalls);\n\n const relayAdaptDecryptERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptDecryptERC20AmountRecipients(\n txidVersion,\n networkName,\n relayAdaptDecryptERC20Amounts,\n );\n const relayAdaptDecryptNFTAmountRecipients: DopNFTAmountRecipient[] =\n createRelayAdaptDecryptNFTAmountRecipients(\n txidVersion,\n networkName,\n relayAdaptDecryptNFTAmounts,\n );\n\n // Generate dummy txs for relay adapt params.\n const dummyDecryptTxs = await generateDummyProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptDecryptERC20AmountRecipients,\n relayAdaptDecryptNFTAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n );\n\n // Generate relay adapt params from dummy transactions.\n const encryptRandom = ByteUtils.randomHex(16);\n\n const relayEncryptRequests =\n await RelayAdaptHelper.generateRelayEncryptRequests(\n encryptRandom,\n relayAdaptEncryptERC20Recipients,\n createRelayAdaptEncryptNFTRecipients(relayAdaptEncryptNFTRecipients),\n );\n\n // TODO-V3: Needs modification\n const minimumGasLimit =\n minGasLimit ?? MINIMUM_RELAY_ADAPT_CROSS_CONTRACT_CALLS_GAS_LIMIT_V2;\n\n const { chain } = NETWORK_CONFIG[networkName];\n\n const isBroadcasterTransaction = !sendWithPublicWallet;\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n const relayAdaptParams =\n await RelayAdaptVersionedSmartContracts.getRelayAdaptParamsCrossContractCalls(\n txidVersion,\n chain,\n dummyDecryptTxs,\n validCrossContractCalls,\n relayEncryptRequests,\n relayAdaptParamsRandom,\n isBroadcasterTransaction,\n minimumGasLimit,\n );\n const relayAdaptContract =\n RelayAdaptVersionedSmartContracts.getRelayAdaptContract(\n txidVersion,\n chain,\n );\n const relayAdaptID: AdaptID = {\n contract: relayAdaptContract.address,\n parameters: relayAdaptParams,\n };\n\n // Create real transactions with relay adapt params.\n const { provedTransactions } =\n await generateProofTransactions(\n ProofType.CrossContractCalls,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptDecryptERC20AmountRecipients,\n relayAdaptDecryptNFTAmountRecipients,\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n relayAdaptID,\n false, // useDummyProof\n overallBatchMinGasPrice,\n progressCallback,\n );\n\n const nullifiers = nullifiersForTransactions(provedTransactions);\n\n const transaction =\n await RelayAdaptVersionedSmartContracts.populateCrossContractCalls(\n txidVersion,\n chain,\n provedTransactions,\n validCrossContractCalls,\n relayEncryptRequests,\n relayAdaptParamsRandom,\n false, // isGasEstimate\n isBroadcasterTransaction,\n minimumGasLimit,\n );\n delete transaction.from;\n\n setCachedProvedTransaction({\n proofType: ProofType.CrossContractCalls,\n txidVersion,\n dopWalletID,\n showSenderAddressToRecipient: false,\n memoText: undefined,\n erc20AmountRecipients: [],\n nftAmountRecipients: [],\n relayAdaptDecryptERC20Amounts,\n relayAdaptDecryptNFTAmounts,\n relayAdaptEncryptERC20Recipients,\n relayAdaptEncryptNFTRecipients,\n crossContractCalls: validCrossContractCalls,\n broadcasterFeeERC20AmountRecipient,\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 txidVersion: TXIDVersion,\n receiptLogs: TransactionReceiptLog[],\n // receiptLogs: TransactionReceiptLog[] | readonly Log[],\n): Optional<string> => {\n try {\n const relayAdaptError =\n RelayAdaptVersionedSmartContracts.getRelayAdaptCallError(\n txidVersion,\n receiptLogs,\n );\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 = (\n txidVersion: TXIDVersion,\n data: string,\n): Optional<string> => {\n try {\n const relayAdaptErrorParsed =\n RelayAdaptVersionedSmartContracts.parseRelayAdaptReturnValue(\n txidVersion,\n data,\n );\n if (isDefined(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 { DopPopulateTransactionResponse, DopTransactionGasEstimateResponse, DopERC20Amount, NetworkName, FeeTokenDetails, DopERC20AmountRecipient, DopNFTAmountRecipient, TransactionGasDetails, TXIDVersion } from 'dop-sharedmodels-v5';
1
+ import { DopPopulateTransactionResponse, DopTransactionGasEstimateResponse, DopERC20Amount, NetworkName, FeeTokenDetails, DopERC20AmountRecipient, DopNFTAmountRecipient, TransactionGasDetails, TXIDVersion } from 'dop-sharedmodels-v3';
2
2
  export declare const populateProvedDecrypt: (txidVersion: TXIDVersion, networkName: NetworkName, dopWalletID: string, erc20AmountRecipients: DopERC20AmountRecipient[], nftAmountRecipients: DopNFTAmountRecipient[], broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<DopPopulateTransactionResponse>;
3
3
  export declare const populateProvedDecryptBaseToken: (txidVersion: TXIDVersion, networkName: NetworkName, publicWalletAddress: string, dopWalletID: string, wrappedERC20Amount: DopERC20Amount, broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>, sendWithPublicWallet: boolean, overallBatchMinGasPrice: Optional<bigint>, gasDetails: TransactionGasDetails) => Promise<DopPopulateTransactionResponse>;
4
4
  export declare const gasEstimateForUnprovenDecrypt: (txidVersion: TXIDVersion, networkName: NetworkName, dopWalletID: string, encryptionKey: string, erc20AmountRecipients: DopERC20AmountRecipient[], nftAmountRecipients: DopNFTAmountRecipient[], originalGasDetails: TransactionGasDetails, feeTokenDetails: Optional<FeeTokenDetails>, sendWithPublicWallet: boolean, value: bigint) => Promise<DopTransactionGasEstimateResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"tx-decrypt.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-decrypt.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopPopulateTransactionResponse,\n DopTransactionGasEstimateResponse,\n DopERC20Amount,\n NetworkName,\n ProofType,\n FeeTokenDetails,\n DopERC20AmountRecipient,\n DopNFTAmountRecipient,\n TransactionGasDetails,\n TXIDVersion,\n NETWORK_CONFIG,\n} from 'dop-sharedmodels-v5';\nimport {\n DUMMY_FROM_ADDRESS,\n generateDummyProofTransactions,\n generateTransact,\n generateDecryptBaseToken,\n} from './tx-generator';\nimport { populateProvedTransaction } from './proof-cache';\nimport {\n ByteUtils,\n TransactionStructV2,\n TransactionStructV3,\n} from 'dop-engine-v5';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { createRelayAdaptDecryptERC20AmountRecipients } from './tx-cross-contract-calls';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { gasEstimateResponse, getGasEstimate } from './tx-gas-details';\nimport {\n walletForID,\n getFallbackProviderForNetwork,\n getSerializedERC20Balances,\n getSerializedNFTBalances,\n} from '../dop';\n\nexport const populateProvedDecrypt = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n txidVersion,\n networkName,\n ProofType.Decrypt,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptDecryptERC20AmountRecipients\n undefined, // relayAdaptDecryptNFTAmounts\n undefined, // relayAdaptEncryptERC20Recipients\n undefined, // relayAdaptEncryptNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedDecrypt.name, err);\n }\n};\n\nexport const populateProvedDecryptBaseToken = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n publicWalletAddress: string,\n dopWalletID: string,\n wrappedERC20Amount: DopERC20Amount,\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const erc20AmountRecipients: DopERC20AmountRecipient[] = [\n {\n ...wrappedERC20Amount,\n recipientAddress: publicWalletAddress,\n },\n ];\n const relayAdaptDecryptERC20Amounts: DopERC20Amount[] = [\n wrappedERC20Amount,\n ];\n\n // Empty NFT Recipients.\n const nftAmountRecipients: DopNFTAmountRecipient[] = [];\n\n const { transaction, nullifiers, } =\n await populateProvedTransaction(\n txidVersion,\n networkName,\n ProofType.DecryptBaseToken,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptDecryptERC20Amounts,\n undefined, // relayAdaptDecryptNFTAmounts\n undefined, // relayAdaptEncryptERC20Recipients\n undefined, // relayAdaptEncryptNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedDecryptBaseToken.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenDecrypt = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n value: bigint,\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.Decrypt,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: (TransactionStructV2 | TransactionStructV3)[]) =>\n generateTransact(\n txidVersion,\n txs,\n networkName,\n value,\n true, // useDummyProof\n ),\n txidVersion,\n networkName,\n dopWalletID,\n erc20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForUnprovenDecrypt.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenDecryptBaseToken = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n publicWalletAddress: string,\n dopWalletID: string,\n encryptionKey: string,\n wrappedERC20Amount: DopERC20Amount,\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n const relayAdaptDecryptERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptDecryptERC20AmountRecipients(txidVersion, networkName, [\n wrappedERC20Amount,\n ]);\n\n // Empty NFT Recipients.\n const nftAmountRecipients: DopNFTAmountRecipient[] = [];\n\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.DecryptBaseToken,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptDecryptERC20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: (TransactionStructV2 | TransactionStructV3)[]) => {\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n return generateDecryptBaseToken(\n txidVersion,\n txs,\n networkName,\n publicWalletAddress,\n relayAdaptParamsRandom,\n true, // useDummyProof\n );\n },\n txidVersion,\n networkName,\n dopWalletID,\n relayAdaptDecryptERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenDecryptBaseToken.name,\n err,\n );\n }\n};\n\nexport const getERC20AndNFTAmountRecipientsForDecryptToOrigin = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n originalEncryptTxid: string,\n): Promise<{\n erc20AmountRecipients: DopERC20AmountRecipient[];\n nftAmountRecipients: DopNFTAmountRecipient[];\n}> => {\n const wallet = walletForID(dopWalletID);\n const chain = NETWORK_CONFIG[networkName].chain;\n\n const balances = await wallet.getTokenBalancesForDecryptToOrigin(\n txidVersion,\n chain,\n originalEncryptTxid,\n );\n\n const provider = getFallbackProviderForNetwork(networkName);\n const transaction = await provider.getTransaction(originalEncryptTxid);\n if (!transaction) {\n throw new Error('Could not find encrypt transaction from RPC');\n }\n\n const recipientAddress = transaction.from;\n const erc20Amounts = getSerializedERC20Balances(balances);\n const nftAmounts = getSerializedNFTBalances(balances);\n const erc20AmountRecipients: DopERC20AmountRecipient[] = erc20Amounts\n .filter(({ amount }) => amount > 0n)\n .map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress,\n }));\n const nftAmountRecipients: DopNFTAmountRecipient[] = nftAmounts\n .filter(({ amount }) => amount > 0n)\n .map(nftAmount => ({\n ...nftAmount,\n recipientAddress,\n }));\n return { erc20AmountRecipients, nftAmountRecipients };\n};\n\nexport const populateProvedDecryptToOrigin = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers, } =\n await populateProvedTransaction(\n txidVersion,\n networkName,\n ProofType.Decrypt,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptDecryptERC20AmountRecipients\n undefined, // relayAdaptDecryptNFTAmounts\n undefined, // relayAdaptEncryptERC20Recipients\n undefined, // relayAdaptEncryptNFTRecipients\n undefined, // crossContractCalls\n undefined, // broadcasterFeeERC20AmountRecipient\n true, // sendWithPublicWallet\n undefined, // overallBatchMinGasPrice\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedDecryptToOrigin.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenDecryptToOrigin = async (\n originalEncryptTxid: string,\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n value: bigint,\n nftAmountRecipients: DopNFTAmountRecipient[],\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n // Use dead address for private transaction gas estimate\n const fromWalletAddress = DUMMY_FROM_ADDRESS;\n\n const overallBatchMinGasPrice = 0n;\n\n const serializedTransactions = await generateDummyProofTransactions(\n ProofType.Decrypt,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // broadcasterFeeERC20Amount\n true, // sendWithPublicWallet\n overallBatchMinGasPrice,\n originalEncryptTxid, // originEncryptTxidForSpendabilityOverride\n );\n const transaction = await generateTransact(\n txidVersion,\n serializedTransactions,\n networkName,\n value,\n true, // useDummyProof\n );\n\n const gasEstimate = await getGasEstimate(\n txidVersion,\n networkName,\n transaction,\n fromWalletAddress,\n true, // sendWithPublicWallet\n false, // isCrossContractCall\n );\n\n return gasEstimateResponse(\n gasEstimate,\n undefined, // broadcasterFeeCommitment\n true, // isGasEstimateWithDummyProof\n );\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenDecryptToOrigin.name,\n err,\n );\n }\n};\n"]}
1
+ {"version":3,"file":"tx-decrypt.js","sourceRoot":"","sources":["../../../src/services/transactions/tx-decrypt.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DopPopulateTransactionResponse,\n DopTransactionGasEstimateResponse,\n DopERC20Amount,\n NetworkName,\n ProofType,\n FeeTokenDetails,\n DopERC20AmountRecipient,\n DopNFTAmountRecipient,\n TransactionGasDetails,\n TXIDVersion,\n NETWORK_CONFIG,\n} from 'dop-sharedmodels-v3';\nimport {\n DUMMY_FROM_ADDRESS,\n generateDummyProofTransactions,\n generateTransact,\n generateDecryptBaseToken,\n} from './tx-generator';\nimport { populateProvedTransaction } from './proof-cache';\nimport {\n ByteUtils,\n TransactionStructV2,\n TransactionStructV3,\n} from 'dop-engine-v3';\nimport { gasEstimateResponseDummyProofIterativeBroadcasterFee } from './tx-gas-broadcaster-fee-estimator';\nimport { createRelayAdaptDecryptERC20AmountRecipients } from './tx-cross-contract-calls';\nimport { reportAndSanitizeError } from '../../utils/error';\nimport { gasEstimateResponse, getGasEstimate } from './tx-gas-details';\nimport {\n walletForID,\n getFallbackProviderForNetwork,\n getSerializedERC20Balances,\n getSerializedNFTBalances,\n} from '../dop';\n\nexport const populateProvedDecrypt = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers } =\n await populateProvedTransaction(\n txidVersion,\n networkName,\n ProofType.Decrypt,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptDecryptERC20AmountRecipients\n undefined, // relayAdaptDecryptNFTAmounts\n undefined, // relayAdaptEncryptERC20Recipients\n undefined, // relayAdaptEncryptNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedDecrypt.name, err);\n }\n};\n\nexport const populateProvedDecryptBaseToken = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n publicWalletAddress: string,\n dopWalletID: string,\n wrappedERC20Amount: DopERC20Amount,\n broadcasterFeeERC20AmountRecipient: Optional<DopERC20AmountRecipient>,\n sendWithPublicWallet: boolean,\n overallBatchMinGasPrice: Optional<bigint>,\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const erc20AmountRecipients: DopERC20AmountRecipient[] = [\n {\n ...wrappedERC20Amount,\n recipientAddress: publicWalletAddress,\n },\n ];\n const relayAdaptDecryptERC20Amounts: DopERC20Amount[] = [\n wrappedERC20Amount,\n ];\n\n // Empty NFT Recipients.\n const nftAmountRecipients: DopNFTAmountRecipient[] = [];\n\n const { transaction, nullifiers, } =\n await populateProvedTransaction(\n txidVersion,\n networkName,\n ProofType.DecryptBaseToken,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n relayAdaptDecryptERC20Amounts,\n undefined, // relayAdaptDecryptNFTAmounts\n undefined, // relayAdaptEncryptERC20Recipients\n undefined, // relayAdaptEncryptNFTRecipients\n undefined, // crossContractCalls\n broadcasterFeeERC20AmountRecipient,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedDecryptBaseToken.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenDecrypt = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n value: bigint,\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.Decrypt,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: (TransactionStructV2 | TransactionStructV3)[]) =>\n generateTransact(\n txidVersion,\n txs,\n networkName,\n value,\n true, // useDummyProof\n ),\n txidVersion,\n networkName,\n dopWalletID,\n erc20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(gasEstimateForUnprovenDecrypt.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenDecryptBaseToken = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n publicWalletAddress: string,\n dopWalletID: string,\n encryptionKey: string,\n wrappedERC20Amount: DopERC20Amount,\n originalGasDetails: TransactionGasDetails,\n feeTokenDetails: Optional<FeeTokenDetails>,\n sendWithPublicWallet: boolean,\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n const relayAdaptDecryptERC20AmountRecipients: DopERC20AmountRecipient[] =\n createRelayAdaptDecryptERC20AmountRecipients(txidVersion, networkName, [\n wrappedERC20Amount,\n ]);\n\n // Empty NFT Recipients.\n const nftAmountRecipients: DopNFTAmountRecipient[] = [];\n\n const overallBatchMinGasPrice = 0n;\n\n const response = await gasEstimateResponseDummyProofIterativeBroadcasterFee(\n (broadcasterFeeERC20Amount: Optional<DopERC20Amount>) =>\n generateDummyProofTransactions(\n ProofType.DecryptBaseToken,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n relayAdaptDecryptERC20AmountRecipients,\n nftAmountRecipients,\n broadcasterFeeERC20Amount,\n sendWithPublicWallet,\n overallBatchMinGasPrice,\n ),\n (txs: (TransactionStructV2 | TransactionStructV3)[]) => {\n const relayAdaptParamsRandom = ByteUtils.randomHex(31);\n return generateDecryptBaseToken(\n txidVersion,\n txs,\n networkName,\n publicWalletAddress,\n relayAdaptParamsRandom,\n true, // useDummyProof\n );\n },\n txidVersion,\n networkName,\n dopWalletID,\n relayAdaptDecryptERC20AmountRecipients,\n originalGasDetails,\n feeTokenDetails,\n sendWithPublicWallet,\n false, // isCrossContractCall\n );\n return response;\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenDecryptBaseToken.name,\n err,\n );\n }\n};\n\nexport const getERC20AndNFTAmountRecipientsForDecryptToOrigin = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n originalEncryptTxid: string,\n): Promise<{\n erc20AmountRecipients: DopERC20AmountRecipient[];\n nftAmountRecipients: DopNFTAmountRecipient[];\n}> => {\n const wallet = walletForID(dopWalletID);\n const chain = NETWORK_CONFIG[networkName].chain;\n\n const balances = await wallet.getTokenBalancesForDecryptToOrigin(\n txidVersion,\n chain,\n originalEncryptTxid,\n );\n\n const provider = getFallbackProviderForNetwork(networkName);\n const transaction = await provider.getTransaction(originalEncryptTxid);\n if (!transaction) {\n throw new Error('Could not find encrypt transaction from RPC');\n }\n\n const recipientAddress = transaction.from;\n const erc20Amounts = getSerializedERC20Balances(balances);\n const nftAmounts = getSerializedNFTBalances(balances);\n const erc20AmountRecipients: DopERC20AmountRecipient[] = erc20Amounts\n .filter(({ amount }) => amount > 0n)\n .map(erc20Amount => ({\n ...erc20Amount,\n recipientAddress,\n }));\n const nftAmountRecipients: DopNFTAmountRecipient[] = nftAmounts\n .filter(({ amount }) => amount > 0n)\n .map(nftAmount => ({\n ...nftAmount,\n recipientAddress,\n }));\n return { erc20AmountRecipients, nftAmountRecipients };\n};\n\nexport const populateProvedDecryptToOrigin = async (\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n nftAmountRecipients: DopNFTAmountRecipient[],\n gasDetails: TransactionGasDetails,\n): Promise<DopPopulateTransactionResponse> => {\n try {\n const { transaction, nullifiers, } =\n await populateProvedTransaction(\n txidVersion,\n networkName,\n ProofType.Decrypt,\n dopWalletID,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // relayAdaptDecryptERC20AmountRecipients\n undefined, // relayAdaptDecryptNFTAmounts\n undefined, // relayAdaptEncryptERC20Recipients\n undefined, // relayAdaptEncryptNFTRecipients\n undefined, // crossContractCalls\n undefined, // broadcasterFeeERC20AmountRecipient\n true, // sendWithPublicWallet\n undefined, // overallBatchMinGasPrice\n gasDetails,\n );\n return {\n nullifiers,\n transaction,\n };\n } catch (err) {\n throw reportAndSanitizeError(populateProvedDecryptToOrigin.name, err);\n }\n};\n\nexport const gasEstimateForUnprovenDecryptToOrigin = async (\n originalEncryptTxid: string,\n txidVersion: TXIDVersion,\n networkName: NetworkName,\n dopWalletID: string,\n encryptionKey: string,\n erc20AmountRecipients: DopERC20AmountRecipient[],\n value: bigint,\n nftAmountRecipients: DopNFTAmountRecipient[],\n): Promise<DopTransactionGasEstimateResponse> => {\n try {\n // Use dead address for private transaction gas estimate\n const fromWalletAddress = DUMMY_FROM_ADDRESS;\n\n const overallBatchMinGasPrice = 0n;\n\n const serializedTransactions = await generateDummyProofTransactions(\n ProofType.Decrypt,\n networkName,\n dopWalletID,\n txidVersion,\n encryptionKey,\n false, // showSenderAddressToRecipient\n undefined, // memoText\n erc20AmountRecipients,\n nftAmountRecipients,\n undefined, // broadcasterFeeERC20Amount\n true, // sendWithPublicWallet\n overallBatchMinGasPrice,\n originalEncryptTxid, // originEncryptTxidForSpendabilityOverride\n );\n const transaction = await generateTransact(\n txidVersion,\n serializedTransactions,\n networkName,\n value,\n true, // useDummyProof\n );\n\n const gasEstimate = await getGasEstimate(\n txidVersion,\n networkName,\n transaction,\n fromWalletAddress,\n true, // sendWithPublicWallet\n false, // isCrossContractCall\n );\n\n return gasEstimateResponse(\n gasEstimate,\n undefined, // broadcasterFeeCommitment\n true, // isGasEstimateWithDummyProof\n );\n } catch (err) {\n throw reportAndSanitizeError(\n gasEstimateForUnprovenDecryptToOrigin.name,\n err,\n );\n }\n};\n"]}
@@ -1,3 +1,3 @@
1
- import { DopPopulateTransactionResponse, DopTransactionGasEstimateResponse, DopERC20Amount, NetworkName, TransactionGasDetails, TXIDVersion } from 'dop-sharedmodels-v5';
1
+ import { DopPopulateTransactionResponse, DopTransactionGasEstimateResponse, DopERC20Amount, NetworkName, TransactionGasDetails, TXIDVersion } from 'dop-sharedmodels-v3';
2
2
  export declare const populateEncryptBaseToken: (txidVersion: TXIDVersion, networkName: NetworkName, dopAddress: string, encryptPrivateKey: string, wrappedERC20Amount: DopERC20Amount, fromWalletAddress: string, gasDetails?: TransactionGasDetails) => Promise<DopPopulateTransactionResponse>;
3
3
  export declare const gasEstimateForEncryptBaseToken: (txidVersion: TXIDVersion, networkName: NetworkName, dopAddress: string, encryptPrivateKey: string, wrappedERC20Amount: DopERC20Amount, fromWalletAddress: string) => Promise<DopTransactionGasEstimateResponse>;