一直在说区块链是一系列技术结合后的新的技术架构,那么这里分别介绍下这些相关技术,也涉及到一些扩展开去的相关内容。
区块链-《精通比特币》笔记二:
最近在巴比特上看《精通比特币》第二版,看到一些概要大致记录整理。
HD钱包:HD钱包从根种子延伸,方便钱包的存储导入、导出。根种子输入值HMAC-SHA512算法得到一个hash值,用于创建主私钥和主链代码,主私钥通过椭圆曲线算法生成主公钥。
私有子密钥:分层确定性钱包使用CKD函数从母密钥衍生子密钥。由母私钥+链码+索引合并散列后(HMAC-SHA512函数)生成子密钥。合并生成512散列,拆分256两部分,散列右边作为链码,散列左边+索引码+母私钥延伸子私钥。
扩展密钥:密钥和链码结合后被称为扩展密钥(extended key),扩展密钥由256位密钥+256位链码生成的512位序列。用于衍生子私钥。扩展密钥通过Base58check编码,会出现xprv和xpub前缀。
Bitcoin交易:交易的本质是数据结构,数据结构中包含了bitcoin交易双方价值的转移相关信息。每一笔交易在区块链上都是一个公开的记录。
交易基本单位:交易输出是bitcoin交易中最基本的交易单元。
UTXO(unspent transaction outputs):所有的UTXO称为UTXO集。这个大小不固定,UTXO集表示UTXO中的状态的变化。
收到的bitcoin:钱包中检测到可用的UTXO,一般钱包的余额就是指可用的UTXO的总和。
交易一笔任意金额都以交易输出来表示,找零对应一笔输出到交易发起者的地址。简单一笔交易消耗之前可用的UTXO,同时创建新的UTXO作为未来交易的消耗储备。通过这种输出的转移来实现bitcoin在不同所有者之间的转移。
币基交易:区块中第一笔交易,作为区块产生的奖励给旷工。
交易输出:bitcoin中每一笔交易都会创造输出,记录在bitcoin账本当中,简单认为即为UTXO,UTXO在全网中传播。
交易输出包含:比特币(以聪为单位)、确定输出的一道加密难题(cryptographic puzzle)。
加密难题:加密难题也称为锁定脚本(locking script)、见证脚本(witness script)、脚本公钥(scriptPubKey)。
Bitcoincore JSON编码中交易显示:位于vout的数组中,一个输出显示为一个值(value:以bitcoin显示)、一个加密难题(scriptPbuKey:显示)。
交易输出序列化:在网络中传输,通过发送字节流来显示被称为序列化,在bitcoin函数库中将交易内部存储在数据结构中,交易的字节流转换为函数库的内部数据结构,称为交易解析,转换为字节流称为序列化。
交易输入:UTXO标记为将被消费,通过解锁脚本提供拥有证明。
对于要支付的UTXO,创建一个指向其的输入,用解锁脚本解锁。首先一个指向UTXO的指针,通过指向UTXO记录在区块链中的交易的hash和序列号来实现,再通过解锁脚本,一般解锁脚本证明bitcoin的所有权的数字签名和公钥。
输入组成:交易ID+输出索引(vout)+解锁脚本(scriptSig)+序列号。
单纯根据输入的组成并非直接给出UTXO的信息,必须检索整个交易来确认引用的UTXO的状态,广播至全网也需要同样检索验证。
交易输入序列化:和输出序列化类似。
交易费:确保系统正常运行,支付给矿工的一笔费用,也能理解为激励或安全机制。费用由minrelaytxfee来设置。交易费和参与交易的bitcoin值无关。
交易脚本语言:简单称为脚本,类似forth的基于堆栈的执行语言。目前大多以P2PKH脚本来处理交易。交易不局限于支付给某人的bitcoin地址,锁定脚本可以表达各种复杂情况。
图灵非完备:bitcoin脚本除了有条件的流控制外,没有循环和复杂流控制能力,故是图灵非完备性。
脚本是去中心化验证,这个和bitcoin整个架构有关,脚本在网络中都会被验证。
脚本的锁定和解锁:交易过程中以来锁定脚本和解锁脚本来实现:
锁定脚本是一个输出上的花费条件,执行花费输出所需要的条件,一般锁定脚本中含有公钥和地址,在程序中scriptPubKey出现。
解锁脚本用于解决或者满足锁定脚本在一个交易输出上设定的花费条件的脚本。一般含有用户的数字签名,在程序中以scriptSig出现。
本文由币乎社区(bihu.com)内容支持计划赞助。
之前写了点东西,随着对区块链的理解,发现有些理解的并不透彻,重新整理。如有理解不正确的地方,请及时指正,同时有兴趣一块交流的可以加笔者微信:
领取专属 10元无门槛券
私享最新 技术干货