报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

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

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

评论 1 条评论

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

阿里P7了!全靠死磕这份阿里全彩版"并发编程笔记",大厂必备!

Java你猿哥

Java 并发编程 架构师 java面试 Java工程师

大型SRE组织设计与建设落地,且看腾讯蓝鲸如何做?

嘉为蓝鲸

腾讯 运维自动化 蓝鲸

中船互联与嘉为科技共同打造“IT运维管理”融合解决方案

嘉为蓝鲸

自动化运维 IT 运维 中船集团

揭秘云原生时代企业可观测体系落地实践

嘉为蓝鲸

云原生应用 云原生(Cloud Native) 可观测宇宙

多云转晴:Databend 的天空计算之路

Databend

3月寒窗!啃透美团保姆级分布式进阶技术手册,4月终入美团定L8

Java你猿哥

Java 分布式 SSM框架 分布式数据 分布式消息

基于 Flink CDC 的现代数据栈实践

Apache Flink

大数据 flink 实时计算

HummerRisk V1.0 :架构升级说明

HummerCloud

开源 云安全 云原生安全

python统计程序耗时 | python小知识

AIWeker

Python python小知识 三周年连更

代码质量难评估?一文带你用 SonarQube 分析代码质量!

Java你猿哥

架构师 代码 SSM框架 sonar

治理告警风暴,告警降噪的一些典型手段

巴辉特

告警风暴 告警降噪

Redis删除键命令: 新手用del,老手用unlink,有何区别?

Java你猿哥

Java redis SSM框架 Java工程师 delete

ChatGPT,音乐,与数据库

沃趣科技

数据库 云原生 音乐 ChatGPT

基于 Flink CDC 的现代数据栈实践

Apache Flink

大数据 flink 实时计算

Flink CDC 在易车的应用实践

Apache Flink

大数据 flink 实时计算

多家大厂CTO鼎力推荐的微服务架构设计模式真的硬核

小小怪下士

Java 程序员 微服务 后端

Alibaba最新神作!耗时182天肝出来1015页分布式全栈手册太香了

Java你猿哥

Java 分布式 SSM框架 分布式核心原理解析 分布式开发

【FAQ】关于华为推送服务因营销消息频次管控导致服务通讯类消息下发失败的解决方案

HarmonyOS SDK

HMS Core

从「搭子」文化,看融云如何助力垂类社交应用增长

融云 RongCloud

融云 Z世代 通讯 交友 搭子

字节跳动正式开源分布式训练调度框架 Primus

字节跳动开源

开源 算法 流批一体

全网已经疯传90多万次的java修炼指南!已帮我拿下11个大厂offer

做梦都在改BUG

Spring Boot 实现接口幂等性的 4 种方案

做梦都在改BUG

Java Spring Boot

改写同事代码——血压操作集锦第一弹

Java你猿哥

Java IDEA java编程 SSM框架 表单设计

90%的Java开发人员都会犯的5个错误

做梦都在改BUG

Unity 之 月签到累计签到代码实现(ScriptableObject应用 | DoTween入场动画)

陈言必行

Unity 三周年连更

Spring @Import注解的使用和源码分析

Java你猿哥

Java spring import SSM框架

不懂就问,Milvus 新上线的资源组功能到底怎么样?

Zilliz

非结构化数据 Milvus Zilliz

Flomesh 软负载 FLB GA 版本发布

Flomesh

负载均衡 云原生 Pipy

把脉分布式事务的模型、协议和方案

小小怪下士

Java 分布式 分布式事务 后端

Oracle 23c 新特性实操体验优质文章汇总

墨天轮

数据库 oracle sql 新版本/特性解读

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