@coti-io/coti-contracts 1.3.0 → 1.3.1

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 (360) hide show
  1. package/contracts/access/DataPrivacyFramework/DataPrivacyFramework.sol +1 -1
  2. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +1 -1
  3. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +2 -4
  4. package/contracts/disperse/disperseToken/MintDisperser.sol +1 -3
  5. package/contracts/disperse/disperseToken/TokenDisperser.sol +1 -1
  6. package/contracts/messaging/PrivateMessaging.sol +1 -1
  7. package/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.sol +1 -1
  8. package/contracts/mocks/messaging/PrivateMessagingHarness.sol +1 -1
  9. package/contracts/mocks/oracle/CotiPriceConsumerMock.sol +1 -1
  10. package/contracts/mocks/token/ERC20DecimalsMock.sol +1 -1
  11. package/contracts/mocks/token/ERC20Mock.sol +1 -1
  12. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +1 -1
  13. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +1 -1
  14. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +1 -1
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +1 -1
  16. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +1 -1
  17. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +1 -1
  18. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +1 -1
  19. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +1 -1
  20. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +1 -1
  21. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +1 -1
  22. package/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.sol +1 -1
  23. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +1 -1
  24. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +1 -1
  25. package/contracts/mocks/utils/mpc/ArithmeticAddTestsContract.sol +196 -0
  26. package/contracts/mocks/utils/mpc/ArithmeticMulTestsContract.sol +194 -0
  27. package/contracts/mocks/utils/mpc/ArithmeticSigned128TestsContract.sol +63 -0
  28. package/contracts/mocks/utils/mpc/ArithmeticSigned256TestsContract.sol +107 -0
  29. package/contracts/mocks/utils/mpc/ArithmeticSignedNarrowTestsContract.sol +123 -0
  30. package/contracts/mocks/utils/mpc/ArithmeticSubTestsContract.sol +196 -0
  31. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +1 -1
  32. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +1 -1
  33. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +1 -1
  34. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +1 -1
  35. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +1 -1
  36. package/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol +1 -1
  37. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +1 -1
  38. package/contracts/mocks/utils/mpc/Comparison1TestsContract.sol +1 -1
  39. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +1 -1
  40. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +1 -1
  41. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +1 -1
  42. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +1 -1
  43. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +1 -1
  44. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +1 -1
  45. package/contracts/mocks/utils/mpc/MinimalProxy.sol +1 -1
  46. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +1 -1
  47. package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +1 -1
  48. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +1 -1
  49. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +4 -4
  50. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +1 -1
  51. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +1 -1
  52. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +1 -1
  53. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +1 -1
  54. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +1 -1
  55. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +1 -1
  56. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +1 -1
  57. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +1 -1
  58. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +1 -1
  59. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +1 -1
  60. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +1 -1
  61. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +1 -1
  62. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +1 -1
  63. package/contracts/mocks/utils/mpc/StringTestsContract.sol +1 -1
  64. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +1 -1
  65. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +1 -1
  66. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +1 -1
  67. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +1 -1
  68. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +1 -1
  69. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +1 -1
  70. package/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.sol +1 -1
  71. package/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.sol +1 -1
  72. package/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol +1 -1
  73. package/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.sol +1 -1
  74. package/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.sol +1 -1
  75. package/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol +1 -1
  76. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +1 -1
  77. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +2 -2
  78. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +1 -1
  79. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +1 -1
  80. package/contracts/node/CotiNodeRewards.sol +3 -3
  81. package/contracts/node/SoulboundNodeNFT.sol +1 -2
  82. package/contracts/onboard/AccountOnboard.sol +1 -1
  83. package/contracts/oracle/ICotiPriceConsumer.sol +1 -1
  84. package/contracts/pod/IInbox.sol +231 -0
  85. package/contracts/pod/IInboxMiner.sol +53 -0
  86. package/contracts/pod/InboxUser.sol +29 -0
  87. package/contracts/pod/InboxUserCotiTestnet.sol +13 -0
  88. package/contracts/pod/PodNetworkConstants.sol +30 -0
  89. package/contracts/pod/examples/MpcAdder.sol +57 -0
  90. package/contracts/pod/examples/MpcAdderPausable.sol +25 -0
  91. package/contracts/pod/examples/MpcAdderPausable.sol.bak +25 -0
  92. package/contracts/pod/examples/it128/PodAdder128.sol +48 -0
  93. package/contracts/pod/examples/it256/PodAdder256.sol +48 -0
  94. package/contracts/pod/fee/IInboxFeeManager.sol +40 -0
  95. package/contracts/pod/manifest.json +52 -0
  96. package/contracts/pod/mpc/PodLib.sol +10 -0
  97. package/contracts/pod/mpc/PodLib128.sol +361 -0
  98. package/contracts/pod/mpc/PodLib256.sol +361 -0
  99. package/contracts/pod/mpc/PodLib64.sol +385 -0
  100. package/contracts/pod/mpc/PodLibBase.sol +72 -0
  101. package/contracts/pod/mpc/PodUser.sol +58 -0
  102. package/contracts/pod/mpc/PodUserFuji.sol +14 -0
  103. package/contracts/pod/mpc/PodUserSepolia.sol +13 -0
  104. package/contracts/pod/mpc/coti-side/IPodExecutorOps.sol +99 -0
  105. package/contracts/pod/mpccodec/MpcAbiCodec.sol +482 -0
  106. package/contracts/pod/privacy/IPodPriceOracle.sol +20 -0
  107. package/contracts/pod/privacy/IPrivacyPortal.sol +248 -0
  108. package/contracts/pod/privacy/IPrivacyPortalFactory.sol +88 -0
  109. package/contracts/pod/privacy/PortalFeeOracle.sol +51 -0
  110. package/contracts/pod/privacy/PrivacyPortal.sol +871 -0
  111. package/contracts/pod/privacy/PrivacyPortalFactory.sol +492 -0
  112. package/contracts/pod/privacy/PrivacyPortalFeeLib.sol +98 -0
  113. package/contracts/pod/privacy/mocks/CloneHelper.sol +14 -0
  114. package/contracts/pod/privacy/mocks/MockERC20.sol +26 -0
  115. package/contracts/pod/privacy/mocks/MockPodERC20ForPortal.sol +160 -0
  116. package/contracts/pod/privacy/mocks/MockPrivacyPortalFactory.sol +125 -0
  117. package/contracts/pod/privacy/mocks/MockWrappedNative.sol +24 -0
  118. package/contracts/pod/token/erc7984/Erc7984Constants.sol +9 -0
  119. package/contracts/pod/token/erc7984/Erc7984Pointers.sol +29 -0
  120. package/contracts/pod/token/erc7984/IERC7984.sol +69 -0
  121. package/contracts/pod/token/erc7984/IERC7984PortalWrapper.sol +31 -0
  122. package/contracts/pod/token/erc7984/PodErc7984Mixin.sol +125 -0
  123. package/contracts/pod/token/erc7984/README.md +60 -0
  124. package/contracts/pod/token/perc20/IPodERC20.sol +298 -0
  125. package/contracts/pod/token/perc20/PodERC20.sol +1021 -0
  126. package/contracts/pod/token/perc20/PodErc20Mintable.sol +88 -0
  127. package/contracts/pod/token/perc20/PodErc20MintableInitializable.sol +42 -0
  128. package/contracts/pod/token/perc20/cotiside/IPodErc20CotiSide.sol +88 -0
  129. package/contracts/pod/token/perc20/cotiside/PodErc20CotiMother.sol +529 -0
  130. package/contracts/pod/utils/IWrappedNative.sol +11 -0
  131. package/contracts/privacyBridge/PrivacyBridge.sol +5 -5
  132. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +1 -1
  133. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +1 -1
  134. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +1 -1
  135. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +1 -1
  136. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +1 -1
  137. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +1 -1
  138. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +1 -1
  139. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +1 -1
  140. package/contracts/token/PrivateERC20/IPrivateERC20.sol +1 -1
  141. package/contracts/token/PrivateERC20/ITokenReceiver.sol +1 -1
  142. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +1 -1
  143. package/contracts/token/PrivateERC20/PrivateERC20.sol +5 -5
  144. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +1 -1
  145. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +1 -1
  146. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +1 -1
  147. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +1 -1
  148. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +1 -1
  149. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +1 -1
  150. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +1 -1
  151. package/contracts/token/PrivateERC721/IERC721Errors.sol +1 -1
  152. package/contracts/token/PrivateERC721/PrivateERC721.sol +1 -1
  153. package/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage.sol +1 -1
  154. package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +1 -1
  155. package/contracts/token/points/CotiTokenPoints004.sol +43 -0
  156. package/contracts/utils/mpc/MpcCore.sol +610 -1
  157. package/contracts/utils/mpc/MpcInterface.sol +1 -1
  158. package/hardhat.config.ts +5 -14
  159. package/package.json +4 -4
  160. package/scripts/deployCotiTokenPoints004.ts +61 -0
  161. package/scripts/deployFixedRatioCoinDisperserUnlimitedWindow.ts +68 -0
  162. package/scripts/verifyCotiTokenPoints004.ts +123 -0
  163. package/scripts/verifyFixedRatioCoinDisperserUnlimitedWindow.ts +112 -0
  164. package/test/messaging/PrivateMessaging.test.ts +5 -5
  165. package/test/pod/privacy/PrivacyPortal.access.test.ts +756 -0
  166. package/test/pod/privacy/PrivacyPortal.recovery.test.ts +263 -0
  167. package/test/privacyBridge/UnifiedPrivacyBridges.test.cjs +5 -3
  168. package/test/utils/mpc/CheckedSignedArithmetic256.test.ts +163 -0
  169. package/test/utils/mpc/NegativeCases.test.ts +3 -3
  170. package/test/utils/mpc/Precompile.test.ts +6 -6
  171. package/typechain-types/@openzeppelin/contracts/access/AccessControl.ts +2 -2
  172. package/typechain-types/@openzeppelin/contracts/access/IAccessControl.ts +2 -2
  173. package/typechain-types/@openzeppelin/contracts/access/extensions/AccessControlEnumerable.ts +375 -0
  174. package/typechain-types/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable.ts +329 -0
  175. package/typechain-types/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  176. package/typechain-types/@openzeppelin/contracts/access/index.ts +2 -0
  177. package/typechain-types/@openzeppelin/contracts/interfaces/IERC1363.ts +412 -0
  178. package/typechain-types/@openzeppelin/contracts/interfaces/IERC5267.ts +151 -0
  179. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.ts +69 -0
  180. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.ts +69 -0
  181. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.ts +69 -0
  182. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  183. package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +4 -0
  184. package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +6 -50
  185. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +6 -6
  186. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.ts +313 -0
  187. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.ts +356 -0
  188. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.ts +423 -0
  189. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +6 -6
  190. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +3 -0
  191. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +2 -0
  192. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.ts +69 -0
  193. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  194. package/typechain-types/@openzeppelin/contracts/utils/Nonces.ts +85 -0
  195. package/typechain-types/@openzeppelin/contracts/utils/Pausable.ts +150 -0
  196. package/typechain-types/@openzeppelin/contracts/utils/ReentrancyGuard.ts +69 -0
  197. package/typechain-types/@openzeppelin/contracts/utils/ShortStrings.ts +69 -0
  198. package/typechain-types/@openzeppelin/contracts/utils/Strings.ts +69 -0
  199. package/typechain-types/@openzeppelin/contracts/utils/cryptography/ECDSA.ts +69 -0
  200. package/typechain-types/@openzeppelin/contracts/utils/cryptography/EIP712.ts +151 -0
  201. package/typechain-types/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  202. package/typechain-types/@openzeppelin/contracts/utils/index.ts +9 -0
  203. package/typechain-types/@openzeppelin/contracts/utils/math/SafeCast.ts +69 -0
  204. package/typechain-types/@openzeppelin/contracts/utils/math/index.ts +4 -0
  205. package/typechain-types/contracts/mocks/token/ERC20DecimalsMock.ts +6 -50
  206. package/typechain-types/contracts/mocks/token/ERC20Mock.ts +6 -50
  207. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.ts +16 -2
  208. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.ts +2 -2
  209. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.ts +2 -2
  210. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +2 -2
  211. package/typechain-types/contracts/privacyBridge/PrivacyBridge.ts +16 -2
  212. package/typechain-types/contracts/privacyBridge/PrivacyBridgeCotiNative.ts +16 -2
  213. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20.ts +16 -2
  214. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDCe.ts +16 -2
  215. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDT.ts +16 -2
  216. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWADA.ts +16 -2
  217. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWBTC.ts +16 -2
  218. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWETH.ts +16 -2
  219. package/typechain-types/contracts/privacyBridge/PrivacyBridgegCoti.ts +16 -2
  220. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +2 -2
  221. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.ts +2 -2
  222. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTI.ts +2 -2
  223. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.ts +2 -2
  224. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.ts +2 -2
  225. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.ts +2 -2
  226. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.ts +2 -2
  227. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.ts +2 -2
  228. package/typechain-types/contracts/token/index.ts +2 -0
  229. package/typechain-types/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004.ts +826 -0
  230. package/typechain-types/contracts/token/points/CotiTokenPoints004.ts +826 -0
  231. package/typechain-types/contracts/token/points/index.ts +4 -0
  232. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControl__factory.ts +22 -1
  233. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControl__factory.ts +22 -1
  234. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +22 -0
  235. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/AccessControlEnumerable__factory.ts +316 -0
  236. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable__factory.ts +265 -0
  237. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  238. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +1 -0
  239. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1363__factory.ts +393 -0
  240. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC5267__factory.ts +71 -0
  241. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors__factory.ts +127 -0
  242. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors__factory.ts +111 -0
  243. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors__factory.ts +128 -0
  244. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  245. package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +3 -0
  246. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +84 -110
  247. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +3 -3
  248. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable__factory.ts +364 -0
  249. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable__factory.ts +382 -0
  250. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit__factory.ts +540 -0
  251. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +3 -3
  252. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +3 -0
  253. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +1 -0
  254. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/SafeERC20__factory.ts +96 -0
  255. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  256. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +98 -59
  257. package/typechain-types/factories/@openzeppelin/contracts/utils/Nonces__factory.ts +57 -0
  258. package/typechain-types/factories/@openzeppelin/contracts/utils/Pausable__factory.ts +71 -0
  259. package/typechain-types/factories/@openzeppelin/contracts/utils/ReentrancyGuard__factory.ts +30 -0
  260. package/typechain-types/factories/@openzeppelin/contracts/utils/ShortStrings__factory.ts +83 -0
  261. package/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.ts +90 -0
  262. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.ts +91 -0
  263. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/EIP712__factory.ts +87 -0
  264. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  265. package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +7 -0
  266. package/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.ts +118 -0
  267. package/typechain-types/factories/@openzeppelin/contracts/utils/math/index.ts +4 -0
  268. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1__factory.ts +12 -1
  269. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow__factory.ts +39 -1
  270. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +12 -1
  271. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +23 -1
  272. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +12 -1
  273. package/typechain-types/factories/contracts/messaging/PrivateMessaging__factory.ts +1 -1
  274. package/typechain-types/factories/contracts/mocks/messaging/PrivateMessagingHarness__factory.ts +1 -1
  275. package/typechain-types/factories/contracts/mocks/token/ERC20DecimalsMock__factory.ts +90 -52
  276. package/typechain-types/factories/contracts/mocks/token/ERC20Mock__factory.ts +90 -52
  277. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock__factory.ts +90 -2
  278. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock__factory.ts +28 -2
  279. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock__factory.ts +28 -2
  280. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock__factory.ts +1 -1
  281. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +28 -2
  282. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  283. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +1 -1
  284. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +1 -1
  285. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  286. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +1 -1
  287. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +1 -1
  288. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  289. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +1 -1
  290. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +1 -1
  291. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  292. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +1 -1
  293. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  294. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +1 -1
  295. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  296. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +1 -1
  297. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +1 -1
  298. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  299. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +1 -1
  300. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  301. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  302. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +1 -1
  303. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1 -1
  304. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +1 -1
  305. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +1 -1
  306. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  307. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +1 -1
  308. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +1 -1
  309. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +1 -1
  310. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +1 -1
  311. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +1 -1
  312. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +1 -1
  313. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +1 -1
  314. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +1 -1
  315. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  316. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  317. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +1 -1
  318. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +1 -1
  319. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  320. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  321. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +1 -1
  322. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +1 -1
  323. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  324. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  325. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  326. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  327. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  328. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  329. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +1 -1
  330. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +1 -1
  331. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +1 -1
  332. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
  333. package/typechain-types/factories/contracts/node/CotiNodeRewards__factory.ts +28 -1
  334. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT__factory.ts +126 -1
  335. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
  336. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeCotiNative__factory.ts +79 -2
  337. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20__factory.ts +89 -1
  338. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDCe__factory.ts +90 -2
  339. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDT__factory.ts +90 -2
  340. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWADA__factory.ts +90 -2
  341. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWBTC__factory.ts +90 -2
  342. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWETH__factory.ts +90 -2
  343. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridge__factory.ts +78 -1
  344. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgegCoti__factory.ts +90 -2
  345. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +27 -1
  346. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC__factory.ts +28 -2
  347. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken__factory.ts +28 -2
  348. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTI__factory.ts +28 -2
  349. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateTetherUSD__factory.ts +28 -2
  350. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedADA__factory.ts +28 -2
  351. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC__factory.ts +28 -2
  352. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedEther__factory.ts +28 -2
  353. package/typechain-types/factories/contracts/token/index.ts +1 -0
  354. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004__factory.ts +992 -0
  355. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004__factory.ts +992 -0
  356. package/typechain-types/factories/contracts/token/points/index.ts +4 -0
  357. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
  358. package/typechain-types/hardhat.d.ts +360 -0
  359. package/typechain-types/index.ts +36 -4
  360. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +0 -408
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: MIT
2
- pragma solidity 0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
4
  interface ExtendedOperations {
5
5
 
package/hardhat.config.ts CHANGED
@@ -8,7 +8,11 @@ dotenv.config()
8
8
  /** Bump estimated gas price / EIP-1559 fees by 30% on COTI networks (see hardhat/gasPriceBump.ts). */
9
9
  import "./hardhat/gasPriceBump"
10
10
 
11
- const accounts = process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [];
11
+ const accounts = process.env.PRIVATE_KEY
12
+ ? [process.env.PRIVATE_KEY]
13
+ : process.env.SIGNING_KEYS
14
+ ? process.env.SIGNING_KEYS.split(",").map((k) => k.trim()).filter(Boolean)
15
+ : [];
12
16
 
13
17
  const config: HardhatUserConfig = {
14
18
  defaultNetwork: "coti-testnet",
@@ -31,19 +35,6 @@ const config: HardhatUserConfig = {
31
35
  },
32
36
  }
33
37
  },
34
- {
35
- version: "0.8.19",
36
- settings: {
37
- viaIR: true,
38
- optimizer: {
39
- enabled: true,
40
- runs: 10000
41
- },
42
- metadata: {
43
- bytecodeHash: 'none',
44
- },
45
- }
46
- }
47
38
  ]
48
39
  },
49
40
  networks: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coti-io/coti-contracts",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "A library for smart contract development on the COTI network.",
5
5
  "author": "COTI Development",
6
6
  "repository": {
@@ -40,9 +40,9 @@
40
40
  "typescript": "^5.9.3"
41
41
  },
42
42
  "dependencies": {
43
- "@coti-io/coti-ethers": "^1.0.5",
44
- "@coti-io/coti-sdk-typescript": "^1.0.6",
45
- "@openzeppelin/contracts": "4.9.6",
43
+ "@coti-io/coti-ethers": "^1.0.6",
44
+ "@coti-io/coti-sdk-typescript": "^1.0.9",
45
+ "@openzeppelin/contracts": "5.4.0",
46
46
  "dotenv": "^16.4.5"
47
47
  }
48
48
  }
@@ -0,0 +1,61 @@
1
+ import { ethers } from "hardhat";
2
+
3
+ async function main() {
4
+ const [deployer] = await ethers.getSigners();
5
+ if (!deployer) {
6
+ throw new Error(
7
+ "No deployer signer found. Set PRIVATE_KEY in your environment."
8
+ );
9
+ }
10
+
11
+ const defaultAdmin =
12
+ process.env.TPS004_ADMIN || deployer.address;
13
+ const pauser = process.env.TPS004_PAUSER || deployer.address;
14
+ const minter = process.env.TPS004_MINTER || deployer.address;
15
+
16
+ console.log("Deploying CotiTokenPoints004...");
17
+ console.log("Deployer:", deployer.address);
18
+ console.log("Default admin:", defaultAdmin);
19
+ console.log("Pauser:", pauser);
20
+ console.log("Minter:", minter);
21
+
22
+ const provider = deployer.provider;
23
+ if (!provider) {
24
+ throw new Error("No provider found for deployer signer.");
25
+ }
26
+
27
+ const gasPrice = BigInt(await provider.send("eth_gasPrice", []));
28
+ const nonce = await provider.getTransactionCount(deployer.address, "latest");
29
+ const gasLimit = BigInt(process.env.TPS004_DEPLOY_GAS_LIMIT || "6000000");
30
+
31
+ const factory = await ethers.getContractFactory("CotiTokenPoints004");
32
+ const deployTxReq = await factory.getDeployTransaction(
33
+ defaultAdmin,
34
+ pauser,
35
+ minter
36
+ );
37
+ if (!deployTxReq.data) {
38
+ throw new Error("Failed to build deploy transaction data.");
39
+ }
40
+
41
+ const sentTx = await deployer.sendTransaction({
42
+ data: deployTxReq.data,
43
+ gasPrice,
44
+ nonce,
45
+ gasLimit,
46
+ });
47
+ console.log("Deployment tx hash:", sentTx.hash);
48
+ const receipt = await sentTx.wait();
49
+ if (!receipt || !receipt.contractAddress) {
50
+ throw new Error(
51
+ "Deployment transaction mined but no contract address found."
52
+ );
53
+ }
54
+
55
+ console.log("CotiTokenPoints004 deployed at:", receipt.contractAddress);
56
+ }
57
+
58
+ main().catch((error) => {
59
+ console.error(error);
60
+ process.exitCode = 1;
61
+ });
@@ -0,0 +1,68 @@
1
+ import { ethers } from "hardhat";
2
+
3
+ async function main() {
4
+ const [deployer] = await ethers.getSigners();
5
+ if (!deployer) {
6
+ throw new Error(
7
+ "No deployer signer found. Set PRIVATE_KEY in your environment."
8
+ );
9
+ }
10
+
11
+ const pointsToken =
12
+ process.env.POINTS_TOKEN ||
13
+ "0x9eC8c1459B92e8f19fE160E63e169e7EFAAA4359";
14
+ const owner =
15
+ process.env.DISPERSER_OWNER ||
16
+ "0x87a11daf013e02d38cabdfdbff25e0b0fa2c5fcd";
17
+
18
+ console.log("Deploying FixedRatioCoinDisperserUnlimitedWindow...");
19
+ console.log("Deployer:", deployer.address);
20
+ console.log("Points token:", pointsToken);
21
+ console.log("Owner:", owner);
22
+
23
+ const provider = deployer.provider;
24
+ if (!provider) {
25
+ throw new Error("No provider found for deployer signer.");
26
+ }
27
+
28
+ const gasPrice = BigInt(await provider.send("eth_gasPrice", []));
29
+ const nonce = await provider.getTransactionCount(deployer.address, "latest");
30
+ const gasLimit = BigInt(
31
+ process.env.DISPERSER_DEPLOY_GAS_LIMIT || "8000000"
32
+ );
33
+
34
+ const factory = await ethers.getContractFactory(
35
+ "FixedRatioCoinDisperserUnlimitedWindow"
36
+ );
37
+ const deployTxReq = await factory.getDeployTransaction(
38
+ pointsToken,
39
+ owner
40
+ );
41
+ if (!deployTxReq.data) {
42
+ throw new Error("Failed to build deploy transaction data.");
43
+ }
44
+
45
+ const sentTx = await deployer.sendTransaction({
46
+ data: deployTxReq.data,
47
+ gasPrice,
48
+ nonce,
49
+ gasLimit,
50
+ });
51
+ console.log("Deployment tx hash:", sentTx.hash);
52
+ const receipt = await sentTx.wait();
53
+ if (!receipt || !receipt.contractAddress) {
54
+ throw new Error(
55
+ "Deployment transaction mined but no contract address found."
56
+ );
57
+ }
58
+
59
+ console.log(
60
+ "FixedRatioCoinDisperserUnlimitedWindow deployed at:",
61
+ receipt.contractAddress
62
+ );
63
+ }
64
+
65
+ main().catch((error) => {
66
+ console.error(error);
67
+ process.exitCode = 1;
68
+ });
@@ -0,0 +1,123 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { ethers } from "hardhat";
4
+
5
+ function findBuildInfo(): string {
6
+ const dir = path.join("artifacts", "build-info");
7
+ for (const file of fs.readdirSync(dir)) {
8
+ if (!file.endsWith(".json")) continue;
9
+ const fullPath = path.join(dir, file);
10
+ const buildInfo = JSON.parse(fs.readFileSync(fullPath, "utf8")) as {
11
+ solcVersion: string;
12
+ };
13
+ const raw = fs.readFileSync(fullPath, "utf8");
14
+ if (
15
+ raw.includes("CotiTokenPoints004") &&
16
+ buildInfo.solcVersion === "0.8.20"
17
+ ) {
18
+ return fullPath;
19
+ }
20
+ }
21
+ throw new Error(
22
+ "No 0.8.20 build-info found for CotiTokenPoints004. Run `npx hardhat compile` first."
23
+ );
24
+ }
25
+
26
+ async function main() {
27
+ const address =
28
+ process.env.CONTRACT_ADDRESS ||
29
+ "0x3F577B64E5CE5F2d00607770368d623cECc4FF7D";
30
+ const defaultAdmin =
31
+ process.env.TPS004_ADMIN ||
32
+ "0x0BF9C15CbD9f0fac9fc6ab90F0603e89818489bd";
33
+ const pauser =
34
+ process.env.TPS004_PAUSER ||
35
+ "0x0BF9C15CbD9f0fac9fc6ab90F0603e89818489bd";
36
+ const minter =
37
+ process.env.TPS004_MINTER ||
38
+ "0xE16eD4D157D4AdB562a7a73D28CBA750Ac48d735";
39
+
40
+ const buildInfo = JSON.parse(fs.readFileSync(findBuildInfo(), "utf8")) as {
41
+ input: unknown;
42
+ solcVersion: string;
43
+ solcLongVersion?: string;
44
+ };
45
+
46
+ const commit =
47
+ buildInfo.solcLongVersion?.split("+commit.")[1] ?? "a1b79de6";
48
+
49
+ const iface = new ethers.Interface([
50
+ "constructor(address defaultAdmin, address pauser, address minter)",
51
+ ]);
52
+ const constructorArguments = iface
53
+ .encodeDeploy([defaultAdmin, pauser, minter])
54
+ .slice(2);
55
+
56
+ const params = new URLSearchParams({
57
+ apikey: "placeholder",
58
+ module: "contract",
59
+ action: "verifysourcecode",
60
+ contractaddress: address,
61
+ sourceCode: JSON.stringify(buildInfo.input),
62
+ codeformat: "solidity-standard-json-input",
63
+ contractname:
64
+ "contracts/token/points/CotiTokenPoints004.sol:CotiTokenPoints004",
65
+ compilerversion: `v${buildInfo.solcVersion}+commit.${commit}`,
66
+ constructorArguements: constructorArguments,
67
+ });
68
+
69
+ console.log("Submitting verification to Cotiscan...");
70
+ console.log("Contract:", address);
71
+ const submit = await fetch("https://mainnet.cotiscan.io/api", {
72
+ method: "POST",
73
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
74
+ body: params.toString(),
75
+ });
76
+ const submitJson = (await submit.json()) as {
77
+ status: string;
78
+ message: string;
79
+ result: string;
80
+ };
81
+ if (submitJson.status !== "1") {
82
+ throw new Error(
83
+ `Verification submit failed: ${submitJson.message} (${submitJson.result})`
84
+ );
85
+ }
86
+
87
+ const guid = submitJson.result;
88
+ console.log("Verification GUID:", guid);
89
+
90
+ for (let i = 0; i < 30; i++) {
91
+ await new Promise((r) => setTimeout(r, 5000));
92
+ const statusUrl = new URL("https://mainnet.cotiscan.io/api");
93
+ statusUrl.search = new URLSearchParams({
94
+ apikey: "placeholder",
95
+ module: "contract",
96
+ action: "checkverifystatus",
97
+ guid,
98
+ }).toString();
99
+ const statusRes = await fetch(statusUrl);
100
+ const statusJson = (await statusRes.json()) as {
101
+ status: string;
102
+ result: string;
103
+ };
104
+ console.log("Status:", statusJson.result);
105
+ if (statusJson.result.includes("Pass")) {
106
+ console.log("Contract verified:", address);
107
+ return;
108
+ }
109
+ if (
110
+ statusJson.result.includes("Fail") ||
111
+ statusJson.result.includes("Error")
112
+ ) {
113
+ throw new Error(`Verification failed: ${statusJson.result}`);
114
+ }
115
+ }
116
+
117
+ throw new Error("Verification timed out while polling Cotiscan");
118
+ }
119
+
120
+ main().catch((error) => {
121
+ console.error(error);
122
+ process.exitCode = 1;
123
+ });
@@ -0,0 +1,112 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { ethers } from "hardhat";
4
+
5
+ function findBuildInfo(): string {
6
+ const dir = path.join("artifacts", "build-info");
7
+ for (const file of fs.readdirSync(dir)) {
8
+ if (!file.endsWith(".json")) continue;
9
+ const fullPath = path.join(dir, file);
10
+ const raw = fs.readFileSync(fullPath, "utf8");
11
+ if (
12
+ raw.includes("FixedRatioCoinDisperserUnlimitedWindow") &&
13
+ raw.includes('"version": "0.8.20"')
14
+ ) {
15
+ return fullPath;
16
+ }
17
+ }
18
+ throw new Error(
19
+ "No 0.8.20 build-info found for FixedRatioCoinDisperserUnlimitedWindow. Run `npx hardhat compile` first."
20
+ );
21
+ }
22
+
23
+ async function main() {
24
+ const address =
25
+ process.env.CONTRACT_ADDRESS ||
26
+ "0x6f05f45897A3c8cBC4Cb384cB69d5425C13fbAe2";
27
+ const pointsToken =
28
+ process.env.POINTS_TOKEN ||
29
+ "0x9eC8c1459B92e8f19fE160E63e169e7EFAAA4359";
30
+ const owner =
31
+ process.env.DISPERSER_OWNER ||
32
+ "0x87a11daf013e02d38cabdfdbff25e0b0fa2c5fcd";
33
+
34
+ const buildInfo = JSON.parse(fs.readFileSync(findBuildInfo(), "utf8")) as {
35
+ input: unknown;
36
+ solcVersion: string;
37
+ };
38
+
39
+ const iface = new ethers.Interface([
40
+ "constructor(address _pointsToken, address _owner)",
41
+ ]);
42
+ const constructorArguments = iface
43
+ .encodeDeploy([pointsToken, owner])
44
+ .slice(2);
45
+
46
+ const params = new URLSearchParams({
47
+ apikey: "placeholder",
48
+ module: "contract",
49
+ action: "verifysourcecode",
50
+ contractaddress: address,
51
+ sourceCode: JSON.stringify(buildInfo.input),
52
+ codeformat: "solidity-standard-json-input",
53
+ contractname:
54
+ "contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol:FixedRatioCoinDisperserUnlimitedWindow",
55
+ compilerversion: `v${buildInfo.solcVersion}+commit.a1b79de6`,
56
+ constructorArguements: constructorArguments,
57
+ });
58
+
59
+ console.log("Submitting verification to Cotiscan...");
60
+ const submit = await fetch("https://mainnet.cotiscan.io/api", {
61
+ method: "POST",
62
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
63
+ body: params.toString(),
64
+ });
65
+ const submitJson = (await submit.json()) as {
66
+ status: string;
67
+ message: string;
68
+ result: string;
69
+ };
70
+ if (submitJson.status !== "1") {
71
+ throw new Error(
72
+ `Verification submit failed: ${submitJson.message} (${submitJson.result})`
73
+ );
74
+ }
75
+
76
+ const guid = submitJson.result;
77
+ console.log("Verification GUID:", guid);
78
+
79
+ for (let i = 0; i < 30; i++) {
80
+ await new Promise((r) => setTimeout(r, 5000));
81
+ const statusUrl = new URL("https://mainnet.cotiscan.io/api");
82
+ statusUrl.search = new URLSearchParams({
83
+ apikey: "placeholder",
84
+ module: "contract",
85
+ action: "checkverifystatus",
86
+ guid,
87
+ }).toString();
88
+ const statusRes = await fetch(statusUrl);
89
+ const statusJson = (await statusRes.json()) as {
90
+ status: string;
91
+ result: string;
92
+ };
93
+ console.log("Status:", statusJson.result);
94
+ if (statusJson.result.includes("Pass")) {
95
+ console.log("Contract verified:", address);
96
+ return;
97
+ }
98
+ if (
99
+ statusJson.result.includes("Fail") ||
100
+ statusJson.result.includes("Error")
101
+ ) {
102
+ throw new Error(`Verification failed: ${statusJson.result}`);
103
+ }
104
+ }
105
+
106
+ throw new Error("Verification timed out while polling Cotiscan");
107
+ }
108
+
109
+ main().catch((error) => {
110
+ console.error(error);
111
+ process.exitCode = 1;
112
+ });
@@ -1,4 +1,4 @@
1
- import { loadFixture, time } from "@nomicfoundation/hardhat-network-helpers";
1
+ import { time } from "@nomicfoundation/hardhat-network-helpers";
2
2
  import { expect } from "chai";
3
3
  import { ethers } from "hardhat";
4
4
 
@@ -14,7 +14,7 @@ describe("PrivateMessaging", () => {
14
14
  }
15
15
 
16
16
  it("records sent and inbox pages with viewer-specific ciphertext", async () => {
17
- const { contract, alice, bob, carol, ct } = await loadFixture(deployFixture);
17
+ const { contract, alice, bob, carol, ct } = await deployFixture();
18
18
 
19
19
  await contract.recordSyntheticMessage(
20
20
  alice.address,
@@ -48,7 +48,7 @@ describe("PrivateMessaging", () => {
48
48
  });
49
49
 
50
50
  it("stores multipart messages and returns chunked ciphertexts", async () => {
51
- const { contract, alice, bob, carol, ct } = await loadFixture(deployFixture);
51
+ const { contract, alice, bob, carol, ct } = await deployFixture();
52
52
 
53
53
  await contract.recordSyntheticMultipartMessage(
54
54
  alice.address,
@@ -80,7 +80,7 @@ describe("PrivateMessaging", () => {
80
80
  });
81
81
 
82
82
  it("splits epoch rewards by encrypted cell usage and gives final dust to the last claimant", async () => {
83
- const { contract, alice, bob, ct } = await loadFixture(deployFixture);
83
+ const { contract, alice, bob, ct } = await deployFixture();
84
84
 
85
85
  await contract.fundEpoch(0, { value: 11n });
86
86
 
@@ -125,7 +125,7 @@ describe("PrivateMessaging", () => {
125
125
  });
126
126
 
127
127
  it("rejects active-epoch claims, double claims, and past-epoch funding", async () => {
128
- const { contract, alice, bob, ct } = await loadFixture(deployFixture);
128
+ const { contract, alice, bob, ct } = await deployFixture();
129
129
 
130
130
  await contract.fundEpoch(0, { value: 9n });
131
131
  await contract.recordSyntheticMessage(