neo blockchain book
  • NEOHOPE's Blockchain Book
  • 概述
    • 本书内容
    • 读者定位
    • 本书约定
    • 项目对比
    • 名词释义
  • 基本原理
    • 区块链
    • 智能合约
    • 交易所
    • 系统架构
  • 基础算法
    • 默克尔树
    • Bloom过滤器
    • 公钥私钥及椭圆曲线
  • 共识算法
    • 分布式系统
    • Paxos与Raft算法
    • 拜占庭容错算法
  • Bitcoin
    • 整体架构
    • 状态转换
    • 区块确认
    • 分叉处理
    • P2P
    • 脚本
    • 钱包
    • 使用
    • 编译(Ubuntu)
    • 私链搭建(Linux)
    • 私链搭建(Docker)
  • Ethereum
    • 整体架构
    • 状态转换
    • 区块确认
    • 使用
    • Remix IDE环境搭建(Ubuntu16)
    • 智能合约编写01
    • 智能合约编写02
    • 智能合约编写03
    • 智能合约编写04
    • 编译(MacOS)
    • 私链搭建
  • EOS
    • 整体架构
    • 使用
    • 智能合约使用(单机单节点单钱包)
    • 智能合约使用(单机单节点多钱包)
    • 编写简单的智能合约
    • 编写有数据存储的智能合约
    • 编译(Linux)
    • 私链搭建(单机多节点)
    • 私链搭建(多机多节点)
  • Fabric
    • 整体架构
    • 身份管理
    • 共识达成
    • 使用
    • 智能合约介绍
    • 智能合约使用01
    • 智能合约使用02
    • 编译(MacOS)
    • 私链搭建(Ubuntu)
    • 在私链中添加一个机构
  • Cosmos
    • 整体架构
    • Zone与Hub
    • 使用
  • IPFS
    • 整体架构
    • 使用
    • 编译(MacOS)
    • 私链搭建
  • 然后呢?
由 GitBook 提供支持
在本页
  1. Bitcoin

状态转换

上一页整体架构下一页区块确认

最后更新于6年前

状态转换

从技术角度讲,比特币账本可以被认为是一个状态转换系统,该系统包括所有现存的比特币所有权状态和“ 状态转换函数” 。状态转换函数以当前状态和交易为输入,输出新的状态。

比特币系统的“ 状态” 是所有已经被挖出的、没有花费的比特币(技术上称为“ 未花费的交易输出, unspent transaction outputs 或 UTXO” )的集合。每个 UTXO 都有一个面值和所有者(由 20 个字节的本质上是密码学公钥的地址所定义[1])。一笔交易包括一个或多个输入和一个或多个输出。每个输入包含一个对现有 UTXO 的引用和由与所有者地址相对应的私钥创建的密码学签名。每个输出包含一个新的加入到状态中的 UTXO。

例如,在标准的银行系统中,状态就是一个资产负债表,一个从 A 账户向 B 账户转账 X 美元的请求是一笔交易,状态转换函数将从 A 账户中减去 X 美元,向 B 账户增加 X 美元。如果 A 账户的余额小于 X 美元,状态转换函数就会返回错误提示。所以我们可以如下定义状态转换函数:

APPLY(S,TX) > S' or ERROR

在上面提到的银行系统中,状态转换函数如下:

APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice:$30,Bob: $70 }

但是:

APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR

比特币系统的“ 状态” 是所有已经被挖出的、没有花费的比特币(技术上称为“ 未花费的交易输出, unspent transaction outputs 或 UTXO” )的集合。每个 UTXO 都有一个面值和所有者(由 20 个字节的本质上是密码学公钥的地址所定义[1])。一笔交易包括一个或多个输入和一个或多个输出。每个输入包含一个对现有 UTXO 的引用和由与所有者地址相对应的私钥创建的密码学签名。每个输出包含一个新的加入到状态中的 UTXO。

在比特币系统中,状态转换函数 APPLY(S,TX)->S’ 大体上可以如下定义:

1. 交易的每个输入: 如果引用的 UTXO 不存在于现在的状态中( S),返回错误提示 如果签名与 UTXO 所有者的签名不一致,返回错误提示

2. 如果所有的 UTXO 输入面值总额小于所有的 UTXO 输出面值总额,返回错误提示

3. 返回新状态 S’ ,新状态 S 中移除了所有的输入 UTXO,增加了所有的输出UTXO。

第一步的第一部分防止交易的发送者花费不存在的比特币,第二部分防止交易的发送者花费其他人的比特币。第二步确保价值守恒。比特币的支付协议如下。假 设 Alice 想给 Bob 发送 11.7BTC。事实上, Alice 不可能正好有 11.7BTC。假设,她能得到的最小数额比特币的方式是: 6+4+2=12。所以,她可以创建一笔有 3个输入, 2 个输出的交易。第一个输出的面值是 11.7BTC,所有者是 Bob( Bob的比特币地址),第二个输出的面值是 0.3BTC,所有者是 Alice 自己,也就是找零。