@coti-io/coti-contracts 1.2.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 (481) hide show
  1. package/.github/workflows/npm-publish.yml +1 -1
  2. package/contracts/access/DataPrivacyFramework/DataPrivacyFramework.sol +1 -1
  3. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +1 -1
  4. package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +2 -4
  5. package/contracts/disperse/disperseToken/MintDisperser.sol +1 -3
  6. package/contracts/disperse/disperseToken/TokenDisperser.sol +1 -1
  7. package/contracts/messaging/PrivateMessaging.sol +456 -0
  8. package/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.sol +1 -1
  9. package/contracts/mocks/messaging/PrivateMessagingHarness.sol +54 -0
  10. package/contracts/mocks/oracle/CotiPriceConsumerMock.sol +31 -0
  11. package/contracts/mocks/token/ERC20DecimalsMock.sol +21 -0
  12. package/contracts/mocks/token/ERC20Mock.sol +1 -1
  13. package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +1 -1
  14. package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +9 -4
  15. package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +1 -1
  16. package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +1 -1
  17. package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +1 -1
  18. package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +1 -1
  19. package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +1 -1
  20. package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +1 -1
  21. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +1 -1
  22. package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +1 -1
  23. package/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.sol +1 -1
  24. package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +1 -1
  25. package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +1 -1
  26. package/contracts/mocks/utils/mpc/ArithmeticAddTestsContract.sol +196 -0
  27. package/contracts/mocks/utils/mpc/ArithmeticMulTestsContract.sol +194 -0
  28. package/contracts/mocks/utils/mpc/ArithmeticSigned128TestsContract.sol +63 -0
  29. package/contracts/mocks/utils/mpc/ArithmeticSigned256TestsContract.sol +107 -0
  30. package/contracts/mocks/utils/mpc/ArithmeticSignedNarrowTestsContract.sol +123 -0
  31. package/contracts/mocks/utils/mpc/ArithmeticSubTestsContract.sol +196 -0
  32. package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +1 -1
  33. package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +1 -1
  34. package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +1 -1
  35. package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +1 -1
  36. package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +1 -1
  37. package/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol +1 -1
  38. package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +1 -1
  39. package/contracts/mocks/utils/mpc/Comparison1TestsContract.sol +1 -1
  40. package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +1 -1
  41. package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +1 -1
  42. package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +1 -1
  43. package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +1 -1
  44. package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +1 -1
  45. package/contracts/mocks/utils/mpc/MinimalImplementation.sol +1 -1
  46. package/contracts/mocks/utils/mpc/MinimalProxy.sol +1 -1
  47. package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +1 -1
  48. package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +1 -1
  49. package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +1 -1
  50. package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +4 -4
  51. package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +1 -1
  52. package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +1 -1
  53. package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +1 -1
  54. package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +1 -1
  55. package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +1 -1
  56. package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +1 -1
  57. package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +1 -1
  58. package/contracts/mocks/utils/mpc/PrivacyProxy.sol +1 -1
  59. package/contracts/mocks/utils/mpc/Random128TestsContract.sol +1 -1
  60. package/contracts/mocks/utils/mpc/Random256TestsContract.sol +1 -1
  61. package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +1 -1
  62. package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +1 -1
  63. package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +1 -1
  64. package/contracts/mocks/utils/mpc/StringTestsContract.sol +1 -1
  65. package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +1 -1
  66. package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +1 -1
  67. package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +1 -1
  68. package/contracts/mocks/utils/mpc/TransferTestsContract.sol +1 -1
  69. package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +1 -1
  70. package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +1 -1
  71. package/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.sol +1 -1
  72. package/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.sol +1 -1
  73. package/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol +1 -1
  74. package/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.sol +1 -1
  75. package/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.sol +1 -1
  76. package/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol +1 -1
  77. package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +1 -1
  78. package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +2 -2
  79. package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +1 -1
  80. package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +1 -1
  81. package/contracts/node/CotiNodeRewards.sol +3 -3
  82. package/contracts/node/SoulboundNodeNFT.sol +23 -24
  83. package/contracts/onboard/AccountOnboard.sol +1 -1
  84. package/contracts/oracle/CotiPriceConsumer.sol +103 -0
  85. package/contracts/oracle/ICotiPriceConsumer.sol +15 -0
  86. package/contracts/oracle/IStdReference.sol +26 -0
  87. package/contracts/pod/IInbox.sol +231 -0
  88. package/contracts/pod/IInboxMiner.sol +53 -0
  89. package/contracts/pod/InboxUser.sol +29 -0
  90. package/contracts/pod/InboxUserCotiTestnet.sol +13 -0
  91. package/contracts/pod/PodNetworkConstants.sol +30 -0
  92. package/contracts/pod/examples/MpcAdder.sol +57 -0
  93. package/contracts/pod/examples/MpcAdderPausable.sol +25 -0
  94. package/contracts/pod/examples/MpcAdderPausable.sol.bak +25 -0
  95. package/contracts/pod/examples/it128/PodAdder128.sol +48 -0
  96. package/contracts/pod/examples/it256/PodAdder256.sol +48 -0
  97. package/contracts/pod/fee/IInboxFeeManager.sol +40 -0
  98. package/contracts/pod/manifest.json +52 -0
  99. package/contracts/pod/mpc/PodLib.sol +10 -0
  100. package/contracts/pod/mpc/PodLib128.sol +361 -0
  101. package/contracts/pod/mpc/PodLib256.sol +361 -0
  102. package/contracts/pod/mpc/PodLib64.sol +385 -0
  103. package/contracts/pod/mpc/PodLibBase.sol +72 -0
  104. package/contracts/pod/mpc/PodUser.sol +58 -0
  105. package/contracts/pod/mpc/PodUserFuji.sol +14 -0
  106. package/contracts/pod/mpc/PodUserSepolia.sol +13 -0
  107. package/contracts/pod/mpc/coti-side/IPodExecutorOps.sol +99 -0
  108. package/contracts/pod/mpccodec/MpcAbiCodec.sol +482 -0
  109. package/contracts/pod/privacy/IPodPriceOracle.sol +20 -0
  110. package/contracts/pod/privacy/IPrivacyPortal.sol +248 -0
  111. package/contracts/pod/privacy/IPrivacyPortalFactory.sol +88 -0
  112. package/contracts/pod/privacy/PortalFeeOracle.sol +51 -0
  113. package/contracts/pod/privacy/PrivacyPortal.sol +871 -0
  114. package/contracts/pod/privacy/PrivacyPortalFactory.sol +492 -0
  115. package/contracts/pod/privacy/PrivacyPortalFeeLib.sol +98 -0
  116. package/contracts/pod/privacy/mocks/CloneHelper.sol +14 -0
  117. package/contracts/pod/privacy/mocks/MockERC20.sol +26 -0
  118. package/contracts/pod/privacy/mocks/MockPodERC20ForPortal.sol +160 -0
  119. package/contracts/pod/privacy/mocks/MockPrivacyPortalFactory.sol +125 -0
  120. package/contracts/pod/privacy/mocks/MockWrappedNative.sol +24 -0
  121. package/contracts/pod/token/erc7984/Erc7984Constants.sol +9 -0
  122. package/contracts/pod/token/erc7984/Erc7984Pointers.sol +29 -0
  123. package/contracts/pod/token/erc7984/IERC7984.sol +69 -0
  124. package/contracts/pod/token/erc7984/IERC7984PortalWrapper.sol +31 -0
  125. package/contracts/pod/token/erc7984/PodErc7984Mixin.sol +125 -0
  126. package/contracts/pod/token/erc7984/README.md +60 -0
  127. package/contracts/pod/token/perc20/IPodERC20.sol +298 -0
  128. package/contracts/pod/token/perc20/PodERC20.sol +1021 -0
  129. package/contracts/pod/token/perc20/PodErc20Mintable.sol +88 -0
  130. package/contracts/pod/token/perc20/PodErc20MintableInitializable.sol +42 -0
  131. package/contracts/pod/token/perc20/cotiside/IPodErc20CotiSide.sol +88 -0
  132. package/contracts/pod/token/perc20/cotiside/PodErc20CotiMother.sol +529 -0
  133. package/contracts/pod/utils/IWrappedNative.sol +11 -0
  134. package/contracts/privacyBridge/PrivacyBridge.sol +376 -94
  135. package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +210 -162
  136. package/contracts/privacyBridge/PrivacyBridgeERC20.sol +242 -160
  137. package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +8 -2
  138. package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +8 -2
  139. package/contracts/privacyBridge/PrivacyBridgeWADA.sol +8 -2
  140. package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +8 -2
  141. package/contracts/privacyBridge/PrivacyBridgeWETH.sol +8 -2
  142. package/contracts/privacyBridge/PrivacyBridgegCoti.sol +8 -2
  143. package/contracts/token/PrivateERC20/IPrivateERC20.sol +1 -1
  144. package/contracts/token/PrivateERC20/ITokenReceiver.sol +1 -1
  145. package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +1 -1
  146. package/contracts/token/PrivateERC20/PrivateERC20.sol +5 -5
  147. package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +1 -1
  148. package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +1 -1
  149. package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +1 -1
  150. package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +1 -1
  151. package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +1 -1
  152. package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +1 -1
  153. package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +1 -1
  154. package/contracts/token/PrivateERC721/IERC721Errors.sol +1 -1
  155. package/contracts/token/PrivateERC721/PrivateERC721.sol +1 -1
  156. package/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage.sol +1 -1
  157. package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +1 -1
  158. package/contracts/token/points/CotiTokenPoints004.sol +43 -0
  159. package/contracts/utils/mpc/MpcCore.sol +610 -1
  160. package/contracts/utils/mpc/MpcInterface.sol +1 -1
  161. package/hardhat.config.ts +9 -15
  162. package/package.json +4 -4
  163. package/scripts/add-bridge-operators.cjs +87 -0
  164. package/scripts/deploy-coti-price-consumer-mainnet.cjs +49 -0
  165. package/scripts/deployCotiNodeRewards.ts +51 -0
  166. package/scripts/deployCotiTokenPoints004.ts +61 -0
  167. package/scripts/deployFixedRatioCoinDisperserUnlimitedWindow.ts +68 -0
  168. package/scripts/redeploy-private-and-bridges.cjs +201 -0
  169. package/scripts/set-bridge-limits-mainnet.cjs +177 -0
  170. package/scripts/verify-mainnet-private-bridges.cjs +289 -0
  171. package/scripts/verifyCotiTokenPoints004.ts +123 -0
  172. package/scripts/verifyFixedRatioCoinDisperserUnlimitedWindow.ts +112 -0
  173. package/sonar-project.properties +11 -0
  174. package/test/messaging/PrivateMessaging.test.ts +158 -0
  175. package/test/pod/privacy/PrivacyPortal.access.test.ts +756 -0
  176. package/test/pod/privacy/PrivacyPortal.recovery.test.ts +263 -0
  177. package/test/privacyBridge/UnifiedPrivacyBridges.test.cjs +1665 -0
  178. package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +162 -239
  179. package/test/utils/mpc/CheckedSignedArithmetic256.test.ts +163 -0
  180. package/test/utils/mpc/NegativeCases.test.ts +3 -3
  181. package/test/utils/mpc/Precompile.test.ts +6 -6
  182. package/typechain-types/@openzeppelin/contracts/access/AccessControl.ts +324 -0
  183. package/typechain-types/@openzeppelin/contracts/access/AccessControlEnumerable.ts +361 -0
  184. package/typechain-types/@openzeppelin/contracts/access/IAccessControl.ts +292 -0
  185. package/typechain-types/@openzeppelin/contracts/access/IAccessControlEnumerable.ts +329 -0
  186. package/typechain-types/@openzeppelin/contracts/access/extensions/AccessControlEnumerable.ts +375 -0
  187. package/typechain-types/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable.ts +329 -0
  188. package/typechain-types/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  189. package/typechain-types/@openzeppelin/contracts/access/index.ts +6 -0
  190. package/typechain-types/@openzeppelin/contracts/index.ts +2 -0
  191. package/typechain-types/@openzeppelin/contracts/interfaces/IERC1363.ts +412 -0
  192. package/typechain-types/@openzeppelin/contracts/interfaces/IERC5267.ts +151 -0
  193. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.ts +69 -0
  194. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.ts +69 -0
  195. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.ts +69 -0
  196. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  197. package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +4 -0
  198. package/typechain-types/@openzeppelin/contracts/security/Pausable.ts +150 -0
  199. package/typechain-types/@openzeppelin/contracts/security/index.ts +4 -0
  200. package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +286 -0
  201. package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +6 -6
  202. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.ts +313 -0
  203. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.ts +356 -0
  204. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.ts +423 -0
  205. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +286 -0
  206. package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  207. package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +3 -0
  208. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.ts +69 -0
  209. package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  210. package/typechain-types/@openzeppelin/contracts/token/ERC721/ERC721.ts +420 -0
  211. package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.ts +420 -0
  212. package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
  213. package/typechain-types/@openzeppelin/contracts/token/ERC721/index.ts +3 -0
  214. package/typechain-types/@openzeppelin/contracts/utils/Nonces.ts +85 -0
  215. package/typechain-types/@openzeppelin/contracts/utils/Pausable.ts +150 -0
  216. package/typechain-types/@openzeppelin/contracts/utils/ReentrancyGuard.ts +69 -0
  217. package/typechain-types/@openzeppelin/contracts/utils/ShortStrings.ts +69 -0
  218. package/typechain-types/@openzeppelin/contracts/utils/Strings.ts +69 -0
  219. package/typechain-types/@openzeppelin/contracts/utils/cryptography/ECDSA.ts +69 -0
  220. package/typechain-types/@openzeppelin/contracts/utils/cryptography/EIP712.ts +151 -0
  221. package/typechain-types/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  222. package/typechain-types/@openzeppelin/contracts/utils/index.ts +9 -0
  223. package/typechain-types/@openzeppelin/contracts/utils/math/SafeCast.ts +69 -0
  224. package/typechain-types/@openzeppelin/contracts/utils/math/index.ts +4 -0
  225. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.ts +735 -0
  226. package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.ts +734 -0
  227. package/typechain-types/contracts/disperse/coinByRatio/index.ts +2 -0
  228. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable.ts +95 -0
  229. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +22 -0
  230. package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +1 -0
  231. package/typechain-types/contracts/index.ts +8 -0
  232. package/typechain-types/contracts/messaging/PrivateMessaging.ts +871 -0
  233. package/typechain-types/contracts/messaging/index.ts +4 -0
  234. package/typechain-types/contracts/mocks/index.ts +4 -0
  235. package/typechain-types/contracts/mocks/messaging/PrivateMessagingHarness.ts +951 -0
  236. package/typechain-types/contracts/mocks/messaging/index.ts +4 -0
  237. package/typechain-types/contracts/mocks/oracle/CotiPriceConsumerMock.ts +163 -0
  238. package/typechain-types/contracts/mocks/oracle/index.ts +4 -0
  239. package/typechain-types/contracts/mocks/token/ERC20DecimalsMock.ts +305 -0
  240. package/typechain-types/contracts/mocks/token/ERC20Mock.ts +324 -0
  241. package/typechain-types/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.ts +108 -0
  242. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.ts +1906 -0
  243. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.ts +1296 -0
  244. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.ts +1270 -0
  245. package/typechain-types/contracts/mocks/{utils/mpc/Bitwise128BitTestsContract.ts → token/PrivateERC20/PrivateERC20GtCallerMock.ts} +47 -67
  246. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +757 -25
  247. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted.ts +102 -0
  248. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock.ts +154 -0
  249. package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
  250. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.ts +155 -0
  251. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.ts +107 -0
  252. package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.ts +100 -0
  253. package/typechain-types/contracts/mocks/token/PrivateERC20/index.ts +10 -0
  254. package/typechain-types/contracts/mocks/token/index.ts +2 -0
  255. package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.ts +6 -6
  256. package/typechain-types/contracts/node/CotiNodeRewards.ts +566 -0
  257. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/IERC5192.ts +123 -0
  258. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT.ts +975 -0
  259. package/typechain-types/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
  260. package/typechain-types/contracts/node/index.ts +6 -0
  261. package/typechain-types/contracts/oracle/CotiPriceConsumer.ts +256 -0
  262. package/typechain-types/contracts/oracle/ICotiPriceConsumer.ts +119 -0
  263. package/typechain-types/contracts/oracle/IStdReference.ts +136 -0
  264. package/typechain-types/contracts/oracle/index.ts +6 -0
  265. package/typechain-types/contracts/privacyBridge/PrivacyBridge.ts +1642 -0
  266. package/typechain-types/contracts/privacyBridge/PrivacyBridgeCotiNative.ts +1884 -0
  267. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals.ts +84 -0
  268. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20.ts +1906 -0
  269. package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
  270. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDCe.ts +1906 -0
  271. package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDT.ts +1906 -0
  272. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWADA.ts +1906 -0
  273. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWBTC.ts +1906 -0
  274. package/typechain-types/contracts/privacyBridge/PrivacyBridgeWETH.ts +1906 -0
  275. package/typechain-types/contracts/privacyBridge/PrivacyBridgegCoti.ts +1906 -0
  276. package/typechain-types/contracts/privacyBridge/index.ts +13 -0
  277. package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +439 -19
  278. package/typechain-types/contracts/token/PrivateERC20/ITokenReceiver.ts +100 -0
  279. package/typechain-types/contracts/token/PrivateERC20/ITokenReceiverEncrypted.ts +99 -0
  280. package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +763 -15
  281. package/typechain-types/contracts/token/PrivateERC20/index.ts +4 -0
  282. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.ts +1270 -0
  283. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTI.ts +1270 -0
  284. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.ts +1270 -0
  285. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.ts +1270 -0
  286. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.ts +1270 -0
  287. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.ts +1270 -0
  288. package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.ts +1270 -0
  289. package/typechain-types/contracts/token/PrivateERC20/tokens/index.ts +10 -0
  290. package/typechain-types/contracts/token/index.ts +2 -0
  291. package/typechain-types/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004.ts +826 -0
  292. package/typechain-types/contracts/token/points/CotiTokenPoints004.ts +826 -0
  293. package/typechain-types/contracts/token/points/index.ts +4 -0
  294. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControlEnumerable__factory.ts +276 -0
  295. package/typechain-types/factories/@openzeppelin/contracts/access/AccessControl__factory.ts +250 -0
  296. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControlEnumerable__factory.ts +244 -0
  297. package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControl__factory.ts +218 -0
  298. package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +22 -0
  299. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/AccessControlEnumerable__factory.ts +316 -0
  300. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable__factory.ts +265 -0
  301. package/typechain-types/factories/@openzeppelin/contracts/access/extensions/index.ts +5 -0
  302. package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +5 -0
  303. package/typechain-types/factories/@openzeppelin/contracts/index.ts +1 -0
  304. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1363__factory.ts +393 -0
  305. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC5267__factory.ts +71 -0
  306. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors__factory.ts +127 -0
  307. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors__factory.ts +111 -0
  308. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors__factory.ts +128 -0
  309. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
  310. package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +3 -0
  311. package/typechain-types/factories/@openzeppelin/contracts/security/Pausable__factory.ts +61 -0
  312. package/typechain-types/factories/@openzeppelin/contracts/security/index.ts +4 -0
  313. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +330 -0
  314. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +3 -3
  315. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable__factory.ts +364 -0
  316. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable__factory.ts +382 -0
  317. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit__factory.ts +540 -0
  318. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +247 -0
  319. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
  320. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +2 -0
  321. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/SafeERC20__factory.ts +96 -0
  322. package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
  323. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +455 -0
  324. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata__factory.ts +355 -0
  325. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
  326. package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/index.ts +2 -0
  327. package/typechain-types/factories/@openzeppelin/contracts/utils/Nonces__factory.ts +57 -0
  328. package/typechain-types/factories/@openzeppelin/contracts/utils/Pausable__factory.ts +71 -0
  329. package/typechain-types/factories/@openzeppelin/contracts/utils/ReentrancyGuard__factory.ts +30 -0
  330. package/typechain-types/factories/@openzeppelin/contracts/utils/ShortStrings__factory.ts +83 -0
  331. package/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.ts +90 -0
  332. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.ts +91 -0
  333. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/EIP712__factory.ts +87 -0
  334. package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
  335. package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +7 -0
  336. package/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.ts +118 -0
  337. package/typechain-types/factories/@openzeppelin/contracts/utils/math/index.ts +4 -0
  338. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1__factory.ts +802 -0
  339. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow__factory.ts +749 -0
  340. package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +12 -1
  341. package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +2 -0
  342. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable__factory.ts +35 -0
  343. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +41 -1
  344. package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +1 -0
  345. package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +12 -1
  346. package/typechain-types/factories/contracts/index.ts +4 -0
  347. package/typechain-types/factories/contracts/messaging/PrivateMessaging__factory.ts +1035 -0
  348. package/typechain-types/factories/contracts/messaging/index.ts +4 -0
  349. package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
  350. package/typechain-types/factories/contracts/mocks/index.ts +2 -0
  351. package/typechain-types/factories/contracts/mocks/messaging/PrivateMessagingHarness__factory.ts +1161 -0
  352. package/typechain-types/factories/contracts/mocks/messaging/index.ts +4 -0
  353. package/typechain-types/factories/contracts/mocks/oracle/CotiPriceConsumerMock__factory.ts +159 -0
  354. package/typechain-types/factories/contracts/mocks/oracle/index.ts +4 -0
  355. package/typechain-types/factories/contracts/mocks/token/ERC20DecimalsMock__factory.ts +432 -0
  356. package/typechain-types/factories/contracts/mocks/token/ERC20Mock__factory.ts +430 -0
  357. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock__factory.ts +125 -0
  358. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock__factory.ts +1885 -0
  359. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock__factory.ts +1540 -0
  360. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock__factory.ts +1492 -0
  361. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock__factory.ts +165 -0
  362. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +794 -52
  363. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted__factory.ts +54 -0
  364. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock__factory.ts +159 -0
  365. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
  366. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock__factory.ts +164 -0
  367. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock__factory.ts +130 -0
  368. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock__factory.ts +102 -0
  369. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/index.ts +9 -0
  370. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  371. package/typechain-types/factories/contracts/mocks/token/index.ts +2 -0
  372. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +1 -1
  373. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +1 -1
  374. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  375. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +1 -1
  376. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +1 -1
  377. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  378. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +1 -1
  379. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +1 -1
  380. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
  381. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +1 -1
  382. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  383. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +1 -1
  384. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  385. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +1 -1
  386. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +1 -1
  387. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  388. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +1 -1
  389. package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +1 -1
  390. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  391. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  392. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +1 -1
  393. package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1 -1
  394. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +1 -1
  395. package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +1 -1
  396. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  397. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +1 -1
  398. package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +1 -1
  399. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +1 -1
  400. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +1 -1
  401. package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +1 -1
  402. package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +1 -1
  403. package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +1 -1
  404. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +1 -1
  405. package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +1 -1
  406. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  407. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  408. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +1 -1
  409. package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +1 -1
  410. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  411. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  412. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +1 -1
  413. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +1 -1
  414. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  415. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  416. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  417. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  418. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  419. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  420. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +1 -1
  421. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +1 -1
  422. package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +1 -1
  423. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +4 -22
  424. package/typechain-types/factories/contracts/node/CotiNodeRewards__factory.ts +576 -0
  425. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/IERC5192__factory.ts +54 -0
  426. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT__factory.ts +1072 -0
  427. package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
  428. package/typechain-types/factories/contracts/node/index.ts +5 -0
  429. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
  430. package/typechain-types/factories/contracts/oracle/CotiPriceConsumer__factory.ts +295 -0
  431. package/typechain-types/factories/contracts/oracle/ICotiPriceConsumer__factory.ts +73 -0
  432. package/typechain-types/factories/contracts/oracle/IStdReference__factory.ts +107 -0
  433. package/typechain-types/factories/contracts/oracle/index.ts +6 -0
  434. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeCotiNative__factory.ts +1753 -0
  435. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals__factory.ts +38 -0
  436. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20__factory.ts +1766 -0
  437. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
  438. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDCe__factory.ts +1870 -0
  439. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDT__factory.ts +1870 -0
  440. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWADA__factory.ts +1870 -0
  441. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWBTC__factory.ts +1870 -0
  442. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWETH__factory.ts +1870 -0
  443. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridge__factory.ts +1444 -0
  444. package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgegCoti__factory.ts +1870 -0
  445. package/typechain-types/factories/contracts/privacyBridge/index.ts +12 -0
  446. package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +481 -35
  447. package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiverEncrypted__factory.ts +53 -0
  448. package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiver__factory.ts +54 -0
  449. package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +812 -52
  450. package/typechain-types/factories/contracts/token/PrivateERC20/index.ts +3 -0
  451. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC__factory.ts +1471 -0
  452. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken__factory.ts +1477 -0
  453. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTI__factory.ts +1468 -0
  454. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateTetherUSD__factory.ts +1471 -0
  455. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedADA__factory.ts +1471 -0
  456. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC__factory.ts +1471 -0
  457. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedEther__factory.ts +1477 -0
  458. package/typechain-types/factories/contracts/token/PrivateERC20/tokens/index.ts +10 -0
  459. package/typechain-types/factories/contracts/token/index.ts +1 -0
  460. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004__factory.ts +992 -0
  461. package/typechain-types/factories/contracts/token/points/CotiTokenPoints004__factory.ts +992 -0
  462. package/typechain-types/factories/contracts/token/points/index.ts +4 -0
  463. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
  464. package/typechain-types/hardhat.d.ts +1414 -118
  465. package/typechain-types/index.ts +138 -2
  466. package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +0 -408
  467. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.ts +0 -341
  468. package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.ts +0 -347
  469. package/typechain-types/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.ts +0 -186
  470. package/typechain-types/contracts/mocks/utils/mpc/Comparison128BitTestsContract.ts +0 -260
  471. package/typechain-types/contracts/mocks/utils/mpc/Comparison256BitTestsContract.ts +0 -260
  472. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.ts +0 -302
  473. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.ts +0 -322
  474. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract__factory.ts +0 -349
  475. package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract__factory.ts +0 -364
  476. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128BitTestsContract__factory.ts +0 -182
  477. package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256BitTestsContract__factory.ts +0 -182
  478. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128BitTestsContract__factory.ts +0 -255
  479. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256BitTestsContract__factory.ts +0 -255
  480. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract__factory.ts +0 -332
  481. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract__factory.ts +0 -380
@@ -0,0 +1,492 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.20;
3
+
4
+ import "@openzeppelin/contracts/access/AccessControl.sol";
5
+ import "@openzeppelin/contracts/access/Ownable.sol";
6
+ import "@openzeppelin/contracts/proxy/Clones.sol";
7
+ import "@openzeppelin/contracts/utils/Pausable.sol";
8
+
9
+ import "../IInbox.sol";
10
+ import "../token/perc20/IPodERC20.sol";
11
+ import "../token/perc20/PodErc20MintableInitializable.sol";
12
+ import "../token/perc20/cotiside/PodErc20CotiMother.sol";
13
+ import "./IPrivacyPortal.sol";
14
+ import "./IPrivacyPortalFactory.sol";
15
+ import "./IPodPriceOracle.sol";
16
+ import "./PrivacyPortalFeeLib.sol";
17
+
18
+ /// @title PrivacyPortalFactory
19
+ /// @notice Deploys one-shot minimal-clone portals and pTokens for public ERC20 collateral.
20
+ /// @dev Governance uses OpenZeppelin {AccessControl}: {DEFAULT_ADMIN_ROLE} for admin actions,
21
+ /// {OPERATOR_ROLE} for factory default fees and portal fee / soft-deposit controls. Manage roles via
22
+ /// {grantRole} and {revokeRole}. Portals have no local operator role — they call {isOperator}.
23
+ /// Admin {pause}/{unpause} pauses deposits and withdrawals on every portal from this factory.
24
+ /// Uses plain {AccessControl} (not Enumerable) so bytecode stays Paris-compatible for COTI.
25
+ contract PrivacyPortalFactory is IPrivacyPortalFactory, AccessControl, Pausable {
26
+ using PrivacyPortalFeeLib for bytes32;
27
+
28
+ /// @notice Operator role for routine fee-parameter updates (mirrors Privacy Bridge).
29
+ bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");
30
+
31
+ /// @dev Primary admin for {owner()} tooling; kept in sync with {DEFAULT_ADMIN_ROLE} grants/revokes.
32
+ address private _owner;
33
+ /// @notice Source-chain inbox used by pToken clones and registration messages.
34
+ address public inbox;
35
+ /// @notice COTI chain id used by pToken clones for remote MPC execution.
36
+ uint256 public cotiChainId;
37
+ /// @notice Unified COTI-side pToken ledger all clones talk to.
38
+ address public cotiMotherContract;
39
+ /// @notice Clone implementation for source-chain pTokens.
40
+ address public immutable podTokenImplementation;
41
+ /// @notice Clone implementation for portals.
42
+ address public immutable portalImplementation;
43
+ /// @notice Recipient of swept portal protocol fees from all portals created here (fixed at deploy; no setter).
44
+ address public immutable feeRecipient;
45
+ /// @notice Catastrophe rescue destination for all portals created here (pause + owner rescue).
46
+ address public rescueRecipient;
47
+ /// @notice Wrapped native token on this chain (WETH/WAVAX) for portal gas fee pricing.
48
+ address public immutable nativeToken;
49
+
50
+ /// @notice Optional USD oracle for dynamic portal fees; zero disables dynamic pricing.
51
+ IPodPriceOracle public priceOracle;
52
+ /// @notice Factory default packed deposit fee config.
53
+ bytes32 public defaultDepositFeePacked;
54
+ /// @notice Factory default packed withdraw fee config.
55
+ bytes32 public defaultWithdrawFeePacked;
56
+
57
+ /// @notice Addresses allowed to deploy portal/pToken pairs.
58
+ mapping(address => bool) public deployers;
59
+ /// @notice Portal address by underlying ERC20.
60
+ mapping(address => address) public portalForUnderlying;
61
+ /// @notice Source-chain pToken address by underlying ERC20.
62
+ mapping(address => address) public pTokenForUnderlying;
63
+ /// @notice Portal address by source-chain pToken.
64
+ mapping(address => address) public portalForPToken;
65
+ /// @notice Addresses blocked from deposits and withdrawals on factory-created portals.
66
+ mapping(address => bool) public blacklisted;
67
+
68
+ /// @notice Address added to the factory blacklist.
69
+ event Blacklisted(address indexed account, address indexed by);
70
+ /// @notice Address removed from the factory blacklist.
71
+ event UnBlacklisted(address indexed account, address indexed by);
72
+ /// @notice Deployer allowlist entry changed.
73
+ event DeployerUpdated(address indexed deployer, bool allowed);
74
+ /// @notice A new portal and source-chain pToken clone pair was deployed.
75
+ event PortalCreated(
76
+ address indexed underlying,
77
+ address indexed portal,
78
+ address indexed pToken,
79
+ address cotiMotherContract,
80
+ uint8 decimals
81
+ );
82
+ /// @notice One-way registration message submitted to the COTI mother contract.
83
+ event TokenRegistrationRequested(address indexed pToken, bytes32 indexed requestId);
84
+ /// @notice Factory default portal fee config updated.
85
+ event DefaultPortalFeeUpdated(bool indexed isDeposit, bytes32 packedConfig);
86
+ /// @notice Portal fee oracle upgraded or disabled.
87
+ event PriceOracleUpdated(address indexed previousOracle, address indexed newOracle);
88
+ /// @notice Inbox / COTI mother routing updated for newly created portals and registration messages.
89
+ event RoutingUpdated(address indexed inbox, uint256 cotiChainId, address indexed cotiMotherContract);
90
+ /// @notice Rescue recipient updated for paused portal rescue paths.
91
+ event RescueRecipientUpdated(address indexed previousRecipient, address indexed newRecipient);
92
+
93
+ /// @notice Caller is not an allowlisted deployer.
94
+ error OnlyDeployer(address caller);
95
+ /// @notice A required address was zero.
96
+ error InvalidAddress();
97
+ /// @notice A portal already exists for the underlying token.
98
+ error PortalAlreadyExists(address underlying, address portal);
99
+ /// @notice pToken is not registered to a portal created by this factory.
100
+ error UnknownPToken(address pToken);
101
+ /// @notice Oracle is not configured.
102
+ error OracleNotConfigured();
103
+ /// @notice No {DEFAULT_ADMIN_ROLE} holder is configured.
104
+ error AdminNotConfigured();
105
+
106
+ /// @notice Restrict a function to an allowlisted deployer.
107
+ modifier onlyDeployer() {
108
+ if (!deployers[msg.sender]) {
109
+ revert OnlyDeployer(msg.sender);
110
+ }
111
+ _;
112
+ }
113
+
114
+ /// @param initialOwner Initial {DEFAULT_ADMIN_ROLE} holder and deployer.
115
+ /// @param inbox_ Source-chain inbox used by pToken clones.
116
+ /// @param cotiChainId_ COTI chain id used by pToken clones.
117
+ /// @param cotiMotherContract_ Unified COTI-side pToken ledger.
118
+ /// @param podTokenImplementation_ Clone implementation for source-chain pTokens.
119
+ /// @param portalImplementation_ Clone implementation for portals.
120
+ /// @param feeRecipient_ Recipient of swept portal protocol fees (immutable for factory lifetime).
121
+ /// @param rescueRecipient_ Catastrophe rescue destination for portals from this factory.
122
+ /// @param nativeToken_ Wrapped native token (WETH/WAVAX) for dynamic fee gas pricing.
123
+ /// @param priceOracle_ Optional USD oracle; zero for min-fee-only deployments.
124
+ /// @param defaultDepositFixedFee_ Default deposit fee floor in native wei.
125
+ /// @param defaultDepositPercentageBps_ Default deposit percentage (FEE_DIVISOR scale).
126
+ /// @param defaultDepositMaxFee_ Default deposit fee cap in native wei.
127
+ /// @param defaultWithdrawFixedFee_ Default withdraw fee floor in native wei.
128
+ /// @param defaultWithdrawPercentageBps_ Default withdraw percentage (FEE_DIVISOR scale).
129
+ /// @param defaultWithdrawMaxFee_ Default withdraw fee cap in native wei.
130
+ constructor(
131
+ address initialOwner,
132
+ address inbox_,
133
+ uint256 cotiChainId_,
134
+ address cotiMotherContract_,
135
+ address podTokenImplementation_,
136
+ address portalImplementation_,
137
+ address feeRecipient_,
138
+ address rescueRecipient_,
139
+ address nativeToken_,
140
+ address priceOracle_,
141
+ uint256 defaultDepositFixedFee_,
142
+ uint256 defaultDepositPercentageBps_,
143
+ uint256 defaultDepositMaxFee_,
144
+ uint256 defaultWithdrawFixedFee_,
145
+ uint256 defaultWithdrawPercentageBps_,
146
+ uint256 defaultWithdrawMaxFee_
147
+ ) {
148
+ if (
149
+ initialOwner == address(0) || inbox_ == address(0) || cotiChainId_ == 0
150
+ || cotiMotherContract_ == address(0) || podTokenImplementation_ == address(0)
151
+ || portalImplementation_ == address(0) || feeRecipient_ == address(0)
152
+ || rescueRecipient_ == address(0) || nativeToken_ == address(0)
153
+ ) {
154
+ revert InvalidAddress();
155
+ }
156
+ inbox = inbox_;
157
+ cotiChainId = cotiChainId_;
158
+ cotiMotherContract = cotiMotherContract_;
159
+ podTokenImplementation = podTokenImplementation_;
160
+ portalImplementation = portalImplementation_;
161
+ feeRecipient = feeRecipient_;
162
+ rescueRecipient = rescueRecipient_;
163
+ nativeToken = nativeToken_;
164
+ priceOracle = IPodPriceOracle(priceOracle_);
165
+ defaultDepositFeePacked = PrivacyPortalFeeLib.packFeeConfig(
166
+ defaultDepositFixedFee_, defaultDepositPercentageBps_, defaultDepositMaxFee_
167
+ );
168
+ defaultWithdrawFeePacked = PrivacyPortalFeeLib.packFeeConfig(
169
+ defaultWithdrawFixedFee_, defaultWithdrawPercentageBps_, defaultWithdrawMaxFee_
170
+ );
171
+ deployers[initialOwner] = true;
172
+ emit DeployerUpdated(initialOwner, true);
173
+ _grantRole(DEFAULT_ADMIN_ROLE, initialOwner);
174
+ _grantRole(OPERATOR_ROLE, initialOwner);
175
+ emit DefaultPortalFeeUpdated(true, defaultDepositFeePacked);
176
+ emit DefaultPortalFeeUpdated(false, defaultWithdrawFeePacked);
177
+ if (priceOracle_ != address(0)) {
178
+ emit PriceOracleUpdated(address(0), priceOracle_);
179
+ }
180
+ }
181
+
182
+ /// @notice Primary factory admin for tooling (`Ownable.owner()`-shaped).
183
+ /// @dev Tracks the first granted {DEFAULT_ADMIN_ROLE}; clears when that account is revoked.
184
+ function owner() external view returns (address) {
185
+ if (_owner == address(0) || !hasRole(DEFAULT_ADMIN_ROLE, _owner)) {
186
+ revert AdminNotConfigured();
187
+ }
188
+ return _owner;
189
+ }
190
+
191
+ /// @notice Whether `account` holds {DEFAULT_ADMIN_ROLE}.
192
+ function isAdmin(address account) external view returns (bool) {
193
+ return hasRole(DEFAULT_ADMIN_ROLE, account);
194
+ }
195
+
196
+ function _grantRole(bytes32 role, address account) internal override returns (bool) {
197
+ bool granted = super._grantRole(role, account);
198
+ if (granted && role == DEFAULT_ADMIN_ROLE && _owner == address(0)) {
199
+ _owner = account;
200
+ }
201
+ return granted;
202
+ }
203
+
204
+ function _revokeRole(bytes32 role, address account) internal override returns (bool) {
205
+ bool revoked = super._revokeRole(role, account);
206
+ if (revoked && role == DEFAULT_ADMIN_ROLE && account == _owner) {
207
+ _owner = address(0);
208
+ }
209
+ return revoked;
210
+ }
211
+
212
+ /// @notice Whether `account` holds {OPERATOR_ROLE}.
213
+ function isOperator(address account) external view returns (bool) {
214
+ return hasRole(OPERATOR_ROLE, account);
215
+ }
216
+
217
+ /// @notice Add an address to the factory blacklist, blocking deposits and withdrawals on all portals here.
218
+ function addToBlacklist(address account) external onlyRole(DEFAULT_ADMIN_ROLE) {
219
+ if (account == address(0)) {
220
+ revert InvalidAddress();
221
+ }
222
+ blacklisted[account] = true;
223
+ emit Blacklisted(account, msg.sender);
224
+ }
225
+
226
+ /// @notice Remove an address from the factory blacklist.
227
+ function removeFromBlacklist(address account) external onlyRole(DEFAULT_ADMIN_ROLE) {
228
+ if (account == address(0)) {
229
+ revert InvalidAddress();
230
+ }
231
+ blacklisted[account] = false;
232
+ emit UnBlacklisted(account, msg.sender);
233
+ }
234
+
235
+ /// @notice Add or remove a portal deployer.
236
+ function setDeployer(address deployer, bool allowed) external onlyRole(DEFAULT_ADMIN_ROLE) {
237
+ if (deployer == address(0)) {
238
+ revert InvalidAddress();
239
+ }
240
+ deployers[deployer] = allowed;
241
+ emit DeployerUpdated(deployer, allowed);
242
+ }
243
+
244
+ /// @notice Admin: rotate inbox, COTI chain id, and mother ledger used for new portals / registration.
245
+ /// @dev Existing pToken clones keep their peer until {configurePToken} (factory is their Ownable owner).
246
+ function configureRouting(address inbox_, uint256 cotiChainId_, address cotiMotherContract_)
247
+ external
248
+ onlyRole(DEFAULT_ADMIN_ROLE)
249
+ {
250
+ if (inbox_ == address(0) || cotiChainId_ == 0 || cotiMotherContract_ == address(0)) {
251
+ revert InvalidAddress();
252
+ }
253
+ inbox = inbox_;
254
+ cotiChainId = cotiChainId_;
255
+ cotiMotherContract = cotiMotherContract_;
256
+ emit RoutingUpdated(inbox_, cotiChainId_, cotiMotherContract_);
257
+ }
258
+
259
+ /// @notice Admin: rotate inbox / COTI peer on an existing factory-deployed pToken clone ({cotiChainId} is immutable on the token).
260
+ function configurePToken(address pToken_, address inbox_, address cotiSideContract_)
261
+ external
262
+ onlyRole(DEFAULT_ADMIN_ROLE)
263
+ {
264
+ if (portalForPToken[pToken_] == address(0)) {
265
+ revert UnknownPToken(pToken_);
266
+ }
267
+ IPodERC20(pToken_).configure(inbox_, cotiSideContract_);
268
+ }
269
+
270
+ /// @notice Admin: transfer Ownable of a factory-deployed pToken (e.g. hand off after launch).
271
+ function transferPTokenOwnership(address pToken_, address newOwner_) external onlyRole(DEFAULT_ADMIN_ROLE) {
272
+ if (portalForPToken[pToken_] == address(0)) {
273
+ revert UnknownPToken(pToken_);
274
+ }
275
+ if (newOwner_ == address(0)) {
276
+ revert InvalidAddress();
277
+ }
278
+ Ownable(pToken_).transferOwnership(newOwner_);
279
+ }
280
+
281
+ /// @notice Admin: rotate the catastrophe rescue destination used by all portals from this factory.
282
+ function setRescueRecipient(address rescueRecipient_) external onlyRole(DEFAULT_ADMIN_ROLE) {
283
+ if (rescueRecipient_ == address(0)) {
284
+ revert InvalidAddress();
285
+ }
286
+ address previous = rescueRecipient;
287
+ rescueRecipient = rescueRecipient_;
288
+ emit RescueRecipientUpdated(previous, rescueRecipient_);
289
+ }
290
+
291
+ /// @notice Pause deposits and withdrawals on every portal from this factory.
292
+ function pause() external onlyRole(DEFAULT_ADMIN_ROLE) {
293
+ _pause();
294
+ }
295
+
296
+ /// @notice Unpause factory-wide deposit and withdrawal entry points.
297
+ function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) {
298
+ _unpause();
299
+ }
300
+
301
+ /// @inheritdoc IPrivacyPortalPauseController
302
+ function depositsPaused() external view returns (bool) {
303
+ return paused();
304
+ }
305
+
306
+ /// @inheritdoc IPrivacyPortalPauseController
307
+ function withdrawalsPaused() external view returns (bool) {
308
+ return paused();
309
+ }
310
+
311
+ /// @notice Update factory default deposit fee config.
312
+ function setDefaultDepositFee(uint256 fixedFee, uint256 percentageBps, uint256 maxFee)
313
+ external
314
+ onlyRole(OPERATOR_ROLE)
315
+ {
316
+ bytes32 packed = PrivacyPortalFeeLib.packFeeConfig(fixedFee, percentageBps, maxFee);
317
+ defaultDepositFeePacked = packed;
318
+ emit DefaultPortalFeeUpdated(true, packed);
319
+ }
320
+
321
+ /// @notice Update factory default withdraw fee config.
322
+ function setDefaultWithdrawFee(uint256 fixedFee, uint256 percentageBps, uint256 maxFee)
323
+ external
324
+ onlyRole(OPERATOR_ROLE)
325
+ {
326
+ bytes32 packed = PrivacyPortalFeeLib.packFeeConfig(fixedFee, percentageBps, maxFee);
327
+ defaultWithdrawFeePacked = packed;
328
+ emit DefaultPortalFeeUpdated(false, packed);
329
+ }
330
+
331
+ /// @notice Upgrade or disable the portal fee oracle.
332
+ function setPriceOracle(address newOracle) external onlyRole(DEFAULT_ADMIN_ROLE) {
333
+ address previous = address(priceOracle);
334
+ priceOracle = IPodPriceOracle(newOracle);
335
+ emit PriceOracleUpdated(previous, newOracle);
336
+ }
337
+
338
+ /// @inheritdoc IPrivacyPortalFactory
339
+ function estimateDepositPortalFee(address underlying, uint256 amount, uint8 decimals)
340
+ external
341
+ view
342
+ returns (uint256 fee, bool usedDynamicPricing)
343
+ {
344
+ return _estimatePortalFee(defaultDepositFeePacked, underlying, amount, decimals);
345
+ }
346
+
347
+ /// @inheritdoc IPrivacyPortalFactory
348
+ function estimateWithdrawPortalFee(address underlying, uint256 amount, uint8 decimals)
349
+ external
350
+ view
351
+ returns (uint256 fee, bool usedDynamicPricing)
352
+ {
353
+ return _estimatePortalFee(defaultWithdrawFeePacked, underlying, amount, decimals);
354
+ }
355
+
356
+ /// @inheritdoc IPrivacyPortalFactory
357
+ function getDepositPortalFeeFloor(address underlying, uint256 amount, uint8 decimals)
358
+ external
359
+ view
360
+ returns (uint256 floor, uint128 maxFee)
361
+ {
362
+ return _portalFeeFloor(defaultDepositFeePacked, underlying, amount, decimals);
363
+ }
364
+
365
+ /// @inheritdoc IPrivacyPortalFactory
366
+ function getWithdrawPortalFeeFloor(address underlying, uint256 amount, uint8 decimals)
367
+ external
368
+ view
369
+ returns (uint256 floor, uint128 maxFee)
370
+ {
371
+ return _portalFeeFloor(defaultWithdrawFeePacked, underlying, amount, decimals);
372
+ }
373
+
374
+ /// @inheritdoc IPrivacyPortalFactory
375
+ function getFeeConfig(bool isDeposit) external view returns (PortalFeeConfig memory config) {
376
+ return PrivacyPortalFeeLib.decodeFeeConfig(
377
+ isDeposit ? defaultDepositFeePacked : defaultWithdrawFeePacked
378
+ );
379
+ }
380
+
381
+ /// @inheritdoc IPrivacyPortalFactory
382
+ function decodeFeeConfig(bytes32 packed) external pure returns (PortalFeeConfig memory config) {
383
+ return PrivacyPortalFeeLib.decodeFeeConfig(packed);
384
+ }
385
+
386
+ /// @notice Deploy a portal and pToken clone for an underlying token and register on the COTI mother ledger.
387
+ function createPortal(
388
+ address underlying,
389
+ string calldata name,
390
+ string calldata symbol,
391
+ uint8 decimals,
392
+ bool nativeWrappedUnderlying
393
+ ) external payable onlyDeployer returns (address portal, address pToken) {
394
+ if (underlying == address(0)) {
395
+ revert InvalidAddress();
396
+ }
397
+ if (portalForUnderlying[underlying] != address(0)) {
398
+ revert PortalAlreadyExists(underlying, portalForUnderlying[underlying]);
399
+ }
400
+
401
+ portal = Clones.clone(portalImplementation);
402
+ pToken = Clones.clone(podTokenImplementation);
403
+
404
+ // Factory retains Ownable on the pToken so admins can {configurePToken} after inbox / mother upgrades.
405
+ // Portal minter is the portal; portal admin is factory {DEFAULT_ADMIN_ROLE} (no local Ownable).
406
+ PodErc20MintableInitializable(payable(pToken)).initialize(
407
+ portal,
408
+ address(this),
409
+ cotiChainId,
410
+ inbox,
411
+ cotiMotherContract,
412
+ name,
413
+ symbol,
414
+ decimals
415
+ );
416
+ IPrivacyPortal(portal).initialize(
417
+ underlying, pToken, decimals, nativeWrappedUnderlying, address(this)
418
+ );
419
+
420
+ portalForUnderlying[underlying] = portal;
421
+ pTokenForUnderlying[underlying] = pToken;
422
+ portalForPToken[pToken] = portal;
423
+
424
+ bytes32 requestId = _requestMotherRegistration(pToken, name, symbol, decimals);
425
+
426
+ emit PortalCreated(underlying, portal, pToken, cotiMotherContract, decimals);
427
+ emit TokenRegistrationRequested(pToken, requestId);
428
+ }
429
+
430
+ function _estimatePortalFee(
431
+ bytes32 packed,
432
+ address underlying,
433
+ uint256 amount,
434
+ uint8 decimals
435
+ ) private view returns (uint256 fee, bool usedDynamicPricing) {
436
+ IPodPriceOracle oracle = priceOracle;
437
+ if (address(oracle) == address(0)) {
438
+ (uint96 fixedFee,,) = PrivacyPortalFeeLib.unpackFeeConfig(packed);
439
+ return (fixedFee, false);
440
+ }
441
+
442
+ (uint256 nativeUsd, uint256 collateralUsd) =
443
+ oracle.getLivePrices(nativeToken, underlying);
444
+ return PrivacyPortalFeeLib.resolvePortalFee(
445
+ packed,
446
+ amount,
447
+ decimals,
448
+ collateralUsd,
449
+ nativeUsd
450
+ );
451
+ }
452
+
453
+ function _portalFeeFloor(bytes32 packed, address underlying, uint256 amount, uint8 decimals)
454
+ private
455
+ view
456
+ returns (uint256 floor, uint128 maxFee)
457
+ {
458
+ (uint96 fixedFee, uint32 bps, uint128 max) = PrivacyPortalFeeLib.unpackFeeConfig(packed);
459
+ maxFee = max;
460
+ IPodPriceOracle oracle = priceOracle;
461
+ if (address(oracle) == address(0) || bps == 0) {
462
+ return (fixedFee, maxFee);
463
+ }
464
+ (uint256 nativeUsd, uint256 collateralUsd) =
465
+ oracle.getLivePrices(nativeToken, underlying);
466
+ (floor,) = PrivacyPortalFeeLib.resolvePortalFee(
467
+ packed,
468
+ amount,
469
+ decimals,
470
+ collateralUsd,
471
+ nativeUsd
472
+ );
473
+ }
474
+
475
+ function _requestMotherRegistration(
476
+ address pToken,
477
+ string calldata name,
478
+ string calldata symbol,
479
+ uint8 decimals
480
+ ) private returns (bytes32 requestId) {
481
+ IInbox.MpcMethodCall memory methodCall = IInbox.MpcMethodCall({
482
+ selector: bytes4(0),
483
+ data: abi.encodeWithSelector(PodErc20CotiMother.registerToken.selector, pToken, name, symbol, decimals),
484
+ datatypes: new bytes8[](0),
485
+ datalens: new bytes32[](0)
486
+ });
487
+
488
+ requestId = IInbox(inbox).sendOneWayMessage{value: msg.value}(
489
+ cotiChainId, cotiMotherContract, methodCall, bytes4(0)
490
+ );
491
+ }
492
+ }
@@ -0,0 +1,98 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.20;
3
+
4
+ import "@openzeppelin/contracts/utils/math/Math.sol";
5
+
6
+ import "./IPrivacyPortalFactory.sol";
7
+
8
+ /// @title PrivacyPortalFeeLib
9
+ /// @notice Pure fee math and packed config helpers for Privacy Portal protocol fees.
10
+ library PrivacyPortalFeeLib {
11
+ /// @notice Percentage divisor (same as Privacy Bridge).
12
+ uint256 internal constant FEE_DIVISOR = 1_000_000;
13
+ /// @notice Maximum percentage units (10%).
14
+ uint256 internal constant MAX_FEE_UNITS = 100_000;
15
+ /// @notice USD rate scale for native conversion.
16
+ uint256 internal constant PRICE_SCALE = 1e18;
17
+
18
+ /// @notice Packed field overflow.
19
+ error FeeOverflow();
20
+ /// @notice Invalid fee configuration.
21
+ error InvalidFeeConfiguration();
22
+
23
+ /// @notice Pack fee config into one storage slot: uint96 fixed | uint32 bps | uint128 max.
24
+ function packFeeConfig(uint256 fixedFee, uint256 percentageBps, uint256 maxFee)
25
+ internal
26
+ pure
27
+ returns (bytes32)
28
+ {
29
+ if (fixedFee > type(uint96).max || maxFee > type(uint128).max) {
30
+ revert FeeOverflow();
31
+ }
32
+ if (maxFee == 0 || fixedFee > maxFee || percentageBps > MAX_FEE_UNITS) {
33
+ revert InvalidFeeConfiguration();
34
+ }
35
+ return bytes32(
36
+ uint256(uint96(fixedFee)) | (uint256(uint32(percentageBps)) << 96)
37
+ | (uint256(uint128(maxFee)) << 128)
38
+ );
39
+ }
40
+
41
+ /// @notice Unpack a fee config slot.
42
+ function unpackFeeConfig(bytes32 packed)
43
+ internal
44
+ pure
45
+ returns (uint96 fixedFee, uint32 percentageBps, uint128 maxFee)
46
+ {
47
+ fixedFee = uint96(uint256(packed));
48
+ percentageBps = uint32(uint256(packed >> 96));
49
+ maxFee = uint128(uint256(packed >> 128));
50
+ }
51
+
52
+ /// @notice Whether a portal override slot is set (non-zero).
53
+ function isOverrideSet(bytes32 packed) internal pure returns (bool) {
54
+ return packed != bytes32(0);
55
+ }
56
+
57
+ /// @notice Decode a packed fee config slot into plain uint256 fields for UI use.
58
+ function decodeFeeConfig(bytes32 packed) internal pure returns (PortalFeeConfig memory config) {
59
+ (uint96 fixedFee, uint32 percentageBps, uint128 maxFee) = unpackFeeConfig(packed);
60
+ config = PortalFeeConfig({
61
+ fixedFee: uint256(fixedFee),
62
+ percentageBps: uint256(percentageBps),
63
+ maxFee: uint256(maxFee)
64
+ });
65
+ }
66
+
67
+ /// @notice Bridge-equivalent floor/cap formula.
68
+ function calculateDynamicFee(uint256 percentageFeeNative, uint256 fixedFee, uint256 maxFee)
69
+ internal
70
+ pure
71
+ returns (uint256)
72
+ {
73
+ uint256 fee = percentageFeeNative > fixedFee ? percentageFeeNative : fixedFee;
74
+ return fee > maxFee ? maxFee : fee;
75
+ }
76
+
77
+ /// @notice Resolve portal fee from packed config and live USD rates.
78
+ /// @dev Falls back to `fixedFee` (no dynamic pricing) when `percentageBps == 0` or either rate is zero.
79
+ function resolvePortalFee(
80
+ bytes32 packedFeeConfig,
81
+ uint256 amount,
82
+ uint8 decimals,
83
+ uint256 collateralUsdRate,
84
+ uint256 nativeUsdRate
85
+ ) internal pure returns (uint256 fee, bool usedDynamicPricing) {
86
+ (uint96 fixedFee, uint32 percentageBps, uint128 maxFee) = unpackFeeConfig(packedFeeConfig);
87
+
88
+ if (percentageBps == 0 || collateralUsdRate == 0 || nativeUsdRate == 0) {
89
+ return (fixedFee, false);
90
+ }
91
+
92
+ uint256 txValueUsd = Math.mulDiv(amount, collateralUsdRate, 10 ** uint256(decimals));
93
+ uint256 percentageFeeUsd = Math.mulDiv(txValueUsd, percentageBps, FEE_DIVISOR);
94
+ uint256 percentageFeeNative = Math.mulDiv(percentageFeeUsd, PRICE_SCALE, nativeUsdRate);
95
+ fee = calculateDynamicFee(percentageFeeNative, fixedFee, maxFee);
96
+ return (fee, true);
97
+ }
98
+ }
@@ -0,0 +1,14 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.20;
3
+
4
+ import "@openzeppelin/contracts/proxy/Clones.sol";
5
+
6
+ /// @dev Test helper to deploy minimal clones of portal/pToken implementations.
7
+ contract CloneHelper {
8
+ address public lastClone;
9
+
10
+ function clone(address implementation) external returns (address cloned) {
11
+ cloned = Clones.clone(implementation);
12
+ lastClone = cloned;
13
+ }
14
+ }
@@ -0,0 +1,26 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.20;
3
+
4
+ import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
+
6
+ /// @dev Test ERC20 with configurable decimals.
7
+ contract MockERC20 is ERC20 {
8
+ uint8 private immutable _decimals;
9
+
10
+ constructor(string memory name_, string memory symbol_, uint8 decimals_) ERC20(name_, symbol_) {
11
+ _decimals = decimals_;
12
+ }
13
+
14
+ function mint(address to, uint256 amount) external {
15
+ _mint(to, amount);
16
+ }
17
+
18
+ function decimals() public view override returns (uint8) {
19
+ return _decimals;
20
+ }
21
+ }
22
+
23
+ /// @dev Alias used by some tests.
24
+ contract MockERC20Decimals is MockERC20 {
25
+ constructor(string memory name_, string memory symbol_, uint8 decimals_) MockERC20(name_, symbol_, decimals_) {}
26
+ }