From 298783bf9c2968273d5890775f35fb38f9bc0a70 Mon Sep 17 00:00:00 2001 From: Gregory The Dev Date: Wed, 12 Nov 2025 18:57:44 +0700 Subject: [PATCH 1/2] feat: add trasmitterSolana in Watcher contract; update test and deployment scripts --- .gitignore | 6 ++++-- contracts/evmx/interfaces/IWatcher.sol | 2 ++ contracts/evmx/watcher/Watcher.sol | 3 +++ .../evmx/watcher/precompiles/WritePrecompile.sol | 11 ++--------- contracts/protocol/switchboard/SwitchboardBase.sol | 1 - deprecated/test/SetupTest.t.sol | 6 ++++-- hardhat-scripts/deploy/1.deploy.ts | 1 + lib/forge-std | 2 +- lib/solady | 2 +- test/SetupTest.t.sol | 1 + 10 files changed, 19 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 86c4727c..684da944 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ src/types typechain-types/ .env +.env.* .DS_Store .gas-snapshot/ @@ -26,8 +27,9 @@ broadcast/ .cursorrules -deployments/local_addresses.json -deployments/local_verification.json +deployments/local_addresses*.json +deployments/local_verification*.json +deployments/stage_addresses_*.json testScript.sh CLAUDE.md diff --git a/contracts/evmx/interfaces/IWatcher.sol b/contracts/evmx/interfaces/IWatcher.sol index cf732c05..9da132ca 100644 --- a/contracts/evmx/interfaces/IWatcher.sol +++ b/contracts/evmx/interfaces/IWatcher.sol @@ -29,6 +29,8 @@ interface IWatcher is IConfigurations { function transmitter() external view returns (address); + function transmitterSolana() external view returns (bytes32); + function isNonceUsed(uint256 nonce) external view returns (bool); function triggerFromChainSlug() external view returns (uint32); diff --git a/contracts/evmx/watcher/Watcher.sol b/contracts/evmx/watcher/Watcher.sol index 6d61e704..5c2a81e6 100644 --- a/contracts/evmx/watcher/Watcher.sol +++ b/contracts/evmx/watcher/Watcher.sol @@ -31,6 +31,7 @@ contract Watcher is Initializable, Configurations { address public latestAppGateway; RawPayload public payloadData; address public transmitter; + bytes32 public transmitterSolana; error PayloadAlreadyCancelled(); error PayloadAlreadySettled(); @@ -46,10 +47,12 @@ contract Watcher is Initializable, Configurations { address owner_, address addressResolver_, address transmitter_, + bytes32 transmitterSolana_, uint256 triggerFees_ ) external reinitializer(1) { evmxSlug = evmxSlug_; transmitter = transmitter_; + transmitterSolana = transmitterSolana_; triggerFees = triggerFees_; _initializeOwner(owner_); _setAddressResolver(addressResolver_); diff --git a/contracts/evmx/watcher/precompiles/WritePrecompile.sol b/contracts/evmx/watcher/precompiles/WritePrecompile.sol index c70662de..3ed49b74 100644 --- a/contracts/evmx/watcher/precompiles/WritePrecompile.sol +++ b/contracts/evmx/watcher/precompiles/WritePrecompile.sol @@ -271,17 +271,10 @@ contract WritePrecompile is WritePrecompileStorage, Initializable, Ownable { functionArgsPacked ); - // TODO: this is temporary, must be injected from function arguments - // bytes32 of Solana Socket address : 9vFEQ5e3xf4eo17WttfqmXmnqN3gUicrhFGppmmNwyqV - bytes32 hardcodedSocket = 0x84815e8ca2f6dad7e12902c39a51bc72e13c48139b4fb10025d94e7abea2969c; - // bytes32 of Solana transmitter address : pFCBP4bhqdSsrWUVTgqhPsLrfEdChBK17vgFM7TxjxQ - bytes32 transmitterSolana = 0x0c1a5886fe1093df9fc438c296f9f7275b7718b6bc0e156d8d336c58f083996d; return DigestParams( - // watcherPrecompileConfig__.sockets(params_.payloadHeader.getChainSlug()), // TODO: this does not work, for some reason it returns 0x000.... address - hardcodedSocket, - // toBytes32Format(transmitter_), - transmitterSolana, + watcher__.sockets(rawPayload_.transaction.chainSlug), + watcher__.transmitterSolana(), payloadId_, deadline_, rawPayload_.overrideParams.callType, diff --git a/contracts/protocol/switchboard/SwitchboardBase.sol b/contracts/protocol/switchboard/SwitchboardBase.sol index 6d840f61..00ecb9c7 100644 --- a/contracts/protocol/switchboard/SwitchboardBase.sol +++ b/contracts/protocol/switchboard/SwitchboardBase.sol @@ -59,7 +59,6 @@ abstract contract SwitchboardBase is ISwitchboard, AccessControl { ) external view returns (address transmitter) { transmitter = transmitterSignature_.length > 0 ? _recoverSigner( - // TODO: use api encode packed keccak256(abi.encode(address(socket__), payloadId_)), transmitterSignature_ ) diff --git a/deprecated/test/SetupTest.t.sol b/deprecated/test/SetupTest.t.sol index 7c808510..8b7335d2 100644 --- a/deprecated/test/SetupTest.t.sol +++ b/deprecated/test/SetupTest.t.sol @@ -418,9 +418,11 @@ contract DeploySetup is SetupStore { abi.encodeWithSelector( Watcher.initialize.selector, evmxSlug, - triggerFees, watcherEOA, - address(addressResolver) + address(addressResolver), + transmitterEOA, + bytes32(0), // transmitterSolana - using 0 for now + triggerFees ) ); watcher = Watcher(watcherProxy); diff --git a/hardhat-scripts/deploy/1.deploy.ts b/hardhat-scripts/deploy/1.deploy.ts index 3eb2c712..1663f099 100644 --- a/hardhat-scripts/deploy/1.deploy.ts +++ b/hardhat-scripts/deploy/1.deploy.ts @@ -181,6 +181,7 @@ const deployEVMxContracts = async () => { EVMxOwner, addressResolver.address, transmitter, + "0x0000000000000000000000000000000000000000000000000000000000000000", // transmitterSolana - using 0 for now TRIGGER_FEES, ], proxyFactory, diff --git a/lib/forge-std b/lib/forge-std index 1eea5bae..f9062359 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 1eea5bae12ae557d589f9f0f0edae2faa47cb262 +Subproject commit f90623596aecbf678c41d4d45ca81ce0e43c8219 diff --git a/lib/solady b/lib/solady index 6c2d0da6..836c169f 160000 --- a/lib/solady +++ b/lib/solady @@ -1 +1 @@ -Subproject commit 6c2d0da6397e3c016aabc3f298de1b92c6ce7405 +Subproject commit 836c169fe357b3c23ad5d5755a9b4fbbfad7a99b diff --git a/test/SetupTest.t.sol b/test/SetupTest.t.sol index 1270451d..ab614726 100644 --- a/test/SetupTest.t.sol +++ b/test/SetupTest.t.sol @@ -301,6 +301,7 @@ contract DeploySetup is SetupStore { watcherEOA, address(addressResolver), address(transmitterEOA), + bytes32(0), // transmitterSolana - using 0 for now triggerFees ) ); From 18e2d06caf318e1def28592b549a48eb9ddb15f6 Mon Sep 17 00:00:00 2001 From: Gregory The Dev Date: Thu, 13 Nov 2025 08:56:49 +0700 Subject: [PATCH 2/2] Remove declaration of susdcSolanaProgramId in FeesManager; fix path to Converters.sol in scripts --- contracts/evmx/fees/Credit.sol | 1 - contracts/evmx/fees/FeesManager.sol | 4 ---- script/counter/DeployCounterPlug.s.sol | 2 +- script/counter/IncrementCountersFromApp.s.sol | 2 +- 4 files changed, 2 insertions(+), 7 deletions(-) diff --git a/contracts/evmx/fees/Credit.sol b/contracts/evmx/fees/Credit.sol index c62140b1..50833439 100644 --- a/contracts/evmx/fees/Credit.sol +++ b/contracts/evmx/fees/Credit.sol @@ -65,7 +65,6 @@ abstract contract FeesManagerStorage is IFeesManager { ForwarderSolana public forwarderSolana; - bytes32 public susdcSolanaProgramId; bytes32 public feesPlugSolanaProgramId; // slots [60-107] reserved for gap diff --git a/contracts/evmx/fees/FeesManager.sol b/contracts/evmx/fees/FeesManager.sol index 69ce7ee4..7da63b08 100644 --- a/contracts/evmx/fees/FeesManager.sol +++ b/contracts/evmx/fees/FeesManager.sol @@ -68,10 +68,6 @@ contract FeesManager is Credit { feesPlugSolanaProgramId = feesPlugSolanaProgramId_; } - function setSusdcSolanaProgramId(bytes32 susdcSolanaProgramId_) external onlyOwner { - susdcSolanaProgramId = susdcSolanaProgramId_; - } - function setChainMaxFees( uint32[] calldata chainSlugs_, uint256[] calldata maxFees_ diff --git a/script/counter/DeployCounterPlug.s.sol b/script/counter/DeployCounterPlug.s.sol index 065d404a..5ba86cb0 100644 --- a/script/counter/DeployCounterPlug.s.sol +++ b/script/counter/DeployCounterPlug.s.sol @@ -4,7 +4,7 @@ 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"; +import {toBytes32Format} from "../../contracts/utils/common/Converters.sol"; // source .env && forge script script/counter/DeployCounterPlug.s.sol --broadcast --skip-simulation contract DeployCounterPlug is Script { diff --git a/script/counter/IncrementCountersFromApp.s.sol b/script/counter/IncrementCountersFromApp.s.sol index 2014aa22..ab66b4e1 100644 --- a/script/counter/IncrementCountersFromApp.s.sol +++ b/script/counter/IncrementCountersFromApp.s.sol @@ -4,7 +4,7 @@ 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"; +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