QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

一篇文章让你了解什么是智能合约

  • 2019-10-25
  • 本文字数:3797 字

    阅读完需:约 12 分钟

一篇文章让你了解什么是智能合约

当人们在讨论智能合约的时候他们到底在说什么?

在区块链和加密货币的语境中,智能合约的定义是:


  • 在分布式存储平台(例如区块链)上存储并复制的,

  • 在计算机网络(通常是运行区块链的同一个网络)上执行/运行的,

  • 并且可能引发账本更新(用加密货币付款等等)的,

  • 预写入的逻辑(计算机代码)。


……换句话说,智能合约是执行“如果发生这种情况就执行那种结果”的小程序,由大量计算机运行并验证以确保可信。


如果说区块链为我们提供了分布式的可信存储,那么智能合约就为我们提供了分布式的可信计算。


智能合约是将以太坊与其他区块链区分开来的功能之一。


这里我给出在现实生活中有效应用智能合约的以下三种典型场景:


1.具有嵌入式指令的银行账户


2.用计算机代码取代法律术语


3.一个真实的智能合约示例

1 具有嵌入式指令的银行账户

银行账户的一些表现就像智能合约一样。每个月,我的银行账户都会自动从余额中扣除固定金额转给我的房东。如果我的银行账户中没有足够的金额,那么付款则会失败,我将会被罚款并触发另一套工作流程。


这是因为我对银行账户预先设置了指令。


这和智能合约所能做到的类似,除了区块链上的智能合约是由多方运行而不是由单方控制。

2 用计算机代码代替法律术语


智能合约是可以自动执行传统合约中的“如果发生这种情况就执行那种结果”的代码。计算机代码总是以预期的方式运行,而没有人类语言中的歧义。代码很少会有潜在的争议点,因此在这一点上比人类语言更好。代码被复制到分布式/去中心化的区块链(详见后文)网络中的大量计算机上并由这些计算机运行,这些计算机就代码的执行结果达成一致。


本场景中的想法是,你可以签订一般的纸质合同,在律师们喜欢的“鉴于”条款的最后加上一条,指出区块链上的智能合约,并说“双方同意运行并遵守代码执行的结果。”。

3 一个真实的智能合约示例

以下是在以太坊区块链上应用的简单智能合约代码:



以太坊智能合约示例。


Ethereum.org 解释了它的作用:


这个合约为合约的创建者生成一万个代币,然后允许有足够余额的人将其发送给其他人。这些代币是不能细分的最小可交易单位,但最终用户可以被赠予 100 个可细分为 100 个子单位的单位,因此拥有单个代币代表拥有总数的 0.01%。

这与银行自动支付有什么区别?

1 控制

银行是银行账户的最终维护者。它拥有完全的控制权,可以随意地向我的账户添加资金(哈哈)或者扣除资金(有趣的是,这确实发生了,我要申诉回来)。


在正确设置的区块链生态系统中,不应有单一的控制来源。具有共识机制的分布式架构意味着多方参与者不断地反复检验并更新账本,任何不符合预先约定规则的情况都会被其他参与方拒绝。

2 代码

对于银行账户,每月进行自动交易的逻辑代码位于一台计算机上,由单方(银行)执行。虽然存在着内部控制和对账,但却没有外部验证。


对于运行在区块链上的智能合约,逻辑代码在所有参与的计算机上并行运行,结果由所有参与者进行比对。只有当参与者都同意结果,他们才会更新自己的账本版本。理论上没有人可以欺骗区块链。

3 透明性

对于区块链生态系统中运行相同代码的所有参与者,每个参与者都参与验证,智能合约的逻辑必须对所有人都可见。这意味着任何人都可以查看智能合约,如果你喜欢这个逻辑,你就可以使用它。如果你不喜欢,你就不去用它。有一般用途的智能合约,也有专门用途的智能合约。透明性具有两面性。让合约的所有利益相关者对所发生的事情达成一致是很有必要的;但另一方面,不光是利益相关者能够看到发生了什么——而是网络上的每个人。区块链中的隐私是一个富有争议的问题。有很多关于解决隐私与验证之间矛盾的讨论,有些解决方案使用了零知识证明;这将是另一篇文章的主题。

4 灵活性

在银行账户中我能运行的逻辑仅限于定期付款,或者其他一些基本的事情——虽然我并没有完全调查清楚。例如,不能自动在晴天的时候从我的工资帐户转账到我的存款帐户,然后在暴雨天全部转回(“雨天存款”智能合约)。


所谓“图灵完备”的智能合约可以完成一般计算机可以执行的任何操作,尽管区块链版本的运行速度要慢得多,而且比一般计算机的运行成本更高(取决于区块链的设置),因为最终你需要为网络上所有并行运行代码的计算机付钱。

为什么智能合约这么有用?

正如我在关于区块链的文章中所讨论的那样,共享账本在存在多方的时候很有用,他们可能完全不信任彼此,各方都会对事件版本进行互相比对。


例如,当两家银行不经过结算所进行复杂的衍生交易时,这被称为“场外交易”或 OTC 交易。这是两家银行之间的协议,而没有第三方验证。这些交易通常是赌局——即类似于“如果年底之前发生这种情况,那么你付款给我,否则我付款给你”。


双方都有一份原始贸易文件(贸易条款和条件)的副本,也都有着对贸易外部依赖关系的各自视角。因此,他们都应该就交易的结果达成一致,即谁赢得了赌局。然而,事情并非总是如此。


当参与方不同意交易结果时可能会出现不匹配或“中断”,这是出于以下多种因素:


  • 对原始贸易条款的相互误解

  • 由于原始交易条款的多个副本导致的混乱(由于双方的内部律师都试图保护他们的利益,文件中通常会存在反复出现的措辞)

  • 或者对外部依赖关系中实际发生的事情产生分歧


利用智能合约,只会存在一套用计算机代码编写的贸易条款,这比法律术语轻量得多,并且事先达成了一致。外部依赖关系(石油价格、苹果公司股价等)可以由双方都同意的来源提供。合约将存在于区块链中,并在事件发生或赌局到期时运行。


赌注可以储存在智能合约本身之中:双方将他们的最大可能损失金额“装载”到合约中,然后在事件发生时进行支付。这可能比现有的流程更简洁,但仍然存在着隐私问题,其他区块链参与者可以阅读本合约并能够查看两个竞争对手之间的赌注条款。目前金融服务业的大部分交易都是通过信贷和保证金或者抵押进行的;需要以货币/资产的方式预先全额支付潜在支出并不具有吸引力。

目前的智能合约产品

现有的区块链可不同程度地运行智能合约。具体系列如下。



比特币平台非常适合处理比特币交易,但在计算能力方面非常有限。在比特币交易的脚本中实现富逻辑的能力非常有限。比特币可能实现的一个逻辑是需要多个签名者在支付前签署交易,例如支票中需要两个签名人。然而,要在比特币区块链上实现智能合约,需要对挖矿方式和挖矿激励方案进行重大改变。具体请参阅比特币简介。


侧链,即连接到比特币主区块链上的区块链,它可以实现智能合约功能:通过让不同的区块链与比特币并行运行,并支持在比特币的主链和侧链之间跳转,侧链可用于执行逻辑。


NXT 是一个公有区块链平台,其中包括一系列目前正在运行的智能合约。然而它不是图灵完备的,这意味着你不能为所欲为,而必须使用现有的模板。


以太坊是一个公有区块链平台,是目前最先进的支持智能合约的区块链。以太坊采用“图灵完备”的编码系统,理论上你可以将任何逻辑放入以太坊智能合约中,并由整个网络运行。以太坊有防止滥用的机制,你需要通过支付“ETH”代币来支付算力,这些代币用于支付给运行代码的矿工。具体请参阅以太坊简介。

疑问

去中心化是十分昂贵的。运行代码的计算机越多,实现最终目的就越昂贵。去中心化并不是免费的。如果你使用的系统具有 10000 台运行代码的计算机,则需要支付这些计算成本:计算机操作者不会免费提供这些服务。


在公共网络中,用户必须付钱才能运行网络上的机器。让系统中的每台计算机(“节点”)存储数据(例如区块链)并运行嵌入其中的智能合约代码要比只有一两个参与者运行代码要昂贵得多。目前,即使节点不试图挖掘区块,节点也必须计算所有内容,因为验证区块的唯一方法是自己运行代码并将你的结果与已挖掘的区块进行比较。


将代码写在区块链上无疑是非常好的,这样各参与方就可以确定他们承诺的智能合约是什么样子,然后可以各自运行代码,也许由交易的各方运行?这将节省计算成本。代码可以被矿工和节点视为普通文本,而不是需要执行的指令。


作为业内人士,我们需要能够阐明为什么去中心化数据存储和计算系统是有价值的。一个更高效更便宜的替代方案是由一个组织集中充当存储和计算平台的中心,用户/参与者可以登录并上传他们的智能合约,让交易双方签署这些合约,然后双方会信赖运行的结果。当然,这失去了去中心化的保证(包括不可篡改性等)。

智能合约的未来

这个行业还有另外一个秘密没有被提及:人们喜欢风险。在许多合约中,有些条款都是有意写入的,以便留有仲裁的渠道。例如,在一份房屋租赁合同中,租户造成的磨损是可以接受的,但是重大损坏需要赔偿修复。代码如何定义这些东西?不可抗力一词出现在许多合同中,以便为有关各方提供摇摆空间。在一个智能合约环境中,一方如何描述这一含义而不对其进行滥用或交由仲裁人员。这么多的灰色地带,需要弄清楚的东西如此之多……


最后,我丝毫不怀疑共享账本将在消除多方协议之间的信任需求方面发挥作用。智能合约降低操作风险对各方都是有意义的,并可被认为是没有特定的中心协调者而实现各方之间自动信任的一套工作流程。然而,使用方面还存在着一些障碍,就像一般的区块链一样。


怎样利用智能合约?具有前瞻性的律师事务所应该通过加强和建立内部的智能合约编码能力以在这方面走得更远。与法律相关的学生应该学习法律和计算机编程的双重技能。那些能够缩小法律与计算机科学之间差距的人将在不久的将来备受追捧。


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/uL_fGwSZSRr-FOI6fPl_2g


2019-10-25 11:4111610

评论 1 条评论

发布
暂无评论
发现更多内容

React源码分析2-深入理解fiber

goClient1992

React

自己手写一个redux

helloworld1024fd

JavaScript

React源码解读之更新的创建

flyzz177

React

JavaScript刷LeetCode拿offer-树的遍历

js2030code

JavaScript LeetCode

代码质量与安全 | 一文了解高级驾驶辅助系统(ADAS)及其开发中需要遵循的标准

龙智—DevSecOps解决方案

静态代码分析 ADAS 汽车软件开发 汽车软件

用javascript分类刷leetcode15.链表(图文视频讲解)

js2030code

JavaScript LeetCode

【立哥】【每日一个小知识】按照法律,遗产应该怎么继承?

Lee Chen

法律 知识

来讲讲怎样获取到url上所有参数并以对象形式保存,再讲讲JSON解析与序列化

梁木由

前端 前端开发 前端面试

Apifox IDEA 插件 | 帮助开发者快速生成 API 文档

Apifox

IDEA idea插件 Apifox API文档 idea web

react hook 源码完全解读

flyzz177

React

关于这个“微信提现”的问题,太炸裂了,以至于我写了段代码来验证!

why技术

Java 算法

2023 届春招 Java 岗高频面试题盘点,老司机也未必全会,真的太卷了

架构师之道

编程 程序员 java面试

flutter系列之:在flutter中使用导航Navigator

程序那些事

flutter 大前端 程序那些事

腾讯前端一面经典手写面试题合集

helloworld1024fd

JavaScript

vivo x TiDB丨解决云服务海量数据挑战

PingCAP

TiDB

线上研讨会报名 | 与龙智、Perforce共探大规模研发中的数字资产管理与版本控制,赢取千元大奖

龙智—DevSecOps解决方案

版本控制 数字资产 游戏开发 芯片开发 数字资产管理

Teradata退出中国,您可以相信中国数据库!

墨天轮

数据库 数据仓库 GaussDB gbase8a teradata

聚焦中国大数据流程挖掘,这场发布会值得关注!

ToB行业头条

建设 TiDB 自动化平台:转转 DBA 团队实践

PingCAP

数据库 自动化 TiDB

React源码分析4-深度理解diff算法

goClient1992

React

React源码分析3-render阶段(穿插scheduler和reconciler)

goClient1992

React

Atlassian Server用户新选择 | Data Center产品是否适合您的企业?

龙智—DevSecOps解决方案

Server Atlassian Atlassian迁移 Data Center

天翼云AI团队夺得ZeroCLUE榜单桂冠

Geek_2d6073

前端手写面试题总结

helloworld1024fd

JavaScript

React源码解读之任务调度

flyzz177

React

快速实现一个企业级域名SSL证书有效期监控巡检系统

观测云

前端 后端 可观测性 观测云 可观测性用观测云

NFTScan 团队正式发布 NFT Portfolio 产品

NFT Research

NFT

JavaScript刷LeetCode拿offer-栈相关题目

js2030code

JavaScript LeetCode

数仓在线运维:如何进行在线增删CN

华为云开发者联盟

数据库 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

袋鼠云高教行业数字化转型方案,推进数字化技术和学校教育教学深度融合 | 行业方案

袋鼠云数栈

大数据‘’

一篇文章让你了解什么是智能合约_文化 & 方法_antonylewis2015_InfoQ精选文章