@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,18 +1,30 @@
|
|
|
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 "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
|
6
7
|
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|
7
8
|
import "../token/PrivateERC20/IPrivateERC20.sol";
|
|
8
|
-
|
|
9
|
+
|
|
10
|
+
/// @dev Minimal interface to read decimals from tokens without modifying IPrivateERC20
|
|
11
|
+
interface IHasDecimals {
|
|
12
|
+
function decimals() external view returns (uint8);
|
|
13
|
+
}
|
|
9
14
|
|
|
10
15
|
/**
|
|
11
16
|
* @dev Abstract base contract for ERC20 Token Privacy Bridges
|
|
12
17
|
* @dev Handles the logic for bridging ERC20 tokens to their private counterparts.
|
|
13
|
-
* @dev The public ERC20
|
|
18
|
+
* @dev The public ERC20 must match standard transfer semantics: {safeTransferFrom} of `amount` must
|
|
19
|
+
* increase the bridge balance by exactly `amount` ({UnexpectedTransferBalance} otherwise). This
|
|
20
|
+
* rejects common fee-on-transfer / deflationary patterns. Rebasing, blacklist hooks, and other
|
|
21
|
+
* non-standard behavior remain unsupported—deployment must still use a suitable asset.
|
|
22
|
+
* @dev **Private token:** The constructor stores `_privateToken` as {IPrivateERC20} from
|
|
23
|
+
* `contracts/token/PrivateERC20/IPrivateERC20.sol` (same `pragma` family as this contract). Integrators should
|
|
24
|
+
* bind ABIs/codegen to that canonical interface in this repo; alternate compiler pipelines (e.g. via-IR-only)
|
|
25
|
+
* should still target the same ABI, not ad-hoc casts to incompatible shapes.
|
|
14
26
|
*/
|
|
15
|
-
contract PrivacyBridgeERC20 is PrivacyBridge {
|
|
27
|
+
abstract contract PrivacyBridgeERC20 is PrivacyBridge {
|
|
16
28
|
using SafeERC20 for IERC20;
|
|
17
29
|
|
|
18
30
|
/// @notice The public ERC20 token being bridged (e.g., USDC, WETH)
|
|
@@ -21,6 +33,12 @@ contract PrivacyBridgeERC20 is PrivacyBridge {
|
|
|
21
33
|
/// @notice Private token contract being minted/burned
|
|
22
34
|
IPrivateERC20 public privateToken;
|
|
23
35
|
|
|
36
|
+
/// @notice Band oracle symbol for the bridged token (e.g., "ETH", "WBTC", "ADA", "USDC", "USDT")
|
|
37
|
+
string public tokenSymbol;
|
|
38
|
+
|
|
39
|
+
/// @notice Cached ERC20 decimals (matches private token; set in constructor).
|
|
40
|
+
uint8 internal immutable bridgedTokenDecimals;
|
|
41
|
+
|
|
24
42
|
error InvalidTokenAddress();
|
|
25
43
|
error InvalidPrivateTokenAddress();
|
|
26
44
|
error CannotRescueBridgeToken();
|
|
@@ -31,221 +49,285 @@ contract PrivacyBridgeERC20 is PrivacyBridge {
|
|
|
31
49
|
error TokenTransferFailed();
|
|
32
50
|
error InvalidTokenSender();
|
|
33
51
|
error NativeFeeRequiredForTransferAndCallWithdraw();
|
|
52
|
+
error DecimalsMismatch();
|
|
53
|
+
/// @notice Pulled balance increase did not match `amount` (e.g. fee-on-transfer or deflationary token).
|
|
54
|
+
error UnexpectedTransferBalance(uint256 expected, uint256 received);
|
|
55
|
+
event ERC20Rescued(address indexed token, address indexed to, uint256 amount);
|
|
56
|
+
|
|
57
|
+
function _computeErc20Fee(
|
|
58
|
+
uint256 tokenAmount,
|
|
59
|
+
uint256 fixedFee,
|
|
60
|
+
uint256 percentageBps,
|
|
61
|
+
uint256 maxFee
|
|
62
|
+
) internal view returns (uint256) {
|
|
63
|
+
(uint256 fee,,,) = _computeErc20FeeAndMeta(tokenAmount, fixedFee, percentageBps, maxFee, tokenSymbol, bridgedTokenDecimals);
|
|
64
|
+
return fee;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @notice Simulate fee calculation for any token symbol and decimals.
|
|
69
|
+
* @dev Public view — allows frontends/operators to preview fees with arbitrary parameters.
|
|
70
|
+
* Reads live oracle prices but accepts custom fee params and token config.
|
|
71
|
+
* @param tokenAmount The token amount to simulate fee for (raw units; very large values can revert in fee math)
|
|
72
|
+
* @param fixedFee The minimum fee floor in COTI wei
|
|
73
|
+
* @param percentageBps The percentage in basis points (relative to {FEE_DIVISOR})
|
|
74
|
+
* @param maxFee The maximum fee cap in COTI wei
|
|
75
|
+
* @param _tokenSymbol The Band oracle symbol (e.g. "ETH", "WBTC", "ADA")
|
|
76
|
+
* @param _tokenDecimals The decimal precision of the token (e.g. 18, 8, 6)
|
|
77
|
+
* @return The computed fee in native COTI (18 decimals)
|
|
78
|
+
*/
|
|
79
|
+
function computeErc20Fee(
|
|
80
|
+
uint256 tokenAmount,
|
|
81
|
+
uint256 fixedFee,
|
|
82
|
+
uint256 percentageBps,
|
|
83
|
+
uint256 maxFee,
|
|
84
|
+
string calldata _tokenSymbol,
|
|
85
|
+
uint8 _tokenDecimals
|
|
86
|
+
) external view returns (uint256) {
|
|
87
|
+
(uint256 fee,,,) = _computeErc20FeeAndMeta(tokenAmount, fixedFee, percentageBps, maxFee, _tokenSymbol, _tokenDecimals);
|
|
88
|
+
return fee;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @dev ERC20 fee math + two {getPriceWithMeta} reads (token then COTI). Used by {_computeErc20Fee}
|
|
93
|
+
* and {estimateDepositFee}/{estimateWithdrawFee}. Each {Math.mulDiv} step truncates toward zero
|
|
94
|
+
* (see {PrivacyBridge.FEE_DIVISOR} NatSpec). Extreme `tokenAmount`×`tokenUsdRate` values can make
|
|
95
|
+
* {Math.mulDiv} revert—keep amounts within configured max deposit/withdraw limits.
|
|
96
|
+
*/
|
|
97
|
+
function _computeErc20FeeAndMeta(
|
|
98
|
+
uint256 tokenAmount,
|
|
99
|
+
uint256 fixedFee,
|
|
100
|
+
uint256 percentageBps,
|
|
101
|
+
uint256 maxFee,
|
|
102
|
+
string memory oracleTokenSymbol,
|
|
103
|
+
uint8 tokenDecimals
|
|
104
|
+
)
|
|
105
|
+
internal
|
|
106
|
+
view
|
|
107
|
+
returns (uint256 fee, uint256 cotiLastUpdated, uint256 tokenLastUpdated, uint256 blockTimestamp)
|
|
108
|
+
{
|
|
109
|
+
_requirePriceOracle();
|
|
110
|
+
ICotiPriceConsumer oracle = ICotiPriceConsumer(priceOracle);
|
|
111
|
+
(uint256 tokenUsdRate, uint256 tokenLU,) = oracle.getPriceWithMeta(oracleTokenSymbol);
|
|
112
|
+
(uint256 cotiUsdRate, uint256 cotiLU, uint256 cotiBts) = oracle.getPriceWithMeta("COTI");
|
|
113
|
+
_requirePositiveOracleRate(tokenUsdRate);
|
|
114
|
+
_requirePositiveOracleRate(cotiUsdRate);
|
|
115
|
+
_requireOracleFreshness(tokenLU);
|
|
116
|
+
_requireOracleFreshness(cotiLU);
|
|
117
|
+
uint256 txValueUsd = Math.mulDiv(tokenAmount, tokenUsdRate, 10 ** uint256(tokenDecimals));
|
|
118
|
+
uint256 percentageFeeUsd = Math.mulDiv(txValueUsd, percentageBps, FEE_DIVISOR);
|
|
119
|
+
uint256 percentageFeeCoti = Math.mulDiv(percentageFeeUsd, 1e18, cotiUsdRate);
|
|
120
|
+
fee = _calculateDynamicFee(percentageFeeCoti, fixedFee, maxFee);
|
|
121
|
+
cotiLastUpdated = cotiLU;
|
|
122
|
+
tokenLastUpdated = tokenLU;
|
|
123
|
+
blockTimestamp = cotiBts;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* @notice Estimate the deposit fee in COTI for a given token amount
|
|
128
|
+
* @param tokenAmount The amount of ERC20 tokens to deposit (raw token units; very large values can revert in fee math)
|
|
129
|
+
* @return fee The estimated fee in native COTI (18 decimals)
|
|
130
|
+
* @return cotiLastUpdated COTI oracle data last update timestamp
|
|
131
|
+
* @return tokenLastUpdated Token oracle data last update timestamp
|
|
132
|
+
* @return blockTimestamp Third field from the COTI oracle row (same as pre-refactor behavior)
|
|
133
|
+
* @dev Pass the returned `cotiLastUpdated` and `tokenLastUpdated` verbatim into {deposit}/{withdraw} together
|
|
134
|
+
* with the same `tokenAmount` path; see {PrivacyBridge._validateOracleTimestamps} for strict equality UX.
|
|
135
|
+
*/
|
|
136
|
+
function estimateDepositFee(uint256 tokenAmount) external view returns (uint256 fee, uint256 cotiLastUpdated, uint256 tokenLastUpdated, uint256 blockTimestamp) {
|
|
137
|
+
(fee, cotiLastUpdated, tokenLastUpdated, blockTimestamp) = _computeErc20FeeAndMeta(
|
|
138
|
+
tokenAmount,
|
|
139
|
+
depositFixedFee,
|
|
140
|
+
depositPercentageBps,
|
|
141
|
+
depositMaxFee,
|
|
142
|
+
tokenSymbol,
|
|
143
|
+
bridgedTokenDecimals
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* @notice Estimate the withdrawal fee in COTI for a given token amount
|
|
149
|
+
* @param tokenAmount The amount of ERC20 tokens to withdraw (raw units; very large values can revert in fee math)
|
|
150
|
+
* @return fee The estimated fee in native COTI (18 decimals)
|
|
151
|
+
* @return cotiLastUpdated COTI oracle data last update timestamp
|
|
152
|
+
* @return tokenLastUpdated Token oracle data last update timestamp
|
|
153
|
+
* @return blockTimestamp Third field from the COTI oracle row (same as pre-refactor behavior)
|
|
154
|
+
* @dev Same timestamp handoff as {estimateDepositFee}: use return values unchanged on the subsequent {withdraw}.
|
|
155
|
+
*/
|
|
156
|
+
function estimateWithdrawFee(uint256 tokenAmount) external view returns (uint256 fee, uint256 cotiLastUpdated, uint256 tokenLastUpdated, uint256 blockTimestamp) {
|
|
157
|
+
(fee, cotiLastUpdated, tokenLastUpdated, blockTimestamp) = _computeErc20FeeAndMeta(
|
|
158
|
+
tokenAmount,
|
|
159
|
+
withdrawFixedFee,
|
|
160
|
+
withdrawPercentageBps,
|
|
161
|
+
withdrawMaxFee,
|
|
162
|
+
tokenSymbol,
|
|
163
|
+
bridgedTokenDecimals
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @notice Collect the dynamic native COTI fee from msg.value and refund any excess
|
|
169
|
+
* @param fee The computed fee in native COTI
|
|
170
|
+
* @dev Reverts with {InsufficientCotiFee} if msg.value < fee.
|
|
171
|
+
* Excess above `fee` is sent back to `msg.sender` with a plain `call` (no receive hook guarantee).
|
|
172
|
+
* Smart wallets or contracts that revert or return false on unsolicited ETH will not receive the push;
|
|
173
|
+
* the excess is then credited to {refundableNativeExcess}[msg.sender] and emits `NativeRefundExcessPushFailed`
|
|
174
|
+
* (see {PrivacyBridge._creditRefundableNativeExcess} and {PrivacyBridge.claimRefundableNativeExcess}). Excess
|
|
175
|
+
* is never added to {accumulatedCotiFees}.
|
|
176
|
+
*/
|
|
177
|
+
function _collectDynamicNativeFee(uint256 fee) internal {
|
|
178
|
+
if (msg.value < fee) revert InsufficientCotiFee();
|
|
179
|
+
// Verify contract balance covers the fee before accounting
|
|
180
|
+
if (address(this).balance < fee) revert InsufficientEthBalance();
|
|
181
|
+
accumulatedCotiFees += fee;
|
|
182
|
+
if (msg.value > fee) {
|
|
183
|
+
uint256 excess = msg.value - fee;
|
|
184
|
+
(bool ok, ) = msg.sender.call{value: excess}("");
|
|
185
|
+
if (!ok) {
|
|
186
|
+
_creditRefundableNativeExcess(msg.sender, excess);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
34
190
|
|
|
35
191
|
/**
|
|
36
192
|
* @notice Initialize the PrivacyBridgeERC20 contract
|
|
37
193
|
* @param _token Address of the public ERC20 token (must be standard: no fee-on-transfer, no rebasing; same decimals as private token)
|
|
38
194
|
* @param _privateToken Address of the private token
|
|
195
|
+
* @param _tokenSymbol Band oracle symbol for the bridged token (e.g., "ETH", "WBTC") — required for Band Protocol compatibility check
|
|
196
|
+
* @param _priceOracle Non-zero price oracle (same requirement as {PrivacyBridge}'s constructor)
|
|
197
|
+
* @dev **Decimals:** reads `decimals()` on both tokens at deploy; reverts {DecimalsMismatch} if they differ—so
|
|
198
|
+
* mis-paired tokens fail **at construction**, not on first user tx. {bridgedTokenDecimals} is then cached
|
|
199
|
+
* immutably for fee math. After deploy, a mismatch cannot appear unless token contracts were misconfigured
|
|
200
|
+
* at deploy time or an upgradeable token later changes `decimals()` (exceptional external risk; not re-checked on-chain).
|
|
39
201
|
*/
|
|
40
|
-
constructor(
|
|
202
|
+
constructor(
|
|
203
|
+
address _token,
|
|
204
|
+
address _privateToken,
|
|
205
|
+
string memory _tokenSymbol,
|
|
206
|
+
address _feeRecipient,
|
|
207
|
+
address _rescueRecipient,
|
|
208
|
+
address _priceOracle
|
|
209
|
+
) PrivacyBridge(_feeRecipient, _rescueRecipient, _priceOracle) {
|
|
41
210
|
if (_token == address(0)) revert InvalidTokenAddress();
|
|
42
211
|
if (_privateToken == address(0)) revert InvalidPrivateTokenAddress();
|
|
43
212
|
|
|
213
|
+
uint8 pubDecimals = IHasDecimals(_token).decimals();
|
|
214
|
+
if (pubDecimals != IHasDecimals(_privateToken).decimals()) revert DecimalsMismatch();
|
|
215
|
+
bridgedTokenDecimals = pubDecimals;
|
|
216
|
+
|
|
44
217
|
token = IERC20(_token);
|
|
45
218
|
privateToken = IPrivateERC20(_privateToken);
|
|
219
|
+
tokenSymbol = _tokenSymbol;
|
|
46
220
|
}
|
|
47
221
|
|
|
48
222
|
/**
|
|
49
223
|
* @notice Deposit public ERC20 tokens to receive equivalent private tokens
|
|
50
224
|
* @param amount Amount of public ERC20 tokens to deposit
|
|
51
|
-
* @
|
|
52
|
-
*
|
|
53
|
-
*
|
|
225
|
+
* @param cotiOracleTimestamp COTI `lastUpdated` from the latest `estimateDepositFee` (must still equal on-chain at execution).
|
|
226
|
+
* @param tokenOracleTimestamp Token `lastUpdated` from the same estimate (must still equal on-chain at execution).
|
|
227
|
+
* @dev Native COTI fee: send msg.value >= computed fee. Excess native is push-refunded then pull-credited on failure
|
|
228
|
+
* ({_collectDynamicNativeFee}). If the Band row advances before inclusion, tx reverts with {OracleTimestampMismatch}—re-estimate and resubmit (see {_validateOracleTimestamps}).
|
|
54
229
|
*/
|
|
55
230
|
function deposit(
|
|
56
|
-
uint256 amount
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
itUint256(ctUint256(ctUint128.wrap(0), ctUint128.wrap(0)), "")
|
|
62
|
-
);
|
|
231
|
+
uint256 amount,
|
|
232
|
+
uint256 cotiOracleTimestamp,
|
|
233
|
+
uint256 tokenOracleTimestamp
|
|
234
|
+
) external payable nonReentrant whenNotPaused notBlacklisted {
|
|
235
|
+
_deposit(amount, cotiOracleTimestamp, tokenOracleTimestamp);
|
|
63
236
|
}
|
|
64
237
|
|
|
65
238
|
/**
|
|
66
|
-
* @
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* @dev Native COTI fee: send msg.value >= nativeCotiFee. Excess refunded best-effort (see deposit(uint256)).
|
|
239
|
+
* @dev Pulls public tokens before collecting the native COTI fee so a non-standard transfer
|
|
240
|
+
* (e.g. fee-on-transfer) reverts before debiting `msg.value`, and insufficient `msg.value`
|
|
241
|
+
* still reverts the whole tx including the token transfer.
|
|
70
242
|
*/
|
|
71
|
-
function
|
|
72
|
-
uint256 amount,
|
|
73
|
-
itUint256 calldata encryptedAmount
|
|
74
|
-
) external payable nonReentrant whenNotPaused {
|
|
75
|
-
_deposit(amount, true, encryptedAmount);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function _deposit(
|
|
79
|
-
uint256 amount,
|
|
80
|
-
bool isEncrypted,
|
|
81
|
-
itUint256 memory encryptedAmount
|
|
82
|
-
) internal {
|
|
243
|
+
function _deposit(uint256 amount, uint256 cotiOracleTimestamp, uint256 tokenOracleTimestamp) internal {
|
|
83
244
|
if (!isDepositEnabled) revert DepositDisabled();
|
|
84
245
|
if (amount == 0) revert AmountZero();
|
|
85
|
-
if (msg.value < nativeCotiFee) revert InsufficientCotiFee();
|
|
86
|
-
|
|
87
246
|
_checkDepositLimits(amount);
|
|
247
|
+
_validateOracleTimestamps(cotiOracleTimestamp, tokenOracleTimestamp, tokenSymbol);
|
|
88
248
|
|
|
89
|
-
|
|
90
|
-
accumulatedCotiFees += nativeCotiFee;
|
|
249
|
+
uint256 fee = _computeErc20Fee(amount, depositFixedFee, depositPercentageBps, depositMaxFee);
|
|
91
250
|
|
|
251
|
+
uint256 balBefore = token.balanceOf(address(this));
|
|
92
252
|
token.safeTransferFrom(msg.sender, address(this), amount);
|
|
253
|
+
uint256 received = token.balanceOf(address(this)) - balBefore;
|
|
254
|
+
if (received != amount) revert UnexpectedTransferBalance(amount, received);
|
|
93
255
|
|
|
94
|
-
|
|
95
|
-
uint256 feeAmount = _calculateFeeAmount(amount, depositFeeBasisPoints);
|
|
96
|
-
uint256 amountAfterFee = amount - feeAmount;
|
|
97
|
-
accumulatedFees += feeAmount;
|
|
98
|
-
|
|
99
|
-
if (isEncrypted) {
|
|
100
|
-
// Verify parity between public amount and encrypted amount
|
|
101
|
-
gtUint256 gtAmount = MpcCore.validateCiphertext(encryptedAmount);
|
|
102
|
-
gtBool amountMatch = MpcCore.eq(
|
|
103
|
-
gtAmount,
|
|
104
|
-
MpcCore.setPublic256(amountAfterFee)
|
|
105
|
-
);
|
|
106
|
-
require(MpcCore.decrypt(amountMatch), "Encrypted amount mismatch");
|
|
107
|
-
|
|
108
|
-
privateToken.mintGt(msg.sender, gtAmount);
|
|
109
|
-
} else {
|
|
110
|
-
privateToken.mint(msg.sender, amountAfterFee);
|
|
111
|
-
}
|
|
256
|
+
_collectDynamicNativeFee(fee);
|
|
112
257
|
|
|
113
|
-
|
|
114
|
-
|
|
258
|
+
totalUserLiability += received;
|
|
259
|
+
privateToken.mint(msg.sender, received);
|
|
115
260
|
|
|
116
|
-
|
|
117
|
-
if (msg.value > nativeCotiFee) {
|
|
118
|
-
uint256 excess = msg.value - nativeCotiFee;
|
|
119
|
-
(bool ok, ) = msg.sender.call{value: excess}("");
|
|
120
|
-
if (!ok) {
|
|
121
|
-
// Excess remains in contract; deposit still succeeds
|
|
122
|
-
}
|
|
123
|
-
}
|
|
261
|
+
emit Deposit(msg.sender, amount, received);
|
|
124
262
|
}
|
|
125
263
|
|
|
126
264
|
/**
|
|
127
265
|
* @notice Withdraw public ERC20 tokens by burning private tokens
|
|
128
266
|
* @param amount Amount of private tokens to burn
|
|
129
|
-
* @
|
|
267
|
+
* @param cotiOracleTimestamp COTI `lastUpdated` from the latest `estimateWithdrawFee` (must still equal on-chain at execution).
|
|
268
|
+
* @param tokenOracleTimestamp Token `lastUpdated` from the same estimate (must still equal on-chain at execution).
|
|
269
|
+
* @dev Requires prior approval on the private token. Send `msg.value >= fee`; native fee is
|
|
270
|
+
* collected only after the public token transfer succeeds (mirrors {deposit} ordering). Oracle
|
|
271
|
+
* timestamp rules match {deposit} / {_validateOracleTimestamps}. Native excess handling matches {deposit}.
|
|
130
272
|
*/
|
|
131
273
|
function withdraw(
|
|
132
|
-
uint256 amount
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
itUint256(ctUint256(ctUint128.wrap(0), ctUint128.wrap(0)), "")
|
|
138
|
-
);
|
|
274
|
+
uint256 amount,
|
|
275
|
+
uint256 cotiOracleTimestamp,
|
|
276
|
+
uint256 tokenOracleTimestamp
|
|
277
|
+
) external payable nonReentrant whenNotPaused notBlacklisted {
|
|
278
|
+
_withdraw(amount, cotiOracleTimestamp, tokenOracleTimestamp);
|
|
139
279
|
}
|
|
140
280
|
|
|
141
281
|
/**
|
|
142
|
-
* @
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
* @dev Native COTI fee: send msg.value >= nativeCotiFee; excess refunded best-effort (see deposit).
|
|
282
|
+
* @dev Mirrors {_deposit}: native fee is collected only after the ERC20 leg succeeds by standard
|
|
283
|
+
* semantics (here: burn + public transfer with full `userGain`). Insufficient `msg.value`
|
|
284
|
+
* then reverts the entire withdrawal including private burn and public transfer.
|
|
146
285
|
*/
|
|
147
|
-
function
|
|
148
|
-
uint256 amount,
|
|
149
|
-
itUint256 calldata encryptedAmount
|
|
150
|
-
) external payable nonReentrant whenNotPaused {
|
|
151
|
-
_withdraw(amount, true, encryptedAmount);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function _withdraw(
|
|
155
|
-
uint256 amount,
|
|
156
|
-
bool isEncrypted,
|
|
157
|
-
itUint256 memory encryptedAmount
|
|
158
|
-
) internal {
|
|
286
|
+
function _withdraw(uint256 amount, uint256 cotiOracleTimestamp, uint256 tokenOracleTimestamp) internal {
|
|
159
287
|
if (amount == 0) revert AmountZero();
|
|
160
|
-
if (msg.value < nativeCotiFee) revert InsufficientCotiFee();
|
|
161
288
|
_checkWithdrawLimits(amount);
|
|
289
|
+
_validateOracleTimestamps(cotiOracleTimestamp, tokenOracleTimestamp, tokenSymbol);
|
|
162
290
|
|
|
163
|
-
|
|
164
|
-
accumulatedCotiFees += nativeCotiFee;
|
|
165
|
-
|
|
166
|
-
// Calculate fee on the public side
|
|
167
|
-
uint256 feeAmount = _calculateFeeAmount(amount, withdrawFeeBasisPoints);
|
|
168
|
-
uint256 amountAfterFee = amount - feeAmount;
|
|
169
|
-
accumulatedFees += feeAmount;
|
|
291
|
+
uint256 fee = _computeErc20Fee(amount, withdrawFixedFee, withdrawPercentageBps, withdrawMaxFee);
|
|
170
292
|
|
|
171
293
|
uint256 bridgeBalance = token.balanceOf(address(this));
|
|
172
|
-
if (bridgeBalance <
|
|
173
|
-
revert InsufficientBridgeLiquidity();
|
|
174
|
-
|
|
175
|
-
if (isEncrypted) {
|
|
176
|
-
// Verify parity
|
|
177
|
-
gtUint256 gtAmount = MpcCore.validateCiphertext(encryptedAmount);
|
|
178
|
-
gtBool amountMatch = MpcCore.eq(
|
|
179
|
-
gtAmount,
|
|
180
|
-
MpcCore.setPublic256(amount)
|
|
181
|
-
);
|
|
182
|
-
require(MpcCore.decrypt(amountMatch), "Encrypted amount mismatch");
|
|
183
|
-
|
|
184
|
-
// Use already-validated gt handle so PrivateERC20 does not re-call
|
|
185
|
-
// validateCiphertext with a different contract context (signature mismatch)
|
|
186
|
-
privateToken.transferFromGT(
|
|
187
|
-
msg.sender,
|
|
188
|
-
address(this),
|
|
189
|
-
gtAmount
|
|
190
|
-
);
|
|
191
|
-
privateToken.burnGt(gtAmount);
|
|
192
|
-
} else {
|
|
193
|
-
// Standard withdrawal (public amount)
|
|
194
|
-
privateToken.transferFrom(msg.sender, address(this), amount);
|
|
195
|
-
privateToken.burn(amount);
|
|
196
|
-
}
|
|
294
|
+
if (bridgeBalance < amount) revert InsufficientBridgeLiquidity();
|
|
197
295
|
|
|
198
|
-
|
|
199
|
-
|
|
296
|
+
totalUserLiability -= amount;
|
|
297
|
+
privateToken.transferFrom(msg.sender, address(this), amount);
|
|
298
|
+
privateToken.burn(amount);
|
|
200
299
|
|
|
201
|
-
|
|
300
|
+
uint256 userBalBefore = token.balanceOf(msg.sender);
|
|
301
|
+
token.safeTransfer(msg.sender, amount);
|
|
302
|
+
uint256 userGain = token.balanceOf(msg.sender) - userBalBefore;
|
|
303
|
+
if (userGain != amount) revert UnexpectedTransferBalance(amount, userGain);
|
|
202
304
|
|
|
203
|
-
|
|
204
|
-
if (msg.value > nativeCotiFee) {
|
|
205
|
-
uint256 excess = msg.value - nativeCotiFee;
|
|
206
|
-
(bool ok, ) = msg.sender.call{value: excess}("");
|
|
207
|
-
if (!ok) {
|
|
208
|
-
// Excess remains in contract; withdraw still succeeds
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
305
|
+
_collectDynamicNativeFee(fee);
|
|
212
306
|
|
|
213
|
-
|
|
214
|
-
* @notice Withdraw accumulated fees (ERC20 implementation)
|
|
215
|
-
* @param to Address to send fees to
|
|
216
|
-
* @param amount Amount of fees to withdraw
|
|
217
|
-
* @dev Only the owner can call this function
|
|
218
|
-
*/
|
|
219
|
-
function withdrawFees(
|
|
220
|
-
address to,
|
|
221
|
-
uint256 amount
|
|
222
|
-
) external override onlyOperator {
|
|
223
|
-
if (to == address(0)) revert InvalidAddress();
|
|
224
|
-
if (amount == 0) revert AmountZero();
|
|
225
|
-
if (amount > accumulatedFees) revert InsufficientAccumulatedFees();
|
|
226
|
-
|
|
227
|
-
accumulatedFees -= amount;
|
|
228
|
-
|
|
229
|
-
// Transfer public ERC20 tokens
|
|
230
|
-
token.safeTransfer(to, amount);
|
|
231
|
-
|
|
232
|
-
emit FeesWithdrawn(to, amount);
|
|
307
|
+
emit Withdraw(msg.sender, amount, amount);
|
|
233
308
|
}
|
|
234
309
|
|
|
235
310
|
/**
|
|
236
|
-
* @
|
|
311
|
+
* @notice Move ERC20 from this contract to {rescueRecipient} while the bridge is paused.
|
|
312
|
+
* @dev Requires {whenPaused} for every `_token` so rescue never runs concurrently with user flows.
|
|
313
|
+
* For the live public {token}, `amount` can be the full balance—including all TVL backing withdrawals.
|
|
314
|
+
* Same governance risk as {PrivacyBridgeCotiNative.rescueNative}: owner + pause can send user funds
|
|
315
|
+
* to {rescueRecipient}; see {PrivacyBridge} contract @dev (3). Private token cannot be rescued here
|
|
316
|
+
* ({CannotRescueBridgeToken}). {totalUserLiability} is intentionally **not** updated here: rescue only
|
|
317
|
+
* moves collateral to {rescueRecipient}; it does not burn private tokens or unwind user obligations on
|
|
318
|
+
* this ledger, so outstanding claims can exceed {token} held by this contract until a separate migration
|
|
319
|
+
* path makes users whole.
|
|
237
320
|
*/
|
|
238
321
|
function rescueERC20(
|
|
239
322
|
address _token,
|
|
240
|
-
address to,
|
|
241
323
|
uint256 amount
|
|
242
|
-
) external onlyOwner {
|
|
243
|
-
if (to == address(0)) revert InvalidAddress();
|
|
324
|
+
) external onlyOwner nonReentrant whenPaused {
|
|
244
325
|
if (amount == 0) revert AmountZero();
|
|
245
|
-
|
|
246
|
-
if ( _token == address(privateToken))
|
|
247
|
-
revert CannotRescueBridgeToken();
|
|
248
326
|
|
|
249
|
-
|
|
327
|
+
if (_token == address(privateToken)) revert CannotRescueBridgeToken();
|
|
328
|
+
|
|
329
|
+
IERC20(_token).safeTransfer(rescueRecipient, amount);
|
|
330
|
+
|
|
331
|
+
emit ERC20Rescued(_token, rescueRecipient, amount);
|
|
250
332
|
}
|
|
251
333
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity ^0.8.
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
4
|
import "./PrivacyBridgeERC20.sol";
|
|
5
5
|
import "../token/PrivateERC20/tokens/PrivateBridgedUSDC.sol";
|
|
@@ -10,7 +10,13 @@ import "../token/PrivateERC20/tokens/PrivateBridgedUSDC.sol";
|
|
|
10
10
|
*/
|
|
11
11
|
contract PrivacyBridgeUSDCe is PrivacyBridgeERC20 {
|
|
12
12
|
|
|
13
|
-
constructor(
|
|
13
|
+
constructor(
|
|
14
|
+
address _usdc,
|
|
15
|
+
address _privateUsdc,
|
|
16
|
+
address _feeRecipient,
|
|
17
|
+
address _rescueRecipient,
|
|
18
|
+
address _priceOracle
|
|
19
|
+
) PrivacyBridgeERC20(_usdc, _privateUsdc, "USDC", _feeRecipient, _rescueRecipient, _priceOracle) {
|
|
14
20
|
|
|
15
21
|
}
|
|
16
22
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity ^0.8.
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
4
|
import "./PrivacyBridgeERC20.sol";
|
|
5
5
|
import "../token/PrivateERC20/tokens/PrivateTetherUSD.sol";
|
|
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateTetherUSD.sol";
|
|
|
11
11
|
contract PrivacyBridgeUSDT is PrivacyBridgeERC20 {
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
constructor(
|
|
14
|
+
constructor(
|
|
15
|
+
address _usdt,
|
|
16
|
+
address _privateUsdt,
|
|
17
|
+
address _feeRecipient,
|
|
18
|
+
address _rescueRecipient,
|
|
19
|
+
address _priceOracle
|
|
20
|
+
) PrivacyBridgeERC20(_usdt, _privateUsdt, "USDT", _feeRecipient, _rescueRecipient, _priceOracle) {
|
|
15
21
|
|
|
16
22
|
}
|
|
17
23
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity ^0.8.
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
4
|
import "./PrivacyBridgeERC20.sol";
|
|
5
5
|
import "../token/PrivateERC20/tokens/PrivateWrappedADA.sol";
|
|
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateWrappedADA.sol";
|
|
|
11
11
|
contract PrivacyBridgeWADA is PrivacyBridgeERC20 {
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
constructor(
|
|
14
|
+
constructor(
|
|
15
|
+
address _wada,
|
|
16
|
+
address _privateWada,
|
|
17
|
+
address _feeRecipient,
|
|
18
|
+
address _rescueRecipient,
|
|
19
|
+
address _priceOracle
|
|
20
|
+
) PrivacyBridgeERC20(_wada, _privateWada, "ADA", _feeRecipient, _rescueRecipient, _priceOracle) {
|
|
15
21
|
|
|
16
22
|
}
|
|
17
23
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity ^0.8.
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
4
|
import "./PrivacyBridgeERC20.sol";
|
|
5
5
|
import "../token/PrivateERC20/tokens/PrivateWrappedBTC.sol";
|
|
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateWrappedBTC.sol";
|
|
|
11
11
|
contract PrivacyBridgeWBTC is PrivacyBridgeERC20 {
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
constructor(
|
|
14
|
+
constructor(
|
|
15
|
+
address _wbtc,
|
|
16
|
+
address _privateWbtc,
|
|
17
|
+
address _feeRecipient,
|
|
18
|
+
address _rescueRecipient,
|
|
19
|
+
address _priceOracle
|
|
20
|
+
) PrivacyBridgeERC20(_wbtc, _privateWbtc, "WBTC", _feeRecipient, _rescueRecipient, _priceOracle) {
|
|
15
21
|
|
|
16
22
|
}
|
|
17
23
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity ^0.8.
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
4
|
import "./PrivacyBridgeERC20.sol";
|
|
5
5
|
import "../token/PrivateERC20/tokens/PrivateWrappedEther.sol";
|
|
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateWrappedEther.sol";
|
|
|
11
11
|
contract PrivacyBridgeWETH is PrivacyBridgeERC20 {
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
constructor(
|
|
14
|
+
constructor(
|
|
15
|
+
address _weth,
|
|
16
|
+
address _privateWeth,
|
|
17
|
+
address _feeRecipient,
|
|
18
|
+
address _rescueRecipient,
|
|
19
|
+
address _priceOracle
|
|
20
|
+
) PrivacyBridgeERC20(_weth, _privateWeth, "ETH", _feeRecipient, _rescueRecipient, _priceOracle) {
|
|
15
21
|
|
|
16
22
|
}
|
|
17
23
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
|
-
pragma solidity ^0.8.
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
4
|
import "./PrivacyBridgeERC20.sol";
|
|
5
5
|
import "../token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol";
|
|
@@ -11,7 +11,13 @@ import "../token/PrivateERC20/tokens/PrivateCOTITreasuryGovernanceToken.sol";
|
|
|
11
11
|
contract PrivacyBridgegCoti is PrivacyBridgeERC20 {
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
constructor(
|
|
14
|
+
constructor(
|
|
15
|
+
address _gCoti,
|
|
16
|
+
address _privategCoti,
|
|
17
|
+
address _feeRecipient,
|
|
18
|
+
address _rescueRecipient,
|
|
19
|
+
address _priceOracle
|
|
20
|
+
) PrivacyBridgeERC20(_gCoti, _privategCoti, "GCOTI", _feeRecipient, _rescueRecipient, _priceOracle) {
|
|
15
21
|
|
|
16
22
|
}
|
|
17
23
|
}
|