Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions contracts/base/PlugBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {NotSocket} from "../protocol/utils/common/Errors.sol";
/// @notice Abstract contract for plugs
abstract contract PlugBase is IPlug {
ISocket public socket__;
address public appGateway;
bytes32 public appGatewayId;
uint256 public isSocketInitialized;
bytes public overrides;

Expand All @@ -31,19 +31,20 @@ abstract contract PlugBase is IPlug {
}

/// @notice Connects the plug to the app gateway and switchboard
/// @param appGateway_ The app gateway address
/// @param appGatewayId_ The app gateway id
/// @param socket_ The socket address
/// @param switchboard_ The switchboard address
function _connectSocket(address appGateway_, address socket_, address switchboard_) internal {
function _connectSocket(bytes32 appGatewayId_, address socket_, address switchboard_) internal {
_setSocket(socket_);
appGateway = appGateway_;
appGatewayId = appGatewayId_;

socket__.connect(appGateway_, switchboard_);
socket__.connect(appGatewayId_, switchboard_);
}

/// @notice Disconnects the plug from the socket
function _disconnectSocket() internal {
(, address switchboard) = socket__.getPlugConfig(address(this));
socket__.connect(address(0), switchboard);
socket__.connect(bytes32(0), switchboard);
emit ConnectorPlugDisconnected();
}

Expand All @@ -60,10 +61,10 @@ abstract contract PlugBase is IPlug {
}

function initSocket(
address appGateway_,
bytes32 appGatewayId_,
address socket_,
address switchboard_
) external virtual socketInitializer {
_connectSocket(appGateway_, socket_, switchboard_);
_connectSocket(appGatewayId_, socket_, switchboard_);
}
}
2 changes: 1 addition & 1 deletion contracts/interfaces/IContractFactoryPlug.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ interface IContractFactoryPlug {
function deployContract(
IsPlug isPlug_,
bytes32 salt_,
address appGateway_,
bytes32 appGatewayId_,
address switchboard_,
bytes memory creationCode_,
bytes memory initCallData_
Expand Down
2 changes: 1 addition & 1 deletion contracts/interfaces/IPlug.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ pragma solidity ^0.8.21;
* @notice Interface for a plug contract that executes the payload received from a source chain.
*/
interface IPlug {
function initSocket(address appGateway_, address socket_, address switchboard_) external;
function initSocket(bytes32 appGatewayId_, address socket_, address switchboard_) external;

function overrides() external view returns (bytes memory);
}
10 changes: 5 additions & 5 deletions contracts/interfaces/ISocket.sol
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ interface ISocket {
/**
* @notice emits the config set by a plug for a remoteChainSlug
* @param plug address of plug on current chain
* @param appGateway address of plug on sibling chain
* @param appGatewayId address of plug on sibling chain
* @param switchboard outbound switchboard (select from registered options)
*/
event PlugConnected(address plug, address appGateway, address switchboard);
event PlugConnected(address plug, bytes32 appGatewayId, address switchboard);

/**
* @notice emits the message details when a new message arrives at outbound
Expand Down Expand Up @@ -58,10 +58,10 @@ interface ISocket {

/**
* @notice sets the config specific to the plug
* @param appGateway_ address of plug present at sibling chain
* @param appGatewayId_ address of plug present at sibling chain
* @param switchboard_ the address of switchboard to use for executing payloads
*/
function connect(address appGateway_, address switchboard_) external;
function connect(bytes32 appGatewayId_, address switchboard_) external;

function registerSwitchboard() external;

Expand All @@ -71,5 +71,5 @@ interface ISocket {
*/
function getPlugConfig(
address plugAddress_
) external view returns (address appGateway, address switchboard);
) external view returns (bytes32 appGatewayId, address switchboard);
}
2 changes: 1 addition & 1 deletion contracts/interfaces/IWatcherPrecompileConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ interface IWatcherPrecompileConfig {
function getPlugConfigs(
uint32 chainSlug_,
address plug_
) external view returns (address, address);
) external view returns (bytes32, address);

/// @notice Verifies connections between components
function verifyConnections(
Expand Down
8 changes: 4 additions & 4 deletions contracts/protocol/payload-delivery/ContractFactoryPlug.sol
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ contract ContractFactoryPlug is PlugBase, AccessControl, IContractFactoryPlug {
function deployContract(
IsPlug isPlug_,
bytes32 salt_,
address appGateway_,
bytes32 appGatewayId_,
address switchboard_,
bytes memory creationCode_,
bytes memory initCallData_
Expand All @@ -47,7 +47,7 @@ contract ContractFactoryPlug is PlugBase, AccessControl, IContractFactoryPlug {
}
}

if (isPlug_ == IsPlug.YES) IPlug(addr).initSocket(appGateway_, msg.sender, switchboard_);
if (isPlug_ == IsPlug.YES) IPlug(addr).initSocket(appGatewayId_, msg.sender, switchboard_);

bytes memory returnData;
if (initCallData_.length > 0) {
Expand Down Expand Up @@ -89,11 +89,11 @@ contract ContractFactoryPlug is PlugBase, AccessControl, IContractFactoryPlug {
}

function connectSocket(
address appGateway_,
bytes32 appGatewayId_,
address socket_,
address switchboard_
) external onlyOwner {
_connectSocket(appGateway_, socket_, switchboard_);
_connectSocket(appGatewayId_, socket_, switchboard_);
}

/**
Expand Down
4 changes: 2 additions & 2 deletions contracts/protocol/payload-delivery/FeesPlug.sol
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,11 @@ contract FeesPlug is PlugBase, AccessControl {
}

function connectSocket(
address appGateway_,
bytes32 appGatewayId_,
address socket_,
address switchboard_
) external onlyOwner {
_connectSocket(appGateway_, socket_, switchboard_);
_connectSocket(appGatewayId_, socket_, switchboard_);
}

/// @notice Adds a token to the whitelist
Expand Down
15 changes: 7 additions & 8 deletions contracts/protocol/socket/Socket.sol
Original file line number Diff line number Diff line change
Expand Up @@ -52,21 +52,20 @@ contract Socket is SocketUtils {
) external payable returns (bytes memory) {
if (executeParams_.deadline < block.timestamp) revert DeadlinePassed();
PlugConfig memory plugConfig = _plugConfigs[executeParams_.target];
if (plugConfig.appGateway == address(0)) revert PlugDisconnected();
if (plugConfig.appGatewayId == bytes32(0)) revert PlugDisconnected();

if (msg.value < executeParams_.value) revert InsufficientMsgValue();
bytes32 payloadId = _createPayloadId(plugConfig.switchboard, executeParams_);
_validateExecutionStatus(payloadId);

address transmitter = _recoverSigner(
keccak256(abi.encode(address(this), payloadId)),
transmitterSignature_
);
address transmitter = transmitterSignature_.length > 0
? _recoverSigner(keccak256(abi.encode(address(this), payloadId)), transmitterSignature_)
: address(0);

bytes32 digest = _createDigest(
transmitter,
payloadId,
plugConfig.appGateway,
plugConfig.appGatewayId,
executeParams_
);
_verify(digest, payloadId, plugConfig.switchboard);
Expand Down Expand Up @@ -135,10 +134,10 @@ contract Socket is SocketUtils {
PlugConfig memory plugConfig = _plugConfigs[plug_];

// if no sibling plug is found for the given chain slug, revert
if (plugConfig.appGateway == address(0)) revert PlugDisconnected();
if (plugConfig.appGatewayId == bytes32(0)) revert PlugDisconnected();

// creates a unique ID for the message
triggerId = _encodeTriggerId(plugConfig.appGateway);
triggerId = _encodeTriggerId();
emit AppGatewayCallRequested(triggerId, chainSlug, plug_, overrides_, payload_);
}

Expand Down
12 changes: 6 additions & 6 deletions contracts/protocol/socket/SocketConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -47,30 +47,30 @@ abstract contract SocketConfig is ISocket, AccessControl {
/**
* @notice connects Plug to Socket and sets the config for given `siblingChainSlug_`
*/
function connect(address appGateway_, address switchboard_) external override {
function connect(bytes32 appGatewayId_, address switchboard_) external override {
if (isValidSwitchboard[switchboard_] != SwitchboardStatus.REGISTERED)
revert InvalidSwitchboard();

PlugConfig storage _plugConfig = _plugConfigs[msg.sender];

_plugConfig.appGateway = appGateway_;
_plugConfig.appGatewayId = appGatewayId_;
_plugConfig.switchboard = switchboard_;

emit PlugConnected(msg.sender, appGateway_, switchboard_);
emit PlugConnected(msg.sender, appGatewayId_, switchboard_);
}

function setMaxCopyBytes(uint16 maxCopyBytes_) external onlyRole(GOVERNANCE_ROLE) {
maxCopyBytes = maxCopyBytes_;
}

/**
* @notice returns the config for given `plugAddress_` and `siblingChainSlug_`
* @notice returns the config for given `plugAddress_`
* @param plugAddress_ address of plug present at current chain
*/
function getPlugConfig(
address plugAddress_
) external view returns (address appGateway, address switchboard) {
) external view returns (bytes32 appGatewayId, address switchboard) {
PlugConfig memory _plugConfig = _plugConfigs[plugAddress_];
return (_plugConfig.appGateway, _plugConfig.switchboard);
return (_plugConfig.appGatewayId, _plugConfig.switchboard);
}
}
10 changes: 5 additions & 5 deletions contracts/protocol/socket/SocketUtils.sol
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,14 @@ abstract contract SocketUtils is SocketConfig {
* @notice creates the digest for the payload
* @param transmitter_ The address of the transmitter
* @param payloadId_ The ID of the payload
* @param appGateway_ The address of the app gateway
* @param appGatewayId_ The id of the app gateway
* @param executeParams_ The parameters of the payload
* @return The packed payload as a bytes32 hash
*/
function _createDigest(
address transmitter_,
bytes32 payloadId_,
address appGateway_,
bytes32 appGatewayId_,
ExecuteParams memory executeParams_
) internal view returns (bytes32) {
return
Expand All @@ -76,7 +76,7 @@ abstract contract SocketUtils is SocketConfig {
executeParams_.readAt,
executeParams_.payload,
executeParams_.target,
appGateway_,
appGatewayId_,
executeParams_.prevDigestsHash
)
);
Expand Down Expand Up @@ -116,11 +116,11 @@ abstract contract SocketUtils is SocketConfig {
// Packs the local plug, local chain slug, remote chain slug and nonce
// triggerCounter++ will take care of call id overflow as well
// triggerId(256) = localChainSlug(32) | appGateway_(160) | nonce(64)
function _encodeTriggerId(address appGateway_) internal returns (bytes32) {
function _encodeTriggerId() internal returns (bytes32) {
return
bytes32(
(uint256(chainSlug) << 224) |
(uint256(uint160(appGateway_)) << 64) |
(uint256(uint160(address(this))) << 64) |
triggerCounter++
);
}
Expand Down
2 changes: 1 addition & 1 deletion contracts/protocol/socket/switchboard/SwitchboardBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ abstract contract SwitchboardBase is ISwitchboard, AccessControl {

// chain slug of deployed chain
uint32 public immutable chainSlug;

/**
* @dev Constructor of SwitchboardBase
* @param chainSlug_ Chain slug of deployment chain
Expand Down
8 changes: 4 additions & 4 deletions contracts/protocol/utils/common/Structs.sol
Original file line number Diff line number Diff line change
Expand Up @@ -66,21 +66,21 @@ struct UpdateLimitParams {
}
struct AppGatewayConfig {
address plug;
address appGateway;
bytes32 appGatewayId;
address switchboard;
uint32 chainSlug;
}
// Plug config:
struct PlugConfig {
address appGateway;
bytes32 appGatewayId;
address switchboard;
}
//trigger:
struct TriggerParams {
bytes32 triggerId;
bytes32 params;
address plug;
address appGateway;
bytes32 appGatewayId;
uint32 chainSlug;
bytes payload;
}
Expand Down Expand Up @@ -143,7 +143,7 @@ struct DigestParams {
uint256 readAt;
bytes payload;
address target;
address appGateway;
bytes32 appGatewayId;
bytes32 prevDigestsHash; // should be id? hash of hashes
}

Expand Down
6 changes: 1 addition & 5 deletions contracts/protocol/watcherPrecompile/WatcherPrecompile.sol
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ contract WatcherPrecompile is RequestHandler {
for (uint256 i = 0; i < params_.length; i++) {
if (appGatewayCalled[params_[i].triggerId]) revert AppGatewayAlreadyCalled();

address appGateway = _decodeAppGateway(params_[i].triggerId);
address appGateway = _decodeAppGatewayId(params_[i].appGatewayId);
if (
!watcherPrecompileConfig__.isValidPlug(
appGateway,
Expand Down Expand Up @@ -296,8 +296,4 @@ contract WatcherPrecompile is RequestHandler {
function getRequestParams(uint40 requestCount) external view returns (RequestParams memory) {
return requestParams[requestCount];
}

function _decodeAppGateway(bytes32 triggerId_) internal pure returns (address) {
return address(uint160(uint256(triggerId_) >> 64));
}
}
Loading