区块链智能合约技术的原理与应用丨区块链智能合约开发多少钱
【区块链智能合约技术的原理与应用丨区块链智能合约开发多少钱】lot物联网小编为你整理了的相关内容,希望能为你解答。
合约,又称合同,指两方或多方当事人之间达成的协议,约定在未来某个事件发生时或满足某种条件时,各方如何履行各自的责任义务,享有各自的权益。买卖、租赁、借贷……大部分涉及当事人之间的协议合约,无不是一方付出金钱或等价物,另一方提供产品、服务或对方需要的东西,这样的合约不胜枚举。
入职、买房、银行开户等,现实生活中我们经常和各种各样的合约打交道。除了少数情况下我们需要从头开始逐条协商合约条款,很多时候我们签署执行的其实是“格式合同”,又称“标准合同”,指合同当事人一方预先拟好合同条款,按照固定的模板填写或更改具体条件和参数,另一方只能表示接受或不接受。对于非拟定条款的当事人一方而言,要订立格式合同,就必须全部接受合同条件,否则就不订立合同。格式合同的出现,一般是因为拟定条款的一方是处于卖方市场的供给方,而可以反复使用的格式合同也为需求方提供了便利,车票、船票、机票、保险单等都是格式合同。
智能合约www.yuanwze.cn概念的出现最早可以追溯到1994年,尼克·绍博将其定义为“执行合同条款的计算机化交易协议”(见图2)。智能合约设计的总体目标是满足常见的合同条件(例如支付条款、留置权、保密性,甚至执行),最大限度地减少恶意和偶然异常的情况发生,并最大限度地减少对可信中介的需求。据说,尼克·绍博发明智能合约这个概念,是受到自动售货机的启发。智能合约诞生在区块链之前,也就是说这个概念最初和区块链并没有必然的联系。
图1 智能合约可以被认为是传统合约的数字化定义和自动化执行
很多互联网服务都已经有了智能合约的影子。例如,很多银行提供了“自动还款”业务,用户会把自己的电话费、家庭的水电气费等公用事业费用与自己的银行账户绑定,不同服务商按事先的“约定”,按期自动将款项从指定账户划走,这可以算是一种智能合约。
IFTTT是If This Then That(如果这个……则那个……)的缩写,是一个流行且实用的互联网服务,在移动互联网和物联网普及后更为流行。IFTTT定义如果“这个”网络服务满足条件,就会自动触发“那个”网络服务去执行下一个动作,且条件和动作都可以由用户根据自身需求设置(见图2)。IFTTT能将前后两个不同的网络服务连通,以实现各种各样的功能,并且为用户不间断地工作。IFTTT的这种可视化的脚本编辑和自动执行,可以被认为是一种广义的智能合约。
图2 IFTTT可以让用户定义很多种逻辑,自动完成很多动作
在过去很多年里,这些互联网上实现的智能合约已经在我们的生活中无处不在,只不过我们并没有把这些功能称为“智能合约”。另外,过去互联网上的这些广义的智能合约在形式上大多更接近于格式合同:用户只需要选择一些常用的既定模版,选择一些需要的规则,填写一些需要修改的参数即可。其实,这种做法最接近用户的习惯,也比较容易理解,普通用户不需要任何计算机知识也可以使用。
比特币脚本
比特币的核心是一个分布式账本,按照我们直观的想象,这个账本进行转账的时候,比如A给B转1枚比特币,就是先在A的账户减少1枚比特币,然后在B的账户加上1枚比特币,作为用户我们可以这么去理解这一过程,但实际上比特币的实现远没这么简单。比特币采用比特币脚本来实现这个过程,并通过脚本实现更多的功能,这也是为什么比特币被称为一种“可编程的货币”。
为什么比特币要通过脚本来实现,而不是把功能逻辑直接实现在链的节点代理中?这主要是为了能实现一定程度的可扩展性,这样链只需要实现最基础的功能,而链的使用者可以通过脚本最大限度地在链的基础功能上扩展更多的功能。从这个角度来看,不得不说中本聪在设计比特币时非常具有前瞻性。
脚本语言是为了缩短传统的编程过程而创建的一类语言,通常都有简单、易学、易用的特性,目的就是快速完成工作。但比特币脚本语言不支持循环、不支持复杂的流控制功能,也就是说,比特币脚本语言不是图灵完备的,这意味着其复杂性有限,交易可执行的次数可预知。由于比特币脚本不是一种通用语言,它不会产生无限循环或其他类型的未知逻辑错误(有时被称为“逻辑炸弹”),因此难以利用比特币脚本的特性开展对系统的攻击。
我们可以认为比特币脚本是一种区块链智能合约的雏形。究竟比特币脚本能不能算是智能合约,有很多不同的看法,但基本上属于“名词之争”。至少可以看到,在如何实现区块链的可编程和可扩展方面,比特币和以太坊走上了截然不同的道路:以太坊的智能合约语言强调图灵完备,而比特币脚本特意设计为非图灵完备。
以太坊的智能合约
以太坊的成功真正让智能合约成为显学,而以太坊的成功本身也得益于智能合约。通过以太坊官网上的自我介绍——“以太坊是一个运行智能合约的分布式平台”可以看出这一点(见图3)。智能合约运行在以太坊虚拟机上,以太坊是一个由所有运行以太网节点的设备组成的分布式计算网络。
图3 以太坊智能合约执行流程
以太坊的智能合约是通过以太坊虚拟机实现的。以太坊虚拟机是以太坊的基础,它负责执行所有的交易,并且根据这些交易来维护整个以太坊的账户状态。部署或者调用智能合约是交易的一种。智能合约是由虚拟机执行的代码,目的是实现复杂的业务逻辑。
以太坊虚拟机被设计成一个相对封闭的环境,不支持对网络API、文件系统等的直接访问。以太坊虚拟机就是一个沙盒环境,只能处理区块链内部的状态。区块链没有主动获取数据的能力,它能用的只有区块链本身的数据。当智能合约互相调用时,以太坊虚拟机会在一个全新的环境中运行新合约,这样即使出现问题也不会破坏原有执行环境,为智能合约的执行提供了一个沙盒环境。
以太坊的智能合约是通过虚拟机方式来运行的,这让很多人误以为要实现智能合约必须通过虚拟机来运行,以为以太坊的做法是实现智能合约的唯一方法,甚至形成了凡是公链必须支持智能合约、必须实现虚拟机的观点。这样的理解是不正确的。
以太坊的官网和官方文档里没有对智能合约的准确定义。在以太坊的概念里,“智能合约”和“程序”似乎等同,其本身除了名字之外和我们常规理解的“智能”(多指有更高级的智能逻辑,甚至人工智能)以及“合约”并没有直接的联系。从某种程度上可以说,以太坊对“智能合约”进行了一种曲解和误导。2018年10月,以太坊创始人维塔利克·布特林在推特上表示,他对以太坊采用“智能合约”这个术语感到遗憾,认为应该称其为“持久性脚本”之类的更专业的名词。但无论如何,既然这已经约定俗成,我们也就只能将错就错了。
其他区块链的智能合约实现
Hyperledger Fabric的链上代码、Cosmos和Polkadot采用的WASM、ArcBlock采用的和节点相同的虚拟机方式,都可以被认为是在以太坊智能合约之外尝试与迭代不同的实现方式,虚拟机并非执行智能合约的唯一方案(见图4)。
(嵌入式运行指节点代码直接负责脚本的解释执行)
图4 一些区块链系统举例
不采用虚拟机。在Tendermint中,并不存在虚拟机这一层,应用程序是一个标准的操作系统进程,采用不受任何限制与约束的方式实现智能合约。
WASM虚拟机。目前有不少区块链采用基于WASM的虚拟机来实现智能合约,例如,EOS率先使用WASM,最近以太坊也计划升级至2.0版,放弃以太坊虚拟机而转投向WASM,Polkadot也选择了WASM。
其他虚拟机。除WASM外,我们还看到少数项目采用了以现有硬件指令集为基础的虚拟机,例如有项目使用RISC–V指令集。采用这些硬件指令集的虚拟机来实现区块链,究竟利弊如何,是哗众取宠还是确有其优势,尚且需要时间来证明。
Docker容器环境。Hyperledger Fabric的链上代码设计使用Docker容器技术作为智能合约的运行环境。其运行方式是在节点部署一个链上代码后,所有相关节点均会启动一个在Docker容器中独立运行的链上代码进程。链上代码通过容器中对外的gRPC接口完成与节点的交互。目前对于链上代码的运行,Hyperledger Fabric仍然采用一种较为手动和底层的方式来管理维护。因为是联盟链的环境,相当于默认所有被许可加入网络的节点均可以较为自觉地使用系统资源,即准入限制方式。但根据其开发计划,未来版本将提供更去中心化的链上代码管理能力。
采用和节点相同的虚拟机环境。ArcBlock采用和节点相同的虚拟机环境,让区块链框架更为灵活(见图5)。ArcBlock的区块链系统则完全搭建在Erlang虚拟机上,因此智能合约代码在执行的时候,和系统本身是平级的。由于Erlang虚拟机有许多功能可以很好地支持分布式集群,在处理区块链系统这种去中心化多节点的复杂活动时,Erlang虚拟机本身已经处理了许多常见问题。
图5 ArcBlock的智能合约在区块浏览器里的呈现
注:图中所示的是实现跨链的一个智能合约,交易双方在对方的链上锁定标的,然后完成交换。
以上内容为【区块链智能合约技术的原理与应用丨区块链智能合约开发多少钱】的相关内容,更多相关内容关注lot物联网。