diff --git a/contracts/protocol/switchboard/EVMxSwitchboard.sol b/contracts/protocol/switchboard/EVMxSwitchboard.sol index a51f1f49..6672e21a 100644 --- a/contracts/protocol/switchboard/EVMxSwitchboard.sol +++ b/contracts/protocol/switchboard/EVMxSwitchboard.sol @@ -21,6 +21,9 @@ contract EVMxSwitchboard is SwitchboardBase { /// @notice Transmitter address for payload execution address public transmitter; + /// @notice Socket address for payload execution + address public evmxSocket; + /// @notice TotalWatchers registered which are responsible for attesting payloads from evmx uint256 public totalWatchers; @@ -72,12 +75,14 @@ contract EVMxSwitchboard is SwitchboardBase { ISocket socket_, address owner_, address transmitter_, + address evmxSocket_, uint32 evmxChainSlug_, uint32 evmxWatcherSetId_ ) SwitchboardBase(chainSlug_, socket_, owner_) { transmitter = transmitter_; evmxChainSlug = evmxChainSlug_; evmxWatcherSetId = evmxWatcherSetId_; + evmxSocket = evmxSocket_; } // --- External Functions --- @@ -156,7 +161,7 @@ contract EVMxSwitchboard is SwitchboardBase { ); bytes32 appGatewayId = plugAppGatewayIds[plug_]; DigestParams memory digestParams = DigestParams({ - socket: toBytes32Format(address(this)), + socket: toBytes32Format(evmxSocket), transmitter: toBytes32Format(transmitter), payloadId: payloadId, deadline: overridesParams.deadline, @@ -253,14 +258,16 @@ contract EVMxSwitchboard is SwitchboardBase { bytes32 oldTransmitterBytes32 = toBytes32Format(oldTransmitter_); digestParams_.transmitter = oldTransmitterBytes32; bytes32 oldDigest = createDigest(digestParams_); - + if (payloadIdToDigest[digestParams_.payloadId] != oldDigest) revert InvalidDigest(); - + digestParams_.transmitter = toBytes32Format(newTransmitter_); bytes32 newDigest = createDigest(digestParams_); - + address watcher = _recoverSigner( - keccak256(abi.encodePacked(toBytes32Format(address(this)), chainSlug, oldDigest, newDigest)), + keccak256( + abi.encodePacked(toBytes32Format(address(this)), chainSlug, oldDigest, newDigest) + ), signature_ ); if (!_hasRole(WATCHER_ROLE, watcher)) revert WatcherNotFound(); diff --git a/test/SetupTest.t.sol b/test/SetupTest.t.sol index 25ebc56e..42c37ef3 100644 --- a/test/SetupTest.t.sol +++ b/test/SetupTest.t.sol @@ -225,6 +225,7 @@ contract DeploySetup is SetupStore { socket, socketOwner, address(0), + address(watcher), evmxSlug, 1 ), diff --git a/test/protocol/switchboard/EVMxSwitchboard.t.sol b/test/protocol/switchboard/EVMxSwitchboard.t.sol index 858abb1d..5b616e38 100644 --- a/test/protocol/switchboard/EVMxSwitchboard.t.sol +++ b/test/protocol/switchboard/EVMxSwitchboard.t.sol @@ -51,6 +51,7 @@ contract EVMxSwitchboardTestBase is Test, Utils { socket, owner, address(0), + address(watcher), EVMX_CHAIN_SLUG, WATCHER_SET_ID ); @@ -260,7 +261,7 @@ contract EVMxSwitchboardTestBase is Test, Utils { address transmitter_ ) internal view returns (DigestParams memory digestParams) { digestParams = DigestParams({ - socket: toBytes32Format(address(evmxSwitchboard)), + socket: toBytes32Format(evmxSwitchboard.evmxSocket()), transmitter: toBytes32Format(transmitter_), payloadId: payloadId_, deadline: block.timestamp + evmxSwitchboard.defaultDeadlineInterval(),