SymmioPartyB
The SymmioPartyB
contract acts as a management contract for solvers or "Party B" . This contract allows for controlled interaction with the Symmio platform and external addresses for managing roles and permissions.
Key Changes in 0.8.4:
Reentrancy Protection: The
_executeCall
method now uses a customnonReentrant
modifier to prevent reentrancy attacks without altering the storage layout.Access Control & Multicast Whitelisting: The contract restricts calls based on roles (e.g., MANAGER_ROLE, TRUSTED_ROLE) and maintains a whitelist for destinations allowed in multicast operations
Initialization
The SymmioPartyB contract uses upgradeable libraries for pausing and access control. During initialization, it sets the admin roles and the address of the Symmio contract.
initialize()
Function Signature:
Parameters:
admin: The address to receive the
DEFAULT_ADMIN_ROLE
,TRUSTED_ROLE
, andMANAGER_ROLE
.symmioAddress_: The address of the Symmio contract with which this contract will interact.
Example:
Configuration
setSymmioAddress()
Description: Updates the address of the Symmio contract. Only callable by users with the DEFAULT_ADMIN_ROLE.
Function Signature:
Parameters:
addr: The new Symmio contract address.
Example:
Events Emitted:
SetSymmioAddress(address oldSymmioAddress, address newSymmioAddress)
setRestrictedSelector()
Description:
Restricts or lifts restrictions on specific function selectors. If a selector is restricted, only callers with the MANAGER_ROLE
may invoke the function on the Symmio contract.
Function Signature:
Parameters:
selector: The function selector to restrict/unrestrict.
state:
true
to restrict,false
to unrestrict.
Example:
Events Emitted:
SetRestrictedSelector(bytes4 selector, bool state)
setMulticastWhitelist()
Description: Allows a manager to add or remove an address from the multicast whitelist. Only addresses on the whitelist can be called via the multicasting functionality.
Function Signature:
Parameters:
addr: The address to update.
state:
true
to whitelist,false
to remove.
Example:
Events Emitted:
SetMulticastWhitelist(address addr, bool state)
Token Approvals
_approve()
Description:
Approves a specified ERC20 token amount for spending by the Symmio contract. Only callable by users with the TRUSTED_ROLE
and when the contract is not paused.
Function Signature:
Parameters:
token: The ERC20 token address.
amount: The amount to approve.
Example:
Execution Functions
_executeCall()
Description:
Executes a low-level call to a destination address using the provided call data. This function now includes a custom nonReentrant
modifier to prevent reentrancy attacks. It enforces role-based access control depending on the destination and function selector.
Function Signature:
Parameters:
destAddress: The destination address for the call.
callData: The call data (must be at least 4 bytes).
Key Logic:
Validates that
destAddress
is not zero.Checks the length of
callData
.If calling the Symmio contract (
destAddress == symmioAddress
), extracts the function selector and enforces:If restricted, the caller must have MANAGER_ROLE.
Otherwise, the caller must have either MANAGER_ROLE or TRUSTED_ROLE.
If calling another contract, verifies that the destination is whitelisted.
Executes the call and reverts if it fails.
_call()
Executes multiple calls to the Symmio contract by iterating over an array of call data, using _executeCall
for each entry.
Function Signature:
Parameters:
_callDatas: An array of call data bytes.
Example Usage:
_multicastCall()
Description: Allows the caller to execute multiple calls to various destination addresses in a single transaction. Each destination address must correspond to a call data element, and reentrancy protection is enforced on each call.
Function Signature:
Parameters:
destAddresses: An array of destination addresses.
_callDatas: An array of call data bytes.
Example Usage:
Token Withdrawal
withdrawERC20()
Allows an authorized manager to withdraw ERC20 tokens from the contract to the caller's address.
Function Signature:
Parameters:
token: The ERC20 token address.
amount: The amount to withdraw.
Example Usage:
Pausable Functions
pause() / unpause()
Description: Allows users with the PAUSER_ROLE to pause the contract and users with the UNPAUSER_ROLE to unpause it, thereby controlling the execution of functions.
Function Signatures:
Example Usage:
Last updated