智能合约简介

2023-11-09

链客,专为开发者而生,有问必答!

此文章来自区块链技术社区,未经允许拒绝转载。
在这里插入图片描述
当人们在讨论智能合约的时候他们到底在说什么?

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

在分布式存储平台(例如区块链)上存储并复制的,
在计算机网络(通常是运行区块链的同一个网络)上执行/运行的,
并且可能引发账本更新(用加密货币付款等等)的,
预写入的逻辑(计算机代码)。
……换句话说,智能合约是执行“如果发生这种情况就执行那种结果”的小程序,由大量计算机运行并验证以确保可信。

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

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

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

具有嵌入式指令的银行账户
用计算机代码取代法律术语
一个真实的智能合约示例

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

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

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

  1. 用计算机代码代替法律术语

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

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

3.一个真实的智能合约示例
以下是在以太坊区块链上应用的简单智能合约代码:
在这里插入图片描述

以太坊智能合约示例。来源:https://www.ethereum.org/token

Ethereum.org解释了它的作用:

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

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

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

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

代码

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

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

透明性

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

灵活性

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

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

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

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

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

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

对原始贸易条款的相互误解
由于原始交易条款的多个副本导致的混乱(由于双方的内部律师都试图保护他们的利益,文件中通常会存在反复出现的措辞)
或者对外部依赖关系中实际发生的事情产生分歧
利用智能合约,只会存在一套用计算机代码编写的贸易条款,这比法律术语轻量得多,并且事先达成了一致。外部依赖关系(石油价格、苹果公司股价等)可以由双方都同意的来源提供。合约将存在于区块链中,并在事件发生或赌局到期时运行。

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

目前的智能合约产品
现有的区块链可不同程度地运行智能合约。具体系列如下。
在这里插入图片描述

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

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

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

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

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

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

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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

智能合约简介 的相关文章

  • cmake message显示

    cmake message 在output中显示 PS C mywork mycpp helloworld build gt cmake Configuring done Generating done Build files have b
  • 雅可比算法求矩阵特征值C语言源代码,雅可比(Jacobi)计算特征值和特征向量

    雅可比迭代法法 在图形图像中不少地方用到求矩阵的特征值和特征向量 好比主成分分析 OBB包围盒等 编程时通常都是用数值分析的方法来计算 这里介绍一下雅可比迭代法求解特征值和特征向量 雅可比迭代法的原理 网上资料不少 详细可见参考资料1 这里
  • 【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​

    简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下
  • Linux中桥接模式配置IP

    前言 本文主要介绍如何使用桥接模式配置IP 在使用虚拟机进行通信时 经常需要面临三种模式选择 不同模式之间配置不同 系统环境 CentOS 7 两种模式区别 NAT 虚拟机从属于主机 访问外部网络必须通过主机访问 虚拟机的IP只有主机才能识
  • 用DETR进行目标检测的predicat文件

    文章目录 前言 二 使用步骤 1 更改官方detr中308行的类别数 2 根目录加入检测文件 总结 前言 由于最近研究DETR目标检测 但是发现官方给的代码缺少了predict文件 于是自己写了一个 但是写代码的过程中也想到了一些问题 比如

随机推荐

  • QT QPushButton点击事件的实现

    最近需要对按钮实现效果 当鼠标按下时按钮有效果1 然后鼠标松开时按钮有效果2 分析 这里没有现成的信号可以使用 需要重载mousePressEvent 及 mouseReleaseEvent 事件函数 在mouseReleaseEvent
  • 技术笔记

    https docs qq com doc DUVBFRUNvUW1SUXB5
  • js模仿f11全屏_js触发f11全屏

    document on keydown function e var e event window event arguments callee caller arguments 0 if e e keyCode 122 捕捉F11键盘动作
  • 【CSS】css样式控制div水平垂直居中的六种方法

    1 绝对定位方法 不确定当前div的宽度和高度 采用 transform translate 50 50 当前div的父级添加相对定位 position relative 如图所示 代码如下 div background red posit
  • grep、sed、awk、perl等对正则表达式的支持的差别

    以perl的正则为基准 不同的用法以粉红色标出 因为spacemacs支持vim正则表达式操作 而且能够实时显示匹配内容和替换结果 可以作为perl脚本的正则表达式debug手段 转载来自 grep sed awk perl等对正则表达式的
  • Qt:信号和槽总结(1,C++11下的信号和槽 2,第五个参数 3,阻塞 )

    Qt 信号和槽总结 1 C 11下的信号和槽 2 第五个参数 3 阻塞 信号和槽是Qt特有的一种通讯方法 具有以下特点 信号与槽的连接比较灵活 可以一对一 一对多或者是多对一 信号与槽的绑定与解除也十分的灵活 使用connect以及disc
  • CONTAINING_RECORD宏原理与使用详解

    先不急着说CONTAINING RECORD宏 我们从最浅显的代码开始讲解 一 0指针的妙用 0指针 即nullptr NULL 空指针 是不是很常见 一遇到它往往就是segment fault 代码 如下 struct Test int
  • Vue实现Alert插件

    实现alert插件 在Vue中我们可以使用 Vue component tagName options 进行全局注册 也可以是在组件内部使用 components 选项进行局部组件的注册 全局组件是挂载在 Vue options compo
  • python的with关键字

    前言 with表达式其实是try finally的简写形式 但是又不是全相同 格式 格式 with context as var pass 其中的context是一个表达式 返回的是一个对象 var用来保存context表达式返回的对象 可
  • git pull: Please commit your changes or stash them before you merge

    参考 Git冲突 commit your changes or stash them before you can merge 总结 如果git pull 报错 Please commit your changes or stash the
  • Hyperledger Fabric能否大规模运行?

    我很高兴回答这个问题 简短的回答是 是的 确实如此 我的疑问 我对大规模Hyperledger Fabric Fabric 的性能提出了很多疑问 很多时候 人们已经完成了一些 或阅读 听说过 性能测试 比如在他们的笔记本电脑或早期版本的Fa
  • Android 使用 Jenkins 实现自动化打包【流程】&【踩坑】

    引言 每个Android开发应该都有经历过正在码代码的时候突然被打断要求打个啥啥环境啥啥配置的安装包 然后就得暂存代码 切换分支 更改配置 等待build balabala 往大了说就是浪费时间消耗员工价值对公司的不负责 胡扯 往小了说就是
  • 在复苏与重塑之路上,同程旅行为旅游业价值回归交出答卷

    若论对疫情感受最深刻的行业 旅游业必然榜上有名 也许这个产业链上的每个玩家在这两年都思考过这样两个问题 客观上 旅游业恢复的基础条件有哪些 主观上 又该用什么措施 什么方法应对现在的局面 尽管疫情影响仍未消散 但11月以来 从防疫新提法到文
  • PostgreSQL pg中的截取补齐lpad函数怎么用?

    PostgreSQL pg中的截取补齐lpad函数怎么用 1 左边填充 右边截取 PostgreSQL中的lpad 函数有两个功能 如果长度不够指定的长度 就在左边填充字符串 如果长度超出了指定的长度 就把右边截掉 The PostgreS
  • 使用matplotlib绘制饼图

    根据消费类别 如外卖 零食 衣服 娱乐等 使用matplotlib绘制本月的消费支出饼图 以代码插入方式提交源代码 并以图像文件提交运行截图 python代码 import matplotlib pyplot as plt from pyl
  • 60分钟学pytorch

    本文会持续更新 直至完成pytorch中的60分入门文档部分 目前为tensor的基础操作部分 本文代码github https github com amazingzby pytorch tutorial pytorch官方文档给初学者提
  • ui(new Ui::MainWindow)

    用最新的QtCreator选择GUI的应用会产生含有如下文件的工程 下面就简单分析下各部分的功能 pro文件是供qmake使用的文件 不是本文的重点 不过其实也很简单的 在此不多赘述 所以呢 还是从main开始 include
  • Java基础-学习笔记(一)

    1 IT业务的发展变化 1 大型机 一代 IBM 2 PC Mac 二代 微软 苹果 3 互联网 三代 Google Baidu 4 移动互联网 谷歌 微软 苹果 所谓 移动互联网 移动通信 互联网 马云所属 IT到DT的变化 注 推荐本书
  • MATLAB的曲线拟合

    原文地址 MATLAB的曲线拟合 作者 睿吉jerry MATLAB软件提供了基本的曲线拟合函数的命令 曲线拟合就是计算出两组数据之间的一种函数关系 由此可描绘其变化曲线及估计非采集数据对应的变量信息 1 线性拟合函数 regress 调用
  • 智能合约简介

    链客 专为开发者而生 有问必答 此文章来自区块链技术社区 未经允许拒绝转载 当人们在讨论智能合约的时候他们到底在说什么 在区块链和加密货币的语境中 智能合约的定义是 在分布式存储平台 例如区块链 上存储并复制的 在计算机网络 通常是运行区块