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

智能合约 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 所需的验证数据

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值