《精通比特币》第五章“交易”解读——区块链基础知识篇

通过本章的学习,我们能了解到比特币交易所包含的信息、交易如何被创建、如何被验证。对于产品和研发人员实现数字钱包的应用功能,有非常直观的借鉴意义。

建议阅读时长:5分钟左右

第1节 交易概述

交易是比特币系统最重要的部分。根据比特币系统的设计原理,系统中任何其他的部分都是为了确保比特币交易可以被生成、能在比特币网络得以传播和通过验证、并最终加入全球比特币交易总帐薄。

通过比特币客户端可以创建并广播交易。比特币交易是一个含有输入值和输出值的数据结构,该数据结构中植入了将一笔资金从指定的比特币地址转移至目标地址的代码信息。比特币客户端会维护一套节点地址列表(即挖矿节点的地址列表),当交易创建完成后,会将交易信息通过比特币网络广播到所维护列表中的节点,节点验证交易有效后,会继续广播至与其相连的其他节点,就这样,一笔交易很快会被所有节点接收到,当矿工通过挖矿将这笔交易加入到新区块、且大部分节点在该新区块的基础上开始工作后,这笔交易就成为了比特币交易总账簿的一部分。

比特币系统并不存储比特币地址的余额,比特币是分散在各个区块交易记录中的,当一笔交易中的收款地址还未用于新的支付时,这个收款地址即对应着一笔可用的未消费UTXO(全称Unspent Transaction Output)。UTXO是比特币交易的基本单位,不可再拆分,就像纸币一样,当一张纸币大于待付金额时,不能将纸币撕成几段,只能整体支付后,再接收找零。

所以比特币交易的输入,是将1个或多个UTXO组合成足额大于等于待支付的金额;比特币交易的输出,是输出新的UTXO到接收方的收款地址中,同时会创建用于找零的UTXO。输入和输出之间的差额即为奖励给矿工的交易手续费。

比特币钱包是如何知道用户有哪些未消费的UTXO用来支付呢?

这可以从”第4章 密钥、地址和钱包“中的知识来理解。当用户刚开始使用一个新的比特币客户端时,可以通过各种方式导入已有的私钥。当导入私钥后,比特币钱包会根据该私钥自动生成对应的比特币地址,然后钱包用这些地址去扫描区块链,得到比特币地址上每个还未消费的UTXO记录。最终比特币钱包客户端本地会维护一套未消费的UTXO数据库,用于支付时作为交易输入。

第2节 交易输出

给某人发送比特币实际上是创造新的UTXO,注册到那个人的地址,并且能被他用于新的支付。

交易输出包含两部分:一定量的比特币和一个锁定脚本。锁定脚本,是用来支付时必须满足的条件,只有满足锁定脚本中的条件,才能动用这笔UTXO输出比特币给其他人。锁定脚本中包含了接收方的比特币地址。

第3节 交易输入

若想支付UTXO,一个交易的输入也需要包含解锁脚本,用来满足UTXO的支付条件。解锁脚本是一个签名,用来证明对于在锁定脚本中的比特币地址拥有所有权。

当用户付款时,钱包需要选择特定的UTXO来满足付款额,比如需要支付1BTC,钱包应用会选择一个包含0.4BTC的UTXO和0.7BTC的UTXO,加在一起用于支付。多余的0.1BTC,客户端可指定作为找零打到支付方的比特币地址中。若指定了奖励给矿工的手续费,这时除去手续费之后剩余的部分也会找零到指定地址。

当然,比特币客户端中维护了一套未消费的UTXO数据库,如何从库里面选择最优的UTXO组合,也是钱包要实现的功能。

说明:矿工的交易手续费,是基于交易的字节长度来计算的,而不是基于交易金额的价值。

所以,交易输入的步骤是:选定最优的UTXO—>为每个UTXO生成解锁脚本—> 当解锁脚本验证通过后—>可正常创建交易输出。

第4节 脚本验证

原书中,讲解了比特币系统中5种标准脚本的原理和使用背景,感兴趣的朋友可以深入学习。本节以P2PKH(Pay-to-Public-Key-Hash)为例,主要讲讲解锁脚本是如何验证锁定脚本的。

比特币网络中的大多数交易都是P2PKH交易,此类交易都含有一个锁定脚本,由P2PKH脚本锁定的输出可以通过键入公钥和由相应私钥生成的数字签名进行匹配来解锁。

解锁过程与第四章原理一致,如下:

1.先由私钥生成公钥;

2.将公钥通过哈希算法得到公钥哈希

3.将解锁脚本和锁定脚本组合在一起,比对由私钥生成的公钥哈希与锁定脚本中的公钥哈希是否匹配,若匹配成功,则符合解锁条件;否则无法使用该UTXO中包含的比特币。

第5节 总结

通过本章的学习,我们了解了比特币交易所包含的信息、交易如何被创建以及如何验证是否对UTXO中的比特币拥有支配权。

本章对于产品和研发人员实现数字钱包的应用功能,有非常直观的借鉴意义。

文章首发于公号“Tina说”

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容