APPLY(S,TX) > S' or ERROR
这个函数的意思是,检查交易的格式是否正确(即有正确数值)、签名是否有效、随机数是否与发
送者账户的随机数匹配。如是,通过;如否,返回错误。
而在银行系统内定义如下:
APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }
But:
APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR
当Alice和Bob的账上各有50美元时,如果Alice转给Bob20美元,返回结果为Alice账上有30美
元,Bob账上有70美元。
但当Alice和Bob的账上各有50美元时,如果Alice转给Bob70美元,返回结果为错误。
“状态”在比特币系统中是所有已经挖出来但是没有被花费的币的集合(技术上讲,是没有花费的
交易输出,unspent transaction outputs,简称UTXO) ,每一个币都有一个面值和一个所有者
(由一个20字节的地址,实际上是一个密码学公钥所定义)[1]
注释[1]:一个聪明的读者可能会注意到事实上比特币地址是椭圆曲线公钥的哈希,而非公钥本
身。然而事实上从密码学术语角度把公钥哈希本身称为公钥是完全合理的。这是因为比特币密
码学可以被认为是一种定制化的数字签名算法,公钥由椭圆曲线公钥的哈希组成,签名由椭圆
曲线签名连接的椭圆曲线公钥组成,而验证算法包括用作为公钥提供的椭圆曲线公钥哈希来检
查椭圆曲线公钥,以及之后的用椭圆曲线公钥来验证椭圆曲线签名。
TX : Transaction(交易)
TXO : TX output(交易输出):包含一个value值和一段脚本,该脚本规定了谁有权使用这笔交
易(比如需要私钥签名)。
UTXO: Unspent TXO(未花费的交易输出):只有对“尚未使用过”的交易签名才能是有效签
名。
数字货币无法像金属货币(比如黄金)那样,仅靠物理转移即可转移所有权,即当A将一份黄金交
给B后,A必然不再拥有这份黄金。
而A将一份数字货币转给(签名)B后,A仍可以把同一笔交易转给C,因为A掌握私钥,这两份签
名均为有效签名,这就构成了“双花”。因此必须有一种机制来确保每笔交易只能使用一次,即只
有对“尚未使用过”的交易签名才能是有效签名。
UTXO,未花费的交易输出,是比特币交易生成及验证的一个核心概念。因为所有比特币交易构成
了一组链式结构,每笔交易都可以回溯到一个或多个交易的输出,而这些链条的源头实际上都是挖
矿奖励,末尾则是当前未花费的交易输出。所有的未花费的输出即整个比特币网络的UTXO。
因为比特币每一笔新的交易的输入必须是某笔交易未花费的输出,每一笔输入同时也需要上一笔输
出所对应的私钥进行签名,并且每个比特币的节点都会存储当前整个区块链上的UTXO,整个网络
上的节点通过UTXO及签名算法来验证新交易的合法性。这样,节点不需要追溯历史就可以验证新
交易的合法性。
一笔交易包含一个或多个输入,每笔输入包含一个对现有UTXO的引用和一个由关联所有者地址的
私钥产生的密码学签名。而一个或多个输出,每个输出都包含一个被加入到状态里面的新的
UTXO。
状态转换函数APPLY(S,TX) > S'可以就被大致定义为:
1、对每个交易输入:
