区块链原理与技术
  • 区块链原理与技术
  • 比特币密码学基础
    • 密码学简介
    • 哈希函数
    • 数字签名
  • 比特币数据结构
    • 哈希指针
    • 默克尔树
    • 数据结构
  • 比特币交易模型
    • 身份确认
    • 交易服务
  • 比特币共识机制
    • 共识机制
    • 区块链的共识机制
  • 挖矿&脚本
    • 挖矿
    • 比特币脚本
    • 多重签名
  • 区块链分叉
    • 硬分叉与软分叉
  • 问题
  • 比特币匿名性
    • Page 1
  • 以太坊数据结构
    • 以太坊概述
    • 以太坊账户
    • 以太坊状态树
  • 交易树&收据树
    • 以太坊交易树&收据树
    • 布隆过滤器
    • GHOST协议
  • 以太坊:从PoW到PoS
    • 工作量证明PoW(节能)
    • 权益证明PoS
Powered by GitBook
On this page
  • 所有权-签名
  • UTXO交易模型
  • 交易的输入和输出
  1. 比特币交易模型

交易服务

Previous身份确认Next共识机制

Last updated 4 months ago

所有权-签名

仅有转帐数额和转入钱包地址无法证明交易的生成者对转出钱包地址余额有动用的权利。需要用私钥对原始数据进行签名。

通过公钥、签名和转帐信息使用校验算法进行确认。

UTXO交易模型

所有权确认后,接下来就是:

  • 具有可动用的资金

  • 其他交易不会用到同一笔资金

由于缺乏中心化的机构管理,与传统银行中使用账户结余不同,比特币使用了Unspent Transaction Output(UTXO,未花费的交易输出)来确保同一笔资金只出现在一笔交易中。

当一个用户收到一笔 BTC 交易时,会计入UTXO中。A 想要给 B 转账 5 个 BTC,A 的这 5 个 BTC 可能来自于两个UTXO(2 BTC + 3 BTC),因此 A 在转账给 B 时,矿工需要检验的是这两笔UTXO在这笔交易之前有没有被花掉,如果检测已经被花费了,则交易不合法。

UTXO有一个很重要的特性,不可分割,假如 A 有 20 个 BTC,他想转账 5 个 BTC 给 B,那交易会先将 20 个 BTC 作为输入,然后产生两个输出,一个向 B 转账 5 个 BTC,一个返还给 A 剩下的 15 个 BTC,因此,A 又拥有了一笔价值为 15 BTC 的 UTXO;如果单个UTXO不够支付,则可以组合多个形成输入,但总额一定要大于交易额。

矿工验证交易发起者有足够的余额:回顾以前所有的交易,并且找到所有UTXO并相加。

UTXO交易模型基本形式:

版本号 + Input未花费交易UTXO + Output输出地址以及数量 + 锁定时间

安全性:结合所有权确认,每个交易都包含着比特币拥有者的签名,所有交易记录可以溯源,记录着比特币从出生开始的所有主人。

一般每个交易都会包括两个脚本:负责输入的解锁脚本(scriptSig)和负责输出的锁定脚本(scriptPubKey)。输出脚本一般由付款方对交易设置锁定,用来对能动用这笔交易的输出(例如,要花费该交易的输出)的对象(收款方)进行权限控制,例如限制必须是某个公钥的拥有者才能花费这笔交易。认领脚本则用来证明自己可以满足交易输出脚本的锁定条件,即对某个交易的输出(比特币)的拥有权。

其中,OP_DUP 是复制栈顶元素;OP_HASH160 是计算 hash 值;OP_EQUALVERIFY 判断栈顶两元素是否相等;OP_CHECKSIG 判断签名是否合法。这条指令实际上保证了只有 pubKey 的拥有者才能合法引用这个输出。另外一个交易如果要花费这个输出,在引用这个输出的时候,需要提供认领脚本。其中, 是拿 pubKey 对应的私钥对交易(全部交易的输出、输入和脚本)Hash 值进行签名,pubKey 的 Hash 值需要等于 pubKeyHash。

进行交易验证时,会按照先 scriptSig 后 scriptPubKey 的顺序进行依次入栈处理:

交易的输入和输出

比特币无法造假,因为系统会判断每个币的来源是否合法。