-
区块链是去中心化的账本技术:
- 基于交易的账本模式(BTC比特币)
- 隐私保护性较好
- 需要说明币的来源
- 基于账号的账本模式(ETH以太币)
- 基于交易的账本模式(BTC比特币)
-
UTXO(
unspent transaction output)- 全节点维护的一个全局的数据结构
- 方便在服务器内存中快速寻找还未花出去的交易输出,即预防双花攻击
- 定位的要素:
- UTXO集合当中的每个元素要给出产生输出的交易哈希值
- 以及它在这个交易里是第几个输出
- 每个交易可以有多个输入,也可以有多个输出,因此一个交易可能来自多个地址,可能有多个签名
total inputs=total outputs+transaction fee
-
nonce不足以支撑当前剧烈的挖矿活动
- nonce只有4个字节,2^32搜索空间
- 很大概率搜索完了仍找不到符合目标空间的nonce,可以使用coinbase字段的前八个字节扩大搜索空间为2^96(因为block header中的merkle root hash是会随着coinbase交易哈希的改变而改变的)
- 每个发布的区块中都有一个铸币交易
coinbase transaction,即正常交易由input scripts和output scripts组成,而coinbase交易中凭空造币,所以没有input scripts的内容,但有一个coinbase的域,可以随意修改内容,作为extra nonce - 真正挖矿的时候只有两层循环,外层循环调整coinbase域的extra nonce。算出block header里的根哈希值之后,内层循环再调整header里的nonce
-
挖矿过程的数理分析:
- 挖矿过程每次尝试一个nonce可以看作是一次
Bernoulli trial(伯努利实验) - 每一个随机的伯努利实验就构成了一个
Bernoulli process伯努利过程。它的一个性质是:无记忆性 - 因为一个nonce成功的概率很小,需要大量次数的尝试,因此可以用
Poisson process泊松过程来代替伯努利过程 - 画一个坐标轴,纵轴表示概率密度,横轴表示系统出块时间,那么系统出块时间近似是服从指数分布的
- 参考概率密度函数分布,因为指数分布的无记忆性,比如一个矿工miner将来还要挖多长时间,跟过去已经挖了多长时间是没有关系的,也称
progress free - progress free保障了挖矿的公平性,防止了算力强的矿工会获得不成比例的优势
- 挖矿过程每次尝试一个nonce可以看作是一次