@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,334 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ /**
7
+ * @title MpcOperationsTestContract
8
+ * @dev Contract to test various MPC operations with offBoardToUser functionality
9
+ * This allows users to decrypt the results of operations performed on encrypted values
10
+ */
11
+ contract MpcOperationsTestContract {
12
+
13
+ // Events for tracking operations
14
+ event OperationPerformed(string operation, address indexed user);
15
+ event ValueOffBoarded(address indexed user, ctUint256 result);
16
+
17
+ /**
18
+ * @dev Add two encrypted 256-bit values and return result encrypted for user
19
+ * @param a First encrypted value (itUint256)
20
+ * @param b Second encrypted value (itUint256)
21
+ * @param user Address to encrypt result for
22
+ * @return Result encrypted for the user (ctUint256)
23
+ */
24
+ function add256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
25
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
26
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
27
+
28
+ gtUint256 result = MpcCore.add(gtA, gtB);
29
+
30
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
31
+
32
+ emit OperationPerformed("add256", user);
33
+ emit ValueOffBoarded(user, ctResult);
34
+
35
+ return ctResult;
36
+ }
37
+
38
+ /**
39
+ * @dev Subtract two encrypted 256-bit values and return result encrypted for user
40
+ * @param a First encrypted value (itUint256)
41
+ * @param b Second encrypted value (itUint256)
42
+ * @param user Address to encrypt result for
43
+ * @return Result encrypted for the user (ctUint256)
44
+ */
45
+ function sub256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
46
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
47
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
48
+
49
+ gtUint256 result = MpcCore.sub(gtA, gtB);
50
+
51
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
52
+
53
+ emit OperationPerformed("sub256", user);
54
+ emit ValueOffBoarded(user, ctResult);
55
+
56
+ return ctResult;
57
+ }
58
+
59
+ /**
60
+ * @dev Multiply two encrypted 256-bit values and return result encrypted for user
61
+ * @param a First encrypted value (itUint256)
62
+ * @param b Second encrypted value (itUint256)
63
+ * @param user Address to encrypt result for
64
+ * @return Result encrypted for the user (ctUint256)
65
+ */
66
+ function mul256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
67
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
68
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
69
+
70
+ gtUint256 result = MpcCore.mul(gtA, gtB);
71
+
72
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
73
+
74
+ emit OperationPerformed("mul256", user);
75
+ emit ValueOffBoarded(user, ctResult);
76
+
77
+ return ctResult;
78
+ }
79
+
80
+ /**
81
+ * @dev Divide two encrypted 256-bit values and return result encrypted for user
82
+ * @param a First encrypted value (itUint256)
83
+ * @param b Second encrypted value (itUint256)
84
+ * @param user Address to encrypt result for
85
+ * @return Result encrypted for the user (ctUint256)
86
+ */
87
+ function div256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
88
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
89
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
90
+
91
+ gtUint256 result = MpcCore.div(gtA, gtB);
92
+
93
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
94
+
95
+ emit OperationPerformed("div256", user);
96
+ emit ValueOffBoarded(user, ctResult);
97
+
98
+ return ctResult;
99
+ }
100
+
101
+ /**
102
+ * @dev Get remainder of division and return result encrypted for user
103
+ * @param a First encrypted value (itUint256)
104
+ * @param b Second encrypted value (itUint256)
105
+ * @param user Address to encrypt result for
106
+ * @return Result encrypted for the user (ctUint256)
107
+ */
108
+ function rem256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
109
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
110
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
111
+
112
+ gtUint256 result = MpcCore.rem(gtA, gtB);
113
+
114
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
115
+
116
+ emit OperationPerformed("rem256", user);
117
+ emit ValueOffBoarded(user, ctResult);
118
+
119
+ return ctResult;
120
+ }
121
+
122
+ /**
123
+ * @dev Perform AND operation on two encrypted 256-bit values
124
+ * @param a First encrypted value (itUint256)
125
+ * @param b Second encrypted value (itUint256)
126
+ * @param user Address to encrypt result for
127
+ * @return Result encrypted for the user (ctUint256)
128
+ */
129
+ function and256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
130
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
131
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
132
+
133
+ gtUint256 result = MpcCore.and(gtA, gtB);
134
+
135
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
136
+
137
+ emit OperationPerformed("and256", user);
138
+ emit ValueOffBoarded(user, ctResult);
139
+
140
+ return ctResult;
141
+ }
142
+
143
+ /**
144
+ * @dev Perform OR operation on two encrypted 256-bit values
145
+ * @param a First encrypted value (itUint256)
146
+ * @param b Second encrypted value (itUint256)
147
+ * @param user Address to encrypt result for
148
+ * @return Result encrypted for the user (ctUint256)
149
+ */
150
+ function or256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
151
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
152
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
153
+
154
+ gtUint256 result = MpcCore.or(gtA, gtB);
155
+
156
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
157
+
158
+ emit OperationPerformed("or256", user);
159
+ emit ValueOffBoarded(user, ctResult);
160
+
161
+ return ctResult;
162
+ }
163
+
164
+ /**
165
+ * @dev Perform XOR operation on two encrypted 256-bit values
166
+ * @param a First encrypted value (itUint256)
167
+ * @param b Second encrypted value (itUint256)
168
+ * @param user Address to encrypt result for
169
+ * @return Result encrypted for the user (ctUint256)
170
+ */
171
+ function xor256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
172
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
173
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
174
+
175
+ gtUint256 result = MpcCore.xor(gtA, gtB);
176
+
177
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
178
+
179
+ emit OperationPerformed("xor256", user);
180
+ emit ValueOffBoarded(user, ctResult);
181
+
182
+ return ctResult;
183
+ }
184
+
185
+ /**
186
+ * @dev Shift left operation on encrypted 256-bit value
187
+ * @param a Encrypted value to shift (itUint256)
188
+ * @param bits Number of bits to shift (plain, must be uint8)
189
+ * @param user Address to encrypt result for
190
+ * @return Result encrypted for the user (ctUint256)
191
+ */
192
+ function shl256(itUint256 memory a, uint8 bits, address user) public returns (ctUint256 memory) {
193
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
194
+
195
+ gtUint256 result = MpcCore.shl(gtA, bits);
196
+
197
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
198
+
199
+ emit OperationPerformed("shl256", user);
200
+ emit ValueOffBoarded(user, ctResult);
201
+
202
+ return ctResult;
203
+ }
204
+
205
+ /**
206
+ * @dev Shift right operation on encrypted 256-bit value
207
+ * @param a Encrypted value to shift (itUint256)
208
+ * @param bits Number of bits to shift (plain, must be uint8)
209
+ * @param user Address to encrypt result for
210
+ * @return Result encrypted for the user (ctUint256)
211
+ */
212
+ function shr256(itUint256 memory a, uint8 bits, address user) public returns (ctUint256 memory) {
213
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
214
+
215
+ gtUint256 result = MpcCore.shr(gtA, bits);
216
+
217
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
218
+
219
+ emit OperationPerformed("shr256", user);
220
+ emit ValueOffBoarded(user, ctResult);
221
+
222
+ return ctResult;
223
+ }
224
+
225
+ /**
226
+ * @dev Check if two encrypted values are equal
227
+ * @param a First encrypted value (itUint256)
228
+ * @param b Second encrypted value (itUint256)
229
+ * @param user Address to encrypt result for
230
+ * @return Result encrypted for the user (ctUint256) - 1 if equal, 0 otherwise
231
+ */
232
+ function eq256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
233
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
234
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
235
+
236
+ gtBool result = MpcCore.eq(gtA, gtB);
237
+ gtUint256 resultAsUint = MpcCore.mux(result, MpcCore.setPublic256(1), MpcCore.setPublic256(0));
238
+
239
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(resultAsUint, user);
240
+
241
+ emit OperationPerformed("eq256", user);
242
+ emit ValueOffBoarded(user, ctResult);
243
+
244
+ return ctResult;
245
+ }
246
+
247
+ /**
248
+ * @dev Check if first value is greater than second
249
+ * @param a First encrypted value (itUint256)
250
+ * @param b Second encrypted value (itUint256)
251
+ * @param user Address to encrypt result for
252
+ * @return Result encrypted for the user (ctUint256) - 1 if a > b, 0 otherwise
253
+ */
254
+ function gt256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
255
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
256
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
257
+
258
+ gtBool result = MpcCore.gt(gtA, gtB);
259
+ gtUint256 resultAsUint = MpcCore.mux(result, MpcCore.setPublic256(1), MpcCore.setPublic256(0));
260
+
261
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(resultAsUint, user);
262
+
263
+ emit OperationPerformed("gt256", user);
264
+ emit ValueOffBoarded(user, ctResult);
265
+
266
+ return ctResult;
267
+ }
268
+
269
+ /**
270
+ * @dev Check if first value is less than second
271
+ * @param a First encrypted value (itUint256)
272
+ * @param b Second encrypted value (itUint256)
273
+ * @param user Address to encrypt result for
274
+ * @return Result encrypted for the user (ctUint256) - 1 if a < b, 0 otherwise
275
+ */
276
+ function lt256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
277
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
278
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
279
+
280
+ gtBool result = MpcCore.lt(gtA, gtB);
281
+ gtUint256 resultAsUint = MpcCore.mux(result, MpcCore.setPublic256(1), MpcCore.setPublic256(0));
282
+
283
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(resultAsUint, user);
284
+
285
+ emit OperationPerformed("lt256", user);
286
+ emit ValueOffBoarded(user, ctResult);
287
+
288
+ return ctResult;
289
+ }
290
+
291
+ /**
292
+ * @dev Get minimum of two encrypted values
293
+ * @param a First encrypted value (itUint256)
294
+ * @param b Second encrypted value (itUint256)
295
+ * @param user Address to encrypt result for
296
+ * @return Result encrypted for the user (ctUint256)
297
+ */
298
+ function min256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
299
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
300
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
301
+
302
+ gtUint256 result = MpcCore.min(gtA, gtB);
303
+
304
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
305
+
306
+ emit OperationPerformed("min256", user);
307
+ emit ValueOffBoarded(user, ctResult);
308
+
309
+ return ctResult;
310
+ }
311
+
312
+ /**
313
+ * @dev Get maximum of two encrypted values
314
+ * @param a First encrypted value (itUint256)
315
+ * @param b Second encrypted value (itUint256)
316
+ * @param user Address to encrypt result for
317
+ * @return Result encrypted for the user (ctUint256)
318
+ */
319
+ function max256(itUint256 memory a, itUint256 memory b, address user) public returns (ctUint256 memory) {
320
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
321
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
322
+
323
+ gtUint256 result = MpcCore.max(gtA, gtB);
324
+
325
+ ctUint256 memory ctResult = MpcCore.offBoardToUser(result, user);
326
+
327
+ emit OperationPerformed("max256", user);
328
+ emit ValueOffBoarded(user, ctResult);
329
+
330
+ return ctResult;
331
+ }
332
+
333
+ }
334
+
@@ -0,0 +1,24 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Mux128TestsContract {
7
+ uint128 muxResult;
8
+
9
+ function getMuxResult() public view returns (uint128) {
10
+ return muxResult;
11
+ }
12
+
13
+ function muxTest(bool bit, uint128 a, uint128 b) public returns (uint128) {
14
+ gtBool bitBool = MpcCore.setPublic(bit);
15
+ gtUint128 a128 = MpcCore.setPublic128(a);
16
+ gtUint128 b128 = MpcCore.setPublic128(b);
17
+
18
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.mux(bitBool, a128, b128)));
19
+ muxResult = result;
20
+
21
+ return result;
22
+ }
23
+ }
24
+
@@ -0,0 +1,24 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Mux256TestsContract {
7
+ uint256 muxResult;
8
+
9
+ function getMuxResult() public view returns (uint256) {
10
+ return muxResult;
11
+ }
12
+
13
+ function muxTest(bool bit, uint256 a, uint256 b) public returns (uint256) {
14
+ gtBool bitBool = MpcCore.setPublic(bit);
15
+ gtUint256 a256 = MpcCore.setPublic256(a);
16
+ gtUint256 b256 = MpcCore.setPublic256(b);
17
+
18
+ uint256 result = MpcCore.decrypt(MpcCore.mux(bitBool, a256, b256));
19
+ muxResult = result;
20
+
21
+ return result;
22
+ }
23
+ }
24
+
@@ -0,0 +1,93 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract OnBoard128TestsContract {
7
+ uint128 onboardOffboardResult;
8
+ ctUint128 storedCiphertext;
9
+
10
+ function getOnboardOffboardResult() public view returns (uint128) {
11
+ return onboardOffboardResult;
12
+ }
13
+
14
+ function getStoredCiphertext() public view returns (ctUint128) {
15
+ return storedCiphertext;
16
+ }
17
+
18
+ /**
19
+ * @dev Test the round-trip: setPublic -> offBoard -> onBoard -> decrypt
20
+ * @param value The value to test
21
+ */
22
+ function testOnBoardOffBoardRoundTrip(uint128 value) public returns (uint128) {
23
+ // Step 1: Create garbled text from public value
24
+ gtUint128 gtValue = MpcCore.setPublic128(value);
25
+
26
+ // Step 2: Convert garbled text to ciphertext (offBoard)
27
+ ctUint128 ciphertext = MpcCore.offBoard(gtValue);
28
+ storedCiphertext = ciphertext;
29
+
30
+ // Step 3: Convert ciphertext back to garbled text (onBoard)
31
+ gtUint128 gtValue2 = MpcCore.onBoard(ciphertext);
32
+
33
+ // Step 4: Decrypt to verify the value
34
+ uint128 result = MpcCore.decrypt(gtValue2);
35
+ onboardOffboardResult = result;
36
+
37
+ require(result == value, "OnBoard/OffBoard round-trip failed");
38
+
39
+ return result;
40
+ }
41
+
42
+ /**
43
+ * @dev Test onBoard with multiple values
44
+ */
45
+ function testOnBoardMultipleValues(uint128 a, uint128 b, uint128 c) public returns (uint128, uint128, uint128) {
46
+ // Test value A
47
+ gtUint128 gtA = MpcCore.setPublic128(a);
48
+ ctUint128 ctA = MpcCore.offBoard(gtA);
49
+ gtUint128 gtA2 = MpcCore.onBoard(ctA);
50
+ uint128 resultA = MpcCore.decrypt(gtA2);
51
+ require(resultA == a, "Value A test failed");
52
+
53
+ // Test value B
54
+ gtUint128 gtB = MpcCore.setPublic128(b);
55
+ ctUint128 ctB = MpcCore.offBoard(gtB);
56
+ gtUint128 gtB2 = MpcCore.onBoard(ctB);
57
+ uint128 resultB = MpcCore.decrypt(gtB2);
58
+ require(resultB == b, "Value B test failed");
59
+
60
+ // Test value C
61
+ gtUint128 gtC = MpcCore.setPublic128(c);
62
+ ctUint128 ctC = MpcCore.offBoard(gtC);
63
+ gtUint128 gtC2 = MpcCore.onBoard(ctC);
64
+ uint128 resultC = MpcCore.decrypt(gtC2);
65
+ require(resultC == c, "Value C test failed");
66
+
67
+ return (resultA, resultB, resultC);
68
+ }
69
+
70
+ /**
71
+ * @dev Test onBoard with edge cases (0 and max)
72
+ */
73
+ function testOnBoardEdgeCases() public returns (uint128, uint128) {
74
+ // Test zero
75
+ uint128 zero = 0;
76
+ gtUint128 gtZero = MpcCore.setPublic128(zero);
77
+ ctUint128 ctZero = MpcCore.offBoard(gtZero);
78
+ gtUint128 gtZero2 = MpcCore.onBoard(ctZero);
79
+ uint128 resultZero = MpcCore.decrypt(gtZero2);
80
+ require(resultZero == zero, "Zero test failed");
81
+
82
+ // Test max
83
+ uint128 max = type(uint128).max;
84
+ gtUint128 gtMax = MpcCore.setPublic128(max);
85
+ ctUint128 ctMax = MpcCore.offBoard(gtMax);
86
+ gtUint128 gtMax2 = MpcCore.onBoard(ctMax);
87
+ uint128 resultMax = MpcCore.decrypt(gtMax2);
88
+ require(resultMax == max, "Max test failed");
89
+
90
+ return (resultZero, resultMax);
91
+ }
92
+ }
93
+
@@ -0,0 +1,116 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract OnBoard256TestsContract {
7
+ uint256 onboardOffboardResult;
8
+ ctUint256 storedCiphertext;
9
+
10
+ function getOnboardOffboardResult() public view returns (uint256) {
11
+ return onboardOffboardResult;
12
+ }
13
+
14
+ function getStoredCiphertext() public view returns (ctUint256 memory) {
15
+ return storedCiphertext;
16
+ }
17
+
18
+ /**
19
+ * @dev Test the round-trip: setPublic -> offBoard -> onBoard -> decrypt
20
+ * @param value The value to test
21
+ */
22
+ function testOnBoardOffBoardRoundTrip(uint256 value) public returns (uint256) {
23
+ // Step 1: Create garbled text from public value
24
+ gtUint256 gtValue = MpcCore.setPublic256(value);
25
+
26
+ // Step 2: Convert garbled text to ciphertext (offBoard)
27
+ ctUint256 memory ciphertext = MpcCore.offBoard(gtValue);
28
+ storedCiphertext = ciphertext;
29
+
30
+ // Step 3: Convert ciphertext back to garbled text (onBoard)
31
+ gtUint256 gtValue2 = MpcCore.onBoard(ciphertext);
32
+
33
+ // Step 4: Decrypt to verify the value
34
+ uint256 result = MpcCore.decrypt(gtValue2);
35
+ onboardOffboardResult = result;
36
+
37
+ require(result == value, "OnBoard/OffBoard round-trip failed");
38
+
39
+ return result;
40
+ }
41
+
42
+ /**
43
+ * @dev Test onBoard with multiple values
44
+ */
45
+ function testOnBoardMultipleValues(uint256 a, uint256 b, uint256 c) public returns (uint256, uint256, uint256) {
46
+ // Test value A
47
+ gtUint256 gtA = MpcCore.setPublic256(a);
48
+ ctUint256 memory ctA = MpcCore.offBoard(gtA);
49
+ gtUint256 gtA2 = MpcCore.onBoard(ctA);
50
+ uint256 resultA = MpcCore.decrypt(gtA2);
51
+ require(resultA == a, "Value A test failed");
52
+
53
+ // Test value B
54
+ gtUint256 gtB = MpcCore.setPublic256(b);
55
+ ctUint256 memory ctB = MpcCore.offBoard(gtB);
56
+ gtUint256 gtB2 = MpcCore.onBoard(ctB);
57
+ uint256 resultB = MpcCore.decrypt(gtB2);
58
+ require(resultB == b, "Value B test failed");
59
+
60
+ // Test value C
61
+ gtUint256 gtC = MpcCore.setPublic256(c);
62
+ ctUint256 memory ctC = MpcCore.offBoard(gtC);
63
+ gtUint256 gtC2 = MpcCore.onBoard(ctC);
64
+ uint256 resultC = MpcCore.decrypt(gtC2);
65
+ require(resultC == c, "Value C test failed");
66
+
67
+ return (resultA, resultB, resultC);
68
+ }
69
+
70
+ /**
71
+ * @dev Test onBoard with edge cases (0 and max)
72
+ */
73
+ function testOnBoardEdgeCases() public returns (uint256, uint256) {
74
+ // Test zero
75
+ uint256 zero = 0;
76
+ gtUint256 gtZero = MpcCore.setPublic256(zero);
77
+ ctUint256 memory ctZero = MpcCore.offBoard(gtZero);
78
+ gtUint256 gtZero2 = MpcCore.onBoard(ctZero);
79
+ uint256 resultZero = MpcCore.decrypt(gtZero2);
80
+ require(resultZero == zero, "Zero test failed");
81
+
82
+ // Test max
83
+ uint256 max = type(uint256).max;
84
+ gtUint256 gtMax = MpcCore.setPublic256(max);
85
+ ctUint256 memory ctMax = MpcCore.offBoard(gtMax);
86
+ gtUint256 gtMax2 = MpcCore.onBoard(ctMax);
87
+ uint256 resultMax = MpcCore.decrypt(gtMax2);
88
+ require(resultMax == max, "Max test failed");
89
+
90
+ return (resultZero, resultMax);
91
+ }
92
+
93
+ /**
94
+ * @dev Test onBoard with values that cross 128-bit boundary
95
+ */
96
+ function testOnBoard128BitBoundary() public returns (uint256, uint256) {
97
+ // Test value below 128-bit boundary (2^127 - 1)
98
+ uint256 below128 = (uint256(1) << 127) - 1;
99
+ gtUint256 gtBelow = MpcCore.setPublic256(below128);
100
+ ctUint256 memory ctBelow = MpcCore.offBoard(gtBelow);
101
+ gtUint256 gtBelow2 = MpcCore.onBoard(ctBelow);
102
+ uint256 resultBelow = MpcCore.decrypt(gtBelow2);
103
+ require(resultBelow == below128, "Below 128-bit test failed");
104
+
105
+ // Test value above 128-bit boundary (2^128)
106
+ uint256 above128 = uint256(1) << 128;
107
+ gtUint256 gtAbove = MpcCore.setPublic256(above128);
108
+ ctUint256 memory ctAbove = MpcCore.offBoard(gtAbove);
109
+ gtUint256 gtAbove2 = MpcCore.onBoard(ctAbove);
110
+ uint256 resultAbove = MpcCore.decrypt(gtAbove2);
111
+ require(resultAbove == above128, "Above 128-bit test failed");
112
+
113
+ return (resultBelow, resultAbove);
114
+ }
115
+ }
116
+