《精通比特币》学习笔记(第六章)
1、比特币交易的本质是数据结构,这些数据结构中含有比特币交易参与者价值转移的相关信息。
2、比特币交易中的基础构建单元是交易输出。 交易输出是比特币不可分割的基本组合,记录在区块上,并被整个网络识别为有效。
3、比特币完整节点跟踪所有可找到的和可使用的输出,称为 “未花费的交易输出”,即 UTXO。
4、用户的比特币“余额”是指用户钱包中可用的 UTXO 总和,而他们可能分散在数百个交易和区块中。
5、一笔比特币交易通过使用所有者的签名来解锁 UTXO,并通过使用新的所有者的比特币地址来锁定并创建 UTXO。
6、每一笔比特币交易都会创造输出,并被比特币账簿记录下来。
7、交易输出包含两部分:
(1)一定量的比特币,面值为“聪”,是最小的比特币单位;
(2)确定花费输出所需条件的加密难题
8、当交易通过网络传输或在应用程序之间交换时,它们被序列化。序列化是将内部的数据结构表示转换为可以一次发送一个字节的格式的过程。序列化最常用于编码通过网络传输或用于文件中存储的数据结构。
9、要构建一个交易,一个钱包从它控制的 UTXO 中选择足够的价值来执行被请求的付款。 有时一个 UTXO 就足够,其他时候不止一个。
10、一个名为 vin 的数组(列表)的交易输入:
"vin": [
{
"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
"vout": 0,
"scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
"sequence": 4294967295
}
]
输入包含四个元素:
(1)一个交易 ID,引用包含正在使用的 UTXO 的交易
(2)一个输出索引(vout),用于标识来自该交易的哪个 UTXO 被引用(第一个为零)
(3)一个 scriptSig,满足放置在 UTXO 上的条件,解锁它用于支出
(4)一个序列号
11、大多数交易包含交易费,这是为了确保网络安全而给比特币矿工的一种补偿。
12、交易的数据结构没有交易费的字段。交易费是指输入和输出之间的差值。从所有输入中扣掉所有输出之后的多余的量会被矿工作为矿工费收集走。
13、钱包应用会通过测量交易的大小,乘以每千字节需要的费用来计算适当的交易费。更高交易费是因为交易很复杂并且尺寸更大,交易费是与参加交易的比特币值无关的。
14、比特币脚本语言包含许多操作码,但都故意限定为一种重要的模式——除了有条件的流控制以外,没有循环或复杂流控制能力。这样就保证了脚本语言的图灵非完备性,这意味着脚本有限的复杂性和可预见的执行次数。每一笔交易都会被网络中的全节点验证,受限制的语言能防止交易验证机制被作为一个漏洞而加以利用。
15、比特币的交易验证引擎依赖于两类脚本来验证比特币交易:锁定脚本和解锁脚本。只有当解锁脚本与锁定脚本的设定条件相匹配时,执行组合验证脚本时才会显示结果为真(TRUE)。
16、比特币中使用的数字签名算法是椭圆曲线数字签名算法或 ECDSA。
17、数字签名在比特币中有三种用途
(1)签名证明私钥的所有者,即资金所有者,已经授权支出这些资金。
(2)授权证明是不可否认的。
(3)签名证明交易(或交易的具体部分)在签字之后没有也不能被任何人修改。
18、交易本身并不包含比特币地址,而是通过锁定和解锁比特币离散值的脚本进行操作。
评论