DEVCON2: DigixGolbal的安全强壮性以及稳定币,DGX
本文为大会演讲速记尝鲜版,给心急的小伙伴们先行浏览,精细校对版将会在大会后逐步发布。
Anthony Eufemio, Chris Hitchcott发表主题“DigixGolbal的安全强壮性以及稳定币,DGX”
合同模式
我主要负责DigixGolbal的技术支持,Solidity并非坚固不可打破,这是一个高级语言,但是通过Solidity不一定能写出安全的智能合约。
如何使用软件结构,写出安全的以太坊合约?
所以一个好的软件设计模式,首先要实现代码可读,这是一个大胆的声明,好的软件设计模式可以给我们比较容易读区的代码,我们要有易读代码,就需要很好的架构,哪怕是第三方审计公司也能读懂。如果把意大利面条的代码发送出去,会给审计员带来麻烦。
好的软件架构有一些可重复使用的代码,如果代码经过测试,就不会带来安全隐患。
当然比较好的软件设计模式,可以帮我们分离忧虑,可以让我们更容易去审查,保证代码安全性,我想做一个类比,把软件想成电路,一个电路回路,一旦做成,很难改变,以太坊部署的合约也是这样,一旦部署很难改变。
电路板比做软件代码,这是一个电路板,有很多内存芯片,在设计内存时有很多模块,你需要模块协同工作,这也是相同的道理,在设计合同时,这里不是Solidity合同,基于许多模块的合约,里面会出现异常,会带来负面效应,就像CPU一样,出现状况会带来一些影响。
第三点你可以把你的合约分成很多部分,可以界定进入点和出口点。
第四个就是有好的软件设计模式,可以进行静态分析,通过使用这样的恶工具可以建立更好的代码。
攻击矢量,就是代码的路径,可以让恶意使用者获得软件或计算机资源的途径,一般这是合规的。比如说shell这样的代码,会给恶意使用者一些机会,进入他人电脑作出攻击,这种情况下我们可以通过一些方法改进,可以进行数据存储,进行参数设置,如果发生了攻击矢量会泄漏数据,我们有函数数据和第三方合约。以太坊交易必须通过秘钥设计在外部发生,可以通过外部调用以太坊合约。
第三个外部账户可以发送交易到以太坊合约上,可以调用另一个以太坊合约。
第四个就是其中一个人从自己以太币的账户发送到另一个账户。
ERC-20这是标准的代币格式,有三个coin 函数,还有balance、approve,一旦合约部署到区块链上,就不可篡改。
我们的合约分解成不同的合约,这种分离是基于自身的行为,比如分解成界面合约,控制者合约,存储合约,访问控制合约。所谓的界面合约可以被外部合约直接进行调用,这就是我们所说的主要进入点,对我们的设计而言,这是唯一的可控制界面,我们可以对这种合约进行很好的编码,可以把合约用在一种比较复杂的代码上进行设计,意大利面条代码很难读取,但是这样分解之后就可以很容易读取。
控制者合约,可以从界面合约中调用,可以通过其它控制者合约调用,通常会完成一系列的认为,这是基于调用合约输入完成。
存储合约可以看出数据库,可以通过控制者合约调用。
还有其它模块,访问控制其实是一系列可以反复使用的代码,可以描述一些资源是否能够被访问。
所以这是一个访问控制的例子,合约有一个主人,如果有人想访问合约,可以通过访问控制来控制。
多个使用者来使用,通过这样的访问途径来获得,可以通过注册器和其它资源调用来访问。
这是许多关键值,可以让界面合约和控制者合约调用其它合约,我们可以获得调用地址,这就是目录服务,可以调用一些其它函数,这是一个目录服务分解器,我们可以知道我们的调用函数是什么样的,如果要调用函数是应该基于地址还是其它内容进行调用,这就是目录服务。
这是分解器,ICS的模式,我们会有一个控制的服务,在Digix有不同的模块分别执行不同的功能,最底部是存储。如果合约本身由你来设计,可以改变分解器中的值,最难改变的是存储合约,其它合约可以改变,但是存储合约没办法改变。
作者:Lydia
微信掃描關注公眾號,及時掌握新動向
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場