学习
实践
活动
专区
工具
TVP
写文章

交易进阶(二)

稿件由路可比特整理自《区块链生存训练》

「导读」

在投资中我们是否有过疑惑

交易中为什么会出现找零费用

交易费该如何计算

接下来将着重介绍如何这个内容

未花费交易输出(UTXO)

首先这里需要介绍一个重要概念,UTXO,Unspent Transaction Output,即未花费交易输出。在贴出之前介绍交易时用过一张图,这里只保留了区块1和区块2的内容,一笔交易分为输入vin和输出vout,我们可以从一个coinbase的12.5 BTC的新块奖励出发,看一下它的资金流向,就可以明白UTXO的含义。

图10-5交易中的vin和vout

(1)矿工A挖矿产生了一个新区块,其中的第一笔交易是coinbase,假设为12.5BTC

(2)矿工A现在想买一台笔记本电脑,需要支付1 BTC给商家B,他的币的来源只有这12.5BTC,比特币系统中的UTXO有一项重要规则,一笔UTXO必须一次性花完,这里的vin是12.5BTC,如果vout只有一笔1BTC记录,那么剩下的11.5就会被当作交易费由其它矿工C得到,那这个矿工C可真发了一笔横财。

这肯定不是A的本意,A只想支付1 BTC,另外的11.5 BTC还要留给自己,所以在生成交易记录时,钱包软件会把vin设定为12.5BTC,vout 0设定为1BTC,锁定给商家B,另外的vout 1的金额是11.5BTC,就是找零地址,锁定给自己。当然这种情况下是0手续费,以现在的网络情况,可能得不到确认。这个12.5 BTC已经花了,这个时候就不是UTXO了。

(3)再向后推,商家B有了1个BTC,这笔钱还没有花费,是UTXO,表示将来可以动用。自己还剩的11.5 BTC也是UTXO,以后自己还可以再花,价值就通过这种办法不断传递下去了。

(4)钱包软件(如Bitcoin Core)实际上就是扫描整个区块链中的所有UTXO,并且与你的私钥进行匹配,如果解锁成功,则表明你拥有某个UTXO中的钱,这些UTXO中的钱加在一起,就是你的钱包里显示的余额了。所以说,Bitcoin Core在同步过程中,出现的一行提示信息(如下图所示):

图10-6 未完成同步时给出的信息提示

因为比特币是数字货币,比纸质货币易分割(见第3.1节的可分割性),不用人为设置100、50、20、10、5、2、1这样的面额,一个UTXO是一个整体,必须一次性花完。除了付给别人的币之外,剩下的再付给自己,相当于找零。

交易费

交易费并没有直接记录在交易里,而是通过一个公式计算出来的:

交易费= sum(vin) - sum(vout)

注意:这里用"聪"为单位,浏览器里显示的单位是BTC。

脚本

vin要指向以前交易的vout,那么我是不是能够把vin指向别人的vout?去花别人的BTC?当然不能,在vout里有一个scriptPubKey,称为锁定脚本(Locking Script)或见证脚本(Witness Script),表示要满足一定条件才可以花掉这些钱。(这里出现了见证Witness这个概念,以后理解"隔离见证"就会容易一些了)

而vin里面有一个scriptSig,称为解锁脚本(Unlocking Script),通常里面记录着所有人的签名。只有解锁脚本与锁定脚本匹配时,这笔交易才是有效的。

「小结:」

1、交易里主要记录着输入vin和输出vout

2、输入vin来自于以前一笔交易的vout

3、vout里通常有一个找零地址和找零金额

4、交易费 = sum(vin) - sum(vout)

5、vout里记录着锁定脚本

6、vin里记录着解锁脚本,通常是一个签名

查帐

有人听说挖矿产生的比特币只要不产生交易,就没人知道,这个很难理解。每次挖矿成功后,不是要向全网广播吗?就像创世块一样,一定会有一个输出地址。难道无法查看这个地址的币量吗?为什么现在中本聪或者李笑来拥有的真实币量都没人知道呢?

答:挖矿得来的新区块肯定首先向全网广播,这个区块里记录着一项重要信息,就是比特币地址,不可能不被人知道,但是仅凭这个比特币地址,你能知道的信息非常有限,你可能能够知道的就是这个地址与某个矿池有关,但矿池会根据每个矿工的贡献率把币分发下去,你能知道的信息只有一个比特币地址和币数量而已。

币的数量永远都是可以查到的,你只要不对外公布你的比特币收款地址,别人很难把那个地址与你对应起来。也就是说比特币地址是公开的,但与人是没有直接的对应关系的,在区块链里只记录地址,不记录用户信息。

图为用10000个BTC买披萨的交易记录

中本聪从2011年就不知道了去向,一开始挖的币可能都是他的,很多币都没有花过,根本就不知道是谁的,后面参与挖矿的人渐渐多起来,就更不知道哪些币是他的了。

李笑来买的币也比较早,好像主要是从OTC场外交易直接购买的,只要没有实名认证,你就无从查起了。理论上根据这些场外交易的发币人、交易时间也能查到一些线索,但这个工作量可就非常大了。

现在,我们从云币网等国内网站买币,都要经过KYC实名认证,每一笔BTC取现记录,云币网都记录在案,只要想查,根据这个地址就能把你的家底清清楚楚地查出来。比如我在饭团里做活动时,给几个人发过0.001BTC,通过几个地址,你可以一路追查下去,发现我的钱包里共有几个币,还有几个未花过的,所以说在国内,比特币是没有隐私可言的。感兴趣的朋友可以试着查一查我有几个币?当时收币的一位朋友的地址是:1KWTsVew7zEVGg6nq8j3GtYkPYnyu99Yzd

「结语」

本节内容我们了解了与交易相关的四个内容

未花费交易输出(UTXO)、

脚本、交易费、查账

下节我们将带领大家“挖矿进阶”,敬请期待哟

本文由币乎(bihu.com)内容支持计划奖励

DEW“二进宫”上线BigONE后,原先的承诺真能兑现吗

搜索太麻烦? 二维码为您呈上

这可能是最了解区块链的地方,你来不来

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180105G0SF7E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券