@coti-io/coti-contracts 1.3.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 (360) hide show
  1. package/contracts/access/DataPrivacyFramework/DataPrivacyFramework.sol +1 -1
  2. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +1 -1
  3. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +2 -4
  4. package/contracts/disperse/disperseToken/MintDisperser.sol +1 -3
  5. package/contracts/disperse/disperseToken/TokenDisperser.sol +1 -1
  6. package/contracts/messaging/PrivateMessaging.sol +1 -1
  7. package/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.sol +1 -1
  8. package/contracts/mocks/messaging/PrivateMessagingHarness.sol +1 -1
  9. package/contracts/mocks/oracle/CotiPriceConsumerMock.sol +1 -1
  10. package/contracts/mocks/token/ERC20DecimalsMock.sol +1 -1
  11. package/contracts/mocks/token/ERC20Mock.sol +1 -1
  12. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +1 -1
  13. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +1 -1
  14. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +1 -1
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +1 -1
  16. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +1 -1
  17. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +1 -1
  18. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +1 -1
  19. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +1 -1
  20. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +1 -1
  21. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +1 -1
  22. package/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.sol +1 -1
  23. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +1 -1
  24. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +1 -1
  25. package/contracts/mocks/utils/mpc/ArithmeticAddTestsContract.sol +196 -0
  26. package/contracts/mocks/utils/mpc/ArithmeticMulTestsContract.sol +194 -0
  27. package/contracts/mocks/utils/mpc/ArithmeticSigned128TestsContract.sol +63 -0
  28. package/contracts/mocks/utils/mpc/ArithmeticSigned256TestsContract.sol +107 -0
  29. package/contracts/mocks/utils/mpc/ArithmeticSignedNarrowTestsContract.sol +123 -0
  30. package/contracts/mocks/utils/mpc/ArithmeticSubTestsContract.sol +196 -0
  31. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +1 -1
  32. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +1 -1
  33. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +1 -1
  34. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +1 -1
  35. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +1 -1
  36. package/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol +1 -1
  37. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +1 -1
  38. package/contracts/mocks/utils/mpc/Comparison1TestsContract.sol +1 -1
  39. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +1 -1
  40. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +1 -1
  41. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +1 -1
  42. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +1 -1
  43. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +1 -1
  44. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +1 -1
  45. package/contracts/mocks/utils/mpc/MinimalProxy.sol +1 -1
  46. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +1 -1
  47. package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +1 -1
  48. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +1 -1
  49. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +4 -4
  50. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +1 -1
  51. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +1 -1
  52. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +1 -1
  53. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +1 -1
  54. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +1 -1
  55. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +1 -1
  56. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +1 -1
  57. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +1 -1
  58. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +1 -1
  59. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +1 -1
  60. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +1 -1
  61. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +1 -1
  62. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +1 -1
  63. package/contracts/mocks/utils/mpc/StringTestsContract.sol +1 -1
  64. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +1 -1
  65. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +1 -1
  66. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +1 -1
  67. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +1 -1
  68. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +1 -1
  69. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +1 -1
  70. package/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.sol +1 -1
  71. package/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.sol +1 -1
  72. package/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol +1 -1
  73. package/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.sol +1 -1
  74. package/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.sol +1 -1
  75. package/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol +1 -1
  76. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +1 -1
  77. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +2 -2
  78. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +1 -1
  79. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +1 -1
  80. package/contracts/node/CotiNodeRewards.sol +3 -3
  81. package/contracts/node/SoulboundNodeNFT.sol +1 -2
  82. package/contracts/onboard/AccountOnboard.sol +1 -1
  83. package/contracts/oracle/ICotiPriceConsumer.sol +1 -1
  84. package/contracts/pod/IInbox.sol +231 -0
  85. package/contracts/pod/IInboxMiner.sol +53 -0
  86. package/contracts/pod/InboxUser.sol +29 -0
  87. package/contracts/pod/InboxUserCotiTestnet.sol +13 -0
  88. package/contracts/pod/PodNetworkConstants.sol +30 -0
  89. package/contracts/pod/examples/MpcAdder.sol +57 -0
  90. package/contracts/pod/examples/MpcAdderPausable.sol +25 -0
  91. package/contracts/pod/examples/MpcAdderPausable.sol.bak +25 -0
  92. package/contracts/pod/examples/it128/PodAdder128.sol +48 -0
  93. package/contracts/pod/examples/it256/PodAdder256.sol +48 -0
  94. package/contracts/pod/fee/IInboxFeeManager.sol +40 -0
  95. package/contracts/pod/manifest.json +52 -0
  96. package/contracts/pod/mpc/PodLib.sol +10 -0
  97. package/contracts/pod/mpc/PodLib128.sol +361 -0
  98. package/contracts/pod/mpc/PodLib256.sol +361 -0
  99. package/contracts/pod/mpc/PodLib64.sol +385 -0
  100. package/contracts/pod/mpc/PodLibBase.sol +72 -0
  101. package/contracts/pod/mpc/PodUser.sol +58 -0
  102. package/contracts/pod/mpc/PodUserFuji.sol +14 -0
  103. package/contracts/pod/mpc/PodUserSepolia.sol +13 -0
  104. package/contracts/pod/mpc/coti-side/IPodExecutorOps.sol +99 -0
  105. package/contracts/pod/mpccodec/MpcAbiCodec.sol +482 -0
  106. package/contracts/pod/privacy/IPodPriceOracle.sol +20 -0
  107. package/contracts/pod/privacy/IPrivacyPortal.sol +248 -0
  108. package/contracts/pod/privacy/IPrivacyPortalFactory.sol +88 -0
  109. package/contracts/pod/privacy/PortalFeeOracle.sol +51 -0
  110. package/contracts/pod/privacy/PrivacyPortal.sol +871 -0
  111. package/contracts/pod/privacy/PrivacyPortalFactory.sol +492 -0
  112. package/contracts/pod/privacy/PrivacyPortalFeeLib.sol +98 -0
  113. package/contracts/pod/privacy/mocks/CloneHelper.sol +14 -0
  114. package/contracts/pod/privacy/mocks/MockERC20.sol +26 -0
  115. package/contracts/pod/privacy/mocks/MockPodERC20ForPortal.sol +160 -0
  116. package/contracts/pod/privacy/mocks/MockPrivacyPortalFactory.sol +125 -0
  117. package/contracts/pod/privacy/mocks/MockWrappedNative.sol +24 -0
  118. package/contracts/pod/token/erc7984/Erc7984Constants.sol +9 -0
  119. package/contracts/pod/token/erc7984/Erc7984Pointers.sol +29 -0
  120. package/contracts/pod/token/erc7984/IERC7984.sol +69 -0
  121. package/contracts/pod/token/erc7984/IERC7984PortalWrapper.sol +31 -0
  122. package/contracts/pod/token/erc7984/PodErc7984Mixin.sol +125 -0
  123. package/contracts/pod/token/erc7984/README.md +60 -0
  124. package/contracts/pod/token/perc20/IPodERC20.sol +298 -0
  125. package/contracts/pod/token/perc20/PodERC20.sol +1021 -0
  126. package/contracts/pod/token/perc20/PodErc20Mintable.sol +88 -0
  127. package/contracts/pod/token/perc20/PodErc20MintableInitializable.sol +42 -0
  128. package/contracts/pod/token/perc20/cotiside/IPodErc20CotiSide.sol +88 -0
  129. package/contracts/pod/token/perc20/cotiside/PodErc20CotiMother.sol +529 -0
  130. package/contracts/pod/utils/IWrappedNative.sol +11 -0
  131. package/contracts/privacyBridge/PrivacyBridge.sol +5 -5
  132. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +1 -1
  133. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +1 -1
  134. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +1 -1
  135. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +1 -1
  136. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +1 -1
  137. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +1 -1
  138. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +1 -1
  139. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +1 -1
  140. package/contracts/token/PrivateERC20/IPrivateERC20.sol +1 -1
  141. package/contracts/token/PrivateERC20/ITokenReceiver.sol +1 -1
  142. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +1 -1
  143. package/contracts/token/PrivateERC20/PrivateERC20.sol +5 -5
  144. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +1 -1
  145. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +1 -1
  146. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +1 -1
  147. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +1 -1
  148. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +1 -1
  149. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +1 -1
  150. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +1 -1
  151. package/contracts/token/PrivateERC721/IERC721Errors.sol +1 -1
  152. package/contracts/token/PrivateERC721/PrivateERC721.sol +1 -1
  153. package/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage.sol +1 -1
  154. package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +1 -1
  155. package/contracts/token/points/CotiTokenPoints004.sol +43 -0
  156. package/contracts/utils/mpc/MpcCore.sol +610 -1
  157. package/contracts/utils/mpc/MpcInterface.sol +1 -1
  158. package/hardhat.config.ts +5 -14
  159. package/package.json +4 -4
  160. package/scripts/deployCotiTokenPoints004.ts +61 -0
  161. package/scripts/deployFixedRatioCoinDisperserUnlimitedWindow.ts +68 -0
  162. package/scripts/verifyCotiTokenPoints004.ts +123 -0
  163. package/scripts/verifyFixedRatioCoinDisperserUnlimitedWindow.ts +112 -0
  164. package/test/messaging/PrivateMessaging.test.ts +5 -5
  165. package/test/pod/privacy/PrivacyPortal.access.test.ts +756 -0
  166. package/test/pod/privacy/PrivacyPortal.recovery.test.ts +263 -0
  167. package/test/privacyBridge/UnifiedPrivacyBridges.test.cjs +5 -3
  168. package/test/utils/mpc/CheckedSignedArithmetic256.test.ts +163 -0
  169. package/test/utils/mpc/NegativeCases.test.ts +3 -3
  170. package/test/utils/mpc/Precompile.test.ts +6 -6
  171. package/typechain-types/@openzeppelin/contracts/access/AccessControl.ts +2 -2
  172. package/typechain-types/@openzeppelin/contracts/access/IAccessControl.ts +2 -2
  173. package/typechain-types/@openzeppelin/contracts/access/extensions/AccessControlEnumerable.ts +375 -0
  174. package/typechain-types/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable.ts +329 -0
  175. package/typechain-types/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  176. package/typechain-types/@openzeppelin/contracts/access/index.ts +2 -0
  177. package/typechain-types/@openzeppelin/contracts/interfaces/IERC1363.ts +412 -0
  178. package/typechain-types/@openzeppelin/contracts/interfaces/IERC5267.ts +151 -0
  179. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.ts +69 -0
  180. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.ts +69 -0
  181. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.ts +69 -0
  182. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  183. package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +4 -0
  184. package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +6 -50
  185. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +6 -6
  186. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.ts +313 -0
  187. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.ts +356 -0
  188. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.ts +423 -0
  189. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +6 -6
  190. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +3 -0
  191. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +2 -0
  192. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.ts +69 -0
  193. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  194. package/typechain-types/@openzeppelin/contracts/utils/Nonces.ts +85 -0
  195. package/typechain-types/@openzeppelin/contracts/utils/Pausable.ts +150 -0
  196. package/typechain-types/@openzeppelin/contracts/utils/ReentrancyGuard.ts +69 -0
  197. package/typechain-types/@openzeppelin/contracts/utils/ShortStrings.ts +69 -0
  198. package/typechain-types/@openzeppelin/contracts/utils/Strings.ts +69 -0
  199. package/typechain-types/@openzeppelin/contracts/utils/cryptography/ECDSA.ts +69 -0
  200. package/typechain-types/@openzeppelin/contracts/utils/cryptography/EIP712.ts +151 -0
  201. package/typechain-types/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  202. package/typechain-types/@openzeppelin/contracts/utils/index.ts +9 -0
  203. package/typechain-types/@openzeppelin/contracts/utils/math/SafeCast.ts +69 -0
  204. package/typechain-types/@openzeppelin/contracts/utils/math/index.ts +4 -0
  205. package/typechain-types/contracts/mocks/token/ERC20DecimalsMock.ts +6 -50
  206. package/typechain-types/contracts/mocks/token/ERC20Mock.ts +6 -50
  207. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.ts +16 -2
  208. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.ts +2 -2
  209. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.ts +2 -2
  210. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +2 -2
  211. package/typechain-types/contracts/privacyBridge/PrivacyBridge.ts +16 -2
  212. package/typechain-types/contracts/privacyBridge/PrivacyBridgeCotiNative.ts +16 -2
  213. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20.ts +16 -2
  214. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDCe.ts +16 -2
  215. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDT.ts +16 -2
  216. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWADA.ts +16 -2
  217. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWBTC.ts +16 -2
  218. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWETH.ts +16 -2
  219. package/typechain-types/contracts/privacyBridge/PrivacyBridgegCoti.ts +16 -2
  220. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +2 -2
  221. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.ts +2 -2
  222. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTI.ts +2 -2
  223. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.ts +2 -2
  224. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.ts +2 -2
  225. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.ts +2 -2
  226. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.ts +2 -2
  227. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.ts +2 -2
  228. package/typechain-types/contracts/token/index.ts +2 -0
  229. package/typechain-types/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004.ts +826 -0
  230. package/typechain-types/contracts/token/points/CotiTokenPoints004.ts +826 -0
  231. package/typechain-types/contracts/token/points/index.ts +4 -0
  232. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControl__factory.ts +22 -1
  233. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControl__factory.ts +22 -1
  234. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +22 -0
  235. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/AccessControlEnumerable__factory.ts +316 -0
  236. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable__factory.ts +265 -0
  237. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  238. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +1 -0
  239. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1363__factory.ts +393 -0
  240. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC5267__factory.ts +71 -0
  241. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors__factory.ts +127 -0
  242. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors__factory.ts +111 -0
  243. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors__factory.ts +128 -0
  244. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  245. package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +3 -0
  246. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +84 -110
  247. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +3 -3
  248. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable__factory.ts +364 -0
  249. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable__factory.ts +382 -0
  250. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit__factory.ts +540 -0
  251. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +3 -3
  252. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +3 -0
  253. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +1 -0
  254. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/SafeERC20__factory.ts +96 -0
  255. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  256. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +98 -59
  257. package/typechain-types/factories/@openzeppelin/contracts/utils/Nonces__factory.ts +57 -0
  258. package/typechain-types/factories/@openzeppelin/contracts/utils/Pausable__factory.ts +71 -0
  259. package/typechain-types/factories/@openzeppelin/contracts/utils/ReentrancyGuard__factory.ts +30 -0
  260. package/typechain-types/factories/@openzeppelin/contracts/utils/ShortStrings__factory.ts +83 -0
  261. package/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.ts +90 -0
  262. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.ts +91 -0
  263. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/EIP712__factory.ts +87 -0
  264. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  265. package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +7 -0
  266. package/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.ts +118 -0
  267. package/typechain-types/factories/@openzeppelin/contracts/utils/math/index.ts +4 -0
  268. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1__factory.ts +12 -1
  269. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow__factory.ts +39 -1
  270. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +12 -1
  271. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +23 -1
  272. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +12 -1
  273. package/typechain-types/factories/contracts/messaging/PrivateMessaging__factory.ts +1 -1
  274. package/typechain-types/factories/contracts/mocks/messaging/PrivateMessagingHarness__factory.ts +1 -1
  275. package/typechain-types/factories/contracts/mocks/token/ERC20DecimalsMock__factory.ts +90 -52
  276. package/typechain-types/factories/contracts/mocks/token/ERC20Mock__factory.ts +90 -52
  277. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock__factory.ts +90 -2
  278. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock__factory.ts +28 -2
  279. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock__factory.ts +28 -2
  280. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock__factory.ts +1 -1
  281. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +28 -2
  282. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  283. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +1 -1
  284. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +1 -1
  285. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  286. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +1 -1
  287. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +1 -1
  288. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  289. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +1 -1
  290. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +1 -1
  291. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  292. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +1 -1
  293. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  294. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +1 -1
  295. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  296. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +1 -1
  297. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +1 -1
  298. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  299. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +1 -1
  300. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  301. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  302. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +1 -1
  303. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1 -1
  304. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +1 -1
  305. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +1 -1
  306. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  307. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +1 -1
  308. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +1 -1
  309. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +1 -1
  310. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +1 -1
  311. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +1 -1
  312. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +1 -1
  313. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +1 -1
  314. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +1 -1
  315. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  316. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  317. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +1 -1
  318. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +1 -1
  319. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  320. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  321. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +1 -1
  322. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +1 -1
  323. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  324. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  325. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  326. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  327. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  328. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  329. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +1 -1
  330. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +1 -1
  331. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +1 -1
  332. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
  333. package/typechain-types/factories/contracts/node/CotiNodeRewards__factory.ts +28 -1
  334. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT__factory.ts +126 -1
  335. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
  336. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeCotiNative__factory.ts +79 -2
  337. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20__factory.ts +89 -1
  338. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDCe__factory.ts +90 -2
  339. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDT__factory.ts +90 -2
  340. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWADA__factory.ts +90 -2
  341. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWBTC__factory.ts +90 -2
  342. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWETH__factory.ts +90 -2
  343. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridge__factory.ts +78 -1
  344. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgegCoti__factory.ts +90 -2
  345. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +27 -1
  346. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC__factory.ts +28 -2
  347. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken__factory.ts +28 -2
  348. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTI__factory.ts +28 -2
  349. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateTetherUSD__factory.ts +28 -2
  350. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedADA__factory.ts +28 -2
  351. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC__factory.ts +28 -2
  352. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedEther__factory.ts +28 -2
  353. package/typechain-types/factories/contracts/token/index.ts +1 -0
  354. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004__factory.ts +992 -0
  355. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004__factory.ts +992 -0
  356. package/typechain-types/factories/contracts/token/points/index.ts +4 -0
  357. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
  358. package/typechain-types/hardhat.d.ts +360 -0
  359. package/typechain-types/index.ts +36 -4
  360. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +0 -408
@@ -0,0 +1,263 @@
1
+ import hre from "hardhat"
2
+ import { expect } from "chai"
3
+ import { parseUnits } from "ethers"
4
+
5
+ describe("PrivacyPortal failed-request recovery", function () {
6
+ async function deployPortalFixture() {
7
+ const [owner, user, other] = await hre.ethers.getSigners()
8
+
9
+ const MockFactory = await hre.ethers.getContractFactory("MockPrivacyPortalFactory")
10
+ const factory = await MockFactory.deploy(owner.address, owner.address)
11
+ await factory.waitForDeployment()
12
+
13
+ const MockERC20 = await hre.ethers.getContractFactory("MockERC20")
14
+ const underlying = await MockERC20.deploy("Mock USD", "mUSD", 6)
15
+ await underlying.waitForDeployment()
16
+
17
+ const MockPToken = await hre.ethers.getContractFactory("MockPodERC20ForPortal")
18
+ const pToken = await MockPToken.deploy()
19
+ await pToken.waitForDeployment()
20
+
21
+ const PortalImpl = await hre.ethers.getContractFactory("PrivacyPortal")
22
+ const portalImpl = await PortalImpl.deploy()
23
+ await portalImpl.waitForDeployment()
24
+
25
+ const CloneHelper = await hre.ethers.getContractFactory("CloneHelper")
26
+ const cloneHelper = await CloneHelper.deploy()
27
+ await cloneHelper.waitForDeployment()
28
+
29
+ await cloneHelper.clone(await portalImpl.getAddress())
30
+ const portalAddress = await cloneHelper.lastClone()
31
+ const portal = PortalImpl.attach(portalAddress) as Awaited<ReturnType<typeof PortalImpl.deploy>>
32
+
33
+ await portal.initialize(
34
+ await underlying.getAddress(),
35
+ await pToken.getAddress(),
36
+ 6,
37
+ false,
38
+ await factory.getAddress()
39
+ )
40
+
41
+ const amount = parseUnits("100", 6)
42
+ await underlying.mint(user.address, amount * 2n)
43
+ await underlying.connect(user).approve(await portal.getAddress(), amount * 2n)
44
+
45
+ return { owner, user, other, factory, underlying, pToken, portal, amount }
46
+ }
47
+
48
+ it("refunds locked underlying after a system-failed mint", async function () {
49
+ const { user, other, underlying, pToken, portal, amount } = await deployPortalFixture()
50
+
51
+ const tx = await portal.connect(user).deposit(user.address, amount, 0, 100, {
52
+ value: 1000,
53
+ })
54
+ const receipt = await tx.wait()
55
+ const depositLog = receipt!.logs
56
+ .map((log) => {
57
+ try {
58
+ return portal.interface.parseLog(log)
59
+ } catch {
60
+ return null
61
+ }
62
+ })
63
+ .find((parsed) => parsed?.name === "DepositRequested")
64
+ const requestId = depositLog!.args.mintRequestId as string
65
+
66
+ const feesLog = receipt!.logs
67
+ .map((log) => {
68
+ try {
69
+ return portal.interface.parseLog(log)
70
+ } catch {
71
+ return null
72
+ }
73
+ })
74
+ .find((parsed) => parsed?.name === "OperationFeesPaid")
75
+ expect(feesLog).to.not.equal(undefined)
76
+ expect(feesLog!.args.payer).to.equal(user.address)
77
+ expect(feesLog!.args.correlationId).to.equal(requestId)
78
+ expect(feesLog!.args.isDeposit).to.equal(true)
79
+ expect(feesLog!.args.isNativeWrap).to.equal(false)
80
+ expect(feesLog!.args.portalFee).to.equal(0n)
81
+ expect(feesLog!.args.podFee).to.equal(1000n)
82
+ expect(feesLog!.args.podCallbackFee).to.equal(100n)
83
+ expect(feesLog!.args.amount).to.equal(amount)
84
+
85
+ expect(await underlying.balanceOf(await portal.getAddress())).to.equal(amount)
86
+ await expect(portal.connect(user).refundFailedDeposit(requestId)).to.be.revertedWithCustomError(
87
+ portal,
88
+ "DepositMintNotFailed"
89
+ )
90
+
91
+ await pToken.markLastMintRaised()
92
+ await expect(portal.connect(user).refundFailedDeposit(requestId)).to.be.revertedWithCustomError(
93
+ portal,
94
+ "DepositMintNotFailed"
95
+ )
96
+
97
+ await pToken.markLastMintFailed()
98
+ const before = await underlying.balanceOf(user.address)
99
+ // Permissionless: a third party may trigger; funds still return to the depositor.
100
+ await expect(portal.connect(other).refundFailedDeposit(requestId))
101
+ .to.emit(portal, "DepositRefunded")
102
+ .withArgs(user.address, requestId, amount)
103
+
104
+ expect(await underlying.balanceOf(user.address)).to.equal(before + amount)
105
+ expect(await underlying.balanceOf(await portal.getAddress())).to.equal(0n)
106
+ await expect(portal.connect(user).refundFailedDeposit(requestId)).to.be.revertedWithCustomError(
107
+ portal,
108
+ "DepositEscrowInvalid"
109
+ )
110
+ })
111
+
112
+ it("marks withdrawal Failed when the pToken transfer request fails", async function () {
113
+ const { user, portal, pToken, amount } = await deployPortalFixture()
114
+
115
+ const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600)
116
+ const tx = await portal.connect(user).requestWithdrawWithPermit(
117
+ user.address,
118
+ amount,
119
+ 0,
120
+ 1000,
121
+ 100,
122
+ deadline,
123
+ 27,
124
+ hre.ethers.ZeroHash,
125
+ hre.ethers.ZeroHash,
126
+ { value: 1000 }
127
+ )
128
+ const receipt = await tx.wait()
129
+ const withdrawLog = receipt!.logs
130
+ .map((log) => {
131
+ try {
132
+ return portal.interface.parseLog(log)
133
+ } catch {
134
+ return null
135
+ }
136
+ })
137
+ .find((parsed) => parsed?.name === "WithdrawalRequested")
138
+ const withdrawalId = withdrawLog!.args.withdrawalId as string
139
+ const transferRequestId = withdrawLog!.args.transferRequestId as string
140
+
141
+ await expect(portal.cancelFailedWithdrawal(withdrawalId)).to.be.revertedWithCustomError(
142
+ portal,
143
+ "WithdrawTransferNotFailed"
144
+ )
145
+
146
+ await pToken.markLastTransferFailed()
147
+ await expect(portal.cancelFailedWithdrawal(withdrawalId))
148
+ .to.emit(portal, "WithdrawalFailed")
149
+ .withArgs(withdrawalId, transferRequestId)
150
+
151
+ const feesLog = receipt!.logs
152
+ .map((log) => {
153
+ try {
154
+ return portal.interface.parseLog(log)
155
+ } catch {
156
+ return null
157
+ }
158
+ })
159
+ .find((parsed) => parsed?.name === "OperationFeesPaid")
160
+ expect(feesLog).to.not.equal(undefined)
161
+ expect(feesLog!.args.correlationId).to.equal(withdrawalId)
162
+ expect(feesLog!.args.isDeposit).to.equal(false)
163
+ expect(feesLog!.args.portalFee).to.equal(0n)
164
+ expect(feesLog!.args.podFee).to.equal(1000n)
165
+ expect(feesLog!.args.podCallbackFee).to.equal(100n)
166
+
167
+ const withdrawal = await portal.withdrawals(withdrawalId)
168
+ expect(withdrawal.status).to.equal(3n) // WithdrawalStatus.Failed
169
+ await expect(portal.cancelFailedWithdrawal(withdrawalId)).to.be.revertedWithCustomError(
170
+ portal,
171
+ "WithdrawalNotPending"
172
+ )
173
+ await expect(portal.triggerWithdrawalRelease(withdrawalId)).to.be.revertedWithCustomError(
174
+ portal,
175
+ "WithdrawalNotPending"
176
+ )
177
+ })
178
+
179
+ it("cancels withdrawal after a system-failed pToken transfer", async function () {
180
+ const { user, portal, pToken, amount } = await deployPortalFixture()
181
+
182
+ const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600)
183
+ const tx = await portal.connect(user).requestWithdrawWithPermit(
184
+ user.address,
185
+ amount,
186
+ 0,
187
+ 1000,
188
+ 100,
189
+ deadline,
190
+ 27,
191
+ hre.ethers.ZeroHash,
192
+ hre.ethers.ZeroHash,
193
+ { value: 1000 }
194
+ )
195
+ const receipt = await tx.wait()
196
+ const withdrawLog = receipt!.logs
197
+ .map((log) => {
198
+ try {
199
+ return portal.interface.parseLog(log)
200
+ } catch {
201
+ return null
202
+ }
203
+ })
204
+ .find((parsed) => parsed?.name === "WithdrawalRequested")
205
+ const withdrawalId = withdrawLog!.args.withdrawalId as string
206
+ const transferRequestId = withdrawLog!.args.transferRequestId as string
207
+
208
+ await pToken.markLastTransferSystemFailed()
209
+ await expect(portal.cancelFailedWithdrawal(withdrawalId))
210
+ .to.emit(portal, "WithdrawalFailed")
211
+ .withArgs(withdrawalId, transferRequestId)
212
+
213
+ const withdrawal = await portal.withdrawals(withdrawalId)
214
+ expect(withdrawal.status).to.equal(3n) // WithdrawalStatus.Failed
215
+ })
216
+
217
+ it("rescues native and ERC20 to the factory rescue recipient while paused", async function () {
218
+ const { owner, other, factory, underlying, portal, pToken } = await deployPortalFixture()
219
+ const rescueTo = other.address
220
+ await factory.setRescueRecipient(rescueTo)
221
+
222
+ await owner.sendTransaction({ to: await portal.getAddress(), value: parseUnits("1", 18) })
223
+ await underlying.mint(await portal.getAddress(), parseUnits("50", 6))
224
+
225
+ await expect(portal.connect(owner).rescueNative(parseUnits("1", 18))).to.be.revertedWithCustomError(
226
+ portal,
227
+ "ExpectedPause"
228
+ )
229
+
230
+ await portal.connect(owner).pause()
231
+ const rescueNativeAmount = parseUnits("0.4", 18)
232
+ await expect(portal.connect(owner).rescueNative(rescueNativeAmount))
233
+ .to.emit(portal, "NativeRescued")
234
+ .withArgs(rescueTo, rescueNativeAmount)
235
+
236
+ const rescueErc20Amount = parseUnits("25", 6)
237
+ await expect(portal.connect(owner).rescueERC20(await underlying.getAddress(), rescueErc20Amount))
238
+ .to.emit(portal, "ERC20Rescued")
239
+ .withArgs(await underlying.getAddress(), rescueTo, rescueErc20Amount)
240
+
241
+ await expect(
242
+ portal.connect(owner).rescueERC20(await pToken.getAddress(), 1)
243
+ ).to.be.revertedWithCustomError(portal, "CannotRescuePToken")
244
+ })
245
+
246
+ it("sweeps portal fees to the factory fee recipient", async function () {
247
+ const { owner, user, factory, portal, underlying, amount } = await deployPortalFixture()
248
+ expect(await factory.feeRecipient()).to.equal(owner.address)
249
+
250
+ await portal.connect(owner).setDepositFee(100, 0, parseUnits("1", 18))
251
+ await underlying.connect(user).approve(await portal.getAddress(), amount)
252
+ await portal.connect(user).deposit(user.address, amount, 100, 100, { value: 1100 })
253
+
254
+ expect(await portal.accumulatedPortalFees()).to.equal(100n)
255
+ const before = await hre.ethers.provider.getBalance(owner.address)
256
+ const tx = await portal.connect(owner).withdrawPortalFees(100)
257
+ const receipt = await tx.wait()
258
+ const gas = receipt!.gasUsed * receipt!.gasPrice
259
+ const after = await hre.ethers.provider.getBalance(owner.address)
260
+ expect(after + gas - before).to.equal(100n)
261
+ expect(await portal.accumulatedPortalFees()).to.equal(0n)
262
+ })
263
+ })
@@ -37,9 +37,11 @@ function validateEnvironment() {
37
37
  * @returns {ethers.Wallet}
38
38
  */
39
39
  function makeSdkWallet() {
40
- const raw = process.env.PRIVATE_KEY;
41
- if (!raw) throw new Error('PRIVATE_KEY not set in .env');
42
- const pk = raw.startsWith('0x') ? raw : '0x' + raw;
40
+ const raw =
41
+ process.env.PRIVATE_KEY ||
42
+ (process.env.SIGNING_KEYS ? process.env.SIGNING_KEYS.split(",")[0]?.trim() : null);
43
+ if (!raw) throw new Error("PRIVATE_KEY (or SIGNING_KEYS) not set in .env");
44
+ const pk = raw.startsWith("0x") ? raw : "0x" + raw;
43
45
  return new ethers.Wallet(pk, ethers.provider);
44
46
  }
45
47
 
@@ -0,0 +1,163 @@
1
+ import hre from "hardhat"
2
+ import { expect } from "chai"
3
+ import { setupAccounts } from "../accounts"
4
+
5
+ const gasLimit = 12000000
6
+ const MAX_INT256 = (1n << 255n) - 1n
7
+ const MIN_INT256 = -(1n << 255n)
8
+
9
+ type Deployed = {
10
+ contract: any
11
+ owner: any
12
+ }
13
+
14
+ async function deployNamed(name: string): Promise<Deployed> {
15
+ const [owner] = await setupAccounts()
16
+ const factory = await hre.ethers.getContractFactory(name, owner as any)
17
+ const contract = await factory.deploy({ gasLimit })
18
+ await contract.waitForDeployment()
19
+ return { contract, owner }
20
+ }
21
+
22
+ async function expectRevert(txPromise: Promise<any>, owner: any) {
23
+ const tx = await txPromise
24
+ try {
25
+ await tx.wait()
26
+ expect.fail("expected transaction to revert")
27
+ } catch (e) {
28
+ const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
29
+ expect(receipt?.status).to.equal(0)
30
+ }
31
+ }
32
+
33
+ describe("Checked Signed Arithmetic", function () {
34
+ describe("narrow (8/16/32/64)", function () {
35
+ let deployment: Deployed
36
+
37
+ before(async function () {
38
+ deployment = await deployNamed("ArithmeticSignedNarrowTestsContract")
39
+ })
40
+
41
+ for (const func of [
42
+ "basicSigned8Test",
43
+ "basicSigned16Test",
44
+ "basicSigned32Test",
45
+ "basicSigned64Test",
46
+ "minDivMinusOne8Test",
47
+ ]) {
48
+ it(`${func} should preserve signed integer semantics`, async function () {
49
+ const { contract } = deployment
50
+ const tx = await contract.getFunction(func)({ gasLimit })
51
+ const receipt = await tx.wait()
52
+ expect(receipt?.status).to.equal(1)
53
+ })
54
+ }
55
+
56
+ for (const func of [
57
+ "checkedAdd8OverflowTest",
58
+ "checkedSub8UnderflowTest",
59
+ "checkedMul8OverflowTest",
60
+ ]) {
61
+ it(`${func} should revert`, async function () {
62
+ const { contract, owner } = deployment
63
+ await expectRevert(contract.getFunction(func)({ gasLimit }), owner)
64
+ })
65
+ }
66
+ })
67
+
68
+ describe("int128", function () {
69
+ let deployment: Deployed
70
+
71
+ before(async function () {
72
+ deployment = await deployNamed("ArithmeticSigned128TestsContract")
73
+ })
74
+
75
+ for (const func of [
76
+ "basicSigned128Test",
77
+ "minDivMinusOne128Test",
78
+ "plainMul128WrapTest",
79
+ ]) {
80
+ it(`${func} should preserve signed integer semantics`, async function () {
81
+ const { contract } = deployment
82
+ const tx = await contract.getFunction(func)({ gasLimit })
83
+ const receipt = await tx.wait()
84
+ expect(receipt?.status).to.equal(1)
85
+ })
86
+ }
87
+
88
+ for (const func of [
89
+ "checkedAdd128OverflowTest",
90
+ "checkedSub128UnderflowTest",
91
+ "checkedMul128OverflowTest",
92
+ ]) {
93
+ it(`${func} should revert`, async function () {
94
+ const { contract, owner } = deployment
95
+ await expectRevert(contract.getFunction(func)({ gasLimit }), owner)
96
+ })
97
+ }
98
+ })
99
+
100
+ describe("int256", function () {
101
+ let deployment: Deployed
102
+
103
+ before(async function () {
104
+ deployment = await deployNamed("ArithmeticSigned256TestsContract")
105
+ })
106
+
107
+ for (const func of [
108
+ "basicSigned256ArithmeticTest",
109
+ "basicSigned256ComparisonTest",
110
+ "basicSigned256MuxAndHelpersTest",
111
+ "minDivMinusOne256Test",
112
+ "plainMul256WrapTest",
113
+ ]) {
114
+ it(`${func} should preserve signed integer semantics`, async function () {
115
+ const { contract } = deployment
116
+ const tx = await contract.getFunction(func)({ gasLimit })
117
+ const receipt = await tx.wait()
118
+ expect(receipt?.status).to.equal(1)
119
+ })
120
+ }
121
+
122
+ it("checkedAdd should return an in-range signed result", async function () {
123
+ const { contract } = deployment
124
+ const tx = await contract.getFunction("checkedAddTest")(100n, -40n, { gasLimit })
125
+ await tx.wait()
126
+ expect(await contract.getFunction("getAddResult")()).to.equal(60n)
127
+ })
128
+
129
+ it("checkedAdd should revert on signed overflow", async function () {
130
+ const { contract, owner } = deployment
131
+ await expectRevert(contract.getFunction("checkedAddTest")(MAX_INT256, 1n, { gasLimit }), owner)
132
+ })
133
+
134
+ it("checkedSub should return an in-range signed result", async function () {
135
+ const { contract } = deployment
136
+ const tx = await contract.getFunction("checkedSubTest")(-100n, -40n, { gasLimit })
137
+ await tx.wait()
138
+ expect(await contract.getFunction("getSubResult")()).to.equal(-60n)
139
+ })
140
+
141
+ it("checkedSub should revert on signed underflow", async function () {
142
+ const { contract, owner } = deployment
143
+ await expectRevert(contract.getFunction("checkedSubTest")(MIN_INT256, 1n, { gasLimit }), owner)
144
+ })
145
+
146
+ it("checkedMul should return an in-range signed result", async function () {
147
+ const { contract } = deployment
148
+ const tx = await contract.getFunction("checkedMulTest")(-12n, 9n, { gasLimit })
149
+ await tx.wait()
150
+ expect(await contract.getFunction("getMulResult")()).to.equal(-108n)
151
+ })
152
+
153
+ it("checkedMul should revert on positive signed overflow", async function () {
154
+ const { contract, owner } = deployment
155
+ await expectRevert(contract.getFunction("checkedMulTest")(1n << 128n, 1n << 128n, { gasLimit }), owner)
156
+ })
157
+
158
+ it("checkedMul should revert on min-int negation overflow", async function () {
159
+ const { contract, owner } = deployment
160
+ await expectRevert(contract.getFunction("checkedMulTest")(MIN_INT256, -1n, { gasLimit }), owner)
161
+ })
162
+ })
163
+ })
@@ -420,7 +420,7 @@ describe("Negative Test Cases - 8/16/32/64-bit", function () {
420
420
  it("Should handle subtraction resulting in zero", async function () {
421
421
  const [owner] = await setupAccounts()
422
422
 
423
- const factory = await hre.ethers.getContractFactory("ArithmeticTestsContract", owner as any)
423
+ const factory = await hre.ethers.getContractFactory("ArithmeticSubTestsContract", owner as any)
424
424
  const contract = await factory.deploy({ gasLimit })
425
425
  await contract.waitForDeployment()
426
426
 
@@ -438,7 +438,7 @@ describe("Negative Test Cases - 8/16/32/64-bit", function () {
438
438
  it("Should handle max value operations for 8-bit", async function () {
439
439
  const [owner] = await setupAccounts()
440
440
 
441
- const factory = await hre.ethers.getContractFactory("ArithmeticTestsContract", owner as any)
441
+ const factory = await hre.ethers.getContractFactory("ArithmeticAddTestsContract", owner as any)
442
442
  const contract = await factory.deploy({ gasLimit })
443
443
  await contract.waitForDeployment()
444
444
 
@@ -457,7 +457,7 @@ describe("Negative Test Cases - 8/16/32/64-bit", function () {
457
457
  it("Should handle max value operations for 16-bit", async function () {
458
458
  const [owner] = await setupAccounts()
459
459
 
460
- const factory = await hre.ethers.getContractFactory("ArithmeticTestsContract", owner as any)
460
+ const factory = await hre.ethers.getContractFactory("ArithmeticAddTestsContract", owner as any)
461
461
  const contract = await factory.deploy({ gasLimit })
462
462
  await contract.waitForDeployment()
463
463
 
@@ -60,12 +60,12 @@ const bool_a = true
60
60
  const bool_b = false
61
61
  const [a, b] = params
62
62
  describe("Precompile", function () {
63
- buildTest("ArithmeticTestsContract", "addTest", "getAddResult", params, a + b)
64
- buildTest("ArithmeticTestsContract", "checkedAddTest", "getAddResult", params, a + b)
65
- buildTest("ArithmeticTestsContract", "subTest", "getSubResult", params, a - b)
66
- buildTest("ArithmeticTestsContract", "checkedSubTest", "getSubResult", params, a - b)
67
- buildTest("ArithmeticTestsContract", "mulTest", "getMulResult", params, a * b)
68
- buildTest("ArithmeticTestsContract", "checkedMulTest", "getMulResult", params, a * b)
63
+ buildTest("ArithmeticAddTestsContract", "addTest", "getAddResult", params, a + b)
64
+ buildTest("ArithmeticAddTestsContract", "checkedAddTest", "getAddResult", params, a + b)
65
+ buildTest("ArithmeticSubTestsContract", "subTest", "getSubResult", params, a - b)
66
+ buildTest("ArithmeticSubTestsContract", "checkedSubTest", "getSubResult", params, a - b)
67
+ buildTest("ArithmeticMulTestsContract", "mulTest", "getMulResult", params, a * b)
68
+ buildTest("ArithmeticMulTestsContract", "checkedMulTest", "getMulResult", params, a * b)
69
69
 
70
70
  buildTest("MiscellaneousTestsContract", "divTest", "getDivResult", params, a / b)
71
71
  buildTest("MiscellaneousTestsContract", "remTest", "getRemResult", params, a % b)
@@ -206,7 +206,7 @@ export interface AccessControl extends BaseContract {
206
206
  >;
207
207
 
208
208
  renounceRole: TypedContractMethod<
209
- [role: BytesLike, account: AddressLike],
209
+ [role: BytesLike, callerConfirmation: AddressLike],
210
210
  [void],
211
211
  "nonpayable"
212
212
  >;
@@ -250,7 +250,7 @@ export interface AccessControl extends BaseContract {
250
250
  getFunction(
251
251
  nameOrSignature: "renounceRole"
252
252
  ): TypedContractMethod<
253
- [role: BytesLike, account: AddressLike],
253
+ [role: BytesLike, callerConfirmation: AddressLike],
254
254
  [void],
255
255
  "nonpayable"
256
256
  >;
@@ -186,7 +186,7 @@ export interface IAccessControl extends BaseContract {
186
186
  >;
187
187
 
188
188
  renounceRole: TypedContractMethod<
189
- [role: BytesLike, account: AddressLike],
189
+ [role: BytesLike, callerConfirmation: AddressLike],
190
190
  [void],
191
191
  "nonpayable"
192
192
  >;
@@ -221,7 +221,7 @@ export interface IAccessControl extends BaseContract {
221
221
  getFunction(
222
222
  nameOrSignature: "renounceRole"
223
223
  ): TypedContractMethod<
224
- [role: BytesLike, account: AddressLike],
224
+ [role: BytesLike, callerConfirmation: AddressLike],
225
225
  [void],
226
226
  "nonpayable"
227
227
  >;