比特币与区块链的关系
区块链的诞生标志 —— 比特币
2008年10月31日,中本聪(Satoshi Nakamoto)发布了叫《比特币:点对点的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System)的论文,标志着比特币的诞生。
比特币是一种P2P形式的数字货币。比特币的交易记录公开透明。点对点的传输意味着一个去中心化的支付系统。
与大多数货币不同,比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节。
比特币具有“货币”的特性,如:可流通性,可交易性,可存储性,可分割性,同时对比法币,有更好的稀缺性。但比特币价值并不是由中央权力机构赋予或物理特性(贵重金额)决定,而是由广泛的共识来决定。
工作量证明(Proof of Work,PoW)
在分布式系统中,多台计算机同时执行同一个任务并保持数据一致性一直是个挑战。在比特币系统中,各个节点需要通过达成“共识”来确保账本数据(通常称为“状态”)的一致性,所有节点必须遵循统一的规则。
在比特币网络中,所有节点都会接收到一组交易记录,这些记录被打包成一个区块,然后节点将区块更新到本地的账本中。如果每个节点都可以随意增加记录,那么整个网络的账本就会变得不一致。为了避免这种情况,必须确定哪个区块优先写入账本,也就是需要一个公认的区块来作为标准。如果人为指定一个节点优先,这会破坏比特币去中心化的特性,因为这相当于设立了一个中心节点。
比特币使用的共识算法叫做工作量证明(Proof of Work,PoW)。在这个机制下,哪个节点最先完成工作量证明,就能获得将区块写入账本的权利。其他节点则会以这个区块为基础,在最长链的基础上继续进行后续交易的工作量证明。
工作量证明的核心是解一个数学难题,解这个难题唯一的方法就是不断尝试,直到找到正确答案。第一个找到答案的节点会获得一定的奖励。最初每个区块的奖励是50个比特币,大约每四年奖励减半,目前每个区块的奖励是6.25个比特币。因为工作量证明的成功具有随机性,这个过程通常被称为“挖矿”,参与其中的节点被称为“矿工”。
矿工的收益不仅仅来自于区块奖励,还包括交易手续费。根据中本聪的设计,随着区块奖励逐渐减少,矿工的主要收入来源将转向交易手续费。
比特币的特点
比特币作为一种去中心化的加密货币,有以下主要特点:
去中心化
-
无需权威机构背书:比特币不依赖于任何政府、银行或权威机构的支持。它通过密码学和共识算法来确保安全性和信任。
-
点对点网络:比特币通过点对点网络运作,没有中心化的服务器。所有节点在网络中平等地参与交易验证和区块生成。
-
分布式账本存储:比特币的账本数据存储在区块链中,而区块链本身分布在全球成千上万的节点中,没有任何一个中心化的存储设备。每个节点都可以持有区块链的完整副本。
-
公开透明:比特币的账本数据向所有人公开,任何人都可以下载并存储到自己的设备上。这种透明性增强了系统的可信度和安全性。
-
无管理员:比特币网络没有中央管理员,所有节点共同参与网络的管理和维护。网络通过共识机制自动调节和运行。
-
开放参与:任何人都可以成为比特币网络的一部分,成为一个节点并参与网络管理,与其他节点享有同等的权利。
-
平等竞争:比特币网络中的所有节点地位平等,每个节点都有可能通过工作量证明获得下一个区块的记账权。
-
去中心化的供应:比特币的产生是由网络中节点通过挖矿而生成的,这个过程不受任何中心化机构控制,因此比特币的供应也是去中心化的。
-
自由账户生成:与传统银行不同,任何人都可以生成任意数量的比特币账户,不需要中心化机构的审批。
-
自由转账:任何人都可以在比特币网络中发起转账操作,不需要通过任何中心化机构的审批或许可。
但是,在现实中,比特币也有一些中心化的倾向
中心化倾向
-
矿池联盟:由于比特币的奖励机制,节点争夺记账权的欲望很强烈,结果导致大量节点联合起来,形成矿池联盟。矿池成员共同努力争取记账权,并在成功后分享奖励。
-
矿场的集中化:矿池的出现导致比特币网络节点的某种程度中心化。这些联盟(矿场)可以集中大量计算能力,从而对整个网络的算力有较大影响。
比特币的交易
比特币是一个去中心化的系统,没有中心化的第三方来管理账户余额。那么,比特币是如何确定某个账户的比特币属于谁的呢?
在比特币的公共共享账本中,记录了所有比特币地址(账户)持有的余额。当需要转账时,交易信息会包含以下内容:
- from:发起转账的地址,例如“1ABzp1eP5QGefi2DMPTf...”
- to:接收比特币的地址,例如“3FRdnTq18LyNveWa1gQJcgp...”
- amount:转账的比特币数量,例如“1 BTC”
比特币网络需要验证这笔交易是由哪个地址发起的,以确保只有持有发起地址对应私钥的人才能真正发起这笔交易。为了证明这一点,发起人需要用与发起地址对应的私钥对交易信息进行数字签名。
当创建一个新比特币地址(账户)时,首先生成一个随机数作为私钥。然后,通过椭圆曲线算法(ECDSA)从私钥计算出对应的公钥。最后,通过哈希运算和编码处理生成比特币地址。
因此,比特币的所有权实际上由私钥控制,只有掌握私钥的人才能对相应地址中的比特币进行操作。当我们持有某地址的私钥,就是持有该地址下的比特币,因此私钥必须妥善保管。
UTXO模型
UTXO模型(Unspent Transaction Output,未花费交易输出)是比特币等加密货币采用的一种账本管理方式。它通过追踪未花费的交易输出来记录每个账户的余额和处理交易。以下是UTXO模型的简要说明:
1. 基本概念
- 交易输出(Transaction Output):在比特币交易中,输出是指发送到特定地址的比特币金额。每笔交易可以有多个输出。
- 未花费交易输出(UTXO):指尚未被花费的交易输出。UTXO是比特币持有者的实际“余额”。
2. 工作原理
- 当一笔交易被创建时,它会引用一个或多个UTXO作为输入,并产生一个或多个新的输出。
- 输入表示用来支付的比特币,而新的输出则成为新的UTXO,等待被下一笔交易花费。
- 交易的有效性通过确保输入的UTXO未被其他交易使用来验证。
- 每个节点在比特币网络中都会维护一份UTXO集,它是当前所有有效UTXO的集合,用于验证新的交易。
3. 交易示例
- 输入:你要支付的比特币来源于以前接收到的UTXO。
- 输出:你要发送的比特币会生成新的UTXO,分别发给接收者(以及找零的部分返回给你)。
4. 优点
- 去中心化:UTXO模型便于节点独立验证交易的有效性。
- 并行处理:不同的UTXO可以同时被多个交易引用,支持并行处理。
- 隐私性:每个UTXO相对独立,不会关联账户的整体余额,有助于增强交易的隐私性。
5. 缺点
- 数据增长:随着时间的推移,UTXO集的大小会逐渐增大,可能导致存储和检索效率问题。
- 复杂度:相对于账户模型,UTXO模型的交易设计和管理稍显复杂。
UTXO模型通过追踪未花费的交易输出,确保每一笔交易的合法性和资金的正确流动,是比特币等加密货币系统的基础。
钱包
概念
在区块链中,“钱包”是一个软件或硬件工具,用于生成和管理用户的加密货币地址、私钥和公钥,并与区块链网络进行交互。钱包的主要功能是帮助用户安全地存储、发送和接收加密货币。
-
私钥:私钥是一个随机生成的、唯一的数字,它是钱包中最重要的部分。持有私钥的用户可以对相应地址中的加密货币进行操作,如发起交易。私钥必须严格保密,一旦泄露,相关资产可能被盗。
-
公钥:公钥是从私钥通过加密算法生成的,它可以公开分享。公钥用于生成区块链地址,其他人可以通过这个地址向你发送加密货币。
-
地址:地址是公钥的简化形式,用于接收加密货币。它类似于银行账户的账号,任何人都可以使用你的地址向你发送加密货币。
-
交易签名:当用户发起一笔交易时,钱包会使用私钥对交易进行签名,以证明交易的合法性和发起人的身份。区块链网络的节点会验证签名,以确保交易的真实性。
钱包的类型
-
软件钱包:这是一种安装在电脑或手机上的软件,用于管理私钥和公钥。软件钱包又可以分为热钱包(始终连接互联网)和冷钱包(通常离线存储)。
-
硬件钱包:硬件钱包是专门的物理设备,用于离线存储私钥。因为不直接连接到互联网,硬件钱包比软件钱包更安全。
-
纸钱包:纸钱包是一种离线保存私钥和公钥的方式,通常打印在纸上。虽然安全性较高,但如果纸张丢失或损坏,资金可能无法恢复。
钱包的功能
-
生成和管理私钥与公钥:钱包负责创建和管理用户的私钥与公钥。
-
存储和显示余额:虽然钱包本身不存储加密货币,但它通过区块链网络查询地址上的余额,并显示给用户。
-
发起和接收交易:钱包允许用户通过签名发起交易,并可以接收其他人发送的加密货币。
-
与区块链交互:钱包通过与区块链网络通信,广播用户的交易并更新余额。
钱包是用户与区块链交互的关键工具,通过它用户可以安全、便捷地管理和使用自己的加密资产。
交易过程
一笔比特币交易要进入区块链,需要经历一系列步骤,从构建交易到最终被矿工打包到区块中。以下是这一过程的详细步骤:
1. 交易构建与广播
- 构建交易:用户使用钱包软件创建一笔交易,指定交易输入(引用未花费的UTXO)和输出(接收比特币的地址和金额)。
- 交易输入: 他们指向之前的交易创建的 UTXO,通常钱包会收集当前可用的 UTXO 集合作为交易的输入;
- 交易输出:表明多少比特币会锁定到哪些地址,即生成新的 UTXO 。
- 交易签名:用户使用私钥对交易进行数字签名,证明对输入比特币的所有权。即用私钥来解锁交易输入的UTXO。
- 广播交易:交易被广播到比特币网络,所有节点都可以接收到这笔交易。
2. 节点验证
- 交易验证:网络中的全节点会验证交易的有效性,例如
- 交易输出是否 小于 0 或者大于 2100 万 BTC
- 交易不是一笔 coinbase 交易 ,因为区块之外无法存在任何 coinbase 交易。
- 交易的 “重量” 不超过 400000 单位 。这么大体积的交易可能在共识上是有效的,但会占据太多的交易池空间。防止攻击者尝试使用体积非常大但永远不会被挖出的交易来塞爆我们的交易池。
- 签名验证确定 UTXO 的有效性(UTXO 脚本检查)。
- 传播交易:经过验证的交易会被转发给其他节点,逐步传播到整个网络中。
3. 交易进入内存池(Mempool)
- 内存池(Mempool):内存池就是未确认交易的缓存。有效的交易会暂时存储在节点的内存池中,以便矿工从中挑选出手续费率最高的交易、打包到区块中。
4. 矿工打包交易
- 选择交易:矿工节点从内存池中选择交易打包到区块中。矿工通常会优先选择交易费较高的交易,以增加挖矿收益。
- 构建区块:矿工将选定的交易打包成一个候选区块,并在区块头中添加必要的元数据(如前一个区块的哈希、Merkle根、时间戳、难度目标、Nonce等)。
5. 工作量证明(PoW)
- 新区快挖掘:矿工得到前一个区块的哈希值之后,就可以开始挖下一个区块。创建一个新区块的过程差不多是这样的:矿工得到前一个区块的哈希值之后,就可以开始挖下一个区块。创建一个新区块的过程差不多是这样的:
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + nonce )) < HASH 目标值
version: block的版本
prev_hash: 上一个block的hash值
merkle_root: 需要写入的交易记录的hash树的值
ntime: 更新时间
nbits: 当前难度
挖出的区块由于包含了上一个区块的 Hash,通过这个方式把所有的区块串联起来了,区块挖出之后,会迅速的广播的网络的其他节点,只有当一笔交易被包含进一个带有有效工作量证明的区块,并且该区块被整个网络接受之后,我们就说这笔交易 “被确认了”,此时才可以认为资金的转移已经完成了。
- 成功挖矿:当矿工找到一个符合要求的哈希值时,表示成功挖出一个新区块。
6. 区块广播与确认
- 广播区块:成功挖出区块的矿工将这个新区块广播到整个比特币网络。
- 区块验证:其他节点收到新区块后,会对其进行验证,确保区块内的交易有效且符合共识规则。
- 添加到区块链:验证通过后,节点将新区块添加到自己的区块链中,这时,区块内的交易被认为是已确认的。
7. 交易确认
- 链上确认:随着新区块被添加到区块链中,交易被视为确认。随着后续更多区块的加入,交易的确认程度越来越高,变得越来越不可逆。
通过上述过程,交易从最初的广播到最终被打包进区块,成为区块链的一部分,从而实现交易的不可篡改性和安全性。