Skip to content

Commit

Permalink
Added Basic Delegation Flow
Browse files Browse the repository at this point in the history
  • Loading branch information
hanzel98 committed Feb 19, 2025
1 parent cc25b18 commit 2f9d2da
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 11 deletions.
34 changes: 23 additions & 11 deletions documents/diagrams/DelegationFlow.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,34 @@
# Delegation Flow
# Delegation redemption flow

This diagram illustrates how an off-chain delegation is created and subsequently redeemed, allowing a Delegate to transfer an ERC20 token on behalf of a Delegator.
This diagram illustrates how an off-chain delegation is created and subsequently redeemed on the Delegation Manager. The Delegation Manager is in charge of validating the signature of the delegation, validating the caveat enforcers, and if everything is correct it allows a Delegate to execute an action on behalf of the Delegator.

```mermaid
sequenceDiagram
participant Delegator
participant Delegate
participant DelegationManager
participant ERC20TokenContract
participant CaveatEnforcer
Delegator->>Delegator: Create off-chain delegation + signatures + caveat enforcers
Delegator->>Delegator: Create off-chain delegation with caveat enforcers
Delegator->>Delegator: Sign off-chain delegation
Delegator->>Delegate: Send signed off-chain delegation
Note right of Delegate: Holds delegation until redemption
Note right of Delegate: Hold delegation until redemption
Delegate->>DelegationManager: redeemDelegation() with delegation & transfer details
DelegationManager->>Delegate: isValidSignature()?
Delegate-->>DelegationManager: Confirms valid (or not)
DelegationManager->>DelegationManager: Enforce caveat enforcers (if valid)
DelegationManager->>Delegator: Calls executeFromExecutor()
Delegator->>ERC20TokenContract: Performs ERC20 transfer
Delegate->>DelegationManager: redeemDelegations() with delegation & execution details
DelegationManager->>Delegator: isValidSignature()
Delegator-->>DelegationManager: Confirm valid (or not)
DelegationManager->>CaveatEnforcer: beforeAllHook()
Note right of DelegationManager: Expect no error
DelegationManager->>CaveatEnforcer: beforeHook()
Note right of DelegationManager: Expect no error
DelegationManager->>Delegator: executeFromExecutor() with execution details
Delegator->>Delegator: Perform execution
Note right of DelegationManager: Expect no error
DelegationManager->>CaveatEnforcer: afterHook()
Note right of DelegationManager: Expect no error
DelegationManager->>CaveatEnforcer: afterAllHook()
Note right of DelegationManager: Expect no error
```
35 changes: 35 additions & 0 deletions documents/diagrams/TokenTransferDelegationFlow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Token Transfer Delegation Flow

This diagram illustrates how an off-chain delegation is created and subsequently redeemed, allowing a Delegate to transfer an ERC20 token on behalf of a Delegator.

```mermaid
sequenceDiagram
participant Delegator
participant Delegate
participant DelegationManager
participant CaveatEnforcer
participant ERC20TokenContract
Delegator->>Delegator: Create off-chain delegation with caveat enforcers to restrict an ERC20 transfer
Delegator->>Delegator: Sign off-chain delegation
Delegator->>Delegate: Send signed off-chain delegation
Note right of Delegate: Hold delegation until redemption
Delegate->>DelegationManager: redeemDelegations() with delegation & execution (ERC20 transfer)
DelegationManager->>Delegator: isValidSignature()
Delegator-->>DelegationManager: Confirm valid (or not)
DelegationManager->>CaveatEnforcer: beforeAllHook()
Note right of DelegationManager: Expect no error
DelegationManager->>CaveatEnforcer: beforeHook()
Note right of DelegationManager: Expect no error
DelegationManager->>Delegator: executeFromExecutor() with execution (ERC20 transfer)
Delegator->>ERC20TokenContract: Perform ERC20 transfer
Note right of DelegationManager: Expect no error
DelegationManager->>CaveatEnforcer: afterHook()
Note right of DelegationManager: Expect no error
DelegationManager->>CaveatEnforcer: afterAllHook()
Note right of DelegationManager: Expect no error
```

0 comments on commit 2f9d2da

Please sign in to comment.