@coti-io/coti-contracts 1.1.0 → 1.3.0

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 (433) hide show
  1. package/.github/workflows/npm-publish.yml +19 -15
  2. package/README.md +3 -1
  3. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.sol +452 -0
  4. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.sol +490 -0
  5. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +432 -0
  6. package/contracts/disperse/disperseToken/MintDisperser.sol +120 -0
  7. package/contracts/disperse/disperseToken/TokenDisperser.sol +139 -0
  8. package/contracts/messaging/PrivateMessaging.sol +456 -0
  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 +19 -0
  13. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +18 -0
  14. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +18 -0
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +44 -0
  16. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +23 -0
  17. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +29 -0
  18. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +9 -4
  19. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +39 -0
  20. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +29 -0
  21. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +18 -0
  22. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +12 -0
  23. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +123 -0
  24. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +122 -0
  25. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +65 -0
  26. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +65 -0
  27. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +64 -0
  28. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +64 -0
  29. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +98 -0
  30. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +98 -0
  31. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +44 -0
  32. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +44 -0
  33. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +55 -0
  34. package/contracts/mocks/utils/mpc/MinimalProxy.sol +27 -0
  35. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +267 -0
  36. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +334 -0
  37. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +24 -0
  38. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +24 -0
  39. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +93 -0
  40. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +116 -0
  41. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +157 -0
  42. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +133 -0
  43. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +137 -0
  44. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +32 -0
  45. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +32 -0
  46. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +36 -0
  47. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +36 -0
  48. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +29 -0
  49. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +29 -0
  50. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +32 -0
  51. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +32 -0
  52. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +59 -0
  53. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +63 -0
  54. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +99 -0
  55. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +7 -6
  56. package/contracts/node/CotiNodeRewards.sol +199 -0
  57. package/contracts/node/SoulboundNodeNFT.sol +519 -0
  58. package/contracts/oracle/CotiPriceConsumer.sol +103 -0
  59. package/contracts/oracle/ICotiPriceConsumer.sol +15 -0
  60. package/contracts/oracle/IStdReference.sol +26 -0
  61. package/contracts/privacyBridge/PrivacyBridge.sol +600 -0
  62. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +316 -0
  63. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +333 -0
  64. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +22 -0
  65. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +23 -0
  66. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +23 -0
  67. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +23 -0
  68. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +23 -0
  69. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +23 -0
  70. package/contracts/token/PrivateERC20/IPrivateERC20.sol +273 -40
  71. package/contracts/token/PrivateERC20/ITokenReceiver.sol +17 -0
  72. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +20 -0
  73. package/contracts/token/PrivateERC20/PrivateERC20.sol +861 -152
  74. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +17 -0
  75. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +13 -0
  76. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +17 -0
  77. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +17 -0
  78. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +17 -0
  79. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +17 -0
  80. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +13 -0
  81. package/contracts/utils/mpc/MpcCore.sol +10780 -4962
  82. package/contracts/utils/mpc/MpcInterface.sol +7 -2
  83. package/hardhat/gasPriceBump.ts +60 -0
  84. package/hardhat.config.ts +63 -12
  85. package/package.json +22 -4
  86. package/scripts/add-bridge-operators.cjs +87 -0
  87. package/scripts/deploy-coti-price-consumer-mainnet.cjs +49 -0
  88. package/scripts/deployCotiNodeRewards.ts +51 -0
  89. package/scripts/deploySoulboundNodeNFT.ts +57 -0
  90. package/scripts/redeploy-private-and-bridges.cjs +201 -0
  91. package/scripts/set-bridge-limits-mainnet.cjs +177 -0
  92. package/scripts/verify-mainnet-private-bridges.cjs +289 -0
  93. package/sonar-project.properties +11 -0
  94. package/test/messaging/PrivateMessaging.test.ts +158 -0
  95. package/test/privacyBridge/UnifiedPrivacyBridges.test.cjs +1663 -0
  96. package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +250 -0
  97. package/test/token/PrivateERC20/PrivateERC20.test.ts +1109 -268
  98. package/test/utils/mpc/Bitwise128.test.ts +92 -0
  99. package/test/utils/mpc/Bitwise256.test.ts +101 -0
  100. package/test/utils/mpc/BuildInputText128.test.ts +398 -0
  101. package/test/utils/mpc/CheckedArithmetic128.test.ts +45 -0
  102. package/test/utils/mpc/CheckedArithmetic256.test.ts +45 -0
  103. package/test/utils/mpc/Comparison128.test.ts +48 -0
  104. package/test/utils/mpc/Comparison256.test.ts +48 -0
  105. package/test/utils/mpc/InvalidCiphertext.test.ts +179 -0
  106. package/test/utils/mpc/InvalidCiphertext128.test.ts +179 -0
  107. package/test/utils/mpc/InvalidCiphertext256.test.ts +201 -0
  108. package/test/utils/mpc/InvalidTransfer128.test.ts +166 -0
  109. package/test/utils/mpc/InvalidTransfer256.test.ts +158 -0
  110. package/test/utils/mpc/MinMax128.test.ts +44 -0
  111. package/test/utils/mpc/MinMax256.test.ts +44 -0
  112. package/test/utils/mpc/MinimalProxyDemo.test.ts +280 -0
  113. package/test/utils/mpc/MpcOperations.test.ts +589 -0
  114. package/test/utils/mpc/MpcOperations128.test.ts +632 -0
  115. package/test/utils/mpc/Mux128.test.ts +41 -0
  116. package/test/utils/mpc/Mux256.test.ts +41 -0
  117. package/test/utils/mpc/NegativeCases.test.ts +478 -0
  118. package/test/utils/mpc/NegativeCases128.test.ts +237 -0
  119. package/test/utils/mpc/NegativeCases256.test.ts +236 -0
  120. package/test/utils/mpc/OnBoard128.test.ts +90 -0
  121. package/test/utils/mpc/OnBoard256.test.ts +114 -0
  122. package/test/utils/mpc/Precompile128.test.ts +51 -0
  123. package/test/utils/mpc/Precompile256.test.ts +115 -0
  124. package/test/utils/mpc/ProxyValidation.test.ts +199 -0
  125. package/test/utils/mpc/Random128.test.ts +47 -0
  126. package/test/utils/mpc/Random256.test.ts +47 -0
  127. package/test/utils/mpc/Shift128.test.ts +41 -0
  128. package/test/utils/mpc/Shift256.test.ts +41 -0
  129. package/test/utils/mpc/Transfer128.test.ts +46 -0
  130. package/test/utils/mpc/Transfer256.test.ts +46 -0
  131. package/test/utils/mpc/TransferWithAllowance128.test.ts +48 -0
  132. package/test/utils/mpc/TransferWithAllowance256.test.ts +48 -0
  133. package/test/utils/mpc/UpgradeablePrivacyProxy.test.ts +307 -0
  134. package/test/utils/mpc/ValidateCiphertext.test.ts +221 -0
  135. package/test/utils/mpc/ValidateCiphertext256.test.ts +161 -0
  136. package/test/utils/mpc/ValidateCiphertext256Decryption.test.ts +383 -0
  137. package/test/utils/mpc/WalletEncryptionFailures.test.ts +494 -0
  138. package/test/utils/privateErc20Helpers.ts +97 -0
  139. package/typechain-types/@openzeppelin/contracts/access/AccessControl.ts +324 -0
  140. package/typechain-types/@openzeppelin/contracts/access/AccessControlEnumerable.ts +361 -0
  141. package/typechain-types/@openzeppelin/contracts/access/IAccessControl.ts +292 -0
  142. package/typechain-types/@openzeppelin/contracts/access/IAccessControlEnumerable.ts +329 -0
  143. package/typechain-types/@openzeppelin/contracts/access/Ownable.ts +153 -0
  144. package/typechain-types/@openzeppelin/contracts/access/index.ts +8 -0
  145. package/typechain-types/@openzeppelin/contracts/index.ts +4 -0
  146. package/typechain-types/@openzeppelin/contracts/security/Pausable.ts +150 -0
  147. package/typechain-types/@openzeppelin/contracts/security/index.ts +4 -0
  148. package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +330 -0
  149. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +262 -0
  150. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +286 -0
  151. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.ts +143 -0
  152. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +5 -0
  153. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +7 -0
  154. package/typechain-types/@openzeppelin/contracts/token/ERC721/ERC721.ts +420 -0
  155. package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.ts +420 -0
  156. package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
  157. package/typechain-types/@openzeppelin/contracts/token/ERC721/index.ts +3 -0
  158. package/typechain-types/@openzeppelin/contracts/token/index.ts +2 -0
  159. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.ts +679 -0
  160. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.ts +735 -0
  161. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.ts +734 -0
  162. package/typechain-types/contracts/disperse/coinByRatio/index.ts +6 -0
  163. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20.ts +97 -0
  164. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable.ts +95 -0
  165. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +228 -0
  166. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +6 -0
  167. package/typechain-types/contracts/disperse/disperseToken/TokenDisperser.ts +191 -0
  168. package/typechain-types/contracts/disperse/disperseToken/index.ts +6 -0
  169. package/typechain-types/contracts/disperse/index.ts +7 -0
  170. package/typechain-types/contracts/index.ts +10 -0
  171. package/typechain-types/contracts/messaging/PrivateMessaging.ts +871 -0
  172. package/typechain-types/contracts/messaging/index.ts +4 -0
  173. package/typechain-types/contracts/mocks/index.ts +4 -0
  174. package/typechain-types/contracts/mocks/messaging/PrivateMessagingHarness.ts +951 -0
  175. package/typechain-types/contracts/mocks/messaging/index.ts +4 -0
  176. package/typechain-types/contracts/mocks/oracle/CotiPriceConsumerMock.ts +163 -0
  177. package/typechain-types/contracts/mocks/oracle/index.ts +4 -0
  178. package/typechain-types/contracts/mocks/token/ERC20DecimalsMock.ts +349 -0
  179. package/typechain-types/contracts/mocks/token/ERC20Mock.ts +368 -0
  180. package/typechain-types/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.ts +108 -0
  181. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.ts +1892 -0
  182. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.ts +1296 -0
  183. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.ts +1270 -0
  184. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.ts +166 -0
  185. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +827 -78
  186. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted.ts +102 -0
  187. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock.ts +154 -0
  188. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
  189. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.ts +155 -0
  190. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.ts +107 -0
  191. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.ts +100 -0
  192. package/typechain-types/contracts/mocks/token/PrivateERC20/index.ts +10 -0
  193. package/typechain-types/contracts/mocks/token/index.ts +2 -0
  194. package/typechain-types/contracts/mocks/utils/mpc/{Arithmetic128BitTestsContract.ts → Arithmetic128TestsContract.ts} +96 -126
  195. package/typechain-types/contracts/mocks/utils/mpc/{Arithmetic256BitTestsContract.ts → Arithmetic256TestsContract.ts} +97 -133
  196. package/typechain-types/contracts/mocks/utils/mpc/{Bitwise128BitTestsContract.ts → Bitwise128TestsContract.ts} +52 -59
  197. package/typechain-types/contracts/mocks/utils/mpc/{Bitwise256BitTestsContract.ts → Bitwise256TestsContract.ts} +52 -59
  198. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.ts +206 -0
  199. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.ts +206 -0
  200. package/typechain-types/contracts/mocks/utils/mpc/{Comparison128BitTestsContract.ts → Comparison128TestsContract.ts} +115 -97
  201. package/typechain-types/contracts/mocks/utils/mpc/{Comparison256BitTestsContract.ts → Comparison256TestsContract.ts} +115 -97
  202. package/typechain-types/contracts/mocks/utils/mpc/MinMax128TestsContract.ts +142 -0
  203. package/typechain-types/contracts/mocks/utils/mpc/MinMax256TestsContract.ts +142 -0
  204. package/typechain-types/contracts/mocks/utils/mpc/MinimalImplementation.ts +259 -0
  205. package/typechain-types/contracts/mocks/utils/mpc/MinimalProxy.ts +90 -0
  206. package/typechain-types/contracts/mocks/utils/mpc/MpcOperations128TestContract.ts +388 -0
  207. package/typechain-types/contracts/mocks/utils/mpc/MpcOperationsTestContract.ts +455 -0
  208. package/typechain-types/contracts/mocks/utils/mpc/Mux128TestsContract.ts +109 -0
  209. package/typechain-types/contracts/mocks/utils/mpc/Mux256TestsContract.ts +109 -0
  210. package/typechain-types/contracts/mocks/utils/mpc/OnBoard128TestsContract.ts +166 -0
  211. package/typechain-types/contracts/mocks/utils/mpc/OnBoard256TestsContract.ts +194 -0
  212. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV1.ts +385 -0
  213. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV2.ts +441 -0
  214. package/typechain-types/contracts/mocks/utils/mpc/PrivacyProxy.ts +201 -0
  215. package/typechain-types/contracts/mocks/utils/mpc/Random128TestsContract.ts +131 -0
  216. package/typechain-types/contracts/mocks/utils/mpc/Random256TestsContract.ts +131 -0
  217. package/typechain-types/contracts/mocks/utils/mpc/Shift128TestsContract.ts +142 -0
  218. package/typechain-types/contracts/mocks/utils/mpc/Shift256TestsContract.ts +142 -0
  219. package/typechain-types/contracts/mocks/utils/mpc/Transfer128TestsContract.ts +109 -0
  220. package/typechain-types/contracts/mocks/utils/mpc/Transfer256TestsContract.ts +109 -0
  221. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.ts +128 -0
  222. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.ts +128 -0
  223. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.ts +198 -0
  224. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.ts +182 -0
  225. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.ts +257 -0
  226. package/typechain-types/contracts/mocks/utils/mpc/index.ts +32 -8
  227. package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.ts +6 -6
  228. package/typechain-types/contracts/node/CotiNodeRewards.ts +566 -0
  229. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/IERC5192.ts +123 -0
  230. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT.ts +975 -0
  231. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
  232. package/typechain-types/contracts/node/index.ts +6 -0
  233. package/typechain-types/contracts/oracle/CotiPriceConsumer.ts +256 -0
  234. package/typechain-types/contracts/oracle/ICotiPriceConsumer.ts +119 -0
  235. package/typechain-types/contracts/oracle/IStdReference.ts +136 -0
  236. package/typechain-types/contracts/oracle/index.ts +6 -0
  237. package/typechain-types/contracts/privacyBridge/PrivacyBridge.ts +1628 -0
  238. package/typechain-types/contracts/privacyBridge/PrivacyBridgeCotiNative.ts +1870 -0
  239. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals.ts +84 -0
  240. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20.ts +1892 -0
  241. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
  242. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDCe.ts +1892 -0
  243. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDT.ts +1892 -0
  244. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWADA.ts +1892 -0
  245. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWBTC.ts +1892 -0
  246. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWETH.ts +1892 -0
  247. package/typechain-types/contracts/privacyBridge/PrivacyBridgegCoti.ts +1892 -0
  248. package/typechain-types/contracts/privacyBridge/index.ts +13 -0
  249. package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +507 -70
  250. package/typechain-types/contracts/token/PrivateERC20/ITokenReceiver.ts +100 -0
  251. package/typechain-types/contracts/token/PrivateERC20/ITokenReceiverEncrypted.ts +99 -0
  252. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +833 -68
  253. package/typechain-types/contracts/token/PrivateERC20/index.ts +4 -0
  254. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.ts +1270 -0
  255. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTI.ts +1270 -0
  256. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.ts +1270 -0
  257. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.ts +1270 -0
  258. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.ts +1270 -0
  259. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.ts +1270 -0
  260. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.ts +1270 -0
  261. package/typechain-types/contracts/token/PrivateERC20/tokens/index.ts +10 -0
  262. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +111 -10
  263. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControlEnumerable__factory.ts +276 -0
  264. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControl__factory.ts +229 -0
  265. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControlEnumerable__factory.ts +244 -0
  266. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControl__factory.ts +197 -0
  267. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +74 -0
  268. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +8 -0
  269. package/typechain-types/factories/@openzeppelin/contracts/index.ts +2 -0
  270. package/typechain-types/factories/@openzeppelin/contracts/security/Pausable__factory.ts +61 -0
  271. package/typechain-types/factories/@openzeppelin/contracts/security/index.ts +4 -0
  272. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +356 -0
  273. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +205 -0
  274. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +247 -0
  275. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit__factory.ts +100 -0
  276. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +5 -0
  277. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +6 -0
  278. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +416 -0
  279. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata__factory.ts +355 -0
  280. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
  281. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/index.ts +2 -0
  282. package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +1 -0
  283. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1__factory.ts +791 -0
  284. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow__factory.ts +711 -0
  285. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +759 -0
  286. package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +6 -0
  287. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20__factory.ts +43 -0
  288. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable__factory.ts +35 -0
  289. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +203 -0
  290. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +6 -0
  291. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +198 -0
  292. package/typechain-types/factories/contracts/disperse/disperseToken/index.ts +5 -0
  293. package/typechain-types/factories/contracts/disperse/index.ts +5 -0
  294. package/typechain-types/factories/contracts/index.ts +5 -0
  295. package/typechain-types/factories/contracts/messaging/PrivateMessaging__factory.ts +1035 -0
  296. package/typechain-types/factories/contracts/messaging/index.ts +4 -0
  297. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  298. package/typechain-types/factories/contracts/mocks/index.ts +2 -0
  299. package/typechain-types/factories/contracts/mocks/messaging/PrivateMessagingHarness__factory.ts +1161 -0
  300. package/typechain-types/factories/contracts/mocks/messaging/index.ts +4 -0
  301. package/typechain-types/factories/contracts/mocks/oracle/CotiPriceConsumerMock__factory.ts +159 -0
  302. package/typechain-types/factories/contracts/mocks/oracle/index.ts +4 -0
  303. package/typechain-types/factories/contracts/mocks/token/ERC20DecimalsMock__factory.ts +394 -0
  304. package/typechain-types/factories/contracts/mocks/token/ERC20Mock__factory.ts +392 -0
  305. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock__factory.ts +125 -0
  306. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock__factory.ts +1797 -0
  307. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock__factory.ts +1514 -0
  308. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock__factory.ts +1466 -0
  309. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock__factory.ts +165 -0
  310. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +975 -127
  311. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted__factory.ts +54 -0
  312. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock__factory.ts +159 -0
  313. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
  314. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock__factory.ts +164 -0
  315. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock__factory.ts +130 -0
  316. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock__factory.ts +102 -0
  317. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/index.ts +9 -0
  318. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  319. package/typechain-types/factories/contracts/mocks/token/index.ts +2 -0
  320. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +330 -0
  321. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +330 -0
  322. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  323. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +184 -0
  324. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +184 -0
  325. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  326. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +203 -0
  327. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +203 -0
  328. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  329. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +295 -0
  330. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  331. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +295 -0
  332. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  333. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +147 -0
  334. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +147 -0
  335. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  336. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +263 -0
  337. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +104 -0
  338. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  339. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  340. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +723 -0
  341. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1410 -0
  342. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +115 -0
  343. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +115 -0
  344. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  345. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +175 -0
  346. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +205 -0
  347. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +521 -0
  348. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +648 -0
  349. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +179 -0
  350. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +131 -0
  351. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +131 -0
  352. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +147 -0
  353. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +147 -0
  354. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  355. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  356. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +135 -0
  357. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +135 -0
  358. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  359. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  360. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +154 -0
  361. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +154 -0
  362. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  363. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  364. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  365. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  366. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  367. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  368. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +190 -0
  369. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +210 -0
  370. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +260 -0
  371. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +32 -8
  372. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +10 -28
  373. package/typechain-types/factories/contracts/node/CotiNodeRewards__factory.ts +549 -0
  374. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/IERC5192__factory.ts +54 -0
  375. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT__factory.ts +947 -0
  376. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
  377. package/typechain-types/factories/contracts/node/index.ts +5 -0
  378. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
  379. package/typechain-types/factories/contracts/oracle/CotiPriceConsumer__factory.ts +295 -0
  380. package/typechain-types/factories/contracts/oracle/ICotiPriceConsumer__factory.ts +73 -0
  381. package/typechain-types/factories/contracts/oracle/IStdReference__factory.ts +107 -0
  382. package/typechain-types/factories/contracts/oracle/index.ts +6 -0
  383. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeCotiNative__factory.ts +1676 -0
  384. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals__factory.ts +38 -0
  385. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20__factory.ts +1678 -0
  386. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
  387. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDCe__factory.ts +1782 -0
  388. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDT__factory.ts +1782 -0
  389. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWADA__factory.ts +1782 -0
  390. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWBTC__factory.ts +1782 -0
  391. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWETH__factory.ts +1782 -0
  392. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridge__factory.ts +1367 -0
  393. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgegCoti__factory.ts +1782 -0
  394. package/typechain-types/factories/contracts/privacyBridge/index.ts +12 -0
  395. package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +639 -61
  396. package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiverEncrypted__factory.ts +53 -0
  397. package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiver__factory.ts +54 -0
  398. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +986 -120
  399. package/typechain-types/factories/contracts/token/PrivateERC20/index.ts +3 -0
  400. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC__factory.ts +1445 -0
  401. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken__factory.ts +1451 -0
  402. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTI__factory.ts +1442 -0
  403. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateTetherUSD__factory.ts +1445 -0
  404. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedADA__factory.ts +1445 -0
  405. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC__factory.ts +1445 -0
  406. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedEther__factory.ts +1451 -0
  407. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/index.ts +10 -0
  408. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
  409. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +126 -0
  410. package/typechain-types/hardhat.d.ts +1772 -278
  411. package/typechain-types/index.ts +182 -16
  412. package/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.sol +0 -260
  413. package/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.sol +0 -264
  414. package/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.sol +0 -91
  415. package/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.sol +0 -91
  416. package/contracts/mocks/utils/mpc/Comparison128BitTestsContract.sol +0 -158
  417. package/contracts/mocks/utils/mpc/Comparison256BitTestsContract.sol +0 -158
  418. package/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.sol +0 -185
  419. package/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.sol +0 -190
  420. package/contracts/mocks/utils/mpc/README.md +0 -486
  421. package/test/utils/mpc/Unsigned128BitIntegers.test.ts +0 -945
  422. package/test/utils/mpc/Unsigned256BitIntegers.test.ts +0 -1124
  423. package/test/utils/mpc/helpers.ts +0 -77
  424. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.ts +0 -302
  425. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.ts +0 -322
  426. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract__factory.ts +0 -349
  427. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract__factory.ts +0 -364
  428. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128BitTestsContract__factory.ts +0 -182
  429. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256BitTestsContract__factory.ts +0 -182
  430. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128BitTestsContract__factory.ts +0 -255
  431. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256BitTestsContract__factory.ts +0 -255
  432. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract__factory.ts +0 -332
  433. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract__factory.ts +0 -380
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.19;
4
+
5
+ import "../../../token/PrivateERC20/IPrivateERC20.sol";
6
+ import "../../../utils/mpc/MpcCore.sol";
7
+
8
+ /**
9
+ * @dev Helper that calls the GT overloads using `MpcCore.setPublic256(amount)` to build a gtUint256.
10
+ * Used to test the GT entrypoints without needing an off-chain gtUint256 constructor.
11
+ */
12
+ contract PrivateERC20GtCallerMock {
13
+ function transferGT(address token, address to, uint256 amount) external {
14
+ IPrivateERC20(token).transferGT(to, MpcCore.setPublic256(amount));
15
+ }
16
+
17
+ function approveGT(address token, address spender, uint256 amount) external {
18
+ IPrivateERC20(token).approveGT(spender, MpcCore.setPublic256(amount));
19
+ }
20
+
21
+ function transferFromGT(address token, address from, address to, uint256 amount) external {
22
+ IPrivateERC20(token).transferFromGT(from, to, MpcCore.setPublic256(amount));
23
+ }
24
+
25
+ function burnGt(address token, uint256 amount) external {
26
+ IPrivateERC20(token).burnGt(MpcCore.setPublic256(amount));
27
+ }
28
+ }
29
+
@@ -3,15 +3,20 @@
3
3
  pragma solidity ^0.8.19;
4
4
 
5
5
  import "../../../token/PrivateERC20/PrivateERC20.sol";
6
+ import "../../../utils/mpc/MpcCore.sol";
6
7
 
7
8
  contract PrivateERC20Mock is PrivateERC20 {
8
9
  constructor() PrivateERC20("PrivateERC20Mock", "PE20M") {}
9
10
 
10
- function mint(address account, uint64 amount) external {
11
- _mint(account, MpcCore.setPublic64(amount));
11
+ function decimals() public pure override returns (uint8) {
12
+ return 6;
12
13
  }
13
14
 
14
- function burn(address account, uint64 amount) external {
15
- _burn(account, MpcCore.setPublic64(amount));
15
+ function mint(address account, uint256 amount) public override nonReentrant {
16
+ _mint(account, MpcCore.setPublic256(amount));
17
+ }
18
+
19
+ function burn(address account, uint256 amount) public nonReentrant {
20
+ _burn(account, MpcCore.setPublic256(amount));
16
21
  }
17
22
  }
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.19;
4
+
5
+ import "../../../token/PrivateERC20/ITokenReceiverEncrypted.sol";
6
+
7
+ interface IPrivateERC20TransferAndCallEncrypted {
8
+ function transferAndCall(
9
+ address to,
10
+ bytes calldata itUint256Value,
11
+ bytes calldata data
12
+ ) external;
13
+ }
14
+
15
+ /**
16
+ * @dev Receiver that attempts to re-enter the token during {transferAndCall} encrypted callback.
17
+ * Used to test {ReentrancyGuard} in PrivateERC20.
18
+ */
19
+ contract PrivateERC20ReentrantReceiverMock is ITokenReceiverEncrypted {
20
+ address public token;
21
+ bool public tryReenter;
22
+ bytes public reenterCalldata;
23
+
24
+ function configure(address token_, bool tryReenter_, bytes calldata reenterCalldata_) external {
25
+ token = token_;
26
+ tryReenter = tryReenter_;
27
+ reenterCalldata = reenterCalldata_;
28
+ }
29
+
30
+ function onPrivateTransferReceived(address, bytes calldata) external returns (bool) {
31
+ if (tryReenter && token != address(0)) {
32
+ // Low-level call to avoid needing full interface/types here.
33
+ (bool ok, ) = token.call(reenterCalldata);
34
+ ok; // ignore; we only care that the outer tx reverts or not
35
+ }
36
+ return true;
37
+ }
38
+ }
39
+
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.19;
4
+
5
+ import "../../../token/PrivateERC20/ITokenReceiver.sol";
6
+
7
+ /**
8
+ * @dev Public-amount receiver that attempts to re-enter the token during `transferAndCall(uint256)` callback.
9
+ */
10
+ contract PublicReentrantTokenReceiverMock is ITokenReceiver {
11
+ address public token;
12
+ bool public tryReenter;
13
+ bytes public reenterCalldata;
14
+
15
+ function configure(address token_, bool tryReenter_, bytes calldata reenterCalldata_) external {
16
+ token = token_;
17
+ tryReenter = tryReenter_;
18
+ reenterCalldata = reenterCalldata_;
19
+ }
20
+
21
+ function onTokenReceived(address, uint256, bytes calldata) external returns (bool) {
22
+ if (tryReenter && token != address(0)) {
23
+ (bool ok, ) = token.call(reenterCalldata);
24
+ ok;
25
+ }
26
+ return true;
27
+ }
28
+ }
29
+
@@ -0,0 +1,18 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.19;
4
+
5
+ import "../../../token/PrivateERC20/ITokenReceiver.sol";
6
+
7
+ contract PublicTokenReceiverBoolMock is ITokenReceiver {
8
+ bool public accept;
9
+
10
+ constructor(bool accept_) {
11
+ accept = accept_;
12
+ }
13
+
14
+ function onTokenReceived(address, uint256, bytes calldata) external view returns (bool) {
15
+ return accept;
16
+ }
17
+ }
18
+
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.19;
4
+
5
+ import "../../../token/PrivateERC20/ITokenReceiver.sol";
6
+
7
+ contract PublicTokenReceiverMock is ITokenReceiver {
8
+ function onTokenReceived(address, uint256, bytes calldata) external pure returns (bool) {
9
+ return true;
10
+ }
11
+ }
12
+
@@ -0,0 +1,123 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Arithmetic128TestsContract {
7
+ uint128 addResult;
8
+ uint128 subResult;
9
+ uint128 mulResult;
10
+ uint128 divResult;
11
+ uint128 remResult;
12
+
13
+ function getAddResult() public view returns (uint128) {
14
+ return addResult;
15
+ }
16
+
17
+ function getSubResult() public view returns (uint128) {
18
+ return subResult;
19
+ }
20
+
21
+ function getMulResult() public view returns (uint128) {
22
+ return mulResult;
23
+ }
24
+
25
+ function getDivResult() public view returns (uint128) {
26
+ return divResult;
27
+ }
28
+
29
+ function getRemResult() public view returns (uint128) {
30
+ return remResult;
31
+ }
32
+
33
+ function addTest(uint128 a, uint128 b) public returns (uint128) {
34
+ gtUint128 a128 = MpcCore.setPublic128(a);
35
+ gtUint128 b128 = MpcCore.setPublic128(b);
36
+
37
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.add(a128, b128)));
38
+ addResult = result;
39
+
40
+ // Verify with scalar operations
41
+ require(result == uint128(MpcCore.decrypt(MpcCore.add(a, b128))), "addTest: scalar failed");
42
+ require(result == uint128(MpcCore.decrypt(MpcCore.add(a128, b))), "addTest: scalar failed");
43
+
44
+ return result;
45
+ }
46
+
47
+ function checkedAddTest(uint128 a, uint128 b) public returns (uint128) {
48
+ gtUint128 a128 = MpcCore.setPublic128(a);
49
+ gtUint128 b128 = MpcCore.setPublic128(b);
50
+
51
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.checkedAdd(a128, b128)));
52
+ addResult = result;
53
+
54
+ return result;
55
+ }
56
+
57
+ function subTest(uint128 a, uint128 b) public returns (uint128) {
58
+ gtUint128 a128 = MpcCore.setPublic128(a);
59
+ gtUint128 b128 = MpcCore.setPublic128(b);
60
+
61
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.sub(a128, b128)));
62
+ subResult = result;
63
+
64
+ require(result == uint128(MpcCore.decrypt(MpcCore.sub(a, b128))), "subTest: scalar failed");
65
+ require(result == uint128(MpcCore.decrypt(MpcCore.sub(a128, b))), "subTest: scalar failed");
66
+
67
+ return result;
68
+ }
69
+
70
+ function checkedSubTest(uint128 a, uint128 b) public returns (uint128) {
71
+ gtUint128 a128 = MpcCore.setPublic128(a);
72
+ gtUint128 b128 = MpcCore.setPublic128(b);
73
+
74
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.checkedSub(a128, b128)));
75
+ subResult = result;
76
+
77
+ return result;
78
+ }
79
+
80
+ function mulTest(uint128 a, uint128 b) public returns (uint128) {
81
+ gtUint128 a128 = MpcCore.setPublic128(a);
82
+ gtUint128 b128 = MpcCore.setPublic128(b);
83
+
84
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.mul(a128, b128)));
85
+ mulResult = result;
86
+
87
+ require(result == uint128(MpcCore.decrypt(MpcCore.mul(a, b128))), "mulTest: scalar failed");
88
+ require(result == uint128(MpcCore.decrypt(MpcCore.mul(a128, b))), "mulTest: scalar failed");
89
+
90
+ return result;
91
+ }
92
+
93
+ function checkedMulTest(uint128 a, uint128 b) public returns (uint128) {
94
+ gtUint128 a128 = MpcCore.setPublic128(a);
95
+ gtUint128 b128 = MpcCore.setPublic128(b);
96
+
97
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.checkedMul(a128, b128)));
98
+ mulResult = result;
99
+
100
+ return result;
101
+ }
102
+
103
+ function divTest(uint128 a, uint128 b) public returns (uint128) {
104
+ gtUint128 a128 = MpcCore.setPublic128(a);
105
+ gtUint128 b128 = MpcCore.setPublic128(b);
106
+
107
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.div(a128, b128)));
108
+ divResult = result;
109
+
110
+ return result;
111
+ }
112
+
113
+ function remTest(uint128 a, uint128 b) public returns (uint128) {
114
+ gtUint128 a128 = MpcCore.setPublic128(a);
115
+ gtUint128 b128 = MpcCore.setPublic128(b);
116
+
117
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.rem(a128, b128)));
118
+ remResult = result;
119
+
120
+ return result;
121
+ }
122
+ }
123
+
@@ -0,0 +1,122 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Arithmetic256TestsContract {
7
+ uint256 addResult;
8
+ uint256 subResult;
9
+ uint256 mulResult;
10
+ uint256 divResult;
11
+ uint256 remResult;
12
+
13
+ function getAddResult() public view returns (uint256) {
14
+ return addResult;
15
+ }
16
+
17
+ function getSubResult() public view returns (uint256) {
18
+ return subResult;
19
+ }
20
+
21
+ function getMulResult() public view returns (uint256) {
22
+ return mulResult;
23
+ }
24
+
25
+ function getDivResult() public view returns (uint256) {
26
+ return divResult;
27
+ }
28
+
29
+ function getRemResult() public view returns (uint256) {
30
+ return remResult;
31
+ }
32
+
33
+ function addTest(uint256 a, uint256 b) public returns (uint256) {
34
+ gtUint256 a256 = MpcCore.setPublic256(a);
35
+ gtUint256 b256 = MpcCore.setPublic256(b);
36
+
37
+ uint256 result = MpcCore.decrypt(MpcCore.add(a256, b256));
38
+ addResult = result;
39
+
40
+ // Verify with scalar operations
41
+ require(result == MpcCore.decrypt(MpcCore.add(a, b256)), "addTest: scalar failed");
42
+ require(result == MpcCore.decrypt(MpcCore.add(a256, b)), "addTest: scalar failed");
43
+
44
+ return result;
45
+ }
46
+
47
+ function checkedAddTest(uint256 a, uint256 b) public returns (uint256) {
48
+ gtUint256 a256 = MpcCore.setPublic256(a);
49
+ gtUint256 b256 = MpcCore.setPublic256(b);
50
+
51
+ uint256 result = MpcCore.decrypt(MpcCore.checkedAdd(a256, b256));
52
+ addResult = result;
53
+
54
+ return result;
55
+ }
56
+
57
+ function subTest(uint256 a, uint256 b) public returns (uint256) {
58
+ gtUint256 a256 = MpcCore.setPublic256(a);
59
+ gtUint256 b256 = MpcCore.setPublic256(b);
60
+
61
+ uint256 result = MpcCore.decrypt(MpcCore.sub(a256, b256));
62
+ subResult = result;
63
+
64
+ require(result == MpcCore.decrypt(MpcCore.sub(a, b256)), "subTest: scalar failed");
65
+ require(result == MpcCore.decrypt(MpcCore.sub(a256, b)), "subTest: scalar failed");
66
+
67
+ return result;
68
+ }
69
+
70
+ function checkedSubTest(uint256 a, uint256 b) public returns (uint256) {
71
+ gtUint256 a256 = MpcCore.setPublic256(a);
72
+ gtUint256 b256 = MpcCore.setPublic256(b);
73
+
74
+ uint256 result = MpcCore.decrypt(MpcCore.checkedSub(a256, b256));
75
+ subResult = result;
76
+
77
+ return result;
78
+ }
79
+
80
+ function mulTest(uint256 a, uint256 b) public returns (uint256) {
81
+ gtUint256 a256 = MpcCore.setPublic256(a);
82
+ gtUint256 b256 = MpcCore.setPublic256(b);
83
+
84
+ uint256 result = MpcCore.decrypt(MpcCore.mul(a256, b256));
85
+ mulResult = result;
86
+
87
+ require(result == MpcCore.decrypt(MpcCore.mul(a, b256)), "mulTest: scalar failed");
88
+ require(result == MpcCore.decrypt(MpcCore.mul(a256, b)), "mulTest: scalar failed");
89
+
90
+ return result;
91
+ }
92
+
93
+ function checkedMulTest(uint256 a, uint256 b) public returns (uint256) {
94
+ gtUint256 a256 = MpcCore.setPublic256(a);
95
+ gtUint256 b256 = MpcCore.setPublic256(b);
96
+
97
+ uint256 result = MpcCore.decrypt(MpcCore.checkedMul(a256, b256));
98
+ mulResult = result;
99
+
100
+ return result;
101
+ }
102
+
103
+ function divTest(uint256 a, uint256 b) public returns (uint256) {
104
+ gtUint256 a256 = MpcCore.setPublic256(a);
105
+ gtUint256 b256 = MpcCore.setPublic256(b);
106
+
107
+ uint256 result = MpcCore.decrypt(MpcCore.div(a256, b256));
108
+ divResult = result;
109
+
110
+ return result;
111
+ }
112
+
113
+ function remTest(uint256 a, uint256 b) public returns (uint256) {
114
+ gtUint256 a256 = MpcCore.setPublic256(a);
115
+ gtUint256 b256 = MpcCore.setPublic256(b);
116
+
117
+ uint256 result = MpcCore.decrypt(MpcCore.rem(a256, b256));
118
+ remResult = result;
119
+
120
+ return result;
121
+ }
122
+ }
@@ -0,0 +1,65 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Bitwise128TestsContract {
7
+ uint128 andResult;
8
+ uint128 orResult;
9
+ uint128 xorResult;
10
+
11
+ function getAndResult() public view returns (uint128) {
12
+ return andResult;
13
+ }
14
+
15
+ function getOrResult() public view returns (uint128) {
16
+ return orResult;
17
+ }
18
+
19
+ function getXorResult() public view returns (uint128) {
20
+ return xorResult;
21
+ }
22
+
23
+ function andTest(uint128 a, uint128 b) public returns (uint128) {
24
+ gtUint128 a128 = MpcCore.setPublic128(a);
25
+ gtUint128 b128 = MpcCore.setPublic128(b);
26
+
27
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.and(a128, b128)));
28
+ andResult = result;
29
+
30
+ require(result == uint128(MpcCore.decrypt(MpcCore.and(a, b128))), "andTest: scalar failed");
31
+ require(result == uint128(MpcCore.decrypt(MpcCore.and(a128, b))), "andTest: scalar failed");
32
+
33
+ return result;
34
+ }
35
+
36
+ function orTest(uint128 a, uint128 b) public returns (uint128) {
37
+ gtUint128 a128 = MpcCore.setPublic128(a);
38
+ gtUint128 b128 = MpcCore.setPublic128(b);
39
+
40
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.or(a128, b128)));
41
+ orResult = result;
42
+
43
+ require(result == uint128(MpcCore.decrypt(MpcCore.or(a, b128))), "orTest: scalar failed");
44
+ require(result == uint128(MpcCore.decrypt(MpcCore.or(a128, b))), "orTest: scalar failed");
45
+
46
+ return result;
47
+ }
48
+
49
+ function xorTest(uint128 a, uint128 b) public returns (uint128) {
50
+ gtUint128 a128 = MpcCore.setPublic128(a);
51
+ gtUint128 b128 = MpcCore.setPublic128(b);
52
+
53
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.xor(a128, b128)));
54
+ xorResult = result;
55
+
56
+ require(result == uint128(MpcCore.decrypt(MpcCore.xor(a, b128))), "xorTest: scalar failed");
57
+ require(result == uint128(MpcCore.decrypt(MpcCore.xor(a128, b))), "xorTest: scalar failed");
58
+
59
+ return result;
60
+ }
61
+
62
+ // Note: NOT operation is not supported for 128-bit and 256-bit types in the MPC precompile
63
+ // It only supports NOT for boolean types
64
+ }
65
+
@@ -0,0 +1,65 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Bitwise256TestsContract {
7
+ uint256 andResult;
8
+ uint256 orResult;
9
+ uint256 xorResult;
10
+
11
+ function getAndResult() public view returns (uint256) {
12
+ return andResult;
13
+ }
14
+
15
+ function getOrResult() public view returns (uint256) {
16
+ return orResult;
17
+ }
18
+
19
+ function getXorResult() public view returns (uint256) {
20
+ return xorResult;
21
+ }
22
+
23
+ function andTest(uint256 a, uint256 b) public returns (uint256) {
24
+ gtUint256 a256 = MpcCore.setPublic256(a);
25
+ gtUint256 b256 = MpcCore.setPublic256(b);
26
+
27
+ uint256 result = MpcCore.decrypt(MpcCore.and(a256, b256));
28
+ andResult = result;
29
+
30
+ require(result == MpcCore.decrypt(MpcCore.and(a, b256)), "andTest: scalar failed");
31
+ require(result == MpcCore.decrypt(MpcCore.and(a256, b)), "andTest: scalar failed");
32
+
33
+ return result;
34
+ }
35
+
36
+ function orTest(uint256 a, uint256 b) public returns (uint256) {
37
+ gtUint256 a256 = MpcCore.setPublic256(a);
38
+ gtUint256 b256 = MpcCore.setPublic256(b);
39
+
40
+ uint256 result = MpcCore.decrypt(MpcCore.or(a256, b256));
41
+ orResult = result;
42
+
43
+ require(result == MpcCore.decrypt(MpcCore.or(a, b256)), "orTest: scalar failed");
44
+ require(result == MpcCore.decrypt(MpcCore.or(a256, b)), "orTest: scalar failed");
45
+
46
+ return result;
47
+ }
48
+
49
+ function xorTest(uint256 a, uint256 b) public returns (uint256) {
50
+ gtUint256 a256 = MpcCore.setPublic256(a);
51
+ gtUint256 b256 = MpcCore.setPublic256(b);
52
+
53
+ uint256 result = MpcCore.decrypt(MpcCore.xor(a256, b256));
54
+ xorResult = result;
55
+
56
+ require(result == MpcCore.decrypt(MpcCore.xor(a, b256)), "xorTest: scalar failed");
57
+ require(result == MpcCore.decrypt(MpcCore.xor(a256, b)), "xorTest: scalar failed");
58
+
59
+ return result;
60
+ }
61
+
62
+ // Note: NOT operation is not supported for 128-bit and 256-bit types in the MPC precompile
63
+ // It only supports NOT for boolean types
64
+ }
65
+
@@ -0,0 +1,64 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract CheckedArithmetic128WithOverflowBitTestsContract {
7
+ uint128 addResult;
8
+ uint128 subResult;
9
+ uint128 mulResult;
10
+ bool overflowBit;
11
+
12
+ function getAddResult() public view returns (uint128) {
13
+ return addResult;
14
+ }
15
+
16
+ function getSubResult() public view returns (uint128) {
17
+ return subResult;
18
+ }
19
+
20
+ function getMulResult() public view returns (uint128) {
21
+ return mulResult;
22
+ }
23
+
24
+ function getOverflowBit() public view returns (bool) {
25
+ return overflowBit;
26
+ }
27
+
28
+ function checkedAddWithOverflowBitTest(uint128 a, uint128 b) public returns (uint128) {
29
+ gtUint128 a128 = MpcCore.setPublic128(a);
30
+ gtUint128 b128 = MpcCore.setPublic128(b);
31
+
32
+ (gtBool overflow, gtUint128 gtResult) = MpcCore.checkedAddWithOverflowBit(a128, b128);
33
+ uint128 result = uint128(MpcCore.decrypt(gtResult));
34
+ overflowBit = MpcCore.decrypt(overflow);
35
+ addResult = result;
36
+
37
+ return result;
38
+ }
39
+
40
+ function checkedSubWithOverflowBitTest(uint128 a, uint128 b) public returns (uint128) {
41
+ gtUint128 a128 = MpcCore.setPublic128(a);
42
+ gtUint128 b128 = MpcCore.setPublic128(b);
43
+
44
+ (gtBool overflow, gtUint128 gtResult) = MpcCore.checkedSubWithOverflowBit(a128, b128);
45
+ uint128 result = uint128(MpcCore.decrypt(gtResult));
46
+ overflowBit = MpcCore.decrypt(overflow);
47
+ subResult = result;
48
+
49
+ return result;
50
+ }
51
+
52
+ function checkedMulWithOverflowBitTest(uint128 a, uint128 b) public returns (uint128) {
53
+ gtUint128 a128 = MpcCore.setPublic128(a);
54
+ gtUint128 b128 = MpcCore.setPublic128(b);
55
+
56
+ (gtBool overflow, gtUint128 gtResult) = MpcCore.checkedMulWithOverflowBit(a128, b128);
57
+ uint128 result = uint128(MpcCore.decrypt(gtResult));
58
+ overflowBit = MpcCore.decrypt(overflow);
59
+ mulResult = result;
60
+
61
+ return result;
62
+ }
63
+ }
64
+
@@ -0,0 +1,64 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract CheckedArithmetic256WithOverflowBitTestsContract {
7
+ uint256 addResult;
8
+ uint256 subResult;
9
+ uint256 mulResult;
10
+ bool overflowBit;
11
+
12
+ function getAddResult() public view returns (uint256) {
13
+ return addResult;
14
+ }
15
+
16
+ function getSubResult() public view returns (uint256) {
17
+ return subResult;
18
+ }
19
+
20
+ function getMulResult() public view returns (uint256) {
21
+ return mulResult;
22
+ }
23
+
24
+ function getOverflowBit() public view returns (bool) {
25
+ return overflowBit;
26
+ }
27
+
28
+ function checkedAddWithOverflowBitTest(uint256 a, uint256 b) public returns (uint256) {
29
+ gtUint256 a256 = MpcCore.setPublic256(a);
30
+ gtUint256 b256 = MpcCore.setPublic256(b);
31
+
32
+ (gtBool overflow, gtUint256 gtResult) = MpcCore.checkedAddWithOverflowBit(a256, b256);
33
+ uint256 result = MpcCore.decrypt(gtResult);
34
+ overflowBit = MpcCore.decrypt(overflow);
35
+ addResult = result;
36
+
37
+ return result;
38
+ }
39
+
40
+ function checkedSubWithOverflowBitTest(uint256 a, uint256 b) public returns (uint256) {
41
+ gtUint256 a256 = MpcCore.setPublic256(a);
42
+ gtUint256 b256 = MpcCore.setPublic256(b);
43
+
44
+ (gtBool overflow, gtUint256 gtResult) = MpcCore.checkedSubWithOverflowBit(a256, b256);
45
+ uint256 result = MpcCore.decrypt(gtResult);
46
+ overflowBit = MpcCore.decrypt(overflow);
47
+ subResult = result;
48
+
49
+ return result;
50
+ }
51
+
52
+ function checkedMulWithOverflowBitTest(uint256 a, uint256 b) public returns (uint256) {
53
+ gtUint256 a256 = MpcCore.setPublic256(a);
54
+ gtUint256 b256 = MpcCore.setPublic256(b);
55
+
56
+ (gtBool overflow, gtUint256 gtResult) = MpcCore.checkedMulWithOverflowBit(a256, b256);
57
+ uint256 result = MpcCore.decrypt(gtResult);
58
+ overflowBit = MpcCore.decrypt(overflow);
59
+ mulResult = result;
60
+
61
+ return result;
62
+ }
63
+ }
64
+