How are execution types fuliflled? How are roles defined and determined?
The Dexible contract is responsible for satisfying execution requests. Today it only support Swap requests. But future versions will open this up to more executions types such as lending, staking, and other primitives.
Here is the relationships for the Dexible contract:
Like the Community Vault, there are base contracts that provide configuration, storage property views, and swap functionality for protocol. Dexible is configured with whitelisted relay wallets. The relays are used to enforce the rule that only relays can submit sensitive execution requests where certain fields of the request require more control, like affiliate fees for example. Here is a breakdown of how these contracts satisfy the requirements:
Safe multi sig ensures multiple parties approve changes
Restricts private swap requests to only those addresses with the "relay" role. And Dexible offers both relay and public swap submissions.
By leveraging its relationship with the vault, Dexible can ask the vault for current prices of fee tokens to convert the gas fees to fee-token units. Dexible also uses the vault to determine if a fee token is allowed.