QCon北京|3天沉浸式学习,跳出信息茧房。 了解详情
写点什么

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

  • 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:4111644

评论 1 条评论

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

Wallys/Introduction of DR9074 series network card/qcn9074/qcn9072/qcn9024/industrial M.2 card

wallysSK

QCN9074 QCN9024 QCN9072

聚焦年轻消费人群 百草味入围最受“Z世代”喜爱品牌TOP10

E科讯

首批!腾讯云通过金融开源技术服务能力评估

腾源会

开源

Kotlin变量的空安全(Null Safety)

子不语Any

android kotlin 11月月更

JavaScript刷LeetCode拿offer-二叉树层序遍历篇

Geek_07a724

JavaScript LeetCode

JavaScript刷LeetCode拿offer-树的遍历

js2030code

JavaScript LeetCode

以用户为导向,vivo打造安全新范式

Geek_2d6073

挖到宝了!2022阿里大佬手写“精品”Sping Boot学习笔记

小小怪下士

Java 程序员 阿里 springboot

MASA MAUI Plugin (六)集成个推,实现本地消息推送[Android] 篇

MASA技术团队

blazor MASA MAUI Xamarin MASA Blazor

直播CDN调度技术关键挑战与架构设计

京东科技开发者

架构 系统架构 直播 CDN加速 CDN技术

2 分钟,教你用 Serverless 每天给女朋友自动发土味情话

阿里巴巴云原生

阿里云 Serverless 云原生

大数据 Hadoop 的五大优势

千锋IT教育

鼎茂科技获得阿里云首批产品生态集成认证,携手阿里云共建新合作

阿里巴巴云原生

阿里云 云原生 加速器 企业招募

java Apache poi 对word doc文件进行读写操作

@下一站

编程 原创 word Java core 11月月更

用javascript分类刷leetcode3.动态规划(图文视频讲解)

js2030code

JavaScript LeetCode

vue和react的区别有哪些,哪个好

千锋IT教育

线性稳压电源和开关电源,到底有什么区别?

元器件秋姐

电源电路 元器件采购 元器件电商 元器件知识 华秋商城

Spring Boot框架下实现Excel服务端导入导出

葡萄城技术团队

前端 Excel 控件

【Go电商实战05】结合项目解答使用Go中间件遇到的问题:中间件的概念和应用

王中阳Go

golang 学习方法 中间件 11月月更 电商实战

【Redis】Redis AOF持久化

石臻臻的杂货铺

redis 11月月更

一路同行:开发者与华为云的2022

脑极体

10 分钟部署一个 API 工具

Scar 

开源 Serverless 接口测试 Vercel

前端leetcde算法面试套路之二叉树

js2030code

JavaScript LeetCode

10月月更获奖名单出炉啦!快来看看你上榜没有!

InfoQ写作社区官方

热门活动

云原生网关的可观测性体系实践

阿里巴巴云原生

阿里云 云原生 云原生微服务

还在为数据库事务一致性检测而苦恼?让Elle帮帮你,以TDSQL为例我们测测 | DB·洞见#7

腾讯云数据库

数据库 腾讯云 数据一致性 tdsql 腾讯云数据库

Redis6.0新特性、剖析线程模型(单线程和多线程)

C++后台开发

redis 多线程 后端开发 单线程 C++开发

java企业级开发中常见的注入方式

千锋IT教育

扒去Spring事件监听机制的外衣,竟然是观察者模式

程序知音

Java spring ssm Java后端 后端技术

【倒计时4天】杭州专场-单元测试产品体验样板间,等你加入!

TRaaS

8分钟带你学会SpringBoot整合Redis来实现缓存技术

好程序员IT教育

redis Spring Boot

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