智能合约
2018-07-23 本文已影响0人
e98d76af67a1
智能合约定义
- 一段可执行代码,由交易触发执行;
- 输入数据来源于交易提供的参数、已入链数据,或来自于其他智能合约;
- 考虑安全因素,一般在隔离沙箱内执行。
调研区块链智能合约架构关心的问题
- 区块链节点分为哪几类?在哪种节点上运行智能合约?
- 智能合约的隔离方式是什么?VM、Docker或其他?
- 智能合约支持的语言是什么?
- 智能合约的安装方式是什么?可执行文件还是源代码?是否入链?
- 智能合约何时执行?是否在交易入链前(验证)和入链后(执行)都需要执行?
- 智能合约如何与区块链节点交互获取数据、写入数据?
Fabric v1.0
- 区块链节点分为以下几类:
- Endorser. 运行智能合约为交易提供背书,并生成 read/write set。
- Orderer. 将交易打包为区块,不运行智能合约。
- Committer. 执行交易 read/write set,不运行智能合约。
- 隔离方式:docker
- 支持语言:go, nodejs, java...
- 安装:各个组织管理员预先安装合约源代码至本组织的 endorser,合约内容不入链,交易使用合约的 hash 保证各 endorser 处合约内容的一致性。
- 执行时间:交易验证/背书时执行,入链后直接执行 read/write set,无需再次执行智能合约。
- 交互方式:
- 定义一系列接口例如
put_state(), get_state()
供智能合约使用入链数据; - 智能合约与节点之间通过 gRPC 通讯,例如
get_state()
背后对应向节点发送get_state
消息,节点查询数据库后返回消息至智能合约。
Fabric v0.6
- 节点分类:
- VP. 执行智能合约,将交易打包为区块;
- NVP. 转发交易,接受打包后的区块和 delta (类似 read/write set,但是无版本概念) 并执行。
- 隔离方式: docker
- 支持语言: go
- 安装:code package 以交易形式入链,所有 VP 节点在交易共识后安装智能合约。
- 执行时间:
- VP 打包前简单校验;
- VP 运行共识算法打包后运行智能合约逐一执行交易
execute
,将成功的交易写入区块,失败的交易写入 nonHashData; - VP 将 world state 更新提交至数据库,将新区块提交至数据库
commit
; - NVP直接将区块写入数据库,并使用 delta 更新 world state。
- 交互方式:与 v1.0 一致。
Ethereum
- 节点分类:矿工节点、验证节点...矿工节点运行PoW共识并运行所有智能合约。
- 隔离方式:EVM,基于堆栈的虚拟机
- 支持语言:Solidity...
- 安装:编译后的智能合约(字节码)以交易形式入链,
to address = null
- 执行时间:运行共识算法打包后运行智能合约逐一执行交易
- 交互方式:写入 cache -> 写入数据库
- 参考
Burrow
“You don’t need money to play, when you have permission to play”