@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
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
pragma solidity ^0.8.20;
|
|
4
|
+
|
|
5
|
+
import "../../../../utils/mpc/MpcCore.sol";
|
|
6
|
+
import "@openzeppelin/contracts/access/Ownable.sol";
|
|
7
|
+
|
|
8
|
+
import "../../../InboxUser.sol";
|
|
9
|
+
import "./IPodErc20CotiSide.sol";
|
|
10
|
+
|
|
11
|
+
/// @title PodErc20CotiMother
|
|
12
|
+
/// @notice Unified COTI-side ledger for all paired {PodERC20} tokens. Balances are namespaced by `(sourceChainId, sourcePToken)`.
|
|
13
|
+
/// @dev Source-chain {PrivacyPortalFactory} registers tokens via one-way inbox messages. MPC ops use {inboxMsgSender} as token context.
|
|
14
|
+
contract PodErc20CotiMother is IPodErc20CotiSide, InboxUser, Ownable {
|
|
15
|
+
// --- Types ---
|
|
16
|
+
|
|
17
|
+
struct TokenMeta {
|
|
18
|
+
string name;
|
|
19
|
+
string symbol;
|
|
20
|
+
uint8 decimals;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// --- State variables ---
|
|
24
|
+
|
|
25
|
+
/// @dev Per-token monotonic nonce included in PoD callbacks. Starts at 1 on registration so the first
|
|
26
|
+
/// callback satisfies PoD `balanceNonces[account] < nonce` (PoD nonces default to 0).
|
|
27
|
+
mapping(bytes32 => uint256) private _tokenNonce;
|
|
28
|
+
uint256 private constant INITIAL_TOKEN_NONCE = 1;
|
|
29
|
+
/// @dev Balance ciphertext per token and account.
|
|
30
|
+
mapping(bytes32 => mapping(address => ctUint256)) private _balanceCiphertext;
|
|
31
|
+
/// @dev Allowance ciphertext per token: `owner => spender => ctUint256`.
|
|
32
|
+
mapping(bytes32 => mapping(address => mapping(address => ctUint256))) private _allowanceCiphertext;
|
|
33
|
+
/// @dev Whether a `(sourceChainId, remotePToken)` namespace is registered.
|
|
34
|
+
mapping(bytes32 => bool) public registered;
|
|
35
|
+
/// @dev Public metadata recorded at registration.
|
|
36
|
+
mapping(bytes32 => TokenMeta) public tokenMeta;
|
|
37
|
+
/// @dev Allowlisted source-chain factories that may register tokens.
|
|
38
|
+
mapping(uint256 => mapping(address => bool)) public allowedFactories;
|
|
39
|
+
|
|
40
|
+
// --- Events ---
|
|
41
|
+
|
|
42
|
+
event CotiMotherInitialized(address indexed inbox, address indexed owner);
|
|
43
|
+
event AllowedFactoryUpdated(uint256 indexed sourceChainId, address indexed factory, bool allowed);
|
|
44
|
+
event TokenRegistered(
|
|
45
|
+
uint256 indexed sourceChainId,
|
|
46
|
+
address indexed remotePToken,
|
|
47
|
+
string name,
|
|
48
|
+
string symbol,
|
|
49
|
+
uint8 decimals
|
|
50
|
+
);
|
|
51
|
+
event SyncBalancesResponded(bytes32 indexed tokenId, address[] accounts, uint256 nonce);
|
|
52
|
+
event TransferCompleted(
|
|
53
|
+
bytes32 indexed tokenId,
|
|
54
|
+
address indexed spender,
|
|
55
|
+
address indexed from,
|
|
56
|
+
address to,
|
|
57
|
+
bool allowanceSpent,
|
|
58
|
+
bool amountIsPublic,
|
|
59
|
+
uint256 publicAmount,
|
|
60
|
+
uint256 nonce
|
|
61
|
+
);
|
|
62
|
+
event BurnCompleted(
|
|
63
|
+
bytes32 indexed tokenId,
|
|
64
|
+
address indexed from,
|
|
65
|
+
bool amountIsPublic,
|
|
66
|
+
uint256 publicAmount,
|
|
67
|
+
uint256 nonce
|
|
68
|
+
);
|
|
69
|
+
event MintCompleted(
|
|
70
|
+
bytes32 indexed tokenId,
|
|
71
|
+
address indexed to,
|
|
72
|
+
bool amountIsPublic,
|
|
73
|
+
uint256 publicAmount,
|
|
74
|
+
uint256 nonce
|
|
75
|
+
);
|
|
76
|
+
event ApprovalCompleted(
|
|
77
|
+
bytes32 indexed tokenId,
|
|
78
|
+
address indexed tokenOwner,
|
|
79
|
+
address indexed spender,
|
|
80
|
+
bool amountIsPublic,
|
|
81
|
+
uint256 publicAmount
|
|
82
|
+
);
|
|
83
|
+
event TransferFailureRaised(bytes32 indexed tokenId, address indexed from, address indexed to, bytes reason);
|
|
84
|
+
event ApprovalFailureRaised(bytes32 indexed tokenId, address indexed tokenOwner, address indexed spender, bytes reason);
|
|
85
|
+
event SyncBalancesFailureRaised(bytes32 indexed tokenId, bytes reason);
|
|
86
|
+
|
|
87
|
+
// --- Errors ---
|
|
88
|
+
|
|
89
|
+
error InvalidAddress();
|
|
90
|
+
error FactoryNotAllowed(uint256 sourceChainId, address factory);
|
|
91
|
+
error InvalidRemotePToken();
|
|
92
|
+
error TokenAlreadyRegistered(bytes32 tokenId);
|
|
93
|
+
error TokenNotRegistered(bytes32 tokenId);
|
|
94
|
+
error MintToZeroAddress();
|
|
95
|
+
error OwnerMintNotSupported();
|
|
96
|
+
error ChainIdOverflow(uint256 sourceChainId);
|
|
97
|
+
|
|
98
|
+
// --- Modifiers ---
|
|
99
|
+
|
|
100
|
+
modifier onlyRegisteredFactoryMessage() {
|
|
101
|
+
if (msg.sender != address(inbox)) {
|
|
102
|
+
revert OnlyInbox(msg.sender);
|
|
103
|
+
}
|
|
104
|
+
(uint256 sourceChainId, address factory) = inbox.inboxMsgSender();
|
|
105
|
+
if (!allowedFactories[sourceChainId][factory]) {
|
|
106
|
+
revert FactoryNotAllowed(sourceChainId, factory);
|
|
107
|
+
}
|
|
108
|
+
_;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
modifier onlyRegisteredPTokenMessage() {
|
|
112
|
+
if (msg.sender != address(inbox)) {
|
|
113
|
+
revert OnlyInbox(msg.sender);
|
|
114
|
+
}
|
|
115
|
+
(uint256 sourceChainId, address remotePToken) = inbox.inboxMsgSender();
|
|
116
|
+
bytes32 id = _tokenId(sourceChainId, remotePToken);
|
|
117
|
+
if (!registered[id]) {
|
|
118
|
+
revert TokenNotRegistered(id);
|
|
119
|
+
}
|
|
120
|
+
_;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// --- Constructor ---
|
|
124
|
+
|
|
125
|
+
/// @param inboxAddress COTI-side inbox allowed to deliver remote pToken requests.
|
|
126
|
+
/// @param initialOwner Owner allowed to configure factories.
|
|
127
|
+
constructor(address inboxAddress, address initialOwner) Ownable(initialOwner) {
|
|
128
|
+
if (inboxAddress == address(0) || initialOwner == address(0)) {
|
|
129
|
+
revert InvalidAddress();
|
|
130
|
+
}
|
|
131
|
+
setInbox(inboxAddress);
|
|
132
|
+
emit CotiMotherInitialized(inboxAddress, initialOwner);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// --- External: views ---
|
|
136
|
+
|
|
137
|
+
/// @notice Compute the namespace id for a source-chain pToken.
|
|
138
|
+
function tokenId(uint256 sourceChainId, address remotePToken) public pure returns (bytes32) {
|
|
139
|
+
return _tokenId(sourceChainId, remotePToken);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/// @notice Whether a source-chain pToken namespace is registered.
|
|
143
|
+
function isRegistered(uint256 sourceChainId, address remotePToken) external view returns (bool) {
|
|
144
|
+
return registered[_tokenId(sourceChainId, remotePToken)];
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// --- External: owner ---
|
|
148
|
+
|
|
149
|
+
/// @notice Allow or disallow a source-chain factory to register tokens.
|
|
150
|
+
function setAllowedFactory(uint256 sourceChainId, address factory, bool allowed) external onlyOwner {
|
|
151
|
+
if (sourceChainId == 0 || factory == address(0)) {
|
|
152
|
+
revert InvalidAddress();
|
|
153
|
+
}
|
|
154
|
+
allowedFactories[sourceChainId][factory] = allowed;
|
|
155
|
+
emit AllowedFactoryUpdated(sourceChainId, factory, allowed);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/// @notice Owner-only: rotate the COTI-side inbox used for remote pToken / factory messages.
|
|
159
|
+
function configure(address inbox_) external onlyOwner {
|
|
160
|
+
if (inbox_ == address(0)) {
|
|
161
|
+
revert InvalidAddress();
|
|
162
|
+
}
|
|
163
|
+
setInbox(inbox_);
|
|
164
|
+
emit CotiMotherInitialized(inbox_, owner());
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
168
|
+
/// @dev Not supported on the unified mother ledger; mint via inbox {mintPublic} from the paired pToken minter.
|
|
169
|
+
function ownerMint(address, uint256) external pure override {
|
|
170
|
+
revert OwnerMintNotSupported();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// --- External: registration ---
|
|
174
|
+
|
|
175
|
+
/// @notice Register a new source-chain pToken namespace. Callable only via inbox from an allowlisted factory.
|
|
176
|
+
function registerToken(
|
|
177
|
+
address remotePToken,
|
|
178
|
+
string calldata name,
|
|
179
|
+
string calldata symbol,
|
|
180
|
+
uint8 decimals
|
|
181
|
+
) external onlyRegisteredFactoryMessage {
|
|
182
|
+
if (remotePToken == address(0)) {
|
|
183
|
+
revert InvalidRemotePToken();
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
(uint256 sourceChainId,) = inbox.inboxMsgSender();
|
|
187
|
+
bytes32 id = _tokenId(sourceChainId, remotePToken);
|
|
188
|
+
if (registered[id]) {
|
|
189
|
+
revert TokenAlreadyRegistered(id);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
registered[id] = true;
|
|
193
|
+
tokenMeta[id] = TokenMeta(name, symbol, decimals);
|
|
194
|
+
_tokenNonce[id] = INITIAL_TOKEN_NONCE;
|
|
195
|
+
emit TokenRegistered(sourceChainId, remotePToken, name, symbol, decimals);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// --- External: inbox + registered pToken ---
|
|
199
|
+
|
|
200
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
201
|
+
function syncBalances(address[] calldata accounts) external override onlyRegisteredPTokenMessage {
|
|
202
|
+
bytes32 id = _activeTokenId();
|
|
203
|
+
if (accounts.length == 0) {
|
|
204
|
+
_sendSyncFailureToPod(id, bytes("PodErc20CotiMother: empty accounts"));
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
uint256 count = accounts.length;
|
|
209
|
+
address[] memory addresses = new address[](count);
|
|
210
|
+
ctUint256[] memory ciphertextAmounts = new ctUint256[](count);
|
|
211
|
+
|
|
212
|
+
for (uint256 i = 0; i < count; ++i) {
|
|
213
|
+
address account = accounts[i];
|
|
214
|
+
addresses[i] = account;
|
|
215
|
+
gtUint256 garbledBalance = _readGarbledBalance(id, account);
|
|
216
|
+
ciphertextAmounts[i] = MpcCore.offBoardToUser(garbledBalance, account);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
uint256 callbackNonce = _tokenNonce[id];
|
|
220
|
+
inbox.respond(abi.encode(addresses, ciphertextAmounts, callbackNonce));
|
|
221
|
+
emit SyncBalancesResponded(id, addresses, callbackNonce);
|
|
222
|
+
_tokenNonce[id] = callbackNonce + 1;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
226
|
+
function transfer(address from, address to, gtUint256 value) external override onlyRegisteredPTokenMessage {
|
|
227
|
+
_moveOrBurn(_activeTokenId(), from, to, value, false, false, 0);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
231
|
+
function transferPublic(address from, address to, uint256 value) external override onlyRegisteredPTokenMessage {
|
|
232
|
+
_moveOrBurn(_activeTokenId(), from, to, MpcCore.setPublic256(value), false, true, value);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
236
|
+
function transferFrom(
|
|
237
|
+
address from,
|
|
238
|
+
address to,
|
|
239
|
+
gtUint256 value
|
|
240
|
+
) external override onlyRegisteredPTokenMessage {
|
|
241
|
+
_moveOrBurn(_activeTokenId(), from, to, value, false, false, 0);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
245
|
+
function transferFromPublic(
|
|
246
|
+
address from,
|
|
247
|
+
address to,
|
|
248
|
+
uint256 value
|
|
249
|
+
) external override onlyRegisteredPTokenMessage {
|
|
250
|
+
_moveOrBurn(_activeTokenId(), from, to, MpcCore.setPublic256(value), false, true, value);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
254
|
+
function transferFromAsSpender(
|
|
255
|
+
address spender,
|
|
256
|
+
address from,
|
|
257
|
+
address to,
|
|
258
|
+
gtUint256 value
|
|
259
|
+
) external override onlyRegisteredPTokenMessage {
|
|
260
|
+
_moveWithOptionalAllowance(
|
|
261
|
+
_activeTokenId(), spender, from, to, value, true, false, false, 0
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
266
|
+
function transferFromPublicAsSpender(
|
|
267
|
+
address spender,
|
|
268
|
+
address from,
|
|
269
|
+
address to,
|
|
270
|
+
uint256 value
|
|
271
|
+
) external override onlyRegisteredPTokenMessage {
|
|
272
|
+
_moveWithOptionalAllowance(
|
|
273
|
+
_activeTokenId(), spender, from, to, MpcCore.setPublic256(value), true, false, true, value
|
|
274
|
+
);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
278
|
+
function approve(
|
|
279
|
+
address tokenOwner,
|
|
280
|
+
address spender,
|
|
281
|
+
gtUint256 value
|
|
282
|
+
) external override onlyRegisteredPTokenMessage {
|
|
283
|
+
_approveInternal(_activeTokenId(), tokenOwner, spender, value, false, 0);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
287
|
+
function approvePublic(
|
|
288
|
+
address tokenOwner,
|
|
289
|
+
address spender,
|
|
290
|
+
uint256 value
|
|
291
|
+
) external override onlyRegisteredPTokenMessage {
|
|
292
|
+
_approveInternal(_activeTokenId(), tokenOwner, spender, MpcCore.setPublic256(value), true, value);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
296
|
+
function burn(address from, gtUint256 value) external override onlyRegisteredPTokenMessage {
|
|
297
|
+
_moveOrBurn(_activeTokenId(), from, address(0), value, true, false, 0);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
301
|
+
function burnPublic(address from, uint256 value) external override onlyRegisteredPTokenMessage {
|
|
302
|
+
_moveOrBurn(_activeTokenId(), from, address(0), MpcCore.setPublic256(value), true, true, value);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
306
|
+
function mint(address to, gtUint256 value) external override onlyRegisteredPTokenMessage {
|
|
307
|
+
_mintInternal(_activeTokenId(), to, value, false, 0);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/// @inheritdoc IPodErc20CotiSide
|
|
311
|
+
function mintPublic(address to, uint256 value) external override onlyRegisteredPTokenMessage {
|
|
312
|
+
_mintInternal(_activeTokenId(), to, MpcCore.setPublic256(value), true, value);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// --- Internal: token context ---
|
|
316
|
+
|
|
317
|
+
/// @dev Packs `sourceChainId` (uint64) in the high 64 bits and `remotePToken` (uint160) in the low 160 bits.
|
|
318
|
+
function _tokenId(uint256 sourceChainId, address remotePToken) internal pure returns (bytes32) {
|
|
319
|
+
if (sourceChainId > type(uint64).max) {
|
|
320
|
+
revert ChainIdOverflow(sourceChainId);
|
|
321
|
+
}
|
|
322
|
+
return bytes32((uint256(uint64(sourceChainId)) << 160) | uint256(uint160(remotePToken)));
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
function _activeTokenId() internal view returns (bytes32) {
|
|
326
|
+
(uint256 sourceChainId, address remotePToken) = inbox.inboxMsgSender();
|
|
327
|
+
return _tokenId(sourceChainId, remotePToken);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// --- Private: garbled balance helpers ---
|
|
331
|
+
|
|
332
|
+
function _ciphertextPlainZero() private returns (ctUint256 memory) {
|
|
333
|
+
return MpcCore.offBoard(MpcCore.setPublic256(uint256(0)));
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
function _isEmptyCtUint256(ctUint256 memory ct) private pure returns (bool) {
|
|
337
|
+
return ctUint128.unwrap(ct.ciphertextHigh) == 0 && ctUint128.unwrap(ct.ciphertextLow) == 0;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
function _readGarbledBalance(bytes32 id, address account) private returns (gtUint256) {
|
|
341
|
+
ctUint256 memory ct = _balanceCiphertext[id][account];
|
|
342
|
+
if (_isEmptyCtUint256(ct)) {
|
|
343
|
+
return MpcCore.onBoard(_ciphertextPlainZero());
|
|
344
|
+
}
|
|
345
|
+
return MpcCore.onBoard(ct);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function _writeGarbledBalance(bytes32 id, address account, gtUint256 newBalance) private {
|
|
349
|
+
_balanceCiphertext[id][account] = MpcCore.offBoard(newBalance);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
function _moveOrBurn(
|
|
353
|
+
bytes32 id,
|
|
354
|
+
address from,
|
|
355
|
+
address to,
|
|
356
|
+
gtUint256 amount,
|
|
357
|
+
bool burning,
|
|
358
|
+
bool amountIsPublic,
|
|
359
|
+
uint256 publicAmount
|
|
360
|
+
) private {
|
|
361
|
+
_moveWithOptionalAllowance(id, address(0), from, to, amount, false, burning, amountIsPublic, publicAmount);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
function _moveWithOptionalAllowance(
|
|
365
|
+
bytes32 id,
|
|
366
|
+
address spender,
|
|
367
|
+
address from,
|
|
368
|
+
address to,
|
|
369
|
+
gtUint256 amount,
|
|
370
|
+
bool spendAllowance,
|
|
371
|
+
bool burning,
|
|
372
|
+
bool amountIsPublic,
|
|
373
|
+
uint256 publicAmount
|
|
374
|
+
) private {
|
|
375
|
+
if (from == address(0)) {
|
|
376
|
+
_sendTransferFailureToPod(id, from, to, bytes("PodErc20CotiMother: zero from"));
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
if (!burning && to == address(0)) {
|
|
380
|
+
_sendTransferFailureToPod(id, from, to, bytes("PodErc20CotiMother: zero to"));
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
gtUint256 senderBalance = _readGarbledBalance(id, from);
|
|
385
|
+
|
|
386
|
+
if (!MpcCore.decrypt(MpcCore.ge(senderBalance, amount))) {
|
|
387
|
+
_sendTransferFailureToPod(id, from, to, bytes("PodErc20CotiMother: insufficient balance"));
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
gtUint256 allowanceAfter;
|
|
392
|
+
if (spendAllowance && spender != from) {
|
|
393
|
+
gtUint256 currentAllowance = _readGarbledAllowance(id, from, spender);
|
|
394
|
+
if (!MpcCore.decrypt(MpcCore.ge(currentAllowance, amount))) {
|
|
395
|
+
_sendTransferFailureToPod(id, from, to, bytes("PodErc20CotiMother: insufficient allowance"));
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
allowanceAfter = MpcCore.sub(currentAllowance, amount);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
gtUint256 senderAfter = MpcCore.sub(senderBalance, amount);
|
|
402
|
+
_writeGarbledBalance(id, from, senderAfter);
|
|
403
|
+
if (spendAllowance && spender != from) {
|
|
404
|
+
_allowanceCiphertext[id][from][spender] = MpcCore.offBoard(allowanceAfter);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
if (burning) {
|
|
408
|
+
ctUint256 memory zeroCiphertext = _ciphertextPlainZero();
|
|
409
|
+
uint256 burnNonce = _tokenNonce[id];
|
|
410
|
+
inbox.respond(
|
|
411
|
+
abi.encode(
|
|
412
|
+
from,
|
|
413
|
+
MpcCore.offBoardToUser(senderAfter, from),
|
|
414
|
+
MpcCore.offBoardToUser(amount, from),
|
|
415
|
+
address(0),
|
|
416
|
+
zeroCiphertext,
|
|
417
|
+
zeroCiphertext,
|
|
418
|
+
burnNonce
|
|
419
|
+
)
|
|
420
|
+
);
|
|
421
|
+
emit BurnCompleted(id, from, amountIsPublic, publicAmount, burnNonce);
|
|
422
|
+
_tokenNonce[id] = burnNonce + 1;
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
gtUint256 recipientBefore = _readGarbledBalance(id, to);
|
|
427
|
+
gtUint256 recipientAfter = MpcCore.add(recipientBefore, amount);
|
|
428
|
+
_writeGarbledBalance(id, to, recipientAfter);
|
|
429
|
+
|
|
430
|
+
uint256 transferNonce = _tokenNonce[id];
|
|
431
|
+
inbox.respond(_encodePodTransferCallback(from, to, amount, senderAfter, recipientAfter, transferNonce));
|
|
432
|
+
emit TransferCompleted(
|
|
433
|
+
id, spender, from, to, spendAllowance && spender != from, amountIsPublic, publicAmount, transferNonce
|
|
434
|
+
);
|
|
435
|
+
_tokenNonce[id] = transferNonce + 1;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
function _readGarbledAllowance(bytes32 id, address tokenOwner, address spender) private returns (gtUint256) {
|
|
439
|
+
ctUint256 memory ct = _allowanceCiphertext[id][tokenOwner][spender];
|
|
440
|
+
if (_isEmptyCtUint256(ct)) {
|
|
441
|
+
return MpcCore.onBoard(_ciphertextPlainZero());
|
|
442
|
+
}
|
|
443
|
+
return MpcCore.onBoard(ct);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
function _encodePodTransferCallback(
|
|
447
|
+
address from,
|
|
448
|
+
address to,
|
|
449
|
+
gtUint256 amount,
|
|
450
|
+
gtUint256 senderBalanceAfter,
|
|
451
|
+
gtUint256 recipientBalanceAfter,
|
|
452
|
+
uint256 callbackNonce
|
|
453
|
+
) private returns (bytes memory) {
|
|
454
|
+
ctUint256 memory senderBalanceCt = MpcCore.offBoardToUser(senderBalanceAfter, from);
|
|
455
|
+
ctUint256 memory amountForSender = MpcCore.offBoardToUser(amount, from);
|
|
456
|
+
ctUint256 memory recipientBalanceCt = MpcCore.offBoardToUser(recipientBalanceAfter, to);
|
|
457
|
+
ctUint256 memory amountForRecipient = MpcCore.offBoardToUser(amount, to);
|
|
458
|
+
return abi.encode(from, senderBalanceCt, amountForSender, to, recipientBalanceCt, amountForRecipient, callbackNonce);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
function _approveInternal(
|
|
462
|
+
bytes32 id,
|
|
463
|
+
address tokenOwner,
|
|
464
|
+
address spender,
|
|
465
|
+
gtUint256 garbledAllowance,
|
|
466
|
+
bool amountIsPublic,
|
|
467
|
+
uint256 publicAmount
|
|
468
|
+
) private {
|
|
469
|
+
if (tokenOwner == address(0) || spender == address(0)) {
|
|
470
|
+
_sendApproveFailureToPod(id, tokenOwner, spender, bytes("PodErc20CotiMother: zero owner or spender"));
|
|
471
|
+
return;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
_allowanceCiphertext[id][tokenOwner][spender] = MpcCore.offBoard(garbledAllowance);
|
|
475
|
+
|
|
476
|
+
ctUint256 memory ciphertextForOwner = MpcCore.offBoardToUser(garbledAllowance, tokenOwner);
|
|
477
|
+
ctUint256 memory ciphertextForSpender = MpcCore.offBoardToUser(garbledAllowance, spender);
|
|
478
|
+
inbox.respond(abi.encode(tokenOwner, ciphertextForOwner, spender, ciphertextForSpender));
|
|
479
|
+
emit ApprovalCompleted(id, tokenOwner, spender, amountIsPublic, publicAmount);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
function _mintInternal(
|
|
483
|
+
bytes32 id,
|
|
484
|
+
address to,
|
|
485
|
+
gtUint256 amount,
|
|
486
|
+
bool amountIsPublic,
|
|
487
|
+
uint256 publicAmount
|
|
488
|
+
) private {
|
|
489
|
+
if (to == address(0)) {
|
|
490
|
+
_sendTransferFailureToPod(id, address(0), to, bytes("PodErc20CotiMother: mint zero to"));
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
gtUint256 recipientBefore = _readGarbledBalance(id, to);
|
|
495
|
+
gtUint256 recipientAfter = MpcCore.add(recipientBefore, amount);
|
|
496
|
+
_writeGarbledBalance(id, to, recipientAfter);
|
|
497
|
+
|
|
498
|
+
ctUint256 memory zeroCiphertext = _ciphertextPlainZero();
|
|
499
|
+
uint256 callbackNonce = _tokenNonce[id];
|
|
500
|
+
inbox.respond(
|
|
501
|
+
abi.encode(
|
|
502
|
+
address(0),
|
|
503
|
+
zeroCiphertext,
|
|
504
|
+
zeroCiphertext,
|
|
505
|
+
to,
|
|
506
|
+
MpcCore.offBoardToUser(recipientAfter, to),
|
|
507
|
+
MpcCore.offBoardToUser(amount, to),
|
|
508
|
+
callbackNonce
|
|
509
|
+
)
|
|
510
|
+
);
|
|
511
|
+
emit MintCompleted(id, to, amountIsPublic, publicAmount, callbackNonce);
|
|
512
|
+
_tokenNonce[id] = callbackNonce + 1;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
function _sendTransferFailureToPod(bytes32 id, address from, address to, bytes memory reason) private {
|
|
516
|
+
emit TransferFailureRaised(id, from, to, reason);
|
|
517
|
+
inbox.raise(abi.encode(from, to, reason));
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
function _sendApproveFailureToPod(bytes32 id, address tokenOwner, address spender, bytes memory reason) private {
|
|
521
|
+
emit ApprovalFailureRaised(id, tokenOwner, spender, reason);
|
|
522
|
+
inbox.raise(abi.encode(tokenOwner, spender, reason));
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
function _sendSyncFailureToPod(bytes32 id, bytes memory reason) private {
|
|
526
|
+
emit SyncBalancesFailureRaised(id, reason);
|
|
527
|
+
inbox.raise(reason);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.20;
|
|
3
|
+
|
|
4
|
+
/// @notice Minimal WETH9 / WAVAX interface for wrap-on-deposit and unwrap-on-withdraw.
|
|
5
|
+
interface IWrappedNative {
|
|
6
|
+
/// @notice Wrap native coin into the ERC-20 underlying (mints WETH/WAVAX to `msg.sender`).
|
|
7
|
+
function deposit() external payable;
|
|
8
|
+
|
|
9
|
+
/// @notice Unwrap `wad` to native coin (burns caller balance, sends native to `msg.sender`).
|
|
10
|
+
function withdraw(uint256 wad) external;
|
|
11
|
+
}
|