美文网首页区块链研习社
Cosmos-- 一.概览 -- 3.对象能力模式

Cosmos-- 一.概览 -- 3.对象能力模式

作者: 糙米薏仁汤 | 来源:发表于2019-02-26 14:59 被阅读14次

cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新

第一章概览:

  1. SDK介绍
  2. SDK程序架构
  3. 对象能力模式

Object-Capability Model

介绍

在考虑安全性时,最好从特定的威胁模型开始。我们的威胁模型如下:

我们假设蓬勃发展的Cosmos-SDK模块生态中会包含错误或恶意的模块。

Cosmos SDK旨在通过以对象能力系统作为基础来解决此威胁。

对象能力系统的结构特性有利于代码设计中的模块化,并确保代码实现中的可靠封装。

这些结构上的特性便于分析一个对象能力程序或操作系统的某些安全属性。其中一些 - 特别是信息流属性 - 可以在对象引用和连接级别进行分析,而不依赖于对决定对象行为的代码的任何了解或分析。

因此,可以在存在包含未知或恶意代码的新对象的情况下建立和维护这些安全属性。

这些结构属性源于管理对现有对象的访问的两个规则:

  1. 只要对象A持有对象B的引用,A可以向B发送一条消息,。
  2. 只要对象A收到了一条包含对象C引用的消息,A可以获得C的引用。根据这两条规则,一个对象只有通过一条先前存在的引用链获得另一个对象的引用,简而言之,“只有连接才能产生连接”。

查看关于object-capabilities的文章了解更多。

严格来说,Golang由于几个问题没有完全实现object-capabilities:

  • 普遍有引入原始模块(比如unsafe, os)
  • 普遍重写模块的变量
  • 存在2个以上goroutine时的数据竞态漏洞可以创建非法的接口值

第一点很容易通过审计import和使用适当的依赖版本控制系统(如Dep)来捕获。但第二点和第三点就不容易了,需要成本进行代码审核。

实践中的对象能力模式

想法就是只暴露完成工作所需要的部分。

比如,下面的代码片段违反了对象能力原则:

type AppAccount struct {...}
var account := &AppAccount{
    Address: pub.Address(),
    Coins: sdk.Coins{sdk.NewInt64Coin("ATM", 100)},
}
var sumValue := externalModule.ComputeSumValue(account)

方法名ComputeSumValue暗示了这是一个不修改状态的纯函数,但传入指针值意味着函数可以修改其值。更好的函数定义是使用一个拷贝来替代:

var sumValue := externalModule.ComputeSumValue(*account)

在Cosmos SDK中,你可以看到gaia app中对该原则的实践。

// register message routes
app.Router().
  AddRoute(bank.RouterKey, bank.NewHandler(app.bankKeeper)).
  AddRoute(staking.RouterKey, staking.NewHandler(app.stakingKeeper)).
  AddRoute(distr.RouterKey, distr.NewHandler(app.distrKeeper)).
  AddRoute(slashing.RouterKey, slashing.NewHandler(app.slashingKeeper)).
  AddRoute(gov.RouterKey, gov.NewHandler(app.govKeeper))

相关文章

  • Cosmos-- 一.概览 -- 3.对象能力模式

    cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新第一章概览:SDK...

  • C++设计模式(2)

    本文概览: 对象创建模式 Factory Method Abstract Factory Prototype Bu...

  • 设计模式

    1 软件设计原则和设计模式概览 1.1 面向对象设计原则 1.2 GOF设计模式 1.3 C嵌入式编程设计模式 ...

  • Cosmos-- 一.概览 -- 1.SDK介绍

    cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新第一章概览:SDK...

  • 《Fluent Python》读书笔记-Design Patte

    概览     本章的内容不多,主要介绍了函数作为第一类对象对设计模式的影响,作者主要通过策略模式和命令模式这两个模...

  • Cosmos-- 一.概览 -- 2.SDK程序架构

    cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新第一章概览:SDK...

  • BlockingQueue相关

    1. 方法概览 2. 子类概览 3.锁情况

  • 代理设计模式

    代理设计模式:1.真实对象2.代理对象3.抽象对象(抽象功能) 代理设计模式优点:1.保护真实对象2.让真实对象职...

  • 14-javaScript-正则表达式

    1. 定义 2. 举例 3. 对象模式使用 1. 创建正则表达式的对象 2. 基本使用 3. 匹配模式 4. 字面...

  • 单例模式

    单例模式的特点:1.单例模式只有一个实例。2.单例模式自己创建自己的对象实例。3.单例模式必须给所有其他对象提供这...

网友评论

    本文标题:Cosmos-- 一.概览 -- 3.对象能力模式

    本文链接:https://www.haomeiwen.com/subject/yhbayqtx.html