• 微课视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
微课江湖
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 微课视频
  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链
您的位置:首页 > 网络安全 >区块链 > 浅谈以太坊智能合约的设计模式与升级方法

浅谈以太坊智能合约的设计模式与升级方法

作者:以太坊爱好者 字体:[增加 减小] 来源:互联网 时间:2018-11-03

以太坊爱好者向大家分享了浅谈以太坊智能合约的设计模式与升级方法,其中包含以太坊智能合约等知识点,遇到此问题的同学们可以参考下

以太坊EVM是当前区块链行业应用最为广泛的虚拟机。其所支持的智能合约语言是图灵完备的。该语言支持各种基础类型(Booleans,Integers,Address,String,Enum,Address等)、复杂类型(Struct,Mapping,Array等)、复杂的表达式和控制结构及接口继承等面向对象的特性。

正是由于强大的智能合约语言,原本在真实世界中的复杂商业逻辑和应用都能在区块链上轻松实现。然而需要注意的是,尽管公有链可以实现合理的GAS机制自我保护,联盟链可以用其他机制替代GAS的计算及代币化来保障EVM沙盒安全,但由于区块链运行机制的原因,智能合约的运行即使是异常运行都会在所有区块链节点上独立重复运行。因此,无论是在公有链还是联盟链运行智能合约都是非常昂贵(运算资源、存储资源)的操作。

另外,智能合约与传统应用程序有一个不同的地方在于智能合约一经发布于区块链上就无法篡改,即使智能合约中有Bug需要修复或者业务逻辑变更,它也不能直接在原有的合约上直接修改再重新发布。因此在设计之初就需要结合业务场景考虑合理的升级机制。

总而言之,智能合约实现上要达到的目标是:完备的业务功能、精悍的代码逻辑、良好的模块抽象、清晰的合约结构、合理的安全检查、完备的升级方案。

智能合约的生命周期主要有设计、开发、部署、运行、升级、销毁。在下文中主要是基于目标在设计阶段、升级阶段的一些梳理总结。

1. 最佳实践

从业务视角来看,智能合约只需要做两件事,其一是如何定义数据的结构和读写方式,其二是如何处理数据并对外提供服务接口。

为了更好的做好模块抽象和合约结构分层,将这两件事分开,既是将业务控制逻辑和数据从合约代码层面就做好分离,这样的处理在复杂业务逻辑场景中经过实践是当前被认为最佳的模式。

这个模式简称为CD(Controller-Data)模式。将合约分为两类:控制器合约(Controller Contract)与数据合约(Data Contract)。


控制器合约通过访问数据合约获得数据,并对数据做逻辑处理,然后写回数据合约。它专注于对数据的逻辑处理和对外提供服务。根据处理逻辑的不同,常见的有命名空间控制器合约、代理控制器合约、业务控制器合约、工厂控制器合约等。一般情况下,控制器合约不需要存储任何数据,它完全依赖外部的输入来决定对数据合约的访问。特殊情况下,控制器合约可以存储某个固定的数据合约的地址或者命名空间(通过命名空间在运行时获得合约地址)。

数据合约专注于数据结构定义与所存储数据的读写裸接口。为了达到数据统一访问管理和数据访问权限控制的目的,最好是将数据读写接口只暴露给对应的控制器合约。禁止其他方式的读写访问。

基于这个模式,遵循从上至下的分析方式,从对外提供的服务接口开始设计各类控制器合约,再逐步过渡到服务接口所需要的数据模型和存储方式,进而设计各类数据合约,可以较为快速的完成合约架构的设计。

2. 实用设计案例

在CD模式下,根据控制器合约与数据合约之间的操作关系,从逻辑上归结为四类:

  1. 控制器合约与数据合约 1->1

  2. 控制器合约与数据合约 1->N

  3. 控制器合约与数据合约 N->1

  4. 控制器合约与数据合约 N->N

假设一个业务场景:将全国所有银行的业务和信息上链。

2.1 控制器合约与数据合约: 1->1

假设全国只有两家银行,A银行和B银行。A银行只有存款业务,B银行只有取款业务。一种可能的设计是这样的:


代理控制器合约:面向Dapp,是所有业务合约的入口,提供命名空间服务,提供了命名空间到合约地址的映射。使得Dapp对链上合约升级导致的地址变更无感知。例如,Dapp对A银行的存款请求只需要(“BankA",deposit,args) 即可。对B银行的取款请求只需要(”BankB",withdraw,args)即可。代理器控制合约实现上应该是区块链底层内置的、固化的,或者是业务上极少变更的。Dapp在业务运行之前已经明确知道代理控制器合约的地址。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-11-03区块链技术如何工作?
  • 2018-11-03什么是网络即服务(NaaS)?
  • 2018-11-03如何玩转以太坊养猫游戏
  • 2018-11-03泰达币USDT是什么?USDT如何兑换美元?
  • 2018-11-03椭圆曲线——保障用户隐私的神奇加密算法
  • 2018-11-03DEx交易规则及常见问题
  • 2018-11-03imToken 2.0国际版如何设置观察钱包(冷钱包、离线签名)
  • 2018-11-03智能合约并不像你想象的那么智能
  • 2018-11-03区块链简介-什么是侧链
  • 2018-11-03以太坊Sharding FAQ

文章分类

  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链

最近更新的内容

    • SegWit2x 客户端安装教程
    • 升级您的以太坊智能合约的最佳实践
    • 区块链性能测评实战案例
    • 区块链VS Linux 深度剖析开源系统商业价值如何变现
    • Hcash POS钱包挖矿教程(MAC版)
    • 区块链电子猫-CryptoKitties完全攻略
    • 区块链开发环境选择与建设
    • 区块链未来五大应用
    • 底层公链的方向会在哪里
    • 配置区块链网络并利用该技术

关于我们 - 联系我们 - 免责声明 - 网站地图

©2015-2018 All Rights Reserved. 微课江湖 版权所有