智能合约也称为”自执行和约“,或者叫“代码化的合约”。这个小节里面我们不聊智能合约的社会意义,而是假设你是一位开发者,准备上手智能合约的开发,那么动手之前都有哪些基础知识是必备的呢?本文为你呈现。
智能合约和区块链
智能合约的概念于 1994 年由 Nick Szabo 首次提出。广义上来讲,任何的能自动完成的合同就是一个智能合约,例如我去自动售货机买一瓶饮料,或者扫码使用一辆共享单车。但是当前讨论的智能合约,其实是跟区块链密不可分的。所以我们这里讨论的智能合约的精确的定义是,一个运行在区块链上的程序。注意这个程序甚至不一定需要去模拟一个商业合约,任何的一段程序只要是部署到了区块链上,我们都叫它一个智能合约,即使程序中只是完成了打印 Hello World ,或者计数器加一的操作。
为何智能合约和区块链结合如此紧密呢?Szabo 提出智能合约的概念之后很长时间内,智能合约根本无法落地,主要原因是合约各方无法去达成信任。于是,区块链作为所谓的信任机器,就刚好成为了智能合约的技术基础。智能合约和传统计算机程序最大的区别在于其执行结果的认可度,传统计算机程序的执行结果没有建立在共识机制上。而达成共识的前提是,合约的执行过程应该是公开的,合约产生的各项数据应该是不可篡改的。
比特币作为区块链之母,没有真正成为智能合约的运行平台。原因就是比特币脚本是图灵不完备的。不完备意味着什么呢?就是比特币脚本上根本就不能执行循环,一个不能执行循环的环境肯定不能实现丰富的逻辑,所以直接在比特币上运行复杂的智能合约是不现实的。最终,是以太坊的出现带来了智能合约的爆发。
智能合约如何工作
然而,知道什么是智能合约并不一定能解释它是如何工作的。
最简单地说,智能合约是由定义在它们身上的不同功能组成的。用户通过触发特定功能的交易与他们进行交互。这些功能中的每一个都被详细定义,因此用户可以准确地了解他们将要做什么。
网络用户定义智能合约。任何可以用智能合约语言编写代码的人都可以编写自己的代码,只要他们有足够的原生代币可以部署。成本本身取决于您部署的网络及其规定。
一个真实的例子是贸易协定。一旦双方讨论了细节(各自的回报、规定、任何可能使他们重新谈判交易的因素),他们通常会找到一个中立的第三方来确保一切都按信完成。然而,中立的第三方需要花钱——而且不能总是相信他们会保持中立,或者干脆不试图从这种情况中获得自己的优势。最简单的解决方案就是完全删除第三方。但是到时候谁来充当调解人呢?
这就是为什么人们总是偏爱只有机器才能实现的中立性。当前的技术进步仍然没有让机器人有自己的偏好和兴趣,因此它们通常被认为是解决这些问题的最佳解决方案。换句话说,编写智能合约可以让所有相关方公开透明地散列交易细节(因为智能合约无法做未明确编码的事情),从而防止潜在的渎职行为。这也降低了总体成本,因为与律师成本相比,部署和稍后触发智能合约的成本相对较低。
智能合约保证一切都将以编码的方式完成。由于它们不是非常复杂的程序,因此通常可以通过一些基本的编程知识来阅读和理解这些代码。这对于保持一切都在地面上并促进与网络中其他参与者的良好工作关系非常重要。
智能合约可以用来做什么
智能合约的最大优势之一是它们几乎可以用于任何事情,只要它们可以编程。当然,有些用例比其他用例更常见。一些最好的例子包括:
- 数字身份:在互联网上的隐私令人怀疑的时代,人们担心您与您正在访问其网站的公司共享哪些数据。这可以通过智能合约轻松数字化,它可以分享您的内容管理偏好,而无需实际披露您的个人信息。
- 证券:整个金融业在各方之间存在很多摩擦,尤其是在持有和交易证券方面。通过智能合约使一切自动化,可以完全消除中介。然后该程序将接管,支付股息和/或其他自动付款,管理责任并简化工作流程。
- 贷款和抵押贷款:这些事情往往是许多人感到沮丧的根源。实施智能合约支付意味着降低通常由第三方承担的总体成本,保持有利的利率,并确保没有可以利用的细则。此外,设置自动每月付款可以进一步简化所有参与者的整个考验。
- 供应链:作为区块链最著名的用例之一,智能合约在供应链管理方面也非常宝贵。从库存跟踪到所有相关方的自动更新,实施智能合约可以提高透明度并显着减少潜在欺诈的空间。
- 托管:与其他需要第三方参与的活动一样,托管也是可以从自动化中受益的活动之一。使用智能合约,资金会被保存在一个安全的地方,直到满足所有释放条件为止。这几乎可以消除盗窃和欺诈的风险,同时保持一切完全透明,也许最重要的是,价格实惠。
- 卫生系统:医疗数据高度敏感,大多数司法管辖区都有法律保护它免受未经授权的访问。使用智能合约不仅可以保护这些数据,还可以让个人决定谁可以访问它。最终,人们可以为医学研究人员提供收费的数据访问权限,从而消除所有相关方的大量道德问题。
- 薪水:保留受薪员工的企业可以通过自动支付工资来节省大量资金。即使他们必须请假,也可以快速轻松地调整这些更改。这个概念也适用于小时工。
智能合约用例列表远非详尽无遗。但是,它仅用于展示超出许多人在听到该技术时所想到的广泛应用。有了正确的基础设施,智能合约可以远远超出此处概述的用例。
智能合约的好处
智能合约为您开展业务的方式提供的许多好处都可以从我们现在所展示的内容中推断出来。另一方面,有些超出了起初可能显而易见的范围。让我们仔细看看它们。
- 信任:或者,也许更准确地说,不信任意味着您不需要暗中信任任何人,您设置的条件将被执行。由于智能合约没有自己的自主权,因此您可以放心,一切都会完全按照它所写的那样发生。
- 安全性:密码学是构建区块链(以及扩展的智能合约)的概念,它使一切比许多其他技术解决方案更加安全。
- 速度:使用智能合约是手动处理所有可以自动化的事情的重要一步。尤其是对于中间商而言,他们可能会根据自己的做法花时间,将所有内容转移到智能合约可能正是您的业务所需的节省时间。
- 节省:按照与速度方面相同的逻辑,消除第三方干扰也可以节省您为他们的服务支付的费用。
- 自主性:不依赖中介让您有更多权力自行或与其他相关方一起决定您的智能合约应该做什么。此外,随着参与者的减少,某人犯错(或者操纵)的机会显著降低。
- 准确性:除非错误被预先编程到智能合约中,否则它实际上无法执行代码中所写内容之外的任何操作。
- 透明度:您不仅可以阅读智能合约并查看它是否按照您想要或需要的方式编写,而且它存储在区块链上的事实意味着所有相关数据也将是可见的后人。对于企业而言,这可以加快审计流程。
- 易于理解(和使用):确实可以以令人难以置信的混乱方式编写代码。然而,高质量的代码将易于理解和使用,这意味着它比阅读冗长、密集的法律文件要容易得多。
使用智能合约的其他好处将取决于您的个人用例。最重要的是,它们都有一个共同点:它们让一切变得更容易。
潜在的缺点
当然,没有任何技术是灵丹妙药。对于区块链和智能合约来说尤其如此。由于它们仍然相对较新,并且解决了许多行业长期存在的问题,因此通常期望它们能够做的比实际做的要多得多。以下是智能合约可能面临的一些问题:
- 不具有法律约束力:尽管智能合约有其名称,但不一定是实际合约。他们可能不会在法庭上站得住脚,但这可能会根据具体情况而改变。
- 监管的不确定性:同样,由于技术如此新颖,通常没有政府法规。根据交易的类型,它们可能不是必需的——但它们也可能很关键,因此处理这些法律问题可能是一件苦差事。
- 税收:同样,您如何对智能合约交易征税?虽然有些人可能在传统金融领域有先例,但加密货币的兴起带来了一些新因素。
- 解决错误:没有代码是完美的,错误会发生,即使是最好的编码人员也是如此。其中一些可能直到为时已晚才被注意到,并且区块链上的交易是不可逆的。换句话说,错误可能代价高昂。
- 撤销合同:由于智能合同是非常真实的,通常没有办法像传统合同那样撤销它们,即使在法庭上。
- 不是每个人都可以阅读代码:简单地说,不是每个人都知道编码的基础知识。虽然从理论上讲,智能合约应该比纸质文件更直接,因为它们不允许打印。但是,如果您无法阅读代码,那么任何人都可以与您一起编写任何他们想要的东西。
- 他们无法获得真实世界的信息:智能合约无法从区块链外部访问信息,因为这可能会危及共识。所谓的预言机就是用来克服这个障碍的。
这些缺点中的每一个的重要性,就像我们列出的好处一样,取决于你实际使用智能合约的目的。尽管如此,如果您正在考虑使用智能合约,了解这些利弊有助于做出明智的决定。
什么是预言机?
预言机的功能就是将外界信息写入到区块链内,完成区块链与现实世界的数据互通。它允许确定的智能合约对不确定的外部世界作出反应,是智能合约与外部进行数据交互的唯一途径,也是区块链与现实世界进行数据交互的接口。
听上去很难理解,我们举例来说。
大家会很形象的把公链比作操作系统,DAPP 类比的话就是 APP,那么预言机可以形象的比做 API 接口(API 是一组定义、程序及协议的集合,通过 API 接口实现计算机软件之间的相互通信)。这个类比虽然不准确,而预言机正是扮演这样的角色,预言机是区块链和现实世界之间的纽带,可以实现数据互通的工具。
用 Solidity 编写智能合约
虽然,以太坊之后的各个区块链项目大都支持智能合约了,包括比特币也在第二层有了 RSK 方案去支持智能合约。但是以太坊技术在智能合约方面的很多开创性的成果,目前已经被大家都默认为是行业标准了。
以太坊之所以能带来智能合约的革命,原因就是它在区块链之上成功运行起了图灵完毕的语言,使得描述复杂的业务逻辑成为了可能。Solidity 是诞生在以太坊社区的专门用来写智能合约的新型编程语言。虽然理论上智能合约能用各种语言进行编写,但是目前 Solidity 是编写智能合约的最流行的语言,不仅仅可以在以太坊上可以使用,其他跟以太坊竞争的区块链项目上,例如 Nervos ,也可以使用 Solidity 进行智能合约的开发。
比特币因为功能少,所以可以基本上看做一个运行在区块链上的数据库,因为主要的功能就是存交易数据。而以太坊不一样,可以认为是一个运行在区块链上的虚拟机。以太坊区块链上的虚拟机叫做 EVM ,EVM 就是 Solidity 语言的运行环境。以太坊号称世界计算机,所有的部署到以太坊之上的合约代码,网络上所有的计算机都会各自运算一遍,这样就保证了计算过程是公开可信的。
但是退一步思考一下,为何比特币脚本不设计成图灵完备的呢?是中本聪没有考虑智能合约吗?不是的。中本聪的考虑是这样的,因为区块链是一个公有的环境,如果允许用户写循环语句,那么攻击者写一个死循环,就可以让整个网络瘫痪。而这个担忧显然也适用于以太坊,那以太坊是如何避免这个问题的呢?以太坊之上,每次执行代码是要花费少量的代币的,这种代币不是以太币,而是叫 Gas ,也就是汽油的意思。这个意义很明确,就是你想让以太坊这辆车跑得快,就要给他加汽油,如果你写一个死循环,那么很快你账户上的汽油就用光了,那么代码也就停止运行,避免了网络的瘫痪。
总之,学习任何平台上的智能合约开发,都避免不了要学习一下以太坊的各种思想和标准,其中比较重要的就是 Solidity 语言,以及消耗 Gas 来租用系统资源的这种思路。
编译和执行
那咱们用 Solidity 实现了智能合约之后,如何编译和执行呢?
代码写好之后,需要先编译,然后部署到区块链网络上运行一下。各大区块链项目,基本上都有自己的测试网,测试网上部署和执行代码都不用真的花钱,只需要申请一些测试网代币就可以了。而测试网的运行效果是跟主网没有太大区别的。这里需要注意的是,代码部署到区块链上之后,我们就可以和智能合约进行交互了。但是能够访问的接口不再是我们熟悉的 HTTP API 了,而是叫 ABI ,也就是“应用二进制接口”,所以交互方式也有一定区别。好在这个咱们开发者完全不用担心,各个平台都发布了相应的库来支持交互。比如我们用来跟智能合约交互的前端是一个 Web App ,这样就可以导入对应的 JS 版本的库来实现交互了,以太坊下有 Web3.js ,Nervos 下有 nervos.js 都是为这个目的而生的。如果用 Androd 原生应用来做前端,也有对应的 Java 版本的库可以用。
所以整个的画面是这样的,智能合约的编译后,部署到区块链上,成为运行在链上的实例。然后就可以通过前端 App 来通过 Web3.js 或者 nervos.js 这样的库,来调用合约的各项功能,进行各种读写操作了。合约加上前端 App ,就构成了一个 DApp 。
总结
本节是为开发者而写的入门智能合约开发的一些基础知识。我们聊了,区块链因为能够保证代码执行和数据的不可篡改,成为了智能合约必备的技术基础。以太坊因为能够运行图灵完毕的 Solidity 语言,于是带来了智能合约的真正的爆发。最后聊了一下,合约部署到区块链上之后,可以通过 Web3.js 这样的库,来完成前端 App 和后端的合约之间的交互。当然,关于智能合约还有很多其他重要的知识点,但是这些知识,在结合实际平台的动手操作中去学习效果更好,所以我们这里就不展开了。
标签:智能合约(7)
快来评论,快来抢沙发吧~