From b1531816630434d422e3411fd1d0180e67eb3321 Mon Sep 17 00:00:00 2001 From: Ameesha Agrawal Date: Thu, 24 Jul 2025 13:13:03 +0530 Subject: [PATCH 1/8] feat: merge counts to uint160 --- contracts/evmx/watcher/PromiseResolver.sol | 4 ++-- .../watcher/precompiles/WritePrecompile.sol | 5 +++-- .../switchboard/MessageSwitchboard.sol | 16 +++++--------- contracts/utils/common/IdUtils.sol | 22 +++++++++---------- contracts/utils/common/Structs.sol | 8 ++----- 5 files changed, 22 insertions(+), 33 deletions(-) diff --git a/contracts/evmx/watcher/PromiseResolver.sol b/contracts/evmx/watcher/PromiseResolver.sol index d226492c..82367c13 100644 --- a/contracts/evmx/watcher/PromiseResolver.sol +++ b/contracts/evmx/watcher/PromiseResolver.sol @@ -54,7 +54,7 @@ contract PromiseResolver is IPromiseResolver, WatcherBase { if (payloadParams.deadline < block.timestamp) revert DeadlinePassed(); address asyncPromise = payloadParams.asyncPromise; - requestCount = payloadParams.requestCount; + requestCount = uint40(payloadParams.payloadPointer >> 120); if (asyncPromise != address(0)) { success = IPromise(asyncPromise).markResolved(resolvedPromise_); @@ -85,7 +85,7 @@ contract PromiseResolver is IPromiseResolver, WatcherBase { if (payloadParams.deadline > block.timestamp) revert DeadlineNotPassedForOnChainRevert(); // marks the request as cancelled and settles the fees - requestHandler__().cancelRequestForReverts(payloadParams.requestCount); + requestHandler__().cancelRequestForReverts(uint40(payloadParams.payloadPointer >> 120)); // marks the promise as onchain reverting if the request is reverting onchain if (isRevertingOnchain_ && payloadParams.asyncPromise != address(0)) diff --git a/contracts/evmx/watcher/precompiles/WritePrecompile.sol b/contracts/evmx/watcher/precompiles/WritePrecompile.sol index 6bc8192b..30bfeadb 100644 --- a/contracts/evmx/watcher/precompiles/WritePrecompile.sol +++ b/contracts/evmx/watcher/precompiles/WritePrecompile.sol @@ -170,9 +170,10 @@ contract WritePrecompile is WritePrecompileStorage, Initializable, Ownable, Watc deadline = block.timestamp + expiryTime; fees = getPrecompileFees(payloadParams.precompileData); + // todo: fix batch count bytes32 prevBatchDigestHash = getPrevBatchDigestHash( - payloadParams.requestCount, - payloadParams.batchCount + uint40(payloadParams.payloadPointer >> 120), + uint40(payloadParams.payloadPointer >> 80) ); // create digest diff --git a/contracts/protocol/switchboard/MessageSwitchboard.sol b/contracts/protocol/switchboard/MessageSwitchboard.sol index c35877e7..872b7a57 100644 --- a/contracts/protocol/switchboard/MessageSwitchboard.sol +++ b/contracts/protocol/switchboard/MessageSwitchboard.sol @@ -158,13 +158,11 @@ contract MessageSwitchboard is SwitchboardBase { bytes32 triggerId_, bytes calldata payload_ ) internal returns (DigestParams memory digestParams, bytes32 digest) { - bytes32 payloadId = createPayloadId( - chainSlug, - uint40(uint64(uint256(triggerId_))), - payloadCounter++, - siblingSwitchboards[dstChainSlug_], - dstChainSlug_ - ); + uint128 payloadPointer = (uint128(chainSlug) << 120) | + (uint128(uint64(uint256(triggerId_))) << 80) | + payloadCounter++; + + bytes32 payloadId = createPayloadId(payloadPointer, switchboardId, chainSlug); digestParams = DigestParams({ socket: siblingSockets[dstChainSlug_], @@ -215,10 +213,6 @@ contract MessageSwitchboard is SwitchboardBase { return isAttested[digest_]; } - function registerSwitchboard() external onlyOwner { - socket__.registerSwitchboard(); - } - /** * @dev Function to set switchboard fees for a specific chain (admin only) * @param chainSlug_ Chain slug for which to set the fee diff --git a/contracts/utils/common/IdUtils.sol b/contracts/utils/common/IdUtils.sol index 572f8d5d..8482df03 100644 --- a/contracts/utils/common/IdUtils.sol +++ b/contracts/utils/common/IdUtils.sol @@ -2,21 +2,19 @@ pragma solidity ^0.8.21; /// @notice Creates a payload ID from the given parameters -/// @param requestCount_ The request count -/// @param batchCount_ The batch count -/// @param payloadCount_ The payload count -/// @param switchboard_ The switchboard address +/// @param payloadPointer_ The payload pointer +/// @param switchboardId_ The switchboard id /// @param chainSlug_ The chain slug /// @return The created payload ID function createPayloadId( - uint40 requestCount_, - uint40 batchCount_, - uint40 payloadCount_, - bytes32 switchboard_, + uint160 payloadPointer_, + uint64 switchboardId_, uint32 chainSlug_ ) pure returns (bytes32) { - uint256 payloadCounter = (uint256(requestCount_) << 40) | - (uint256(batchCount_) << 24) | - uint256(payloadCount_); - return keccak256(abi.encodePacked(payloadCounter, chainSlug_, switchboard_)); + return + bytes32( + (uint256(chainSlug_) << 224) | + (uint256(switchboardId_) << 160) | + uint256(payloadPointer_) + ); } diff --git a/contracts/utils/common/Structs.sol b/contracts/utils/common/Structs.sol index d1a8a2ca..5014e339 100644 --- a/contracts/utils/common/Structs.sol +++ b/contracts/utils/common/Structs.sol @@ -89,9 +89,7 @@ struct PromiseReturnData { // AM struct ExecuteParams { bytes4 callType; - uint40 requestCount; - uint40 batchCount; - uint40 payloadCount; + uint128 payloadPointer; uint256 deadline; uint256 gasLimit; uint256 value; @@ -174,10 +172,8 @@ struct QueueParams { } struct PayloadParams { - uint40 requestCount; - uint40 batchCount; - uint40 payloadCount; bytes4 callType; + uint128 payloadPointer; address asyncPromise; address appGateway; bytes32 payloadId; From 4ac2caead8dc3d8bb84941fe44d11d245076a263 Mon Sep 17 00:00:00 2001 From: Ameesha Agrawal Date: Thu, 24 Jul 2025 13:13:23 +0530 Subject: [PATCH 2/8] fix: assign uint64 sb id --- contracts/evmx/interfaces/IConfigurations.sol | 6 +- .../evmx/interfaces/IContractFactoryPlug.sol | 2 +- contracts/evmx/plugs/ContractFactoryPlug.sol | 10 +-- contracts/evmx/plugs/FeesPlug.sol | 4 +- contracts/evmx/watcher/Configurations.sol | 26 ++++---- contracts/evmx/watcher/RequestHandler.sol | 20 +++--- contracts/protocol/Socket.sol | 21 +++---- contracts/protocol/SocketBatcher.sol | 7 +-- contracts/protocol/SocketConfig.sol | 62 +++++++++++-------- contracts/protocol/base/MessagePlugBase.sol | 14 ++--- contracts/protocol/base/PlugBase.sol | 14 ++--- contracts/protocol/interfaces/IPlug.sol | 4 +- contracts/protocol/interfaces/ISocket.sol | 18 +++--- .../protocol/switchboard/FastSwitchboard.sol | 4 -- .../protocol/switchboard/SwitchboardBase.sol | 6 ++ contracts/utils/common/Structs.sol | 8 +-- 16 files changed, 115 insertions(+), 111 deletions(-) diff --git a/contracts/evmx/interfaces/IConfigurations.sol b/contracts/evmx/interfaces/IConfigurations.sol index 9d095679..227a18f3 100644 --- a/contracts/evmx/interfaces/IConfigurations.sol +++ b/contracts/evmx/interfaces/IConfigurations.sol @@ -26,7 +26,7 @@ interface IConfigurations { function getPlugConfigs( uint32 chainSlug_, bytes32 plug_ - ) external view returns (bytes32, bytes32); + ) external view returns (bytes32, uint64); /// @notice Maps chain slug to their associated socket /// @param chainSlug_ The chain slug @@ -36,10 +36,10 @@ interface IConfigurations { /// @notice Returns the socket for a given chain slug /// @param chainSlug_ The chain slug /// @return The socket - function switchboards(uint32 chainSlug_, bytes32 sbType_) external view returns (bytes32); + function switchboards(uint32 chainSlug_, bytes32 sbType_) external view returns (uint64); /// @notice Sets the switchboard for a network - function setSwitchboard(uint32 chainSlug_, bytes32 sbType_, bytes32 switchboard_) external; + function setSwitchboard(uint32 chainSlug_, bytes32 sbType_, uint64 switchboardId_) external; /// @notice Sets valid plugs for each chain slug /// @dev This function is used to verify if a plug deployed on a chain slug is valid connection to the app gateway diff --git a/contracts/evmx/interfaces/IContractFactoryPlug.sol b/contracts/evmx/interfaces/IContractFactoryPlug.sol index 4fa5f0fe..9688be0a 100644 --- a/contracts/evmx/interfaces/IContractFactoryPlug.sol +++ b/contracts/evmx/interfaces/IContractFactoryPlug.sol @@ -15,7 +15,7 @@ interface IContractFactoryPlug { IsPlug isPlug_, bytes32 salt_, bytes32 appGatewayId_, - address switchboard_, + uint64 switchboardId_, bytes memory creationCode_, bytes memory initCallData_ ) external returns (address); diff --git a/contracts/evmx/plugs/ContractFactoryPlug.sol b/contracts/evmx/plugs/ContractFactoryPlug.sol index a83e098e..f92f1bd4 100644 --- a/contracts/evmx/plugs/ContractFactoryPlug.sol +++ b/contracts/evmx/plugs/ContractFactoryPlug.sol @@ -35,7 +35,7 @@ contract ContractFactoryPlug is PlugBase, AccessControl, IContractFactoryPlug { /// @param isPlug_ Whether the contract to be deployed is a plug /// @param salt_ The salt used for create 2 /// @param appGatewayId_ The app gateway id - /// @param switchboard_ The switchboard address + /// @param switchboardId_ The switchboard id /// @param creationCode_ The creation code /// @param initCallData_ The init call data /// @return addr The address of the deployed contract @@ -43,7 +43,7 @@ contract ContractFactoryPlug is PlugBase, AccessControl, IContractFactoryPlug { IsPlug isPlug_, bytes32 salt_, bytes32 appGatewayId_, - address switchboard_, + uint64 switchboardId_, bytes memory creationCode_, bytes memory initCallData_ ) public override onlySocket returns (address addr) { @@ -55,7 +55,7 @@ contract ContractFactoryPlug is PlugBase, AccessControl, IContractFactoryPlug { } } - if (isPlug_ == IsPlug.YES) IPlug(addr).initSocket(appGatewayId_, msg.sender, switchboard_); + if (isPlug_ == IsPlug.YES) IPlug(addr).initSocket(appGatewayId_, msg.sender, switchboardId_); bytes memory returnData; if (initCallData_.length > 0) { @@ -89,9 +89,9 @@ contract ContractFactoryPlug is PlugBase, AccessControl, IContractFactoryPlug { function connectSocket( bytes32 appGatewayId_, address socket_, - address switchboard_ + uint64 switchboardId_ ) external onlyOwner { - _connectSocket(appGatewayId_, socket_, switchboard_); + _connectSocket(appGatewayId_, socket_, switchboardId_); } /** diff --git a/contracts/evmx/plugs/FeesPlug.sol b/contracts/evmx/plugs/FeesPlug.sol index 3e035125..5c9f6124 100644 --- a/contracts/evmx/plugs/FeesPlug.sol +++ b/contracts/evmx/plugs/FeesPlug.sol @@ -119,9 +119,9 @@ contract FeesPlug is IFeesPlug, PlugBase, AccessControl { function connectSocket( bytes32 appGatewayId_, address socket_, - address switchboard_ + uint64 switchboardId_ ) external onlyOwner { - _connectSocket(appGatewayId_, socket_, switchboard_); + _connectSocket(appGatewayId_, socket_, switchboardId_); } /** diff --git a/contracts/evmx/watcher/Configurations.sol b/contracts/evmx/watcher/Configurations.sol index dc0b3694..16af40c8 100644 --- a/contracts/evmx/watcher/Configurations.sol +++ b/contracts/evmx/watcher/Configurations.sol @@ -21,8 +21,8 @@ abstract contract ConfigurationsStorage is IConfigurations { // slot 51 /// @notice Maps chain slug to their associated switchboard - /// @dev chainSlug => sb type => switchboard address - mapping(uint32 => mapping(bytes32 => bytes32)) public switchboards; + /// @dev chainSlug => sb type => switchboard id + mapping(uint32 => mapping(bytes32 => uint64)) public switchboards; // slot 52 /// @notice Maps chain slug to their associated socket @@ -53,8 +53,8 @@ contract Configurations is ConfigurationsStorage, Initializable, Ownable, Watche /// @notice Emitted when a switchboard is set for a network /// @param chainSlug The identifier of the network /// @param sbType The type of switchboard - /// @param switchboard The address of the switchboard - event SwitchboardSet(uint32 chainSlug, bytes32 sbType, bytes32 switchboard); + /// @param switchboardId The id of the switchboard + event SwitchboardSet(uint32 chainSlug, bytes32 sbType, uint64 switchboardId); /// @notice Emitted when socket is set for a network /// @param chainSlug The identifier of the network @@ -105,14 +105,14 @@ contract Configurations is ConfigurationsStorage, Initializable, Ownable, Watche /// @notice Sets the switchboard for a network /// @param chainSlug_ The identifier of the network /// @param sbType_ The type of switchboard, hash of a string - /// @param switchboard_ The address of the switchboard + /// @param switchboardId_ The id of the switchboard function setSwitchboard( uint32 chainSlug_, bytes32 sbType_, - bytes32 switchboard_ + uint64 switchboardId_ ) external onlyOwner { - switchboards[chainSlug_][sbType_] = switchboard_; - emit SwitchboardSet(chainSlug_, sbType_, switchboard_); + switchboards[chainSlug_][sbType_] = switchboardId_; + emit SwitchboardSet(chainSlug_, sbType_, switchboardId_); } /// @notice Sets the valid plugs for an app gateway @@ -135,15 +135,15 @@ contract Configurations is ConfigurationsStorage, Initializable, Ownable, Watche /// @dev Returns zero addresses if configuration doesn't exist /// @param chainSlug_ The identifier of the network /// @param plug_ The address of the plug - /// @return The app gateway id and switchboard address for the plug + /// @return The app gateway id and switchboard id for the plug /// @dev Returns zero addresses if configuration doesn't exist function getPlugConfigs( uint32 chainSlug_, bytes32 plug_ - ) public view returns (bytes32, bytes32) { + ) public view returns (bytes32, uint64) { return ( _plugConfigs[chainSlug_][plug_].appGatewayId, - _plugConfigs[chainSlug_][plug_].switchboard + _plugConfigs[chainSlug_][plug_].switchboardId ); } @@ -159,9 +159,9 @@ contract Configurations is ConfigurationsStorage, Initializable, Ownable, Watche address appGateway_, bytes32 switchboardType_ ) external view { - (bytes32 appGatewayId, bytes32 switchboard) = getPlugConfigs(chainSlug_, target_); + (bytes32 appGatewayId, uint64 switchboardId) = getPlugConfigs(chainSlug_, target_); if (appGatewayId != toBytes32Format(appGateway_)) revert InvalidGateway(); - if (switchboard != switchboards[chainSlug_][switchboardType_]) revert InvalidSwitchboard(); + if (switchboardId != switchboards[chainSlug_][switchboardType_]) revert InvalidSwitchboard(); } /** diff --git a/contracts/evmx/watcher/RequestHandler.sol b/contracts/evmx/watcher/RequestHandler.sol index ad1a6b71..d1f2c351 100644 --- a/contracts/evmx/watcher/RequestHandler.sol +++ b/contracts/evmx/watcher/RequestHandler.sol @@ -227,9 +227,7 @@ contract RequestHandler is RequestHandlerStorage, Initializable, Ownable, Addres _requestBatchIds[requestCount_].push(nextBatchCount); } - // get the switchboard address from the configurations - // returns bytes32(0) for schedule precompile and reads if sb type not set - bytes32 switchboard = watcher__().configurations__().switchboards( + uint64 switchboardId = watcher__().configurations__().switchboards( queuePayloadParam.transaction.chainSlug, queuePayloadParam.switchboardType ); @@ -243,22 +241,20 @@ contract RequestHandler is RequestHandlerStorage, Initializable, Ownable, Addres result.totalEstimatedWatcherFees += estimatedFees; // create payload id - uint40 payloadCount = payloadCounter++; + uint128 payloadPointer = (uint128(requestCount_) << 120) | + (uint128(nextBatchCount) << 80) | + uint128(payloadCounter++); + bytes32 payloadId = createPayloadId( - requestCount_, - nextBatchCount, - payloadCount, - switchboard, - // todo: add evmx chain slug if schedule or read? + payloadPointer, + switchboardId, queuePayloadParam.transaction.chainSlug ); _batchPayloadIds[nextBatchCount].push(payloadId); // create prev digest hash PayloadParams memory p; - p.requestCount = requestCount_; - p.batchCount = nextBatchCount; - p.payloadCount = payloadCount; + p.payloadPointer = payloadPointer; p.callType = callType; p.asyncPromise = queueParams_[i].asyncPromise; p.appGateway = appGateway_; diff --git a/contracts/protocol/Socket.sol b/contracts/protocol/Socket.sol index 3a9ded70..6a942ae3 100644 --- a/contracts/protocol/Socket.sol +++ b/contracts/protocol/Socket.sol @@ -76,16 +76,13 @@ contract Socket is SocketUtils { revert InsufficientMsgValue(); bytes32 payloadId = createPayloadId( - executeParams_.requestCount, - executeParams_.batchCount, - executeParams_.payloadCount, - toBytes32Format(plugConfig.switchboard), + executeParams_.payloadPointer, + plugConfig.switchboardId, chainSlug ); // validate the execution status _validateExecutionStatus(payloadId); - address transmitter = transmissionParams_.transmitterSignature.length > 0 ? _recoverSigner( keccak256(abi.encode(address(this), payloadId)), @@ -104,7 +101,7 @@ contract Socket is SocketUtils { payloadIdToDigest[payloadId] = digest; // verify the digest - _verify(digest, payloadId, plugConfig.switchboard); + _verify(digest, payloadId, plugConfig.switchboardId); return _execute(payloadId, executeParams_, transmissionParams_); } @@ -112,12 +109,12 @@ contract Socket is SocketUtils { //////////////////////////////////////////////////////// ////////////////// INTERNAL FUNCS ////////////////////// //////////////////////////////////////////////////////// - function _verify(bytes32 digest_, bytes32 payloadId_, address switchboard_) internal view { - if (isValidSwitchboard[switchboard_] != SwitchboardStatus.REGISTERED) + function _verify(bytes32 digest_, bytes32 payloadId_, uint64 switchboardId_) internal view { + if (isValidSwitchboard[switchboardId_] != SwitchboardStatus.REGISTERED) revert InvalidSwitchboard(); // NOTE: is the the first un-trusted call in the system, another one is Plug.call - if (!ISwitchboard(switchboard_).allowPayload(digest_, payloadId_)) + if (!ISwitchboard(switchboardAddresses[switchboardId_]).allowPayload(digest_, payloadId_)) revert VerificationFailed(); } @@ -185,14 +182,14 @@ contract Socket is SocketUtils { // if no sibling plug is found for the given chain slug, revert if (plugConfig.appGatewayId == bytes32(0)) revert PlugNotFound(); - if (isValidSwitchboard[plugConfig.switchboard] != SwitchboardStatus.REGISTERED) + if (isValidSwitchboard[plugConfig.switchboardId] != SwitchboardStatus.REGISTERED) revert InvalidSwitchboard(); bytes memory plugOverrides = IPlug(msg.sender).overrides(); triggerId = _encodeTriggerId(); // todo: need gas limit? - ISwitchboard(plugConfig.switchboard).processTrigger{value: msg.value}( + ISwitchboard(switchboardAddresses[plugConfig.switchboardId]).processTrigger{value: msg.value}( msg.sender, triggerId, msg.data, @@ -202,7 +199,7 @@ contract Socket is SocketUtils { emit AppGatewayCallRequested( triggerId, plugConfig.appGatewayId, - toBytes32Format(plugConfig.switchboard), + plugConfig.switchboardId, toBytes32Format(plug_), plugOverrides, msg.data diff --git a/contracts/protocol/SocketBatcher.sol b/contracts/protocol/SocketBatcher.sol index 19a3db8b..ecaecee8 100644 --- a/contracts/protocol/SocketBatcher.sol +++ b/contracts/protocol/SocketBatcher.sol @@ -64,13 +64,12 @@ contract SocketBatcher is ISocketBatcher, Ownable { function attestCCTPAndProveAndExecute( CCTPExecutionParams calldata execParams_, CCTPBatchParams calldata cctpParams_, + uint64 switchboardId_, address switchboard_ ) external payable returns (bool, bytes memory) { bytes32 payloadId = createPayloadId( - execParams_.executeParams.requestCount, - execParams_.executeParams.batchCount, - execParams_.executeParams.payloadCount, - bytes32(uint256(uint160(address(switchboard_)))), + execParams_.executeParams.payloadPointer, + switchboardId_, socket__.chainSlug() ); ICCTPSwitchboard(switchboard_).attestVerifyAndProveExecutions( diff --git a/contracts/protocol/SocketConfig.sol b/contracts/protocol/SocketConfig.sol index 32bafb17..d5fc01d9 100644 --- a/contracts/protocol/SocketConfig.sol +++ b/contracts/protocol/SocketConfig.sol @@ -22,7 +22,7 @@ abstract contract SocketConfig is ISocket, AccessControl { ISocketFeeManager public socketFeeManager; // @notice mapping of switchboard address to its status, helps socket to block invalid switchboards - mapping(address => SwitchboardStatus) public isValidSwitchboard; + mapping(uint64 => SwitchboardStatus) public isValidSwitchboard; // @notice mapping of plug address to its config mapping(address => PlugConfigEvm) internal _plugConfigs; @@ -30,41 +30,54 @@ abstract contract SocketConfig is ISocket, AccessControl { // @notice max copy bytes for socket uint16 public maxCopyBytes = 2048; // 2KB + // @notice counter for switchboard ids + uint64 public switchboardIdCounter = 1; + + // @notice mapping of switchboard id to its address + mapping(uint64 => address) public switchboardAddresses; + + // @notice mapping of switchboard address to its id + mapping(address => uint64) public switchboardIds; + // @notice error triggered when a switchboard already exists error SwitchboardExists(); - // @notice error triggered when a switchboard already exists or is disabled - error SwitchboardExistsOrDisabled(); // @notice event triggered when a new switchboard is added - event SwitchboardAdded(address switchboard); + event SwitchboardAdded(address switchboard, uint64 switchboardId); // @notice event triggered when a switchboard is disabled - event SwitchboardDisabled(address switchboard); + event SwitchboardDisabled(uint64 switchboardId); // @notice event triggered when a switchboard is enabled - event SwitchboardEnabled(address switchboard); + event SwitchboardEnabled(uint64 switchboardId); event SocketFeeManagerUpdated(address oldSocketFeeManager, address newSocketFeeManager); // @notice function to register a switchboard // @dev only callable by switchboards - function registerSwitchboard() external { - if (isValidSwitchboard[msg.sender] != SwitchboardStatus.NOT_REGISTERED) - revert SwitchboardExistsOrDisabled(); + function registerSwitchboard() external returns (uint64 switchboardId) { + switchboardId = switchboardIds[msg.sender]; + if (switchboardId != 0) revert SwitchboardExists(); - isValidSwitchboard[msg.sender] = SwitchboardStatus.REGISTERED; - emit SwitchboardAdded(msg.sender); + switchboardId = switchboardIdCounter++; + switchboardIds[msg.sender] = switchboardId; + switchboardAddresses[switchboardId] = msg.sender; + isValidSwitchboard[switchboardId] = SwitchboardStatus.REGISTERED; + + emit SwitchboardAdded(msg.sender, switchboardId); } // @notice function to disable a switchboard // @dev only callable by governance role - function disableSwitchboard(address switchboard_) external onlyRole(SWITCHBOARD_DISABLER_ROLE) { - isValidSwitchboard[switchboard_] = SwitchboardStatus.DISABLED; - emit SwitchboardDisabled(switchboard_); + function disableSwitchboard( + uint64 switchboardId_ + ) external onlyRole(SWITCHBOARD_DISABLER_ROLE) { + isValidSwitchboard[switchboardId_] = SwitchboardStatus.DISABLED; + emit SwitchboardDisabled(switchboardId_); } // @notice function to enable a switchboard // @dev only callable by governance role - function enableSwitchboard() external onlyRole(GOVERNANCE_ROLE) { - isValidSwitchboard[msg.sender] = SwitchboardStatus.REGISTERED; - emit SwitchboardEnabled(msg.sender); + function enableSwitchboard(uint64 switchboardId_) external onlyRole(GOVERNANCE_ROLE) { + isValidSwitchboard[switchboardId_] = SwitchboardStatus.REGISTERED; + emit SwitchboardEnabled(switchboardId_); } function setSocketFeeManager(address socketFeeManager_) external onlyRole(GOVERNANCE_ROLE) { @@ -75,16 +88,15 @@ abstract contract SocketConfig is ISocket, AccessControl { /** * @notice connects Plug to Socket and sets the config for given `siblingChainSlug_` */ - function connect(bytes32 appGatewayId_, address switchboard_) external override { - if (isValidSwitchboard[switchboard_] != SwitchboardStatus.REGISTERED) + function connect(bytes32 appGatewayId_, uint64 switchboardId_) external override { + if (isValidSwitchboard[switchboardId_] != SwitchboardStatus.REGISTERED) revert InvalidSwitchboard(); PlugConfigEvm storage _plugConfig = _plugConfigs[msg.sender]; - _plugConfig.appGatewayId = appGatewayId_; - _plugConfig.switchboard = switchboard_; + _plugConfig.switchboardId = switchboardId_; - emit PlugConnected(msg.sender, appGatewayId_, switchboard_); + emit PlugConnected(msg.sender, appGatewayId_, switchboardId_); } // @notice function to set the max copy bytes for socket @@ -98,12 +110,12 @@ abstract contract SocketConfig is ISocket, AccessControl { * @notice returns the config for given `plugAddress_` * @param plugAddress_ address of plug present at current chain * @return appGatewayId The app gateway id - * @return switchboard The switchboard address + * @return switchboardId The switchboard id */ function getPlugConfig( address plugAddress_ - ) external view returns (bytes32 appGatewayId, address switchboard) { + ) external view returns (bytes32 appGatewayId, uint64 switchboardId) { PlugConfigEvm memory _plugConfig = _plugConfigs[plugAddress_]; - return (_plugConfig.appGatewayId, _plugConfig.switchboard); + return (_plugConfig.appGatewayId, _plugConfig.switchboardId); } } diff --git a/contracts/protocol/base/MessagePlugBase.sol b/contracts/protocol/base/MessagePlugBase.sol index 5c0d83f4..768a374e 100644 --- a/contracts/protocol/base/MessagePlugBase.sol +++ b/contracts/protocol/base/MessagePlugBase.sol @@ -18,21 +18,21 @@ interface IMessageSwitchboard is ISwitchboard { /// Uses constant appGatewayId (0xaaaaa) for all chains abstract contract MessagePlugBase is PlugBase { address public switchboard; + uint64 public switchboardId; uint256 public triggerPrefix; error NotSupported(); - constructor(address socket_, address switchboard_) { + constructor(address socket_, uint64 switchboardId_) { _setSocket(socket_); - switchboard = switchboard_; - socket__.connect(APP_GATEWAY_ID, switchboard); + switchboardId = switchboardId_; + switchboard = socket__.switchboardAddresses(switchboardId_); + socket__.connect(APP_GATEWAY_ID, switchboardId_); - triggerPrefix = - (uint256(socket__.chainSlug()) << 224) | - (uint256(uint160(address(this))) << 64); + triggerPrefix = (uint256(socket__.chainSlug()) << 224) | (uint256(uint160(socket_)) << 64); } /// @notice Initializes the socket with the new protocol - function initSocket(bytes32, address, address) external override socketInitializer { + function initSocket(bytes32, address, uint64) external override socketInitializer { revert("Not Supported"); } diff --git a/contracts/protocol/base/PlugBase.sol b/contracts/protocol/base/PlugBase.sol index 3bd4c160..1d854407 100644 --- a/contracts/protocol/base/PlugBase.sol +++ b/contracts/protocol/base/PlugBase.sol @@ -33,18 +33,18 @@ abstract contract PlugBase is IPlug { /// @notice Connects the plug to the app gateway and switchboard /// @param appGatewayId_ The app gateway id /// @param socket_ The socket address - /// @param switchboard_ The switchboard address - function _connectSocket(bytes32 appGatewayId_, address socket_, address switchboard_) internal { + /// @param switchboardId_ The switchboard id + function _connectSocket(bytes32 appGatewayId_, address socket_, uint64 switchboardId_) internal { _setSocket(socket_); appGatewayId = appGatewayId_; - socket__.connect(appGatewayId_, switchboard_); + socket__.connect(appGatewayId_, switchboardId_); } /// @notice Disconnects the plug from the socket function _disconnectSocket() internal { - (, address switchboard) = socket__.getPlugConfig(address(this)); - socket__.connect(bytes32(0), switchboard); + (, uint64 switchboardId) = socket__.getPlugConfig(address(this)); + socket__.connect(bytes32(0), switchboardId); emit ConnectorPlugDisconnected(); } @@ -63,8 +63,8 @@ abstract contract PlugBase is IPlug { function initSocket( bytes32 appGatewayId_, address socket_, - address switchboard_ + uint64 switchboardId_ ) external virtual socketInitializer { - _connectSocket(appGatewayId_, socket_, switchboard_); + _connectSocket(appGatewayId_, socket_, switchboardId_); } } diff --git a/contracts/protocol/interfaces/IPlug.sol b/contracts/protocol/interfaces/IPlug.sol index be18836e..2eb70721 100644 --- a/contracts/protocol/interfaces/IPlug.sol +++ b/contracts/protocol/interfaces/IPlug.sol @@ -9,8 +9,8 @@ interface IPlug { /// @notice Initializes the socket /// @param appGatewayId_ The app gateway id /// @param socket_ The socket address - /// @param switchboard_ The switchboard address - function initSocket(bytes32 appGatewayId_, address socket_, address switchboard_) external; + /// @param switchboardId_ The switchboard id + function initSocket(bytes32 appGatewayId_, address socket_, uint64 switchboardId_) external; /// @notice Gets the overrides /// @return overrides_ The overrides diff --git a/contracts/protocol/interfaces/ISocket.sol b/contracts/protocol/interfaces/ISocket.sol index e7d475df..7083c36a 100644 --- a/contracts/protocol/interfaces/ISocket.sol +++ b/contracts/protocol/interfaces/ISocket.sol @@ -28,14 +28,14 @@ interface ISocket { * @notice emits the config set by a plug for a remoteChainSlug * @param plug address of plug on current chain * @param appGatewayId address of plug on sibling chain - * @param switchboard outbound switchboard (select from registered options) + * @param switchboardId outbound switchboard (select from registered options) */ - event PlugConnected(address plug, bytes32 appGatewayId, address switchboard); + event PlugConnected(address plug, bytes32 appGatewayId, uint64 switchboardId); /** * @notice emits the payload details when a new payload arrives at outbound * @param triggerId trigger id - * @param switchboard switchboard address + * @param switchboardId switchboard id * @param plug local plug address * @param overrides params, for specifying details like fee pool chain, fee pool token and max fees if required * @param payload the data which will be used by contracts on chain @@ -43,7 +43,7 @@ interface ISocket { event AppGatewayCallRequested( bytes32 triggerId, bytes32 appGatewayId, - bytes32 switchboard, + uint64 switchboardId, bytes32 plug, bytes overrides, bytes payload @@ -60,14 +60,14 @@ interface ISocket { /** * @notice sets the config specific to the plug * @param appGatewayId_ address of plug present at sibling chain - * @param switchboard_ the address of switchboard to use for executing payloads + * @param switchboardId_ the id of switchboard to use for executing payloads */ - function connect(bytes32 appGatewayId_, address switchboard_) external; + function connect(bytes32 appGatewayId_, uint64 switchboardId_) external; /** * @notice registers a switchboard for the socket */ - function registerSwitchboard() external; + function registerSwitchboard() external returns (uint64); /** * @notice returns the config for given `plugAddress_` and `siblingChainSlug_` @@ -75,7 +75,7 @@ interface ISocket { */ function getPlugConfig( address plugAddress_ - ) external view returns (bytes32 appGatewayId, address switchboard); + ) external view returns (bytes32 appGatewayId, uint64 switchboardId); function payloadExecuted(bytes32 payloadId_) external view returns (ExecutionStatus); @@ -84,4 +84,6 @@ interface ISocket { function payloadIdToDigest(bytes32 payloadId_) external view returns (bytes32); function triggerCounter() external view returns (uint64); + + function switchboardAddresses(uint64 switchboardId_) external view returns (address); } diff --git a/contracts/protocol/switchboard/FastSwitchboard.sol b/contracts/protocol/switchboard/FastSwitchboard.sol index 2eaf66fa..95a41629 100644 --- a/contracts/protocol/switchboard/FastSwitchboard.sol +++ b/contracts/protocol/switchboard/FastSwitchboard.sol @@ -61,10 +61,6 @@ contract FastSwitchboard is SwitchboardBase { return isAttested[digest_]; } - function registerSwitchboard() external onlyOwner { - socket__.registerSwitchboard(); - } - function processTrigger( address plug_, bytes32 triggerId_, diff --git a/contracts/protocol/switchboard/SwitchboardBase.sol b/contracts/protocol/switchboard/SwitchboardBase.sol index 99e3a607..aed60da0 100644 --- a/contracts/protocol/switchboard/SwitchboardBase.sol +++ b/contracts/protocol/switchboard/SwitchboardBase.sol @@ -16,6 +16,8 @@ abstract contract SwitchboardBase is ISwitchboard, AccessControl { // chain slug of deployed chain uint32 public immutable chainSlug; + uint64 public switchboardId; + /** * @dev Constructor of SwitchboardBase * @param chainSlug_ Chain slug of deployment chain @@ -27,6 +29,10 @@ abstract contract SwitchboardBase is ISwitchboard, AccessControl { _initializeOwner(owner_); } + function registerSwitchboard() external onlyOwner { + switchboardId = socket__.registerSwitchboard(); + } + /// @notice Recovers the signer from the signature /// @param digest_ The digest of the payload /// @param signature_ The signature of the watcher diff --git a/contracts/utils/common/Structs.sol b/contracts/utils/common/Structs.sol index 5014e339..0804e09b 100644 --- a/contracts/utils/common/Structs.sol +++ b/contracts/utils/common/Structs.sol @@ -56,19 +56,15 @@ struct AppGatewayConfig { uint32 chainSlug; } // Plug config: -// struct PlugConfig { -// bytes32 appGatewayId; -// address switchboard; -// } struct PlugConfigGeneric { bytes32 appGatewayId; - bytes32 switchboard; + uint64 switchboardId; } // Plug config: struct PlugConfigEvm { bytes32 appGatewayId; - address switchboard; + uint64 switchboardId; } //trigger: From ae497dddb23408771dd5afac149b931cb42945e8 Mon Sep 17 00:00:00 2001 From: Ameesha Agrawal Date: Thu, 24 Jul 2025 13:13:30 +0530 Subject: [PATCH 3/8] fix: build --- test/FeesTest.t.sol | 13 ++-- test/MessageSwitchboardTest.t.sol | 4 +- test/SetupTest.t.sol | 71 ++++++++----------- test/SocketFeeManager.t.sol | 6 +- test/Watcher.t.sol | 2 +- .../app-gateways/counter/MessageCounter.sol | 2 +- test/mock/MockFastSwitchboard.sol | 3 +- test/mock/MockSocket.sol | 18 ++--- 8 files changed, 55 insertions(+), 64 deletions(-) diff --git a/test/FeesTest.t.sol b/test/FeesTest.t.sol index c94d0681..26424c24 100644 --- a/test/FeesTest.t.sol +++ b/test/FeesTest.t.sol @@ -96,7 +96,7 @@ contract FeesTest is AppGatewayBaseSetup { arbConfig.feesPlug.connectSocket( bytes32(0), address(arbConfig.socket), - address(arbConfig.switchboard) + arbConfig.switchboard.switchboardId() ); hoax(watcherEOA); @@ -106,7 +106,10 @@ contract FeesTest is AppGatewayBaseSetup { configs[0] = AppGatewayConfig({ chainSlug: arbChainSlug, plug: toBytes32Format(address(arbConfig.feesPlug)), - plugConfig: PlugConfigGeneric({appGatewayId: bytes32(0), switchboard: bytes32(0)}) + plugConfig: PlugConfigGeneric({ + appGatewayId: bytes32(0), + switchboardId: arbConfig.switchboard.switchboardId() + }) }); watcherMultiCall( address(configurations), @@ -135,7 +138,7 @@ contract FeesTest is AppGatewayBaseSetup { oldFeesPlug.connectSocket( bytes32(0), address(arbConfig.socket), - address(arbConfig.switchboard) + arbConfig.switchboard.switchboardId() ); // deploy new fees plug @@ -148,7 +151,7 @@ contract FeesTest is AppGatewayBaseSetup { arbConfig.feesPlug.connectSocket( toBytes32Format(address(feesManager)), address(arbConfig.socket), - address(arbConfig.switchboard) + arbConfig.switchboard.switchboardId() ); vm.stopPrank(); @@ -161,7 +164,7 @@ contract FeesTest is AppGatewayBaseSetup { plug: toBytes32Format(address(arbConfig.feesPlug)), plugConfig: PlugConfigGeneric({ appGatewayId: toBytes32Format(address(feesManager)), - switchboard: toBytes32Format(address(arbConfig.switchboard)) + switchboardId: arbConfig.switchboard.switchboardId() }) }); watcherMultiCall( diff --git a/test/MessageSwitchboardTest.t.sol b/test/MessageSwitchboardTest.t.sol index 8b2eb373..fede68e0 100644 --- a/test/MessageSwitchboardTest.t.sol +++ b/test/MessageSwitchboardTest.t.sol @@ -10,8 +10,8 @@ contract MessageSwitchboardTest is MessageSwitchboardSetup { function setUp() public { _deploy(); - arbPlug = new CounterPlug(address(arbConfig.socket), address(arbConfig.messageSwitchboard)); - optPlug = new CounterPlug(address(optConfig.socket), address(optConfig.messageSwitchboard)); + arbPlug = new CounterPlug(address(arbConfig.socket), arbConfig.messageSwitchboard.switchboardId()); + optPlug = new CounterPlug(address(optConfig.socket), optConfig.messageSwitchboard.switchboardId()); arbPlug.registerSibling(optConfig.chainSlug, address(optPlug)); optPlug.registerSibling(arbConfig.chainSlug, address(arbPlug)); diff --git a/test/SetupTest.t.sol b/test/SetupTest.t.sol index 4b8a9eef..c269a40e 100644 --- a/test/SetupTest.t.sol +++ b/test/SetupTest.t.sol @@ -209,7 +209,7 @@ contract DeploySetup is SetupStore { plug: toBytes32Format(address(arbConfig.feesPlug)), plugConfig: PlugConfigGeneric({ appGatewayId: toBytes32Format(address(feesManager)), - switchboard: toBytes32Format(address(arbConfig.switchboard)) + switchboardId: arbConfig.switchboard.switchboardId() }) }); configs[1] = AppGatewayConfig({ @@ -217,7 +217,7 @@ contract DeploySetup is SetupStore { plug: toBytes32Format(address(optConfig.feesPlug)), plugConfig: PlugConfigGeneric({ appGatewayId: toBytes32Format(address(feesManager)), - switchboard: toBytes32Format(address(optConfig.switchboard)) + switchboardId: optConfig.switchboard.switchboardId() }) }); configs[2] = AppGatewayConfig({ @@ -225,7 +225,7 @@ contract DeploySetup is SetupStore { plug: toBytes32Format(address(arbConfig.contractFactoryPlug)), plugConfig: PlugConfigGeneric({ appGatewayId: toBytes32Format(address(writePrecompile)), - switchboard: toBytes32Format(address(arbConfig.switchboard)) + switchboardId: arbConfig.switchboard.switchboardId() }) }); configs[3] = AppGatewayConfig({ @@ -233,7 +233,7 @@ contract DeploySetup is SetupStore { plug: toBytes32Format(address(optConfig.contractFactoryPlug)), plugConfig: PlugConfigGeneric({ appGatewayId: toBytes32Format(address(writePrecompile)), - switchboard: toBytes32Format(address(optConfig.switchboard)) + switchboardId: optConfig.switchboard.switchboardId() }) }); @@ -304,22 +304,22 @@ contract DeploySetup is SetupStore { feesPlug.connectSocket( toBytes32Format(address(feesManager)), address(socket), - address(switchboard) + switchboard.switchboardId() ); contractFactoryPlug.grantRole(RESCUE_ROLE, address(socketOwner)); contractFactoryPlug.connectSocket( toBytes32Format(address(writePrecompile)), address(socket), - address(switchboard) + switchboard.switchboardId() ); vm.stopPrank(); vm.startPrank(watcherEOA); configurations.setSocket(chainSlug_, toBytes32Format(address(socket))); - configurations.setSwitchboard(chainSlug_, FAST, toBytes32Format(address(switchboard))); - configurations.setSwitchboard(chainSlug_, CCTP, toBytes32Format(address(cctpSwitchboard))); + configurations.setSwitchboard(chainSlug_, FAST, switchboard.switchboardId()); + configurations.setSwitchboard(chainSlug_, CCTP, cctpSwitchboard.switchboardId()); // plugs feesManager.setFeesPlug(chainSlug_, toBytes32Format(address(feesPlug))); @@ -915,8 +915,8 @@ contract WatcherSetup is AuctionSetup { switchboard = switchboard_; bytes32 prevBatchDigestHash = writePrecompile.getPrevBatchDigestHash( - payloadParams.requestCount, - payloadParams.batchCount + uint40(payloadParams.payloadPointer >> 120), + uint40(payloadParams.payloadPointer >> 80) ); digestParams = DigestParams( toBytes32Format(address(getSocketConfig(transaction.chainSlug).socket)), @@ -960,9 +960,7 @@ contract WatcherSetup is AuctionSetup { value: digestParams.value, payload: digestParams.payload, target: fromBytes32Format(digestParams.target), - requestCount: payloadParams.requestCount, - batchCount: payloadParams.batchCount, - payloadCount: payloadParams.payloadCount, + payloadPointer: payloadParams.payloadPointer, prevBatchDigestHash: digestParams.prevBatchDigestHash, extraData: digestParams.extraData }); @@ -1014,6 +1012,7 @@ contract WatcherSetup is AuctionSetup { refundAddress: transmitterEOA }), cctpBatchParams, + getSocketConfig(chainSlug).cctpSwitchboard.switchboardId(), address(getSocketConfig(chainSlug).cctpSwitchboard) ); } @@ -1023,9 +1022,9 @@ contract WatcherSetup is AuctionSetup { PayloadParams memory payloadParams ) internal view returns (CCTPBatchParams memory cctpBatchParams) { uint40[] memory requestBatchIds = requestHandler.getRequestBatchIds( - payloadParams.requestCount + uint40(payloadParams.payloadPointer >> 120) ); - uint40 currentBatchCount = payloadParams.batchCount; + uint40 currentBatchCount = uint40(payloadParams.payloadPointer >> 80); bytes32[] memory prevBatchPayloadIds = _getPrevBatchPayloadIds( currentBatchCount, @@ -1148,14 +1147,14 @@ contract WatcherSetup is AuctionSetup { for (uint i = 0; i < contractIds_.length; i++) { bytes32 plug = appGateway_.getOnChainAddress(contractIds_[i], chainSlug_); - bytes32 switchboard = configurations.switchboards(chainSlug_, appGateway_.sbType()); + uint64 switchboardId = configurations.switchboards(chainSlug_, appGateway_.sbType()); if (plug != bytes32(0)) { configs[configIndex] = AppGatewayConfig({ plug: plug, chainSlug: chainSlug_, plugConfig: PlugConfigGeneric({ appGatewayId: toBytes32Format(address(appGateway_)), - switchboard: switchboard + switchboardId: switchboardId }) }); configIndex++; @@ -1273,19 +1272,9 @@ contract AppGatewayBaseSetup is WatcherSetup { ); // PayloadParams checks assertEq( - actualPayload.requestCount, - expectedPayload.requestCount, - "Payload: requestCount mismatch" - ); - assertEq( - actualPayload.batchCount, - expectedPayload.batchCount, - "Payload: batchCount mismatch" - ); - assertEq( - actualPayload.payloadCount, - expectedPayload.payloadCount, - "Payload: payloadCount mismatch" + actualPayload.payloadPointer, + expectedPayload.payloadPointer, + "Payload: payloadPointer mismatch" ); assertEq( actualPayload.callType, @@ -1353,12 +1342,14 @@ contract MessageSwitchboardSetup is DeploySetup { bytes32 triggerId = srcPlug_.getNextTriggerId(srcSocketConfig_.chainSlug); payloadCounter = srcSocketConfig_.messageSwitchboard.payloadCounter(); + uint128 payloadPointer = (uint128(srcSocketConfig_.chainSlug) << 120) | + (uint128(uint64(uint256(triggerId))) << 80) | + payloadCounter; + bytes32 payloadId = createPayloadId( - srcSocketConfig_.chainSlug, - uint40(uint64(uint256(triggerId))), - payloadCounter, - toBytes32Format(address(dstSocketConfig_.messageSwitchboard)), - dstSocketConfig_.chainSlug + payloadPointer, + dstSocketConfig_.messageSwitchboard.switchboardId(), + srcSocketConfig_.chainSlug ); digestParams = _createDigestParams( @@ -1375,10 +1366,10 @@ contract MessageSwitchboardSetup is DeploySetup { function _executeOnDestination( DigestParams memory digestParams_, bytes32 triggerId_, - uint256 payloadCount_ + uint128 payloadPointer_ ) internal { _attestPayload(digestParams_); - _execute(digestParams_, triggerId_, payloadCount_); + _execute(digestParams_, triggerId_, payloadPointer_); } // Helper function to attest a payload @@ -1445,7 +1436,7 @@ contract MessageSwitchboardSetup is DeploySetup { function _execute( DigestParams memory digestParams_, bytes32 triggerId_, - uint256 payloadCount_ + uint128 payloadPointer_ ) internal { // this is a signature for the socket batcher (only used for EVM) ExecuteParams memory executeParams = ExecuteParams({ @@ -1455,9 +1446,7 @@ contract MessageSwitchboardSetup is DeploySetup { value: digestParams_.value, payload: digestParams_.payload, target: fromBytes32Format(digestParams_.target), - requestCount: uint40(arbConfig.chainSlug), - batchCount: uint40(uint64(uint256(triggerId_))), - payloadCount: uint40(payloadCount_), + payloadPointer: payloadPointer_, prevBatchDigestHash: digestParams_.prevBatchDigestHash, extraData: digestParams_.extraData }); diff --git a/test/SocketFeeManager.t.sol b/test/SocketFeeManager.t.sol index 1fc6ce21..4d613b76 100644 --- a/test/SocketFeeManager.t.sol +++ b/test/SocketFeeManager.t.sol @@ -25,7 +25,7 @@ contract SocketFeeManagerTest is AppGatewayBaseSetup { counter = new Counter(); mockSwitchboard.registerSwitchboard(); - counter.initSocket(toBytes32Format(gateway), address(socket), address(mockSwitchboard)); + counter.initSocket(toBytes32Format(gateway), address(socket), mockSwitchboard.switchboardId()); vm.prank(owner); socket.grantRole(GOVERNANCE_ROLE, address(owner)); @@ -134,9 +134,7 @@ contract SocketFeeManagerTest is AppGatewayBaseSetup { value: 0, payload: payload, target: address(counter), - requestCount: 0, - batchCount: 0, - payloadCount: 0, + payloadPointer: 0, prevBatchDigestHash: bytes32(0), extraData: bytes("") }); diff --git a/test/Watcher.t.sol b/test/Watcher.t.sol index 4a0b9395..e1977270 100644 --- a/test/Watcher.t.sol +++ b/test/Watcher.t.sol @@ -24,7 +24,7 @@ contract WatcherTest is AppGatewayBaseSetup { arbConfig.feesPlug.initSocket( bytes32(0), address(hackerEOA), - address(arbConfig.switchboard) + arbConfig.switchboard.switchboardId() ); } } diff --git a/test/apps/app-gateways/counter/MessageCounter.sol b/test/apps/app-gateways/counter/MessageCounter.sol index 079eab9d..8f8194ca 100644 --- a/test/apps/app-gateways/counter/MessageCounter.sol +++ b/test/apps/app-gateways/counter/MessageCounter.sol @@ -15,7 +15,7 @@ contract CounterPlug is MessagePlugBase { event IncrementRequested(bytes32 triggerId, uint32 dstChainSlug); event IncrementExecuted(bytes32 triggerId, uint256 newCount); - constructor(address socket_, address switchboard_) MessagePlugBase(socket_, switchboard_) {} + constructor(address socket_, uint64 switchboardId_) MessagePlugBase(socket_, switchboardId_) {} /// @notice Increment the counter (local function) function increment() external { diff --git a/test/mock/MockFastSwitchboard.sol b/test/mock/MockFastSwitchboard.sol index 3f033f9f..2dab11dc 100644 --- a/test/mock/MockFastSwitchboard.sol +++ b/test/mock/MockFastSwitchboard.sol @@ -10,6 +10,7 @@ contract MockFastSwitchboard is ISwitchboard { // chain slug of deployed chain uint32 public immutable chainSlug; + uint64 public switchboardId; /** * @dev Constructor of SwitchboardBase @@ -30,7 +31,7 @@ contract MockFastSwitchboard is ISwitchboard { } function registerSwitchboard() external { - socket__.registerSwitchboard(); + switchboardId = socket__.registerSwitchboard(); } function processTrigger( diff --git a/test/mock/MockSocket.sol b/test/mock/MockSocket.sol index 5cf916cf..4910b242 100644 --- a/test/mock/MockSocket.sol +++ b/test/mock/MockSocket.sol @@ -18,25 +18,25 @@ contract MockSocket is ISocket { struct PlugConfigEvm { // address of the sibling plug on the remote chain bytes32 appGatewayId; - // switchboard instance for the plug connection - ISwitchboard switchboard__; + // switchboard id for the plug connection + uint64 switchboardId; } - // plug => (appGateway, switchboard__) + // plug => (appGateway, switchboardId) mapping(address => PlugConfigEvm) internal _plugConfigs; mapping(bytes32 => bytes32) public payloadIdToDigest; function getPlugConfig( address plugAddress_ - ) external view returns (bytes32 appGatewayId, address switchboard__) { + ) external view returns (bytes32 appGatewayId, uint64 switchboardId) { PlugConfigEvm memory _plugConfig = _plugConfigs[plugAddress_]; - return (_plugConfig.appGatewayId, address(_plugConfig.switchboard__)); + return (_plugConfig.appGatewayId, _plugConfig.switchboardId); } - function connect(bytes32 appGatewayId_, address switchboard_) external override {} + function connect(bytes32 appGatewayId_, uint64 switchboardId_) external override {} - function registerSwitchboard() external override {} + function registerSwitchboard() external override returns (uint64 switchboardId) {} //////////////////////////////////////////////////////// ////////////////////// ERRORS ////////////////////////// @@ -67,7 +67,7 @@ contract MockSocket is ISocket { //////////////////////////////////////////////////////////// uint64 public triggerCounter; uint32 public chainSlug; - + mapping(uint64 => address) public switchboardAddresses; /** * @dev keeps track of whether a payload has been executed or not using payload id */ @@ -94,7 +94,7 @@ contract MockSocket is ISocket { emit AppGatewayCallRequested( triggerId, plugConfig.appGatewayId, - toBytes32Format(address(plugConfig.switchboard__)), + plugConfig.switchboardId, toBytes32Format(msg.sender), overrides, payload From 2fec83882455d91e8c78e067f56df3e4e1edab4e Mon Sep 17 00:00:00 2001 From: Ameesha Agrawal Date: Thu, 24 Jul 2025 15:31:25 +0530 Subject: [PATCH 4/8] fix: id data type --- contracts/evmx/watcher/RequestHandler.sol | 6 +++--- contracts/evmx/watcher/precompiles/WritePrecompile.sol | 1 - contracts/protocol/base/PlugBase.sol | 7 +++++-- contracts/protocol/switchboard/MessageSwitchboard.sol | 4 ++-- contracts/utils/common/Structs.sol | 4 ++-- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/contracts/evmx/watcher/RequestHandler.sol b/contracts/evmx/watcher/RequestHandler.sol index d1f2c351..7a4936f5 100644 --- a/contracts/evmx/watcher/RequestHandler.sol +++ b/contracts/evmx/watcher/RequestHandler.sol @@ -241,9 +241,9 @@ contract RequestHandler is RequestHandlerStorage, Initializable, Ownable, Addres result.totalEstimatedWatcherFees += estimatedFees; // create payload id - uint128 payloadPointer = (uint128(requestCount_) << 120) | - (uint128(nextBatchCount) << 80) | - uint128(payloadCounter++); + uint160 payloadPointer = (uint160(requestCount_) << 120) | + (uint160(nextBatchCount) << 80) | + uint160(payloadCounter++); bytes32 payloadId = createPayloadId( payloadPointer, diff --git a/contracts/evmx/watcher/precompiles/WritePrecompile.sol b/contracts/evmx/watcher/precompiles/WritePrecompile.sol index 30bfeadb..e2768e0a 100644 --- a/contracts/evmx/watcher/precompiles/WritePrecompile.sol +++ b/contracts/evmx/watcher/precompiles/WritePrecompile.sol @@ -170,7 +170,6 @@ contract WritePrecompile is WritePrecompileStorage, Initializable, Ownable, Watc deadline = block.timestamp + expiryTime; fees = getPrecompileFees(payloadParams.precompileData); - // todo: fix batch count bytes32 prevBatchDigestHash = getPrevBatchDigestHash( uint40(payloadParams.payloadPointer >> 120), uint40(payloadParams.payloadPointer >> 80) diff --git a/contracts/protocol/base/PlugBase.sol b/contracts/protocol/base/PlugBase.sol index 1d854407..856ff24d 100644 --- a/contracts/protocol/base/PlugBase.sol +++ b/contracts/protocol/base/PlugBase.sol @@ -34,10 +34,13 @@ abstract contract PlugBase is IPlug { /// @param appGatewayId_ The app gateway id /// @param socket_ The socket address /// @param switchboardId_ The switchboard id - function _connectSocket(bytes32 appGatewayId_, address socket_, uint64 switchboardId_) internal { + function _connectSocket( + bytes32 appGatewayId_, + address socket_, + uint64 switchboardId_ + ) internal { _setSocket(socket_); appGatewayId = appGatewayId_; - socket__.connect(appGatewayId_, switchboardId_); } diff --git a/contracts/protocol/switchboard/MessageSwitchboard.sol b/contracts/protocol/switchboard/MessageSwitchboard.sol index 872b7a57..81262b09 100644 --- a/contracts/protocol/switchboard/MessageSwitchboard.sol +++ b/contracts/protocol/switchboard/MessageSwitchboard.sol @@ -158,8 +158,8 @@ contract MessageSwitchboard is SwitchboardBase { bytes32 triggerId_, bytes calldata payload_ ) internal returns (DigestParams memory digestParams, bytes32 digest) { - uint128 payloadPointer = (uint128(chainSlug) << 120) | - (uint128(uint64(uint256(triggerId_))) << 80) | + uint160 payloadPointer = (uint160(chainSlug) << 120) | + (uint160(uint64(uint256(triggerId_))) << 80) | payloadCounter++; bytes32 payloadId = createPayloadId(payloadPointer, switchboardId, chainSlug); diff --git a/contracts/utils/common/Structs.sol b/contracts/utils/common/Structs.sol index 0804e09b..133324e5 100644 --- a/contracts/utils/common/Structs.sol +++ b/contracts/utils/common/Structs.sol @@ -85,7 +85,7 @@ struct PromiseReturnData { // AM struct ExecuteParams { bytes4 callType; - uint128 payloadPointer; + uint160 payloadPointer; uint256 deadline; uint256 gasLimit; uint256 value; @@ -169,7 +169,7 @@ struct QueueParams { struct PayloadParams { bytes4 callType; - uint128 payloadPointer; + uint160 payloadPointer; address asyncPromise; address appGateway; bytes32 payloadId; From c3219f5ebf227b2546519134c5e53d980de3001f Mon Sep 17 00:00:00 2001 From: Ameesha Agrawal Date: Thu, 24 Jul 2025 15:31:34 +0530 Subject: [PATCH 5/8] fix: setup tests --- test/MessageSwitchboardTest.t.sol | 14 +++++++--- test/SetupTest.t.sol | 46 ++++++++++++++----------------- test/Watcher.t.sol | 8 ++---- 3 files changed, 33 insertions(+), 35 deletions(-) diff --git a/test/MessageSwitchboardTest.t.sol b/test/MessageSwitchboardTest.t.sol index fede68e0..36fe93b0 100644 --- a/test/MessageSwitchboardTest.t.sol +++ b/test/MessageSwitchboardTest.t.sol @@ -10,15 +10,21 @@ contract MessageSwitchboardTest is MessageSwitchboardSetup { function setUp() public { _deploy(); - arbPlug = new CounterPlug(address(arbConfig.socket), arbConfig.messageSwitchboard.switchboardId()); - optPlug = new CounterPlug(address(optConfig.socket), optConfig.messageSwitchboard.switchboardId()); + arbPlug = new CounterPlug( + address(arbConfig.socket), + arbConfig.messageSwitchboard.switchboardId() + ); + optPlug = new CounterPlug( + address(optConfig.socket), + optConfig.messageSwitchboard.switchboardId() + ); arbPlug.registerSibling(optConfig.chainSlug, address(optPlug)); optPlug.registerSibling(arbConfig.chainSlug, address(arbPlug)); } function testIncrementWithMessageSwitchboard() public { - (uint40 payloadCounter, DigestParams memory digestParams) = _getTriggerData( + (uint160 payloadPointer, DigestParams memory digestParams) = _getTriggerData( arbPlug, optPlug, arbConfig, @@ -35,7 +41,7 @@ contract MessageSwitchboardTest is MessageSwitchboardSetup { ); arbPlug.requestIncrement{value: msgSbFees}(optConfig.chainSlug); - _executeOnDestination(digestParams, digestParams.prevBatchDigestHash, payloadCounter); + _executeOnDestination(digestParams, payloadPointer); assertEq(optPlug.count(), 1, "Counter should be incremented on destination"); } diff --git a/test/SetupTest.t.sol b/test/SetupTest.t.sol index c269a40e..3c15ae9d 100644 --- a/test/SetupTest.t.sol +++ b/test/SetupTest.t.sol @@ -313,7 +313,6 @@ contract DeploySetup is SetupStore { address(socket), switchboard.switchboardId() ); - vm.stopPrank(); vm.startPrank(watcherEOA); @@ -330,7 +329,6 @@ contract DeploySetup is SetupStore { chainSlug_, toBytes32Format(address(contractFactoryPlug)) ); - vm.stopPrank(); } @@ -848,7 +846,7 @@ contract WatcherSetup is AuctionSetup { ( uint32 chainSlug, - bytes32 switchboard, + uint64 switchboard, bytes32 digest, DigestParams memory digestParams ) = _validateAndGetDigest(payloadParams); @@ -869,12 +867,13 @@ contract WatcherSetup is AuctionSetup { function _uploadProof( bytes32 payloadId, bytes32 digest, - bytes32 switchboard, + uint64 switchboard, uint32 chainSlug ) internal returns (bytes memory proof) { + address sbAddress = getSocketConfig(chainSlug).socket.switchboardAddresses(switchboard); proof = createSignature( // create sigDigest which get signed by watcher - keccak256(abi.encodePacked(switchboard, chainSlug, digest)), + keccak256(abi.encodePacked(toBytes32Format(sbAddress), chainSlug, digest)), watcherPrivateKey ); @@ -894,7 +893,7 @@ contract WatcherSetup is AuctionSetup { view returns ( uint32 chainSlug, - bytes32 switchboard, + uint64 switchboard, bytes32 digest, DigestParams memory digestParams ) @@ -905,10 +904,10 @@ contract WatcherSetup is AuctionSetup { , uint256 gasLimit, uint256 value, - bytes32 switchboard_ + uint64 switchboard_ ) = abi.decode( payloadParams.precompileData, - (address, Transaction, WriteFinality, uint256, uint256, bytes32) + (address, Transaction, WriteFinality, uint256, uint256, uint64) ); chainSlug = transaction.chainSlug; @@ -939,7 +938,7 @@ contract WatcherSetup is AuctionSetup { function _executeWrite( uint32 chainSlug, - bytes32 switchboard, + uint64 switchboard, bytes32 digest, DigestParams memory digestParams, PayloadParams memory payloadParams, @@ -964,18 +963,17 @@ contract WatcherSetup is AuctionSetup { prevBatchDigestHash: digestParams.prevBatchDigestHash, extraData: digestParams.extraData }); - if (fromBytes32Format(switchboard) == address(getSocketConfig(chainSlug).switchboard)) { + + if (switchboard == getSocketConfig(chainSlug).switchboard.switchboardId()) { (success, returnData) = getSocketConfig(chainSlug).socketBatcher.attestAndExecute( executeParams, - fromBytes32Format(switchboard), + address(getSocketConfig(chainSlug).switchboard), digest, watcherProof, transmitterSig, transmitterEOA ); - } else if ( - fromBytes32Format(switchboard) == address(getSocketConfig(chainSlug).cctpSwitchboard) - ) { + } else if (switchboard == getSocketConfig(chainSlug).cctpSwitchboard.switchboardId()) { (success, returnData) = _executeWithCCTPBatcher( chainSlug, executeParams, @@ -1338,12 +1336,13 @@ contract MessageSwitchboardSetup is DeploySetup { SocketContracts memory srcSocketConfig_, SocketContracts memory dstSocketConfig_, bytes memory payload_ - ) internal view returns (uint40 payloadCounter, DigestParams memory digestParams) { + ) internal view returns (uint160 payloadPointer, DigestParams memory digestParams) { bytes32 triggerId = srcPlug_.getNextTriggerId(srcSocketConfig_.chainSlug); - payloadCounter = srcSocketConfig_.messageSwitchboard.payloadCounter(); + uint40 payloadCounter = srcSocketConfig_.messageSwitchboard.payloadCounter(); - uint128 payloadPointer = (uint128(srcSocketConfig_.chainSlug) << 120) | - (uint128(uint64(uint256(triggerId))) << 80) | + payloadPointer = + (uint160(srcSocketConfig_.chainSlug) << 120) | + (uint160(uint64(uint256(triggerId))) << 80) | payloadCounter; bytes32 payloadId = createPayloadId( @@ -1365,11 +1364,10 @@ contract MessageSwitchboardSetup is DeploySetup { function _executeOnDestination( DigestParams memory digestParams_, - bytes32 triggerId_, - uint128 payloadPointer_ + uint160 payloadPointer_ ) internal { _attestPayload(digestParams_); - _execute(digestParams_, triggerId_, payloadPointer_); + _execute(digestParams_, payloadPointer_); } // Helper function to attest a payload @@ -1433,11 +1431,7 @@ contract MessageSwitchboardSetup is DeploySetup { } // Helper function to execute on destination chain - function _execute( - DigestParams memory digestParams_, - bytes32 triggerId_, - uint128 payloadPointer_ - ) internal { + function _execute(DigestParams memory digestParams_, uint160 payloadPointer_) internal { // this is a signature for the socket batcher (only used for EVM) ExecuteParams memory executeParams = ExecuteParams({ callType: digestParams_.callType, diff --git a/test/Watcher.t.sol b/test/Watcher.t.sol index e1977270..b3d0e960 100644 --- a/test/Watcher.t.sol +++ b/test/Watcher.t.sol @@ -20,11 +20,9 @@ contract WatcherTest is AppGatewayBaseSetup { function testRevertInitSocketPlug() public { address hackerEOA = address(0x123); + uint64 sbId = arbConfig.switchboard.switchboardId(); + vm.expectRevert(abi.encodeWithSelector(SocketAlreadyInitialized.selector)); - arbConfig.feesPlug.initSocket( - bytes32(0), - address(hackerEOA), - arbConfig.switchboard.switchboardId() - ); + arbConfig.feesPlug.initSocket(bytes32(0), address(hackerEOA), sbId); } } From 546053e693ee797a14e0f249cf5215f00b8551f6 Mon Sep 17 00:00:00 2001 From: Ameesha Agrawal Date: Thu, 24 Jul 2025 17:05:41 +0530 Subject: [PATCH 6/8] fix: msg sb tests --- contracts/protocol/switchboard/MessageSwitchboard.sol | 2 +- test/SetupTest.t.sol | 2 +- test/TriggerTest.t.sol | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/protocol/switchboard/MessageSwitchboard.sol b/contracts/protocol/switchboard/MessageSwitchboard.sol index 81262b09..0fe72dfd 100644 --- a/contracts/protocol/switchboard/MessageSwitchboard.sol +++ b/contracts/protocol/switchboard/MessageSwitchboard.sol @@ -162,7 +162,7 @@ contract MessageSwitchboard is SwitchboardBase { (uint160(uint64(uint256(triggerId_))) << 80) | payloadCounter++; - bytes32 payloadId = createPayloadId(payloadPointer, switchboardId, chainSlug); + bytes32 payloadId = createPayloadId(payloadPointer, switchboardId, dstChainSlug_); digestParams = DigestParams({ socket: siblingSockets[dstChainSlug_], diff --git a/test/SetupTest.t.sol b/test/SetupTest.t.sol index 3c15ae9d..7ba86c54 100644 --- a/test/SetupTest.t.sol +++ b/test/SetupTest.t.sol @@ -1348,7 +1348,7 @@ contract MessageSwitchboardSetup is DeploySetup { bytes32 payloadId = createPayloadId( payloadPointer, dstSocketConfig_.messageSwitchboard.switchboardId(), - srcSocketConfig_.chainSlug + dstSocketConfig_.chainSlug ); digestParams = _createDigestParams( diff --git a/test/TriggerTest.t.sol b/test/TriggerTest.t.sol index 097c3ff0..eb4c0ea0 100644 --- a/test/TriggerTest.t.sol +++ b/test/TriggerTest.t.sol @@ -13,7 +13,7 @@ contract TriggerTest is AppGatewayBaseSetup { event AppGatewayCallRequested( bytes32 triggerId, bytes32 appGatewayId, - bytes32 switchboard, + uint64 switchboard, bytes32 plug, bytes overrides, bytes payload @@ -61,7 +61,7 @@ contract TriggerTest is AppGatewayBaseSetup { emit AppGatewayCallRequested( triggerId, toBytes32Format(address(gateway)), - toBytes32Format(address(arbConfig.switchboard)), + arbConfig.switchboard.switchboardId(), toBytes32Format(address(counter)), bytes(""), payload From 064f44e68d944dbe50931706a9c049b966179c78 Mon Sep 17 00:00:00 2001 From: Ameesha Agrawal Date: Thu, 24 Jul 2025 17:09:14 +0530 Subject: [PATCH 7/8] fix: fees test --- test/AuctionManager.t.sol | 1 - test/FeesTest.t.sol | 16 +++++----------- test/ProxyStorage.t.sol | 2 -- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/test/AuctionManager.t.sol b/test/AuctionManager.t.sol index ac087ccd..3c3cebdf 100644 --- a/test/AuctionManager.t.sol +++ b/test/AuctionManager.t.sol @@ -35,7 +35,6 @@ contract AuctionManagerTest is AppGatewayBaseSetup { approveAppGateway(address(feesManager), user); uint256 withdrawAmount = 0.5 ether; uint40 requestCount = watcher.getCurrentRequestCount(); - console.log("requestCount", requestCount); hoax(user); feesManager.withdrawCredits( diff --git a/test/FeesTest.t.sol b/test/FeesTest.t.sol index 26424c24..401f645b 100644 --- a/test/FeesTest.t.sol +++ b/test/FeesTest.t.sol @@ -90,14 +90,11 @@ contract FeesTest is AppGatewayBaseSetup { } function testDisconnectFeesPlug() public { - hoax(socketOwner); + uint64 sbId = arbConfig.switchboard.switchboardId(); // disconnect old fees plug - arbConfig.feesPlug.connectSocket( - bytes32(0), - address(arbConfig.socket), - arbConfig.switchboard.switchboardId() - ); + hoax(socketOwner); + arbConfig.feesPlug.connectSocket(bytes32(0), address(arbConfig.socket), sbId); hoax(watcherEOA); feesManager.setFeesPlug(arbChainSlug, bytes32(0)); @@ -132,14 +129,11 @@ contract FeesTest is AppGatewayBaseSetup { function testMigrateFeesPlug() public { FeesPlug oldFeesPlug = arbConfig.feesPlug; + uint64 sbId = arbConfig.switchboard.switchboardId(); // disconnect old fees plug hoax(socketOwner); - oldFeesPlug.connectSocket( - bytes32(0), - address(arbConfig.socket), - arbConfig.switchboard.switchboardId() - ); + oldFeesPlug.connectSocket(bytes32(0), address(arbConfig.socket), sbId); // deploy new fees plug arbConfig.feesPlug = new FeesPlug(address(arbConfig.socket), address(socketOwner)); diff --git a/test/ProxyStorage.t.sol b/test/ProxyStorage.t.sol index 69720ca9..3533c6df 100644 --- a/test/ProxyStorage.t.sol +++ b/test/ProxyStorage.t.sol @@ -217,8 +217,6 @@ contract ProxyStorageAssertions is AppGatewayBaseSetup { evmxSlug ); - console.log("forwarder: ", forwarder); - // first bytes32 slotValue = vm.load(address(forwarder), bytes32(uint256(FIRST_SLOT))); assertEq(uint32(uint256(slotValue)), evmxSlug); From 597176a6739dff0d424388d8bac8acf0e41400a5 Mon Sep 17 00:00:00 2001 From: Ameesha Agrawal Date: Thu, 24 Jul 2025 17:10:47 +0530 Subject: [PATCH 8/8] fix: lint --- contracts/evmx/plugs/ContractFactoryPlug.sol | 3 ++- contracts/evmx/watcher/Configurations.sol | 3 ++- contracts/evmx/watcher/precompiles/WritePrecompile.sol | 3 +-- contracts/protocol/Socket.sol | 9 +++------ test/SocketFeeManager.t.sol | 6 +++++- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/contracts/evmx/plugs/ContractFactoryPlug.sol b/contracts/evmx/plugs/ContractFactoryPlug.sol index f92f1bd4..feb06938 100644 --- a/contracts/evmx/plugs/ContractFactoryPlug.sol +++ b/contracts/evmx/plugs/ContractFactoryPlug.sol @@ -55,7 +55,8 @@ contract ContractFactoryPlug is PlugBase, AccessControl, IContractFactoryPlug { } } - if (isPlug_ == IsPlug.YES) IPlug(addr).initSocket(appGatewayId_, msg.sender, switchboardId_); + if (isPlug_ == IsPlug.YES) + IPlug(addr).initSocket(appGatewayId_, msg.sender, switchboardId_); bytes memory returnData; if (initCallData_.length > 0) { diff --git a/contracts/evmx/watcher/Configurations.sol b/contracts/evmx/watcher/Configurations.sol index 16af40c8..33d239ca 100644 --- a/contracts/evmx/watcher/Configurations.sol +++ b/contracts/evmx/watcher/Configurations.sol @@ -161,7 +161,8 @@ contract Configurations is ConfigurationsStorage, Initializable, Ownable, Watche ) external view { (bytes32 appGatewayId, uint64 switchboardId) = getPlugConfigs(chainSlug_, target_); if (appGatewayId != toBytes32Format(appGateway_)) revert InvalidGateway(); - if (switchboardId != switchboards[chainSlug_][switchboardType_]) revert InvalidSwitchboard(); + if (switchboardId != switchboards[chainSlug_][switchboardType_]) + revert InvalidSwitchboard(); } /** diff --git a/contracts/evmx/watcher/precompiles/WritePrecompile.sol b/contracts/evmx/watcher/precompiles/WritePrecompile.sol index e2768e0a..9294f780 100644 --- a/contracts/evmx/watcher/precompiles/WritePrecompile.sol +++ b/contracts/evmx/watcher/precompiles/WritePrecompile.sol @@ -160,8 +160,7 @@ contract WritePrecompile is WritePrecompileStorage, Initializable, Ownable, Watc uint256 gasLimit, uint256 value, - ) = - abi.decode( + ) = abi.decode( payloadParams.precompileData, (address, Transaction, WriteFinality, uint256, uint256, bytes32) ); diff --git a/contracts/protocol/Socket.sol b/contracts/protocol/Socket.sol index 6a942ae3..5631256b 100644 --- a/contracts/protocol/Socket.sol +++ b/contracts/protocol/Socket.sol @@ -189,12 +189,9 @@ contract Socket is SocketUtils { triggerId = _encodeTriggerId(); // todo: need gas limit? - ISwitchboard(switchboardAddresses[plugConfig.switchboardId]).processTrigger{value: msg.value}( - msg.sender, - triggerId, - msg.data, - plugOverrides - ); + ISwitchboard(switchboardAddresses[plugConfig.switchboardId]).processTrigger{ + value: msg.value + }(msg.sender, triggerId, msg.data, plugOverrides); emit AppGatewayCallRequested( triggerId, diff --git a/test/SocketFeeManager.t.sol b/test/SocketFeeManager.t.sol index 4d613b76..eb6e6899 100644 --- a/test/SocketFeeManager.t.sol +++ b/test/SocketFeeManager.t.sol @@ -25,7 +25,11 @@ contract SocketFeeManagerTest is AppGatewayBaseSetup { counter = new Counter(); mockSwitchboard.registerSwitchboard(); - counter.initSocket(toBytes32Format(gateway), address(socket), mockSwitchboard.switchboardId()); + counter.initSocket( + toBytes32Format(gateway), + address(socket), + mockSwitchboard.switchboardId() + ); vm.prank(owner); socket.grantRole(GOVERNANCE_ROLE, address(owner));