@coti-io/coti-contracts 1.1.0 → 1.2.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 (265) hide show
  1. package/.github/workflows/npm-publish.yml +18 -14
  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/mocks/token/ERC20Mock.sol +19 -0
  9. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +18 -0
  10. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +13 -0
  11. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +44 -0
  12. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +23 -0
  13. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +29 -0
  14. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +9 -4
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +39 -0
  16. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +29 -0
  17. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +18 -0
  18. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +12 -0
  19. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +123 -0
  20. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +122 -0
  21. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +65 -0
  22. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +65 -0
  23. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +64 -0
  24. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +64 -0
  25. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +98 -0
  26. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +98 -0
  27. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +44 -0
  28. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +44 -0
  29. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +55 -0
  30. package/contracts/mocks/utils/mpc/MinimalProxy.sol +27 -0
  31. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +267 -0
  32. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +334 -0
  33. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +24 -0
  34. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +24 -0
  35. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +93 -0
  36. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +116 -0
  37. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +157 -0
  38. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +133 -0
  39. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +137 -0
  40. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +32 -0
  41. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +32 -0
  42. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +36 -0
  43. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +36 -0
  44. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +29 -0
  45. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +29 -0
  46. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +32 -0
  47. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +32 -0
  48. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +59 -0
  49. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +63 -0
  50. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +99 -0
  51. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +7 -6
  52. package/contracts/node/CotiNodeRewards.sol +199 -0
  53. package/contracts/node/SoulboundNodeNFT.sol +519 -0
  54. package/contracts/privacyBridge/PrivacyBridge.sol +318 -0
  55. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +268 -0
  56. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +251 -0
  57. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +16 -0
  58. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +17 -0
  59. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +17 -0
  60. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +17 -0
  61. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +17 -0
  62. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +17 -0
  63. package/contracts/token/PrivateERC20/IPrivateERC20.sol +273 -40
  64. package/contracts/token/PrivateERC20/ITokenReceiver.sol +17 -0
  65. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +20 -0
  66. package/contracts/token/PrivateERC20/PrivateERC20.sol +861 -152
  67. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +17 -0
  68. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +13 -0
  69. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +17 -0
  70. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +17 -0
  71. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +17 -0
  72. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +17 -0
  73. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +13 -0
  74. package/contracts/utils/mpc/MpcCore.sol +10780 -4962
  75. package/contracts/utils/mpc/MpcInterface.sol +7 -2
  76. package/hardhat/gasPriceBump.ts +60 -0
  77. package/hardhat.config.ts +60 -12
  78. package/package.json +21 -3
  79. package/scripts/deploySoulboundNodeNFT.ts +57 -0
  80. package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +327 -0
  81. package/test/token/PrivateERC20/PrivateERC20.test.ts +1109 -268
  82. package/test/utils/mpc/Bitwise128.test.ts +92 -0
  83. package/test/utils/mpc/Bitwise256.test.ts +101 -0
  84. package/test/utils/mpc/BuildInputText128.test.ts +398 -0
  85. package/test/utils/mpc/CheckedArithmetic128.test.ts +45 -0
  86. package/test/utils/mpc/CheckedArithmetic256.test.ts +45 -0
  87. package/test/utils/mpc/Comparison128.test.ts +48 -0
  88. package/test/utils/mpc/Comparison256.test.ts +48 -0
  89. package/test/utils/mpc/InvalidCiphertext.test.ts +179 -0
  90. package/test/utils/mpc/InvalidCiphertext128.test.ts +179 -0
  91. package/test/utils/mpc/InvalidCiphertext256.test.ts +201 -0
  92. package/test/utils/mpc/InvalidTransfer128.test.ts +166 -0
  93. package/test/utils/mpc/InvalidTransfer256.test.ts +158 -0
  94. package/test/utils/mpc/MinMax128.test.ts +44 -0
  95. package/test/utils/mpc/MinMax256.test.ts +44 -0
  96. package/test/utils/mpc/MinimalProxyDemo.test.ts +280 -0
  97. package/test/utils/mpc/MpcOperations.test.ts +589 -0
  98. package/test/utils/mpc/MpcOperations128.test.ts +632 -0
  99. package/test/utils/mpc/Mux128.test.ts +41 -0
  100. package/test/utils/mpc/Mux256.test.ts +41 -0
  101. package/test/utils/mpc/NegativeCases.test.ts +478 -0
  102. package/test/utils/mpc/NegativeCases128.test.ts +237 -0
  103. package/test/utils/mpc/NegativeCases256.test.ts +236 -0
  104. package/test/utils/mpc/OnBoard128.test.ts +90 -0
  105. package/test/utils/mpc/OnBoard256.test.ts +114 -0
  106. package/test/utils/mpc/Precompile128.test.ts +51 -0
  107. package/test/utils/mpc/Precompile256.test.ts +115 -0
  108. package/test/utils/mpc/ProxyValidation.test.ts +199 -0
  109. package/test/utils/mpc/Random128.test.ts +47 -0
  110. package/test/utils/mpc/Random256.test.ts +47 -0
  111. package/test/utils/mpc/Shift128.test.ts +41 -0
  112. package/test/utils/mpc/Shift256.test.ts +41 -0
  113. package/test/utils/mpc/Transfer128.test.ts +46 -0
  114. package/test/utils/mpc/Transfer256.test.ts +46 -0
  115. package/test/utils/mpc/TransferWithAllowance128.test.ts +48 -0
  116. package/test/utils/mpc/TransferWithAllowance256.test.ts +48 -0
  117. package/test/utils/mpc/UpgradeablePrivacyProxy.test.ts +307 -0
  118. package/test/utils/mpc/ValidateCiphertext.test.ts +221 -0
  119. package/test/utils/mpc/ValidateCiphertext256.test.ts +161 -0
  120. package/test/utils/mpc/ValidateCiphertext256Decryption.test.ts +383 -0
  121. package/test/utils/mpc/WalletEncryptionFailures.test.ts +494 -0
  122. package/test/utils/privateErc20Helpers.ts +97 -0
  123. package/typechain-types/@openzeppelin/contracts/access/Ownable.ts +153 -0
  124. package/typechain-types/@openzeppelin/contracts/access/index.ts +4 -0
  125. package/typechain-types/@openzeppelin/contracts/index.ts +2 -0
  126. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +262 -0
  127. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.ts +143 -0
  128. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  129. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +6 -0
  130. package/typechain-types/@openzeppelin/contracts/token/index.ts +2 -0
  131. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.ts +679 -0
  132. package/typechain-types/contracts/disperse/coinByRatio/index.ts +4 -0
  133. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20.ts +97 -0
  134. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +206 -0
  135. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +5 -0
  136. package/typechain-types/contracts/disperse/disperseToken/TokenDisperser.ts +191 -0
  137. package/typechain-types/contracts/disperse/disperseToken/index.ts +6 -0
  138. package/typechain-types/contracts/disperse/index.ts +7 -0
  139. package/typechain-types/contracts/index.ts +2 -0
  140. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +77 -60
  141. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128TestsContract.ts +311 -0
  142. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256TestsContract.ts +311 -0
  143. package/typechain-types/contracts/mocks/utils/mpc/Bitwise128TestsContract.ts +179 -0
  144. package/typechain-types/contracts/mocks/utils/mpc/Bitwise256TestsContract.ts +179 -0
  145. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.ts +206 -0
  146. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.ts +206 -0
  147. package/typechain-types/contracts/mocks/utils/mpc/Comparison128TestsContract.ts +278 -0
  148. package/typechain-types/contracts/mocks/utils/mpc/Comparison256TestsContract.ts +278 -0
  149. package/typechain-types/contracts/mocks/utils/mpc/MinMax128TestsContract.ts +142 -0
  150. package/typechain-types/contracts/mocks/utils/mpc/MinMax256TestsContract.ts +142 -0
  151. package/typechain-types/contracts/mocks/utils/mpc/MinimalImplementation.ts +259 -0
  152. package/typechain-types/contracts/mocks/utils/mpc/MinimalProxy.ts +90 -0
  153. package/typechain-types/contracts/mocks/utils/mpc/MpcOperations128TestContract.ts +388 -0
  154. package/typechain-types/contracts/mocks/utils/mpc/MpcOperationsTestContract.ts +455 -0
  155. package/typechain-types/contracts/mocks/utils/mpc/Mux128TestsContract.ts +109 -0
  156. package/typechain-types/contracts/mocks/utils/mpc/Mux256TestsContract.ts +109 -0
  157. package/typechain-types/contracts/mocks/utils/mpc/OnBoard128TestsContract.ts +166 -0
  158. package/typechain-types/contracts/mocks/utils/mpc/OnBoard256TestsContract.ts +194 -0
  159. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV1.ts +385 -0
  160. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV2.ts +441 -0
  161. package/typechain-types/contracts/mocks/utils/mpc/PrivacyProxy.ts +201 -0
  162. package/typechain-types/contracts/mocks/utils/mpc/Random128TestsContract.ts +131 -0
  163. package/typechain-types/contracts/mocks/utils/mpc/Random256TestsContract.ts +131 -0
  164. package/typechain-types/contracts/mocks/utils/mpc/Shift128TestsContract.ts +142 -0
  165. package/typechain-types/contracts/mocks/utils/mpc/Shift256TestsContract.ts +142 -0
  166. package/typechain-types/contracts/mocks/utils/mpc/Transfer128TestsContract.ts +109 -0
  167. package/typechain-types/contracts/mocks/utils/mpc/Transfer256TestsContract.ts +109 -0
  168. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.ts +128 -0
  169. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.ts +128 -0
  170. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.ts +198 -0
  171. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.ts +182 -0
  172. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.ts +257 -0
  173. package/typechain-types/contracts/mocks/utils/mpc/index.ts +32 -8
  174. package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +77 -60
  175. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +77 -60
  176. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +111 -10
  177. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +74 -0
  178. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +4 -0
  179. package/typechain-types/factories/@openzeppelin/contracts/index.ts +1 -0
  180. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +205 -0
  181. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit__factory.ts +100 -0
  182. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  183. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +5 -0
  184. package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +1 -0
  185. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +759 -0
  186. package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +4 -0
  187. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20__factory.ts +43 -0
  188. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +185 -0
  189. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +5 -0
  190. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +198 -0
  191. package/typechain-types/factories/contracts/disperse/disperseToken/index.ts +5 -0
  192. package/typechain-types/factories/contracts/disperse/index.ts +5 -0
  193. package/typechain-types/factories/contracts/index.ts +1 -0
  194. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  195. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +179 -47
  196. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +330 -0
  197. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +330 -0
  198. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  199. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +184 -0
  200. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +184 -0
  201. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  202. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +203 -0
  203. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +203 -0
  204. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  205. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +295 -0
  206. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  207. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +295 -0
  208. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  209. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +147 -0
  210. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +147 -0
  211. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  212. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +263 -0
  213. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +104 -0
  214. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  215. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  216. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +723 -0
  217. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1410 -0
  218. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +115 -0
  219. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +115 -0
  220. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  221. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +175 -0
  222. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +205 -0
  223. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +521 -0
  224. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +648 -0
  225. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +179 -0
  226. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +131 -0
  227. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +131 -0
  228. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +147 -0
  229. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +147 -0
  230. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  231. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  232. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +135 -0
  233. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +135 -0
  234. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  235. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  236. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +154 -0
  237. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +154 -0
  238. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  239. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  240. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  241. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  242. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  243. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  244. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +190 -0
  245. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +210 -0
  246. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +260 -0
  247. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +32 -8
  248. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +7 -7
  249. package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +174 -42
  250. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +174 -42
  251. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +126 -0
  252. package/typechain-types/hardhat.d.ts +638 -80
  253. package/typechain-types/index.ts +78 -16
  254. package/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.sol +0 -260
  255. package/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.sol +0 -264
  256. package/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.sol +0 -91
  257. package/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.sol +0 -91
  258. package/contracts/mocks/utils/mpc/Comparison128BitTestsContract.sol +0 -158
  259. package/contracts/mocks/utils/mpc/Comparison256BitTestsContract.sol +0 -158
  260. package/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.sol +0 -185
  261. package/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.sol +0 -190
  262. package/contracts/mocks/utils/mpc/README.md +0 -486
  263. package/test/utils/mpc/Unsigned128BitIntegers.test.ts +0 -945
  264. package/test/utils/mpc/Unsigned256BitIntegers.test.ts +0 -1124
  265. package/test/utils/mpc/helpers.ts +0 -77
@@ -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
+
@@ -0,0 +1,157 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ /**
7
+ * @title PrivacyImplementationV1
8
+ * @notice Implementation contract with privacy-preserving operations
9
+ * @dev To be used behind PrivacyProxy via delegatecall
10
+ */
11
+ contract PrivacyImplementationV1 {
12
+
13
+ // Storage layout must match proxy if needed
14
+ // Using mapping to avoid storage slot conflicts with proxy
15
+ mapping(address => gtUint128) private userBalances128;
16
+ mapping(address => gtUint256) private userBalances256;
17
+
18
+ // Events
19
+ event ValueStored128(address indexed user);
20
+ event ValueStored256(address indexed user);
21
+ event OperationPerformed(address indexed user, string operation);
22
+
23
+ /**
24
+ * @notice Store encrypted uint128 value for user
25
+ * @dev IT-type validation happens in delegatecall context
26
+ */
27
+ function storeValue128(itUint128 calldata value) external returns (ctUint128) {
28
+ // Validate IT-type (this runs in proxy's context via delegatecall)
29
+ gtUint128 gtValue = MpcCore.validateCiphertext(value);
30
+
31
+ // Store in user's balance
32
+ userBalances128[msg.sender] = gtValue;
33
+
34
+ emit ValueStored128(msg.sender);
35
+
36
+ // Return encrypted for user
37
+ return MpcCore.offBoardToUser(gtValue, msg.sender);
38
+ }
39
+
40
+ /**
41
+ * @notice Add to user's stored value (uint128)
42
+ */
43
+ function addToBalance128(itUint128 calldata amount) external returns (ctUint128) {
44
+ // Validate new amount
45
+ gtUint128 gtAmount = MpcCore.validateCiphertext(amount);
46
+
47
+ // Get current balance
48
+ gtUint128 currentBalance = userBalances128[msg.sender];
49
+
50
+ // Add to balance
51
+ gtUint128 newBalance = MpcCore.add(currentBalance, gtAmount);
52
+
53
+ // Store new balance
54
+ userBalances128[msg.sender] = newBalance;
55
+
56
+ emit OperationPerformed(msg.sender, "add128");
57
+
58
+ // Return encrypted result
59
+ return MpcCore.offBoardToUser(newBalance, msg.sender);
60
+ }
61
+
62
+ /**
63
+ * @notice Get user's balance (uint128)
64
+ */
65
+ function getBalance128() external returns (ctUint128) {
66
+ gtUint128 balance = userBalances128[msg.sender];
67
+ return MpcCore.offBoardToUser(balance, msg.sender);
68
+ }
69
+
70
+ /**
71
+ * @notice Perform addition on two encrypted values (uint128)
72
+ */
73
+ function add128(itUint128 calldata a, itUint128 calldata b) external returns (ctUint128) {
74
+ gtUint128 gtA = MpcCore.validateCiphertext(a);
75
+ gtUint128 gtB = MpcCore.validateCiphertext(b);
76
+
77
+ gtUint128 result = MpcCore.add(gtA, gtB);
78
+
79
+ emit OperationPerformed(msg.sender, "add128");
80
+
81
+ return MpcCore.offBoardToUser(result, msg.sender);
82
+ }
83
+
84
+ /**
85
+ * @notice Perform multiplication on two encrypted values (uint128)
86
+ */
87
+ function mul128(itUint128 calldata a, itUint128 calldata b) external returns (ctUint128) {
88
+ gtUint128 gtA = MpcCore.validateCiphertext(a);
89
+ gtUint128 gtB = MpcCore.validateCiphertext(b);
90
+
91
+ gtUint128 result = MpcCore.mul(gtA, gtB);
92
+
93
+ emit OperationPerformed(msg.sender, "mul128");
94
+
95
+ return MpcCore.offBoardToUser(result, msg.sender);
96
+ }
97
+
98
+ /**
99
+ * @notice Store encrypted uint256 value for user
100
+ */
101
+ function storeValue256(itUint256 calldata value) external returns (ctUint256 memory) {
102
+ gtUint256 gtValue = MpcCore.validateCiphertext(value);
103
+
104
+ userBalances256[msg.sender] = gtValue;
105
+
106
+ emit ValueStored256(msg.sender);
107
+
108
+ return MpcCore.offBoardToUser(gtValue, msg.sender);
109
+ }
110
+
111
+ /**
112
+ * @notice Add to user's stored value (uint256)
113
+ */
114
+ function addToBalance256(itUint256 calldata amount) external returns (ctUint256 memory) {
115
+ gtUint256 gtAmount = MpcCore.validateCiphertext(amount);
116
+
117
+ gtUint256 currentBalance = userBalances256[msg.sender];
118
+
119
+ gtUint256 newBalance = MpcCore.add(currentBalance, gtAmount);
120
+
121
+ userBalances256[msg.sender] = newBalance;
122
+
123
+ emit OperationPerformed(msg.sender, "add256");
124
+
125
+ return MpcCore.offBoardToUser(newBalance, msg.sender);
126
+ }
127
+
128
+ /**
129
+ * @notice Get user's balance (uint256)
130
+ */
131
+ function getBalance256() external returns (ctUint256 memory) {
132
+ gtUint256 balance = userBalances256[msg.sender];
133
+ return MpcCore.offBoardToUser(balance, msg.sender);
134
+ }
135
+
136
+ /**
137
+ * @notice Perform addition on two encrypted values (uint256)
138
+ */
139
+ function add256(itUint256 calldata a, itUint256 calldata b) external returns (ctUint256 memory) {
140
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
141
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
142
+
143
+ gtUint256 result = MpcCore.add(gtA, gtB);
144
+
145
+ emit OperationPerformed(msg.sender, "add256");
146
+
147
+ return MpcCore.offBoardToUser(result, msg.sender);
148
+ }
149
+
150
+ /**
151
+ * @notice Get version of implementation
152
+ */
153
+ function version() external pure returns (string memory) {
154
+ return "v1";
155
+ }
156
+ }
157
+
@@ -0,0 +1,133 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ /**
7
+ * @title PrivacyImplementationV2
8
+ * @notice Upgraded implementation with additional features
9
+ * @dev Storage layout must match V1 to preserve state
10
+ */
11
+ contract PrivacyImplementationV2 {
12
+
13
+ // Storage layout MUST match V1
14
+ mapping(address => gtUint128) private userBalances128;
15
+ mapping(address => gtUint256) private userBalances256;
16
+
17
+ // Events
18
+ event ValueStored128(address indexed user);
19
+ event ValueStored256(address indexed user);
20
+ event OperationPerformed(address indexed user, string operation);
21
+
22
+ // V1 functions (must keep same signatures for compatibility)
23
+
24
+ function storeValue128(itUint128 calldata value) external returns (ctUint128) {
25
+ gtUint128 gtValue = MpcCore.validateCiphertext(value);
26
+ userBalances128[msg.sender] = gtValue;
27
+ emit ValueStored128(msg.sender);
28
+ return MpcCore.offBoardToUser(gtValue, msg.sender);
29
+ }
30
+
31
+ function addToBalance128(itUint128 calldata amount) external returns (ctUint128) {
32
+ gtUint128 gtAmount = MpcCore.validateCiphertext(amount);
33
+ gtUint128 currentBalance = userBalances128[msg.sender];
34
+ gtUint128 newBalance = MpcCore.add(currentBalance, gtAmount);
35
+ userBalances128[msg.sender] = newBalance;
36
+ emit OperationPerformed(msg.sender, "add128");
37
+ return MpcCore.offBoardToUser(newBalance, msg.sender);
38
+ }
39
+
40
+ function getBalance128() external returns (ctUint128) {
41
+ gtUint128 balance = userBalances128[msg.sender];
42
+ return MpcCore.offBoardToUser(balance, msg.sender);
43
+ }
44
+
45
+ function add128(itUint128 calldata a, itUint128 calldata b) external returns (ctUint128) {
46
+ gtUint128 gtA = MpcCore.validateCiphertext(a);
47
+ gtUint128 gtB = MpcCore.validateCiphertext(b);
48
+ gtUint128 result = MpcCore.add(gtA, gtB);
49
+ emit OperationPerformed(msg.sender, "add128");
50
+ return MpcCore.offBoardToUser(result, msg.sender);
51
+ }
52
+
53
+ function mul128(itUint128 calldata a, itUint128 calldata b) external returns (ctUint128) {
54
+ gtUint128 gtA = MpcCore.validateCiphertext(a);
55
+ gtUint128 gtB = MpcCore.validateCiphertext(b);
56
+ gtUint128 result = MpcCore.mul(gtA, gtB);
57
+ emit OperationPerformed(msg.sender, "mul128");
58
+ return MpcCore.offBoardToUser(result, msg.sender);
59
+ }
60
+
61
+ function storeValue256(itUint256 calldata value) external returns (ctUint256 memory) {
62
+ gtUint256 gtValue = MpcCore.validateCiphertext(value);
63
+ userBalances256[msg.sender] = gtValue;
64
+ emit ValueStored256(msg.sender);
65
+ return MpcCore.offBoardToUser(gtValue, msg.sender);
66
+ }
67
+
68
+ function addToBalance256(itUint256 calldata amount) external returns (ctUint256 memory) {
69
+ gtUint256 gtAmount = MpcCore.validateCiphertext(amount);
70
+ gtUint256 currentBalance = userBalances256[msg.sender];
71
+ gtUint256 newBalance = MpcCore.add(currentBalance, gtAmount);
72
+ userBalances256[msg.sender] = newBalance;
73
+ emit OperationPerformed(msg.sender, "add256");
74
+ return MpcCore.offBoardToUser(newBalance, msg.sender);
75
+ }
76
+
77
+ function getBalance256() external returns (ctUint256 memory) {
78
+ gtUint256 balance = userBalances256[msg.sender];
79
+ return MpcCore.offBoardToUser(balance, msg.sender);
80
+ }
81
+
82
+ function add256(itUint256 calldata a, itUint256 calldata b) external returns (ctUint256 memory) {
83
+ gtUint256 gtA = MpcCore.validateCiphertext(a);
84
+ gtUint256 gtB = MpcCore.validateCiphertext(b);
85
+ gtUint256 result = MpcCore.add(gtA, gtB);
86
+ emit OperationPerformed(msg.sender, "add256");
87
+ return MpcCore.offBoardToUser(result, msg.sender);
88
+ }
89
+
90
+ // NEW V2 FUNCTIONS
91
+
92
+ /**
93
+ * @notice Subtract from balance (NEW in V2)
94
+ */
95
+ function subtractFromBalance128(itUint128 calldata amount) external returns (ctUint128) {
96
+ gtUint128 gtAmount = MpcCore.validateCiphertext(amount);
97
+ gtUint128 currentBalance = userBalances128[msg.sender];
98
+ gtUint128 newBalance = MpcCore.sub(currentBalance, gtAmount);
99
+ userBalances128[msg.sender] = newBalance;
100
+ emit OperationPerformed(msg.sender, "sub128");
101
+ return MpcCore.offBoardToUser(newBalance, msg.sender);
102
+ }
103
+
104
+ /**
105
+ * @notice Subtract two encrypted values (NEW in V2)
106
+ */
107
+ function sub128(itUint128 calldata a, itUint128 calldata b) external returns (ctUint128) {
108
+ gtUint128 gtA = MpcCore.validateCiphertext(a);
109
+ gtUint128 gtB = MpcCore.validateCiphertext(b);
110
+ gtUint128 result = MpcCore.sub(gtA, gtB);
111
+ emit OperationPerformed(msg.sender, "sub128");
112
+ return MpcCore.offBoardToUser(result, msg.sender);
113
+ }
114
+
115
+ /**
116
+ * @notice Divide two encrypted values (NEW in V2)
117
+ */
118
+ function div128(itUint128 calldata a, itUint128 calldata b) external returns (ctUint128) {
119
+ gtUint128 gtA = MpcCore.validateCiphertext(a);
120
+ gtUint128 gtB = MpcCore.validateCiphertext(b);
121
+ gtUint128 result = MpcCore.div(gtA, gtB);
122
+ emit OperationPerformed(msg.sender, "div128");
123
+ return MpcCore.offBoardToUser(result, msg.sender);
124
+ }
125
+
126
+ /**
127
+ * @notice Get version (upgraded)
128
+ */
129
+ function version() external pure returns (string memory) {
130
+ return "v2";
131
+ }
132
+ }
133
+
@@ -0,0 +1,137 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ /**
5
+ * @title PrivacyProxy
6
+ * @notice Simple upgradeable proxy that delegates all calls to an implementation contract
7
+ * @dev Tests if IT-type validation works through delegatecall
8
+ */
9
+ contract PrivacyProxy {
10
+
11
+ // Storage slot for implementation address (EIP-1967)
12
+ bytes32 private constant IMPLEMENTATION_SLOT = bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1);
13
+
14
+ // Storage slot for admin address
15
+ bytes32 private constant ADMIN_SLOT = bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1);
16
+
17
+ // Events
18
+ event Upgraded(address indexed implementation);
19
+ event AdminChanged(address previousAdmin, address newAdmin);
20
+
21
+ /**
22
+ * @notice Constructor sets initial implementation and admin
23
+ */
24
+ constructor(address _implementation) {
25
+ _setImplementation(_implementation);
26
+ _setAdmin(msg.sender);
27
+ }
28
+
29
+ /**
30
+ * @notice Modifier to restrict functions to admin only
31
+ */
32
+ modifier onlyAdmin() {
33
+ require(msg.sender == _getAdmin(), "PrivacyProxy: caller is not admin");
34
+ _;
35
+ }
36
+
37
+ /**
38
+ * @notice Upgrade to a new implementation
39
+ * @param newImplementation Address of the new implementation contract
40
+ */
41
+ function upgradeTo(address newImplementation) external onlyAdmin {
42
+ _setImplementation(newImplementation);
43
+ emit Upgraded(newImplementation);
44
+ }
45
+
46
+ /**
47
+ * @notice Change the admin
48
+ * @param newAdmin Address of the new admin
49
+ */
50
+ function changeAdmin(address newAdmin) external onlyAdmin {
51
+ address oldAdmin = _getAdmin();
52
+ _setAdmin(newAdmin);
53
+ emit AdminChanged(oldAdmin, newAdmin);
54
+ }
55
+
56
+ /**
57
+ * @notice Get current implementation address
58
+ */
59
+ function implementation() external view returns (address) {
60
+ return _getImplementation();
61
+ }
62
+
63
+ /**
64
+ * @notice Get current admin address
65
+ */
66
+ function admin() external view returns (address) {
67
+ return _getAdmin();
68
+ }
69
+
70
+ /**
71
+ * @notice Fallback function delegates all calls to implementation
72
+ */
73
+ fallback() external payable {
74
+ address impl = _getImplementation();
75
+ require(impl != address(0), "PrivacyProxy: implementation not set");
76
+
77
+ assembly {
78
+ // Copy msg.data to memory
79
+ calldatacopy(0, 0, calldatasize())
80
+
81
+ // Delegatecall to implementation
82
+ let result := delegatecall(gas(), impl, 0, calldatasize(), 0, 0)
83
+
84
+ // Copy return data
85
+ returndatacopy(0, 0, returndatasize())
86
+
87
+ // Return or revert based on delegatecall result
88
+ switch result
89
+ case 0 {
90
+ revert(0, returndatasize())
91
+ }
92
+ default {
93
+ return(0, returndatasize())
94
+ }
95
+ }
96
+ }
97
+
98
+ /**
99
+ * @notice Receive function for ETH transfers
100
+ */
101
+ receive() external payable {}
102
+
103
+ // Internal functions
104
+
105
+ function _setImplementation(address newImplementation) private {
106
+ require(newImplementation != address(0), "PrivacyProxy: invalid implementation");
107
+
108
+ bytes32 slot = IMPLEMENTATION_SLOT;
109
+ assembly {
110
+ sstore(slot, newImplementation)
111
+ }
112
+ }
113
+
114
+ function _getImplementation() private view returns (address impl) {
115
+ bytes32 slot = IMPLEMENTATION_SLOT;
116
+ assembly {
117
+ impl := sload(slot)
118
+ }
119
+ }
120
+
121
+ function _setAdmin(address newAdmin) private {
122
+ require(newAdmin != address(0), "PrivacyProxy: invalid admin");
123
+
124
+ bytes32 slot = ADMIN_SLOT;
125
+ assembly {
126
+ sstore(slot, newAdmin)
127
+ }
128
+ }
129
+
130
+ function _getAdmin() private view returns (address adm) {
131
+ bytes32 slot = ADMIN_SLOT;
132
+ assembly {
133
+ adm := sload(slot)
134
+ }
135
+ }
136
+ }
137
+
@@ -0,0 +1,32 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Random128TestsContract {
7
+ uint128 randomResult;
8
+ uint128 randomBoundedResult;
9
+
10
+ function getRandom() public view returns (uint128) {
11
+ return randomResult;
12
+ }
13
+
14
+ function getRandomBounded() public view returns (uint128) {
15
+ return randomBoundedResult;
16
+ }
17
+
18
+ function randomTest() public returns (uint128) {
19
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.rand128()));
20
+ randomResult = result;
21
+
22
+ return result;
23
+ }
24
+
25
+ function randomBoundedTest(uint8 numBits) public returns (uint128) {
26
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.randBoundedBits128(numBits)));
27
+ randomBoundedResult = result;
28
+
29
+ return result;
30
+ }
31
+ }
32
+
@@ -0,0 +1,32 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Random256TestsContract {
7
+ uint256 randomResult;
8
+ uint256 randomBoundedResult;
9
+
10
+ function getRandom() public view returns (uint256) {
11
+ return randomResult;
12
+ }
13
+
14
+ function getRandomBounded() public view returns (uint256) {
15
+ return randomBoundedResult;
16
+ }
17
+
18
+ function randomTest() public returns (uint256) {
19
+ uint256 result = MpcCore.decrypt(MpcCore.rand256());
20
+ randomResult = result;
21
+
22
+ return result;
23
+ }
24
+
25
+ function randomBoundedTest(uint8 numBits) public returns (uint256) {
26
+ uint256 result = MpcCore.decrypt(MpcCore.randBoundedBits256(numBits));
27
+ randomBoundedResult = result;
28
+
29
+ return result;
30
+ }
31
+ }
32
+