原文发布在 https://github.com/33357/smartcontract-apps这是一个面向中文社区,分析市面上智能合约应用的架构与实现的仓库。欢迎关注开源知识项目!
Compound应用架构
服务架构
Compound 整个应用所依赖的服务分为以下几块:
Web服务:为用户提供合约数据显示和操作的界面
Ethereum钱包服务(Metamask):保管用户私钥,并负责签名和向区块链发送数据
智能合约服务:保存用户资产,提供可信的资产管理服务
价格预言机服务:提供资产价格
链上数据聚合服务(Subgraph):快速获得合约的状态
清算服务:清算超过禁戒线的账户资产
其中的数据流如图所示:
合约架构
Compound合约主体分为以下几块:
cToken:用户直接操作的合约,保存用户资产,提供业务接口
interestRateModel:提供资产利率的计算模型
comptroller:操作条件审查
priceOracle:提供资产价格
其中的数据流如图所示:
#mermaid-svg-DTKF7dj29jJtl7cB {font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-DTKF7dj29jJtl7cB .error-icon{fill:#552222;}#mermaid-svg-DTKF7dj29jJtl7cB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DTKF7dj29jJtl7cB .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-DTKF7dj29jJtl7cB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DTKF7dj29jJtl7cB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DTKF7dj29jJtl7cB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DTKF7dj29jJtl7cB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DTKF7dj29jJtl7cB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DTKF7dj29jJtl7cB .marker.cross{stroke:#333333;}#mermaid-svg-DTKF7dj29jJtl7cB svg{font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DTKF7dj29jJtl7cB .label{font-family:”trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-DTKF7dj29jJtl7cB .cluster-label text{fill:#333;}#mermaid-svg-DTKF7dj29jJtl7cB .cluster-label span{color:#333;}#mermaid-svg-DTKF7dj29jJtl7cB .label text,#mermaid-svg-DTKF7dj29jJtl7cB span{fill:#333;color:#333;}#mermaid-svg-DTKF7dj29jJtl7cB .node rect,#mermaid-svg-DTKF7dj29jJtl7cB .node circle,#mermaid-svg-DTKF7dj29jJtl7cB .node ellipse,#mermaid-svg-DTKF7dj29jJtl7cB .node polygon,#mermaid-svg-DTKF7dj29jJtl7cB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DTKF7dj29jJtl7cB .node .label{text-align:center;}#mermaid-svg-DTKF7dj29jJtl7cB .node.clickable{cursor:pointer;}#mermaid-svg-DTKF7dj29jJtl7cB .arrowheadPath{fill:#333333;}#mermaid-svg-DTKF7dj29jJtl7cB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DTKF7dj29jJtl7cB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DTKF7dj29jJtl7cB .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-DTKF7dj29jJtl7cB .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-DTKF7dj29jJtl7cB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DTKF7dj29jJtl7cB .cluster text{fill:#333;}#mermaid-svg-DTKF7dj29jJtl7cB .cluster span{color:#333;}#mermaid-svg-DTKF7dj29jJtl7cB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DTKF7dj29jJtl7cB :root{–mermaid-font-family:”trebuchet ms”,verdana,arial,sans-serif;} 利率模型 操作条件审查 用户操作 资产价格 interestRateModel cToken comptroller account priceOracle