@coti-io/coti-contracts 1.2.0 → 1.3.1

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 (481) hide show
  1. package/.github/workflows/npm-publish.yml +1 -1
  2. package/contracts/access/DataPrivacyFramework/DataPrivacyFramework.sol +1 -1
  3. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +1 -1
  4. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +2 -4
  5. package/contracts/disperse/disperseToken/MintDisperser.sol +1 -3
  6. package/contracts/disperse/disperseToken/TokenDisperser.sol +1 -1
  7. package/contracts/messaging/PrivateMessaging.sol +456 -0
  8. package/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.sol +1 -1
  9. package/contracts/mocks/messaging/PrivateMessagingHarness.sol +54 -0
  10. package/contracts/mocks/oracle/CotiPriceConsumerMock.sol +31 -0
  11. package/contracts/mocks/token/ERC20DecimalsMock.sol +21 -0
  12. package/contracts/mocks/token/ERC20Mock.sol +1 -1
  13. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +1 -1
  14. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +9 -4
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +1 -1
  16. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +1 -1
  17. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +1 -1
  18. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +1 -1
  19. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +1 -1
  20. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +1 -1
  21. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +1 -1
  22. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +1 -1
  23. package/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.sol +1 -1
  24. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +1 -1
  25. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +1 -1
  26. package/contracts/mocks/utils/mpc/ArithmeticAddTestsContract.sol +196 -0
  27. package/contracts/mocks/utils/mpc/ArithmeticMulTestsContract.sol +194 -0
  28. package/contracts/mocks/utils/mpc/ArithmeticSigned128TestsContract.sol +63 -0
  29. package/contracts/mocks/utils/mpc/ArithmeticSigned256TestsContract.sol +107 -0
  30. package/contracts/mocks/utils/mpc/ArithmeticSignedNarrowTestsContract.sol +123 -0
  31. package/contracts/mocks/utils/mpc/ArithmeticSubTestsContract.sol +196 -0
  32. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +1 -1
  33. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +1 -1
  34. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +1 -1
  35. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +1 -1
  36. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +1 -1
  37. package/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol +1 -1
  38. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +1 -1
  39. package/contracts/mocks/utils/mpc/Comparison1TestsContract.sol +1 -1
  40. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +1 -1
  41. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +1 -1
  42. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +1 -1
  43. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +1 -1
  44. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +1 -1
  45. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +1 -1
  46. package/contracts/mocks/utils/mpc/MinimalProxy.sol +1 -1
  47. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +1 -1
  48. package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +1 -1
  49. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +1 -1
  50. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +4 -4
  51. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +1 -1
  52. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +1 -1
  53. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +1 -1
  54. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +1 -1
  55. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +1 -1
  56. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +1 -1
  57. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +1 -1
  58. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +1 -1
  59. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +1 -1
  60. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +1 -1
  61. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +1 -1
  62. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +1 -1
  63. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +1 -1
  64. package/contracts/mocks/utils/mpc/StringTestsContract.sol +1 -1
  65. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +1 -1
  66. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +1 -1
  67. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +1 -1
  68. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +1 -1
  69. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +1 -1
  70. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +1 -1
  71. package/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.sol +1 -1
  72. package/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.sol +1 -1
  73. package/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol +1 -1
  74. package/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.sol +1 -1
  75. package/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.sol +1 -1
  76. package/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol +1 -1
  77. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +1 -1
  78. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +2 -2
  79. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +1 -1
  80. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +1 -1
  81. package/contracts/node/CotiNodeRewards.sol +3 -3
  82. package/contracts/node/SoulboundNodeNFT.sol +23 -24
  83. package/contracts/onboard/AccountOnboard.sol +1 -1
  84. package/contracts/oracle/CotiPriceConsumer.sol +103 -0
  85. package/contracts/oracle/ICotiPriceConsumer.sol +15 -0
  86. package/contracts/oracle/IStdReference.sol +26 -0
  87. package/contracts/pod/IInbox.sol +231 -0
  88. package/contracts/pod/IInboxMiner.sol +53 -0
  89. package/contracts/pod/InboxUser.sol +29 -0
  90. package/contracts/pod/InboxUserCotiTestnet.sol +13 -0
  91. package/contracts/pod/PodNetworkConstants.sol +30 -0
  92. package/contracts/pod/examples/MpcAdder.sol +57 -0
  93. package/contracts/pod/examples/MpcAdderPausable.sol +25 -0
  94. package/contracts/pod/examples/MpcAdderPausable.sol.bak +25 -0
  95. package/contracts/pod/examples/it128/PodAdder128.sol +48 -0
  96. package/contracts/pod/examples/it256/PodAdder256.sol +48 -0
  97. package/contracts/pod/fee/IInboxFeeManager.sol +40 -0
  98. package/contracts/pod/manifest.json +52 -0
  99. package/contracts/pod/mpc/PodLib.sol +10 -0
  100. package/contracts/pod/mpc/PodLib128.sol +361 -0
  101. package/contracts/pod/mpc/PodLib256.sol +361 -0
  102. package/contracts/pod/mpc/PodLib64.sol +385 -0
  103. package/contracts/pod/mpc/PodLibBase.sol +72 -0
  104. package/contracts/pod/mpc/PodUser.sol +58 -0
  105. package/contracts/pod/mpc/PodUserFuji.sol +14 -0
  106. package/contracts/pod/mpc/PodUserSepolia.sol +13 -0
  107. package/contracts/pod/mpc/coti-side/IPodExecutorOps.sol +99 -0
  108. package/contracts/pod/mpccodec/MpcAbiCodec.sol +482 -0
  109. package/contracts/pod/privacy/IPodPriceOracle.sol +20 -0
  110. package/contracts/pod/privacy/IPrivacyPortal.sol +248 -0
  111. package/contracts/pod/privacy/IPrivacyPortalFactory.sol +88 -0
  112. package/contracts/pod/privacy/PortalFeeOracle.sol +51 -0
  113. package/contracts/pod/privacy/PrivacyPortal.sol +871 -0
  114. package/contracts/pod/privacy/PrivacyPortalFactory.sol +492 -0
  115. package/contracts/pod/privacy/PrivacyPortalFeeLib.sol +98 -0
  116. package/contracts/pod/privacy/mocks/CloneHelper.sol +14 -0
  117. package/contracts/pod/privacy/mocks/MockERC20.sol +26 -0
  118. package/contracts/pod/privacy/mocks/MockPodERC20ForPortal.sol +160 -0
  119. package/contracts/pod/privacy/mocks/MockPrivacyPortalFactory.sol +125 -0
  120. package/contracts/pod/privacy/mocks/MockWrappedNative.sol +24 -0
  121. package/contracts/pod/token/erc7984/Erc7984Constants.sol +9 -0
  122. package/contracts/pod/token/erc7984/Erc7984Pointers.sol +29 -0
  123. package/contracts/pod/token/erc7984/IERC7984.sol +69 -0
  124. package/contracts/pod/token/erc7984/IERC7984PortalWrapper.sol +31 -0
  125. package/contracts/pod/token/erc7984/PodErc7984Mixin.sol +125 -0
  126. package/contracts/pod/token/erc7984/README.md +60 -0
  127. package/contracts/pod/token/perc20/IPodERC20.sol +298 -0
  128. package/contracts/pod/token/perc20/PodERC20.sol +1021 -0
  129. package/contracts/pod/token/perc20/PodErc20Mintable.sol +88 -0
  130. package/contracts/pod/token/perc20/PodErc20MintableInitializable.sol +42 -0
  131. package/contracts/pod/token/perc20/cotiside/IPodErc20CotiSide.sol +88 -0
  132. package/contracts/pod/token/perc20/cotiside/PodErc20CotiMother.sol +529 -0
  133. package/contracts/pod/utils/IWrappedNative.sol +11 -0
  134. package/contracts/privacyBridge/PrivacyBridge.sol +376 -94
  135. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +210 -162
  136. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +242 -160
  137. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +8 -2
  138. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +8 -2
  139. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +8 -2
  140. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +8 -2
  141. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +8 -2
  142. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +8 -2
  143. package/contracts/token/PrivateERC20/IPrivateERC20.sol +1 -1
  144. package/contracts/token/PrivateERC20/ITokenReceiver.sol +1 -1
  145. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +1 -1
  146. package/contracts/token/PrivateERC20/PrivateERC20.sol +5 -5
  147. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +1 -1
  148. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +1 -1
  149. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +1 -1
  150. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +1 -1
  151. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +1 -1
  152. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +1 -1
  153. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +1 -1
  154. package/contracts/token/PrivateERC721/IERC721Errors.sol +1 -1
  155. package/contracts/token/PrivateERC721/PrivateERC721.sol +1 -1
  156. package/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage.sol +1 -1
  157. package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +1 -1
  158. package/contracts/token/points/CotiTokenPoints004.sol +43 -0
  159. package/contracts/utils/mpc/MpcCore.sol +610 -1
  160. package/contracts/utils/mpc/MpcInterface.sol +1 -1
  161. package/hardhat.config.ts +9 -15
  162. package/package.json +4 -4
  163. package/scripts/add-bridge-operators.cjs +87 -0
  164. package/scripts/deploy-coti-price-consumer-mainnet.cjs +49 -0
  165. package/scripts/deployCotiNodeRewards.ts +51 -0
  166. package/scripts/deployCotiTokenPoints004.ts +61 -0
  167. package/scripts/deployFixedRatioCoinDisperserUnlimitedWindow.ts +68 -0
  168. package/scripts/redeploy-private-and-bridges.cjs +201 -0
  169. package/scripts/set-bridge-limits-mainnet.cjs +177 -0
  170. package/scripts/verify-mainnet-private-bridges.cjs +289 -0
  171. package/scripts/verifyCotiTokenPoints004.ts +123 -0
  172. package/scripts/verifyFixedRatioCoinDisperserUnlimitedWindow.ts +112 -0
  173. package/sonar-project.properties +11 -0
  174. package/test/messaging/PrivateMessaging.test.ts +158 -0
  175. package/test/pod/privacy/PrivacyPortal.access.test.ts +756 -0
  176. package/test/pod/privacy/PrivacyPortal.recovery.test.ts +263 -0
  177. package/test/privacyBridge/UnifiedPrivacyBridges.test.cjs +1665 -0
  178. package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +162 -239
  179. package/test/utils/mpc/CheckedSignedArithmetic256.test.ts +163 -0
  180. package/test/utils/mpc/NegativeCases.test.ts +3 -3
  181. package/test/utils/mpc/Precompile.test.ts +6 -6
  182. package/typechain-types/@openzeppelin/contracts/access/AccessControl.ts +324 -0
  183. package/typechain-types/@openzeppelin/contracts/access/AccessControlEnumerable.ts +361 -0
  184. package/typechain-types/@openzeppelin/contracts/access/IAccessControl.ts +292 -0
  185. package/typechain-types/@openzeppelin/contracts/access/IAccessControlEnumerable.ts +329 -0
  186. package/typechain-types/@openzeppelin/contracts/access/extensions/AccessControlEnumerable.ts +375 -0
  187. package/typechain-types/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable.ts +329 -0
  188. package/typechain-types/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  189. package/typechain-types/@openzeppelin/contracts/access/index.ts +6 -0
  190. package/typechain-types/@openzeppelin/contracts/index.ts +2 -0
  191. package/typechain-types/@openzeppelin/contracts/interfaces/IERC1363.ts +412 -0
  192. package/typechain-types/@openzeppelin/contracts/interfaces/IERC5267.ts +151 -0
  193. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.ts +69 -0
  194. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.ts +69 -0
  195. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.ts +69 -0
  196. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  197. package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +4 -0
  198. package/typechain-types/@openzeppelin/contracts/security/Pausable.ts +150 -0
  199. package/typechain-types/@openzeppelin/contracts/security/index.ts +4 -0
  200. package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +286 -0
  201. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +6 -6
  202. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.ts +313 -0
  203. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.ts +356 -0
  204. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.ts +423 -0
  205. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +286 -0
  206. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  207. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +3 -0
  208. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.ts +69 -0
  209. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  210. package/typechain-types/@openzeppelin/contracts/token/ERC721/ERC721.ts +420 -0
  211. package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.ts +420 -0
  212. package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
  213. package/typechain-types/@openzeppelin/contracts/token/ERC721/index.ts +3 -0
  214. package/typechain-types/@openzeppelin/contracts/utils/Nonces.ts +85 -0
  215. package/typechain-types/@openzeppelin/contracts/utils/Pausable.ts +150 -0
  216. package/typechain-types/@openzeppelin/contracts/utils/ReentrancyGuard.ts +69 -0
  217. package/typechain-types/@openzeppelin/contracts/utils/ShortStrings.ts +69 -0
  218. package/typechain-types/@openzeppelin/contracts/utils/Strings.ts +69 -0
  219. package/typechain-types/@openzeppelin/contracts/utils/cryptography/ECDSA.ts +69 -0
  220. package/typechain-types/@openzeppelin/contracts/utils/cryptography/EIP712.ts +151 -0
  221. package/typechain-types/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  222. package/typechain-types/@openzeppelin/contracts/utils/index.ts +9 -0
  223. package/typechain-types/@openzeppelin/contracts/utils/math/SafeCast.ts +69 -0
  224. package/typechain-types/@openzeppelin/contracts/utils/math/index.ts +4 -0
  225. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.ts +735 -0
  226. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.ts +734 -0
  227. package/typechain-types/contracts/disperse/coinByRatio/index.ts +2 -0
  228. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable.ts +95 -0
  229. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +22 -0
  230. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +1 -0
  231. package/typechain-types/contracts/index.ts +8 -0
  232. package/typechain-types/contracts/messaging/PrivateMessaging.ts +871 -0
  233. package/typechain-types/contracts/messaging/index.ts +4 -0
  234. package/typechain-types/contracts/mocks/index.ts +4 -0
  235. package/typechain-types/contracts/mocks/messaging/PrivateMessagingHarness.ts +951 -0
  236. package/typechain-types/contracts/mocks/messaging/index.ts +4 -0
  237. package/typechain-types/contracts/mocks/oracle/CotiPriceConsumerMock.ts +163 -0
  238. package/typechain-types/contracts/mocks/oracle/index.ts +4 -0
  239. package/typechain-types/contracts/mocks/token/ERC20DecimalsMock.ts +305 -0
  240. package/typechain-types/contracts/mocks/token/ERC20Mock.ts +324 -0
  241. package/typechain-types/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.ts +108 -0
  242. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.ts +1906 -0
  243. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.ts +1296 -0
  244. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.ts +1270 -0
  245. package/typechain-types/contracts/mocks/{utils/mpc/Bitwise128BitTestsContract.ts → token/PrivateERC20/PrivateERC20GtCallerMock.ts} +47 -67
  246. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +757 -25
  247. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted.ts +102 -0
  248. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock.ts +154 -0
  249. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
  250. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.ts +155 -0
  251. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.ts +107 -0
  252. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.ts +100 -0
  253. package/typechain-types/contracts/mocks/token/PrivateERC20/index.ts +10 -0
  254. package/typechain-types/contracts/mocks/token/index.ts +2 -0
  255. package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.ts +6 -6
  256. package/typechain-types/contracts/node/CotiNodeRewards.ts +566 -0
  257. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/IERC5192.ts +123 -0
  258. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT.ts +975 -0
  259. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
  260. package/typechain-types/contracts/node/index.ts +6 -0
  261. package/typechain-types/contracts/oracle/CotiPriceConsumer.ts +256 -0
  262. package/typechain-types/contracts/oracle/ICotiPriceConsumer.ts +119 -0
  263. package/typechain-types/contracts/oracle/IStdReference.ts +136 -0
  264. package/typechain-types/contracts/oracle/index.ts +6 -0
  265. package/typechain-types/contracts/privacyBridge/PrivacyBridge.ts +1642 -0
  266. package/typechain-types/contracts/privacyBridge/PrivacyBridgeCotiNative.ts +1884 -0
  267. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals.ts +84 -0
  268. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20.ts +1906 -0
  269. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
  270. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDCe.ts +1906 -0
  271. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDT.ts +1906 -0
  272. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWADA.ts +1906 -0
  273. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWBTC.ts +1906 -0
  274. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWETH.ts +1906 -0
  275. package/typechain-types/contracts/privacyBridge/PrivacyBridgegCoti.ts +1906 -0
  276. package/typechain-types/contracts/privacyBridge/index.ts +13 -0
  277. package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +439 -19
  278. package/typechain-types/contracts/token/PrivateERC20/ITokenReceiver.ts +100 -0
  279. package/typechain-types/contracts/token/PrivateERC20/ITokenReceiverEncrypted.ts +99 -0
  280. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +763 -15
  281. package/typechain-types/contracts/token/PrivateERC20/index.ts +4 -0
  282. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.ts +1270 -0
  283. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTI.ts +1270 -0
  284. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.ts +1270 -0
  285. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.ts +1270 -0
  286. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.ts +1270 -0
  287. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.ts +1270 -0
  288. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.ts +1270 -0
  289. package/typechain-types/contracts/token/PrivateERC20/tokens/index.ts +10 -0
  290. package/typechain-types/contracts/token/index.ts +2 -0
  291. package/typechain-types/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004.ts +826 -0
  292. package/typechain-types/contracts/token/points/CotiTokenPoints004.ts +826 -0
  293. package/typechain-types/contracts/token/points/index.ts +4 -0
  294. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControlEnumerable__factory.ts +276 -0
  295. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControl__factory.ts +250 -0
  296. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControlEnumerable__factory.ts +244 -0
  297. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControl__factory.ts +218 -0
  298. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +22 -0
  299. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/AccessControlEnumerable__factory.ts +316 -0
  300. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable__factory.ts +265 -0
  301. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  302. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +5 -0
  303. package/typechain-types/factories/@openzeppelin/contracts/index.ts +1 -0
  304. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1363__factory.ts +393 -0
  305. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC5267__factory.ts +71 -0
  306. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors__factory.ts +127 -0
  307. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors__factory.ts +111 -0
  308. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors__factory.ts +128 -0
  309. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  310. package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +3 -0
  311. package/typechain-types/factories/@openzeppelin/contracts/security/Pausable__factory.ts +61 -0
  312. package/typechain-types/factories/@openzeppelin/contracts/security/index.ts +4 -0
  313. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +330 -0
  314. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +3 -3
  315. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable__factory.ts +364 -0
  316. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable__factory.ts +382 -0
  317. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit__factory.ts +540 -0
  318. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +247 -0
  319. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  320. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +2 -0
  321. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/SafeERC20__factory.ts +96 -0
  322. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  323. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +455 -0
  324. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata__factory.ts +355 -0
  325. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
  326. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/index.ts +2 -0
  327. package/typechain-types/factories/@openzeppelin/contracts/utils/Nonces__factory.ts +57 -0
  328. package/typechain-types/factories/@openzeppelin/contracts/utils/Pausable__factory.ts +71 -0
  329. package/typechain-types/factories/@openzeppelin/contracts/utils/ReentrancyGuard__factory.ts +30 -0
  330. package/typechain-types/factories/@openzeppelin/contracts/utils/ShortStrings__factory.ts +83 -0
  331. package/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.ts +90 -0
  332. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.ts +91 -0
  333. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/EIP712__factory.ts +87 -0
  334. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  335. package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +7 -0
  336. package/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.ts +118 -0
  337. package/typechain-types/factories/@openzeppelin/contracts/utils/math/index.ts +4 -0
  338. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1__factory.ts +802 -0
  339. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow__factory.ts +749 -0
  340. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +12 -1
  341. package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +2 -0
  342. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable__factory.ts +35 -0
  343. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +41 -1
  344. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +1 -0
  345. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +12 -1
  346. package/typechain-types/factories/contracts/index.ts +4 -0
  347. package/typechain-types/factories/contracts/messaging/PrivateMessaging__factory.ts +1035 -0
  348. package/typechain-types/factories/contracts/messaging/index.ts +4 -0
  349. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  350. package/typechain-types/factories/contracts/mocks/index.ts +2 -0
  351. package/typechain-types/factories/contracts/mocks/messaging/PrivateMessagingHarness__factory.ts +1161 -0
  352. package/typechain-types/factories/contracts/mocks/messaging/index.ts +4 -0
  353. package/typechain-types/factories/contracts/mocks/oracle/CotiPriceConsumerMock__factory.ts +159 -0
  354. package/typechain-types/factories/contracts/mocks/oracle/index.ts +4 -0
  355. package/typechain-types/factories/contracts/mocks/token/ERC20DecimalsMock__factory.ts +432 -0
  356. package/typechain-types/factories/contracts/mocks/token/ERC20Mock__factory.ts +430 -0
  357. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock__factory.ts +125 -0
  358. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock__factory.ts +1885 -0
  359. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock__factory.ts +1540 -0
  360. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock__factory.ts +1492 -0
  361. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock__factory.ts +165 -0
  362. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +794 -52
  363. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted__factory.ts +54 -0
  364. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock__factory.ts +159 -0
  365. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
  366. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock__factory.ts +164 -0
  367. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock__factory.ts +130 -0
  368. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock__factory.ts +102 -0
  369. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/index.ts +9 -0
  370. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  371. package/typechain-types/factories/contracts/mocks/token/index.ts +2 -0
  372. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +1 -1
  373. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +1 -1
  374. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  375. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +1 -1
  376. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +1 -1
  377. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  378. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +1 -1
  379. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +1 -1
  380. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  381. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +1 -1
  382. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  383. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +1 -1
  384. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  385. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +1 -1
  386. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +1 -1
  387. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  388. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +1 -1
  389. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +1 -1
  390. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  391. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  392. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +1 -1
  393. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1 -1
  394. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +1 -1
  395. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +1 -1
  396. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  397. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +1 -1
  398. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +1 -1
  399. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +1 -1
  400. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +1 -1
  401. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +1 -1
  402. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +1 -1
  403. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +1 -1
  404. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +1 -1
  405. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +1 -1
  406. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  407. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  408. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +1 -1
  409. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +1 -1
  410. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  411. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  412. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +1 -1
  413. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +1 -1
  414. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  415. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  416. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  417. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  418. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  419. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  420. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +1 -1
  421. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +1 -1
  422. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +1 -1
  423. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +4 -22
  424. package/typechain-types/factories/contracts/node/CotiNodeRewards__factory.ts +576 -0
  425. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/IERC5192__factory.ts +54 -0
  426. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT__factory.ts +1072 -0
  427. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
  428. package/typechain-types/factories/contracts/node/index.ts +5 -0
  429. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
  430. package/typechain-types/factories/contracts/oracle/CotiPriceConsumer__factory.ts +295 -0
  431. package/typechain-types/factories/contracts/oracle/ICotiPriceConsumer__factory.ts +73 -0
  432. package/typechain-types/factories/contracts/oracle/IStdReference__factory.ts +107 -0
  433. package/typechain-types/factories/contracts/oracle/index.ts +6 -0
  434. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeCotiNative__factory.ts +1753 -0
  435. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals__factory.ts +38 -0
  436. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20__factory.ts +1766 -0
  437. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
  438. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDCe__factory.ts +1870 -0
  439. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDT__factory.ts +1870 -0
  440. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWADA__factory.ts +1870 -0
  441. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWBTC__factory.ts +1870 -0
  442. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWETH__factory.ts +1870 -0
  443. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridge__factory.ts +1444 -0
  444. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgegCoti__factory.ts +1870 -0
  445. package/typechain-types/factories/contracts/privacyBridge/index.ts +12 -0
  446. package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +481 -35
  447. package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiverEncrypted__factory.ts +53 -0
  448. package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiver__factory.ts +54 -0
  449. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +812 -52
  450. package/typechain-types/factories/contracts/token/PrivateERC20/index.ts +3 -0
  451. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC__factory.ts +1471 -0
  452. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken__factory.ts +1477 -0
  453. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTI__factory.ts +1468 -0
  454. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateTetherUSD__factory.ts +1471 -0
  455. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedADA__factory.ts +1471 -0
  456. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC__factory.ts +1471 -0
  457. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedEther__factory.ts +1477 -0
  458. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/index.ts +10 -0
  459. package/typechain-types/factories/contracts/token/index.ts +1 -0
  460. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004__factory.ts +992 -0
  461. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004__factory.ts +992 -0
  462. package/typechain-types/factories/contracts/token/points/index.ts +4 -0
  463. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
  464. package/typechain-types/hardhat.d.ts +1414 -118
  465. package/typechain-types/index.ts +138 -2
  466. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +0 -408
  467. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.ts +0 -341
  468. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.ts +0 -347
  469. package/typechain-types/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.ts +0 -186
  470. package/typechain-types/contracts/mocks/utils/mpc/Comparison128BitTestsContract.ts +0 -260
  471. package/typechain-types/contracts/mocks/utils/mpc/Comparison256BitTestsContract.ts +0 -260
  472. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.ts +0 -302
  473. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.ts +0 -322
  474. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract__factory.ts +0 -349
  475. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract__factory.ts +0 -364
  476. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128BitTestsContract__factory.ts +0 -182
  477. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256BitTestsContract__factory.ts +0 -182
  478. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128BitTestsContract__factory.ts +0 -255
  479. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256BitTestsContract__factory.ts +0 -255
  480. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract__factory.ts +0 -332
  481. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract__factory.ts +0 -380
@@ -1,18 +1,30 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import "./PrivacyBridge.sol";
5
+ import "@openzeppelin/contracts/utils/math/Math.sol";
5
6
  import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
6
7
  import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
7
8
  import "../token/PrivateERC20/IPrivateERC20.sol";
8
- import "../utils/mpc/MpcCore.sol";
9
+
10
+ /// @dev Minimal interface to read decimals from tokens without modifying IPrivateERC20
11
+ interface IHasDecimals {
12
+ function decimals() external view returns (uint8);
13
+ }
9
14
 
10
15
  /**
11
16
  * @dev Abstract base contract for ERC20 Token Privacy Bridges
12
17
  * @dev Handles the logic for bridging ERC20 tokens to their private counterparts.
13
- * @dev The public ERC20 token must be standard (no fee-on-transfer, no rebasing); same decimals as private token.
18
+ * @dev The public ERC20 must match standard transfer semantics: {safeTransferFrom} of `amount` must
19
+ * increase the bridge balance by exactly `amount` ({UnexpectedTransferBalance} otherwise). This
20
+ * rejects common fee-on-transfer / deflationary patterns. Rebasing, blacklist hooks, and other
21
+ * non-standard behavior remain unsupported—deployment must still use a suitable asset.
22
+ * @dev **Private token:** The constructor stores `_privateToken` as {IPrivateERC20} from
23
+ * `contracts/token/PrivateERC20/IPrivateERC20.sol` (same `pragma` family as this contract). Integrators should
24
+ * bind ABIs/codegen to that canonical interface in this repo; alternate compiler pipelines (e.g. via-IR-only)
25
+ * should still target the same ABI, not ad-hoc casts to incompatible shapes.
14
26
  */
15
- contract PrivacyBridgeERC20 is PrivacyBridge {
27
+ abstract contract PrivacyBridgeERC20 is PrivacyBridge {
16
28
  using SafeERC20 for IERC20;
17
29
 
18
30
  /// @notice The public ERC20 token being bridged (e.g., USDC, WETH)
@@ -21,6 +33,12 @@ contract PrivacyBridgeERC20 is PrivacyBridge {
21
33
  /// @notice Private token contract being minted/burned
22
34
  IPrivateERC20 public privateToken;
23
35
 
36
+ /// @notice Band oracle symbol for the bridged token (e.g., "ETH", "WBTC", "ADA", "USDC", "USDT")
37
+ string public tokenSymbol;
38
+
39
+ /// @notice Cached ERC20 decimals (matches private token; set in constructor).
40
+ uint8 internal immutable bridgedTokenDecimals;
41
+
24
42
  error InvalidTokenAddress();
25
43
  error InvalidPrivateTokenAddress();
26
44
  error CannotRescueBridgeToken();
@@ -31,221 +49,285 @@ contract PrivacyBridgeERC20 is PrivacyBridge {
31
49
  error TokenTransferFailed();
32
50
  error InvalidTokenSender();
33
51
  error NativeFeeRequiredForTransferAndCallWithdraw();
52
+ error DecimalsMismatch();
53
+ /// @notice Pulled balance increase did not match `amount` (e.g. fee-on-transfer or deflationary token).
54
+ error UnexpectedTransferBalance(uint256 expected, uint256 received);
55
+ event ERC20Rescued(address indexed token, address indexed to, uint256 amount);
56
+
57
+ function _computeErc20Fee(
58
+ uint256 tokenAmount,
59
+ uint256 fixedFee,
60
+ uint256 percentageBps,
61
+ uint256 maxFee
62
+ ) internal view returns (uint256) {
63
+ (uint256 fee,,,) = _computeErc20FeeAndMeta(tokenAmount, fixedFee, percentageBps, maxFee, tokenSymbol, bridgedTokenDecimals);
64
+ return fee;
65
+ }
66
+
67
+ /**
68
+ * @notice Simulate fee calculation for any token symbol and decimals.
69
+ * @dev Public view — allows frontends/operators to preview fees with arbitrary parameters.
70
+ * Reads live oracle prices but accepts custom fee params and token config.
71
+ * @param tokenAmount The token amount to simulate fee for (raw units; very large values can revert in fee math)
72
+ * @param fixedFee The minimum fee floor in COTI wei
73
+ * @param percentageBps The percentage in basis points (relative to {FEE_DIVISOR})
74
+ * @param maxFee The maximum fee cap in COTI wei
75
+ * @param _tokenSymbol The Band oracle symbol (e.g. "ETH", "WBTC", "ADA")
76
+ * @param _tokenDecimals The decimal precision of the token (e.g. 18, 8, 6)
77
+ * @return The computed fee in native COTI (18 decimals)
78
+ */
79
+ function computeErc20Fee(
80
+ uint256 tokenAmount,
81
+ uint256 fixedFee,
82
+ uint256 percentageBps,
83
+ uint256 maxFee,
84
+ string calldata _tokenSymbol,
85
+ uint8 _tokenDecimals
86
+ ) external view returns (uint256) {
87
+ (uint256 fee,,,) = _computeErc20FeeAndMeta(tokenAmount, fixedFee, percentageBps, maxFee, _tokenSymbol, _tokenDecimals);
88
+ return fee;
89
+ }
90
+
91
+ /**
92
+ * @dev ERC20 fee math + two {getPriceWithMeta} reads (token then COTI). Used by {_computeErc20Fee}
93
+ * and {estimateDepositFee}/{estimateWithdrawFee}. Each {Math.mulDiv} step truncates toward zero
94
+ * (see {PrivacyBridge.FEE_DIVISOR} NatSpec). Extreme `tokenAmount`×`tokenUsdRate` values can make
95
+ * {Math.mulDiv} revert—keep amounts within configured max deposit/withdraw limits.
96
+ */
97
+ function _computeErc20FeeAndMeta(
98
+ uint256 tokenAmount,
99
+ uint256 fixedFee,
100
+ uint256 percentageBps,
101
+ uint256 maxFee,
102
+ string memory oracleTokenSymbol,
103
+ uint8 tokenDecimals
104
+ )
105
+ internal
106
+ view
107
+ returns (uint256 fee, uint256 cotiLastUpdated, uint256 tokenLastUpdated, uint256 blockTimestamp)
108
+ {
109
+ _requirePriceOracle();
110
+ ICotiPriceConsumer oracle = ICotiPriceConsumer(priceOracle);
111
+ (uint256 tokenUsdRate, uint256 tokenLU,) = oracle.getPriceWithMeta(oracleTokenSymbol);
112
+ (uint256 cotiUsdRate, uint256 cotiLU, uint256 cotiBts) = oracle.getPriceWithMeta("COTI");
113
+ _requirePositiveOracleRate(tokenUsdRate);
114
+ _requirePositiveOracleRate(cotiUsdRate);
115
+ _requireOracleFreshness(tokenLU);
116
+ _requireOracleFreshness(cotiLU);
117
+ uint256 txValueUsd = Math.mulDiv(tokenAmount, tokenUsdRate, 10 ** uint256(tokenDecimals));
118
+ uint256 percentageFeeUsd = Math.mulDiv(txValueUsd, percentageBps, FEE_DIVISOR);
119
+ uint256 percentageFeeCoti = Math.mulDiv(percentageFeeUsd, 1e18, cotiUsdRate);
120
+ fee = _calculateDynamicFee(percentageFeeCoti, fixedFee, maxFee);
121
+ cotiLastUpdated = cotiLU;
122
+ tokenLastUpdated = tokenLU;
123
+ blockTimestamp = cotiBts;
124
+ }
125
+
126
+ /**
127
+ * @notice Estimate the deposit fee in COTI for a given token amount
128
+ * @param tokenAmount The amount of ERC20 tokens to deposit (raw token units; very large values can revert in fee math)
129
+ * @return fee The estimated fee in native COTI (18 decimals)
130
+ * @return cotiLastUpdated COTI oracle data last update timestamp
131
+ * @return tokenLastUpdated Token oracle data last update timestamp
132
+ * @return blockTimestamp Third field from the COTI oracle row (same as pre-refactor behavior)
133
+ * @dev Pass the returned `cotiLastUpdated` and `tokenLastUpdated` verbatim into {deposit}/{withdraw} together
134
+ * with the same `tokenAmount` path; see {PrivacyBridge._validateOracleTimestamps} for strict equality UX.
135
+ */
136
+ function estimateDepositFee(uint256 tokenAmount) external view returns (uint256 fee, uint256 cotiLastUpdated, uint256 tokenLastUpdated, uint256 blockTimestamp) {
137
+ (fee, cotiLastUpdated, tokenLastUpdated, blockTimestamp) = _computeErc20FeeAndMeta(
138
+ tokenAmount,
139
+ depositFixedFee,
140
+ depositPercentageBps,
141
+ depositMaxFee,
142
+ tokenSymbol,
143
+ bridgedTokenDecimals
144
+ );
145
+ }
146
+
147
+ /**
148
+ * @notice Estimate the withdrawal fee in COTI for a given token amount
149
+ * @param tokenAmount The amount of ERC20 tokens to withdraw (raw units; very large values can revert in fee math)
150
+ * @return fee The estimated fee in native COTI (18 decimals)
151
+ * @return cotiLastUpdated COTI oracle data last update timestamp
152
+ * @return tokenLastUpdated Token oracle data last update timestamp
153
+ * @return blockTimestamp Third field from the COTI oracle row (same as pre-refactor behavior)
154
+ * @dev Same timestamp handoff as {estimateDepositFee}: use return values unchanged on the subsequent {withdraw}.
155
+ */
156
+ function estimateWithdrawFee(uint256 tokenAmount) external view returns (uint256 fee, uint256 cotiLastUpdated, uint256 tokenLastUpdated, uint256 blockTimestamp) {
157
+ (fee, cotiLastUpdated, tokenLastUpdated, blockTimestamp) = _computeErc20FeeAndMeta(
158
+ tokenAmount,
159
+ withdrawFixedFee,
160
+ withdrawPercentageBps,
161
+ withdrawMaxFee,
162
+ tokenSymbol,
163
+ bridgedTokenDecimals
164
+ );
165
+ }
166
+
167
+ /**
168
+ * @notice Collect the dynamic native COTI fee from msg.value and refund any excess
169
+ * @param fee The computed fee in native COTI
170
+ * @dev Reverts with {InsufficientCotiFee} if msg.value < fee.
171
+ * Excess above `fee` is sent back to `msg.sender` with a plain `call` (no receive hook guarantee).
172
+ * Smart wallets or contracts that revert or return false on unsolicited ETH will not receive the push;
173
+ * the excess is then credited to {refundableNativeExcess}[msg.sender] and emits `NativeRefundExcessPushFailed`
174
+ * (see {PrivacyBridge._creditRefundableNativeExcess} and {PrivacyBridge.claimRefundableNativeExcess}). Excess
175
+ * is never added to {accumulatedCotiFees}.
176
+ */
177
+ function _collectDynamicNativeFee(uint256 fee) internal {
178
+ if (msg.value < fee) revert InsufficientCotiFee();
179
+ // Verify contract balance covers the fee before accounting
180
+ if (address(this).balance < fee) revert InsufficientEthBalance();
181
+ accumulatedCotiFees += fee;
182
+ if (msg.value > fee) {
183
+ uint256 excess = msg.value - fee;
184
+ (bool ok, ) = msg.sender.call{value: excess}("");
185
+ if (!ok) {
186
+ _creditRefundableNativeExcess(msg.sender, excess);
187
+ }
188
+ }
189
+ }
34
190
 
35
191
  /**
36
192
  * @notice Initialize the PrivacyBridgeERC20 contract
37
193
  * @param _token Address of the public ERC20 token (must be standard: no fee-on-transfer, no rebasing; same decimals as private token)
38
194
  * @param _privateToken Address of the private token
195
+ * @param _tokenSymbol Band oracle symbol for the bridged token (e.g., "ETH", "WBTC") — required for Band Protocol compatibility check
196
+ * @param _priceOracle Non-zero price oracle (same requirement as {PrivacyBridge}'s constructor)
197
+ * @dev **Decimals:** reads `decimals()` on both tokens at deploy; reverts {DecimalsMismatch} if they differ—so
198
+ * mis-paired tokens fail **at construction**, not on first user tx. {bridgedTokenDecimals} is then cached
199
+ * immutably for fee math. After deploy, a mismatch cannot appear unless token contracts were misconfigured
200
+ * at deploy time or an upgradeable token later changes `decimals()` (exceptional external risk; not re-checked on-chain).
39
201
  */
40
- constructor(address _token, address _privateToken) PrivacyBridge() {
202
+ constructor(
203
+ address _token,
204
+ address _privateToken,
205
+ string memory _tokenSymbol,
206
+ address _feeRecipient,
207
+ address _rescueRecipient,
208
+ address _priceOracle
209
+ ) PrivacyBridge(_feeRecipient, _rescueRecipient, _priceOracle) {
41
210
  if (_token == address(0)) revert InvalidTokenAddress();
42
211
  if (_privateToken == address(0)) revert InvalidPrivateTokenAddress();
43
212
 
213
+ uint8 pubDecimals = IHasDecimals(_token).decimals();
214
+ if (pubDecimals != IHasDecimals(_privateToken).decimals()) revert DecimalsMismatch();
215
+ bridgedTokenDecimals = pubDecimals;
216
+
44
217
  token = IERC20(_token);
45
218
  privateToken = IPrivateERC20(_privateToken);
219
+ tokenSymbol = _tokenSymbol;
46
220
  }
47
221
 
48
222
  /**
49
223
  * @notice Deposit public ERC20 tokens to receive equivalent private tokens
50
224
  * @param amount Amount of public ERC20 tokens to deposit
51
- * @dev Native COTI fee: send msg.value >= nativeCotiFee. Excess is refunded best-effort;
52
- * if refund fails (e.g. sender cannot receive native token), excess remains in the contract and deposit still succeeds.
53
- * Send exactly nativeCotiFee or ensure sender can receive native token to avoid leaving excess in the contract.
225
+ * @param cotiOracleTimestamp COTI `lastUpdated` from the latest `estimateDepositFee` (must still equal on-chain at execution).
226
+ * @param tokenOracleTimestamp Token `lastUpdated` from the same estimate (must still equal on-chain at execution).
227
+ * @dev Native COTI fee: send msg.value >= computed fee. Excess native is push-refunded then pull-credited on failure
228
+ * ({_collectDynamicNativeFee}). If the Band row advances before inclusion, tx reverts with {OracleTimestampMismatch}—re-estimate and resubmit (see {_validateOracleTimestamps}).
54
229
  */
55
230
  function deposit(
56
- uint256 amount
57
- ) external payable nonReentrant whenNotPaused {
58
- _deposit(
59
- amount,
60
- false,
61
- itUint256(ctUint256(ctUint128.wrap(0), ctUint128.wrap(0)), "")
62
- );
231
+ uint256 amount,
232
+ uint256 cotiOracleTimestamp,
233
+ uint256 tokenOracleTimestamp
234
+ ) external payable nonReentrant whenNotPaused notBlacklisted {
235
+ _deposit(amount, cotiOracleTimestamp, tokenOracleTimestamp);
63
236
  }
64
237
 
65
238
  /**
66
- * @notice Deposit public ERC20 tokens with an encrypted amount for the private minting event
67
- * @param amount Public amount of tokens to lock
68
- * @param encryptedAmount Encrypted amount to mint
69
- * @dev Native COTI fee: send msg.value >= nativeCotiFee. Excess refunded best-effort (see deposit(uint256)).
239
+ * @dev Pulls public tokens before collecting the native COTI fee so a non-standard transfer
240
+ * (e.g. fee-on-transfer) reverts before debiting `msg.value`, and insufficient `msg.value`
241
+ * still reverts the whole tx including the token transfer.
70
242
  */
71
- function deposit(
72
- uint256 amount,
73
- itUint256 calldata encryptedAmount
74
- ) external payable nonReentrant whenNotPaused {
75
- _deposit(amount, true, encryptedAmount);
76
- }
77
-
78
- function _deposit(
79
- uint256 amount,
80
- bool isEncrypted,
81
- itUint256 memory encryptedAmount
82
- ) internal {
243
+ function _deposit(uint256 amount, uint256 cotiOracleTimestamp, uint256 tokenOracleTimestamp) internal {
83
244
  if (!isDepositEnabled) revert DepositDisabled();
84
245
  if (amount == 0) revert AmountZero();
85
- if (msg.value < nativeCotiFee) revert InsufficientCotiFee();
86
-
87
246
  _checkDepositLimits(amount);
247
+ _validateOracleTimestamps(cotiOracleTimestamp, tokenOracleTimestamp, tokenSymbol);
88
248
 
89
- // Handle native COTI fee (excess refunded to sender)
90
- accumulatedCotiFees += nativeCotiFee;
249
+ uint256 fee = _computeErc20Fee(amount, depositFixedFee, depositPercentageBps, depositMaxFee);
91
250
 
251
+ uint256 balBefore = token.balanceOf(address(this));
92
252
  token.safeTransferFrom(msg.sender, address(this), amount);
253
+ uint256 received = token.balanceOf(address(this)) - balBefore;
254
+ if (received != amount) revert UnexpectedTransferBalance(amount, received);
93
255
 
94
- // Calculate and deduct deposit fee (in tokens)
95
- uint256 feeAmount = _calculateFeeAmount(amount, depositFeeBasisPoints);
96
- uint256 amountAfterFee = amount - feeAmount;
97
- accumulatedFees += feeAmount;
98
-
99
- if (isEncrypted) {
100
- // Verify parity between public amount and encrypted amount
101
- gtUint256 gtAmount = MpcCore.validateCiphertext(encryptedAmount);
102
- gtBool amountMatch = MpcCore.eq(
103
- gtAmount,
104
- MpcCore.setPublic256(amountAfterFee)
105
- );
106
- require(MpcCore.decrypt(amountMatch), "Encrypted amount mismatch");
107
-
108
- privateToken.mintGt(msg.sender, gtAmount);
109
- } else {
110
- privateToken.mint(msg.sender, amountAfterFee);
111
- }
256
+ _collectDynamicNativeFee(fee);
112
257
 
113
- // Emit gross deposit amount and net private tokens minted
114
- emit Deposit(msg.sender, amount, amountAfterFee);
258
+ totalUserLiability += received;
259
+ privateToken.mint(msg.sender, received);
115
260
 
116
- // Refund excess native COTI fee (best-effort: do not revert so deposit succeeds even if sender cannot receive)
117
- if (msg.value > nativeCotiFee) {
118
- uint256 excess = msg.value - nativeCotiFee;
119
- (bool ok, ) = msg.sender.call{value: excess}("");
120
- if (!ok) {
121
- // Excess remains in contract; deposit still succeeds
122
- }
123
- }
261
+ emit Deposit(msg.sender, amount, received);
124
262
  }
125
263
 
126
264
  /**
127
265
  * @notice Withdraw public ERC20 tokens by burning private tokens
128
266
  * @param amount Amount of private tokens to burn
129
- * @dev Requires prior approval on the private token. Native COTI fee: send msg.value >= nativeCotiFee; excess refunded best-effort (see deposit).
267
+ * @param cotiOracleTimestamp COTI `lastUpdated` from the latest `estimateWithdrawFee` (must still equal on-chain at execution).
268
+ * @param tokenOracleTimestamp Token `lastUpdated` from the same estimate (must still equal on-chain at execution).
269
+ * @dev Requires prior approval on the private token. Send `msg.value >= fee`; native fee is
270
+ * collected only after the public token transfer succeeds (mirrors {deposit} ordering). Oracle
271
+ * timestamp rules match {deposit} / {_validateOracleTimestamps}. Native excess handling matches {deposit}.
130
272
  */
131
273
  function withdraw(
132
- uint256 amount
133
- ) external payable nonReentrant whenNotPaused {
134
- _withdraw(
135
- amount,
136
- false,
137
- itUint256(ctUint256(ctUint128.wrap(0), ctUint128.wrap(0)), "")
138
- );
274
+ uint256 amount,
275
+ uint256 cotiOracleTimestamp,
276
+ uint256 tokenOracleTimestamp
277
+ ) external payable nonReentrant whenNotPaused notBlacklisted {
278
+ _withdraw(amount, cotiOracleTimestamp, tokenOracleTimestamp);
139
279
  }
140
280
 
141
281
  /**
142
- * @notice Withdraw public ERC20 tokens by burning private tokens with an encrypted amount
143
- * @param amount Public amount to release
144
- * @param encryptedAmount Encrypted amount to burn
145
- * @dev Native COTI fee: send msg.value >= nativeCotiFee; excess refunded best-effort (see deposit).
282
+ * @dev Mirrors {_deposit}: native fee is collected only after the ERC20 leg succeeds by standard
283
+ * semantics (here: burn + public transfer with full `userGain`). Insufficient `msg.value`
284
+ * then reverts the entire withdrawal including private burn and public transfer.
146
285
  */
147
- function withdraw(
148
- uint256 amount,
149
- itUint256 calldata encryptedAmount
150
- ) external payable nonReentrant whenNotPaused {
151
- _withdraw(amount, true, encryptedAmount);
152
- }
153
-
154
- function _withdraw(
155
- uint256 amount,
156
- bool isEncrypted,
157
- itUint256 memory encryptedAmount
158
- ) internal {
286
+ function _withdraw(uint256 amount, uint256 cotiOracleTimestamp, uint256 tokenOracleTimestamp) internal {
159
287
  if (amount == 0) revert AmountZero();
160
- if (msg.value < nativeCotiFee) revert InsufficientCotiFee();
161
288
  _checkWithdrawLimits(amount);
289
+ _validateOracleTimestamps(cotiOracleTimestamp, tokenOracleTimestamp, tokenSymbol);
162
290
 
163
- // Handle native COTI fee (excess refunded to sender)
164
- accumulatedCotiFees += nativeCotiFee;
165
-
166
- // Calculate fee on the public side
167
- uint256 feeAmount = _calculateFeeAmount(amount, withdrawFeeBasisPoints);
168
- uint256 amountAfterFee = amount - feeAmount;
169
- accumulatedFees += feeAmount;
291
+ uint256 fee = _computeErc20Fee(amount, withdrawFixedFee, withdrawPercentageBps, withdrawMaxFee);
170
292
 
171
293
  uint256 bridgeBalance = token.balanceOf(address(this));
172
- if (bridgeBalance < amountAfterFee)
173
- revert InsufficientBridgeLiquidity();
174
-
175
- if (isEncrypted) {
176
- // Verify parity
177
- gtUint256 gtAmount = MpcCore.validateCiphertext(encryptedAmount);
178
- gtBool amountMatch = MpcCore.eq(
179
- gtAmount,
180
- MpcCore.setPublic256(amount)
181
- );
182
- require(MpcCore.decrypt(amountMatch), "Encrypted amount mismatch");
183
-
184
- // Use already-validated gt handle so PrivateERC20 does not re-call
185
- // validateCiphertext with a different contract context (signature mismatch)
186
- privateToken.transferFromGT(
187
- msg.sender,
188
- address(this),
189
- gtAmount
190
- );
191
- privateToken.burnGt(gtAmount);
192
- } else {
193
- // Standard withdrawal (public amount)
194
- privateToken.transferFrom(msg.sender, address(this), amount);
195
- privateToken.burn(amount);
196
- }
294
+ if (bridgeBalance < amount) revert InsufficientBridgeLiquidity();
197
295
 
198
- // Transfer public tokens
199
- token.safeTransfer(msg.sender, amountAfterFee);
296
+ totalUserLiability -= amount;
297
+ privateToken.transferFrom(msg.sender, address(this), amount);
298
+ privateToken.burn(amount);
200
299
 
201
- emit Withdraw(msg.sender, amount, amountAfterFee);
300
+ uint256 userBalBefore = token.balanceOf(msg.sender);
301
+ token.safeTransfer(msg.sender, amount);
302
+ uint256 userGain = token.balanceOf(msg.sender) - userBalBefore;
303
+ if (userGain != amount) revert UnexpectedTransferBalance(amount, userGain);
202
304
 
203
- // Refund excess native COTI fee (best-effort: do not revert so withdraw succeeds even if sender cannot receive)
204
- if (msg.value > nativeCotiFee) {
205
- uint256 excess = msg.value - nativeCotiFee;
206
- (bool ok, ) = msg.sender.call{value: excess}("");
207
- if (!ok) {
208
- // Excess remains in contract; withdraw still succeeds
209
- }
210
- }
211
- }
305
+ _collectDynamicNativeFee(fee);
212
306
 
213
- /**
214
- * @notice Withdraw accumulated fees (ERC20 implementation)
215
- * @param to Address to send fees to
216
- * @param amount Amount of fees to withdraw
217
- * @dev Only the owner can call this function
218
- */
219
- function withdrawFees(
220
- address to,
221
- uint256 amount
222
- ) external override onlyOperator {
223
- if (to == address(0)) revert InvalidAddress();
224
- if (amount == 0) revert AmountZero();
225
- if (amount > accumulatedFees) revert InsufficientAccumulatedFees();
226
-
227
- accumulatedFees -= amount;
228
-
229
- // Transfer public ERC20 tokens
230
- token.safeTransfer(to, amount);
231
-
232
- emit FeesWithdrawn(to, amount);
307
+ emit Withdraw(msg.sender, amount, amount);
233
308
  }
234
309
 
235
310
  /**
236
- * @dev Rescue ERC20 tokens sent to the contract (excluding bridge and private tokens)
311
+ * @notice Move ERC20 from this contract to {rescueRecipient} while the bridge is paused.
312
+ * @dev Requires {whenPaused} for every `_token` so rescue never runs concurrently with user flows.
313
+ * For the live public {token}, `amount` can be the full balance—including all TVL backing withdrawals.
314
+ * Same governance risk as {PrivacyBridgeCotiNative.rescueNative}: owner + pause can send user funds
315
+ * to {rescueRecipient}; see {PrivacyBridge} contract @dev (3). Private token cannot be rescued here
316
+ * ({CannotRescueBridgeToken}). {totalUserLiability} is intentionally **not** updated here: rescue only
317
+ * moves collateral to {rescueRecipient}; it does not burn private tokens or unwind user obligations on
318
+ * this ledger, so outstanding claims can exceed {token} held by this contract until a separate migration
319
+ * path makes users whole.
237
320
  */
238
321
  function rescueERC20(
239
322
  address _token,
240
- address to,
241
323
  uint256 amount
242
- ) external onlyOwner {
243
- if (to == address(0)) revert InvalidAddress();
324
+ ) external onlyOwner nonReentrant whenPaused {
244
325
  if (amount == 0) revert AmountZero();
245
-
246
- if ( _token == address(privateToken))
247
- revert CannotRescueBridgeToken();
248
326
 
249
- IERC20(_token).safeTransfer(to, amount);
327
+ if (_token == address(privateToken)) revert CannotRescueBridgeToken();
328
+
329
+ IERC20(_token).safeTransfer(rescueRecipient, amount);
330
+
331
+ emit ERC20Rescued(_token, rescueRecipient, amount);
250
332
  }
251
333
  }
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import "./PrivacyBridgeERC20.sol";
5
5
  import "../token/PrivateERC20/tokens/PrivateBridgedUSDC.sol";
@@ -10,7 +10,13 @@ import "../token/PrivateERC20/tokens/PrivateBridgedUSDC.sol";
10
10
  */
11
11
  contract PrivacyBridgeUSDCe is PrivacyBridgeERC20 {
12
12
 
13
- constructor(address _usdc, address _privateUsdc) PrivacyBridgeERC20(_usdc, _privateUsdc) {
13
+ constructor(
14
+ address _usdc,
15
+ address _privateUsdc,
16
+ address _feeRecipient,
17
+ address _rescueRecipient,
18
+ address _priceOracle
19
+ ) PrivacyBridgeERC20(_usdc, _privateUsdc, "USDC", _feeRecipient, _rescueRecipient, _priceOracle) {
14
20
 
15
21
  }
16
22
  }
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import "./PrivacyBridgeERC20.sol";
5
5
  import "../token/PrivateERC20/tokens/PrivateTetherUSD.sol";
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateTetherUSD.sol";
11
11
  contract PrivacyBridgeUSDT is PrivacyBridgeERC20 {
12
12
 
13
13
 
14
- constructor(address _usdt, address _privateUsdt) PrivacyBridgeERC20(_usdt, _privateUsdt) {
14
+ constructor(
15
+ address _usdt,
16
+ address _privateUsdt,
17
+ address _feeRecipient,
18
+ address _rescueRecipient,
19
+ address _priceOracle
20
+ ) PrivacyBridgeERC20(_usdt, _privateUsdt, "USDT", _feeRecipient, _rescueRecipient, _priceOracle) {
15
21
 
16
22
  }
17
23
  }
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import "./PrivacyBridgeERC20.sol";
5
5
  import "../token/PrivateERC20/tokens/PrivateWrappedADA.sol";
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateWrappedADA.sol";
11
11
  contract PrivacyBridgeWADA is PrivacyBridgeERC20 {
12
12
 
13
13
 
14
- constructor(address _wada, address _privateWada) PrivacyBridgeERC20(_wada, _privateWada) {
14
+ constructor(
15
+ address _wada,
16
+ address _privateWada,
17
+ address _feeRecipient,
18
+ address _rescueRecipient,
19
+ address _priceOracle
20
+ ) PrivacyBridgeERC20(_wada, _privateWada, "ADA", _feeRecipient, _rescueRecipient, _priceOracle) {
15
21
 
16
22
  }
17
23
  }
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import "./PrivacyBridgeERC20.sol";
5
5
  import "../token/PrivateERC20/tokens/PrivateWrappedBTC.sol";
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateWrappedBTC.sol";
11
11
  contract PrivacyBridgeWBTC is PrivacyBridgeERC20 {
12
12
 
13
13
 
14
- constructor(address _wbtc, address _privateWbtc) PrivacyBridgeERC20(_wbtc, _privateWbtc) {
14
+ constructor(
15
+ address _wbtc,
16
+ address _privateWbtc,
17
+ address _feeRecipient,
18
+ address _rescueRecipient,
19
+ address _priceOracle
20
+ ) PrivacyBridgeERC20(_wbtc, _privateWbtc, "WBTC", _feeRecipient, _rescueRecipient, _priceOracle) {
15
21
 
16
22
  }
17
23
  }
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import "./PrivacyBridgeERC20.sol";
5
5
  import "../token/PrivateERC20/tokens/PrivateWrappedEther.sol";
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateWrappedEther.sol";
11
11
  contract PrivacyBridgeWETH is PrivacyBridgeERC20 {
12
12
 
13
13
 
14
- constructor(address _weth, address _privateWeth) PrivacyBridgeERC20(_weth, _privateWeth) {
14
+ constructor(
15
+ address _weth,
16
+ address _privateWeth,
17
+ address _feeRecipient,
18
+ address _rescueRecipient,
19
+ address _priceOracle
20
+ ) PrivacyBridgeERC20(_weth, _privateWeth, "ETH", _feeRecipient, _rescueRecipient, _priceOracle) {
15
21
 
16
22
  }
17
23
  }
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  import "./PrivacyBridgeERC20.sol";
5
5
  import "../token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol";
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol";
11
11
  contract PrivacyBridgegCoti is PrivacyBridgeERC20 {
12
12
 
13
13
 
14
- constructor(address _gCoti, address _privategCoti) PrivacyBridgeERC20(_gCoti, _privategCoti) {
14
+ constructor(
15
+ address _gCoti,
16
+ address _privategCoti,
17
+ address _feeRecipient,
18
+ address _rescueRecipient,
19
+ address _priceOracle
20
+ ) PrivacyBridgeERC20(_gCoti, _privategCoti, "GCOTI", _feeRecipient, _rescueRecipient, _priceOracle) {
15
21
 
16
22
  }
17
23
  }
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
 
3
- pragma solidity ^0.8.19;
3
+ pragma solidity ^0.8.20;
4
4
 
5
5
  import "../../utils/mpc/MpcCore.sol";
6
6
 
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
 
3
- pragma solidity ^0.8.19;
3
+ pragma solidity ^0.8.20;
4
4
 
5
5
  /**
6
6
  * @dev Interface for receiving Private ERC-20 tokens via `transferAndCall` with a **public** `uint256` amount.
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
 
3
- pragma solidity ^0.8.19;
3
+ pragma solidity ^0.8.20;
4
4
 
5
5
  /**
6
6
  * @dev Callback for the **encrypted-amount** `transferAndCall(to, itUint256, data)` overload on {PrivateERC20}.