@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.
- package/.github/workflows/npm-publish.yml +1 -1
- package/contracts/access/DataPrivacyFramework/DataPrivacyFramework.sol +1 -1
- package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +1 -1
- package/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.sol +2 -4
- package/contracts/disperse/disperseToken/MintDisperser.sol +1 -3
- package/contracts/disperse/disperseToken/TokenDisperser.sol +1 -1
- package/contracts/messaging/PrivateMessaging.sol +456 -0
- package/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.sol +1 -1
- package/contracts/mocks/messaging/PrivateMessagingHarness.sol +54 -0
- package/contracts/mocks/oracle/CotiPriceConsumerMock.sol +31 -0
- package/contracts/mocks/token/ERC20DecimalsMock.sol +21 -0
- package/contracts/mocks/token/ERC20Mock.sol +1 -1
- package/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.sol +1 -1
- package/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.sol +9 -4
- package/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.sol +1 -1
- package/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.sol +1 -1
- package/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock.sol +1 -1
- package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +1 -1
- package/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol +1 -1
- package/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.sol +1 -1
- package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.sol +1 -1
- package/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.sol +1 -1
- package/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.sol +1 -1
- package/contracts/mocks/utils/mpc/Arithmetic128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Arithmetic256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/ArithmeticAddTestsContract.sol +196 -0
- package/contracts/mocks/utils/mpc/ArithmeticMulTestsContract.sol +194 -0
- package/contracts/mocks/utils/mpc/ArithmeticSigned128TestsContract.sol +63 -0
- package/contracts/mocks/utils/mpc/ArithmeticSigned256TestsContract.sol +107 -0
- package/contracts/mocks/utils/mpc/ArithmeticSignedNarrowTestsContract.sol +123 -0
- package/contracts/mocks/utils/mpc/ArithmeticSubTestsContract.sol +196 -0
- package/contracts/mocks/utils/mpc/Bitwise128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Bitwise256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Comparison128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Comparison1TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Comparison256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/MinMax128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/MinMax256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/MinimalImplementation.sol +1 -1
- package/contracts/mocks/utils/mpc/MinimalProxy.sol +1 -1
- package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/MiscellaneousTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/MpcOperations128TestContract.sol +1 -1
- package/contracts/mocks/utils/mpc/MpcOperationsTestContract.sol +4 -4
- package/contracts/mocks/utils/mpc/Mux128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Mux256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract.sol +1 -1
- package/contracts/mocks/utils/mpc/OnBoard128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/OnBoard256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/PrivacyImplementationV1.sol +1 -1
- package/contracts/mocks/utils/mpc/PrivacyImplementationV2.sol +1 -1
- package/contracts/mocks/utils/mpc/PrivacyProxy.sol +1 -1
- package/contracts/mocks/utils/mpc/Random128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Random256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Shift128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Shift256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/StringTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Transfer128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/Transfer256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract.sol +1 -1
- package/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract.sol +2 -2
- package/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract.sol +1 -1
- package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +1 -1
- package/contracts/node/CotiNodeRewards.sol +3 -3
- package/contracts/node/SoulboundNodeNFT.sol +23 -24
- package/contracts/onboard/AccountOnboard.sol +1 -1
- package/contracts/oracle/CotiPriceConsumer.sol +103 -0
- package/contracts/oracle/ICotiPriceConsumer.sol +15 -0
- package/contracts/oracle/IStdReference.sol +26 -0
- package/contracts/pod/IInbox.sol +231 -0
- package/contracts/pod/IInboxMiner.sol +53 -0
- package/contracts/pod/InboxUser.sol +29 -0
- package/contracts/pod/InboxUserCotiTestnet.sol +13 -0
- package/contracts/pod/PodNetworkConstants.sol +30 -0
- package/contracts/pod/examples/MpcAdder.sol +57 -0
- package/contracts/pod/examples/MpcAdderPausable.sol +25 -0
- package/contracts/pod/examples/MpcAdderPausable.sol.bak +25 -0
- package/contracts/pod/examples/it128/PodAdder128.sol +48 -0
- package/contracts/pod/examples/it256/PodAdder256.sol +48 -0
- package/contracts/pod/fee/IInboxFeeManager.sol +40 -0
- package/contracts/pod/manifest.json +52 -0
- package/contracts/pod/mpc/PodLib.sol +10 -0
- package/contracts/pod/mpc/PodLib128.sol +361 -0
- package/contracts/pod/mpc/PodLib256.sol +361 -0
- package/contracts/pod/mpc/PodLib64.sol +385 -0
- package/contracts/pod/mpc/PodLibBase.sol +72 -0
- package/contracts/pod/mpc/PodUser.sol +58 -0
- package/contracts/pod/mpc/PodUserFuji.sol +14 -0
- package/contracts/pod/mpc/PodUserSepolia.sol +13 -0
- package/contracts/pod/mpc/coti-side/IPodExecutorOps.sol +99 -0
- package/contracts/pod/mpccodec/MpcAbiCodec.sol +482 -0
- package/contracts/pod/privacy/IPodPriceOracle.sol +20 -0
- package/contracts/pod/privacy/IPrivacyPortal.sol +248 -0
- package/contracts/pod/privacy/IPrivacyPortalFactory.sol +88 -0
- package/contracts/pod/privacy/PortalFeeOracle.sol +51 -0
- package/contracts/pod/privacy/PrivacyPortal.sol +871 -0
- package/contracts/pod/privacy/PrivacyPortalFactory.sol +492 -0
- package/contracts/pod/privacy/PrivacyPortalFeeLib.sol +98 -0
- package/contracts/pod/privacy/mocks/CloneHelper.sol +14 -0
- package/contracts/pod/privacy/mocks/MockERC20.sol +26 -0
- package/contracts/pod/privacy/mocks/MockPodERC20ForPortal.sol +160 -0
- package/contracts/pod/privacy/mocks/MockPrivacyPortalFactory.sol +125 -0
- package/contracts/pod/privacy/mocks/MockWrappedNative.sol +24 -0
- package/contracts/pod/token/erc7984/Erc7984Constants.sol +9 -0
- package/contracts/pod/token/erc7984/Erc7984Pointers.sol +29 -0
- package/contracts/pod/token/erc7984/IERC7984.sol +69 -0
- package/contracts/pod/token/erc7984/IERC7984PortalWrapper.sol +31 -0
- package/contracts/pod/token/erc7984/PodErc7984Mixin.sol +125 -0
- package/contracts/pod/token/erc7984/README.md +60 -0
- package/contracts/pod/token/perc20/IPodERC20.sol +298 -0
- package/contracts/pod/token/perc20/PodERC20.sol +1021 -0
- package/contracts/pod/token/perc20/PodErc20Mintable.sol +88 -0
- package/contracts/pod/token/perc20/PodErc20MintableInitializable.sol +42 -0
- package/contracts/pod/token/perc20/cotiside/IPodErc20CotiSide.sol +88 -0
- package/contracts/pod/token/perc20/cotiside/PodErc20CotiMother.sol +529 -0
- package/contracts/pod/utils/IWrappedNative.sol +11 -0
- package/contracts/privacyBridge/PrivacyBridge.sol +376 -94
- package/contracts/privacyBridge/PrivacyBridgeCotiNative.sol +210 -162
- package/contracts/privacyBridge/PrivacyBridgeERC20.sol +242 -160
- package/contracts/privacyBridge/PrivacyBridgeUSDCe.sol +8 -2
- package/contracts/privacyBridge/PrivacyBridgeUSDT.sol +8 -2
- package/contracts/privacyBridge/PrivacyBridgeWADA.sol +8 -2
- package/contracts/privacyBridge/PrivacyBridgeWBTC.sol +8 -2
- package/contracts/privacyBridge/PrivacyBridgeWETH.sol +8 -2
- package/contracts/privacyBridge/PrivacyBridgegCoti.sol +8 -2
- package/contracts/token/PrivateERC20/IPrivateERC20.sol +1 -1
- package/contracts/token/PrivateERC20/ITokenReceiver.sol +1 -1
- package/contracts/token/PrivateERC20/ITokenReceiverEncrypted.sol +1 -1
- package/contracts/token/PrivateERC20/PrivateERC20.sol +5 -5
- package/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.sol +1 -1
- package/contracts/token/PrivateERC20/tokens/PrivateCOTI.sol +1 -1
- package/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol +1 -1
- package/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.sol +1 -1
- package/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.sol +1 -1
- package/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.sol +1 -1
- package/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.sol +1 -1
- package/contracts/token/PrivateERC721/IERC721Errors.sol +1 -1
- package/contracts/token/PrivateERC721/PrivateERC721.sol +1 -1
- package/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage.sol +1 -1
- package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +1 -1
- package/contracts/token/points/CotiTokenPoints004.sol +43 -0
- package/contracts/utils/mpc/MpcCore.sol +610 -1
- package/contracts/utils/mpc/MpcInterface.sol +1 -1
- package/hardhat.config.ts +9 -15
- package/package.json +4 -4
- package/scripts/add-bridge-operators.cjs +87 -0
- package/scripts/deploy-coti-price-consumer-mainnet.cjs +49 -0
- package/scripts/deployCotiNodeRewards.ts +51 -0
- package/scripts/deployCotiTokenPoints004.ts +61 -0
- package/scripts/deployFixedRatioCoinDisperserUnlimitedWindow.ts +68 -0
- package/scripts/redeploy-private-and-bridges.cjs +201 -0
- package/scripts/set-bridge-limits-mainnet.cjs +177 -0
- package/scripts/verify-mainnet-private-bridges.cjs +289 -0
- package/scripts/verifyCotiTokenPoints004.ts +123 -0
- package/scripts/verifyFixedRatioCoinDisperserUnlimitedWindow.ts +112 -0
- package/sonar-project.properties +11 -0
- package/test/messaging/PrivateMessaging.test.ts +158 -0
- package/test/pod/privacy/PrivacyPortal.access.test.ts +756 -0
- package/test/pod/privacy/PrivacyPortal.recovery.test.ts +263 -0
- package/test/privacyBridge/UnifiedPrivacyBridges.test.cjs +1665 -0
- package/test/token/PrivateERC20/PrivacyBridge.fees.test.ts +162 -239
- package/test/utils/mpc/CheckedSignedArithmetic256.test.ts +163 -0
- package/test/utils/mpc/NegativeCases.test.ts +3 -3
- package/test/utils/mpc/Precompile.test.ts +6 -6
- package/typechain-types/@openzeppelin/contracts/access/AccessControl.ts +324 -0
- package/typechain-types/@openzeppelin/contracts/access/AccessControlEnumerable.ts +361 -0
- package/typechain-types/@openzeppelin/contracts/access/IAccessControl.ts +292 -0
- package/typechain-types/@openzeppelin/contracts/access/IAccessControlEnumerable.ts +329 -0
- package/typechain-types/@openzeppelin/contracts/access/extensions/AccessControlEnumerable.ts +375 -0
- package/typechain-types/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable.ts +329 -0
- package/typechain-types/@openzeppelin/contracts/access/extensions/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts/access/index.ts +6 -0
- package/typechain-types/@openzeppelin/contracts/index.ts +2 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/IERC1363.ts +412 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/IERC5267.ts +151 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/security/Pausable.ts +150 -0
- package/typechain-types/@openzeppelin/contracts/security/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/ERC20.ts +286 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/IERC20.ts +6 -6
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.ts +313 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.ts +356 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.ts +423 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.ts +286 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/index.ts +3 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/ERC721.ts +420 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.ts +420 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/index.ts +3 -0
- package/typechain-types/@openzeppelin/contracts/utils/Nonces.ts +85 -0
- package/typechain-types/@openzeppelin/contracts/utils/Pausable.ts +150 -0
- package/typechain-types/@openzeppelin/contracts/utils/ReentrancyGuard.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/ShortStrings.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/Strings.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/cryptography/ECDSA.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/cryptography/EIP712.ts +151 -0
- package/typechain-types/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts/utils/index.ts +9 -0
- package/typechain-types/@openzeppelin/contracts/utils/math/SafeCast.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/utils/math/index.ts +4 -0
- package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1.ts +735 -0
- package/typechain-types/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow.ts +734 -0
- package/typechain-types/contracts/disperse/coinByRatio/index.ts +2 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable.ts +95 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser.ts +22 -0
- package/typechain-types/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +1 -0
- package/typechain-types/contracts/index.ts +8 -0
- package/typechain-types/contracts/messaging/PrivateMessaging.ts +871 -0
- package/typechain-types/contracts/messaging/index.ts +4 -0
- package/typechain-types/contracts/mocks/index.ts +4 -0
- package/typechain-types/contracts/mocks/messaging/PrivateMessagingHarness.ts +951 -0
- package/typechain-types/contracts/mocks/messaging/index.ts +4 -0
- package/typechain-types/contracts/mocks/oracle/CotiPriceConsumerMock.ts +163 -0
- package/typechain-types/contracts/mocks/oracle/index.ts +4 -0
- package/typechain-types/contracts/mocks/token/ERC20DecimalsMock.ts +305 -0
- package/typechain-types/contracts/mocks/token/ERC20Mock.ts +324 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock.ts +108 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock.ts +1906 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock.ts +1296 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock.ts +1270 -0
- package/typechain-types/contracts/mocks/{utils/mpc/Bitwise128BitTestsContract.ts → token/PrivateERC20/PrivateERC20GtCallerMock.ts} +47 -67
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +757 -25
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted.ts +102 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock.ts +154 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock.ts +155 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock.ts +107 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock.ts +100 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/index.ts +10 -0
- package/typechain-types/contracts/mocks/token/index.ts +2 -0
- package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.ts +6 -6
- package/typechain-types/contracts/node/CotiNodeRewards.ts +566 -0
- package/typechain-types/contracts/node/SoulboundNodeNFT.sol/IERC5192.ts +123 -0
- package/typechain-types/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT.ts +975 -0
- package/typechain-types/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
- package/typechain-types/contracts/node/index.ts +6 -0
- package/typechain-types/contracts/oracle/CotiPriceConsumer.ts +256 -0
- package/typechain-types/contracts/oracle/ICotiPriceConsumer.ts +119 -0
- package/typechain-types/contracts/oracle/IStdReference.ts +136 -0
- package/typechain-types/contracts/oracle/index.ts +6 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridge.ts +1642 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeCotiNative.ts +1884 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals.ts +84 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20.ts +1906 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDCe.ts +1906 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeUSDT.ts +1906 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeWADA.ts +1906 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeWBTC.ts +1906 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgeWETH.ts +1906 -0
- package/typechain-types/contracts/privacyBridge/PrivacyBridgegCoti.ts +1906 -0
- package/typechain-types/contracts/privacyBridge/index.ts +13 -0
- package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +439 -19
- package/typechain-types/contracts/token/PrivateERC20/ITokenReceiver.ts +100 -0
- package/typechain-types/contracts/token/PrivateERC20/ITokenReceiverEncrypted.ts +99 -0
- package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +763 -15
- package/typechain-types/contracts/token/PrivateERC20/index.ts +4 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTI.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateTetherUSD.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedADA.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/PrivateWrappedEther.ts +1270 -0
- package/typechain-types/contracts/token/PrivateERC20/tokens/index.ts +10 -0
- package/typechain-types/contracts/token/index.ts +2 -0
- package/typechain-types/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004.ts +826 -0
- package/typechain-types/contracts/token/points/CotiTokenPoints004.ts +826 -0
- package/typechain-types/contracts/token/points/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/AccessControlEnumerable__factory.ts +276 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/AccessControl__factory.ts +250 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControlEnumerable__factory.ts +244 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/IAccessControl__factory.ts +218 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/Ownable__factory.ts +22 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/extensions/AccessControlEnumerable__factory.ts +316 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/extensions/IAccessControlEnumerable__factory.ts +265 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/extensions/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/access/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/index.ts +1 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1363__factory.ts +393 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC5267__factory.ts +71 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors__factory.ts +127 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors__factory.ts +111 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors__factory.ts +128 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +3 -0
- package/typechain-types/factories/@openzeppelin/contracts/security/Pausable__factory.ts +61 -0
- package/typechain-types/factories/@openzeppelin/contracts/security/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/ERC20__factory.ts +330 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/IERC20__factory.ts +3 -3
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable__factory.ts +364 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable__factory.ts +382 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit__factory.ts +540 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata__factory.ts +247 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/extensions/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/index.ts +2 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/SafeERC20__factory.ts +96 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC20/utils/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/ERC721__factory.ts +455 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata__factory.ts +355 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/extensions/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/index.ts +2 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/Nonces__factory.ts +57 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/Pausable__factory.ts +71 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/ReentrancyGuard__factory.ts +30 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/ShortStrings__factory.ts +83 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.ts +90 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.ts +91 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/EIP712__factory.ts +87 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +7 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.ts +118 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/math/index.ts +4 -0
- package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserLeftoverS1__factory.ts +802 -0
- package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperserUnlimitedWindow__factory.ts +749 -0
- package/typechain-types/factories/contracts/disperse/coinByRatio/FixedRatioCoinDisperser__factory.ts +12 -1
- package/typechain-types/factories/contracts/disperse/coinByRatio/index.ts +2 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/IOwnable__factory.ts +35 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/MintDisperser__factory.ts +41 -1
- package/typechain-types/factories/contracts/disperse/disperseToken/MintDisperser.sol/index.ts +1 -0
- package/typechain-types/factories/contracts/disperse/disperseToken/TokenDisperser__factory.ts +12 -1
- package/typechain-types/factories/contracts/index.ts +4 -0
- package/typechain-types/factories/contracts/messaging/PrivateMessaging__factory.ts +1035 -0
- package/typechain-types/factories/contracts/messaging/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/index.ts +2 -0
- package/typechain-types/factories/contracts/mocks/messaging/PrivateMessagingHarness__factory.ts +1161 -0
- package/typechain-types/factories/contracts/mocks/messaging/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/oracle/CotiPriceConsumerMock__factory.ts +159 -0
- package/typechain-types/factories/contracts/mocks/oracle/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/token/ERC20DecimalsMock__factory.ts +432 -0
- package/typechain-types/factories/contracts/mocks/token/ERC20Mock__factory.ts +430 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/EncryptedTokenReceiverMock__factory.ts +125 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivacyBridgeERC20Mock__factory.ts +1885 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20AuditorSupplyMock__factory.ts +1540 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20CappedMock__factory.ts +1492 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20GtCallerMock__factory.ts +165 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +794 -52
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/IPrivateERC20TransferAndCallEncrypted__factory.ts +54 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/PrivateERC20ReentrantReceiverMock__factory.ts +159 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20ReentrantReceiverMock.sol/index.ts +5 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicReentrantTokenReceiverMock__factory.ts +164 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverBoolMock__factory.ts +130 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PublicTokenReceiverMock__factory.ts +102 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/index.ts +9 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/token/index.ts +2 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic128WithOverflowBitTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmetic256WithOverflowBitTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMax256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalImplementation__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinimalProxy__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperations128TestContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/MpcOperationsTestContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Mux128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Mux256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/OnBoard256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV1__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyImplementationV2__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/PrivacyProxy__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Random128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Random256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Shift128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Shift256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/Transfer256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext128TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertext256TestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/utils/mpc/ValidateCiphertextTestsContract__factory.ts +1 -1
- package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +4 -22
- package/typechain-types/factories/contracts/node/CotiNodeRewards__factory.ts +576 -0
- package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/IERC5192__factory.ts +54 -0
- package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/SoulboundNodeNFT__factory.ts +1072 -0
- package/typechain-types/factories/contracts/node/SoulboundNodeNFT.sol/index.ts +5 -0
- package/typechain-types/factories/contracts/node/index.ts +5 -0
- package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
- package/typechain-types/factories/contracts/oracle/CotiPriceConsumer__factory.ts +295 -0
- package/typechain-types/factories/contracts/oracle/ICotiPriceConsumer__factory.ts +73 -0
- package/typechain-types/factories/contracts/oracle/IStdReference__factory.ts +107 -0
- package/typechain-types/factories/contracts/oracle/index.ts +6 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeCotiNative__factory.ts +1753 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/IHasDecimals__factory.ts +38 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/PrivacyBridgeERC20__factory.ts +1766 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeERC20.sol/index.ts +5 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDCe__factory.ts +1870 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeUSDT__factory.ts +1870 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWADA__factory.ts +1870 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWBTC__factory.ts +1870 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgeWETH__factory.ts +1870 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridge__factory.ts +1444 -0
- package/typechain-types/factories/contracts/privacyBridge/PrivacyBridgegCoti__factory.ts +1870 -0
- package/typechain-types/factories/contracts/privacyBridge/index.ts +12 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +481 -35
- package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiverEncrypted__factory.ts +53 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/ITokenReceiver__factory.ts +54 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +812 -52
- package/typechain-types/factories/contracts/token/PrivateERC20/index.ts +3 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateBridgedUSDC__factory.ts +1471 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken__factory.ts +1477 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateCOTI__factory.ts +1468 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateTetherUSD__factory.ts +1471 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedADA__factory.ts +1471 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedBTC__factory.ts +1471 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/PrivateWrappedEther__factory.ts +1477 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/tokens/index.ts +10 -0
- package/typechain-types/factories/contracts/token/index.ts +1 -0
- package/typechain-types/factories/contracts/token/points/CotiTokenPoints004.sol/COTITokenPoints004__factory.ts +992 -0
- package/typechain-types/factories/contracts/token/points/CotiTokenPoints004__factory.ts +992 -0
- package/typechain-types/factories/contracts/token/points/index.ts +4 -0
- package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
- package/typechain-types/hardhat.d.ts +1414 -118
- package/typechain-types/index.ts +138 -2
- package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +0 -408
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract.ts +0 -341
- package/typechain-types/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract.ts +0 -347
- package/typechain-types/contracts/mocks/utils/mpc/Bitwise256BitTestsContract.ts +0 -186
- package/typechain-types/contracts/mocks/utils/mpc/Comparison128BitTestsContract.ts +0 -260
- package/typechain-types/contracts/mocks/utils/mpc/Comparison256BitTestsContract.ts +0 -260
- package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract.ts +0 -302
- package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract.ts +0 -322
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic128BitTestsContract__factory.ts +0 -349
- package/typechain-types/factories/contracts/mocks/utils/mpc/Arithmetic256BitTestsContract__factory.ts +0 -364
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise128BitTestsContract__factory.ts +0 -182
- package/typechain-types/factories/contracts/mocks/utils/mpc/Bitwise256BitTestsContract__factory.ts +0 -182
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison128BitTestsContract__factory.ts +0 -255
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison256BitTestsContract__factory.ts +0 -255
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous128BitTestsContract__factory.ts +0 -332
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous256BitTestsContract__factory.ts +0 -380
|
@@ -1,201 +1,217 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity ^0.8.
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
4
|
import "./PrivacyBridge.sol";
|
|
5
|
+
import "@openzeppelin/contracts/utils/math/Math.sol";
|
|
5
6
|
import "../token/PrivateERC20/tokens/PrivateCOTI.sol";
|
|
6
|
-
import "../token/PrivateERC20/ITokenReceiver.sol";
|
|
7
|
-
import "../utils/mpc/MpcCore.sol";
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* @title PrivacyBridgeCotiNative
|
|
11
10
|
* @notice Bridge contract for converting between native COTI and privacy-preserving COTI.p tokens
|
|
11
|
+
* @dev Withdraw pulls private balance via `IPrivateERC20(address(privateCoti)).transferFrom` so the call matches
|
|
12
|
+
* the canonical {IPrivateERC20} surface (`contracts/token/PrivateERC20/IPrivateERC20.sol`) while `privateCoti`
|
|
13
|
+
* remains the concrete {PrivateCOTI} type for mint/burn. Deploy `_privateCoti` as that implementation (or a
|
|
14
|
+
* fully ABI-compatible successor); do not point at arbitrary ERC-20s.
|
|
15
|
+
*
|
|
16
|
+
* **Two native deposit paths (document for wallets / indexers):**
|
|
17
|
+
* - {deposit(uint256,uint256)}: user passes `cotiOracleTimestamp` and `tokenOracleTimestamp` (same value
|
|
18
|
+
* twice for `"COTI"`); {_validateOracleTimestamps} enforces they match the on-chain Band row—same quote row
|
|
19
|
+
* as {estimateDepositFee}. Use this when you need binding between off-chain estimate and execution.
|
|
20
|
+
* - {receive} / plain ETH send: uses {_directDeposit}; fee still uses {_computeCotiFee} with staleness
|
|
21
|
+
* ({_requireOracleFreshness}) but **does not** require equality to estimate timestamps—no prior estimate row
|
|
22
|
+
* is pinned. Prefer explicit {deposit} for predictable “what I quoted is what executes.”
|
|
23
|
+
*
|
|
24
|
+
* **Unsolicited native:** balance can increase via `selfdestruct` or other forced transfers without invoking
|
|
25
|
+
* {receive}; that ETH does not mint private tokens and does not update {PrivacyBridge.totalUserLiability}.
|
|
12
26
|
*/
|
|
13
|
-
contract PrivacyBridgeCotiNative is PrivacyBridge
|
|
27
|
+
contract PrivacyBridgeCotiNative is PrivacyBridge {
|
|
14
28
|
PrivateCOTI public privateCoti;
|
|
15
29
|
|
|
16
|
-
|
|
30
|
+
event NativeRescued(address indexed to, uint256 amount);
|
|
17
31
|
|
|
18
32
|
// Scaling factor removed (using native 18 decimals due to uint256 upgrade)
|
|
19
33
|
|
|
20
34
|
/**
|
|
21
35
|
* @notice Initialize the Native Bridge
|
|
22
36
|
* @param _privateCoti Address of the PrivateCoti token contract
|
|
37
|
+
* @param _priceOracle Non-zero price oracle (see {PrivacyBridge}'s constructor)
|
|
23
38
|
*/
|
|
24
|
-
constructor(address _privateCoti) PrivacyBridge() {
|
|
39
|
+
constructor(address _privateCoti, address _feeRecipient, address _rescueRecipient, address _priceOracle) PrivacyBridge(_feeRecipient, _rescueRecipient, _priceOracle) {
|
|
25
40
|
if (_privateCoti == address(0)) revert InvalidAddress();
|
|
26
41
|
privateCoti = PrivateCOTI(_privateCoti);
|
|
27
42
|
}
|
|
28
43
|
|
|
29
44
|
/**
|
|
30
|
-
* @
|
|
31
|
-
*
|
|
45
|
+
* @dev Native COTI fee math + one {getPriceWithMeta("COTI")} read. Used by {_computeCotiFee} and
|
|
46
|
+
* {estimateDepositFee}/{estimateWithdrawFee}. Each {Math.mulDiv} truncates toward zero (see
|
|
47
|
+
* {PrivacyBridge.FEE_DIVISOR} NatSpec). Extreme `cotiAmount`×`cotiUsdRate` values can make {Math.mulDiv}
|
|
48
|
+
* revert—keep amounts within configured max deposit/withdraw limits.
|
|
49
|
+
* @param cotiAmount Amount in COTI wei the fee is computed for
|
|
50
|
+
* @param fixedFee Minimum fee floor in COTI wei
|
|
51
|
+
* @param percentageBps Percentage parameter scaled by {PrivacyBridge.FEE_DIVISOR}
|
|
52
|
+
* @param maxFee Maximum fee cap in COTI wei
|
|
53
|
+
* @return fee Computed fee in COTI wei
|
|
54
|
+
* @return cotiLastUpdated COTI oracle row `lastUpdated`
|
|
55
|
+
* @return blockTimestamp Third field from the COTI oracle row
|
|
32
56
|
*/
|
|
33
|
-
function
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
uint256
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (isEncrypted) {
|
|
52
|
-
// Verify parity between msg.value and encrypted amount
|
|
53
|
-
gtUint256 gtAmount = MpcCore.validateCiphertext(encryptedAmount);
|
|
54
|
-
gtBool amountMatch = MpcCore.eq(
|
|
55
|
-
gtAmount,
|
|
56
|
-
MpcCore.setPublic256(amountAfterFee)
|
|
57
|
-
);
|
|
58
|
-
require(MpcCore.decrypt(amountMatch), "Encrypted amount mismatch");
|
|
59
|
-
|
|
60
|
-
privateCoti.mintGt(sender, gtAmount);
|
|
61
|
-
} else {
|
|
62
|
-
privateCoti.mint(sender, amountAfterFee);
|
|
63
|
-
}
|
|
57
|
+
function _computeCotiFeeAndMeta(
|
|
58
|
+
uint256 cotiAmount,
|
|
59
|
+
uint256 fixedFee,
|
|
60
|
+
uint256 percentageBps,
|
|
61
|
+
uint256 maxFee
|
|
62
|
+
) internal view returns (uint256 fee, uint256 cotiLastUpdated, uint256 blockTimestamp) {
|
|
63
|
+
_requirePriceOracle();
|
|
64
|
+
(uint256 cotiUsdRate, uint256 cotiLU, uint256 cotiBts) = ICotiPriceConsumer(priceOracle).getPriceWithMeta("COTI");
|
|
65
|
+
_requirePositiveOracleRate(cotiUsdRate);
|
|
66
|
+
_requireOracleFreshness(cotiLU);
|
|
67
|
+
uint256 txValueUsd = Math.mulDiv(cotiAmount, cotiUsdRate, 1e18);
|
|
68
|
+
uint256 percentageFeeUsd = Math.mulDiv(txValueUsd, percentageBps, FEE_DIVISOR);
|
|
69
|
+
uint256 percentageFeeCoti = Math.mulDiv(percentageFeeUsd, 1e18, cotiUsdRate);
|
|
70
|
+
fee = _calculateDynamicFee(percentageFeeCoti, fixedFee, maxFee);
|
|
71
|
+
cotiLastUpdated = cotiLU;
|
|
72
|
+
blockTimestamp = cotiBts;
|
|
73
|
+
}
|
|
64
74
|
|
|
65
|
-
|
|
66
|
-
|
|
75
|
+
function _computeCotiFee(
|
|
76
|
+
uint256 cotiAmount,
|
|
77
|
+
uint256 fixedFee,
|
|
78
|
+
uint256 percentageBps,
|
|
79
|
+
uint256 maxFee
|
|
80
|
+
) internal view returns (uint256) {
|
|
81
|
+
(uint256 f,,) = _computeCotiFeeAndMeta(cotiAmount, fixedFee, percentageBps, maxFee);
|
|
82
|
+
return f;
|
|
67
83
|
}
|
|
68
84
|
|
|
69
85
|
/**
|
|
70
|
-
* @notice
|
|
71
|
-
* @dev
|
|
86
|
+
* @notice Simulate fee calculation for native COTI with arbitrary parameters.
|
|
87
|
+
* @dev Public view — allows frontends/operators to preview fees with custom fee params.
|
|
88
|
+
* Reads live COTI oracle price but accepts custom fee configuration.
|
|
89
|
+
* @param cotiAmount The COTI amount to compute fee for (wei; very large values can revert in fee math)
|
|
90
|
+
* @param fixedFee The minimum fee floor in COTI wei
|
|
91
|
+
* @param percentageBps The percentage in basis points (relative to {FEE_DIVISOR})
|
|
92
|
+
* @param maxFee The maximum fee cap in COTI wei
|
|
93
|
+
* @return The computed fee in COTI wei
|
|
72
94
|
*/
|
|
73
|
-
function
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
95
|
+
function computeCotiFee(
|
|
96
|
+
uint256 cotiAmount,
|
|
97
|
+
uint256 fixedFee,
|
|
98
|
+
uint256 percentageBps,
|
|
99
|
+
uint256 maxFee
|
|
100
|
+
) external view returns (uint256) {
|
|
101
|
+
return _computeCotiFee(cotiAmount, fixedFee, percentageBps, maxFee);
|
|
79
102
|
}
|
|
80
103
|
|
|
81
104
|
/**
|
|
82
|
-
* @notice
|
|
83
|
-
* @param
|
|
105
|
+
* @notice Estimate the deposit fee in COTI for a given COTI amount
|
|
106
|
+
* @param cotiAmount The amount of native COTI to deposit (wei; very large values can revert in fee math)
|
|
107
|
+
* @return fee The estimated fee in COTI wei
|
|
108
|
+
* @return cotiLastUpdated COTI oracle data last update timestamp
|
|
109
|
+
* @return blockTimestamp Third field from the COTI oracle row (same as pre-refactor behavior)
|
|
110
|
+
* @dev Use `cotiLastUpdated` for **both** `cotiOracleTimestamp` and `tokenOracleTimestamp` on {deposit}/{withdraw}
|
|
111
|
+
* (native bridge validates `"COTI"` twice). See {PrivacyBridge._validateOracleTimestamps}.
|
|
84
112
|
*/
|
|
85
|
-
function
|
|
86
|
-
|
|
113
|
+
function estimateDepositFee(uint256 cotiAmount) external view returns (uint256 fee, uint256 cotiLastUpdated, uint256 blockTimestamp) {
|
|
114
|
+
(fee, cotiLastUpdated, blockTimestamp) = _computeCotiFeeAndMeta(
|
|
115
|
+
cotiAmount,
|
|
116
|
+
depositFixedFee,
|
|
117
|
+
depositPercentageBps,
|
|
118
|
+
depositMaxFee
|
|
119
|
+
);
|
|
87
120
|
}
|
|
88
121
|
|
|
89
122
|
/**
|
|
90
|
-
* @notice
|
|
91
|
-
* @param amount
|
|
92
|
-
* @
|
|
123
|
+
* @notice Estimate the withdrawal fee in COTI for a given COTI amount
|
|
124
|
+
* @param cotiAmount The amount of native COTI to withdraw (wei; very large values can revert in fee math)
|
|
125
|
+
* @return fee The estimated fee in COTI wei
|
|
126
|
+
* @return cotiLastUpdated COTI oracle data last update timestamp
|
|
127
|
+
* @return blockTimestamp Third field from the COTI oracle row (same as pre-refactor behavior)
|
|
128
|
+
* @dev Same timestamp usage as {estimateDepositFee} for the subsequent {withdraw}.
|
|
93
129
|
*/
|
|
130
|
+
function estimateWithdrawFee(uint256 cotiAmount) external view returns (uint256 fee, uint256 cotiLastUpdated, uint256 blockTimestamp) {
|
|
131
|
+
(fee, cotiLastUpdated, blockTimestamp) = _computeCotiFeeAndMeta(
|
|
132
|
+
cotiAmount,
|
|
133
|
+
withdrawFixedFee,
|
|
134
|
+
withdrawPercentageBps,
|
|
135
|
+
withdrawMaxFee
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
94
139
|
/**
|
|
95
|
-
* @notice
|
|
96
|
-
* @
|
|
97
|
-
* @param from Address of the sender
|
|
98
|
-
* @param amount Amount of tokens received
|
|
140
|
+
* @notice Internal function to handle deposits
|
|
141
|
+
* @param sender Address of the depositor
|
|
99
142
|
*/
|
|
100
|
-
function
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
bytes calldata
|
|
104
|
-
) external nonReentrant whenNotPaused returns (bool) {
|
|
105
|
-
if (msg.sender != address(privateCoti)) revert InvalidAddress();
|
|
106
|
-
if (amount == 0) revert AmountZero();
|
|
107
|
-
|
|
108
|
-
_checkWithdrawLimits(amount);
|
|
143
|
+
function _deposit(address sender, uint256 cotiOracleTimestamp, uint256 tokenOracleTimestamp) internal {
|
|
144
|
+
if (!isDepositEnabled) revert DepositDisabled();
|
|
145
|
+
if (msg.value == 0) revert AmountZero();
|
|
109
146
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
uint256 publicAmount = amount - feeAmount;
|
|
113
|
-
accumulatedFees += feeAmount;
|
|
147
|
+
_checkDepositLimits(msg.value);
|
|
148
|
+
_validateOracleTimestamps(cotiOracleTimestamp, tokenOracleTimestamp, "COTI");
|
|
114
149
|
|
|
115
|
-
|
|
116
|
-
|
|
150
|
+
// Compute dynamic fee in COTI
|
|
151
|
+
uint256 fee = _computeCotiFee(msg.value, depositFixedFee, depositPercentageBps, depositMaxFee);
|
|
152
|
+
uint256 netAmount = msg.value - fee;
|
|
153
|
+
if (netAmount == 0) revert AmountZero();
|
|
117
154
|
|
|
118
|
-
|
|
119
|
-
// We just need to burn them.
|
|
120
|
-
privateCoti.burn(amount);
|
|
155
|
+
accumulatedCotiFees += fee;
|
|
121
156
|
|
|
122
|
-
|
|
123
|
-
|
|
157
|
+
totalUserLiability += netAmount;
|
|
158
|
+
privateCoti.mint(sender, netAmount);
|
|
124
159
|
|
|
125
|
-
// Emit gross
|
|
126
|
-
emit
|
|
127
|
-
return true;
|
|
160
|
+
// Emit gross deposit amount and net private tokens minted
|
|
161
|
+
emit Deposit(sender, msg.value, netAmount);
|
|
128
162
|
}
|
|
129
163
|
|
|
130
164
|
/**
|
|
131
|
-
* @notice
|
|
132
|
-
* @param
|
|
133
|
-
* @
|
|
165
|
+
* @notice Deposit native COTI to receive private COTI (COTI.p)
|
|
166
|
+
* @param cotiOracleTimestamp COTI `lastUpdated` from the latest `estimateDepositFee` (must still equal on-chain at execution).
|
|
167
|
+
* @param tokenOracleTimestamp Same value as `cotiOracleTimestamp` for this bridge (both checks use `"COTI"`).
|
|
168
|
+
* @dev User sends native COTI with the transaction. Oracle races: {OracleTimestampMismatch} — re-estimate; see {_validateOracleTimestamps}.
|
|
134
169
|
*/
|
|
135
|
-
function
|
|
136
|
-
|
|
137
|
-
msg.sender,
|
|
138
|
-
amount,
|
|
139
|
-
false,
|
|
140
|
-
itUint256(ctUint256(ctUint128.wrap(0), ctUint128.wrap(0)), "")
|
|
141
|
-
);
|
|
170
|
+
function deposit(uint256 cotiOracleTimestamp, uint256 tokenOracleTimestamp) external payable nonReentrant whenNotPaused notBlacklisted {
|
|
171
|
+
_deposit(msg.sender, cotiOracleTimestamp, tokenOracleTimestamp);
|
|
142
172
|
}
|
|
143
173
|
|
|
144
174
|
/**
|
|
145
|
-
* @notice Withdraw native COTI by burning private COTI
|
|
146
|
-
* @param amount
|
|
147
|
-
* @param
|
|
175
|
+
* @notice Withdraw native COTI by burning private COTI
|
|
176
|
+
* @param amount Amount of private COTI to burn
|
|
177
|
+
* @param cotiOracleTimestamp COTI `lastUpdated` from the latest `estimateWithdrawFee` (must still equal on-chain at execution).
|
|
178
|
+
* @param tokenOracleTimestamp Same value as `cotiOracleTimestamp` for this bridge.
|
|
179
|
+
* @dev User must have approved the bridge to spend their private tokens. Oracle rules: {_validateOracleTimestamps}.
|
|
148
180
|
*/
|
|
149
|
-
function withdraw(
|
|
150
|
-
|
|
151
|
-
itUint256 calldata encryptedAmount
|
|
152
|
-
) external nonReentrant whenNotPaused {
|
|
153
|
-
_withdraw(msg.sender, amount, true, encryptedAmount);
|
|
181
|
+
function withdraw(uint256 amount, uint256 cotiOracleTimestamp, uint256 tokenOracleTimestamp) external nonReentrant whenNotPaused notBlacklisted {
|
|
182
|
+
_withdraw(msg.sender, amount, cotiOracleTimestamp, tokenOracleTimestamp);
|
|
154
183
|
}
|
|
155
184
|
|
|
156
185
|
function _withdraw(
|
|
157
186
|
address to,
|
|
158
187
|
uint256 amount,
|
|
159
|
-
|
|
160
|
-
|
|
188
|
+
uint256 cotiOracleTimestamp,
|
|
189
|
+
uint256 tokenOracleTimestamp
|
|
161
190
|
) internal {
|
|
162
191
|
if (amount == 0) revert AmountZero();
|
|
163
192
|
_checkWithdrawLimits(amount);
|
|
193
|
+
_validateOracleTimestamps(cotiOracleTimestamp, tokenOracleTimestamp, "COTI");
|
|
164
194
|
|
|
165
|
-
//
|
|
166
|
-
uint256
|
|
167
|
-
uint256 publicAmount = amount -
|
|
168
|
-
|
|
195
|
+
// Compute dynamic withdrawal fee in COTI
|
|
196
|
+
uint256 fee = _computeCotiFee(amount, withdrawFixedFee, withdrawPercentageBps, withdrawMaxFee);
|
|
197
|
+
uint256 publicAmount = amount - fee;
|
|
198
|
+
if (publicAmount == 0) revert AmountZero();
|
|
199
|
+
|
|
200
|
+
accumulatedCotiFees += fee;
|
|
169
201
|
|
|
170
202
|
if (address(this).balance < publicAmount)
|
|
171
203
|
revert InsufficientEthBalance();
|
|
172
204
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
)
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
// validateCiphertext with a different contract context (signature mismatch)
|
|
184
|
-
IPrivateERC20(address(privateCoti)).transferFromGT(
|
|
185
|
-
msg.sender,
|
|
186
|
-
address(this),
|
|
187
|
-
gtAmount
|
|
188
|
-
);
|
|
189
|
-
privateCoti.burnGt(gtAmount);
|
|
190
|
-
} else {
|
|
191
|
-
// Standard withdrawal (public amount)
|
|
192
|
-
IPrivateERC20(address(privateCoti)).transferFrom(
|
|
193
|
-
msg.sender,
|
|
194
|
-
address(this),
|
|
195
|
-
amount
|
|
196
|
-
);
|
|
197
|
-
privateCoti.burn(amount);
|
|
198
|
-
}
|
|
205
|
+
// Extinguish liability for the full private amount burned (fee stays with bridge as native revenue).
|
|
206
|
+
totalUserLiability -= amount;
|
|
207
|
+
|
|
208
|
+
// Pull and burn private tokens
|
|
209
|
+
IPrivateERC20(address(privateCoti)).transferFrom(
|
|
210
|
+
msg.sender,
|
|
211
|
+
address(this),
|
|
212
|
+
amount
|
|
213
|
+
);
|
|
214
|
+
privateCoti.burn(amount);
|
|
199
215
|
|
|
200
216
|
(bool success, ) = to.call{value: publicAmount}("");
|
|
201
217
|
if (!success) revert EthTransferFailed();
|
|
@@ -204,14 +220,38 @@ contract PrivacyBridgeCotiNative is PrivacyBridge, ITokenReceiver {
|
|
|
204
220
|
}
|
|
205
221
|
|
|
206
222
|
/**
|
|
207
|
-
* @notice
|
|
223
|
+
* @notice Internal deposit without binding to a prior estimate’s oracle `lastUpdated` snapshot.
|
|
224
|
+
* @dev Used by {receive}. Fee uses {_computeCotiFee}, which still enforces: oracle configured
|
|
225
|
+
* ({PriceOracleNotSet}), non-zero COTI/USD rate ({InvalidOraclePrice}), and max age of
|
|
226
|
+
* `lastUpdated` when {PrivacyBridge.maxOracleAge} is set ({OraclePriceStale} /
|
|
227
|
+
* {OracleLastUpdatedInFuture}). What plain sends do **not** do is equality to timestamps
|
|
228
|
+
* passed into {deposit} from an off-chain estimate—users who need that binding should call {deposit}.
|
|
208
229
|
*/
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
230
|
+
function _directDeposit(address sender) internal {
|
|
231
|
+
if (!isDepositEnabled) revert DepositDisabled();
|
|
232
|
+
if (msg.value == 0) revert AmountZero();
|
|
233
|
+
|
|
234
|
+
_checkDepositLimits(msg.value);
|
|
235
|
+
|
|
236
|
+
uint256 fee = _computeCotiFee(msg.value, depositFixedFee, depositPercentageBps, depositMaxFee);
|
|
237
|
+
uint256 netAmount = msg.value - fee;
|
|
238
|
+
if (netAmount == 0) revert AmountZero();
|
|
239
|
+
|
|
240
|
+
accumulatedCotiFees += fee;
|
|
241
|
+
|
|
242
|
+
totalUserLiability += netAmount;
|
|
243
|
+
privateCoti.mint(sender, netAmount);
|
|
244
|
+
|
|
245
|
+
emit Deposit(sender, msg.value, netAmount);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* @notice Fallback for plain native transfers: same fee path as {_directDeposit}.
|
|
250
|
+
* @dev See {_directDeposit}: zero/stale oracle rates are rejected via {_computeCotiFee}; use {deposit}
|
|
251
|
+
* when you must match `lastUpdated` from {estimateDepositFee} to the on-chain row (see {_validateOracleTimestamps}).
|
|
252
|
+
*/
|
|
253
|
+
receive() external payable nonReentrant whenNotPaused notBlacklisted {
|
|
254
|
+
_directDeposit(msg.sender);
|
|
215
255
|
}
|
|
216
256
|
|
|
217
257
|
/**
|
|
@@ -223,46 +263,54 @@ contract PrivacyBridgeCotiNative is PrivacyBridge, ITokenReceiver {
|
|
|
223
263
|
}
|
|
224
264
|
|
|
225
265
|
/**
|
|
226
|
-
* @notice Withdraw accumulated fees (Native implementation)
|
|
227
|
-
* @param to Address to send fees to
|
|
266
|
+
* @notice Withdraw accumulated fees to feeRecipient (Native implementation)
|
|
228
267
|
* @param amount Amount of fees to withdraw
|
|
229
268
|
* @dev Only the owner can call this function
|
|
230
269
|
*/
|
|
231
270
|
function withdrawFees(
|
|
232
|
-
address to,
|
|
233
271
|
uint256 amount
|
|
234
|
-
) external
|
|
235
|
-
if (
|
|
272
|
+
) external onlyOwner nonReentrant {
|
|
273
|
+
if (feeRecipient == address(0)) revert FeeRecipientNotSet();
|
|
236
274
|
if (amount == 0) revert AmountZero();
|
|
237
|
-
if (amount >
|
|
275
|
+
if (amount > accumulatedCotiFees) revert InsufficientAccumulatedFees();
|
|
238
276
|
if (amount > address(this).balance) revert InsufficientEthBalance();
|
|
239
277
|
|
|
240
|
-
|
|
278
|
+
accumulatedCotiFees -= amount;
|
|
241
279
|
|
|
242
|
-
// Transfer native COTI tokens
|
|
243
|
-
(bool success, ) =
|
|
280
|
+
// Transfer native COTI tokens to feeRecipient
|
|
281
|
+
(bool success, ) = feeRecipient.call{value: amount}("");
|
|
244
282
|
if (!success) revert EthTransferFailed();
|
|
245
283
|
|
|
246
|
-
emit FeesWithdrawn(
|
|
284
|
+
emit FeesWithdrawn(feeRecipient, amount);
|
|
247
285
|
}
|
|
248
286
|
|
|
249
287
|
/**
|
|
250
|
-
* @
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
288
|
+
* @notice Move native COTI from this bridge to {rescueRecipient} while the bridge is paused.
|
|
289
|
+
* @dev Emergency / migration path: sends up to `amount` (typically the full {address(this).balance}) to
|
|
290
|
+
* {rescueRecipient}. That balance can include all user-deposited native liquidity and unswept fee
|
|
291
|
+
* float—there is no on-chain carve-out that keeps “user principal” behind. Intended for bug recovery
|
|
292
|
+
* or handover to a new bridge; a malicious or compromised owner who has paused can drain TVL to
|
|
293
|
+
* {rescueRecipient} in one or more calls. See {PrivacyBridge} contract-level @dev (3) for governance
|
|
294
|
+
* mitigations (multisig, timelock, monitoring). After a partial rescue, {accumulatedCotiFees} is capped
|
|
295
|
+
* to the remaining balance so fee accounting cannot exceed what is still on the contract. {totalUserLiability}
|
|
296
|
+
* is **not** adjusted: rescue only moves native to {rescueRecipient}; it does not burn private tokens or
|
|
297
|
+
* reduce user obligations on this contract, so the counter may exceed {address(this).balance} until a
|
|
298
|
+
* separate migration makes users whole.
|
|
299
|
+
* @param amount Amount of native currency to send (often the full balance for migration).
|
|
257
300
|
*/
|
|
258
|
-
function rescueNative(
|
|
259
|
-
if (to == address(0)) revert InvalidAddress();
|
|
301
|
+
function rescueNative(uint256 amount) external onlyOwner nonReentrant whenPaused {
|
|
260
302
|
if (amount == 0) revert AmountZero();
|
|
261
303
|
if (amount > address(this).balance) revert InsufficientEthBalance();
|
|
262
|
-
if (address(this).balance < accumulatedFees) revert InsufficientEthBalance();
|
|
263
|
-
if (amount > address(this).balance - accumulatedFees) revert ExceedsRescueableAmount();
|
|
264
304
|
|
|
265
|
-
(bool success, ) =
|
|
305
|
+
(bool success, ) = rescueRecipient.call{value: amount}("");
|
|
266
306
|
if (!success) revert EthTransferFailed();
|
|
307
|
+
|
|
308
|
+
uint256 remaining = address(this).balance;
|
|
309
|
+
if (accumulatedCotiFees > remaining) {
|
|
310
|
+
accumulatedCotiFees = remaining;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
emit NativeRescued(rescueRecipient, amount);
|
|
267
314
|
}
|
|
315
|
+
|
|
268
316
|
}
|