4.BTC-具体实现

基于交易的账本(Transaction-based Ledger) BTC使用UTXO模型 (Unspent Transaction Output Model - 未花费的交易输出模型),简单来说,比特币的账本不记录任何人的“账户余额”。相反,它记录一笔笔不可更改的交易历史。每个账户余额并不被记录在某个地方,而是分散在整个区块链历史中的、指向你的、尚未被花费的“数字支票”。 在一个转账交易中,可能存在多个输出。一个UTXO的结构非常简洁,它主要包含两个关键部分: 1. 金额 (Value / Amount) 这部分指定了这张“数字支票”的面值是多少。 * 单位:这个值通常用比特币的最小单位“聪” (Satoshi) 来记录。1个比特币等于1亿(10^8)聪。 * 作用:明确定义了这个UTXO所代表的、可以被未来交易花费的比特币数量。 2. 锁定脚本 (Locking Script / scriptPubKey) 这是UTXO中最核心部分。它不是一个简单的“…

3.BTC-协议

双重支付问题 (Double-Spending Problem) BTC中的公私钥解决了证明所有权和授权交易两个部分。私钥是你对某个地址下数字资产的唯一所有权证明,而数字签名是对一笔交易的、不可否认的授权。这套体系保证了只有你才能动用你的钱,别人伪造不了你的签名。但它只解决了“这笔交易是不是你本人同意的”这个问题。 数字世界和物理世界的根本区别在于可复制性。我有一个代表“1个币”的数字文件。我可以把它复制一百万份,每一份都和原始文件一模一样。那么一个只有公私钥的系统就会面临以下的问题: 1. 我拥有一个“币”,我的私钥能证明我拥有它。 2. 我创建了一笔交易:“我将这个币支付给商家A”。我用我的私钥对这笔交易进行了签名。商家A收到了这笔交易,验证了我的签名,确认有效。 3. 问题来了:在把交易发给A的同时(或者之后),我完全可以把**原始的那个“币”**再用一次,创建第二笔交易:“我将这个币支付给商家B”。我同样用我的私钥签名,商家B验证后也发现签名有效。 A和B都收到了一个密码学上完全有效的“支付凭证”。他们都认为自己收到了那个币。这个币到底属于谁?系统里并没有一个公认…

2.BTC-数据结构

哈希指针(Hash Pointer) * 哈希指针不仅存储了数据的内存地址,还额外存储了那块数据内容的加密哈希值。 * 组成:一个哈希指针包含两个部分: * 指针 (Pointer):指向数据的存储位置。 * 哈希 (Hash):指向的数据内容的哈希值。 区块链是一连串的哈希指针配合组成的: * 我们有一个数据块 Block 1。 * 我们创建一个指向 Block 1 的哈希指针 HP_1。这个指针里包含了 Block 1 的地址和 Hash(Block 1)。 * 现在,我们创建第二个数据块 Block 2。我们将哈希指针 HP_1 存放在 Block 2 的内部。 * 接着,我们再创建一个指向 Block 2 的哈希指针 HP_2,它包含 Block…

1.BTC-密码学原理

BTC中用到了密码学中的两个原理,哈希和签名 哈希(Hash) 加密哈希函数 (Cryptographic Hash Function) 将任意长度的数据(如文本、文件或密码)转换为一个固定长度的、独一无二的字符串。这个输出的字符串被称为哈希值 (Hash Value) 或消息摘要 (Message Digest)。用来检测信息是否被篡改。 加密哈希函数的性质: 1. 抗碰撞性 (Collision Resistance)/抗第二原像攻击 (Second Pre-image Resistance) 抗碰撞性的意思是找到两个不同的输入数据,使得它们能够产生相同的哈希值,在计算上是不可行的。即难以找到任意两个不同的输入 x 和 y,使得 Hash(x) = Hash(y)。这里不是指找不到这种输入数据,而是在人力的计算条件下不可行。 注意:目前没有任何一种哈希函数经过了数学证明这个形式,在实用中往往都是经验得出。 2. 抗原像攻击 (Pre-image Resistance)…