10.BTC-匿名性

不牢固的匿名性 比特币的隐私模型更应该被准确地描述为 “假名性”(Pseudonymity),而非“匿名性”(Anonymity)。因为比特币交易是公开的,但你的真实身份是默认隐藏的。在比特币中,比特币地址就是“假名”。它是一串由字母和数字组成的字符串(例如 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa),用来接收和发送比特币。这个地址本身不包含姓名、身份证号或任何个人信息。 但是,比特币的所有交易都记录在一个公开、永久、不可篡改的公共账本上,这个账本就是区块链。 任何人都可以通过“区块浏览器”(Blockchain Explorer)这样的工具,查看任何一个比特币地址的所有历史交易记录——包括它接收过多少比特币、发送给了哪些地址、以及当前的余额。既然所有交易都公开可查,那么打破“假名”的关键就在于将一个比特币地址与一个现实世界的真实身份关联起来。一旦这个关联被建立,追踪者就可以“顺藤摸瓜”,通过分析交易记录,揭示出所有的金融活动。 实际上,BTC的匿名性被破坏有几个关键的时刻: 1. 与现实世界交互的时刻 这是最常见、最直接的隐私破坏点。当你把数…

9.BTC-分叉

分叉的本质,就是对整个比特币网络“宪法”(即共识规则)的修改。 共识规则是所有节点用来判断一笔交易或一个区块是否“合法”的黄金标准。例如,“一个区块的大小不能超过1MB”、“只有提供了正确的私钥签名才能花费比特币”等等,这些都是共识规则。当我们要改变这些规则时,就必须通过协议分叉来完成。协议分叉是比特币作为一个去中心化、开源项目进行演化、升级和修复的核心机制。它主要分为两种类型:软分叉和硬分叉。 硬分叉 (Hard Fork) 硬分叉是对协议规则的一次根本性改变,通常是放宽了限制或引入了全新的、与旧规则不兼容的逻辑。新规则产生的区块,在旧节点的眼中是完全非法、无效的。 核心特征: * 不向后兼容:旧节点会坚决拒绝新节点产生的区块。 * 导致永久分裂:如果社区未能就升级达成压倒性共识,网络将不可避免地分裂成两条独立的区块链。一条遵循旧规则(原链),一条遵循新规则(新链)。 * 需要所有人生态位升级:所有希望跟随新链的参与者(矿工、交易所、钱包服务商、用户)都必须升级他们的软件。 * 创造“分叉币”:链分裂后,一条新的加密货币随之诞生。…

8.BTC-脚本

比特币的脚本语言,通常直接称为 Script,是比特币协议的核心组成部分之一。它是一种有意设计得非常简单、功能受限的编程语言,主要负责处理交易的验证和授权。 1. 基于堆栈(Stack-based):Script 语言没有变量。所有的操作都是通过一个“堆栈”来完成的。数据被推入(push)堆栈顶部,操作码(Opcodes)会处理堆栈顶部的一个或多个元素,然后将结果推回堆栈。 * 可以把它想象成一摞盘子:你只能在最上面放盘子(push),也只能从最上面拿盘子(pop)进行操作。 2. 逆波兰表示法(Reverse Polish Notation, RPN):指令(操作码)跟在数据后面。例如,要计算 2 + 3,在 Script 中会写成 2 3 OP_ADD。计算机会先将 2…

7.BTC-挖矿

挖矿过程的转变 第一阶段:CPU挖矿时代(2009年 - 2010年中) * 技术与工具:在这个阶段,矿工就是比特币的创造者中本聪和一小撮早期的密码学爱好者。他们使用的工具就是我们日常使用的个人电脑的中央处理器(CPU)。中本聪发布的第一个比特币客户端就内置了CPU挖矿的功能。 * 算力规模:极低。刚开始只有中本聪一台电脑在挖,算力仅为几 KH/s(每秒千次哈希)。随着更多爱好者加入,逐渐增长到 MH/s(每秒百万次哈希)级别。 * 时代特征: * 高度去中心化:任何拥有普通电脑的人都可以下载软件,点击“开始挖矿”,并有实际的机会挖到区块。 * 公平的起点:这是一个充满理想主义色彩的时期,参与者主要是出于对技术的兴趣和支持。 * 终结:2010年,开发者们发现,用计算机的显卡来挖矿,效率远高于CPU。CPU挖矿的时代就此迅速走向终结。 第二阶段:GPU挖矿时代(2010年中 - 2012年) * 技术与工具:开发者发现,用于处理图形和复杂数学运算的图形处理器(GPU,即显卡)…

6.BTC-挖矿难度

难度调整这个过程是完全自动的,被硬编码在比特币协议中,由网络中的每一个全节点独立计算和强制执行。 * 调整周期:每挖出 2016 个区块,网络就会进行一次难度调整。 * 目标时间:协议设定的目标是,挖出2016个区块应该花费的时间是: 2016 个区块 * 10 分钟/区块 = 20160 分钟 (也就是整整两周) * 调整逻辑:在每个调整点(比如第2016、4032、6048...个区块高度),所有节点都会执行以下计算: 1. 回顾并计算挖完过去这2016个区块,实际花费了多少时间(Actual_Time)。 2. 将这个实际时间与目标时间(20160分钟)进行比较。 3. 如果 Actual_Time < 20160 分钟:这说明过去的周期里,全网的平均算力增强了,导致出块速度快于10分钟。为了让出块速度慢下来,就必须增加挖矿难度。 4. 如果 Actual_…

5.BTC-网络

简单,鲁棒而不是高效 总体协议 BTC在应用层以Bitcion Block Chain为总和,运行着一个Bitcoin P2P Protocol。在网络层上,节点之间使用TCP通讯,整体上是一个P2P Overlay Network。 具体上,应用层规定了一系列命令和消息,例如: * version / verack:当两个节点初次建立连接时,它们会交换 version 消息来介绍自己(比如软件版本、区块高度等),然后用 verack 消息来确认连接成功。这是“握手”过程。 * getaddr / addr:节点可以用 getaddr 向对方请求已知的其他活跃节点地址列表,对方则用 addr 消息回复。这是节点发现和网络拓扑维护的关键。 * inv (Inventory):当一个节点有新的交易或区块时,它不会直接发送完整数据,而是先发送一个 inv 消息,告诉对方它拥有哪些新东西的“清单”(用哈希值表示)…

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都收到了一个密码学上完全有效的“支付凭证”。他们都认为自己收到了那个币。这个币到底属于谁?系统里并没有一个公认…