前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >虾说区块链-55-《精通比特币》笔记十

虾说区块链-55-《精通比特币》笔记十

作者头像
企鹅号小编
发布2018-01-22 14:25:18
8420
发布2018-01-22 14:25:18
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

一直在说区块链是一系列技术结合后的新的技术架构,那么这里分别介绍下这些相关技术,也涉及到一些扩展开去的相关内容。

区块链-《精通比特币》笔记十:

《精通比特币》第二版网络在线阅读地址:

http://book.8btc.com/books/6/masterbitcoin2cn/_book/ch08.html

交易独立验证:在钱包软件中,通过收集UTXO,提供正确的解锁脚本,新建一个支出给接收者来创建交易,随后交易广播到网络中。在节点收到交易的时候,首先验证该交易,检验正常则传播,检验不正常则在第一个节点就废弃。校验列表:

交易的语法和数据结构正确。

输出和输入列表不为空。

交易字节大小

输出的总量在2100万个(bitcoin的最大值)。

没有hash值为0,N等于-1的输出。

Nlocktime是小于或等于INT_MAX,或者nlocktime and nSequence的值满足Median TimePast。(Median Time是这个块的前面11个块按照block time排序后的中间时间)

交易字节大小是大于或等于100.

交易中签名数量小于签名操作数量上限。

解锁脚本只能将数字压入栈中,锁定脚本必须符合isStandard格式。

池中或者位于主分区区块中的一个匹配交易必须是存在的。

对于每一个输入,引用的输出必须存在,且没有被花费掉。

对于每一个输入,引用的输出存在于池中任何别的交易中则交易被拒绝。

对于每一个输入,主分支和交易池中寻找引用的输出交易,如检查缺少该输出交易中任何一个输出,该交易成为一个孤立交易,且其匹配的交易为出现在池中,那么加入到孤立交易池。

对于每一个输入,如果引用的输出交易是一个coinbase输出,那么该输入至少获得COINBASE_MATURITY(100)个确认。

使用引用的输出交易获得输入值,检查每一个输入值的总值是否在规定范围内,小于2100个bitcoin,大于0.

输入值的总和小于输出值的总和,交易中止。

交易费太低无法进入一个空区块,交易中止。

每一个输入的解锁脚本必须依据相应输出的锁定脚本验证。

以上交易验证在bitcoin客户端的AcceptToMemoryPool、CheckTransaction、CheckInputs函数中执行操作。

交易打包:在验证交易后,bitcoin节点会将这些交易添加到自己的内存池中(交易池),用来暂时存储未添加到区块的交易记录,验证这些交易,挖矿节点把这些交易整合到一个候选区块中。每一个挖矿节点维护本地的区块链数据副本,同时一直在网络上监听网络中的交易,本地区块高度和网络上区块高度对比,一旦收到信的高度的区块信息,那么就是下一个区块生成的竞争开始,在整个过程中,挖矿节点在计算新区块的数学难题的同事,也同时收集交易记录为再下一个区块做准备,这些交易存放在内存池,验证新区块产生后,检查区块中的交易同时移除自己内存池中在区块中生成的交易记录,剩余的等候在下一个区块生成。挖矿节点通过竞争机制,构建的区块是一个候选区块,只有在完成工作量证明解后,这个区块才生效。该命令索引区块信息:bitcoin-cli get blockhash 区块高度。

创币交易:区块中的第一个交易是一个特殊的交易,作为矿工的奖励,称为创币交易或者coinbase交易,这个交易发送到竞争胜利矿工的钱包。这个创币交易没有输入,不消耗UTXO,就称为coinbase输入。

Coinbase奖励、矿工费:矿工的奖励除了创币还有区块中交易的交易费。Total fees=Sum(Inputs)-Sum(Outputs)。Coinbase奖励:变量Subsidy表示初始奖励,值为COIN常量(100000000聪和50的乘积),奖励减半通过变量halvings来控制,halvings最大值64,然后这个函数二进制右移操作一位、等同于除2的操作。来实现减半。

创币交易结构:Transaction Hash(32bytes)、Output index(4bytes)、coinbase data size(1-9bytes)、coinbase data(variable)、sequence number(4bytes)。

Coinbase数据:创币交易中不含解锁脚本,这个字段被coinbase数据替代,长度2字节最大100字节,矿工可以使用其他部分填充任何数据。一段coinbase16进制字符串中,第一个字节,执行后面字节压入脚本栈,接下来三个字节翻转十进制为区块高度,接下来介个16进制是随机值,求解一个适当的工作量证明,coinbase数据结尾ASCII编码字符P2SH。

区块头构造:构造区块头的过程中,挖矿需要填充6个字段。Version(4bytes)、Previous block hash(32bytes)、Merkle root(32bytes)、timestamp(4bytes)、target(4bytes)、nonce(bytes)。

构建区块:挖矿最为简单理解就是不停的计算区块头的hash值,不断尝试,直到匹配。

本文由币乎社区(bihu.com)内容支持计划赞助。

之前写了点东西,随着对区块链的理解,发现有些理解的并不透彻,重新整理。如有理解不正确的地方,请及时指正,同时有兴趣一块交流的可以加笔者微信:

本文来自企鹅号 - 投河自尽的虾媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 投河自尽的虾媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档