# DanGoron: Week 14-15 dev-update
## eODS Prototyping
Here are the updated [eODS Design notes](https://hackmd.io/@kboomro/r1csps2MR).
### Summary
The design defines design constraints, entities and the conditional relations between them.
During Weeks 14 and 15, I also added 3 case studies.
### Week 14, 15 development
#### 1. Open issues from prior weeks
- [ ] Delegator triggered `0x01` withdrawals - this point is going to be covered in the next 2 weeks of case studies phase
- [x] Increase readability of the Class diagram (add LEGEND, detailing) - this point is going to be covered in the case studies phase, I plan to break the rather big diagram into smaller, more legible diagrams, that will most likely allow readers to grasp the concept better.
#### 2. Added use cases:
##### 2.1 New self-funded heavy operator
This was straightforward, being the current DEPOSIT_CONTRACT -> FUNDING OPERATORS(VALIDATORS)
```mermaid
---
title: USE CASE no.1 - Deposit + Validator funding
---
classDiagram
direction LR
namespace DEPOSIT{
class Depositor{
ETH: Gwei
deposit(ETH)
}
class DEPOSIT_CONTRACT{
ETH: Gwei
event = Deposit_event
send_PROOF(event)
}
}
namespace BEACON-STATE{
class Accounting{
ValidatorIndex
PROOF
get_proof(<PROOF>)
operate_balance(Validator(ValidatorIndex)) PRINCIPAL
}
class Operators{
index = ValidatorIndex
Validator.balance(index) PRINCIPAL
PerformDuties(<Validator(index)>)
}
}
Depositor --|> DEPOSIT_CONTRACT: ETH
DEPOSIT_CONTRACT --|> Accounting: PROOF
Accounting --|> Operators : PRINCIPAL
Operators --|> Depositor : WITHDR_CRED
```
##### 2.1 New Delegator, with the intent to delegate to heavy Operators and light Operators
This use case is representative for eODS as it uses the DELEGATION_CONTRACT as ETH deposit gateway.
```mermaid
---
title: USE CASE no.2 - Deposit + Validator funding
---
classDiagram
direction LR
namespace DEPOSIT{
class Depositor{
ETH: Gwei
deposit(ETH)
}
class DELEGATION_CONTRACT{
ETH: Gwei
event = Deposit_event
send_PROOF(event)
}
}
namespace BEACON-STATE{
class Accounting{
ValidatorIndex
DelegatorIndex
light_ValidatorIndex
RECEIPT
PROOF
get_receipt(<RECEIPT>)
get_proof(<PROOF>)
operate_balance(Delegator(DelegatorIndex)) PRINCIPAL
operate_balance(Delegator(DelegatorIndex)) SHARE
}
class Delegators{
index = DelegatorIndex
ValidatorIndex
light_ValidatorIndex
Delegator.balance(index) PRINCIPAL
Delegator.balance(index) SHARE
delegation(Validator(ValidatorIndex)) PRINCIPAL
delegation(light_Validator(light_ValidatorIndex)) SHARE
}
class Operators{
index = ValidatorIndex
Validator.balance(index) PRINCIPAL
PerformDuties(<Validator(index)>)
}
class light_Operators{
index = light_ValidatorIndex
light_Validator.balance(index) SHARE
PerformDuties(<light_Validator(index)>)
}
}
Depositor --|> DELEGATION_CONTRACT: ETH
DELEGATION_CONTRACT --|> Accounting: PROOF
Accounting --|> Delegators : PRINCIPAL
Accounting <|--|> Delegators: SHARE
Accounting <.. Operators: RECEIPT(delegation_proof)
Accounting <.. light_Operators: RECEIPT(delegation_proof)
Delegators <|--|> light_Operators: SHARE
Delegators <|--|> Operators: PRINCIPAL
Delegators --|> Depositor : WITHDR_CRED
```
**WORKFLOW**
##### 2.1.1 Deposit
##### 2.1.2 Constitute Delegator's balance in BeaconState
##### 2.1.3 Delegation towards Validators
##### 2.1.4 Delegation towards light_Validators
##### 2.1.5 Protocol services provision
```mermaid
---
title: USE CASE no.2 - Protocol services provision
---
classDiagram
direction LR
namespace BEACON-STATE{
class Delegators{
index = DelegatorIndex
ValidatorIndex
light_ValidatorIndex
Delegator.balance(index) PRINCIPAL
Delegator.balance(index) SHARE
delegation(Validator(ValidatorIndex)) PRINCIPAL
delegation(light_Validator(light_ValidatorIndex)) SHARE
}
class Operators{
index = ValidatorIndex
Validator.balance(index) PRINCIPAL
PerformDuties(<Validator(index)>)
}
class light_Operators{
index = light_ValidatorIndex
light_Validator.balance(index) SHARE
PerformDuties(<light_Validator(index)>)
}
}
namespace FINALITY{
class FFG{
source_checkpoint ~attestations~
target_checkpoint ~attestations~
equivocation ~attestations~
rewards(source_checkpoint) 21.9% * W
rewards(target_checkpoint) 40.6% * W
slashing(equivocation)
}
class LMD-GHOST{
chain_head ~attestations~
rewards(chain_head) 21.9% * W
equivocation ~attestations~
slashing(equivocation)
}
class PROPOSER{
beaconchain_blocks ~proposing~
whistleblower ~proposing~
equivocation ~proposing~
rewards(beaconchain_blocks) 12.5% * W
rewards(whistleblower) B / 512
slashing(equivocation)
}
class PTC{
timely_payload ~attestations~
rewards(timely_payload)
}
}
namespace AVS{
class SYNC_COMMITTEE{
sync_reward ~signing~
rewards(sync_reward) 3.1% * W
}
class FOCIL{
il_committee ~proposing~
il_voting ~attestations~
rewards(il_committee): ~none~
rewards(il_voting): ~none~
}
}
Operators --|> FFG: provision
FFG --|> Operators: rewards & penalties
FFG --|> Operators: slashings
Operators --|> LMD-GHOST: provision
LMD-GHOST --|> Operators: rewards & penalties
LMD-GHOST --|> Operators: slashings
Operators --|> PROPOSER: provision
PROPOSER --|> Operators: rewards & penalties
PROPOSER --|> Operators: slashings
Operators --|> PTC: provision
PTC --|> Operators: rewards & penalties
light_Operators --|> SYNC_COMMITTEE: provision
SYNC_COMMITTEE --|> light_Operators: rewards & penalties
light_Operators --|> FOCIL: provision
FOCIL --|> light_Operators: rewards & penalties
Delegators <|--|> light_Operators: SHARE
Delegators <|--|> Operators: PRINCIPAL
```
#### 3. Feedback
[eODS prototyping file](https://hackmd.io/@kboomro/r1csps2MR) is in peer and mentors review, so, even though the project is solidifying around a clearer prototype, discussions can spur new ideas and approaches.
### Week 16, 17 planning
Last two weeks before moving on to the delegator role selection & incentivization research phase of the project.
I plan to:
- finish the use cases phase
- add **Withdrawals** chapter