flowchart TD
%%{ init: { 'flowchart': { 'curve': 'monotoneY' } } }%%
subgraph vaultFactory[Vault Factory]
direction BT
vfT1[The vaultFactory owns a number of VaultManagers and a mint for Minted] ---> vfT2
vfT2[vaultFactory is a 'Vault Director Machine' <br/> <br /> - it creates the vaultDirector </br> - vaultDirector is root user] --> vfT3
vfT3[ vaultFactory's <code>start</code> function <br /> <br /> - 1. factory = makeVaultDirector( zcf, vaultDirectorParams ) <br /> 2. uses factory to expose the Root Creator & Public Facets <br /> ]
vfT3--exports the following object as the <code>VaultDirector</code> -->vaultFactoryReturnVal
vaultFactoryReturnVal[( { <br /> creatorFacet: factory.creator <br /> publicFacet: factory.public <br/> } ) ]
subgraph vaultDirector[Vault Director <br/> <em>The root User</em>]
vdT1[<b>Vault Director is the 'Director' of the vaultFactory</b> <br />] --> vdT2
vdT2[<b>Oversees all Vault Managers</b> <br /> <br /> - VaultManagers for new Collateral types are created via the Director's creatorFacet <br /> <br /> - New vaults can be added to a manager using the VaultDirectors publicFacet </br> <br />] --- rootGovText
rootGovText[<b>Vault Director Handles Protocol-level Governance details </b> <br> <br/> VaultDirector contract initializes a watchGovernance function before exiting the addVaultType contract <br /><br/>] --> watchGovText
watchGovText[ <b>FIRST THOUGHTS: watchGovernance*** </b> ( need to investigate more)</br> <br/>watchGovernance is used to: set up a vaultTypes liquidation strategy </br> <br/>watch in background for governance to change terms regarding a collateralTypes params *]
subgraph VDF[Vault Director Facets]
vaultDirectorPublicFacet(( <b>publicFacet </b> <br /> <br /> getCollateralManager <br /> - getMetrics </br> - getGovernedParams <br />))
vaultDirectorCreatorFacet(( <b>creatorFacet</b> <br /> <br /> - addVaultType <br /> - getParamMgrRetriever <br /> - getGovernedApis <br /> - getLimitedCreatorFacet ))
end
end
end
vfT3 --- vaultDirector
vaultFactoryReturnVal ----> vaultDirectorCreatorFacet
vaultFactoryReturnVal ----> vaultDirectorPublicFacet
vaultDirectorCreatorFacet -- addVaulType( atomIssuer, params ) --> vm2
vaultDirectorCreatorFacet -- addVaulType( ethIssuer, params ) --> ethVm
vaultDirectorPublicFacet --> Alice
us1 --accessible via publicFacet -..-> vm2 -..- us2
Alice --> us1 ---> us2 --> us3 --> us4
subgraph vaultManager[Vault Manager]
vmT1[Vault Manager object manages vault-based properties for a collateral type <br /> <br /></br> ]
vmT1 --> vmT2([ Example Props </br> </br> - compoundedInterest <br /> - totalDebt </br> - totalCollateral </br> - vaultCounter </br> ])
vmT1 --> vmT3([ Example Methods </br> </br> - makeAddVaultInvitation <br /> - getSubscriber </br> - getMetrics </br> ])
subgraph Vault Manager Examples
subgraph ethVm[ETH Vault Manager]
EI[Vault Internals]
EI --> EM[Metrics]
EI --> EMM[Methods]
end
subgraph vm2[ATOM Vault Manager]
VI[Vault Internals]
VI --> Metrics
VI --> Methods
end
end
end
subgraph Alice[Alice wants to interact with the ATOM vaults]
us1[ 1. fetch vaultManager for ATOM-IST Vaults <br/><br/> <code>atomISTVaultManager = E(publicFacet).getCollateralManager ( atomBrand )</code> <br />]
us2[2. create invitation for opening an ATOM-IST Vault ,<br/> </br/><code>makeVaultInvitation = E(atomISTVaultManager).makeVaultInvitation()</code> ]
us3[3. use <code>makeVaultInvitation</code> open up a vault within the ATOM-IST collateral by using <br/></br> <code> openVaultSeat = E(zoe).offer(makeVaultInvitation, proposal, { Collateral: atomPayment } ) </code>]
us4[ 4. use newly created <code>vault</code> object as you please! <code><br/> <br/></>const aliceVaultSeat = E(openVaultSeat).getOfferResult()</code>]
end
subgraph vaultSeat[aliceVaultSeat]
vaultBase[vaultBase</b> <br/> <br/> - created in vault.js <br/>- <code>makeVaultBase</code> fn ] --<code>E(aliceVaultSeat)</code>-->fns
fns((<br /><br/> - getCurrentDebt<br/> </br> - makeTransferInvitation <br/> </br> - makeAdjustBalancesInvitation <br/></br> - makeCloseInvitation </br> </br>))
end
us4 --> vaultSeat
vaultFactory:::parentComponent
vaultDirector:::rootAdminComponent
vaultManager:::childAdminComponent
%% Element type definitions
Alice:::userContainer
vaultSeat:::userOfferResult
us1:::userStoryStep
us2:::userStoryStep
us3:::userStoryStep
us4:::userStoryStep
fns:::userStoryStep
classDef userStoryStep fill:#08427b,stroke:gray,stroke-width:1px, color: white, stroke-dasharray: 5 5
classDef userOfferResult fill:#d3aaff,stroke:steelblue,stroke-width:2px, color: black, stroke-dasharray: 5 5, font-size: 24px, line-height: 20px
classDef userContainer fill:#8aaceb, font-size: 24px, line-height: 20px,color: black
classDef rootAdminComponent fill:#7a3ae0, font-size: 24px, line-height: 20px, stroke: black, stroke-width: 4px, color: white
classDef parentComponent fill:#f29ba9, font-size: 26px, line-height: 20px, stroke: 3px, color: white
classDef left text-align: left;
classDef childAdminComponent fill:#c7a4ff, font-size: 26px, line-height: 20px, stroke: 3px, color: black
classDef type stroke-width:0px, color:#fff, fill:transparent, font-size:12px
classDef description stroke-width:0px, color:#fff, fill:transparent, font-size:13px
classDef heading font-size:30px;
Created
November 25, 2022 18:49
-
-
Save tgrecojs/4b24fd003c02805e8b03138ce151901d to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment