@coti-io/coti-contracts 1.0.9 → 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 (271) 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 +10891 -2449
  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/Arithmetic128BitTestsContract.ts +341 -0
  142. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128TestsContract.ts +311 -0
  143. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.ts +347 -0
  144. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256TestsContract.ts +311 -0
  145. package/typechain-types/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.ts +186 -0
  146. package/typechain-types/contracts/mocks/utils/mpc/Bitwise128TestsContract.ts +179 -0
  147. package/typechain-types/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.ts +186 -0
  148. package/typechain-types/contracts/mocks/utils/mpc/Bitwise256TestsContract.ts +179 -0
  149. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.ts +206 -0
  150. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.ts +206 -0
  151. package/typechain-types/contracts/mocks/utils/mpc/Comparison128BitTestsContract.ts +260 -0
  152. package/typechain-types/contracts/mocks/utils/mpc/Comparison128TestsContract.ts +278 -0
  153. package/typechain-types/contracts/mocks/utils/mpc/Comparison256BitTestsContract.ts +260 -0
  154. package/typechain-types/contracts/mocks/utils/mpc/Comparison256TestsContract.ts +278 -0
  155. package/typechain-types/contracts/mocks/utils/mpc/MinMax128TestsContract.ts +142 -0
  156. package/typechain-types/contracts/mocks/utils/mpc/MinMax256TestsContract.ts +142 -0
  157. package/typechain-types/contracts/mocks/utils/mpc/MinimalImplementation.ts +259 -0
  158. package/typechain-types/contracts/mocks/utils/mpc/MinimalProxy.ts +90 -0
  159. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.ts +302 -0
  160. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.ts +322 -0
  161. package/typechain-types/contracts/mocks/utils/mpc/MpcOperations128TestContract.ts +388 -0
  162. package/typechain-types/contracts/mocks/utils/mpc/MpcOperationsTestContract.ts +455 -0
  163. package/typechain-types/contracts/mocks/utils/mpc/Mux128TestsContract.ts +109 -0
  164. package/typechain-types/contracts/mocks/utils/mpc/Mux256TestsContract.ts +109 -0
  165. package/typechain-types/contracts/mocks/utils/mpc/OnBoard128TestsContract.ts +166 -0
  166. package/typechain-types/contracts/mocks/utils/mpc/OnBoard256TestsContract.ts +194 -0
  167. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV1.ts +385 -0
  168. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV2.ts +441 -0
  169. package/typechain-types/contracts/mocks/utils/mpc/PrivacyProxy.ts +201 -0
  170. package/typechain-types/contracts/mocks/utils/mpc/Random128TestsContract.ts +131 -0
  171. package/typechain-types/contracts/mocks/utils/mpc/Random256TestsContract.ts +131 -0
  172. package/typechain-types/contracts/mocks/utils/mpc/Shift128TestsContract.ts +142 -0
  173. package/typechain-types/contracts/mocks/utils/mpc/Shift256TestsContract.ts +142 -0
  174. package/typechain-types/contracts/mocks/utils/mpc/Transfer128TestsContract.ts +109 -0
  175. package/typechain-types/contracts/mocks/utils/mpc/Transfer256TestsContract.ts +109 -0
  176. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.ts +128 -0
  177. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.ts +128 -0
  178. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.ts +198 -0
  179. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.ts +182 -0
  180. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.ts +257 -0
  181. package/typechain-types/contracts/mocks/utils/mpc/index.ts +32 -0
  182. package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +77 -60
  183. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +77 -60
  184. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +111 -10
  185. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +74 -0
  186. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +4 -0
  187. package/typechain-types/factories/@openzeppelin/contracts/index.ts +1 -0
  188. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +205 -0
  189. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit__factory.ts +100 -0
  190. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  191. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +5 -0
  192. package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +1 -0
  193. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +759 -0
  194. package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +4 -0
  195. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20__factory.ts +43 -0
  196. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +185 -0
  197. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +5 -0
  198. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +198 -0
  199. package/typechain-types/factories/contracts/disperse/disperseToken/index.ts +5 -0
  200. package/typechain-types/factories/contracts/disperse/index.ts +5 -0
  201. package/typechain-types/factories/contracts/index.ts +1 -0
  202. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  203. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +179 -47
  204. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract__factory.ts +349 -0
  205. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +330 -0
  206. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract__factory.ts +364 -0
  207. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +330 -0
  208. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  209. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128BitTestsContract__factory.ts +182 -0
  210. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +184 -0
  211. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256BitTestsContract__factory.ts +182 -0
  212. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +184 -0
  213. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  214. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +203 -0
  215. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +203 -0
  216. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  217. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128BitTestsContract__factory.ts +255 -0
  218. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +295 -0
  219. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  220. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256BitTestsContract__factory.ts +255 -0
  221. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +295 -0
  222. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  223. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +147 -0
  224. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +147 -0
  225. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  226. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +263 -0
  227. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +104 -0
  228. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract__factory.ts +332 -0
  229. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  230. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract__factory.ts +380 -0
  231. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  232. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +723 -0
  233. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1410 -0
  234. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +115 -0
  235. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +115 -0
  236. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  237. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +175 -0
  238. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +205 -0
  239. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +521 -0
  240. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +648 -0
  241. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +179 -0
  242. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +131 -0
  243. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +131 -0
  244. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +147 -0
  245. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +147 -0
  246. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  247. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  248. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +135 -0
  249. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +135 -0
  250. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  251. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  252. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +154 -0
  253. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +154 -0
  254. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  255. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  256. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  257. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  258. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  259. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  260. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +190 -0
  261. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +210 -0
  262. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +260 -0
  263. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +32 -0
  264. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +7 -7
  265. package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +174 -42
  266. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +174 -42
  267. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +126 -0
  268. package/typechain-types/hardhat.d.ts +702 -0
  269. package/typechain-types/index.ts +78 -0
  270. package/contracts/mocks/utils/mpc/README.md +0 -486
  271. package/contracts/package.json +0 -11
@@ -0,0 +1,280 @@
1
+ import { expect } from "chai";
2
+ import hre from "hardhat";
3
+ import { Wallet } from "@coti-io/coti-ethers";
4
+ import { setupAccounts } from "../accounts";
5
+ import type { MinimalProxy, MinimalImplementation } from "../../../typechain-types";
6
+ import { Buffer } from "buffer";
7
+
8
+ const GAS_LIMIT = 12000000;
9
+
10
+ /**
11
+ * Minimal test demonstrating IT-type validation through proxy:
12
+ * - itUint256 works through proxy āœ…
13
+ * - Wrong signature (signed for implementation) fails correctly āœ…
14
+ */
15
+ describe("Minimal Proxy Demo - IT-Type Validation Issue", function () {
16
+ let proxy: MinimalProxy;
17
+ let implementation: MinimalImplementation;
18
+ let proxyAsImpl: MinimalImplementation;
19
+ let owner: Wallet;
20
+
21
+ this.timeout(120000);
22
+
23
+ before(async function () {
24
+ const accounts = await setupAccounts();
25
+ owner = accounts[0];
26
+
27
+ const ownerInfo = owner.getUserOnboardInfo();
28
+ if (!ownerInfo || !ownerInfo.aesKey) {
29
+ throw new Error("Owner AES key not found");
30
+ }
31
+
32
+ console.log("\n" + "=".repeat(70));
33
+ console.log("MINIMAL PROXY DEMO - Showing IT-Type Validation Issue");
34
+ console.log("=".repeat(70));
35
+
36
+ // Deploy implementation
37
+ const ImplFactory = await hre.ethers.getContractFactory("MinimalImplementation", owner as any);
38
+ implementation = await ImplFactory.deploy({ gasLimit: GAS_LIMIT });
39
+ await implementation.waitForDeployment();
40
+ const implAddress = await implementation.getAddress();
41
+ console.log("Implementation:", implAddress);
42
+
43
+ // Deploy proxy
44
+ const ProxyFactory = await hre.ethers.getContractFactory("MinimalProxy", owner as any);
45
+ proxy = await ProxyFactory.deploy(implAddress, { gasLimit: GAS_LIMIT });
46
+ await proxy.waitForDeployment();
47
+ const proxyAddress = await proxy.getAddress();
48
+ console.log("Proxy:", proxyAddress);
49
+
50
+ // Create interface to call proxy as implementation
51
+ proxyAsImpl = await hre.ethers.getContractAt(
52
+ "MinimalImplementation",
53
+ proxyAddress,
54
+ owner as any
55
+ ) as MinimalImplementation;
56
+
57
+ console.log("=".repeat(70) + "\n");
58
+ });
59
+
60
+ it("itUint256 addition through proxy", async function () {
61
+ console.log("\nTest 1: itUint256 addition through proxy");
62
+ console.log(" Values: a=1000 (encrypted), b=2000 (encrypted)");
63
+
64
+ const proxyAddress = await proxy.getAddress();
65
+ const implAddress = await implementation.getAddress();
66
+ const addAndStoreFunc = proxyAsImpl.interface.getFunction("addAndStore");
67
+ if (!addAndStoreFunc) {
68
+ throw new Error("addAndStore function not found in contract interface");
69
+ }
70
+ const selector = addAndStoreFunc.selector;
71
+
72
+ console.log(` šŸ“ Implementation address: ${implAddress}`);
73
+ console.log(` šŸ“ Proxy address: ${proxyAddress}`);
74
+ console.log(` šŸ”‘ Function selector: ${selector}`);
75
+ console.log(` āœ… IT-type signed for: ${proxyAddress} (PROXY, not implementation)`);
76
+ console.log("");
77
+
78
+ // Use values > 128 bits for itUint256
79
+ const valueA = (2n ** 128n) + 1000n;
80
+ const valueB = (2n ** 128n) + 2000n;
81
+ const expected = valueA + valueB;
82
+
83
+ const encA = await owner.encryptValue256(valueA, proxyAddress, selector);
84
+ const encB = await owner.encryptValue256(valueB, proxyAddress, selector);
85
+
86
+ console.log(` IT-type a: ciphertextHigh=${encA.ciphertext.ciphertextHigh.toString().slice(0, 20)}...`);
87
+ console.log(` ciphertextLow=${encA.ciphertext.ciphertextLow.toString().slice(0, 20)}...`);
88
+ console.log(` signature=${Buffer.from(encA.signature).toString('hex').slice(0, 20)}...`);
89
+ console.log(` IT-type b: ciphertextHigh=${encB.ciphertext.ciphertextHigh.toString().slice(0, 20)}...`);
90
+ console.log(` ciphertextLow=${encB.ciphertext.ciphertextLow.toString().slice(0, 20)}...`);
91
+ console.log(` signature=${Buffer.from(encB.signature).toString('hex').slice(0, 20)}...`);
92
+ console.log(` šŸ“ Sending to: ${proxyAddress}`);
93
+
94
+ // Send the transaction and check events
95
+ const tx = await proxyAsImpl.connect(owner).addAndStore(encA, encB, { gasLimit: GAS_LIMIT });
96
+ console.log(` šŸ“ Transaction hash: ${tx.hash}`);
97
+ console.log(` šŸ”— Check on explorer: http://explorer.coti.io/tx/${tx.hash}`);
98
+
99
+ const receipt = await tx.wait();
100
+ console.log(` āœ… Transaction confirmed in block: ${receipt?.blockNumber}`);
101
+ console.log(` šŸ“Š Gas used: ${receipt?.gasUsed.toString()}`);
102
+
103
+ // Check if events were emitted
104
+ let eventCount = 0;
105
+ receipt?.logs.forEach((log: any) => {
106
+ try {
107
+ const parsed = implementation.interface.parseLog({ topics: log.topics as string[], data: log.data });
108
+ if (parsed) {
109
+ eventCount++;
110
+ console.log(` āœ… Event ${eventCount}: ${parsed.name} - ${parsed.args[1] || parsed.args[0]}`);
111
+ }
112
+ } catch (e) {}
113
+ });
114
+
115
+ if (eventCount >= 3) {
116
+ console.log(` āœ… SUCCESS: IT-types validated and addition completed!`);
117
+ console.log(` šŸ“Š Attempting to decrypt result...`);
118
+
119
+ // Get the stored encrypted value and decrypt
120
+ const storedCt = await proxyAsImpl.getStoredResult();
121
+ if (storedCt && storedCt.ciphertextHigh && storedCt.ciphertextLow) {
122
+ console.log(` āœ… Encrypted result stored on contract`);
123
+ const decrypted = await owner.decryptValue256({
124
+ ciphertextHigh: storedCt.ciphertextHigh,
125
+ ciphertextLow: storedCt.ciphertextLow
126
+ });
127
+ console.log(` āœ… Decrypted result: ${decrypted.toString()}`);
128
+ console.log(` āœ… Expected result: ${expected.toString()}`);
129
+ expect(decrypted).to.equal(expected);
130
+ console.log(` Status: āœ… VERIFIED - IT-types work through delegatecall proxy!\n`);
131
+ } else {
132
+ console.log(` Status: āœ… VERIFIED - IT-types validated (result stored)\n`);
133
+ }
134
+ } else {
135
+ console.log(` āŒ FAILED: Expected at least 3 events, got ${eventCount}`);
136
+ console.log(` Status: āŒ FAILED - IT-type validation failed\n`);
137
+ throw new Error(`IT-type validation failed through proxy - only ${eventCount} events emitted`);
138
+ }
139
+ });
140
+
141
+ it("itUint256 with different values through proxy", async function () {
142
+ console.log("\nTest 2: itUint256 addition with different values through proxy");
143
+ console.log(" Values: a=5000 (encrypted), b=3000 (encrypted)");
144
+
145
+ const proxyAddress = await proxy.getAddress();
146
+ const implAddress = await implementation.getAddress();
147
+ const addAndStoreFunc = proxyAsImpl.interface.getFunction("addAndStore");
148
+ if (!addAndStoreFunc) {
149
+ throw new Error("addAndStore function not found in contract interface");
150
+ }
151
+ const selector = addAndStoreFunc.selector;
152
+
153
+ console.log(` šŸ“ Implementation address: ${implAddress}`);
154
+ console.log(` šŸ“ Proxy address: ${proxyAddress}`);
155
+ console.log(` šŸ”‘ Function selector: ${selector}`);
156
+ console.log(` āœ… IT-type signed for: ${proxyAddress} (PROXY, not implementation)`);
157
+ console.log("");
158
+
159
+ // Use values > 128 bits for itUint256
160
+ const valueA = (2n ** 128n) + 5000n;
161
+ const valueB = (2n ** 128n) + 3000n;
162
+ const expected = valueA + valueB;
163
+
164
+ const encA = await owner.encryptValue256(valueA, proxyAddress, selector);
165
+ const encB = await owner.encryptValue256(valueB, proxyAddress, selector);
166
+
167
+ console.log(` IT-type a: ciphertextHigh=${encA.ciphertext.ciphertextHigh.toString().slice(0, 20)}...`);
168
+ console.log(` ciphertextLow=${encA.ciphertext.ciphertextLow.toString().slice(0, 20)}...`);
169
+ console.log(` IT-type b: ciphertextHigh=${encB.ciphertext.ciphertextHigh.toString().slice(0, 20)}...`);
170
+ console.log(` ciphertextLow=${encB.ciphertext.ciphertextLow.toString().slice(0, 20)}...`);
171
+ console.log(` šŸ“ Sending to: ${proxyAddress}`);
172
+
173
+ // Send the transaction and check events
174
+ const tx = await proxyAsImpl.connect(owner).addAndStore(encA, encB, { gasLimit: GAS_LIMIT });
175
+ console.log(` šŸ“ Transaction hash: ${tx.hash}`);
176
+
177
+ const receipt = await tx.wait();
178
+ console.log(` āœ… Transaction confirmed in block: ${receipt?.blockNumber}`);
179
+ console.log(` šŸ“Š Gas used: ${receipt?.gasUsed.toString()}`);
180
+
181
+ // Check if events were emitted
182
+ let eventCount = 0;
183
+ receipt?.logs.forEach((log: any) => {
184
+ try {
185
+ const parsed = implementation.interface.parseLog({ topics: log.topics as string[], data: log.data });
186
+ if (parsed) {
187
+ eventCount++;
188
+ console.log(` āœ… Event ${eventCount}: ${parsed.name}`);
189
+ }
190
+ } catch (e) {}
191
+ });
192
+
193
+ if (eventCount >= 3) {
194
+ console.log(` āœ… SUCCESS: IT-types validated and addition completed!`);
195
+
196
+ // Get the stored encrypted value and decrypt
197
+ const storedCt = await proxyAsImpl.getStoredResult();
198
+ if (storedCt && storedCt.ciphertextHigh && storedCt.ciphertextLow) {
199
+ const decrypted = await owner.decryptValue256({
200
+ ciphertextHigh: storedCt.ciphertextHigh,
201
+ ciphertextLow: storedCt.ciphertextLow
202
+ });
203
+ console.log(` āœ… Decrypted result: ${decrypted.toString()}`);
204
+ expect(decrypted).to.equal(expected);
205
+ console.log(` Status: āœ… VERIFIED - IT-types work through delegatecall proxy!\n`);
206
+ }
207
+ } else {
208
+ console.log(` āŒ FAILED: Expected at least 3 events, got ${eventCount}`);
209
+ throw new Error(`IT-type validation failed through proxy - only ${eventCount} events emitted`);
210
+ }
211
+ });
212
+
213
+ it("itUint256 SHOULD FAIL when signed for implementation address", async function () {
214
+ console.log("\nTest 3: itUint256 signed for WRONG address (implementation instead of proxy)");
215
+ console.log(" Values: a=5000 (encrypted), b=3000 (encrypted)");
216
+
217
+ const proxyAddress = await proxy.getAddress();
218
+ const implAddress = await implementation.getAddress();
219
+ const addAndStoreFunc = proxyAsImpl.interface.getFunction("addAndStore");
220
+ if (!addAndStoreFunc) {
221
+ throw new Error("addAndStore function not found in contract interface");
222
+ }
223
+ const selector = addAndStoreFunc.selector;
224
+
225
+ console.log(` šŸ“ Implementation address: ${implAddress}`);
226
+ console.log(` šŸ“ Proxy address: ${proxyAddress}`);
227
+ console.log(` āŒ IT-type signed for: ${implAddress} (WRONG - should be proxy)`);
228
+ console.log("");
229
+
230
+ // Use values > 128 bits for itUint256
231
+ const valueA = (2n ** 128n) + 5000n;
232
+ const valueB = (2n ** 128n) + 3000n;
233
+
234
+ // Sign for implementation address (WRONG!)
235
+ const encA = await owner.encryptValue256(valueA, implAddress, selector);
236
+ const encB = await owner.encryptValue256(valueB, implAddress, selector);
237
+
238
+ console.log(` šŸ“ Sending to: ${proxyAddress}`);
239
+ console.log(` āš ļø But IT-types signed for: ${implAddress} (WRONG!)`);
240
+
241
+ try {
242
+ const tx = await proxyAsImpl.connect(owner).addAndStore(encA, encB, { gasLimit: GAS_LIMIT });
243
+ console.log(` šŸ“ Transaction hash: ${tx.hash}`);
244
+ await tx.wait();
245
+ console.log(` Status: āŒ SHOULD NOT SUCCEED - signature mismatch should be detected!\n`);
246
+ throw new Error("Should have failed but succeeded");
247
+ } catch (error: any) {
248
+ console.log(` āœ… Transaction correctly rejected (signature mismatch)`);
249
+ console.log(` Reason: IT-types signed for ${implAddress}`);
250
+ console.log(` but sent to ${proxyAddress}\n`);
251
+ expect(error.message).to.include("revert");
252
+ }
253
+ });
254
+
255
+
256
+ after(function() {
257
+ console.log("=".repeat(70));
258
+ console.log("TEST RESULTS SUMMARY:");
259
+ console.log(" āœ… Test 1 - itUint256: WORKS (events confirm IT-type validation)");
260
+ console.log(" āœ… Test 2 - itUint256 (diff): WORKS (events confirm IT-type validation)");
261
+ console.log(" āœ… Test 3 - Wrong signature: CORRECTLY REJECTED");
262
+ console.log("\nšŸŽÆ KEY FINDINGS:");
263
+ console.log(" 1. IT-types MUST be signed for PROXY address (not implementation)");
264
+ console.log(" 2. Delegatecall preserves address(this) = PROXY address");
265
+ console.log(" 3. MpcCore.validateCiphertext validates against address(this)");
266
+ console.log(" 4. Signature matches → validation succeeds āœ…");
267
+ console.log(" 5. Events (InputsReceived, CalculationDone, ResultStored) prove successful validation");
268
+ console.log("\nāš ļø IMPORTANT NOTE:");
269
+ console.log(" staticCall doesn't work with MPC operations (state modifications needed)");
270
+ console.log(" Use actual transactions and check events to verify IT-type validation");
271
+ console.log("\nāœ… CONCLUSION:");
272
+ console.log(" Standard delegatecall proxy pattern WORKS PERFECTLY with IT-types!");
273
+ console.log(" Requirements:");
274
+ console.log(" • IT-types signed for proxy address");
275
+ console.log(" • Use actual transactions (not staticCall)");
276
+ console.log(" • Verify success via emitted events");
277
+ console.log("=".repeat(70));
278
+ });
279
+ });
280
+