@coti-io/coti-contracts 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/.github/workflows/npm-publish.yml +18 -14
  2. package/README.md +3 -1
  3. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.sol +452 -0
  4. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.sol +490 -0
  5. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +432 -0
  6. package/contracts/disperse/disperseToken/MintDisperser.sol +120 -0
  7. package/contracts/disperse/disperseToken/TokenDisperser.sol +139 -0
  8. package/contracts/mocks/token/ERC20Mock.sol +19 -0
  9. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +18 -0
  10. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +13 -0
  11. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +44 -0
  12. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +23 -0
  13. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +29 -0
  14. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +9 -4
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +39 -0
  16. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +29 -0
  17. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +18 -0
  18. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +12 -0
  19. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +123 -0
  20. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +122 -0
  21. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +65 -0
  22. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +65 -0
  23. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +64 -0
  24. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +64 -0
  25. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +98 -0
  26. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +98 -0
  27. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +44 -0
  28. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +44 -0
  29. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +55 -0
  30. package/contracts/mocks/utils/mpc/MinimalProxy.sol +27 -0
  31. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +267 -0
  32. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +334 -0
  33. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +24 -0
  34. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +24 -0
  35. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +93 -0
  36. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +116 -0
  37. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +157 -0
  38. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +133 -0
  39. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +137 -0
  40. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +32 -0
  41. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +32 -0
  42. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +36 -0
  43. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +36 -0
  44. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +29 -0
  45. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +29 -0
  46. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +32 -0
  47. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +32 -0
  48. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +59 -0
  49. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +63 -0
  50. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +99 -0
  51. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +7 -6
  52. package/contracts/node/CotiNodeRewards.sol +199 -0
  53. package/contracts/node/SoulboundNodeNFT.sol +519 -0
  54. package/contracts/privacyBridge/PrivacyBridge.sol +318 -0
  55. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +268 -0
  56. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +251 -0
  57. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +16 -0
  58. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +17 -0
  59. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +17 -0
  60. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +17 -0
  61. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +17 -0
  62. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +17 -0
  63. package/contracts/token/PrivateERC20/IPrivateERC20.sol +273 -40
  64. package/contracts/token/PrivateERC20/ITokenReceiver.sol +17 -0
  65. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +20 -0
  66. package/contracts/token/PrivateERC20/PrivateERC20.sol +861 -152
  67. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +17 -0
  68. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +13 -0
  69. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +17 -0
  70. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +17 -0
  71. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +17 -0
  72. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +17 -0
  73. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +13 -0
  74. package/contracts/utils/mpc/MpcCore.sol +10780 -4962
  75. package/contracts/utils/mpc/MpcInterface.sol +7 -2
  76. package/hardhat/gasPriceBump.ts +60 -0
  77. package/hardhat.config.ts +60 -12
  78. package/package.json +21 -3
  79. package/scripts/deploySoulboundNodeNFT.ts +57 -0
  80. package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +327 -0
  81. package/test/token/PrivateERC20/PrivateERC20.test.ts +1109 -268
  82. package/test/utils/mpc/Bitwise128.test.ts +92 -0
  83. package/test/utils/mpc/Bitwise256.test.ts +101 -0
  84. package/test/utils/mpc/BuildInputText128.test.ts +398 -0
  85. package/test/utils/mpc/CheckedArithmetic128.test.ts +45 -0
  86. package/test/utils/mpc/CheckedArithmetic256.test.ts +45 -0
  87. package/test/utils/mpc/Comparison128.test.ts +48 -0
  88. package/test/utils/mpc/Comparison256.test.ts +48 -0
  89. package/test/utils/mpc/InvalidCiphertext.test.ts +179 -0
  90. package/test/utils/mpc/InvalidCiphertext128.test.ts +179 -0
  91. package/test/utils/mpc/InvalidCiphertext256.test.ts +201 -0
  92. package/test/utils/mpc/InvalidTransfer128.test.ts +166 -0
  93. package/test/utils/mpc/InvalidTransfer256.test.ts +158 -0
  94. package/test/utils/mpc/MinMax128.test.ts +44 -0
  95. package/test/utils/mpc/MinMax256.test.ts +44 -0
  96. package/test/utils/mpc/MinimalProxyDemo.test.ts +280 -0
  97. package/test/utils/mpc/MpcOperations.test.ts +589 -0
  98. package/test/utils/mpc/MpcOperations128.test.ts +632 -0
  99. package/test/utils/mpc/Mux128.test.ts +41 -0
  100. package/test/utils/mpc/Mux256.test.ts +41 -0
  101. package/test/utils/mpc/NegativeCases.test.ts +478 -0
  102. package/test/utils/mpc/NegativeCases128.test.ts +237 -0
  103. package/test/utils/mpc/NegativeCases256.test.ts +236 -0
  104. package/test/utils/mpc/OnBoard128.test.ts +90 -0
  105. package/test/utils/mpc/OnBoard256.test.ts +114 -0
  106. package/test/utils/mpc/Precompile128.test.ts +51 -0
  107. package/test/utils/mpc/Precompile256.test.ts +115 -0
  108. package/test/utils/mpc/ProxyValidation.test.ts +199 -0
  109. package/test/utils/mpc/Random128.test.ts +47 -0
  110. package/test/utils/mpc/Random256.test.ts +47 -0
  111. package/test/utils/mpc/Shift128.test.ts +41 -0
  112. package/test/utils/mpc/Shift256.test.ts +41 -0
  113. package/test/utils/mpc/Transfer128.test.ts +46 -0
  114. package/test/utils/mpc/Transfer256.test.ts +46 -0
  115. package/test/utils/mpc/TransferWithAllowance128.test.ts +48 -0
  116. package/test/utils/mpc/TransferWithAllowance256.test.ts +48 -0
  117. package/test/utils/mpc/UpgradeablePrivacyProxy.test.ts +307 -0
  118. package/test/utils/mpc/ValidateCiphertext.test.ts +221 -0
  119. package/test/utils/mpc/ValidateCiphertext256.test.ts +161 -0
  120. package/test/utils/mpc/ValidateCiphertext256Decryption.test.ts +383 -0
  121. package/test/utils/mpc/WalletEncryptionFailures.test.ts +494 -0
  122. package/test/utils/privateErc20Helpers.ts +97 -0
  123. package/typechain-types/@openzeppelin/contracts/access/Ownable.ts +153 -0
  124. package/typechain-types/@openzeppelin/contracts/access/index.ts +4 -0
  125. package/typechain-types/@openzeppelin/contracts/index.ts +2 -0
  126. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +262 -0
  127. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.ts +143 -0
  128. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  129. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +6 -0
  130. package/typechain-types/@openzeppelin/contracts/token/index.ts +2 -0
  131. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperser.ts +679 -0
  132. package/typechain-types/contracts/disperse/coinByRatio/index.ts +4 -0
  133. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20.ts +97 -0
  134. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +206 -0
  135. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +5 -0
  136. package/typechain-types/contracts/disperse/disperseToken/TokenDisperser.ts +191 -0
  137. package/typechain-types/contracts/disperse/disperseToken/index.ts +6 -0
  138. package/typechain-types/contracts/disperse/index.ts +7 -0
  139. package/typechain-types/contracts/index.ts +2 -0
  140. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +77 -60
  141. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128TestsContract.ts +311 -0
  142. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256TestsContract.ts +311 -0
  143. package/typechain-types/contracts/mocks/utils/mpc/Bitwise128TestsContract.ts +179 -0
  144. package/typechain-types/contracts/mocks/utils/mpc/Bitwise256TestsContract.ts +179 -0
  145. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.ts +206 -0
  146. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.ts +206 -0
  147. package/typechain-types/contracts/mocks/utils/mpc/Comparison128TestsContract.ts +278 -0
  148. package/typechain-types/contracts/mocks/utils/mpc/Comparison256TestsContract.ts +278 -0
  149. package/typechain-types/contracts/mocks/utils/mpc/MinMax128TestsContract.ts +142 -0
  150. package/typechain-types/contracts/mocks/utils/mpc/MinMax256TestsContract.ts +142 -0
  151. package/typechain-types/contracts/mocks/utils/mpc/MinimalImplementation.ts +259 -0
  152. package/typechain-types/contracts/mocks/utils/mpc/MinimalProxy.ts +90 -0
  153. package/typechain-types/contracts/mocks/utils/mpc/MpcOperations128TestContract.ts +388 -0
  154. package/typechain-types/contracts/mocks/utils/mpc/MpcOperationsTestContract.ts +455 -0
  155. package/typechain-types/contracts/mocks/utils/mpc/Mux128TestsContract.ts +109 -0
  156. package/typechain-types/contracts/mocks/utils/mpc/Mux256TestsContract.ts +109 -0
  157. package/typechain-types/contracts/mocks/utils/mpc/OnBoard128TestsContract.ts +166 -0
  158. package/typechain-types/contracts/mocks/utils/mpc/OnBoard256TestsContract.ts +194 -0
  159. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV1.ts +385 -0
  160. package/typechain-types/contracts/mocks/utils/mpc/PrivacyImplementationV2.ts +441 -0
  161. package/typechain-types/contracts/mocks/utils/mpc/PrivacyProxy.ts +201 -0
  162. package/typechain-types/contracts/mocks/utils/mpc/Random128TestsContract.ts +131 -0
  163. package/typechain-types/contracts/mocks/utils/mpc/Random256TestsContract.ts +131 -0
  164. package/typechain-types/contracts/mocks/utils/mpc/Shift128TestsContract.ts +142 -0
  165. package/typechain-types/contracts/mocks/utils/mpc/Shift256TestsContract.ts +142 -0
  166. package/typechain-types/contracts/mocks/utils/mpc/Transfer128TestsContract.ts +109 -0
  167. package/typechain-types/contracts/mocks/utils/mpc/Transfer256TestsContract.ts +109 -0
  168. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.ts +128 -0
  169. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.ts +128 -0
  170. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.ts +198 -0
  171. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.ts +182 -0
  172. package/typechain-types/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.ts +257 -0
  173. package/typechain-types/contracts/mocks/utils/mpc/index.ts +32 -8
  174. package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +77 -60
  175. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +77 -60
  176. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +111 -10
  177. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +74 -0
  178. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +4 -0
  179. package/typechain-types/factories/@openzeppelin/contracts/index.ts +1 -0
  180. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +205 -0
  181. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit__factory.ts +100 -0
  182. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  183. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +5 -0
  184. package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +1 -0
  185. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +759 -0
  186. package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +4 -0
  187. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IMintableERC20__factory.ts +43 -0
  188. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +185 -0
  189. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +5 -0
  190. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +198 -0
  191. package/typechain-types/factories/contracts/disperse/disperseToken/index.ts +5 -0
  192. package/typechain-types/factories/contracts/disperse/index.ts +5 -0
  193. package/typechain-types/factories/contracts/index.ts +1 -0
  194. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  195. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +179 -47
  196. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +330 -0
  197. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +330 -0
  198. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  199. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +184 -0
  200. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +184 -0
  201. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  202. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +203 -0
  203. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +203 -0
  204. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  205. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +295 -0
  206. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  207. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +295 -0
  208. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  209. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +147 -0
  210. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +147 -0
  211. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  212. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +263 -0
  213. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +104 -0
  214. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  215. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  216. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +723 -0
  217. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1410 -0
  218. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +115 -0
  219. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +115 -0
  220. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  221. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +175 -0
  222. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +205 -0
  223. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +521 -0
  224. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +648 -0
  225. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +179 -0
  226. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +131 -0
  227. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +131 -0
  228. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +147 -0
  229. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +147 -0
  230. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  231. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  232. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +135 -0
  233. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +135 -0
  234. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  235. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  236. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +154 -0
  237. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +154 -0
  238. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  239. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  240. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  241. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  242. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  243. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  244. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +190 -0
  245. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +210 -0
  246. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +260 -0
  247. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +32 -8
  248. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +7 -7
  249. package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +174 -42
  250. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +174 -42
  251. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +126 -0
  252. package/typechain-types/hardhat.d.ts +638 -80
  253. package/typechain-types/index.ts +78 -16
  254. package/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.sol +0 -260
  255. package/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.sol +0 -264
  256. package/contracts/mocks/utils/mpc/Bitwise128BitTestsContract.sol +0 -91
  257. package/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.sol +0 -91
  258. package/contracts/mocks/utils/mpc/Comparison128BitTestsContract.sol +0 -158
  259. package/contracts/mocks/utils/mpc/Comparison256BitTestsContract.sol +0 -158
  260. package/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.sol +0 -185
  261. package/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.sol +0 -190
  262. package/contracts/mocks/utils/mpc/README.md +0 -486
  263. package/test/utils/mpc/Unsigned128BitIntegers.test.ts +0 -945
  264. package/test/utils/mpc/Unsigned256BitIntegers.test.ts +0 -1124
  265. package/test/utils/mpc/helpers.ts +0 -77
@@ -1,1124 +0,0 @@
1
- import hre from "hardhat"
2
- import { expect } from "chai"
3
- import { setupAccounts } from "../accounts"
4
- import { ItUint256Struct } from "../../../typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract"
5
- import { decryptUint256, encryptUint256, generateRandomNumber } from "./helpers"
6
-
7
- const MAX_UINT256 = BigInt('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff')
8
-
9
- async function deploy() {
10
- const [owner, otherAccount] = await setupAccounts()
11
-
12
- const extendedMiscellaneousTestsContract = await hre.ethers.getContractFactory("Miscellaneous256BitTestsContract")
13
- const extendedMiscellaneousTests = await extendedMiscellaneousTestsContract.connect(owner).deploy()
14
- await extendedMiscellaneousTests.waitForDeployment()
15
-
16
- const extendedArithmeticTestsContract = await hre.ethers.getContractFactory("Arithmetic256BitTestsContract")
17
- const extendedArithmeticTests = await extendedArithmeticTestsContract.connect(owner).deploy()
18
- await extendedArithmeticTests.waitForDeployment()
19
-
20
- const extendedBitwiseTestsContract = await hre.ethers.getContractFactory("Bitwise256BitTestsContract")
21
- const extendedBitwiseTests = await extendedBitwiseTestsContract.connect(owner).deploy()
22
- await extendedBitwiseTests.waitForDeployment()
23
-
24
- const extendedComparisonTestsContract = await hre.ethers.getContractFactory("Comparison256BitTestsContract")
25
- const extendedComparisonTests = await extendedComparisonTestsContract.connect(owner).deploy()
26
- await extendedComparisonTests.waitForDeployment()
27
-
28
- return { extendedMiscellaneousTests, extendedArithmeticTests, extendedBitwiseTests, extendedComparisonTests, owner }
29
- }
30
-
31
- describe("MPC Core", function () {
32
- let deployment: Awaited<ReturnType<typeof deploy>>
33
-
34
- before(async function () {
35
- deployment = await deploy()
36
- })
37
-
38
- describe("256-bit unsigned integers", function () {
39
- it("validateCiphertext", async function () {
40
- const { extendedMiscellaneousTests, owner } = deployment
41
-
42
- // Generate two arrays of 10 random 256-bit integers
43
- const numbers: bigint[] = []
44
- const encryptedNumbers: ItUint256Struct[] = []
45
-
46
- for (let i = 0; i < 1; i++) {
47
- // Generate random 256-bit integers
48
- const number = generateRandomNumber(32)
49
-
50
- numbers.push(number)
51
- encryptedNumbers.push(
52
- await encryptUint256(
53
- number,
54
- owner,
55
- await extendedMiscellaneousTests.getAddress(),
56
- extendedMiscellaneousTests.validateCiphertextTest.fragment.selector
57
- ) as ItUint256Struct
58
- )
59
- }
60
-
61
- // Call validateCiphertextTest with the array
62
- await (await extendedMiscellaneousTests.validateCiphertextTest(encryptedNumbers)).wait()
63
-
64
- // Verify results
65
- for (let i = 0; i < 1; i++) {
66
- const result = await extendedMiscellaneousTests.numbers2(i)
67
- expect(result).to.equal(numbers[i])
68
- }
69
- })
70
-
71
- it("offBoardToUser", async function () {
72
- const { extendedMiscellaneousTests, owner } = deployment
73
-
74
- // Generate two arrays of 10 random 256-bit integers
75
- const numbers: bigint[] = []
76
-
77
- for (let i = 0; i < 1; i++) {
78
- // Generate random 256-bit integers
79
- numbers.push(generateRandomNumber(32))
80
- }
81
-
82
- // Call validateCiphertextTest with the array
83
- await (await extendedMiscellaneousTests.offBoardToUserTest(numbers)).wait()
84
-
85
- // Verify results
86
- for (let i = 0; i < 1; i++) {
87
- const ctNumber = await extendedMiscellaneousTests.ctNumbers2(i)
88
-
89
- const result = await decryptUint256(ctNumber, owner)
90
-
91
- expect(result).to.equal(numbers[i])
92
- }
93
- })
94
-
95
- it("setPublic", async function () {
96
- const { extendedMiscellaneousTests } = deployment
97
-
98
- // Generate two arrays of 10 random 256-bit integers
99
- const numbers: bigint[] = []
100
-
101
- for (let i = 0; i < 1; i++) {
102
- // Generate random 256-bit integers
103
- numbers.push(generateRandomNumber(32))
104
- }
105
-
106
- // Call setPublicTest with the arrays
107
- await (await extendedMiscellaneousTests.setPublicTest(numbers)).wait()
108
-
109
- // Verify results
110
- for (let i = 0; i < 1; i++) {
111
- const result = await extendedMiscellaneousTests.numbers2(i)
112
- expect(result).to.equal(numbers[i])
113
- }
114
- })
115
-
116
- it("rand", async function () {
117
- const { extendedMiscellaneousTests } = deployment
118
-
119
- const length: bigint = generateRandomNumber(1)
120
-
121
- // Call setPublicTest with the arrays
122
- await (await extendedMiscellaneousTests.randTest2(length)).wait()
123
-
124
- // Verify results
125
- for (let i = 0; i < length; i++) {
126
- const result = await extendedMiscellaneousTests.numbers2(i)
127
- expect(result).to.not.equal(0n)
128
- }
129
- })
130
-
131
- it("randBoundedBits", async function () {
132
- const { extendedMiscellaneousTests } = deployment
133
-
134
- // Generate an array of 10 random 8-bit integers
135
- const numbers: bigint[] = []
136
-
137
- while (numbers.length < 1) {
138
- // Generate random 8-bit integers
139
- numbers.push(generateRandomNumber(1))
140
- }
141
-
142
- // Call setPublicTest with the arrays
143
- await (await extendedMiscellaneousTests.randBoundedBitsTest2(numbers)).wait()
144
-
145
- // Verify results
146
- for (let i = 0; i < 1; i++) {
147
- const result = await extendedMiscellaneousTests.numbers2(i)
148
- expect(result).to.not.equal(0n)
149
- }
150
- })
151
-
152
- it("transfer", async function () {
153
- const { extendedMiscellaneousTests } = deployment
154
-
155
- // Generate two arrays of 10 random 256-bit integers
156
- const aArr: bigint[] = []
157
- const bArr: bigint[] = []
158
- const amountArr: bigint[] = []
159
- const newA: bigint[] = []
160
- const newB: bigint[] = []
161
- const successArr: boolean[] = []
162
-
163
- while (aArr.length < 1) {
164
- // Generate random 256-bit integers
165
-
166
- const a = generateRandomNumber(30)
167
- const b = generateRandomNumber(30)
168
- const amount = generateRandomNumber(30)
169
-
170
- if (b + amount > MAX_UINT256) continue
171
-
172
- aArr.push(a)
173
- bArr.push(b)
174
- amountArr.push(amount)
175
-
176
- const success = a >= amount
177
-
178
- newA.push(success ? a - amount : a)
179
- newB.push(success ? b + amount : b)
180
- successArr.push(success)
181
- }
182
-
183
- // Call transferTest with the arrays
184
- await (await extendedMiscellaneousTests.transferTest(aArr, bArr, amountArr)).wait()
185
-
186
- // Verify results
187
- for (let i = 0; i < 1; i++) {
188
- const a = await extendedMiscellaneousTests.a2(i)
189
- const b = await extendedMiscellaneousTests.b2(i)
190
- const success = await extendedMiscellaneousTests.success(i)
191
-
192
- expect(a).to.equal(newA[i])
193
- expect(b).to.equal(newB[i])
194
- expect(success).to.equal(successArr[i])
195
- }
196
- })
197
-
198
- it("transferWithAllowance", async function () {
199
- const { extendedMiscellaneousTests } = deployment
200
-
201
- // Generate two arrays of 10 random 256-bit integers
202
- const aArr: bigint[] = []
203
- const bArr: bigint[] = []
204
- const amountArr: bigint[] = []
205
- const allowanceArr: bigint[] = []
206
- const newA: bigint[] = []
207
- const newB: bigint[] = []
208
- const successArr: boolean[] = []
209
- const newAllowanceArr: bigint[] = []
210
-
211
- while (aArr.length < 1) {
212
- // Generate random 256-bit integers
213
-
214
- const a = generateRandomNumber(30)
215
- const b = generateRandomNumber(30)
216
- const amount = generateRandomNumber(30)
217
- const allowance = generateRandomNumber(30)
218
-
219
- if (b + amount > MAX_UINT256) continue
220
-
221
- aArr.push(a)
222
- bArr.push(b)
223
- amountArr.push(amount)
224
- allowanceArr.push(allowance)
225
-
226
- const success = a >= amount && amount <= allowance
227
-
228
- newA.push(success ? a - amount : a)
229
- newB.push(success ? b + amount : b)
230
- successArr.push(success)
231
- newAllowanceArr.push(success ? allowance - amount : allowance)
232
- }
233
-
234
- // Call transferWithAllowanceTest with the arrays
235
- await (await extendedMiscellaneousTests.transferWithAllowanceTest(aArr, bArr, amountArr, allowanceArr)).wait()
236
-
237
- // Verify results
238
- for (let i = 0; i < 1; i++) {
239
- const a = await extendedMiscellaneousTests.a2(i)
240
- const b = await extendedMiscellaneousTests.b2(i)
241
- const success = await extendedMiscellaneousTests.success(i)
242
- const allowance = await extendedMiscellaneousTests.allowance2(i)
243
-
244
- expect(a).to.equal(newA[i])
245
- expect(b).to.equal(newB[i])
246
- expect(success).to.equal(successArr[i])
247
- expect(allowance).to.equal(newAllowanceArr[i])
248
- }
249
- })
250
-
251
- it("add", async function () {
252
- const { extendedArithmeticTests } = deployment
253
-
254
- // Generate two arrays of 10 random 256-bit integers
255
- const numbers1: bigint[] = []
256
- const numbers2: bigint[] = []
257
- const expectedResults: bigint[] = []
258
-
259
- for (let i = 0; i < 1; i++) {
260
- // Generate random 256-bit integers
261
- const num1 = generateRandomNumber(30)
262
- const num2 = generateRandomNumber(30)
263
-
264
- numbers1.push(num1)
265
- numbers2.push(num2)
266
- expectedResults.push(num1 + num2)
267
- }
268
-
269
- // Call addTest with the arrays
270
- await (await extendedArithmeticTests.addTest(numbers1, numbers2)).wait()
271
-
272
- // Verify results
273
- for (let i = 0; i < 1; i++) {
274
- const result = await extendedArithmeticTests.numbers2(i)
275
- expect(result).to.equal(expectedResults[i])
276
- }
277
- })
278
-
279
- it("checkedAdd", async function () {
280
- const { extendedArithmeticTests, owner } = deployment
281
-
282
- for (let i = 0; i < 1; i++) {
283
- // Generate random 256-bit integers
284
- const num1 = generateRandomNumber(32)
285
- const num2 = generateRandomNumber(32)
286
-
287
- if (num1 + num2 <= MAX_UINT256) { // max uint256
288
- // Call checkedAddTest
289
- await (await extendedArithmeticTests.checkedAddTest(num1, num2)).wait()
290
-
291
- const result = await extendedArithmeticTests.numbers2(0)
292
- expect(result).to.equal(num1 + num2)
293
- } else {
294
- // Expect revert
295
- const tx = await extendedArithmeticTests.checkedAddTest(num1, num2)
296
-
297
- try {
298
- await tx.wait()
299
- } catch (e) {
300
- const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
301
- expect(receipt?.status).to.be.equal(0)
302
- }
303
- }
304
- }
305
- })
306
-
307
- it("checkedAddWithOverflowBit", async function () {
308
- const { extendedArithmeticTests } = deployment
309
-
310
- // Generate two arrays of 10 random 256-bit integers
311
- const numbers1: bigint[] = []
312
- const numbers2: bigint[] = []
313
- const expectedOverflows: boolean[] = []
314
- const expectedResults: bigint[] = []
315
-
316
- for (let i = 0; i < 1; i++) {
317
- // Generate random 256-bit integers
318
- const num1 = generateRandomNumber(32)
319
- const num2 = generateRandomNumber(32)
320
-
321
- numbers1.push(num1)
322
- numbers2.push(num2)
323
- expectedOverflows.push(num1 + num2 > MAX_UINT256)
324
- expectedResults.push(num1 + num2)
325
- }
326
-
327
- // Call checkedAddWithOverflowBitTest with the arrays
328
- await (await extendedArithmeticTests.checkedAddWithOverflowBitTest(numbers1, numbers2)).wait()
329
-
330
- // Verify results
331
- for (let i = 0; i < 1; i++) {
332
- const bit = await extendedArithmeticTests.overflows(i)
333
- const bitLHS = await extendedArithmeticTests.overflowsLHS(i)
334
- const bitRHS = await extendedArithmeticTests.overflowsRHS(i)
335
- const result = await extendedArithmeticTests.numbers2(i)
336
- const resultLHS = await extendedArithmeticTests.numbersLHS2(i)
337
- const resultRHS = await extendedArithmeticTests.numbersRHS2(i)
338
-
339
- expect(bit).to.equal(expectedOverflows[i])
340
- expect(bitLHS).to.equal(expectedOverflows[i])
341
- expect(bitRHS).to.equal(expectedOverflows[i])
342
-
343
- if (bit) {
344
- expect(result).to.not.equal(expectedResults[i])
345
- expect(resultLHS).to.not.equal(expectedResults[i])
346
- expect(resultRHS).to.not.equal(expectedResults[i])
347
- } else {
348
- expect(result).to.equal(expectedResults[i])
349
- expect(resultLHS).to.equal(expectedResults[i])
350
- expect(resultRHS).to.equal(expectedResults[i])
351
- }
352
- }
353
- })
354
-
355
- it("sub", async function () {
356
- const { extendedArithmeticTests } = deployment
357
-
358
- // Generate two arrays of 10 random 256-bit integers
359
- const numbers1: bigint[] = []
360
- const numbers2: bigint[] = []
361
- const expectedResults: bigint[] = []
362
-
363
- for (let i = 0; i < 1; i++) {
364
- // Generate random 256-bit integers
365
- const num1 = generateRandomNumber(32)
366
- const num2 = generateRandomNumber(32)
367
-
368
- if (num1 >= num2) {
369
- numbers1.push(num1)
370
- numbers2.push(num2)
371
- expectedResults.push(num1 - num2)
372
- } else {
373
- numbers1.push(num2)
374
- numbers2.push(num1)
375
- expectedResults.push(num2 - num1)
376
- }
377
- }
378
-
379
- // Call subTest with the arrays
380
- await (await extendedArithmeticTests.subTest(numbers1, numbers2)).wait()
381
-
382
- // Verify results
383
- for (let i = 0; i < 1; i++) {
384
- const result = await extendedArithmeticTests.numbers2(i)
385
- expect(result).to.equal(expectedResults[i])
386
- }
387
- })
388
-
389
- it("checkedSub", async function () {
390
- const { extendedArithmeticTests, owner } = deployment
391
-
392
- for (let i = 0; i < 1; i++) {
393
- // Generate random 256-bit integers
394
- const num1 = generateRandomNumber(32)
395
- const num2 = generateRandomNumber(32)
396
-
397
- if (num1 - num2 >= 0n) {
398
- // Call checkedSubTest
399
- await (await extendedArithmeticTests.checkedSubTest(num1, num2)).wait()
400
-
401
- const result = await extendedArithmeticTests.numbers2(0)
402
- expect(result).to.equal(num1 - num2)
403
- } else {
404
- // Expect revert
405
- const tx = await extendedArithmeticTests.checkedSubTest(num1, num2)
406
-
407
- try {
408
- await tx.wait()
409
- } catch (e) {
410
- const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
411
- expect(receipt?.status).to.be.equal(0)
412
- }
413
- }
414
- }
415
- })
416
-
417
- it("checkedSubWithOverflowBit", async function () {
418
- const { extendedArithmeticTests } = deployment
419
-
420
- // Generate two arrays of 10 random 256-bit integers
421
- const numbers1: bigint[] = []
422
- const numbers2: bigint[] = []
423
- const expectedOverflows: boolean[] = []
424
- const expectedResults: bigint[] = []
425
-
426
- for (let i = 0; i < 1; i++) {
427
- // Generate random 256-bit integers
428
- const num1 = generateRandomNumber(32)
429
- const num2 = generateRandomNumber(32)
430
-
431
- numbers1.push(num1)
432
- numbers2.push(num2)
433
- expectedOverflows.push(num1 - num2 < 0n)
434
- expectedResults.push(num1 - num2)
435
- }
436
-
437
- // Call checkedSubWithOverflowBitTest with the arrays
438
- await (await extendedArithmeticTests.checkedSubWithOverflowBitTest(numbers1, numbers2)).wait()
439
-
440
- // Verify results
441
- for (let i = 0; i < 1; i++) {
442
- const bit = await extendedArithmeticTests.overflows(i)
443
- const bitLHS = await extendedArithmeticTests.overflowsLHS(i)
444
- const bitRHS = await extendedArithmeticTests.overflowsRHS(i)
445
- const result = await extendedArithmeticTests.numbers2(i)
446
- const resultLHS = await extendedArithmeticTests.numbersLHS2(i)
447
- const resultRHS = await extendedArithmeticTests.numbersRHS2(i)
448
-
449
- expect(bit).to.equal(expectedOverflows[i])
450
- expect(bitLHS).to.equal(expectedOverflows[i])
451
- expect(bitRHS).to.equal(expectedOverflows[i])
452
-
453
- if (bit) {
454
- expect(result).to.not.equal(expectedResults[i])
455
- expect(resultLHS).to.not.equal(expectedResults[i])
456
- expect(resultRHS).to.not.equal(expectedResults[i])
457
- } else {
458
- expect(result).to.equal(expectedResults[i])
459
- expect(resultLHS).to.equal(expectedResults[i])
460
- expect(resultRHS).to.equal(expectedResults[i])
461
- }
462
- }
463
- })
464
-
465
- it("mul", async function () {
466
- const { extendedArithmeticTests } = deployment
467
-
468
- // Generate two arrays of 10 random 256-bit integers
469
- const numbers1: bigint[] = []
470
- const numbers2: bigint[] = []
471
- const expectedResults: bigint[] = []
472
-
473
- while (numbers1.length < 1) {
474
- // Generate random 256-bit integers
475
- const num1 = generateRandomNumber(17)
476
- const num2 = generateRandomNumber(17)
477
-
478
- if (num1 * num2 > MAX_UINT256) continue
479
-
480
- numbers1.push(num1)
481
- numbers2.push(num2)
482
- expectedResults.push(num1 * num2)
483
- }
484
-
485
- // Call addTest with the arrays
486
- await (await extendedArithmeticTests.mulTest(numbers1, numbers2, 0n, { gasLimit: 80000000 })).wait()
487
-
488
- // Verify results
489
- for (let i = 0; i < 1; i++) {
490
- const result = await extendedArithmeticTests.numbers2(i)
491
-
492
- expect(result).to.equal(expectedResults[i])
493
- }
494
- })
495
-
496
- it("mulLHS", async function () {
497
- const { extendedArithmeticTests } = deployment
498
-
499
- // Generate two arrays of 10 random 256-bit integers
500
- const numbers1: bigint[] = []
501
- const numbers2: bigint[] = []
502
- const expectedResults: bigint[] = []
503
-
504
- while (numbers1.length < 1) {
505
- // Generate random 256-bit integers
506
- const num1 = generateRandomNumber(17)
507
- const num2 = generateRandomNumber(17)
508
-
509
- if (num1 * num2 > MAX_UINT256) continue
510
-
511
- numbers1.push(num1)
512
- numbers2.push(num2)
513
- expectedResults.push(num1 * num2)
514
- }
515
-
516
- // Call addTest with the arrays
517
- await (await extendedArithmeticTests.mulTest(numbers1, numbers2, 1n, { gasLimit: 80000000 })).wait()
518
-
519
- // Verify results
520
- for (let i = 0; i < 1; i++) {
521
- const result = await extendedArithmeticTests.numbers2(i)
522
-
523
- expect(result).to.equal(expectedResults[i])
524
- }
525
- })
526
-
527
- it("mulRHS", async function () {
528
- const { extendedArithmeticTests } = deployment
529
-
530
- // Generate two arrays of 10 random 256-bit integers
531
- const numbers1: bigint[] = []
532
- const numbers2: bigint[] = []
533
- const expectedResults: bigint[] = []
534
-
535
- while (numbers1.length < 1) {
536
- // Generate random 256-bit integers
537
- const num1 = generateRandomNumber(17)
538
- const num2 = generateRandomNumber(17)
539
-
540
- if (num1 * num2 > MAX_UINT256) continue
541
-
542
- numbers1.push(num1)
543
- numbers2.push(num2)
544
- expectedResults.push(num1 * num2)
545
- }
546
-
547
- // Call addTest with the arrays
548
- await (await extendedArithmeticTests.mulTest(numbers1, numbers2, 2n, { gasLimit: 80000000 })).wait()
549
-
550
- // Verify results
551
- for (let i = 0; i < 1; i++) {
552
- const result = await extendedArithmeticTests.numbers2(i)
553
-
554
- expect(result).to.equal(expectedResults[i])
555
- }
556
- })
557
-
558
- it("checkedMul", async function () {
559
- const { extendedArithmeticTests, owner } = deployment
560
-
561
- for (let i = 0; i < 10; i++) {
562
- // Generate random 256-bit integers
563
- const num1 = generateRandomNumber(17)
564
- const num2 = generateRandomNumber(17)
565
-
566
- if (num1 * num2 <= MAX_UINT256) {
567
- // Call checkedSubTest
568
- await (await extendedArithmeticTests.checkedMulTest(num1, num2, 0n, { gasLimit: 80000000 })).wait()
569
-
570
- const result = await extendedArithmeticTests.numbers2(0)
571
- expect(result).to.equal(num1 * num2)
572
- } else {
573
- // Expect revert
574
- const tx = await extendedArithmeticTests.checkedMulTest(num1, num2, 0n, { gasLimit: 80000000 })
575
-
576
- try {
577
- await tx.wait()
578
- } catch (e) {
579
- const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
580
- expect(receipt?.status).to.be.equal(0)
581
- }
582
- }
583
- }
584
- })
585
-
586
- it("checkedMulLHS", async function () {
587
- const { extendedArithmeticTests, owner } = deployment
588
-
589
- for (let i = 0; i < 10; i++) {
590
- // Generate random 256-bit integers
591
- const num1 = generateRandomNumber(17)
592
- const num2 = generateRandomNumber(17)
593
-
594
- if (num1 * num2 <= MAX_UINT256) {
595
- // Call checkedSubTest
596
- await (await extendedArithmeticTests.checkedMulTest(num1, num2, 1n, { gasLimit: 80000000 })).wait()
597
-
598
- const result = await extendedArithmeticTests.numbers2(0)
599
- expect(result).to.equal(num1 * num2)
600
- } else {
601
- // Expect revert
602
- const tx = await extendedArithmeticTests.checkedMulTest(num1, num2, 1n, { gasLimit: 80000000 })
603
-
604
- try {
605
- await tx.wait()
606
- } catch (e) {
607
- const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
608
- expect(receipt?.status).to.be.equal(0)
609
- }
610
- }
611
- }
612
- })
613
-
614
- it("checkedMulRHS", async function () {
615
- const { extendedArithmeticTests, owner } = deployment
616
-
617
- for (let i = 0; i < 10; i++) {
618
- // Generate random 256-bit integers
619
- const num1 = generateRandomNumber(17)
620
- const num2 = generateRandomNumber(17)
621
-
622
- if (num1 * num2 <= MAX_UINT256) {
623
- // Call checkedSubTest
624
- await (await extendedArithmeticTests.checkedMulTest(num1, num2, 2n, { gasLimit: 80000000 })).wait()
625
-
626
- const result = await extendedArithmeticTests.numbers2(0)
627
- expect(result).to.equal(num1 * num2)
628
- } else {
629
- // Expect revert
630
- const tx = await extendedArithmeticTests.checkedMulTest(num1, num2, 2n, { gasLimit: 80000000 })
631
-
632
- try {
633
- await tx.wait()
634
- } catch (e) {
635
- const receipt = await owner.provider?.getTransactionReceipt(tx.hash)
636
- expect(receipt?.status).to.be.equal(0)
637
- }
638
- }
639
- }
640
- })
641
-
642
- it("checkedMulWithOverflowBit", async function () {
643
- const { extendedArithmeticTests } = deployment
644
-
645
- // Generate two arrays of 10 random 256-bit integers
646
- const numbers1: bigint[] = []
647
- const numbers2: bigint[] = []
648
- const expectedOverflows: boolean[] = []
649
- const expectedResults: bigint[] = []
650
-
651
- for (let i = 0; i < 1; i++) {
652
- // Generate random 256-bit integers
653
- const num1 = generateRandomNumber(17)
654
- const num2 = generateRandomNumber(17)
655
-
656
- numbers1.push(num1)
657
- numbers2.push(num2)
658
- expectedOverflows.push(num1 * num2 > MAX_UINT256)
659
- expectedResults.push(num1 * num2)
660
- }
661
-
662
- // Call checkedSubWithOverflowBitTest with the arrays
663
- await (await extendedArithmeticTests.checkedMulWithOverflowBitTest(numbers1, numbers2, 0n, { gasLimit: 80000000 })).wait()
664
-
665
- // Verify results
666
- for (let i = 0; i < 1; i++) {
667
- const bit = await extendedArithmeticTests.overflows(i)
668
- const result = await extendedArithmeticTests.numbers2(i)
669
-
670
- expect(bit).to.equal(expectedOverflows[i])
671
-
672
- if (bit) {
673
- expect(result).to.not.equal(expectedResults[i])
674
- } else {
675
- expect(result).to.equal(expectedResults[i])
676
- }
677
- }
678
- })
679
-
680
- it("checkedMulWithOverflowBitLHS", async function () {
681
- const { extendedArithmeticTests } = deployment
682
-
683
- // Generate two arrays of 10 random 256-bit integers
684
- const numbers1: bigint[] = []
685
- const numbers2: bigint[] = []
686
- const expectedOverflows: boolean[] = []
687
- const expectedResults: bigint[] = []
688
-
689
- for (let i = 0; i < 1; i++) {
690
- // Generate random 256-bit integers
691
- const num1 = generateRandomNumber(17)
692
- const num2 = generateRandomNumber(17)
693
-
694
- numbers1.push(num1)
695
- numbers2.push(num2)
696
- expectedOverflows.push(num1 * num2 > MAX_UINT256)
697
- expectedResults.push(num1 * num2)
698
- }
699
-
700
- // Call checkedSubWithOverflowBitTest with the arrays
701
- await (await extendedArithmeticTests.checkedMulWithOverflowBitTest(numbers1, numbers2, 1n, { gasLimit: 80000000 })).wait()
702
-
703
- // Verify results
704
- for (let i = 0; i < 1; i++) {
705
- const bit = await extendedArithmeticTests.overflows(i)
706
- const result = await extendedArithmeticTests.numbers2(i)
707
-
708
- expect(bit).to.equal(expectedOverflows[i])
709
-
710
- if (bit) {
711
- expect(result).to.not.equal(expectedResults[i])
712
- } else {
713
- expect(result).to.equal(expectedResults[i])
714
- }
715
- }
716
- })
717
-
718
- it("checkedMulWithOverflowBitRHS", async function () {
719
- const { extendedArithmeticTests } = deployment
720
-
721
- // Generate two arrays of 10 random 256-bit integers
722
- const numbers1: bigint[] = []
723
- const numbers2: bigint[] = []
724
- const expectedOverflows: boolean[] = []
725
- const expectedResults: bigint[] = []
726
-
727
- for (let i = 0; i < 1; i++) {
728
- // Generate random 256-bit integers
729
- const num1 = generateRandomNumber(17)
730
- const num2 = generateRandomNumber(17)
731
-
732
- numbers1.push(num1)
733
- numbers2.push(num2)
734
- expectedOverflows.push(num1 * num2 > MAX_UINT256)
735
- expectedResults.push(num1 * num2)
736
- }
737
-
738
- // Call checkedSubWithOverflowBitTest with the arrays
739
- await (await extendedArithmeticTests.checkedMulWithOverflowBitTest(numbers1, numbers2, 2n, { gasLimit: 80000000 })).wait()
740
-
741
- // Verify results
742
- for (let i = 0; i < 1; i++) {
743
- const bit = await extendedArithmeticTests.overflows(i)
744
- const result = await extendedArithmeticTests.numbers2(i)
745
-
746
- expect(bit).to.equal(expectedOverflows[i])
747
-
748
- if (bit) {
749
- expect(result).to.not.equal(expectedResults[i])
750
- } else {
751
- expect(result).to.equal(expectedResults[i])
752
- }
753
- }
754
- })
755
-
756
- it("and", async function () {
757
- const { extendedBitwiseTests } = deployment
758
-
759
- // Generate two arrays of 10 random 256-bit integers
760
- const numbers1: bigint[] = []
761
- const numbers2: bigint[] = []
762
- const expectedResults: bigint[] = []
763
-
764
- for (let i = 0; i < 1; i++) {
765
- // Generate random 256-bit integers
766
- const num1 = generateRandomNumber(32)
767
- const num2 = generateRandomNumber(32)
768
-
769
- numbers1.push(num1)
770
- numbers2.push(num2)
771
- expectedResults.push(num1 & num2)
772
- }
773
-
774
- // Call addTest with the arrays
775
- await (await extendedBitwiseTests.andTest(numbers1, numbers2)).wait()
776
-
777
- // Verify results
778
- for (let i = 0; i < 1; i++) {
779
- const result = await extendedBitwiseTests.numbers2(i)
780
- expect(result).to.equal(expectedResults[i])
781
- }
782
- })
783
-
784
- it("or", async function () {
785
- const { extendedBitwiseTests } = deployment
786
-
787
- // Generate two arrays of 10 random 256-bit integers
788
- const numbers1: bigint[] = []
789
- const numbers2: bigint[] = []
790
- const expectedResults: bigint[] = []
791
-
792
- for (let i = 0; i < 1; i++) {
793
- // Generate random 256-bit integers
794
- const num1 = generateRandomNumber(32)
795
- const num2 = generateRandomNumber(32)
796
-
797
- numbers1.push(num1)
798
- numbers2.push(num2)
799
- expectedResults.push(num1 | num2)
800
- }
801
-
802
- // Call orTest with the arrays
803
- await (await extendedBitwiseTests.orTest(numbers1, numbers2)).wait()
804
-
805
- // Verify results
806
- for (let i = 0; i < 1; i++) {
807
- const result = await extendedBitwiseTests.numbers2(i)
808
- expect(result).to.equal(expectedResults[i])
809
- }
810
- })
811
-
812
- it("xor", async function () {
813
- const { extendedBitwiseTests } = deployment
814
-
815
- // Generate two arrays of 10 random 256-bit integers
816
- const numbers1: bigint[] = []
817
- const numbers2: bigint[] = []
818
- const expectedResults: bigint[] = []
819
-
820
- for (let i = 0; i < 1; i++) {
821
- // Generate random 256-bit integers
822
- const num1 = generateRandomNumber(32)
823
- const num2 = generateRandomNumber(32)
824
-
825
- numbers1.push(num1)
826
- numbers2.push(num2)
827
- expectedResults.push(num1 ^ num2)
828
- }
829
-
830
- // Call xorTest with the arrays
831
- await (await extendedBitwiseTests.xorTest(numbers1, numbers2)).wait()
832
-
833
- // Verify results
834
- for (let i = 0; i < 1; i++) {
835
- const result = await extendedBitwiseTests.numbers2(i)
836
- expect(result).to.equal(expectedResults[i])
837
- }
838
- })
839
-
840
- it("shl", async function () {
841
- const { extendedBitwiseTests } = deployment
842
-
843
- // Generate an arrays of 10 random 256-bit integers and 10 random 8-bit integers
844
- const numbers1: bigint[] = []
845
- const numbers2: bigint[] = []
846
- const expectedResults: bigint[] = []
847
-
848
- while (numbers2.length < 1) {
849
- // Generate random 256-bit integers
850
- const num1 = generateRandomNumber(16)
851
- const num2 = generateRandomNumber(1)
852
-
853
- if (num1 << num2 > MAX_UINT256) continue
854
-
855
- numbers1.push(num1)
856
- numbers2.push(num2)
857
- expectedResults.push(num1 << num2)
858
- }
859
-
860
- // Call xorTest with the arrays
861
- await (await extendedBitwiseTests.shlTest(numbers1, numbers2)).wait()
862
-
863
- // Verify results
864
- for (let i = 0; i < 1; i++) {
865
- const result = await extendedBitwiseTests.numbers2(i)
866
- expect(result).to.equal(expectedResults[i])
867
- }
868
- })
869
-
870
- it("shr", async function () {
871
- const { extendedBitwiseTests } = deployment
872
-
873
- // Generate an arrays of 10 random 256-bit integers and 10 random 8-bit integers
874
- const numbers1: bigint[] = []
875
- const numbers2: bigint[] = []
876
- const expectedResults: bigint[] = []
877
-
878
- while (numbers2.length < 1) {
879
- // Generate random 256-bit integers
880
- const num1 = generateRandomNumber(16)
881
- const num2 = generateRandomNumber(1)
882
-
883
- if ((num1 & ((1n << num2) - 1n)) !== 0n) continue
884
-
885
- numbers1.push(num1)
886
- numbers2.push(num2)
887
- expectedResults.push(num1 >> num2)
888
- }
889
-
890
- // Call xorTest with the arrays
891
- await (await extendedBitwiseTests.shrTest(numbers1, numbers2)).wait()
892
-
893
- // Verify results
894
- for (let i = 0; i < 1; i++) {
895
- const result = await extendedBitwiseTests.numbers2(i)
896
- expect(result).to.equal(expectedResults[i])
897
- }
898
- })
899
-
900
- it("eq", async function () {
901
- const { extendedComparisonTests } = deployment
902
-
903
- // Generate two arrays of 10 random 256-bit integers
904
- const numbers1: bigint[] = []
905
- const numbers2: bigint[] = []
906
- const expectedResults: boolean[] = []
907
-
908
- for (let i = 0; i < 1; i++) {
909
- // Generate random 256-bit integers
910
- const num1 = generateRandomNumber(32)
911
- const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
912
-
913
- numbers1.push(num1)
914
- numbers2.push(num2)
915
- expectedResults.push(num1 === num2)
916
- }
917
-
918
- // Call eqTest with the arrays
919
- await (await extendedComparisonTests.eqTest(numbers1, numbers2)).wait()
920
-
921
- // Verify results
922
- for (let i = 0; i < 1; i++) {
923
- const result = await extendedComparisonTests.boolResults(i)
924
- expect(result).to.equal(expectedResults[i])
925
- }
926
- })
927
-
928
- it("ne", async function () {
929
- const { extendedComparisonTests } = deployment
930
-
931
- // Generate two arrays of 10 random 256-bit integers
932
- const numbers1: bigint[] = []
933
- const numbers2: bigint[] = []
934
- const expectedResults: boolean[] = []
935
-
936
- for (let i = 0; i < 1; i++) {
937
- // Generate random 256-bit integers
938
- const num1 = generateRandomNumber(32)
939
- const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
940
-
941
- numbers1.push(num1)
942
- numbers2.push(num2)
943
- expectedResults.push(num1 !== num2)
944
- }
945
-
946
- // Call neTest with the arrays
947
- await (await extendedComparisonTests.neTest(numbers1, numbers2)).wait()
948
-
949
- // Verify results
950
- for (let i = 0; i < 1; i++) {
951
- const result = await extendedComparisonTests.boolResults(i)
952
- expect(result).to.equal(expectedResults[i])
953
- }
954
- })
955
-
956
- it("ge", async function () {
957
- const { extendedComparisonTests } = deployment
958
-
959
- // Generate two arrays of 10 random 256-bit integers
960
- const numbers1: bigint[] = []
961
- const numbers2: bigint[] = []
962
- const expectedResults: boolean[] = []
963
-
964
- for (let i = 0; i < 1; i++) {
965
- // Generate random 256-bit integers
966
- const num1 = generateRandomNumber(32)
967
- const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
968
-
969
- numbers1.push(num1)
970
- numbers2.push(num2)
971
- expectedResults.push(num1 >= num2)
972
- }
973
-
974
- // Call geTest with the arrays
975
- await (await extendedComparisonTests.geTest(numbers1, numbers2)).wait()
976
-
977
- // Verify results
978
- for (let i = 0; i < 1; i++) {
979
- const result = await extendedComparisonTests.boolResults(i)
980
- expect(result).to.equal(expectedResults[i])
981
- }
982
- })
983
-
984
- it("gt", async function () {
985
- const { extendedComparisonTests } = deployment
986
-
987
- // Generate two arrays of 10 random 256-bit integers
988
- const numbers1: bigint[] = []
989
- const numbers2: bigint[] = []
990
- const expectedResults: boolean[] = []
991
-
992
- for (let i = 0; i < 1; i++) {
993
- // Generate random 256-bit integers
994
- const num1 = generateRandomNumber(32)
995
- const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
996
-
997
- numbers1.push(num1)
998
- numbers2.push(num2)
999
- expectedResults.push(num1 > num2)
1000
- }
1001
-
1002
- // Call gtTest with the arrays
1003
- await (await extendedComparisonTests.gtTest(numbers1, numbers2)).wait()
1004
-
1005
- // Verify results
1006
- for (let i = 0; i < 1; i++) {
1007
- const result = await extendedComparisonTests.boolResults(i)
1008
- expect(result).to.equal(expectedResults[i])
1009
- }
1010
- })
1011
-
1012
- it("le", async function () {
1013
- const { extendedComparisonTests } = deployment
1014
-
1015
- // Generate two arrays of 10 random 256-bit integers
1016
- const numbers1: bigint[] = []
1017
- const numbers2: bigint[] = []
1018
- const expectedResults: boolean[] = []
1019
-
1020
- for (let i = 0; i < 1; i++) {
1021
- // Generate random 256-bit integers
1022
- const num1 = generateRandomNumber(32)
1023
- const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
1024
-
1025
- numbers1.push(num1)
1026
- numbers2.push(num2)
1027
- expectedResults.push(num1 <= num2)
1028
- }
1029
-
1030
- // Call leTest with the arrays
1031
- await (await extendedComparisonTests.leTest(numbers1, numbers2)).wait()
1032
-
1033
- // Verify results
1034
- for (let i = 0; i < 1; i++) {
1035
- const result = await extendedComparisonTests.boolResults(i)
1036
- expect(result).to.equal(expectedResults[i])
1037
- }
1038
- })
1039
-
1040
- it("lt", async function () {
1041
- const { extendedComparisonTests } = deployment
1042
-
1043
- // Generate two arrays of 10 random 256-bit integers
1044
- const numbers1: bigint[] = []
1045
- const numbers2: bigint[] = []
1046
- const expectedResults: boolean[] = []
1047
-
1048
- for (let i = 0; i < 1; i++) {
1049
- // Generate random 256-bit integers
1050
- const num1 = generateRandomNumber(32)
1051
- const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
1052
-
1053
- numbers1.push(num1)
1054
- numbers2.push(num2)
1055
- expectedResults.push(num1 < num2)
1056
- }
1057
-
1058
- // Call ltTest with the arrays
1059
- await (await extendedComparisonTests.ltTest(numbers1, numbers2)).wait()
1060
-
1061
- // Verify results
1062
- for (let i = 0; i < 1; i++) {
1063
- const result = await extendedComparisonTests.boolResults(i)
1064
- expect(result).to.equal(expectedResults[i])
1065
- }
1066
- })
1067
-
1068
- it("min", async function () {
1069
- const { extendedComparisonTests } = deployment
1070
-
1071
- // Generate two arrays of 10 random 256-bit integers
1072
- const numbers1: bigint[] = []
1073
- const numbers2: bigint[] = []
1074
- const expectedResults: bigint[] = []
1075
-
1076
- for (let i = 0; i < 1; i++) {
1077
- // Generate random 256-bit integers
1078
- const num1 = generateRandomNumber(32)
1079
- const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
1080
-
1081
- numbers1.push(num1)
1082
- numbers2.push(num2)
1083
- expectedResults.push(num1 <= num2 ? num1 : num2)
1084
- }
1085
-
1086
- // Call minTest with the arrays
1087
- await (await extendedComparisonTests.minTest(numbers1, numbers2)).wait()
1088
-
1089
- // Verify results
1090
- for (let i = 0; i < 1; i++) {
1091
- const result = await extendedComparisonTests.uintResults2(i)
1092
- expect(result).to.equal(expectedResults[i])
1093
- }
1094
- })
1095
-
1096
- it("max", async function () {
1097
- const { extendedComparisonTests } = deployment
1098
-
1099
- // Generate two arrays of 10 random 256-bit integers
1100
- const numbers1: bigint[] = []
1101
- const numbers2: bigint[] = []
1102
- const expectedResults: bigint[] = []
1103
-
1104
- for (let i = 0; i < 1; i++) {
1105
- // Generate random 256-bit integers
1106
- const num1 = generateRandomNumber(32)
1107
- const num2 = i % 2 === 0 ? generateRandomNumber(32) : num1
1108
-
1109
- numbers1.push(num1)
1110
- numbers2.push(num2)
1111
- expectedResults.push(num1 >= num2 ? num1 : num2)
1112
- }
1113
-
1114
- // Call maxTest with the arrays
1115
- await (await extendedComparisonTests.maxTest(numbers1, numbers2)).wait()
1116
-
1117
- // Verify results
1118
- for (let i = 0; i < 1; i++) {
1119
- const result = await extendedComparisonTests.uintResults2(i)
1120
- expect(result).to.equal(expectedResults[i])
1121
- }
1122
- })
1123
- })
1124
- })