@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,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
+
@@ -0,0 +1,36 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Shift128TestsContract {
7
+ uint128 shlResult;
8
+ uint128 shrResult;
9
+
10
+ function getShlResult() public view returns (uint128) {
11
+ return shlResult;
12
+ }
13
+
14
+ function getShrResult() public view returns (uint128) {
15
+ return shrResult;
16
+ }
17
+
18
+ function shlTest(uint128 a, uint8 shift) public returns (uint128) {
19
+ gtUint128 a128 = MpcCore.setPublic128(a);
20
+
21
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.shl(a128, shift)));
22
+ shlResult = result;
23
+
24
+ return result;
25
+ }
26
+
27
+ function shrTest(uint128 a, uint8 shift) public returns (uint128) {
28
+ gtUint128 a128 = MpcCore.setPublic128(a);
29
+
30
+ uint128 result = uint128(MpcCore.decrypt(MpcCore.shr(a128, shift)));
31
+ shrResult = result;
32
+
33
+ return result;
34
+ }
35
+ }
36
+
@@ -0,0 +1,36 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Shift256TestsContract {
7
+ uint256 shlResult;
8
+ uint256 shrResult;
9
+
10
+ function getShlResult() public view returns (uint256) {
11
+ return shlResult;
12
+ }
13
+
14
+ function getShrResult() public view returns (uint256) {
15
+ return shrResult;
16
+ }
17
+
18
+ function shlTest(uint256 a, uint8 shift) public returns (uint256) {
19
+ gtUint256 a256 = MpcCore.setPublic256(a);
20
+
21
+ uint256 result = MpcCore.decrypt(MpcCore.shl(a256, shift));
22
+ shlResult = result;
23
+
24
+ return result;
25
+ }
26
+
27
+ function shrTest(uint256 a, uint8 shift) public returns (uint256) {
28
+ gtUint256 a256 = MpcCore.setPublic256(a);
29
+
30
+ uint256 result = MpcCore.decrypt(MpcCore.shr(a256, shift));
31
+ shrResult = result;
32
+
33
+ return result;
34
+ }
35
+ }
36
+
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Transfer128TestsContract {
7
+ uint128 newA;
8
+ uint128 newB;
9
+ bool result;
10
+
11
+ function getResults() public view returns (uint128, uint128, bool) {
12
+ return (newA, newB, result);
13
+ }
14
+
15
+ function transferTest(uint128 a, uint128 b, uint128 amount) public returns (uint128, uint128, bool) {
16
+ gtUint128 a128 = MpcCore.setPublic128(a);
17
+ gtUint128 b128 = MpcCore.setPublic128(b);
18
+ gtUint128 amount128 = MpcCore.setPublic128(amount);
19
+
20
+ (gtUint128 newA128, gtUint128 newB128, gtBool res) = MpcCore.transfer(a128, b128, amount128);
21
+
22
+ newA = uint128(MpcCore.decrypt(newA128));
23
+ newB = uint128(MpcCore.decrypt(newB128));
24
+ result = MpcCore.decrypt(res);
25
+
26
+ return (newA, newB, result);
27
+ }
28
+ }
29
+
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ import "../../../utils/mpc/MpcCore.sol";
5
+
6
+ contract Transfer256TestsContract {
7
+ uint256 newA;
8
+ uint256 newB;
9
+ bool result;
10
+
11
+ function getResults() public view returns (uint256, uint256, bool) {
12
+ return (newA, newB, result);
13
+ }
14
+
15
+ function transferTest(uint256 a, uint256 b, uint256 amount) public returns (uint256, uint256, bool) {
16
+ gtUint256 a256 = MpcCore.setPublic256(a);
17
+ gtUint256 b256 = MpcCore.setPublic256(b);
18
+ gtUint256 amount256 = MpcCore.setPublic256(amount);
19
+
20
+ (gtUint256 newA256, gtUint256 newB256, gtBool res) = MpcCore.transfer(a256, b256, amount256);
21
+
22
+ newA = MpcCore.decrypt(newA256);
23
+ newB = MpcCore.decrypt(newB256);
24
+ result = MpcCore.decrypt(res);
25
+
26
+ return (newA, newB, result);
27
+ }
28
+ }
29
+
@@ -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 TransferWithAllowance128TestsContract {
7
+ uint128 newA;
8
+ uint128 newB;
9
+ bool result;
10
+ uint128 newAllowance;
11
+
12
+ function getResults() public view returns (uint128, uint128, bool, uint128) {
13
+ return (newA, newB, result, newAllowance);
14
+ }
15
+
16
+ function transferWithAllowanceTest(uint128 a, uint128 b, uint128 amount, uint128 allowance) public returns (uint128, uint128, bool, uint128) {
17
+ gtUint128 a128 = MpcCore.setPublic128(a);
18
+ gtUint128 b128 = MpcCore.setPublic128(b);
19
+ gtUint128 amount128 = MpcCore.setPublic128(amount);
20
+ gtUint128 allowance128 = MpcCore.setPublic128(allowance);
21
+
22
+ (gtUint128 newA128, gtUint128 newB128, gtBool res, gtUint128 newAllowance128) = MpcCore.transferWithAllowance(a128, b128, amount128, allowance128);
23
+
24
+ newA = uint128(MpcCore.decrypt(newA128));
25
+ newB = uint128(MpcCore.decrypt(newB128));
26
+ result = MpcCore.decrypt(res);
27
+ newAllowance = uint128(MpcCore.decrypt(newAllowance128));
28
+
29
+ return (newA, newB, result, newAllowance);
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 TransferWithAllowance256TestsContract {
7
+ uint256 newA;
8
+ uint256 newB;
9
+ bool result;
10
+ uint256 newAllowance;
11
+
12
+ function getResults() public view returns (uint256, uint256, bool, uint256) {
13
+ return (newA, newB, result, newAllowance);
14
+ }
15
+
16
+ function transferWithAllowanceTest(uint256 a, uint256 b, uint256 amount, uint256 allowance) public returns (uint256, uint256, bool, uint256) {
17
+ gtUint256 a256 = MpcCore.setPublic256(a);
18
+ gtUint256 b256 = MpcCore.setPublic256(b);
19
+ gtUint256 amount256 = MpcCore.setPublic256(amount);
20
+ gtUint256 allowance256 = MpcCore.setPublic256(allowance);
21
+
22
+ (gtUint256 newA256, gtUint256 newB256, gtBool res, gtUint256 newAllowance256) = MpcCore.transferWithAllowance(a256, b256, amount256, allowance256);
23
+
24
+ newA = MpcCore.decrypt(newA256);
25
+ newB = MpcCore.decrypt(newB256);
26
+ result = MpcCore.decrypt(res);
27
+ newAllowance = MpcCore.decrypt(newAllowance256);
28
+
29
+ return (newA, newB, result, newAllowance);
30
+ }
31
+ }
32
+