区块、交易与账本
随机数
随机数(nonce)是为某个特定目的“只用一次”的数字——系统会调整或递增这个一次性的值,好让某样东西恰好满足条件,或让事情保持有序。这个英文词是“number used once(只用一次的数字)”的缩写。在区块链里,这个术语出现在两个截然不同、又容易混淆的地方,值得把它们分清楚,因为它们干的活儿很不一样。
在工作量证明的挖矿中,随机数是矿工为了找到一个有效区块而不停拨动的那个旋钮。矿工反复改动区块头里的这个数字、再对区块头重新做哈希,搜寻一个落在难度目标之下的指纹。没有捷径:要找到中奖的随机数,唯一的办法就是尝试天文数字般多的取值——这正是挖矿成为一场昂贵的数字抽奖的缘由,也正是它保护链安全的方式。找到的那个幸运随机数随后会被公布,好让任何人都能立刻验证答案无误。
而在账户模型里——以太坊及类似的链所采用——附在每个账户上的,则是一个很不一样的随机数:一个简单的计数器,给该账户的交易编号,一、二、三,依此类推。它的职责是固定某个账户各笔交易的先后顺序,并防止一笔陈旧的、早已花掉的付款被恶意地重新广播、重放。同一个词,两种角色:一个是暴力搜索的变量,另一个是防重放的序列号。
另见