虫哥:PoC生态将会开拓一个基于硬盘容量证明的新大航海时代
2019年4月4日,虫哥作为POC布道者,Hpool矿池创始人,目前就POC生态以及依托POC共识的货币BHD与社区成员展开激烈讨论,以下为全文:
大家都熟知硬件市场有一个摩尔定律,摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。这一定律揭示了信息技术进步的速度,而目前技术范畴而言,机械硬盘在未来五年内不会有很大的提升(代表你的产品在五年内不必更新迭代同样保持竞争力),可参考比特币矿机的更新迭代。希捷和日立两大厂商每季度生产硬盘量是10个EB (1EB=1024PB)目前BHD网络仅仅600PB。
BHD使用的是CPOC共识,相对于POW引起的算力证明大航海时代,CPOC将会开拓一个基于硬盘容量证明的新大航海时代。CPOC使用硬盘来作为共识的主要载体,让更多的普通人可以通过自己的电脑参与到算力的组建中,能够回归到中本聪设计POW的部分初衷,让每个人都能参与到去中心化的革新之路。BHD与此同时继承了BTC的传统,因为BTC在设计之初便是一个服务于多数参与者的系统,即每一个参与的者都可以是一个思考、支持、甚至是颠覆系统的角色。CPOC继承了这种开放性、包容性,伴随着更加亲民的硬盘容量共识,可进一步将加密货币推向向大众视野,让更多的人参与到BHD经济系统的建设。
社区成员:为什么要用硬盘容量来证明呢?证明什么?
虫哥:我们可以理解为由传统的计算哈希值,变为从硬盘里检索哈希值。BTC采用的POW工作量证明,谁提供算力越多,谁获得记账打包权的概率就越大,对POC而言,通过硬盘容量大小来评判谁拥有记账打包的权限,容量大在每次出块的时候,拿到的奖励机会越大。
一个是广义上的pow,熟知的pow是不停大量做工作争夺打包权,poc是先做大量工作再基于工作结果做小量工作争夺打包权,安全性可能还更高,底层逻辑和pow是一样的,所以说poc其实是pow的一种。poc更像是个聪明学生有好的学习方法,传统广义上的pow只会死记硬背。而pow是公认的最安全,所以宣传说poc也是pow,提醒大家不要误以为是交钱挖矿,喝酒挖矿那种共识。
如果说POC共识机制是所有矿工利用算力去寻找一个随机的哈希数来打包区块,那POC共识机制可以简单理解为:通过某种既定的算法产生数量众多的伪随机数,并将这些随机数存入硬盘,在竞争打包区块的时候,只需要通过扫盘(也可以称作读盘)一一随机加以匹配来打包区块
挖矿基本原理:根据你的硬盘空间的大小,需要花费数天或者数周的时间才能生成你独特的测绘(plot)文件。测绘 Plotting 使用的是一种很慢的哈希函数,名叫Shabal ,它和比特币使用的 SHA-256 哈希函数不同。因为 Shabal 哈希非常难计算,我们需要对它进行“预计算”(precompute),然后把结果存储在硬盘空间里。这个过程就叫做测绘,Plotting 。Plotting:当你在Plotting 的时候,也就是为你的硬盘空间创建 plot 文件,你同时会创建一个叫做nonces 的东西。nonces 是通过数据不停重复哈希产生的,这些数据包括你的账户 ID 等等。如果你为 Plotting 分配越多的硬盘空间,那么你就能存储越多的nonces 。一个nonces 最终会包括 8192 个哈希表。这 8192 个哈希表是成对出现的,每对被称为 scoop 。每个 scoop 会被分配一个从 0 到 4095 的标号数字。
在挖矿过程中,你从 0 到 4095 计算每个 scoop 的标号数字。我们假设你最终算出的数字是 42 ,那么你就要去编号为 42 的 scoop 里取出它里面的数据,利用这个数据计算出一个时间,这个时间被称为 deadline 。重复上面的过程,直到每个 scoop 都被你计算过一遍,你再从所有计算出的 deadline 里面,找出代表最短时间的、数值最小的那个 deadline 。这个 deadline 就代表了“自从上一个区块被生成之后,到你生成下一个区块之前,系统必须等待的时间长度(多少秒)。如果在这个时间长度里面,没有人生成下一个区块,那么你就获得了生成一个区块的权利,挖矿的奖励也就归你了”。
社区成员:硬盘资源在整个BHD链中是一个什么样的资源?
虫哥:硬盘是生产资料(30%),BHD也是生产资料(70%),POW里面 矿机+电力都是生产资料。
社区成员:存储检索什么,别人如何进行verify?
虫哥:存储哈希,再通过每一轮区块,开出一个截止时间的随机数,提交最接近答案的获胜。
社区成员:我复述一下,你们看对不对,首先,老师发下了一份考卷,所有的答案都在这里头,大家提前计算,然后把答案你在自己的小本本上,硬盘越大,能记下的越多,然后每个区块出题,大家开始翻小本本找答案,谁先翻到,谁就出块。并且,硬盘越大的,那么记得答案越多,有些人翻不到,临时去算,是根本来不及的。
虫哥:对的,认识很到位
社区成员:我还有这样几个问题:第一,我觉得题库必须足够大,不然的话大家小本本上都有答案,都容易找就拉不开差距,每个块就可能几乎所有的节点都有出块权?
虫哥:目前全网络大概有600PB的算力在保障BHD网络的运行和安全维护,目前是比较初级的阶段,对于去中心化分散程度,可能会不太分散。但是全球拥有硬盘的人数数以亿计,一旦全球硬盘拥有者参与到这个生态中来,BHD的将会成为全球分布最广且最安全的数据库。
社区成员:第二,接受的节点怎么校验谁有这个出块权,比如收到的N个块,以及节点认为自己也有出块权,怎么在自己和别人之间取舍
虫哥:Deadline=DL就是每位参与者的答案。胜利(爆块)条件就是DL数值愈少,赢的机会愈大。每次出题后就会进行倒数,若你是10的DL, 在10秒内无人有更好的DL ,你便是这一题的胜利者(即爆块)。 但若这10秒倒数期间,倒数至第8秒时突然有一位参与者交出4的DL, 4的DL答题者便会立即胜利并得到该爆块。以时间流逝为轴,这个机制加入了Deadline变量 就比如博彩抽奖一样 即使你的题目很小 你仍然有机会
BHD爆块与Deadline解释
Deadline=DL就是每位参与者的答案。胜利(爆块)条件就是DL数值愈少,赢的机会愈大。每次出题后就会进行倒数,若你是10的DL, 在10秒内无人有更好的DL ,你便是这一题的胜利者(即爆块)。 但若这10秒倒数期间,倒数至第8秒时突然有一位参与者交出4的DL, 4的DL答题者便会立即胜利并得到该爆块。
为什么4的DL会在第8秒才交出来?这便是扫盘时间的影响,4的DL在头8秒时扫盘仍未能找出来,但扫盘至第8秒时才找到4的DL并交出去。
所以扫盘时间愈快,也能增加胜利的机会。但最优先的,一定是增大你的答题库,即硬盘容量,使你有更多DL可以交出去。扫盘速度绝非首要考虑的事项,不需为了加快而去买SSD盘,容量少,你再快也没有答案可交。
因为时间会一直倒数,总有考生能交出DL。 即使是1000的DL也有胜利的机会,这使得超长时间卡块这情况基本不可能发生。
社区成员:DL的产生是什么?就是检索到的时间?
虫哥:开出一个答案,后会有一个时间流逝为轴,BHD的出块时间为5分钟,在这5分钟内,所有矿工都可以提交DL,已最匹配随机数的的DL为正确解,矿工即可获得奖励。
社区成员:我的意思要确认一个块,需要证明他确实检索到了这个答案,当然你可以说交付出这个检索的结果,这是一个有效的方法。就相当于pow预先碰撞了很多次hash,然后现在要大家说出其中的一个,对吧
虫哥:在挖矿过程中,你从 0 到4095 计算每个 scoop 的标号数字。我们假设你最终算出的数字是 42 ,那么你就要去编号为 42 的scoop 里取出它里面的数据,利用这个数据计算出一个时间,这个时间被称为 deadline 。重复上面的过程,直到每个 scoop 都被你计算过一遍,你再从所有计算出的 deadline 里面,找出代表最短时间的、数值最小的那个 deadline 。这个 deadline 就代表了“自从上一个区块被生成之后,到你生成下一个区块之前,系统必须等待的时间长度(多少秒)。如果在这个时间长度里面,没有人生成下一个区块,那么你就获得了生成一个区块的权利,挖矿的奖励也就归你了”。
社区成员:计算都是预先作的嘛,每个块周期就是提交答案,每个块之间的差异在于存储了多少答案,答案的信息结构和检索方式,以及检索算法,随机就是说我这次要你交出是第一道题的答案还是第n道题的答案是随机的,当然这个随机数发生器的强健性很重要,硬盘大小决定了我题库答案的大小,算法,存储结构和算力决定了查找答案的快慢,但答案一定可以在预算的范围内,除非你硬盘小不够存,对吗?
虫哥:其他理解到位,但是这个算力说的不对,算力可以理解扫盘时间。
社区成员:扫盘对的,但是扫盘不是硬盘吞吐速率,总容量是存答案的,找答案还是需要用到CPU比对结果,不然不知道扫到的对象对还是不对?
虫哥:对的,这个CPU计算,又要涉及到时空攻击了。
社区成员:还可以用不同的数据结构存储结果,比如把key作为行还是列,对于不同的存储结构中检索速度是不同的,还要设计计算机内的总线带宽,并行机制等等
虫哥:对
社区成员:甚至于我们说所谓的预计算和检索都不是问题。因为一段时间一定有很多节点会达到最优的状态。那么这些节点理论上都在很细微的时间差之内找到答案,并同时对外广播,但由于网络是全球化的,那么就会在不同的节点接收到的区块顺序是不一致的,这时候怎么判断谁先谁后?
虫哥:这个问题之前已经回答过了,参看deadline。我再举个例子,我们看下倒数第一个第二个区块在1分多钟结束,那么如果有些人是3分钟扫完盘 比如你有100T的nonce 但是根本就没有扫完就结束了,你可能才扫了50% 剩余的50%根本没有参与进来
社区成员:我自己就是这个最优的节点,任何时候我都在接受到别人块之前检索到了块,那理论上我都会丢弃别人的块,我假设很多块都在几乎相同的时间内都扫到了答案,这种情况怎么判断?
虫哥:参看之前内容,Deadline=DL就是每位参与者的答案。
社区成员:4的DL是指什么?有哪些输入参数?
虫哥:这个问题前面已经回答过了,在挖矿过程中,你从 0 到 4095 计算每个 scoop 的标号数字。我们假设你最终算出的数字是 42 ,那么你就要去编号为 42 的scoop 里取出它里面的数据,利用这个数据计算出一个时间,这个时间被称为 deadline 。重复上面的过程,直到每个 scoop 都被你计算过一遍,你再从所有计算出的 deadline 里面,找出代表最短时间的、数值最小的那个 deadline 。这个 deadline 就代表了“自从上一个区块被生成之后,到你生成下一个区块之前,系统必须等待的时间长度(多少秒)。如果在这个时间长度里面,没有人生成下一个区块,那么你就获得了生成一个区块的权利,挖矿的奖励也就归你了”
社区成员:好,那么我再问一下,如果根据每次出题,只要执行的就是检索,而不存在计算,那么理论上我一定能够对预算的答案建立索引从而配合最优的检索算法用最快的速度找出我要的答案。不会去一条条挨个去比对
虫哥:举例BHD平均每个区块是5分钟,对应的deadline是300S ,出块有些快特别近 那么我如果再挖矿的时候设置一下deadline的截止时间 我丢弃掉比如说360S以后的答案,我就不用去提交对比了
社区成员:因为预算的结果在我本地,我是可以加工处理的,这个效率非常非常高。可以在全网facebook,twitter,微博,百度贴吧加在一起,查找关键字,在出现这个关键字的1秒内找出来。我的意思如果有100个节点都在第一时间找到答案,开始全网广播,怎么办?
虫哥: nonce是唯一的。重复的nonce只能计算一份就算同时提交 但是因为nonce的问题,这就好比BTC的很多矿机找到了一样的答案
社区成员:节点的代码逻辑都是假设自我是第一个有权出块的,如果这100个第一时间的节点都丢弃别人的块,网络就分区了
虫哥:以最长链为准,也就是说,这个分布式系统中节点更认可哪个包,那个包中的交易就是正确的结果,那么怎么出现这个包呢,当然是通过这个系统中的节点来共同验证,只给定一个超时打包的时间,这个包在这段时间中只要有更多的节点参与认可,那么它就是对的。
社区成员:对于节点出块来说,你可以确定一个值来统一,但是接下来出块的时候,这个值是由出块节点来填写的,我告诉你是几就是几,对于接受节点是没法判断的,长链在btc的pow里是有效的,因为近似算力y额不能保证自己每一次都是最先出块。
虫哥:DL最小的总是最优先,相同的就要看大家的选择 极小,可能性是有的 我以前挖过被孤立的区块。不到deadline指定的时间是不能提交的
社区成员:但对于扫盘来说,假设两个节点几乎一样快,这个几乎是指在200ms以内,因为这个数据大概是跨洲网络的延迟,这就会造成两个节点各自跑下去,网络就分区了
虫哥:同时计算出,不代表DL一样,如果一样也没事 看谁的运气好,就好比BTC和ETH
社区成员:dl来自于节点对自身预算答案检索之后的结果,对不对?所以我问什么情况造成不一样,毕竟节点代码跑在节点上,是可以被任意修改的,而每个节点检索的原始数据是各不相同的,并不进行全网同步,那么接收者怎么校验dl是真实对方计算产生的dl,还是我有意攻击瞎填的,想我谈到了两种情况,第一节点不作恶情况下,分叉的可能性和分叉的收敛问题,第二是节点作恶情况下,接受节点如何去verify。
虫哥:算法提前写入才能参与
社区成员:因为节点的校验不能用接收到块里面给我的意志条件去验证块里面给我的结果,那就变成我告诉你我的答案是三,你来验证的输入也是我给你的,一个1一个2。
虫哥:原始数据可以通过plotterID和nonce还原的 很好验证的
社区成员:nonce怎么计算来的?
虫哥:nonce是随机数根据你的硬盘空间的大小,需要花费数天或者数周的时间才能生成你独特的测绘(plot)文件。测绘 Plotting 使用的是一种很慢的哈希函数,名叫Shabal ,它和比特币使用的 SHA-256 哈希函数不同。因为 Shabal 哈希非常难计算,我们需要对它进行“预计算”(precompute),然后把结果存储在硬盘空间里。这个过程就叫做测绘,Plotting 。
Plotting:当你在Plotting 的时候,也就是为你的硬盘空间创建 plot 文件,你同时会创建一个叫做nonces 的东西。nonces 是通过数据不停重复哈希产生的,这些数据包括你的账户 ID 等等。如果你为 Plotting 分配越多的硬盘空间,那么你就能存储越多的nonces 。一个nonces 最终会包括 8192 个哈希表。这 8192 个哈希表是成对出现的,每对被称为 scoop 。每个 scoop 会被分配一个从 0 到 4095 的标号数字。
社区成员:pow的hash碰撞不代表能做到两个节点一样算出来,因为有两个变量。第一个是节点算力,这是我能算的比别人快。另一个是开始算的起点,选的好起点就是答案,这是运气。
虫哥:和检索的快慢关系不大,能在60s内给出自己的最好结果就好了
社区成员:所以很难造就连续几个块两个节点都同时算出来
虫哥:就算检索(扫盘)慢点 但是你能给出最接近正确答案就好了
社区成员:我想问就是两个节点,一起算出来,怎么办?对于接收同步区块的节点是没有办法区分的
虫哥:相同DL的概率极小,就算遇到了也要以最长链为主。
社区成员:感谢虫哥的耐心讲解
虫哥:欢迎各位关注POC生态,让我们一起回到2012年!