14-挖矿算法
简介
mining 的人越多越民主,这条链一般来说就会越安全。
但是也有人认为,只有ASIC 专用化的矿机 才是 链安全的保证,因为发动攻击的成本变高了。
LiteCoin
bounty hunter 赏金猎人
bug bounty 赏金找bug
memory hard mining puzzle 内存硬挖矿迷雾,用来遏制 ASIC 挖矿机。
LiteCoin 莱特币 就是 memory hard mining puzzle 设计的。
它将 一条hash 链 存在数组中,如果不存在内存中,每一次算都要一条链 算很久,计算量很大,如果存在内存中,计算量就会小很多。这样的设计就是 对 ASIC 不友好的,ASIC assistance。
puzzle :
difficult to solve
but easy to verify
轻结点 由于内存限制,对轻结点不友好。同时 LiteCoin 对GPU 挖矿不友好,目前看它失败了,也产生了它专用的矿机。
冷启动:
早期的时候,恶意 占用 算力资源 恶搞的人会很多,宣传来的人有限,每一个链都会遇到这样的问题。
LiteCoin 只有 少数几个点和 btc 有区别,其他都和 btc 一样的设计。
eth
设计有两个一大一小 数据集:
16M cache;(轻结点)
1G dataset DAG;
16M 的数组中,用seed 生成一个头元素,然后hash 一下 放第二个元素,第二个元素再hash 一下 放第三个元素,这样塞满整个数组,用的时候用 伪随机数顺序 从数组中取数进行运算。
dataset 数组怎么生成呢?
比如第一次从cache读 A这个元素,然后hash算来算去,求出需要 B 这个元素,然后B算出要C… 这样读256个数求hash,放到dataset的 阴影位置,这样组成一个数组。
求解 puzzle 时候,用的是 dataset 中的数据,而不是 cache 中的数据。
先用block header nonce hash,用伪随机数顺序,也是hash 套hash 读64次,一次读两个相邻的元素,从 dataset 中读取128个数。
最后算出一个 hash 值,和 难度门槛 比较一下,是否符合难度要求,如果不符合就改nonce。
ethash 算法伪代码
第一步:生成cache
第二步:利用 cache 生成 dataset 中的第i个元素
可见 是用dataset中这个位置的 hash 值 和cache中利用到的下一个位置的值,算出dataset中下一个位置的值。
第三步:生成dataset
第四步:挖矿与验证
从上面可见mining用到了 dataset 中相邻的两个不相关元素,最后hash(mix)来验证难度是否达标;
而轻结点的验证中,由于轻结点中没有存下 dataset 只存了 cache,就只能 调用 dataset的生成方法 重新构建一遍,最后验证 一下 是否一致。
两个字,非常巧妙。
老的 eth 都是 工作量证明,后来改 权益证明;
预挖矿 pre-mining
预挖矿不是挖矿,是货币发行的时候预留一部分货币 给 eth 的开发者;
pre-sale 指的就是把 这批pre-mining货币 卖掉,用于后续的开发工作,有点像拉风投;
投资人可以去买 pre-sale 风投;
18年时,eth 大部分还是来自 原始的。