智能合约

article/2025/9/13 5:30:56

 

智能合约(英语:Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易。这些交易可追踪且不可逆转。[1]智能合约概念于1994年由Nick Szabo首次提出。智能合同的目的是提供优于传统合同方法的安全,并减少与合同相关的其他交易成本。  ——智能合约维基百科定义

智能合约是 1990s 年代由尼克萨博提出的理念,几乎与互联网同龄。由于缺少可信的执行环境,智能合约并没有被应用到实际产业中,自比特币诞生后,人们认识到比特币的底层技术区块链天生可以为智能合约提供可信的执行环境,以太坊首先看到了区块链和智能合约的契合,发布了白皮书《以太坊:下一代智能合约和去中心化应用平台》,并一直致力于将以太坊打造成最佳智能合约平台,所以比特币引领区块链,以太坊复活智能合约。

怎样向尚未接触过比特币理念的人介绍以太坊及智能合约在金融合约方面的应用?下面是一种尝试。首先介绍区块链,解释它为什么值得人们的信任,其次介绍智能合约,然后介绍以太坊系统,最后介绍智能合约与金融合约的结合。

比特币的共识机制

比特币的核心技术区块链可以理解成可复制、共享的账本。

比特币的最核心创新:它教会世界如何在不需要信任第三方的情况下远距离转移价值。

人们当然可以面对面地转移实体纸币,但是,在比特币出现以前,我们做不到:在不需要信任中心化第三方机构(邮局、银行等)的情况,远距离向某人转移价值。

就好像银行和支付系统的传统转账模式的基础设施被重构为点对点支付网络。这种转变如下图所示:

1

比特币打开了点对点的电子价值转移模式的大门,完全不同于现在的银行系统、中央银行和支付系统。 但是,上面的图并没有解释比特币是怎样实现点对点价值转移的。

答案是:比特币系统建立在“可复制、共享的账本”之上。比特币网络中的每个参与者(完全节点)拥有一个完整的交易账本的副本,这一系统的神奇之处在于:它是如何做到使每个人的副本与其他人的副本保持一致的。

所以,正确的示意图应该是下图,每个参与者都能够从相同的可复制、共享的账本中获取信息。

2

比特币和其它去中心化共识系统的窍门在于:它们怎样保证每个有一个账本的副本,并使每个人确信自己的账本与别人的账本是同步的。

如果每个人拥有的账本的副本是相同的,那么人们就不再需要一个中心化的机构记录谁拥有什么。当你的账本更新,记录一笔新的资产所有权变动时,其他人的账本也会发生相同的变动。

智能合约

智能合约程序不只是一个可以自动执行的计算机程序:它自己就是一个系统参与者。它对接收到的信息进行回应,它可以接收和储存价值,也可以向外发送信息和价值。

这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。

下面这个示意图就是一个智能合约模型:一段代码(智能合约),被部署在分享的、复制的账本上,它可以维持自己的状态,控制自己的资产和对接收到的外界信息或者资产进行回应。

3

智能合约模型:它是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。

以太坊系统

以太坊项目借鉴了比特币区块链的技术,对它的应用范围进行了扩展。如果说比特币是利用区块链技术的专用计算器,那么以太坊就是利用区块链技术的通用计算机。简单地讲,以太坊 = 区块链 + 智能合约。

与比特币相比,以太坊最大的不同点是:它可以支持更加强大的脚本语言(用技术语言讲就是图灵完备的脚本语言),允许开发者在上面开发任意应用,实现任意智能合约,这也是以太坊的最强大之处。作为平台,以太坊可以类比于苹果的应用商店,任何开发者都可以在上面开发应用,并出售给用户。

以太坊智能合约的金融应用

每一类金融合约都可以程序代码的形式写成智能合约。

差价合约

金融衍生品是“智能合约”的最普遍的应用,也是最易于用代码实现的之一。实现金融合约的主要挑战是它们中的大部分需要参照一个外部的价格发布器;例如,一个需求非常大的应用是一个用来对冲以太币(或其它密码学货币)相对美元价格波动的智能合约,但该合约需要知道以太币相对美元的价格。最简单的方法是 通过由某特定机构(例如纳斯达克)维护的“数据提供“合约进行,该合约的设计使得该机构能够根据需要更新合约,并提供一个接口使得其它合约能够通过发送一 个消息给该合约以获取包含价格信息的回复。

当这些关键要素都齐备,对冲合约看起来会是下面的样子:

等待A输入1000以太币。

等待B 输入1000以太币。

通过查询数据提供合约,将1000以太币的美元价值,例如,x美元,记录至存储器。

30天后,允许A或B“重新激活“合约以发送价值x美元的以太币(重新查询数据提供合约,以获取新价格并计算)给A并将剩余的以太币发送给B。

代币系统(token system)

区块链上代币系统有很多应用,从代表如美元或黄金等资产的子货币到公司股票,单独的代币代表智能资产,安全的不可伪造的优惠券,甚至与传统价值完全没有联系的用来进行积分奖励的代币系统。在以太坊中实施代币系统容易得让人吃惊。关键的一点是理解,所有的货币或者代币系统,从根本上来说是一个带有如下操作的数据库:从A中减去X单位并把X单位加到B上,前提条件是(1)A在交易之前有至少X单位以及(2)交易被A批准。实施一个代币系统就是把这样一个逻辑实施到一个合约中去。

储蓄钱包

假设Alice想确保她的资金安全,但她担心丢失或者被黑客盗走私钥。她把以太币放到和Bob签订的一个合约里,如下所示,这合同是一个银行:

Alice单独每天最多可提取1%的资金。

Bob单独每天最多可提取1%的资金,但Alice可以用她的私钥创建一个交易取消Bob的提现权限。

Alice 和 Bob 一起可以任意提取资金。

一般来讲,每天1%对Alice足够了,如果Alice想提现更多她可以联系Bob寻求帮助。如果Alice的私钥被盗,她可以立即找到Bob把她 的资金转移到一个新合同里。如果她弄丢了她的私钥,Bob可以慢慢地把钱提出。如果Bob表现出了恶意,她可以关掉他的提现权限。

作物保险

一个人可以很容易地以天气情况而不是任何价格指数作为数据输入来创建一个金融衍生品合约。如果一个爱荷华的农民购买了一个基于爱荷华的降雨情况进行反向赔付的金融衍生品,那么如果遇到干旱,该农民将自动地收到赔付资金而如果有足量的降雨他会很开心因为他的作物收成会很好。

多重签名智能合约

比特币允许基于多重签名的交易合约,例如,5把私钥里集齐3把就可以使用资金。以太坊可以做得更细化,例如,5把私钥里集齐4把可以花全部资金,如果只3把则每天最多花10%的资金,只有2把就只能每天花0.5%的资金。

 

原文地址:https://github.com/EthFans/wiki/wiki/智能合约

智能合约理念:https://github.com/EthFans/wiki/wiki/智能合约理念

以太坊白皮书:https://github.com/EthFans/wiki/wiki/以太坊白皮书

 论文:S. Nakamoto, “Bitcoin: A Peer-to-Peer Electronic Cash System,”Tech. Rep. [Online]. Available: http: //bitcoin.org/bitcoin.pdf

论文:https://ieeexplore.ieee.org/abstract/document/7467408/

论文:https://www.computer.org/csdl/proceedings/sp/2016/0824/00/0824a839-abs.html

    慢慢学习~

 

 


http://chatgpt.dhexx.cn/article/7uLtQaOj.shtml

相关文章

[EOS源码分析]6.EOS特殊智能合约eosio

这里说的eosio智能合约不是泛指eos的智能合约,它是一个特殊的具体的合约。它本事可大了,我们一起来看看它有哪些功能 负责智能合约部署 大家有注意到如下红色字体的log吗 $ cleos set contract hello.code ../eos-contract/hello -p hello.code Publish…

EOS智能合约开发(一)

一、 智能合约功能二、 通讯模式 2.1 运行机制2.2 内联通信2.3 延迟通信2.4 交易和动作2.5 交易确认2.6 动作处理程序和动作的apply上下文2.7 交易限制 三、文件结构 3.1 创建框架3.2 apply处理程序3.3 EOSIO_ABI 宏 四、多索引数据库API 4.1 EOSIO多索引API4.2 EOSIO多索引迭代…

EOS系列 - WASM智能合约 - 特性

构造函数 addressbook(name receiver, name code, datastream<const char*> ds):contract(receiver, code, ds) {}#单例表&#xff08;code和scope都用receiver的表&#xff09;也可在初始化列表中实例化 singleton_example( name receiver, name code, datastream<c…

EOS智能合约开发(十五)EOS 状态机架构解析

好久没有写文章了&#xff0c;最近公司事情比较忙。非常感谢上次杭州团队一位负责EOS状态机的同事精彩分享。今天查阅很多资料后&#xff0c;整理这篇文章&#xff0c;希望对大家有所帮助。 EOS状态机是什么&#xff1f; 简单讲就是数据库&#xff0c;是EOS记录智能合约执行结…

接口测试时,输入所有参数的参数值后,接口返回“参数错误:所有参数都不能为空”

问题原因&#xff1a; 参数名称输入有误&#xff0c;前台&#xff08;pwd&#xff09;和后台&#xff08;password&#xff09;的参数名称不一致 &#xff0c;保持一致后即可

matlab 错误使用 connector.internal.autostart.run输入参数的数目不足。

matlab打开后提示&#xff1a; 错误使用 connector.internal.autostart.run输入参数的数目不足 原因&#xff1a;自己写的一个函数和matlab自带的函数重名了 参考&#xff1a;警告: 在 matlabrc 中初始化 Java 首选项失败 – MATLAB中文论坛MATLAB中文论坛MATLAB 基础讨论板块…

Matlab 自带遗传算法函数 ga() 运行报错:“ fitnessfcn() 输入参数的数目不足。”

原始程序 %主程序 m [1 2]; R [1.5 1]; epsilon [2^R(1)-1 2^R(2) - 1]; A [-1 epsilon(1); 0 -1]; b [0 0]; Aeq [1 1]; Beq 1;%matlab自带函数包 [x_optimal, fval] ga(fitnessfcn, 2, A, b, Aeq, Beq, [0;0], [1;1], []); ---------------------------------…

matlab函数参数不足,调用函数显示输入参数不足

问题描述.png (29.7 KB, 下载次数: 1) 2015-1-27 09:34 上传 %Gauss-Newton算法实现如下 function[x,minf] = GN(f,x0,var,eps)formatlong; ifnargin == 3 %如果没有设置eps,则eps=1.0e-6eps = 1.0e-6; end m = 0; S =transpose(f)*f; %trnspose是转…

matlab 函数不定参数,matlab function定义一个函数,但一直出来说输入参数数目不足。我用的是2014版本,不知道数目原因啊?...

www.mh456.com防采集。 h 5;g 1; % g取源0有问题% 被积函数2113可以化5261简成f 4102(a,b,r)(r*h-r^16532*cos(a-b))/(h^2r^2g^2-2*h*r*cos(a-b))^1.5;% 求积分quadv((r)quadv((b)quadv((a)f(a,b,r), 0, 2*pi), 0, 2*pi), 0, h) 错误在于&#xff0c;调用函数f( x )缺一个…

matlab plot输入参数太多,输入参数太多问题

版本&#xff1a;R2016a 利用SCE-UA调用新安江模型进行率定时&#xff0c;显示参数太多&#xff0c;求大神指导。 clear; clc; spathcd P0(textread([spath,\matlabxingshanjiangyu.txt])); PP0(2,:);%降水量(mm) EI0(textread([spath,\matlabxingshanzhengfa.txt])); EIEI0(2,…

参数输入太多

参数输入太多 在向platEMO平台添加新的算法时&#xff0c;可能会出现参数输入太多的错误提示 可能是由于输入的参数内包含逗号&#xff0c;比如 a[1,2],b[3,4] 从而造成”输入参数太多“的错误提示。

MATLAB S-function(教程分享) 报错 flag = 3(output), at time 0.0. 输入参数的数目不足。

前言 从上周开始用S-function做仿真&#xff0c;之前已经学过的&#xff0c;我觉得很好的教程网址是 【0基础直接带你上手matlab simulink仿真&#xff08;不是标题党&#xff0c;讲解超级细致用心&#xff09;&#xff08;非线性系统自适应控制器的搭建&#xff09;】 https…

matlab报错“输入参数的数目不足”

图片源自下方链接 原文链接MATLAB中出现参数数目不足的错误提示 - 爱上对方过后就哭了忆 - 博客园 (cnblogs.com)

错误使用 max 输入参数的数目不足。

相比大多数人熟悉的在调用自己编写的函数时出现的 “输入参数的数目不足” 问题&#xff0c;该情况下&#xff08;即在同一脚本或同一函数中&#xff09;也会出现matlab内部函数调用问题&#xff08;如max、min等&#xff09;&#xff0c;在编程时应注意此点&#xff01;

Matlab运行自定义函数显示“输入参数的数目不足”

问题描述 很多初学者在刚开始学习使用Matlab自定义函数时&#xff0c;可能遇到程序上没有问题&#xff0c;但一运行就显示输入参数的数目不足这个问题。 比如自定义一个函数&#xff1a;查找最小的m&#xff0c;使得m满足12…m > k&#xff08;k为任意一个整数&#xff09;…

浏览器播放视频倍速方法

1.右击播放页面 2.选择检查 4.选择console&#xff0c;如图&#xff1a; 5.在下面输入 &#xff1a;videojs.getPlayers("video-player").html5player.tech_.setPlaybackRate(1.5)&#xff0c;括号里的数字就是要加倍的倍速。

浏览器播放RTSP

浏览器播放RTSP 由于现在浏览器不直接支持RTSP&#xff0c;然后很多监控厂商如海康大华等又不提供RTMP的情况下&#xff0c;项目需要实现HTML中播放监控视频。之前做过转流的方案&#xff0c;在服务器中把RTSP转成RTMP&#xff0c;这种方案开发量大而且转码不稳定&#xff0c;…

0516---win10 chrome 浏览器播放视频没有声音的解决办法

win10 chrome 浏览器播放视频没有声音的解决办法 近期我的Win10 主机在使用 Chrome 浏览器播放搜狐视频的时候没有声音&#xff0c;而用 Edge浏览器播放同一视频就一切正常&#xff0c;初步判断是浏览器的设置引起的。通过以下操作步骤得以解决。 启动 chrome 浏览器&#xf…

html5播放mp4不见画面,浏览器播放mp4格式视频时只有声音看不到画面的原因及解决方法(精)...

做HTML5网页&#xff0c;要播放视频&#xff0c;视频格式为mp4&#xff0c;结果浏览器只能听到声音&#xff0c;看不到画面。 反复测试&#xff0c;多个浏览器均出现此问题。刚开始以为视频的格式不对&#xff0c;我是从MOV转的MP4格式&#xff0c;反复确认嵌入的视频确实是mp4…