06-智能合约
0 啥是智能合约?
定义
智能合约,又称加密合约,在一定条件下可直接控制数字货币或资产在各方之间转移的一种计算机程序。
角色
-
区块链网络可视为一个分布式存储服务,因为它存储了所有交易和智能合约的状态 -
智能合约还是基于存储服务之上的计算,即运行在区块链上的代码程序。
特点
智能合约,即先前设定好的代码数字协议,在不可更改和公共监督情景下,去运行一个合约,违反合约的一方将付出事先约定好的代价,自动执行(无需借助外部力量)。
智能合约是公平的,第三方无法干预。
功能
智能合约不仅以与传统合约相同方式定义协议的规则和处罚,还可自动强制执行这些义务。
它通过接受信息作为输入,通过规则为输入赋值,在合约中列出并执行这些合约条款。
实例
设想人寿保险,智能合约在保单持有人去世后,向指定受益人支付利益。
合约可以对在线死亡登记表进行实时检查以确定支付时间,智能合约是可靠的,自动的。
架构地位
核心数据和核心业务逻辑运行在区块链上,保证去中心化与上层业务系统进行衔接,提供用户界面或业务集成:
意义
区块链智能合约:从数据可信上升到业务可信。
1 假如没有智能合约?
区块链网络将仅作为一个分布式存储服务。区块链主要功能将会是记录和保存数据,而不会自动执行任何逻辑或业务规则。
没有智能合约的区块链网络的特点和局限:
1.1 特点
-
去中心化存储:区块链仍提供去中心化的数据存储功能,保证数据的完整性和防篡改性 -
数据透明性:所有节点可访问相同数据,确保信息公开透明 -
安全性:通过共识机制和密码学技术,确保数据安全性和不可篡改性
1.2 局限
-
缺乏自动化处理:无法在链上执行自动化的业务逻辑。如不能在特定条件下自动触发资金转移或更新数据 -
手动操作:所有业务逻辑和操作需要依赖链下的系统或人工操作,增加操作复杂性和潜在错误 -
有限的应用场景:仅能用于简单的数据记录和查询,无法支持复杂的去中心化应用(dApps)
1.3 假如没有智能合约的区块链网络的典型使用场景
-
数据记录:例如,公证和时间戳服务,用于证明某个数据在某个时间点已经存在。 -
审计跟踪:用于保存和跟踪记录的变更历史,确保记录的完整性和不可篡改性。 -
简单交易:例如,比特币的早期应用,仅支持简单的转账功能,而没有复杂的业务逻辑。
1.4 实例
若一个区块链网络没有智能合约,其工作流程可能:
-
数据写入:用户通过客户端,将数据写入区块链 -
数据存储:区块链网络通过共识机制将数据记录在区块中,并存储在各节点的账本中 -
数据查询:用户或应用程序可查询区块链中的数据,但不能执行任何业务逻辑
如Alice向区块链提交一笔交易,记录她向Bob转账1个单位货币。区块链网络会验证并记录这笔交易,确保其不可篡改。但若无智能合约,无法在特定条件下自动执行转账或其他逻辑操作,所有业务流程要在链下由用户或第三方系统手动处理。
综上,无智能合约的区块链网络在功能上受限,只能提供基础的分布式存储和数据记录功能,无法支持复杂的自动化业务逻辑和去中心化应用。
所以,智能合约
1.5 有啥用?
在区块链社会里,大家共同维护一个区块链账本,所有交易数据无法篡改、不可伪造,还能减少人工对账的出错概率和人力成本。 随智能合约普及,我们也会变得更佛系。面对潜在的纠纷,无需自己出马,一切代码说了算。
如乘飞机买延误险,理赔就变得简单多了:
-
投保乘客信息、航班延误险和航班实时动态均以智能合约的形式存储在区块链上 -
一旦航班延符合赔付标准,赔偿款将自动划账到投保乘客账户,保单处理十分高效 -
你也不需要跟工作人员费口舌、争论计赔时间等问题
智能合约是以太坊区块链上指定地址的代码和数据集合,智能合约能直接相互发送消息,同时也能执行图灵完备计算。
智能合约是建立在以太坊虚拟机字节码基础之上的。
一般不会直接编写字节码,而是使用像 Solidity 这样的以太坊高级语言。
Solidity 是可以用来编写以太坊智能合约的高级语言,它和js很像。
推荐使用 Solidity 语言,其使用的人比较多,意味着更好的生态,能找到更多的资源,有问题也更容易找到答案。
2 重要性
2.1 经济活动可编程
代码即法律,表达现实世界的经济活动,满足条件自动触发的电子合约
2.2 现实事物可映射
智能提供丰富的数据结构,完成复杂的现实事物的标识和时序变化
2.3 区块链2.0的标志
区块链2.0通常指的是在比特币之后出现的区块链技术,其核心特征是支持智能合约(Smart Contracts)。智能合约是一种自动执行的合约,其中的条款和条件直接编码到代码中,无需第三方介入即可执行。
以太坊,HLFabric等都是建立在智能合约的基础上。
3 智能合约框架
3.1 广域网的状态一致性
-
不同节点得到一致执行结果 -
不同硬件环境得到一致的资源消耗
3.2 合约开发语言多样性
适应不同开发者的开发习惯
支持不同的合约语言:
-
C++ -
GO -
JAVA -
Solidity
支持不同的合约类型:
-
WASM 合约 -
Native 合约 -
EVM 合约
合约语言/运行时相容矩阵:
-
环境准备 -
合约编写 -
合约编译 -
部署调用
3.3 合约执行的高性能
支撑真实落地场景的业务体量
3.4 不同业务场景的可扩展性
-
公开网络和联盟网络的虚拟机需求 -
兼容已有的区块链生态
4 WASM智能合约字节码
将智能合约编译成WebAssembly字节码格式,以便在区块链环境中高效、安全地执行。WASM(WebAssembly)是一种高效、可移植的低级字节码格式,最初是为在浏览器中高效运行而设计的,但由于其安全性、跨平台兼容性和高效性,逐渐在区块链和智能合约领域中获得广泛应用。
4.1 优点
字节码预编译AOT,实现高性能
硬件无关中间码,生成本地指令 编译执行 V.S 解释执行
WASM字节码经过优化,可以接近本地执行速度,确保智能合约的高效执行。