Lazy loaded image
⛓️BTC 交易方式与原理
字数 2950阅读时长 8 分钟
2025-1-13
2026-8-17
← 返回总目录 · 区块链技术与应用笔记(BTC)
发布一个区块有出块奖励,记录一笔交易交易方要交手续费,这就是费力发布区块可以得到的的收益;
比特币系统设计为每10分钟产生一个区块,每多出21万个区块,出块奖励就减半;因此计算一下差不多每隔4(3.99)年就出块奖励减半,简单计算可以知道当时间无限长的时候,比特币总量时2100万个;
比特币区块链本身不记录任何与资金转移无关的多媒体信息,如新闻、书籍、图片等。其设计初衷就是为了专注于安全和有效地处理货币转移,而不作为一个通用的信息存储平台;以前觉得一个区块肯定会记录五花八门的信息,现在可以确定,比特币整个系统,只会记录跟钱有关的信息;
需要注意的是,比特币的区块链是一个分布式的公共账本,记录的是交易数据(transaction-based ledger),并不直接记录每个账户(或比特币地址)上的具体余额,账户的余额信息是通过交易信息间接计算而来的,相关步骤:
1. 交易驱动的账本
  • 比特币的区块链是一个分布式的公共账本,主要记录的是交易数据,而不是账户余额。每笔交易记录了比特币的转移情况,包括:
    • 发送者地址
    • 接收者地址
    • 转账金额
    • 交易时间戳
    • 交易的哈希值等。
2. 地址而非账户
  • 比特币使用的是地址而非传统银行账户。每个用户可以生成多个比特币地址,而这些地址之间的比特币转移通过交易记录实现。用户的“账户余额”实际上是所有与其地址相关的交易输出(未花费交易输出,UTXO)。
3. 未花费交易输出(UTXO)
  • 比特币系统中有一个重要的概念是“未花费交易输出”(Unspent Transaction Outputs, UTXO)。
    • 这意味着每当你收到比特币时,这笔比特币的数量被记录为未花费的输出,只有在你使用这些比特币进行新的交易时,这些输出才会变为花费(spent)。
    • 用户的实际可用余额是通过计算所有UTXO的总和来得出的。
4. 查询余额的方式
  • 虽然区块链中不直接存储余额,但用户或钱包软件可以通过遍历相关地址的UTXO来计算每个地址的实际余额。
  • 在区块链上,每个地址的交易活动都可以被追踪和查看,所以任何人都可以查询特定地址的所有交易记录,从而计算出其余额。
未花费交易输出(UTXO,Unspent Transaction Output)是什么
1. 交易输出
  • UTXO 代表某个比特币交易中的输出部分,某个交易中生成的输出(output)在未被花费前都被视为 UTXO。每个 UTXO 记录了比特币的数量、接收地址和签名条件等。
2. 发送者和接收者
  • 每笔交易必须从一个或多个 UTXO 中选择作为输入,以生成新的交易。当你发送比特币时,你选择某些 UTXO 作为输入。剩余的部分(如果有的话)作为新输出返回给你的地址(称为“找零”)。
3. 标准输出类型
  • UTXO 主要在以下几种情况下产生:
    • 支付给某个地址的比特币:当你收到比特币时,交易输出就会生成并成为 UTXO。
    • 找零交易:当你用某些 UTXO 支付比特币时,将生成新的 UTXO(例如,一个输入是 1 比特币,支付给对方 0.5 比特币,剩余的 0.5 比特币返回到你的地址,成为新的 UTXO)。
4. 交易条件
  • UTXO 除了存储金额外,还包含用于解锁这些比特币所需的条件(通常是公钥哈希或脚本)。这确保了只有具备特定私钥的用户才能使用这些 UTXO。
5. UTXO 集合
  • 用户的可用余额并不是一个简单的数值,而是所有未花费交易输出(UTXO)集合的总和。计算用户的余额都涉及对所有 UTXO 的跟踪和累计。
6. UTXO 的状态
  • 一个 UTXO 一旦被用于新的交易并作为输入而被花费,便不再是未花费的输出,将转换为已花费状态,从utxo数据结构中移除。交易确认后,会在区块链中记录这一变化。
UTXO数据结构的样子及交易具象化
UTXO 的基本结构
一个 UTXO 通常包含以下信息:
  1. 交易ID(txid):指向生成这个 UTXO 的交易的唯一标识符。
  1. 输出索引(vout):在该交易中的输出位置,通常是一个整数,从 0 开始计数。
  1. 金额(value):这个 UTXO 的可用比特币数量,通常以 satoshi 为单位(1 BTC = 100,000,000 satoshi,Satoshi 是比特币的微小亚单位,以比特币的创始人中本聪(Satoshi Nakamoto) 的名字命名。每个比特币是由1 亿个Satoshi 组成的)。
  1. 地址(address):与这个 UTXO 相关联的接收地址,表明这个比特币属于哪个用户。
示例
假设有一笔交易,其交易 ID 为:
假设交易包含了两个输出,构成 UTXO 的信息如下:
UTXO 集合
假设用户 A 收到了上述两个 UTXO,它们就可以被用户 A 用来进行后续的交易。在实际的 UTXO 集合中,可能还会有其他的 UTXO,例如:
用户余额的计算
在一个节点的 UTXO 集合中,用户 A 的 UTXO 范围会可能包括 UTXO 1、UTXO 2、UTXO 3 和 UTXO 4。用户的可用余额可以通过将这些 UTXO 的金额相加来计算:
后续进一步交易
假如A要再继续进行交易,转账给B 1.25BTC,那么A可以选择UTXO1和UTXO2,或者单独选择UTXO3或者UTXO4只要总额大于交易金额即可(实际使用中钱包会自动选择),交易完成后,区块链上会记录交易信息,utxo集合红中上会删除掉UTXO1和UTXO2,找零0.25BTC,作为新的UTXO5写入UTXO集合中
 
总结
需要注意的是,虽然提到了钱包,余额,但是只是为了方便理解,实际上你并未拥有过余额那么很多软件比如说直接显示账户余额,你只是有一个权限,因为你有私钥,于是你就可以访问区块链上的一个地址,并有资格支配和该地址对应的所有UTXO,为了方便起见把你能支配的所有的UTXO的和称为账户余额;
传统银行账户,别人是无法知道你账户上有多少钱的,但是再比特币这个系统中,区块链上的所有交易都透明,utxo所有的信息也是透明的,所有的地址也是透明的,任何人都可以知道一个地址上有多少“余额”(即UTXO的和),唯一不透明的,仅仅是地址背后所对应的人以及私钥,虽然区块链本身全部透明,但仅仅凭借这一点不透明,也足以称的上绝对的安全和隐私,以当前世界的科技水平来看,去中心化的货币其安全性和隐私性,这个安心感是无与伦比的,了解到这一点,便足以理解为什么加密货币有资格具有“存在的甚至很高的价值”
transaction-based ledger(基于交易的账本,例如BTC)和account-based ledger(基于账户的账本,利于以太坊)的区别
1. 比特币:交易驱动账本(UTXO 模型)
  • 结构
    • 比特币使用未花费交易输出(UTXO)模型。每笔交易都会引用前面交易的输出作为输入。当 UTXO 被消费后,它变为已花费状态,不再可用。
  • 可追踪性
    • 每笔交易都是独立的,可以追溯到它所引用的 UTXO。交易必须明确指定所有输入和输出,因此这使得交易的流动性和追踪性很高。
  • 状态
    • 比特币的网络状态是通过所有的 UTXO 集合来表示的。要计算一个地址的余额,需要将所有未花费的输出相加。
  • 优点
    • 增强的隐私性:由于操作的基本单元是 UTXO,而不是账户,跟踪资金流动变得更复杂。
    • 防止双重支付:使用 UTXO 模型可以有效防止在同一时间内产生对相同资金两次支付的情况。
2. 以太坊:账户驱动账本
  • 结构
    • 以太坊采用账户模型,由两个主要类型的账户构成:外部账户(由私钥控制)和合约账户(由智能合约控制)。每个账户都有一个状态,表示它的余额和其他数据。
  • 可追踪性
    • 交易与账户状态直接关联。当用户进行交易时,账户的余额会直接更新,交易记录会明确显示账户之间的转移,而不是基于 UTXO 的输入输出模型。
  • 状态
    • 以太坊的网络状态由所有账户状态组成。一个账户的余额可以直接查阅,不需要引用特定的交易。
  • 优点
    • 更适合复杂的智能合约操作:由于账户的设计使得合约可以维持自己的状态,程序化交互变得更灵活。
    • 更简化的用户体验:用户在进行交易时只需关心账户余额的变化,而不需要跟踪多个 UTXO。
总结
  • 比特币 强调的是交易之间的联系,使用 UTXO 模型,使得每笔交易都是独立的,且更注重隐私性和双重支付的防护。
  • 以太坊 侧重于账户间的状态管理,以账户模型支持智能合约和去中心化应用,提供了更直观和灵活的操作方式。
上一篇
BTC 区块结构、双花攻击与安全性
下一篇
BTC 共识协议与区块写入

评论
Loading...