diff --git a/.env.sample b/.env.sample index 3d6427f5..288139d5 100644 --- a/.env.sample +++ b/.env.sample @@ -21,4 +21,4 @@ APP_GATEWAY="0x" # FOR INFRASTRUCTURE DEPLOYMENT ONLY # Removes hardhat issues related to linting and syntax checking -SOCKET_SIGNER_KEY="0000dead0000dead0000dead0000dead0000dead0000dead0000dead0000dead" +SOCKET_PRIVATE_KEY="0000dead0000dead0000dead0000dead0000dead0000dead0000dead0000dead" diff --git a/Errors.md b/Errors.md index 2acd69a3..2ac6c27d 100644 --- a/Errors.md +++ b/Errors.md @@ -16,14 +16,6 @@ | `PromiseRevertFailed()` | `0x0175b9de` | | `NotLatestPromise()` | `0x39ca95d3` | -## evmx/plugs/ContractFactoryPlug.sol - -| Error | Signature | -| -------------------------------- | ------------ | -| `DeploymentFailed()` | `0x30116425` | -| `ExecutionFailed(bytes32,bytes)` | `0xd255d8a3` | -| `information(bool,,bytes)` | `0x3a82a1f3` | - ## evmx/plugs/FeesPlug.sol | Error | Signature | @@ -32,11 +24,13 @@ | `InvalidDepositAmount()` | `0xfe9ba5cd` | | `TokenNotWhitelisted(address)` | `0xea3bff2e` | -## evmx/watcher/RequestHandler.sol +## evmx/watcher/Watcher.sol -| Error | Signature | -| ----------------------- | ------------ | -| `InsufficientMaxFees()` | `0x0e5bc492` | +| Error | Signature | +| --------------------------- | ------------ | +| `PayloadAlreadyCancelled()` | `0x999843d8` | +| `PayloadAlreadySettled()` | `0x8fce2d78` | +| `AppGatewayMismatch()` | `0x2b7236f9` | ## protocol/Socket.sol @@ -74,17 +68,6 @@ | ---------------- | ------------ | | `NotSupported()` | `0xa0387940` | -## protocol/switchboard/CCTPSwitchboard.sol - -| Error | Signature | -| ------------------------------- | ------------ | -| `RemoteExecutionNotFound()` | `0xbd506972` | -| `PrevBatchDigestHashMismatch()` | `0xc9864e9d` | -| `NotAttested()` | `0x99efb890` | -| `NotExecuted()` | `0xec84b1da` | -| `InvalidSender()` | `0xddb5de5e` | -| `OnlyMessageTransmitter()` | `0x935ac89c` | - ## protocol/switchboard/FastSwitchboard.sol | Error | Signature | @@ -145,7 +128,7 @@ | `AuctionNotOpen()` | `0xf0460077` | | `BidExceedsMaxFees()` | `0x4c923f3c` | | `LowerBidAlreadyExists()` | `0xaaa1f709` | -| `RequestCountMismatch()` | `0x98bbcbff` | +| `PayloadCountMismatch()` | `0xea50ceff` | | `InvalidAmount()` | `0x2c5211c6` | | `InsufficientCreditsAvailable()` | `0xe61dc0aa` | | `InsufficientBalance()` | `0xf4d678b8` | diff --git a/EventTopics.md b/EventTopics.md index b6bdc3df..80345067 100644 --- a/EventTopics.md +++ b/EventTopics.md @@ -1,22 +1,5 @@ # Event Topics -## AuctionManager - -| Event | Arguments | Topic | -| ---------------------------- | ------------------------------------------- | -------------------------------------------------------------------- | -| `AuctionEndDelaySecondsSet` | `(auctionEndDelaySeconds: uint256)` | `0xf38f0d9dc8459cf5426728c250d115196a4c065ebc1a6c29da24764a8c0da722` | -| `AuctionEnded` | `(requestCount: uint40, winningBid: tuple)` | `0xede4ec1efc469fac10dcb4930f70be4cd21f3700ed61c91967c19a7cd7c0d86e` | -| `AuctionRestarted` | `(requestCount: uint40)` | `0x071867b21946ec4655665f0d4515d3757a5a52f144c762ecfdfb11e1da542b82` | -| `AuctionStarted` | `(requestCount: uint40)` | `0xcd040613cf8ef0cfcaa3af0d711783e827a275fc647c116b74595bf17cb9364f` | -| `BidPlaced` | `(requestCount: uint40, bid: tuple)` | `0x7f79485e4c9aeea5d4899bc6f7c63b22ac1f4c01d2d28c801e94732fee657b5d` | -| `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | -| `MaxReAuctionCountSet` | `(maxReAuctionCount: uint256)` | `0x2f6fadde7ab8ab83d21ab10c3bc09dde179f8696d47c4176581facf0c6f96bbf` | -| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | -| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | -| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | -| `RoleGranted` | `(role: bytes32, grantee: address)` | `0x2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3` | -| `RoleRevoked` | `(role: bytes32, revokee: address)` | `0x155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a52` | - ## Socket | Event | Arguments | Topic | @@ -67,9 +50,9 @@ | Event | Arguments | Topic | | ----------------------------- | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | | `Approval` | `(owner: address, spender: address, amount: uint256)` | `0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925` | -| `CreditsBlocked` | `(requestCount: uint40, consumeFrom: address, amount: uint256)` | `0xf037c15aef41440aa823cf1fdeaea332105d8b23d52557f6670189b5d76f1eed` | -| `CreditsUnblocked` | `(requestCount: uint40, consumeFrom: address)` | `0x45db29ef2701319155cac058aa2f56ce1f73e0e238161d3db9f8c9a47655210d` | -| `CreditsUnblockedAndAssigned` | `(requestCount: uint40, consumeFrom: address, transmitter: address, amount: uint256)` | `0x38fd327622576a468e1b2818b00f50c8854703633ef8e583e1f31662888ffac2` | +| `CreditsBlocked` | `(payloadId: bytes32, consumeFrom: address, amount: uint256)` | `0xe0ce1c6e339ba1b699d262b081adbc74ddc8699c19405e3a8459940944ccd9ea` | +| `CreditsUnblocked` | `(payloadId: bytes32, consumeFrom: address)` | `0xe19214f41bd8f45a4fa569e176cdb3700de18b99f163f385cdfd210118dc7aa3` | +| `CreditsUnblockedAndAssigned` | `(payloadId: bytes32, consumeFrom: address, transmitter: address, amount: uint256)` | `0xf2fa1621e1a549c353279ffa16145321c7297cd56fd8fe4fa0d6d4b9ea09518c` | | `CreditsUnwrapped` | `(consumeFrom: address, amount: uint256)` | `0xdcc9473b722b4c953617ab373840b365298a520bc7f20ce94fa7314f4a857774` | | `CreditsWrapped` | `(consumeFrom: address, amount: uint256)` | `0x40246503613721eb4acf4020c6c56b6a16e5d08713316db0bea5210e8819c592` | | `Deposited` | `(chainSlug: uint32, token: address, depositTo: address, creditAmount: uint256, nativeAmount: uint256)` | `0x72aedd284699bbd7a987e6942b824cfd6c627e354cb5a0760ac5768acd473f4a` | @@ -97,18 +80,16 @@ ## AddressResolver -| Event | Arguments | Topic | -| ------------------------------ | --------------------------------------------------- | -------------------------------------------------------------------- | -| `AsyncDeployerUpdated` | `(asyncDeployer_: address)` | `0x4df9cdd01544e8f6b0326650bc0b55611f47ce5ba2faa522d21fb675e9fc1f73` | -| `ContractAddressUpdated` | `(contractId_: bytes32, contractAddress_: address)` | `0xdf5ec2c15e11ce657bb21bc09c0b5ba95e315b4dba9934c6e311f47559babf28` | -| `DefaultAuctionManagerUpdated` | `(defaultAuctionManager_: address)` | `0x60f296739208a505ead7fb622df0f76b7791b824481b120a2300bdaf85e3e3d6` | -| `DeployForwarderUpdated` | `(deployForwarder_: address)` | `0x237b9bc9fef7508a02ca9ccca81f6965e500064a58024cae1218035da865fd2b` | -| `FeesManagerUpdated` | `(feesManager_: address)` | `0x94e67aa1341a65767dfde81e62fd265bfbade1f5744bfd3cd73f99a6eca0572a` | -| `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | -| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | -| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | -| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | -| `WatcherUpdated` | `(watcher_: address)` | `0xc13081d38d92b454cdb6ca20bbc65c12fa43a7a14a1529204ced5b6350052bb0` | +| Event | Arguments | Topic | +| ---------------------------- | --------------------------------------------------- | -------------------------------------------------------------------- | +| `AsyncDeployerUpdated` | `(asyncDeployer_: address)` | `0x4df9cdd01544e8f6b0326650bc0b55611f47ce5ba2faa522d21fb675e9fc1f73` | +| `ContractAddressUpdated` | `(contractId_: bytes32, contractAddress_: address)` | `0xdf5ec2c15e11ce657bb21bc09c0b5ba95e315b4dba9934c6e311f47559babf28` | +| `FeesManagerUpdated` | `(feesManager_: address)` | `0x94e67aa1341a65767dfde81e62fd265bfbade1f5744bfd3cd73f99a6eca0572a` | +| `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | +| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | +| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | +| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | +| `WatcherUpdated` | `(watcher_: address)` | `0xc13081d38d92b454cdb6ca20bbc65c12fa43a7a14a1529204ced5b6350052bb0` | ## AsyncDeployer @@ -128,21 +109,29 @@ | ------------- | ------------------- | -------------------------------------------------------------------- | | `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | -## DeployForwarder - -| Event | Arguments | Topic | -| ---------------------------- | ---------------------------------------- | -------------------------------------------------------------------- | -| `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | -| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | -| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | -| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | - ## Forwarder | Event | Arguments | Topic | | ------------- | ------------------- | -------------------------------------------------------------------- | | `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | +## IWatcher + +| Event | Arguments | Topic | +| -------------------- | ------------------------------------------------ | -------------------------------------------------------------------- | +| `FeesIncreased` | `(payloadId: bytes32, newMaxFees: uint256)` | `0xc065f24ea45c38ef0d9ccac911e00b29f28bc38daa87e3cc4dcf0e7ea73adc6f` | +| `MarkedRevert` | `(payloadId: bytes32, isRevertingOnchain: bool)` | `0xcf1fd844cb4d32cbebb5ca6ce4ac834fe98da3ddac44deb77fffd22ad933824c` | +| `PayloadCancelled` | `(payloadId: bytes32)` | `0xb1593a793a33ca2a894aa149ab2cfec836402714c940a8e71d58a026a74a02e4` | +| `PayloadResolved` | `(payloadId: bytes32)` | `0x8e7fa2d76fff653c56f06aad4c0cd8170dcbc5fd39bcb1844b3171c3221da43e` | +| `PayloadSettled` | `(payloadId: bytes32)` | `0x7184f20dd5708f270b73fe67e606998fd3e9173b8a2fba6b62634a6c12142d15` | +| `PayloadSubmitted` | `(payload: tuple)` | `0xdbbb90a7b644d115e3581d65b96ea409bf4f78320a7f4efbcf2aa93f8b33ffe6` | +| `PrecompileSet` | `(callType: bytes4, precompile: address)` | `0x5254189aca1b416c09dad7fb656bf0ed2c07e03ccd240bd95dfbfbaeb5e10e7b` | +| `PromiseNotResolved` | `(payloadId: bytes32, asyncPromise: address)` | `0xbcf0d0c678940566e9e64f0c871439395bd5fb5c39bca3547b126fe6ee467937` | +| `PromiseResolved` | `(payloadId: bytes32, asyncPromise: address)` | `0x1b1b5810494fb3e17f7c46547e6e67cd6ad3e6001ea6fb7d12ea0241ba13c4ba` | +| `TriggerFailed` | `(triggerId: bytes32)` | `0x4386783bb0f7cad4ba12f033dbec03dc3441e7757a122f3097a7a4d945c98040` | +| `TriggerFeesSet` | `(triggerFees: uint256)` | `0x7df3967b7c8727af5ac0ee9825d88aafeb899d769bc428b91f8967fa0b623084` | +| `TriggerSucceeded` | `(triggerId: bytes32)` | `0x92d20fbcbf31370b8218e10ed00c5aad0e689022da30a08905ba5ced053219eb` | + ## ProxyFactory | Event | Arguments | Topic | @@ -158,18 +147,6 @@ | `Approval` | `(owner: address, spender: address, amount: uint256)` | `0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925` | | `Transfer` | `(from: address, to: address, amount: uint256)` | `0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef` | -## ContractFactoryPlug - -| Event | Arguments | Topic | -| ---------------------------- | --------------------------------------------------- | -------------------------------------------------------------------- | -| `ConnectorPlugDisconnected` | `()` | `0xc2af098c82dba3c4b00be8bda596d62d13b98a87b42626fefa67e0bb0e198fdd` | -| `Deployed` | `(addr: address, salt: bytes32, returnData: bytes)` | `0x1246c6f8fd9f4abc542c7c8c8f793cfcde6b67aed1976a38aa134fc24af2dfe3` | -| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | -| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | -| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | -| `RoleGranted` | `(role: bytes32, grantee: address)` | `0x2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3` | -| `RoleRevoked` | `(role: bytes32, revokee: address)` | `0x155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a52` | - ## FeesPlug | Event | Arguments | Topic | @@ -185,80 +162,36 @@ | `TokenRemovedFromWhitelist` | `(token: address)` | `0xdd2e6d9f52cbe8f695939d018b7d4a216dc613a669876163ac548b916489d917` | | `TokenWhitelisted` | `(token: address)` | `0x6a65f90b1a644d2faac467a21e07e50e3f8fa5846e26231d30ae79a417d3d262` | -## Configurations +## Watcher | Event | Arguments | Topic | | ---------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------------------------- | +| `FeesIncreased` | `(payloadId: bytes32, newMaxFees: uint256)` | `0xc065f24ea45c38ef0d9ccac911e00b29f28bc38daa87e3cc4dcf0e7ea73adc6f` | | `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | | `IsValidPlugSet` | `(isValid: bool, chainSlug: uint32, plug: bytes32, appGateway: address)` | `0xdd99f9f3d0179d3845b6c9b5e020d80c32ca46007e43c43c6ab6a86cb259ed28` | +| `MarkedRevert` | `(payloadId: bytes32, isRevertingOnchain: bool)` | `0xcf1fd844cb4d32cbebb5ca6ce4ac834fe98da3ddac44deb77fffd22ad933824c` | | `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | | `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | | `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | +| `PayloadCancelled` | `(payloadId: bytes32)` | `0xb1593a793a33ca2a894aa149ab2cfec836402714c940a8e71d58a026a74a02e4` | +| `PayloadResolved` | `(payloadId: bytes32)` | `0x8e7fa2d76fff653c56f06aad4c0cd8170dcbc5fd39bcb1844b3171c3221da43e` | +| `PayloadSettled` | `(payloadId: bytes32)` | `0x7184f20dd5708f270b73fe67e606998fd3e9173b8a2fba6b62634a6c12142d15` | +| `PayloadSubmitted` | `(payload: tuple)` | `0xdbbb90a7b644d115e3581d65b96ea409bf4f78320a7f4efbcf2aa93f8b33ffe6` | | `PlugAdded` | `(appGatewayId: bytes32, chainSlug: uint32, plug: bytes32)` | `0x3734a2406c5c2f2556c82a0819c51e42a135dd102465cc9856594481ea2f1637` | +| `PrecompileSet` | `(callType: bytes4, precompile: address)` | `0x5254189aca1b416c09dad7fb656bf0ed2c07e03ccd240bd95dfbfbaeb5e10e7b` | +| `PromiseNotResolved` | `(payloadId: bytes32, asyncPromise: address)` | `0xbcf0d0c678940566e9e64f0c871439395bd5fb5c39bca3547b126fe6ee467937` | +| `PromiseResolved` | `(payloadId: bytes32, asyncPromise: address)` | `0x1b1b5810494fb3e17f7c46547e6e67cd6ad3e6001ea6fb7d12ea0241ba13c4ba` | | `SocketSet` | `(chainSlug: uint32, socket: bytes32)` | `0x3200bf6ad2ab31b9220ed9d2f83089d7a1332f55aaa3825c57510743a315165b` | | `SwitchboardSet` | `(chainSlug: uint32, sbType: bytes32, switchboardId: uint64)` | `0x5aeb296e3ed47512d11032a96d11f93d8538b9eb87aa1db45d412e7165d6850a` | - -## PromiseResolver - -| Event | Arguments | Topic | -| -------------------- | ------------------------------------------------ | -------------------------------------------------------------------- | -| `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | -| `MarkedRevert` | `(payloadId: bytes32, isRevertingOnchain: bool)` | `0xcf1fd844cb4d32cbebb5ca6ce4ac834fe98da3ddac44deb77fffd22ad933824c` | -| `PromiseNotResolved` | `(payloadId: bytes32, asyncPromise: address)` | `0xbcf0d0c678940566e9e64f0c871439395bd5fb5c39bca3547b126fe6ee467937` | -| `PromiseResolved` | `(payloadId: bytes32, asyncPromise: address)` | `0x1b1b5810494fb3e17f7c46547e6e67cd6ad3e6001ea6fb7d12ea0241ba13c4ba` | - -## RequestHandler - -| Event | Arguments | Topic | -| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `FeesIncreased` | `(requestCount: uint40, newMaxFees: uint256)` | `0xf258fca4e49b803ee2a4c2e33b6fcf18bc3982df21f111c00677025bf1ccbb6a` | -| `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | -| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | -| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | -| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | -| `PrecompileSet` | `(callType: bytes4, precompile: address)` | `0x5254189aca1b416c09dad7fb656bf0ed2c07e03ccd240bd95dfbfbaeb5e10e7b` | -| `RequestCancelled` | `(requestCount: uint40)` | `0xff191657769be72fc08def44c645014c60d18cb24b9ca05c9a33406a28253245` | -| `RequestCompletedWithErrors` | `(requestCount: uint40)` | `0xd8d9915dc14b5a29b66cb263e1ea1e99e60418fc21d97f0fbf09cae1281291e2` | -| `RequestPayloadCountLimitSet` | `(requestPayloadCountLimit: uint128)` | `0x67f58095e99ad7f9519f3b80372f6bab373a6217d08c9479fe58b80dcd5b4b7d` | -| `RequestSettled` | `(requestCount: uint40, winner: address)` | `0x1234f98acbe1548b214f4528461a5377f1e2349569c04caa59325e488e7d2aa4` | -| `RequestSubmitted` | `(hasWrite: bool, requestCount: uint40, totalEstimatedWatcherFees: uint256, requestParams: tuple, payloadParamsArray: tuple[])` | `0xb730ca5523e3f80e88b4bb71e1e78d447553069cd9a7143bb0032b957135b530` | - -## Watcher - -| Event | Arguments | Topic | -| ---------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `AppGatewayCallFailed` | `(triggerId: bytes32)` | `0xcaf8475fdade8465ea31672463949e6cf1797fdcdd11eeddbbaf857e1e5907b7` | -| `CalledAppGateway` | `(triggerId: bytes32)` | `0xf659ffb3875368f54fb4ab8f5412ac4518af79701a48076f7a58d4448e4bdd0b` | -| `CoreContractsSet` | `(requestHandler: address, configManager: address, promiseResolver: address)` | `0x32f3480588270473dc6418270d922a820dd9e914739e09a98241457dca2fd560` | -| `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | -| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | -| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | -| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | -| `TriggerFailed` | `(triggerId: bytes32)` | `0x4386783bb0f7cad4ba12f033dbec03dc3441e7757a122f3097a7a4d945c98040` | -| `TriggerFeesSet` | `(triggerFees: uint256)` | `0x7df3967b7c8727af5ac0ee9825d88aafeb899d769bc428b91f8967fa0b623084` | -| `TriggerSucceeded` | `(triggerId: bytes32)` | `0x92d20fbcbf31370b8218e10ed00c5aad0e689022da30a08905ba5ced053219eb` | +| `TriggerFailed` | `(triggerId: bytes32)` | `0x4386783bb0f7cad4ba12f033dbec03dc3441e7757a122f3097a7a4d945c98040` | +| `TriggerFeesSet` | `(triggerFees: uint256)` | `0x7df3967b7c8727af5ac0ee9825d88aafeb899d769bc428b91f8967fa0b623084` | +| `TriggerSucceeded` | `(triggerId: bytes32)` | `0x92d20fbcbf31370b8218e10ed00c5aad0e689022da30a08905ba5ced053219eb` | ## IMessageSwitchboard | Event | Arguments | Topic | | ----- | --------- | ----- | -## ICCTPSwitchboard - -| Event | Arguments | Topic | -| ----- | --------- | ----- | - -## CCTPSwitchboard - -| Event | Arguments | Topic | -| ---------------------------- | ----------------------------------------- | -------------------------------------------------------------------- | -| `Attested` | `(payloadId_: bytes32, watcher: address)` | `0x3d83c7bc55c269e0bc853ddc0d7b9fca30216ecc43779acb4e36b7e0ad1c71e4` | -| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | -| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | -| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | -| `RoleGranted` | `(role: bytes32, grantee: address)` | `0x2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3` | -| `RoleRevoked` | `(role: bytes32, revokee: address)` | `0x155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a52` | - ## FastSwitchboard | Event | Arguments | Topic | @@ -306,15 +239,14 @@ ## WritePrecompile -| Event | Arguments | Topic | -| ------------------------------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -| `ChainMaxMsgValueLimitsUpdated` | `(chainSlug: uint32, maxMsgValueLimit: uint256)` | `0x439087d094fe7dacbba3f0c67032041952d8bd58a891e15af10ced28fed0eb91` | -| `ContractFactoryPlugSet` | `(chainSlug: uint32, contractFactoryPlug: bytes32)` | `0xfad552a6feb82bef23201b8dce04b2460bff41b00f26fef3d791572cfdab49c2` | -| `ExpiryTimeSet` | `(expiryTime: uint256)` | `0x07e837e13ad9a34715a6bd45f49bbf12de19f06df79cb0be12b3a7d7f2397fa9` | -| `FeesSet` | `(writeFees: uint256)` | `0x3346af6da1932164d501f2ec28f8c5d686db5828a36b77f2da4332d89184fe7b` | -| `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | -| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | -| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | -| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | -| `WriteProofRequested` | `(transmitter: address, digest: bytes32, prevBatchDigestHash: bytes32, deadline: uint256, payloadParams: tuple)` | `0xe3e3e322b3c2964670f4b62d06647c2f711440be782105fc1c0a60cc934bb40a` | -| `WriteProofUploaded` | `(payloadId: bytes32, proof: bytes)` | `0xd8fe3a99a88c9630360418877afdf14e3e79f0f25fee162aeb230633ea740156` | +| Event | Arguments | Topic | +| ------------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------- | +| `ChainMaxMsgValueLimitsUpdated` | `(chainSlug: uint32, maxMsgValueLimit: uint256)` | `0x439087d094fe7dacbba3f0c67032041952d8bd58a891e15af10ced28fed0eb91` | +| `ExpiryTimeSet` | `(expiryTime: uint256)` | `0x07e837e13ad9a34715a6bd45f49bbf12de19f06df79cb0be12b3a7d7f2397fa9` | +| `FeesSet` | `(writeFees: uint256)` | `0x3346af6da1932164d501f2ec28f8c5d686db5828a36b77f2da4332d89184fe7b` | +| `Initialized` | `(version: uint64)` | `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2` | +| `OwnershipHandoverCanceled` | `(pendingOwner: address)` | `0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92` | +| `OwnershipHandoverRequested` | `(pendingOwner: address)` | `0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d` | +| `OwnershipTransferred` | `(oldOwner: address, newOwner: address)` | `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` | +| `WriteProofRequested` | `(digest: bytes32, deadline: uint256, rawPayload: tuple)` | `0x2f8f00af5d1898838cff7c39a4fad4673d18a1be179d2548cdc0fe51321b8aac` | +| `WriteProofUploaded` | `(payloadId: bytes32, proof: bytes)` | `0xd8fe3a99a88c9630360418877afdf14e3e79f0f25fee162aeb230633ea740156` | diff --git a/FunctionSignatures.md b/FunctionSignatures.md index 85a28d04..6c60e480 100644 --- a/FunctionSignatures.md +++ b/FunctionSignatures.md @@ -1,55 +1,5 @@ # Function Signatures -## AuctionManager - -| Function | Signature | -| ---------------------------- | ------------ | -| `addressResolver__` | `0x6a750469` | -| `asyncDeployer__` | `0x2a39e801` | -| `auctionEndDelaySeconds` | `0x9087dfdb` | -| `auctionManager` | `0xb0192f9a` | -| `auctionStatus` | `0xd7d5fbf6` | -| `bid` | `0xfcdf49c2` | -| `bidTimeout` | `0x94090d0b` | -| `cancelOwnershipHandover` | `0x54d1f13d` | -| `completeOwnershipHandover` | `0xf04e283e` | -| `consumeFrom` | `0x40dd78be` | -| `creationCodeWithArgs` | `0xc126dcc4` | -| `deployForwarder__` | `0xd4e3b034` | -| `endAuction` | `0x7426f0f6` | -| `evmxSlug` | `0x8bae77c2` | -| `expireBid` | `0x33b5b234` | -| `feesManager__` | `0x70568b58` | -| `forwarderAddresses` | `0x5390fdcb` | -| `getOnChainAddress` | `0xb6abffd7` | -| `getOverrideParams` | `0x54f0a866` | -| `grantRole` | `0x2f2ff15d` | -| `handleRevert` | `0x44792f25` | -| `hasRole` | `0x91d14854` | -| `initialize` | `0x86891c9b` | -| `initializeOnChain` | `0x86f01739` | -| `isAsyncModifierSet` | `0xb69e0c4a` | -| `isValidPromise` | `0xb690b962` | -| `maxFees` | `0xe83e34b1` | -| `maxReAuctionCount` | `0xc367b376` | -| `onCompleteData` | `0xb52fa926` | -| `onDeployComplete` | `0xfa3dbd1e` | -| `overrideParams` | `0xec5490fe` | -| `owner` | `0x8da5cb5b` | -| `ownershipHandoverExpiresAt` | `0xfee81cf4` | -| `reAuctionCount` | `0x9b4b22d3` | -| `renounceOwnership` | `0x715018a6` | -| `requestOwnershipHandover` | `0x25692962` | -| `rescueFunds` | `0x6ccae054` | -| `revokeRole` | `0xd547741f` | -| `sbType` | `0x745de344` | -| `setAddress` | `0x85bf312c` | -| `setAuctionEndDelaySeconds` | `0x88606b1a` | -| `setMaxReAuctionCount` | `0x64c71403` | -| `transferOwnership` | `0xf2fde38b` | -| `watcher__` | `0x300bb063` | -| `winningBids` | `0x9133f232` | - ## Socket | Function | Signature | @@ -119,23 +69,14 @@ | `addressResolver__` | `0x6a750469` | | `allowance` | `0xdd62ed3e` | | `approve` | `0x095ea7b3` | -| `approveWithSignature` | `0xf65de26c` | | `asyncDeployer__` | `0x2a39e801` | -| `auctionManager` | `0xb0192f9a` | | `balanceOf` | `0x70a08231` | -| `batchApprove` | `0x525b3861` | -| `blockCredits` | `0x9e434307` | +| `blockCredits` | `0xa7bf4a36` | +| `blockedCredits` | `0x31f81b5c` | | `cancelOwnershipHandover` | `0x54d1f13d` | | `completeOwnershipHandover` | `0xf04e283e` | -| `consumeFrom` | `0x40dd78be` | -| `creationCodeWithArgs` | `0xc126dcc4` | | `decimals` | `0x313ce567` | -| `deployForwarder__` | `0xd4e3b034` | | `deposit` | `0x5671d329` | -| `deprecated2` | `0x9897ed76` | -| `deprecated3` | `0x690e4d24` | -| `deprecated4` | `0xefe1358a` | -| `deprecatedSbType` | `0x5a783900` | | `evmxSlug` | `0x8bae77c2` | | `feesManager__` | `0x70568b58` | | `feesPlugs` | `0x23f5ee8a` | @@ -147,30 +88,24 @@ | `getOnChainAddress` | `0xb6abffd7` | | `getOverrideParams` | `0x54f0a866` | | `handleRevert` | `0x44792f25` | -| `increaseFees` | `0xe9b304da` | +| `increaseFees` | `0xf0f0beba` | | `initialize` | `0xc13547c5` | -| `initializeOnChain` | `0x86f01739` | | `isApproved` | `0xa389783e` | | `isAsyncModifierSet` | `0xb69e0c4a` | | `isCreditSpendable` | `0x4f8990fd` | | `isNonceUsed` | `0xcab7e8eb` | | `isValidPromise` | `0xb690b962` | -| `maxFees` | `0xe83e34b1` | | `maxFeesPerChainSlug` | `0xe06340d4` | | `name` | `0x06fdde03` | | `nonces` | `0x7ecebe00` | | `onCompleteData` | `0xb52fa926` | -| `onDeployComplete` | `0xfa3dbd1e` | | `overrideParams` | `0xec5490fe` | | `owner` | `0x8da5cb5b` | | `ownershipHandoverExpiresAt` | `0xfee81cf4` | | `permit` | `0xd505accf` | | `renounceOwnership` | `0x715018a6` | -| `requestBlockedCredits` | `0xb62d25ac` | | `requestOwnershipHandover` | `0x25692962` | | `rescueFunds` | `0x6ccae054` | -| `sbType` | `0x745de344` | -| `setAddress` | `0x85bf312c` | | `setChainMaxFees` | `0x7a3c3970` | | `setFeesPlug` | `0xd6a9a8b7` | | `setFeesPool` | `0xd6684588` | @@ -182,8 +117,8 @@ | `transfer` | `0xa9059cbb` | | `transferFrom` | `0x23b872dd` | | `transferOwnership` | `0xf2fde38b` | -| `unblockAndAssignCredits` | `0x01958181` | -| `unblockCredits` | `0xa0b32314` | +| `unblockAndAssignCredits` | `0xc330b8de` | +| `unblockCredits` | `0x2f1dfdda` | | `unwrap` | `0x7647691d` | | `userBlockedCredits` | `0x17fa5fb9` | | `watcher__` | `0x300bb063` | @@ -215,8 +150,6 @@ | `cancelOwnershipHandover` | `0x54d1f13d` | | `completeOwnershipHandover` | `0xf04e283e` | | `contractAddresses` | `0xf689e892` | -| `defaultAuctionManager` | `0x8f27cdc6` | -| `deployForwarder__` | `0xd4e3b034` | | `feesManager__` | `0x70568b58` | | `initialize` | `0xc4d66de8` | | `owner` | `0x8da5cb5b` | @@ -226,8 +159,6 @@ | `rescueFunds` | `0x6ccae054` | | `setAsyncDeployer` | `0xcb0ffff8` | | `setContractAddress` | `0xe001f841` | -| `setDefaultAuctionManager` | `0xede8b4b5` | -| `setDeployForwarder` | `0xaeaee8a6` | | `setFeesManager` | `0x1c89382a` | | `setWatcher` | `0x24f48bc5` | | `transferOwnership` | `0xf2fde38b` | @@ -244,12 +175,11 @@ | `asyncPromiseImplementation` | `0x59531b8d` | | `cancelOwnershipHandover` | `0x54d1f13d` | | `completeOwnershipHandover` | `0xf04e283e` | -| `deployAsyncPromiseContract` | `0x9851be0b` | -| `deployForwarder__` | `0xd4e3b034` | +| `deployAsyncPromiseContract` | `0x07613b26` | | `feesManager__` | `0x70568b58` | | `forwarderBeacon` | `0x945709ae` | | `forwarderImplementation` | `0xe38d60a1` | -| `getAsyncPromiseAddress` | `0x104f39b4` | +| `getAsyncPromiseAddress` | `0xd2397050` | | `getForwarderAddress` | `0x9c038b01` | | `getOrDeployForwarderContract` | `0xe9bf1edf` | | `initialize` | `0x485cc955` | @@ -265,47 +195,27 @@ ## AsyncPromise -| Function | Signature | -| ------------------- | ------------ | -| `addressResolver__` | `0x6a750469` | -| `asyncDeployer__` | `0x2a39e801` | -| `callbackData` | `0xef44c272` | -| `callbackSelector` | `0x2764f92f` | -| `deployForwarder__` | `0xd4e3b034` | -| `exceededMaxCopy` | `0xaf598c7c` | -| `feesManager__` | `0x70568b58` | -| `initialize` | `0x0ece6089` | -| `localInvoker` | `0x45eb87f4` | -| `markOnchainRevert` | `0xd0e7af1b` | -| `markResolved` | `0x822d5d1f` | -| `requestCount` | `0x5badbe4c` | -| `rescueFunds` | `0x6ccae054` | -| `returnData` | `0xebddbaf6` | -| `state` | `0xc19d93fb` | -| `then` | `0x0bf2ba15` | -| `watcher__` | `0x300bb063` | - -## DeployForwarder - -| Function | Signature | -| ---------------------------- | ------------ | -| `addressResolver__` | `0x6a750469` | -| `asyncDeployer__` | `0x2a39e801` | -| `cancelOwnershipHandover` | `0x54d1f13d` | -| `completeOwnershipHandover` | `0xf04e283e` | -| `deploy` | `0x940f11af` | -| `deployForwarder__` | `0xd4e3b034` | -| `deployerSwitchboardType` | `0xaa381f9a` | -| `feesManager__` | `0x70568b58` | -| `initialize` | `0x6133f985` | -| `owner` | `0x8da5cb5b` | -| `ownershipHandoverExpiresAt` | `0xfee81cf4` | -| `renounceOwnership` | `0x715018a6` | -| `requestOwnershipHandover` | `0x25692962` | -| `rescueFunds` | `0x6ccae054` | -| `saltCounter` | `0xa04c6809` | -| `transferOwnership` | `0xf2fde38b` | -| `watcher__` | `0x300bb063` | +| Function | Signature | +| ----------------------- | ------------ | +| `addressResolver__` | `0x6a750469` | +| `asyncDeployer__` | `0x2a39e801` | +| `callbackData` | `0xef44c272` | +| `callbackSelector` | `0x2764f92f` | +| `error` | `0x08fb3c19` | +| `exceededMaxCopy` | `0xaf598c7c` | +| `feesManager__` | `0x70568b58` | +| `initialize` | `0x88b117b3` | +| `localInvoker` | `0x45eb87f4` | +| `markOnchainRevert` | `0xd0e7af1b` | +| `markResolved` | `0x822d5d1f` | +| `payloadId` | `0x03806d9d` | +| `rescueFunds` | `0x6ccae054` | +| `returnData` | `0xebddbaf6` | +| `revertHandlerData` | `0xd0b8f467` | +| `revertHandlerSelector` | `0xc2d97923` | +| `state` | `0xc19d93fb` | +| `then` | `0x0bf2ba15` | +| `watcher__` | `0x300bb063` | ## Forwarder @@ -314,7 +224,6 @@ | `addressResolver__` | `0x6a750469` | | `asyncDeployer__` | `0x2a39e801` | | `chainSlug` | `0xb349ba65` | -| `deployForwarder__` | `0xd4e3b034` | | `feesManager__` | `0x70568b58` | | `getChainSlug` | `0x0b8c6568` | | `getOnChainAddress` | `0x9da48789` | @@ -357,30 +266,6 @@ | `transfer` | `0xa9059cbb` | | `transferFrom` | `0x23b872dd` | -## ContractFactoryPlug - -| Function | Signature | -| ---------------------------- | ------------ | -| `appGatewayId` | `0x1c335f49` | -| `cancelOwnershipHandover` | `0x54d1f13d` | -| `completeOwnershipHandover` | `0xf04e283e` | -| `connectSocket` | `0x943103c3` | -| `deployContract` | `0xff8caf37` | -| `getAddress` | `0x94ca2cb5` | -| `grantRole` | `0x2f2ff15d` | -| `hasRole` | `0x91d14854` | -| `initSocket` | `0x18b7ff72` | -| `isSocketInitialized` | `0x9a7d9a9b` | -| `overrides` | `0x4a85f041` | -| `owner` | `0x8da5cb5b` | -| `ownershipHandoverExpiresAt` | `0xfee81cf4` | -| `renounceOwnership` | `0x715018a6` | -| `requestOwnershipHandover` | `0x25692962` | -| `rescueFunds` | `0x6ccae054` | -| `revokeRole` | `0xd547741f` | -| `socket__` | `0xc6a261d2` | -| `transferOwnership` | `0xf2fde38b` | - ## FeesPlug | Function | Signature | @@ -411,163 +296,57 @@ | `whitelistedTokens` | `0xdaf9c210` | | `withdrawFees` | `0xe55dc4e6` | -## Configurations - -| Function | Signature | -| ---------------------------- | ------------ | -| `cancelOwnershipHandover` | `0x54d1f13d` | -| `completeOwnershipHandover` | `0xf04e283e` | -| `getPlugConfigs` | `0x25945c1a` | -| `initialize` | `0x485cc955` | -| `isValidPlug` | `0x00f9b9f4` | -| `owner` | `0x8da5cb5b` | -| `ownershipHandoverExpiresAt` | `0xfee81cf4` | -| `renounceOwnership` | `0x715018a6` | -| `requestOwnershipHandover` | `0x25692962` | -| `rescueFunds` | `0x6ccae054` | -| `setAppGatewayConfigs` | `0x831c8195` | -| `setIsValidPlug` | `0x4842c37a` | -| `setSocket` | `0x38d4de67` | -| `setSwitchboard` | `0x4fc059a0` | -| `sockets` | `0xb44a23ab` | -| `switchboards` | `0xaa539546` | -| `transferOwnership` | `0xf2fde38b` | -| `verifyConnections` | `0x36cb19fb` | -| `watcher__` | `0x300bb063` | - -## PromiseResolver - -| Function | Signature | -| ----------------- | ------------ | -| `initialize` | `0xc4d66de8` | -| `markRevert` | `0x56501015` | -| `rescueFunds` | `0x6ccae054` | -| `resolvePromises` | `0xbf8484b8` | -| `watcher__` | `0x300bb063` | - -## RequestHandler - -| Function | Signature | -| ----------------------------- | ------------ | -| `addressResolver__` | `0x6a750469` | -| `assignTransmitter` | `0xae5e9c48` | -| `asyncDeployer__` | `0x2a39e801` | -| `cancelOwnershipHandover` | `0x54d1f13d` | -| `cancelRequest` | `0x3b5fd6fb` | -| `cancelRequestForReverts` | `0x82970278` | -| `completeOwnershipHandover` | `0xf04e283e` | -| `deployForwarder__` | `0xd4e3b034` | -| `feesManager__` | `0x70568b58` | -| `getBatchPayloadIds` | `0xfd83cd1f` | -| `getPayload` | `0xb48fd0fe` | -| `getPrecompileFees` | `0xabac263c` | -| `getRequest` | `0xcf39abf6` | -| `getRequestBatchIds` | `0xe138fadb` | -| `handleRevert` | `0xcc88d3f9` | -| `increaseFees` | `0x10205541` | -| `initialize` | `0x485cc955` | -| `nextBatchCount` | `0x333a3963` | -| `nextRequestCount` | `0xfef72893` | -| `owner` | `0x8da5cb5b` | -| `ownershipHandoverExpiresAt` | `0xfee81cf4` | -| `payloadCounter` | `0x550ce1d5` | -| `precompiles` | `0x9932450b` | -| `renounceOwnership` | `0x715018a6` | -| `requestOwnershipHandover` | `0x25692962` | -| `rescueFunds` | `0x6ccae054` | -| `setPrecompile` | `0x122e0042` | -| `setRequestPayloadCountLimit` | `0x8526582b` | -| `submitRequest` | `0xf91ba7cc` | -| `transferOwnership` | `0xf2fde38b` | -| `updateRequest` | `0x46464471` | -| `watcher__` | `0x300bb063` | - ## Watcher | Function | Signature | | ---------------------------- | ------------ | +| `addPayloadData` | `0x6c608e9e` | | `addressResolver__` | `0x6a750469` | -| `appGatewayTemp` | `0x1394c029` | | `asyncDeployer__` | `0x2a39e801` | | `callAppGateways` | `0x0050bef1` | +| `cancelExecution` | `0x5bfc52ba` | | `cancelOwnershipHandover` | `0x54d1f13d` | -| `cancelRequest` | `0x50ad0779` | -| `clearQueue` | `0xf22cb874` | | `completeOwnershipHandover` | `0xf04e283e` | -| `configurations__` | `0x52a3bbeb` | -| `deployForwarder__` | `0xd4e3b034` | +| `currentPayloadId` | `0x86b4bd7e` | | `evmxSlug` | `0x8bae77c2` | +| `executePayload` | `0x63946d7b` | | `feesManager__` | `0x70568b58` | -| `getCurrentRequestCount` | `0x5715abbb` | -| `getPayloadParams` | `0xae5eeb77` | +| `getCurrentPayloadId` | `0x6c927966` | +| `getPayload` | `0xb48fd0fe` | +| `getPlugConfigs` | `0x25945c1a` | | `getPrecompileFees` | `0xabac263c` | -| `getRequestParams` | `0x71263d0d` | -| `increaseFees` | `0xe9b304da` | -| `initialize` | `0xaaf7fc1a` | +| `increaseFees` | `0xf0f0beba` | +| `initialize` | `0xd7954788` | | `isAppGatewayCalled` | `0xa79da6c7` | | `isNonceUsed` | `0x5d00bb12` | -| `isWatcher` | `0x84785ecd` | +| `isValidPlug` | `0x00f9b9f4` | +| `latestAppGateway` | `0x9148c40c` | | `latestAsyncPromise` | `0xb8a8ba52` | +| `markRevert` | `0x56501015` | +| `nextPayloadCount` | `0x1a82285a` | | `owner` | `0x8da5cb5b` | | `ownershipHandoverExpiresAt` | `0xfee81cf4` | -| `payloadQueue` | `0x74f00ffb` | -| `promiseResolver__` | `0xdee152be` | -| `queue` | `0x65967f1a` | -| `queueAndSubmit` | `0x9d4c9df7` | +| `payloadData` | `0xdc984dd4` | +| `precompiles` | `0x9932450b` | | `renounceOwnership` | `0x715018a6` | -| `requestHandler__` | `0x55184561` | | `requestOwnershipHandover` | `0x25692962` | -| `rescueFunds` | `0xa58c6fc5` | -| `resetIsAppGatewayCalled` | `0xd19cd269` | -| `setCoreContracts` | `0xefa891c4` | +| `resolvePayload` | `0x2b76024c` | +| `setAppGatewayConfigs` | `0xf06913dc` | | `setIsValidPlug` | `0x06c0a40a` | -| `setTriggerFees` | `0xaeb30511` | -| `submitRequest` | `0x4890b5ef` | +| `setPrecompile` | `0x122e0042` | +| `setSocket` | `0x38d4de67` | +| `setSwitchboard` | `0x4fc059a0` | +| `setTriggerFees` | `0x752ad486` | +| `sockets` | `0xb44a23ab` | +| `switchboards` | `0xaa539546` | | `transferOwnership` | `0xf2fde38b` | +| `transmitter` | `0xcec46f6c` | | `triggerFees` | `0x73f76aec` | | `triggerFromChainSlug` | `0xd12b4f12` | | `triggerFromPlug` | `0x3b847d12` | -| `watcherMultiCall` | `0x8021e82b` | +| `verifyConnections` | `0x36cb19fb` | | `watcher__` | `0x300bb063` | -## CCTPSwitchboard - -| Function | Signature | -| -------------------------------- | ------------ | -| `addRemoteEndpoint` | `0x7d396da5` | -| `allowPacket` | `0x21e9ec80` | -| `allowPayload` | `0x31c23f66` | -| `attest` | `0x63671b60` | -| `attestVerifyAndProveExecutions` | `0x6c913e2f` | -| `cancelOwnershipHandover` | `0x54d1f13d` | -| `chainSlug` | `0xb349ba65` | -| `chainSlugToRemoteEndpoint` | `0xa4500424` | -| `completeOwnershipHandover` | `0xf04e283e` | -| `domainToRemoteEndpoint` | `0xc24964fe` | -| `getTransmitter` | `0x73e7d880` | -| `grantRole` | `0x2f2ff15d` | -| `handleReceiveMessage` | `0x96abeb70` | -| `hasRole` | `0x91d14854` | -| `isAttested` | `0xc13c2396` | -| `isRemoteExecuted` | `0x0cd97747` | -| `isSyncedOut` | `0x5ae5dfd6` | -| `messageTransmitter` | `0x7b04c181` | -| `owner` | `0x8da5cb5b` | -| `ownershipHandoverExpiresAt` | `0xfee81cf4` | -| `processTrigger` | `0x7f3352bc` | -| `proveRemoteExecutions` | `0x893289f8` | -| `registerSwitchboard` | `0x74f5b1fc` | -| `remoteExecutedDigests` | `0xecbf77d9` | -| `renounceOwnership` | `0x715018a6` | -| `requestOwnershipHandover` | `0x25692962` | -| `rescueFunds` | `0x6ccae054` | -| `revokeRole` | `0xd547741f` | -| `socket__` | `0xc6a261d2` | -| `switchboardId` | `0xd3be4120` | -| `syncOut` | `0x69a60ff0` | -| `transferOwnership` | `0xf2fde38b` | -| `verifyAttestations` | `0x6f30514c` | - ## FastSwitchboard | Function | Signature | @@ -629,18 +408,17 @@ ## ReadPrecompile -| Function | Signature | -| ------------------------------ | ------------ | -| `expiryTime` | `0x99bc0aea` | -| `getPrecompileFees` | `0xb7a3d04c` | -| `handlePayload` | `0x62974d96` | -| `readFees` | `0xe06357a2` | -| `rescueFunds` | `0x6ccae054` | -| `resolvePayload` | `0x7f0b2207` | -| `setExpiryTime` | `0x30fc4cff` | -| `setFees` | `0x3d18678e` | -| `validateAndGetPrecompileData` | `0x997f5bef` | -| `watcher__` | `0x300bb063` | +| Function | Signature | +| ------------------- | ------------ | +| `expiryTime` | `0x99bc0aea` | +| `getPrecompileFees` | `0xb7a3d04c` | +| `handlePayload` | `0xe801184c` | +| `readFees` | `0xe06357a2` | +| `rescueFunds` | `0x6ccae054` | +| `resolvePayload` | `0xa6e2bb76` | +| `setExpiryTime` | `0x30fc4cff` | +| `setFees` | `0x3d18678e` | +| `watcher__` | `0x300bb063` | ## SchedulePrecompile @@ -648,17 +426,16 @@ | ------------------------------ | ------------ | | `expiryTime` | `0x99bc0aea` | | `getPrecompileFees` | `0xb7a3d04c` | -| `handlePayload` | `0x62974d96` | +| `handlePayload` | `0xe801184c` | | `maxScheduleDelayInSeconds` | `0x3ef01cdb` | | `rescueFunds` | `0x6ccae054` | -| `resolvePayload` | `0x7f0b2207` | +| `resolvePayload` | `0xa6e2bb76` | | `scheduleCallbackFees` | `0x4c5b6007` | | `scheduleFeesPerSecond` | `0x852a74c1` | | `setExpiryTime` | `0x30fc4cff` | | `setMaxScheduleDelayInSeconds` | `0x12953318` | | `setScheduleCallbackFees` | `0xec8fd71e` | | `setScheduleFeesPerSecond` | `0x28e59e57` | -| `validateAndGetPrecompileData` | `0x997f5bef` | | `watcher__` | `0x300bb063` | ## WritePrecompile @@ -673,22 +450,19 @@ | `expiryTime` | `0x99bc0aea` | | `getDigest` | `0x3554edc7` | | `getPrecompileFees` | `0xb7a3d04c` | -| `getPrevBatchDigestHash` | `0x372863a1` | -| `handlePayload` | `0x62974d96` | +| `handlePayload` | `0xe801184c` | | `initialize` | `0xeb990c59` | | `owner` | `0x8da5cb5b` | | `ownershipHandoverExpiresAt` | `0xfee81cf4` | | `renounceOwnership` | `0x715018a6` | | `requestOwnershipHandover` | `0x25692962` | | `rescueFunds` | `0x6ccae054` | -| `resolvePayload` | `0x7f0b2207` | -| `setContractFactoryPlugs` | `0x8b198f5c` | +| `resolvePayload` | `0xa6e2bb76` | | `setExpiryTime` | `0x30fc4cff` | | `setFees` | `0x3d18678e` | | `transferOwnership` | `0xf2fde38b` | | `updateChainMaxMsgValueLimits` | `0x6a7aa6ac` | | `uploadProof` | `0x81b48fcf` | -| `validateAndGetPrecompileData` | `0x997f5bef` | | `watcherProofs` | `0x3fa3166b` | | `watcher__` | `0x300bb063` | | `writeFees` | `0x5c664aeb` | diff --git a/contracts/evmx/helpers/AddressResolverUtil.sol b/contracts/evmx/helpers/AddressResolverUtil.sol index 1327092f..6517f4ed 100644 --- a/contracts/evmx/helpers/AddressResolverUtil.sol +++ b/contracts/evmx/helpers/AddressResolverUtil.sol @@ -28,7 +28,9 @@ abstract contract AddressResolverUtil { /// @notice Restricts function access to the watcher owner function isWatcher() internal view returns (bool) { - return msg.sender == address(watcher__()) || msg.sender == watcher__().owner(); + return + msg.sender == address(watcher__()) || + msg.sender == IWatcherOwner(address(watcher__())).owner(); } /// @notice Gets the watcher precompile contract interface diff --git a/contracts/evmx/interfaces/IWatcher.sol b/contracts/evmx/interfaces/IWatcher.sol index 7705050f..cf732c05 100644 --- a/contracts/evmx/interfaces/IWatcher.sol +++ b/contracts/evmx/interfaces/IWatcher.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.21; -import {RawPayload, Payload, PromiseReturnData, TriggerParams} from "../../utils/common/Structs.sol"; +import {RawPayload, Payload, PromiseReturnData, TriggerParams, WatcherMultiCallParams} from "../../utils/common/Structs.sol"; import {IPrecompile} from "./IPrecompile.sol"; import {IConfigurations} from "./IConfigurations.sol"; interface IWatcher is IConfigurations { - event PayloadStored(bytes32 indexed payloadId, bytes4 callType); + event PayloadSubmitted(Payload payload); event PayloadResolved(bytes32 indexed payloadId); event PromiseNotResolved(bytes32 indexed payloadId, address asyncPromise); event PromiseResolved(bytes32 indexed payloadId, address asyncPromise); @@ -21,8 +21,6 @@ interface IWatcher is IConfigurations { function evmxSlug() external view returns (uint32); - function owner() external view returns (address); - function nextPayloadCount() external view returns (uint256); function currentPayloadId() external view returns (bytes32); @@ -39,24 +37,15 @@ interface IWatcher is IConfigurations { function triggerFromPlug() external view returns (bytes32); - function initialize(uint32 evmxSlug_, address owner_, address addressResolver_) external; - function addPayloadData(RawPayload calldata rawPayload_, address appGateway_) external; function executePayload() external returns (address asyncPromise); - function resolvePayload( - bytes32 payloadId, - PromiseReturnData memory resolvedPromise_, - uint256 feesUsed_ - ) external; + function resolvePayload(WatcherMultiCallParams memory params_) external; - function markRevert( - PromiseReturnData memory resolvedPromise_, - bool isRevertingOnchain_ - ) external; + function markRevert(WatcherMultiCallParams memory params_) external; - function callAppGateways(TriggerParams memory params_) external; + function callAppGateways(WatcherMultiCallParams memory params_) external; function increaseFees(bytes32 payloadId_, uint256 newMaxFees_) external; @@ -64,7 +53,7 @@ interface IWatcher is IConfigurations { function getCurrentPayloadId( uint32 chainSlug_, - uint32 switchboardType_ + bytes32 switchboardType_ ) external view returns (bytes32); function getPayload(bytes32 payloadId) external view returns (Payload memory); @@ -78,3 +67,7 @@ interface IWatcher is IConfigurations { bytes memory precompileData_ ) external view returns (uint256); } + +interface IWatcherOwner { + function owner() external view returns (address); +} diff --git a/contracts/evmx/watcher/Configurations.sol b/contracts/evmx/watcher/Configurations.sol index 6c5dfb1e..6ea80ada 100644 --- a/contracts/evmx/watcher/Configurations.sol +++ b/contracts/evmx/watcher/Configurations.sol @@ -10,7 +10,7 @@ import "../../utils/common/Converters.sol"; import "../../utils/common/Structs.sol"; import "solady/utils/ECDSA.sol"; -abstract contract ConfigurationsStorage is IConfigurations { +abstract contract ConfigurationsStorage is IWatcher { // slots [0-49] reserved for gap uint256[50] _gap_before; @@ -46,7 +46,7 @@ abstract contract ConfigurationsStorage is IConfigurations { /// @title Configurations /// @notice Configuration contract for the Watcher Precompile system /// @dev Handles the mapping between networks, plugs, and app gateways for payload execution -contract Configurations is ConfigurationsStorage, Ownable, AddressResolverUtil { +abstract contract Configurations is ConfigurationsStorage, Ownable, AddressResolverUtil { /// @notice Emitted when a new plug is configured for an app gateway /// @param appGatewayId The id of the app gateway /// @param chainSlug The identifier of the destination network diff --git a/contracts/evmx/watcher/Watcher.sol b/contracts/evmx/watcher/Watcher.sol index 8c9e6452..4630a74b 100644 --- a/contracts/evmx/watcher/Watcher.sol +++ b/contracts/evmx/watcher/Watcher.sol @@ -32,19 +32,6 @@ contract Watcher is Initializable, Configurations { RawPayload public payloadData; address public transmitter; - event PrecompileSet(bytes4 callType, address precompile); - event PayloadStored(bytes32 indexed payloadId, bytes4 callType); - event PayloadResolved(bytes32 indexed payloadId); - event PayloadCancelled(bytes32 indexed payloadId); - event PayloadSettled(bytes32 indexed payloadId); - event FeesIncreased(bytes32 indexed payloadId, uint256 newMaxFees); - event PromiseNotResolved(bytes32 indexed payloadId, address asyncPromise); - event PromiseResolved(bytes32 indexed payloadId, address asyncPromise); - event MarkedRevert(bytes32 indexed payloadId, bool isRevertingOnchain); - event TriggerFailed(bytes32 indexed triggerId); - event TriggerSucceeded(bytes32 indexed triggerId); - event TriggerFeesSet(uint256 triggerFees); - error PayloadAlreadyCancelled(); error PayloadAlreadySettled(); error AppGatewayMismatch(); @@ -112,24 +99,32 @@ contract Watcher is Initializable, Configurations { isPayloadCancelled: false, isPayloadExecuted: false, payloadPointer: nextPayloadCount++, - resolvedAt: 0, - deadline: deadline, - precompileData: precompileData, - payloadId: currentPayloadId, - appGateway: latestAppGateway, asyncPromise: asyncPromise, + appGateway: latestAppGateway, + consumeFrom: payloadData.overrideParams.consumeFrom, + payloadId: currentPayloadId, + watcherFees: fees, maxFees: payloadData.overrideParams.maxFees, - consumeFrom: payloadData.overrideParams.consumeFrom + resolvedAt: 0, + deadline: deadline, + precompileData: precompileData }); - emit PayloadStored(currentPayloadId, payloadData.overrideParams.callType); + emit PayloadSubmitted(_payloads[currentPayloadId]); + } + + function resolvePayload(WatcherMultiCallParams memory params_) external { + _validateSignature(address(this), params_.data, params_.nonce, params_.signature); + (PromiseReturnData memory resolvedPromise, uint256 feesUsed) = abi.decode(params_.data, (PromiseReturnData, uint256)); + + _resolvePayload(resolvedPromise, feesUsed); } /// @notice Mark a payload as resolved and complete its parent request when all are done. - function resolvePayload( + function _resolvePayload( PromiseReturnData memory resolvedPromise_, uint256 feesUsed_ - ) external onlyWatcher { + ) internal { Payload storage p = _payloads[resolvedPromise_.payloadId]; if (p.isPayloadExecuted) return; @@ -160,15 +155,22 @@ contract Watcher is Initializable, Configurations { return true; } + function markRevert(WatcherMultiCallParams memory params_) external { + _validateSignature(address(this), params_.data, params_.nonce, params_.signature); + (PromiseReturnData memory resolvedPromise, bool isRevertingOnchain) = abi.decode(params_.data, (PromiseReturnData, bool)); + + _markRevert(resolvedPromise, isRevertingOnchain); + } + /// @notice Marks a request as reverting /// @param isRevertingOnchain_ Whether the request is reverting onchain /// @param resolvedPromise_ The resolved promise /// @dev This function marks a request as reverting /// @dev It cancels the request and marks the promise as onchain reverting if the request is reverting onchain - function markRevert( + function _markRevert( PromiseReturnData memory resolvedPromise_, bool isRevertingOnchain_ - ) external onlyWatcher { + ) internal { // Get payload params from Watcher bytes32 payloadId = resolvedPromise_.payloadId; Payload memory payloadParams = _payloads[payloadId]; @@ -258,6 +260,26 @@ contract Watcher is Initializable, Configurations { emit PayloadSettled(payloadId_); } + function watcherMultiCall(WatcherMultiCallParams[] memory params_) external payable { + for (uint40 i = 0; i < params_.length; i++) { + _validateSignature( + params_[i].contractAddress, + params_[i].data, + params_[i].nonce, + params_[i].signature + ); + + // call the contract + (bool success, , ) = params_[i].contractAddress.tryCall( + 0, + gasleft(), + 0, + params_[i].data + ); + if (!success) revert CallFailed(); + } + } + function getCurrentPayloadId( uint32 chainSlug_, bytes32 switchboardType_ @@ -278,7 +300,7 @@ contract Watcher is Initializable, Configurations { function setPrecompile(bytes4 callType_, IPrecompile precompile_) external onlyOwner { precompiles[callType_] = precompile_; - emit PrecompileSet(callType_, address(precompile_)); + emit PrecompileSet(callType_, precompile_); } function getPrecompileFees( diff --git a/contracts/evmx/watcher/precompiles/WritePrecompile.sol b/contracts/evmx/watcher/precompiles/WritePrecompile.sol index acdb6e49..c067a1a2 100644 --- a/contracts/evmx/watcher/precompiles/WritePrecompile.sol +++ b/contracts/evmx/watcher/precompiles/WritePrecompile.sol @@ -66,8 +66,10 @@ contract WritePrecompile is WritePrecompileStorage, Initializable, Ownable { event ExpiryTimeSet(uint256 expiryTime); modifier onlyWatcher() { - if (msg.sender != watcher__.owner() && msg.sender != address(watcher__)) - revert OnlyWatcherAllowed(); + if ( + msg.sender != IWatcherOwner(address(watcher__)).owner() && + msg.sender != address(watcher__) + ) revert OnlyWatcherAllowed(); _; } diff --git a/contracts/protocol/switchboard/FastSwitchboard.sol b/contracts/protocol/switchboard/FastSwitchboard.sol index 3995a380..aec79447 100644 --- a/contracts/protocol/switchboard/FastSwitchboard.sol +++ b/contracts/protocol/switchboard/FastSwitchboard.sol @@ -20,7 +20,7 @@ contract FastSwitchboard is SwitchboardBase { // Error emitted when watcher is not valid error WatcherNotFound(); // Event emitted when watcher attests a payload - event Attested(bytes32 payloadId_, address watcher); + event Attested(bytes32 digest, address watcher); /** * @dev Constructor function for the FastSwitchboard contract diff --git a/contracts/utils/common/Structs.sol b/contracts/utils/common/Structs.sol index 86edf907..ae0b98ae 100644 --- a/contracts/utils/common/Structs.sol +++ b/contracts/utils/common/Structs.sol @@ -155,6 +155,7 @@ struct Payload { address appGateway; address consumeFrom; bytes32 payloadId; + uint256 watcherFees; uint256 maxFees; uint256 resolvedAt; uint256 deadline; diff --git a/deprecated/script/helpers/DepositCredit.s.sol b/deprecated/script/helpers/DepositCredit.s.sol index b8d432f8..58cce51e 100644 --- a/deprecated/script/helpers/DepositCredit.s.sol +++ b/deprecated/script/helpers/DepositCredit.s.sol @@ -9,7 +9,7 @@ import {TestUSDC} from "../../contracts/evmx/mocks/TestUSDC.sol"; // source .env && forge script script/helpers/DepositCreditAndNative.s.sol --broadcast --skip-simulation contract DepositCredit is Script { function run() external { - uint256 feesAmount = 2000000; // 2 USDC + uint256 feesAmount = 10000000; // 10 USDC vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); uint256 privateKey = vm.envUint("PRIVATE_KEY"); diff --git a/foundry.toml b/foundry.toml index c21573c5..90a0e616 100644 --- a/foundry.toml +++ b/foundry.toml @@ -10,28 +10,19 @@ evm_version = 'paris' via_ir = false [labels] -0x3d6EB76db49BF4b9aAf01DBB79fCEC2Ee71e44e2 = "AddressResolver" -0xe37aFa3Aa95E153B8dD0FE8456CBF345cB4C51F7 = "AddressResolverImpl" -0xFA19dDA03A79f8Aef83C0505BF70ECa0Ac42608E = "AsyncDeployer" -0xb3A5132Df72F1597ab474d73d387ecF8647af669 = "AsyncDeployerImpl" -0xe2B1A11E8473095581DEF8d9D11eC63BBdd62ceE = "AsyncPromiseImpl" -0xcd5e9029a73890A5A3146bAddd272D65ac11521c = "AuctionManager" -0xB604FBcA01897315D2d62A346DBf29796A4825D9 = "AuctionManagerImpl" -0x71B89bA78B9431d4E984893cD6885d39AD6c3c7A = "Configurations" -0x117c63A8c9a980ddC60B2bF2b4701C9267f66394 = "ConfigurationsImpl" -0xb6E6e6FCd2636B83C443628f3f5e42cB5Fcd44fD = "DeployForwarder" -0xf05f680E0611b81eD0255A1Cd829540504765711 = "DeployForwarderImpl" -0x4023941D9AB563b1c4d447B3f2A9dd2F1eF19fCA = "ERC1967Factory" -0xB63ab15c208A16a0480036C06e8828A4682E0B34 = "FeesManager" -0x9f3CDba2262DF94e415E092A4228ee7E6846ea1b = "FeesManagerImpl" -0x3B1f4ABA1667EeB992B623E7c6d119728cEd3b15 = "FeesPool" -0xB1a504eC5C2d8206Fc73a46EeF5E5018585Eb240 = "ForwarderImpl" -0xFB349dcc5A1cB87Ff3A2b91C343814647AE820FC = "PromiseResolver" -0x74D52027137a450b68315478AAE4528Ba839ea13 = "ReadPrecompile" -0x3C183Ad26A11A6691d43D031Fae3D51DaDC643Df = "RequestHandler" -0x0303B6f54afA36B0808FDE6aaE9c3eD271b01119 = "RequestHandlerImpl" -0xEE7b72D53FeC4Bed9F56CcEaD49217d152A22aC5 = "SchedulePrecompile" -0x2566Bef2e914c7482d6FCB4955403fb0865951A5 = "Watcher" -0x03029500B038980745c5a671f271340CF9AF5830 = "WatcherImpl" -0xc6506b1C3f34297B4de32f08d8d50CB0E9e64842 = "WritePrecompile" -0xcd460687fe2a74ddEE8f2E3d791e1df306713353 = "WritePrecompileImpl" +0xAaee0de4a720e8733a397a3B57fcE3B306Cc7dAe = "AddressResolver" +0x8f1BE258CF821f11fdCC392DAe314BF0781b2CE4 = "AddressResolverImpl" +0x0cd70607156B1Bb13b0b8eA84d4eb7EbcF7D910A = "AsyncDeployer" +0x146e90184C8BF39CA625B87455671f5F847e562D = "AsyncDeployerImpl" +0xd1c545ed0e7556e0ff67053D2Bf238e47525770C = "AsyncPromiseImpl" +0x40CFF44CaBF79fA755cBAE57feDD8a0e7df66827 = "ERC1967Factory" +0xC5d76C44DbAd3d6aAd28D0983E5ACbc48F40561c = "FeesManager" +0x9B2aAA7aA9500CF3177d0607109dB8Cca13c39c1 = "FeesManagerImpl" +0x5454EaAcF0088F90831a5b6BE48E33b1519436A6 = "FeesPool" +0xD39b436c11B24450549a156Fe85EC3D29da7FB75 = "ForwarderImpl" +0xb870CAf474e88d231afB2ABFc56d76E454d3645f = "ReadPrecompile" +0x1526F70B3C5dD3FF9758f3aAD41E8A8edB40A057 = "SchedulePrecompile" +0x2A6DA10F3B3175Cddf0879527e5AAb94f31980F5 = "Watcher" +0xEEB8A591090d3A73E07d597e418A0Bc5BdF2810b = "WatcherImpl" +0x618F6c88Db4EB1D72427C9d92CD20ed9b862F0fe = "WritePrecompile" +0xBB77f2a581f26041f3cc343d33Cf0b9F6d250F21 = "WritePrecompileImpl" diff --git a/hardhat-scripts/config/config.ts b/hardhat-scripts/config/config.ts index f6eb1e45..ad5c5333 100644 --- a/hardhat-scripts/config/config.ts +++ b/hardhat-scripts/config/config.ts @@ -26,17 +26,13 @@ interface ModeConfig { // Configuration for each deployment mode const MODE_CONFIGS: Record = { [DeploymentMode.LOCAL]: { - chains: [ - ChainSlug.ARBITRUM_SEPOLIA, - ChainSlug.OPTIMISM_SEPOLIA, - // ChainSlug.BASE_SEPOLIA, - ], + chains: [ChainSlug.ARBITRUM_SEPOLIA, ChainSlug.OPTIMISM_SEPOLIA], feesPlugChains: [], // Will use chains by default - evmChainId: 7625382, + evmChainId: 14323, addresses: { - watcher: "0xb62505feacC486e809392c65614Ce4d7b051923b", - transmitter: "0x138e9840861C983DC0BB9b3e941FB7C0e9Ade320", - socketOwner: "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", + watcher: "0x4512EB56716a2bcBE25bee93dCbb05B95FF603b0", + transmitter: "0x97a1C3e929Ff1246b7347d4e8Ed51748Bbe1d39a", + socketOwner: "0x4512EB56716a2bcBE25bee93dCbb05B95FF603b0", }, }, [DeploymentMode.DEV]: { @@ -67,9 +63,9 @@ const MODE_CONFIGS: Record = { feesPlugChains: [], // Will use chains by default evmChainId: 14323, addresses: { - watcher: "0xb62505feacC486e809392c65614Ce4d7b051923b", - transmitter: "0x138e9840861C983DC0BB9b3e941FB7C0e9Ade320", - socketOwner: "0x3339Cf48f1F9cf31b6F8c2664d144c7444eBBB18", + watcher: "0x4512EB56716a2bcBE25bee93dCbb05B95FF603b0", + transmitter: "0x97a1C3e929Ff1246b7347d4e8Ed51748Bbe1d39a", + socketOwner: "0x4512EB56716a2bcBE25bee93dCbb05B95FF603b0", }, }, [DeploymentMode.STAGE]: { @@ -224,6 +220,8 @@ export const cronOnlyChains: Array = [ // Derived chain lists (depend on current mode) export const IndexerHighChains: Array = [ + ChainSlug.ARBITRUM_SEPOLIA, + ChainSlug.OPTIMISM_SEPOLIA, ChainSlug.MAINNET, ChainSlug.OPTIMISM, ChainSlug.ARBITRUM, diff --git a/hardhat-scripts/constants/feeConstants.ts b/hardhat-scripts/constants/feeConstants.ts index b570ddc5..5446c48a 100644 --- a/hardhat-scripts/constants/feeConstants.ts +++ b/hardhat-scripts/constants/feeConstants.ts @@ -342,7 +342,7 @@ export const tokens: TokenMap = { }; export const feePools: { [key: string]: string } = { - [DeploymentMode.LOCAL]: "0x9De353dD1131aB4e502590D3a1832652FA316268", + [DeploymentMode.LOCAL]: "", [DeploymentMode.DEV]: "0x13A3018920c7b56B20dd34E29C298121025E6de4", [DeploymentMode.STAGE]: "0xC8d803B7c1719cdF21392405879D1B56398045C4", [DeploymentMode.PROD]: "0x3B1f4ABA1667EeB992B623E7c6d119728cEd3b15", diff --git a/hardhat-scripts/constants/types.ts b/hardhat-scripts/constants/types.ts index 1a229d3c..53eadcc8 100644 --- a/hardhat-scripts/constants/types.ts +++ b/hardhat-scripts/constants/types.ts @@ -7,7 +7,7 @@ export type DeploymentAddresses = { export interface WatcherMultiCallParams { contractAddress: string; data: string; - nonce: number; + nonce: number | string; signature: string; } diff --git a/hardhat-scripts/deploy/1.deploy.ts b/hardhat-scripts/deploy/1.deploy.ts index 4105aeff..3eb2c712 100644 --- a/hardhat-scripts/deploy/1.deploy.ts +++ b/hardhat-scripts/deploy/1.deploy.ts @@ -18,6 +18,7 @@ import { skipEVMXDeployment, transmitter, WRITE_FEES, + TRIGGER_FEES, } from "../config/config"; import { DeploymentAddresses, @@ -175,7 +176,13 @@ const deployEVMxContracts = async () => { deployUtils = await deployContractWithProxy( Contracts.Watcher, `contracts/evmx/watcher/Watcher.sol`, - [EVMX_CHAIN_ID, EVMxOwner, addressResolver.address, transmitter], + [ + EVMX_CHAIN_ID, + EVMxOwner, + addressResolver.address, + transmitter, + TRIGGER_FEES, + ], proxyFactory, deployUtils ); diff --git a/hardhat-scripts/deploy/2.roles.ts b/hardhat-scripts/deploy/2.roles.ts index 4b941361..68fe17ea 100644 --- a/hardhat-scripts/deploy/2.roles.ts +++ b/hardhat-scripts/deploy/2.roles.ts @@ -25,7 +25,6 @@ import { getWatcherSigner, getSocketSigner } from "../utils/sign"; export const REQUIRED_ROLES = { EVMx: { - // AuctionManager: [ROLES.TRANSMITTER_ROLE], FeesPool: [ROLES.FEE_MANAGER_ROLE], }, Chain: { @@ -44,7 +43,7 @@ export const REQUIRED_ROLES = { async function setRoleForContract( contractName: Contracts, - contractAddress: string | number, + contractAddress: string, targetAddress: string, roleName: string, signer: Wallet, @@ -119,15 +118,6 @@ async function setRolesForEVMx(addresses: DeploymentAddresses) { {}) as ChainAddressesObj; const signer = await getSigner(EVMX_CHAIN_ID, true); - await setRoleForContract( - Contracts.AuctionManager, - chainAddresses[Contracts.AuctionManager], - transmitter, - ROLES.TRANSMITTER_ROLE, - signer, - EVMX_CHAIN_ID - ); - await setRoleForContract( Contracts.FeesPool, chainAddresses[Contracts.FeesPool], @@ -148,11 +138,6 @@ export const main = async () => { for (const chain of chains) { await setRolesOnChain(chain, addresses); } - // const limit = pLimit(CONCURRENCY_LIMIT); - // const chainTasks = chains.map((chain) => - // limit(() => setRolesOnChain(chain, addresses)) - // ); - // await Promise.all(chainTasks); await setRolesForEVMx(addresses); } catch (error) { diff --git a/hardhat-scripts/deploy/3.configureChains.ts b/hardhat-scripts/deploy/3.configureChains.ts index a0de6817..029244bf 100644 --- a/hardhat-scripts/deploy/3.configureChains.ts +++ b/hardhat-scripts/deploy/3.configureChains.ts @@ -146,13 +146,10 @@ async function setOnchainContracts( const chainAddresses = addresses[chain] as ChainAddressesObj; const socket = toBytes32FormatHexString(chainAddresses[Contracts.Socket]); - const contractFactory = toBytes32FormatHexString( - chainAddresses[Contracts.ContractFactoryPlug] - ); await updateContractSettings( EVMX_CHAIN_ID, - Contracts.Configurations, + Contracts.Watcher, "switchboards", [chain, FAST_SWITCHBOARD_TYPE], fastSwitchboardId, @@ -163,7 +160,7 @@ async function setOnchainContracts( // await updateContractSettings( // EVMX_CHAIN_ID, - // Contracts.Configurations, + // Contracts.Watcher, // "switchboards", // [chain, CCTP_SWITCHBOARD_TYPE], // cctpSwitchboardId, @@ -174,7 +171,7 @@ async function setOnchainContracts( await updateContractSettings( EVMX_CHAIN_ID, - Contracts.Configurations, + Contracts.Watcher, "sockets", [chain], toBytes32FormatHexString(socket), @@ -199,17 +196,6 @@ async function setOnchainContracts( signer ); } - - // await updateContractSettings( - // EVMX_CHAIN_ID, - // Contracts.WritePrecompile, - // "contractFactoryPlugs", - // [chain], - // toBytes32FormatHexString(contractFactory).toString(), - // "setContractFactoryPlugs", - // [chain, toBytes32FormatHexString(contractFactory)], - // signer - // ); } // const setSiblingConfig = async ( diff --git a/hardhat-scripts/deploy/4.configureEVMx.ts b/hardhat-scripts/deploy/4.configureEVMx.ts index 9631835a..f9d77578 100644 --- a/hardhat-scripts/deploy/4.configureEVMx.ts +++ b/hardhat-scripts/deploy/4.configureEVMx.ts @@ -55,17 +55,6 @@ export const configureEVMx = async (evmxAddresses: EVMxAddressesObj) => { signer ); - // await updateContractSettings( - // EVMX_CHAIN_ID, - // Contracts.AddressResolver, - // "defaultAuctionManager", - // [], - // evmxAddresses[Contracts.AuctionManager], - // "setDefaultAuctionManager", - // [evmxAddresses[Contracts.AuctionManager]], - // signer - // ); - await updateContractSettings( EVMX_CHAIN_ID, Contracts.AddressResolver, @@ -90,7 +79,7 @@ export const configureEVMx = async (evmxAddresses: EVMxAddressesObj) => { await updateContractSettings( EVMX_CHAIN_ID, - Contracts.RequestHandler, + Contracts.Watcher, "precompiles", [READ], evmxAddresses[Contracts.ReadPrecompile], @@ -101,7 +90,7 @@ export const configureEVMx = async (evmxAddresses: EVMxAddressesObj) => { await updateContractSettings( EVMX_CHAIN_ID, - Contracts.RequestHandler, + Contracts.Watcher, "precompiles", [WRITE], evmxAddresses[Contracts.WritePrecompile], @@ -112,7 +101,7 @@ export const configureEVMx = async (evmxAddresses: EVMxAddressesObj) => { await updateContractSettings( EVMX_CHAIN_ID, - Contracts.RequestHandler, + Contracts.Watcher, "precompiles", [SCHEDULE], evmxAddresses[Contracts.SchedulePrecompile], diff --git a/hardhat-scripts/deploy/6.connect.ts b/hardhat-scripts/deploy/6.connect.ts index 8af01dfb..f53ed75c 100644 --- a/hardhat-scripts/deploy/6.connect.ts +++ b/hardhat-scripts/deploy/6.connect.ts @@ -1,7 +1,7 @@ -import { Wallet } from "ethers"; +import { ethers, Wallet } from "ethers"; import { ChainAddressesObj, ChainSlug, Contracts } from "../../src"; import { chains, CONCURRENCY_LIMIT, EVMX_CHAIN_ID, mode } from "../config"; -import { AppGatewayConfig, DeploymentAddresses } from "../constants"; +import { AppGatewayConfig, DeploymentAddresses, WatcherMultiCallParams } from "../constants"; import { checkIfAppGatewayIdExists, getAddresses, @@ -11,7 +11,7 @@ import { overrides, toBytes32FormatHexString, } from "../utils"; -import { getWatcherSigner, sendWatcherMultiCallWithNonce } from "../utils/sign"; +import { getWatcherSigner, signWatcherMessage } from "../utils/sign"; import { isConfigSetOnEVMx, isConfigSetOnSocket } from "../utils"; import pLimit from "p-limit"; @@ -122,10 +122,7 @@ export const updateConfigEVMx = async () => { const signer = getWatcherSigner(); const EVMxAddresses = addresses[EVMX_CHAIN_ID]!; const configurationsContract = ( - await getInstance( - Contracts.Configurations, - EVMxAddresses[Contracts.Configurations] - ) + await getInstance(Contracts.Watcher, EVMxAddresses[Contracts.Watcher]) ).connect(signer); // Collect configs for each chain and plug @@ -172,14 +169,25 @@ export const updateConfigEVMx = async () => { // Update configs if any changes needed if (appConfigs.length > 0) { console.log({ appConfigs }); - const calldata = configurationsContract.interface.encodeFunctionData( - "setAppGatewayConfigs", + const calldata = ethers.utils.defaultAbiCoder.encode( + ["tuple(tuple(bytes32 appGatewayId,uint64 switchboardId) plugConfig,bytes32 plug,uint32 chainSlug)[]"], [appConfigs] ); - const tx = await sendWatcherMultiCallWithNonce( + + const { nonce, signature } = await signWatcherMessage( configurationsContract.address, calldata ); + + const params: WatcherMultiCallParams = { + contractAddress: configurationsContract.address, + data: calldata, + nonce: nonce, + signature, + }; + const tx = await configurationsContract.setAppGatewayConfigs(params, { + ...(await overrides(EVMX_CHAIN_ID as ChainSlug)), + }); console.log(`Updating EVMx Config tx hash: ${tx.hash}`); await tx.wait(); } diff --git a/hardhat-scripts/deploy/7.upload.ts b/hardhat-scripts/deploy/7.upload.ts index 02e5e462..02d9204d 100644 --- a/hardhat-scripts/deploy/7.upload.ts +++ b/hardhat-scripts/deploy/7.upload.ts @@ -24,7 +24,7 @@ const getBucketName = () => { const getFileName = () => { switch (mode) { case DeploymentMode.LOCAL: - return process.env.CONFIG_FILE_NAME || "pocConfig.json"; + return process.env.CONFIG_FILE_NAME || "localConfig.json"; case DeploymentMode.DEV: return "devConfig.json"; case DeploymentMode.STAGE: diff --git a/hardhat-scripts/s3Config/buildConfig.ts b/hardhat-scripts/s3Config/buildConfig.ts index d8541a6b..e25c1c27 100644 --- a/hardhat-scripts/s3Config/buildConfig.ts +++ b/hardhat-scripts/s3Config/buildConfig.ts @@ -16,6 +16,7 @@ import { mainnetChains, mode, testnetChains, + transmitter, } from "../config/config"; import { getAddresses } from "../utils/address"; import { getChainName, rpcKeys, wssRpcKeys } from "../utils/networks"; @@ -33,6 +34,7 @@ export const getS3Config = () => { const config: S3Config = { supportedChainSlugs, version: version[mode], + transmitterEOA: transmitter, chains: {}, tokens, testnetChainSlugs: testnetChains, diff --git a/hardhat-scripts/utils/sign.ts b/hardhat-scripts/utils/sign.ts index b296d565..2fbccea0 100644 --- a/hardhat-scripts/utils/sign.ts +++ b/hardhat-scripts/utils/sign.ts @@ -15,7 +15,7 @@ export const getWatcherSigner = () => { export const getSocketSigner = (chainSlug: ChainSlug) => { const provider = getProviderFromChainSlug(chainSlug); - return new ethers.Wallet(process.env.SOCKET_SIGNER_KEY as string, provider); + return new ethers.Wallet(process.env.SOCKET_PRIVATE_KEY as string, provider); }; export const getTransmitterSigner = (chainSlug: ChainSlug) => { @@ -59,7 +59,7 @@ export const sendWatcherMultiCallWithNonce = async ( const params: WatcherMultiCallParams = { contractAddress: targetContractAddress, data: calldata, - nonce, + nonce: Number(nonce), signature, }; diff --git a/hardhat.config.ts b/hardhat.config.ts index 40ec837b..94168195 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -31,9 +31,9 @@ dotenvConfig({ path: resolve(__dirname, dotenvConfigPath) }); // Ensure that we have all the environment variables we need. // TODO: fix it for setup scripts -// if (!process.env.SOCKET_SIGNER_KEY) throw new Error("No private key found"); +// if (!process.env.SOCKET_PRIVATE_KEY) throw new Error("No private key found"); const privateKey: HardhatNetworkAccountUserConfig = process.env - .SOCKET_SIGNER_KEY as unknown as HardhatNetworkAccountUserConfig; + .SOCKET_PRIVATE_KEY as unknown as HardhatNetworkAccountUserConfig; function getChainConfig(chainSlug: ChainSlug): NetworkUserConfig { return { diff --git a/package.json b/package.json index d755554c..308833e5 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "publishConfig": { "access": "public" }, - "version": "1.1.49-test.5", + "version": "1.1.49-test.9", "description": "socket protocol", "scripts": { "build": "yarn abi && tsc --project lib.tsconfig.json", diff --git a/script/counter/DeployCounterPlug.s.sol b/script/counter/DeployCounterPlug.s.sol new file mode 100644 index 00000000..065d404a --- /dev/null +++ b/script/counter/DeployCounterPlug.s.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {Counter} from "../../test/apps/counter/Counter.sol"; +import {toBytes32Format} from "../../../../contracts/utils/common/Converters.sol"; + +// source .env && forge script script/counter/DeployCounterPlug.s.sol --broadcast --skip-simulation +contract DeployCounterPlug is Script { + function run() external { + string memory rpc = vm.envString("ARBITRUM_SEPOLIA_RPC"); + vm.createSelectFork(rpc); + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + address appGateway = vm.envAddress("APP_GATEWAY"); + address socket = vm.envAddress("ARBITRUM_SEPOLIA_SOCKET"); + + Counter counter = new Counter(); + counter.initSocket(toBytes32Format(appGateway), socket, 1); + console.log("CounterPlug deployed:", address(counter)); + } +} diff --git a/script/counter/DeployEVMxCounterApp.s.sol b/script/counter/DeployEVMxCounterApp.s.sol new file mode 100644 index 00000000..d19bd014 --- /dev/null +++ b/script/counter/DeployEVMxCounterApp.s.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {CounterAppGateway} from "../../test/apps/counter/CounterAppGateway.sol"; + +// source .env && forge script script/counter/deployEVMxCounterApp.s.sol --broadcast --skip-simulation +contract CounterDeploy is Script { + function run() external { + address addressResolver = vm.envAddress("ADDRESS_RESOLVER"); + string memory rpc = vm.envString("EVMX_RPC"); + vm.createSelectFork(rpc); + + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + // Setting fee payment on Arbitrum Sepolia + uint256 fees = 1 ether; + + CounterAppGateway gateway = new CounterAppGateway(addressResolver, fees); + + console.log("Contracts deployed:"); + console.log("CounterAppGateway:", address(gateway)); + console.log("counterId:"); + console.logBytes32(gateway.counter()); + } +} diff --git a/script/counter/IncrementCountersFromApp.s.sol b/script/counter/IncrementCountersFromApp.s.sol new file mode 100644 index 00000000..4c215a25 --- /dev/null +++ b/script/counter/IncrementCountersFromApp.s.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {CounterAppGateway} from "../../test/apps/counter/CounterAppGateway.sol"; +import {toBytes32Format} from "../../../../contracts/utils/common/Converters.sol"; + +// source .env && forge script script/counter/IncrementCountersFromApp.s.sol --broadcast --skip-simulation +// source .env && cast send 0x1Bb3770C1e25Ff498Cb25E4f91481E610428f0fd "incrementCounters(address)" '0x4382D89Db86dBFBDa96366E4029Ca962E01c232F' --private-key $PRIVATE_KEY +contract IncrementCounters is Script { + function run() external { + string memory socketRPC = vm.envString("EVMX_RPC"); + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + + vm.createSelectFork(socketRPC); + vm.startBroadcast(deployerPrivateKey); + + CounterAppGateway gateway = CounterAppGateway(vm.envAddress("APP_GATEWAY")); + address counter = vm.envAddress("PLUG"); + + // gateway.uploadPlug(421614, gateway.counter(), toBytes32Format(counter)); + + address counterForwarderArbitrumSepolia = gateway.forwarderAddresses( + gateway.counter(), + 421614 + ); + + console.log("counterForwarderArbitrumSepolia:", counterForwarderArbitrumSepolia); + + // Count non-zero addresses + if (counterForwarderArbitrumSepolia != address(0)) { + gateway.incrementCounters(counterForwarderArbitrumSepolia); + } else { + console.log("Arbitrum Sepolia forwarder not yet deployed"); + } + + } +} diff --git a/script/counter/ReadOnchainCounters.s.sol b/script/counter/ReadOnchainCounters.s.sol new file mode 100644 index 00000000..7dd7d7d1 --- /dev/null +++ b/script/counter/ReadOnchainCounters.s.sol @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {Counter} from "../../test/apps/counter/Counter.sol"; +import {CounterAppGateway} from "../../test/apps/counter/CounterAppGateway.sol"; +import {fromBytes32Format} from "../../contracts/utils/common/Converters.sol"; + +contract CheckCounters is Script { + function run() external { + CounterAppGateway gateway = CounterAppGateway(vm.envAddress("APP_GATEWAY")); + + vm.createSelectFork(vm.envString("EVMX_RPC")); + address counterInstanceArbitrumSepolia = fromBytes32Format( + gateway.getOnChainAddress(gateway.counter(), 421614) + ); + address counterInstanceOptimismSepolia = fromBytes32Format( + gateway.getOnChainAddress(gateway.counter(), 11155420) + ); + address counterInstanceBaseSepolia = fromBytes32Format( + gateway.getOnChainAddress(gateway.counter(), 84532) + ); + + if (counterInstanceArbitrumSepolia != address(0)) { + vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); + uint256 counterValueArbitrumSepolia = Counter(counterInstanceArbitrumSepolia).counter(); + console.log("Counter value on Arbitrum Sepolia: ", counterValueArbitrumSepolia); + } else { + console.log("Counter not yet deployed on Arbitrum Sepolia"); + } + + if (counterInstanceOptimismSepolia != address(0)) { + vm.createSelectFork(vm.envString("OPTIMISM_SEPOLIA_RPC")); + uint256 counterValueOptimismSepolia = Counter(counterInstanceOptimismSepolia).counter(); + console.log("Counter value on Optimism Sepolia: ", counterValueOptimismSepolia); + } else { + console.log("Counter not yet deployed on Optimism Sepolia"); + } + + if (counterInstanceBaseSepolia != address(0)) { + vm.createSelectFork(vm.envString("BASE_SEPOLIA_RPC")); + uint256 counterValueBaseSepolia = Counter(counterInstanceBaseSepolia).counter(); + console.log("Counter value on Base Sepolia: ", counterValueBaseSepolia); + } else { + console.log("Counter not yet deployed on Base Sepolia"); + } + } +} diff --git a/script/counter/SetFees.s.sol b/script/counter/SetFees.s.sol new file mode 100644 index 00000000..71bf6a08 --- /dev/null +++ b/script/counter/SetFees.s.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {CounterAppGateway} from "../../test/apps/counter/CounterAppGateway.sol"; + +// source .env && forge script script/counter/DeployCounterOnchain.s.sol --broadcast --skip-simulation --legacy --gas-price 0 +contract CounterSetFees is Script { + function run() external { + string memory rpc = vm.envString("EVMX_RPC"); + console.log(rpc); + vm.createSelectFork(rpc); + + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + CounterAppGateway appGateway = CounterAppGateway(vm.envAddress("APP_GATEWAY")); + console.log("Counter Gateway:", address(appGateway)); + + console.log("Setting fees..."); + // Setting fee payment on Arbitrum Sepolia + // uint256 fees = 0.00001 ether; + // appGateway.setFees(fees); + } +} diff --git a/script/counter/WithdrawFeesArbitrumFeesPlug.s.sol b/script/counter/WithdrawFeesArbitrumFeesPlug.s.sol new file mode 100644 index 00000000..4ac76192 --- /dev/null +++ b/script/counter/WithdrawFeesArbitrumFeesPlug.s.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {FeesManager} from "../../contracts/evmx/fees/FeesManager.sol"; +import {CounterAppGateway} from "../../test/apps/counter/CounterAppGateway.sol"; + +// @notice This script is used to withdraw fees from EVMX to Arbitrum Sepolia +// @dev Make sure your app has withdrawFeeTokens() function implemented. You can check its implementation in CounterAppGateway.sol +contract WithdrawFees is Script { + function run() external { + // EVMX Check available fees + vm.createSelectFork(vm.envString("EVMX_RPC")); + FeesManager feesManager = FeesManager(payable(vm.envAddress("FEES_MANAGER"))); + address appGatewayAddress = vm.envAddress("APP_GATEWAY"); + address token = vm.envAddress("USDC"); + + CounterAppGateway appGateway = CounterAppGateway(appGatewayAddress); + uint256 availableFees = feesManager.balanceOf(appGatewayAddress); + console.log("Available fees:", availableFees); + + if (availableFees > 0) { + // Switch to Arbitrum Sepolia to get gas price + vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); + uint256 privateKey = vm.envUint("PRIVATE_KEY"); + address sender = vm.addr(privateKey); + + // Gas price from Arbitrum + uint256 arbitrumGasPrice = block.basefee + 0.1 gwei; // With buffer + uint256 gasLimit = 5_000_000; // Estimate + uint256 estimatedGasCost = gasLimit * arbitrumGasPrice; + + console.log("Arbitrum gas price (wei):", arbitrumGasPrice); + console.log("Gas limit:", gasLimit); + console.log("Estimated gas cost:", estimatedGasCost); + + // Calculate amount to withdraw + uint256 amountToWithdraw = availableFees > estimatedGasCost + ? availableFees - estimatedGasCost + : 0; + + if (amountToWithdraw > 0) { + // Switch back to EVMX to perform withdrawal + vm.createSelectFork(vm.envString("EVMX_RPC")); + vm.startBroadcast(privateKey); + console.log("Withdrawing amount:", amountToWithdraw); + appGateway.withdrawCredits(421614, token, amountToWithdraw, sender); + vm.stopBroadcast(); + + // Switch back to Arbitrum Sepolia to check final balance + vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); + console.log("Final sender balance:", sender.balance); + } else { + console.log("Available fees less than estimated gas cost"); + } + } + } +} diff --git a/script/helpers/CheckDepositedCredits.s.sol b/script/helpers/CheckDepositedCredits.s.sol new file mode 100644 index 00000000..80418fe7 --- /dev/null +++ b/script/helpers/CheckDepositedCredits.s.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {FeesManager} from "../../contracts/evmx/fees/FeesManager.sol"; + +contract CheckDepositedCredits is Script { + function run() external { + vm.createSelectFork(vm.envString("EVMX_RPC")); + FeesManager feesManager = FeesManager(payable(vm.envAddress("FEES_MANAGER"))); + address appGateway = vm.envAddress("APP_GATEWAY"); + + uint256 totalCredits = feesManager.totalBalanceOf(appGateway); + uint256 blockedCredits = feesManager.getBlockedCredits(appGateway); + console.log("App Gateway:", appGateway); + console.log("Fees Manager:", address(feesManager)); + console.log("totalCredits fees:", totalCredits); + console.log("blockedCredits fees:", blockedCredits); + + uint256 availableFees = feesManager.balanceOf(appGateway); + console.log("Available fees:", availableFees); + } +} diff --git a/script/helpers/DepositCredit.s.sol b/script/helpers/DepositCredit.s.sol new file mode 100644 index 00000000..b8d432f8 --- /dev/null +++ b/script/helpers/DepositCredit.s.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {FeesPlug} from "../../contracts/evmx/plugs/FeesPlug.sol"; +import {TestUSDC} from "../../contracts/evmx/mocks/TestUSDC.sol"; + +// source .env && forge script script/helpers/DepositCreditAndNative.s.sol --broadcast --skip-simulation +contract DepositCredit is Script { + function run() external { + uint256 feesAmount = 2000000; // 2 USDC + vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); + + uint256 privateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(privateKey); + FeesPlug feesPlug = FeesPlug(payable(vm.envAddress("ARBITRUM_FEES_PLUG"))); + address appGateway = vm.envAddress("APP_GATEWAY"); + TestUSDC testUSDCContract = TestUSDC(vm.envAddress("ARBITRUM_TEST_USDC")); + + // mint test USDC to sender + testUSDCContract.mint(vm.addr(privateKey), feesAmount); + // approve fees plug to spend test USDC + testUSDCContract.approve(address(feesPlug), feesAmount); + + address sender = vm.addr(privateKey); + console.log("Sender address:", sender); + uint256 balance = testUSDCContract.balanceOf(sender); + console.log("Sender balance in wei:", balance); + console.log("App Gateway:", appGateway); + console.log("Fees Plug:", address(feesPlug)); + console.log("Fees Amount:", feesAmount); + feesPlug.depositCredit(address(testUSDCContract), appGateway, feesAmount); + } +} diff --git a/script/helpers/DepositCreditAndNative.s.sol b/script/helpers/DepositCreditAndNative.s.sol new file mode 100644 index 00000000..629a3998 --- /dev/null +++ b/script/helpers/DepositCreditAndNative.s.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {FeesPlug} from "../../contracts/evmx/plugs/FeesPlug.sol"; +import {TestUSDC} from "../../contracts/evmx/mocks/TestUSDC.sol"; + +// source .env && forge script script/helpers/DepositCreditAndNative.s.sol --broadcast --skip-simulation +contract DepositCreditAndNative is Script { + function run() external { + uint256 feesAmount = 100000000; // 100 USDC + vm.createSelectFork(vm.envString("ARBITRUM_SEPOLIA_RPC")); + + uint256 privateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(privateKey); + FeesPlug feesPlug = FeesPlug(payable(vm.envAddress("ARBITRUM_FEES_PLUG"))); + address appGateway = vm.envAddress("APP_GATEWAY"); + TestUSDC testUSDCContract = TestUSDC(vm.envAddress("ARBITRUM_TEST_USDC")); + + // mint test USDC to sender + testUSDCContract.mint(vm.addr(privateKey), feesAmount); + // approve fees plug to spend test USDC + testUSDCContract.approve(address(feesPlug), feesAmount); + + address sender = vm.addr(privateKey); + console.log("Sender address:", sender); + uint256 balance = testUSDCContract.balanceOf(sender); + console.log("Sender balance in wei:", balance); + console.log("App Gateway:", appGateway); + console.log("Fees Plug:", address(feesPlug)); + console.log("Fees Amount:", feesAmount); + feesPlug.depositCreditAndNative(address(testUSDCContract), appGateway, feesAmount); + } +} diff --git a/script/helpers/DepositCreditMainnet.s.sol b/script/helpers/DepositCreditMainnet.s.sol new file mode 100644 index 00000000..4e1a8e33 --- /dev/null +++ b/script/helpers/DepositCreditMainnet.s.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {FeesPlug} from "../../contracts/evmx/plugs/FeesPlug.sol"; +import {TestUSDC} from "../../contracts/evmx/mocks/TestUSDC.sol"; +import "solady/tokens/ERC20.sol"; +// source .env && forge script script/helpers/DepositCreditAndNative.s.sol --broadcast --skip-simulation +contract DepositCredit is Script { + function run() external { + uint256 feesAmount = 1000000; // 1 USDC + vm.createSelectFork(vm.envString("ARBITRUM_RPC")); + + uint256 privateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(privateKey); + FeesPlug feesPlug = FeesPlug(payable(vm.envAddress("ARBITRUM_FEES_PLUG"))); + address appGateway = vm.envAddress("APP_GATEWAY"); + ERC20 USDCContract = ERC20(vm.envAddress("ARBITRUM_USDC")); + + // approve fees plug to spend test USDC + USDCContract.approve(address(feesPlug), feesAmount); + + address sender = vm.addr(privateKey); + console.log("Sender address:", sender); + uint256 balance = USDCContract.balanceOf(sender); + console.log("Sender USDC balance:", balance); + if (balance < feesAmount) { + revert("Sender does not have enough USDC"); + } + console.log("App Gateway:", appGateway); + console.log("Fees Plug:", address(feesPlug)); + console.log("Fees Amount:", feesAmount); + feesPlug.depositCredit(address(USDCContract), appGateway, feesAmount); + } +} diff --git a/script/helpers/TransferRemainingCredits.s.sol b/script/helpers/TransferRemainingCredits.s.sol new file mode 100644 index 00000000..6ebec144 --- /dev/null +++ b/script/helpers/TransferRemainingCredits.s.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {FeesManager} from "../../contracts/evmx/fees/FeesManager.sol"; +import {IAppGateway} from "../../contracts/evmx/interfaces/IAppGateway.sol"; + +contract TransferRemainingCredits is Script { + function run() external { + string memory rpc = vm.envString("EVMX_RPC"); + vm.createSelectFork(rpc); + + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + FeesManager feesManager = FeesManager(payable(vm.envAddress("FEES_MANAGER"))); + address appGateway = vm.envAddress("APP_GATEWAY"); + address newAppGateway = vm.envAddress("NEW_APP_GATEWAY"); + + uint256 totalCredits = feesManager.totalBalanceOf(appGateway); + uint256 blockedCredits = feesManager.getBlockedCredits(appGateway); + console.log("App Gateway:", appGateway); + console.log("New App Gateway:", newAppGateway); + console.log("Fees Manager:", address(feesManager)); + console.log("totalCredits fees:", totalCredits); + console.log("blockedCredits fees:", blockedCredits); + + uint256 availableFees = feesManager.balanceOf(appGateway); + console.log("Available fees:", availableFees); + bytes memory data = abi.encodeWithSignature( + "transferFrom(address,address,uint256)", + appGateway, + newAppGateway, + availableFees + ); + (bool success, ) = appGateway.call(data); + require(success, "Transfer failed"); + vm.stopBroadcast(); + } +} diff --git a/script/helpers/WithdrawRemainingCredits.s.sol b/script/helpers/WithdrawRemainingCredits.s.sol new file mode 100644 index 00000000..c53cf1ee --- /dev/null +++ b/script/helpers/WithdrawRemainingCredits.s.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity ^0.8.21; + +import {Script} from "forge-std/Script.sol"; +import {console} from "forge-std/console.sol"; +import {FeesManager} from "../../contracts/evmx/fees/FeesManager.sol"; + +contract WithdrawRemainingCredits is Script { + function run() external { + string memory rpc = vm.envString("EVMX_RPC"); + vm.createSelectFork(rpc); + + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + FeesManager feesManager = FeesManager(payable(vm.envAddress("FEES_MANAGER"))); + address appGateway = vm.envAddress("APP_GATEWAY"); + + uint256 totalCredits = feesManager.totalBalanceOf(appGateway); + uint256 blockedCredits = feesManager.getBlockedCredits(appGateway); + console.log("App Gateway:", appGateway); + console.log("Fees Manager:", address(feesManager)); + console.log("totalCredits fees:", totalCredits); + console.log("blockedCredits fees:", blockedCredits); + + uint256 availableFees = feesManager.balanceOf(appGateway); + console.log("Available fees:", availableFees); + feesManager.transferFrom(appGateway, vm.addr(deployerPrivateKey), availableFees); + + vm.stopBroadcast(); + } +} diff --git a/src/enums.ts b/src/enums.ts index 27623fce..0667d40d 100644 --- a/src/enums.ts +++ b/src/enums.ts @@ -29,7 +29,7 @@ export enum Events { // RequestHandler FeesIncreased = "FeesIncreased", - PayloadStored = "PayloadStored", + PayloadSubmitted = "PayloadSubmitted", PayloadResolved = "PayloadResolved", PayloadCancelled = "PayloadCancelled", PayloadSettled = "PayloadSettled", @@ -67,7 +67,6 @@ export enum Contracts { RequestHandler = "RequestHandler", Configurations = "Configurations", PromiseResolver = "PromiseResolver", - AuctionManager = "AuctionManager", FeesManager = "FeesManager", WritePrecompile = "WritePrecompile", ReadPrecompile = "ReadPrecompile", diff --git a/src/events.ts b/src/events.ts index ab421f59..8381849f 100644 --- a/src/events.ts +++ b/src/events.ts @@ -16,7 +16,7 @@ export const watcherEvents = [ Events.PromiseNotResolved, Events.MarkedRevert, Events.FeesIncreased, - Events.PayloadStored, + Events.PayloadSubmitted, Events.PayloadResolved, Events.PayloadCancelled, Events.PayloadSettled, diff --git a/src/types.ts b/src/types.ts index ba3b0ac6..97494969 100644 --- a/src/types.ts +++ b/src/types.ts @@ -32,19 +32,21 @@ export type ChainAddressesObj = { }; export type EVMxAddressesObj = { + ERC1967Factory: string; + FeesPool: string; AddressResolver: string; - AsyncDeployer: string; FeesManager: string; - FeesPool: string; - ReadPrecompile: string; + AsyncDeployer: string; Watcher: string; WritePrecompile: string; - ERC1967Factory: string; + ReadPrecompile: string; + SchedulePrecompile: string; startBlock: number; }; export type S3Config = { version: string; + transmitterEOA: string; chains: { [chainSlug: number]: ChainConfig }; tokens: TokenMap; supportedChainSlugs: number[]; diff --git a/test/SetupTest.t.sol b/test/SetupTest.t.sol index 6bdf96b2..1f0876a4 100644 --- a/test/SetupTest.t.sol +++ b/test/SetupTest.t.sol @@ -719,15 +719,28 @@ contract WatcherSetup is FeesSetup { } function _resolvePayload(PromiseReturnData memory promiseReturnData) internal { - hoax(watcherEOA); - watcher.resolvePayload(promiseReturnData, feesAmount); + WatcherMultiCallParams memory params = WatcherMultiCallParams({ + contractAddress: address(watcher), + data: abi.encode(promiseReturnData, feesAmount), + nonce: watcherNonce, + signature: _createWatcherSignature(address(watcher), abi.encode(promiseReturnData, feesAmount)) + }); + watcherNonce++; + watcher.resolvePayload(params); } function _markRevert( PromiseReturnData memory promiseReturnData, bool isRevertingOnchain_ ) internal { - watcher.markRevert(promiseReturnData, isRevertingOnchain_); + WatcherMultiCallParams memory params = WatcherMultiCallParams({ + contractAddress: address(watcher), + data: abi.encode(promiseReturnData, isRevertingOnchain_), + nonce: watcherNonce, + signature: _createWatcherSignature(address(watcher), abi.encode(promiseReturnData, isRevertingOnchain_)) + }); + watcherNonce++; + watcher.markRevert(params); } }