智能合约 smart contract

现在我们的生活几乎离不开合同,往大说,工作是与公司签订的劳动合同,买房是与房产公司签订购房合同,买保险是与保险公司签订保险合同;往小了说,网购、定外卖、打车、买彩票都是与相关的服务提供公司签订了相应的合同。可以说,有人的地方就用合约。

甚至我们与人打赌,也是一种合约,但如果一旦一方抵赖,那履行合约就会变得困难。如果有一种合约,事先确定了规则,一旦触发相关条款,合约将自动执行,无需人为干涉,也不用担心有人抵赖。又比如每个人可能会在未来的某一天要去做一件事情,进行提醒或者到时间自动执行,并且反馈一个结果。那么现在是否存在这样的工具能够做到呢?还真有,这便是智能合约。

01 什么是智能合约

智能合约(Smart Contract)是上世纪90年代由密码学家尼克·萨博提出的理念,由于当时缺乏可信的执行环境,智能合约没有被应用和发展,直到以太坊的出现,才让智能合约得以“复活”。**

那智能合约到底是什么呢?简单来说智能合约就是用计算机语言取代了法律语言记录条款并由程序自动执行的合约。换句话说,智能合约就是传统合约的数字化版本,跑在区块链网络上,由程序自动执行。

自动售货机、ATM取款机,在某种程度上都可以被理解为执行智能合约的机器,但这都不是真正意义上的智能合约。

与传统的合约相比,智能合约有三大特点:

1、合约内容公开透明 **智能合约部署在区块链上,其合约内容自然是公开透明的。

2、合约内容不可篡改 **同样,因为部署在区块链上原因,智能合约的内容是无法被修改的。

3、永久运行 **运行在区块链上的智能合约,同样被区块链上网络节点共同维护,只要区块链在,智能合约就能永久的运行下去。有种“链在合约就在”的兄弟情义之感。

有区块链三大特点加持的智能合约,与传统的合约相比主要有如下优势:

1、去信任。

由于智能合约是基于区块链的,合约内容公开透明、且不可篡改。代码即法律(Code is law),交易者基于对代码的信任,可以在不信任环境下安心、安全地进行交易。

2、经济、高效

相比传统合约经常会因为对合约条款理解的分歧,造成纠纷;智能合约通过计算语言很好避免了分歧,几乎不会造成纠纷,达成共识的成本很低。在智能合约上,仲裁结果出来,立即执行生效。因此相比传统合约,智能合约有经济、高效的优势。

3、无需第三方仲裁

假设熊大和熊二打赌,赌明天是否会下雨,谁输了的一方就需要给对方100元。如果输的人抵赖,赢了的人就得不到奖励。为此,去找第三方仲裁机构,低效且费时费力。但如果赌约写在智能合约上,在达成赌约之时,各自把100元打入智能合约地址,智能合约根据最终的结果,自动执行,赢的一方拿走所有的奖励。可见,智能合约就无需第三方仲裁。

智能合约也有它的缺点。

如果智能合约存在漏洞,黑客可以利用智能合约的漏洞,为自己牟利。

举个简单的例子,一台自动售货机,本来售价是5块的饮料,由于疏忽,写成了5毛钱,管理员发现之后,可以立刻改正。但如果这台售货机调用的是区块链上的智能合约,那么这个错误将无法修改,直到里面饮料卖完。

另一方面,智能合约本身无法获取(感知)外部的信息,涉及到需要外部信息才能裁决合约,需要对其写入相关信息,它才能作出裁决。比如熊大和熊二打赌明天是否下雨的例子,智能合约本身是不知道第二天是否下雨了没,需要通过其他信息源为它提供信息,比如中央气象台数据,有了这个信息之后,智能合约才能做出裁决。

从上面两点看,智能合约既不完美也不智能。(还需要完善 还有完善空间)

总结:

智能合约是用计算机语言取代了法律语言记录条款、由程序自动执行的合约。部署在区块上的它,也具备了区块链的数据公开透明、不可篡改、永久运行的特点。

与传统的合约相比,智能合约有去信任、安全、高效、无需第三方仲裁的优点。但智能合约并不完美,而且也不智能或者说它的智能程度很低。

以下三个视频,通俗易懂讲解了合约是什么。

什么是智能合约?哔哩哔哩bilibili

简单解释智能合约是什么哔哩哔哩bilibili

【中文高清科普】三分钟看懂以太坊和智能合约哔哩哔哩bilibili

了解到这,下边这个ppt就能看懂了,至于context应该是背景,老师没提。可以不管。

比特币交易

什么是 UTXO?

UTXO 代表 Unspent Transaction Output, 表示未花费的输出。

以现实的钱包举例,一个钱包中有一个10元、1个5元,1个1元,一共16元。比特币一个账户的余额,也是根据这个账户UTXO计算的。

当花12元买东西时,可以把10元和5元拿出去,然后得到找零的3元, 那这个时候之前的10元和5元因为已经花出去了就不再是UTXO了,新找零的3元成为新的UTXO,再加上之前未动的1元UTXO,目前的余额是4元。这次新的交易记录在了新的区块上,但没有改变历史区块的数据。

中本聪提出了UTXO,一种基于交易的记账方式。刚才讲的,支付宝、微信那种记账方式,是基于账户的记账方式。仍然举这个例子,通过使用UTXO记账方式。比如,你有10元钱,花了5块钱,出来一个“之前剩余10元,现在剩余5元”的UTXO账单;然后收到3元钱,又出来一个“上次剩余5元,现在剩余8元”;... ... 以此类推。那么这种模式下,即使你之前的账单丢失了,也能知道当前的余额。并且与基于账户的记账方式相比,在计算复杂度、存储空间等方面,都很占优势。

以下是一个例子

从上面的图中可以看出,比特币存储的实际是一笔又一笔的交易,最后永远只有未花费过的交易输出,也就是UTXO。

相信大家应该能明白UTXO的概念和工作方式了吧,UTXO的方案简单到极致,只确认交易本身。总结一下UTXO的优点:

(1) UTXO不能分割,只能被消耗,独立的数据结构大大减少了计算量。

(2) UTXO配合地址使用,具备天然的匿名性,保证了账户的安全。

(3) 因为地址的存在,UTXO的销毁和产生,都可追溯,很难伪造。

(4)长期来看,UTXO的数据占用更小,而余额系统会越来越臃肿。

所以大家看明白了吧,比特币不是具体的钱币,只是UTXO账单上的一个数。

比特币交易中的输入与输出

比特币交易是将比特币从一个地址转移到另外一个地址,不同的比特币地址代表不同的比特币所有者,所以比特币交易就是比特币的所有者授权将比特币转移给新的所有者。当然新的比特币所有者也可以授权将比特币转移到另外的所有者,以此类推,形成了比特币所有者的链。

比特币交易就像是复式记账账簿中的一行,每笔交易包含一个或多个“输入”,称为交易输入,就像是复式账簿中的借方 从哪来的(debits);交易的另一方包含一个或多个“输出”,称为交易输出,就像是复式账簿中的贷方 (credits)。

交易单的数据如下:

In:

Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd0

4470b9a6

Index: 0

scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446

618c4571d1090db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fd

d7d5d6cc8d25c6b241501

Out:

Value: 5000000000

scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35

549d OP_EQUALVERIFY OP_CHECKSIG

交易单记录的是本次交易的收入来源(in)和支出(out)。当你支出(给)一笔钱的时候,首先在交易单中就要描述清楚你要支出(out)的钱的收入来源 (in),然后在支出(out)项中,指明要支出的金额,以及通过脚本的形式写明接收者的公钥,然后用自己的私钥签名(scriptSig)认可该笔交 易,最后将交易单广播到网络。

收入来源(in):

Previous tx: 为收入来源交易单的散列值,也就是待支付的钱是谁给你的,经常会有多个收入来源被列在交易单中

index: 指明是收入来源交易单中具体哪一个out,也就是Previous tx交易单中的out索引值(因为out也可以有多个)。

scriptSig: 拥有者对该交易的ECDSA签名认可。

接收对象(out):

Value: 发送的币值,以Satoshi 为单位,1BTC = 100,000,000 Satoshi

scriptPubKey: 接收方的公钥脚本。

in与out的关系:

每一笔交易,out的总额应该等于in的总额。但是,在这个交易单里,只会有out的Value,没有in的Value,而是通过in的Pervious与index,追溯到上一个交易单的某一个out,获得Value。

A给B转账的时候,会先用A的私钥进行签名,再转账给B的公钥。

这个过程,说明了2件事:用A的私钥签名,证明了这笔钱是A的;转账给B的公钥,证明了这笔钱是转给B的,不是转给别人的。

接下来,B要花这笔钱,比如转给C;同样的,要用B的私钥签名,转账给C的公钥。

scriptPubKey就是我们所说的,对方的公钥

scriptSig 主要是提供用于交易输出中 ScriptPubKey 所需的验证数据

Blockchains Distributed L week3 爱宝授课记录(1)相关推荐

  1. Blockchains Distributed L week3 爱宝授课记录(2)

    比特币与以太坊 相同点 比特币和以太坊都是成功的区块链技术应用,是最典型的代表.具体点是:有了比特币才有区块链技术,有了以太坊人们才认识到区块链还可以独立出来.不仅仅是比特币才能有区块链技术,还有以太 ...

  2. Machine Learning Practical 爱宝课程记录week1

    训练集.验证集.测试集 机器学习简单流程: 使用大量和任务相关的数据集来训练模型: 通过模型在数据集上的误差不断迭代训练模型,得到对数据集拟合合理的模型: 将训练好调整好的模型应用到真实的场景中: 我 ...

  3. C语言程序设计授课记录202003

    文章目录 课程信息 教学纪律 成绩评定 授课记录 2020/02/26 第1章 C语言入门 2020/03/04 第2章 变量的定义 2020/03/11 第2章 基本数据类型 2020/03/18 ...

  4. 爱宝 A-80P 打印机驱动

    爱宝 A-80P 打印机驱动是官方提供的一款打印机驱动,本站收集提供高速下载,用于解决打印机与电脑连接不了,无法正常使用的问题,本动适用于:Windows XP / Windows 7 / Windo ...

  5. 京东宙斯杯应用大赛 推荐宝 刷票记录 有图有真相

    推荐宝(id=1771) 推荐宝刷票记录:http://yuncode.net/appjcloudvote/rankRecord/1771.html 前几天看到csdn到处都是他的刷票链接,现在已经不 ...

  6. **工控机 爱宝收银台 专用Win7系统32位纯尽版**

    爱宝收银台是由广州市贺氏办公设备有限公司研制,搭载着专用工控windows7系统,此系统对硬件配置不高的机器运行非常流畅,展开到C盘不到10G. 原机提取又重新优化制作,可更好的在目前工控机上运行,杀 ...

  7. 爬取淘宝交易记录的爬虫

    前几天刚来头儿让爬个淘宝交易记录先看看,就用python写了个,我是分成两步爬的,首先是爬取商品链接,代码如下: #-*- coding:utf-8 -*-import BeautifulSoup i ...

  8. 淘宝购买记录截图生成,制作淘宝我的已付款网页

    淘宝订单生成器是一个强大的工具,主要用于生成淘宝我的订单页面的假截图.下面介绍一下淘宝订单生成器的主要功能之一:淘宝购买记录截图制作. 淘宝购买记录截图在线生成器: https://taobaoord ...

  9. Android 淘宝搜索记录分析及千牛数据库名称关联

    一 taobao搜索关键字分析 1.导出淘宝数据文件夹. 2.搜索search 找到search文件夹.查看里面可疑文件如history_8d4255cc9c9199c6ec3be940936986b ...

最新文章

  1. docker 开机自启动
  2. unordered_map的使用特性
  3. java锁一次交互二次握手_Java后台开发面试实战(二):TCP三次握手四次挥手
  4. 工程制图 (点,线,面)
  5. 2009年下半年信息系统项目管理师上午试题分析与解答文档
  6. View的缩放操作--CGAffineTransformMakeScale:
  7. linux eclipse 关联源码,获取Hadoop的源码和通过Eclipse关联Hadoop的源码
  8. Long Path CodeForces - 407B(动态规划+思维+公式推导)
  9. java word转图片tiff_Word 2010中将文档保存为TIFF图片的方法
  10. AndroidStudio_安卓原生开发_自定义单选列表Spinner绑定自定义数据类型---Android原生开发工作笔记143
  11. Object工具类 ObjectUtils.java
  12. 数学建模题目及答案matlab,MATLAB数学建模习题.doc
  13. 使用Navicat导入备份的数据库文件操作流程
  14. java中继承applet类_Java - 33 Java Applet基础
  15. 华为机试HJ102:字符统计
  16. 安装部署 Kubernetes 仪表板(Dashboard)
  17. python制作会动的表情包_Python自动生产表情包
  18. C语言程序——首字母变大写
  19. 中触媒科创板上市:市值74亿 为李进与刘颐静夫妻店
  20. 数据库双活和ALWAYSON相比的四大优势

热门文章

  1. python 中私有属性的设置方法案例:设置私有属性、利用函数get和set方法调用修改私有属性,并 用__str__的魔术方法打印,的具体案例
  2. 2015三十本好书推荐及理由
  3. oCPC和oCPM的本质区别是什么?
  4. 如何设置 RecyclerView Item内子控件点击事件
  5. 技术债务的高息信用卡:深入了解那些知名的端到端机器学习平台
  6. 特征函数(characteristic function)
  7. 第七章 如何增加收入
  8. 无干扰网络收音机:Radium for Mac
  9. Centos使用chrony做时间同步
  10. 关闭compactos_开启Compact压缩Win10系统文件,为Win10系统盘瘦身