美文网首页
Meta Consensus -- CnF.go开发日志

Meta Consensus -- CnF.go开发日志

作者: 死鱼 | 来源:发表于2022-01-02 14:04 被阅读0次

    【 2021/8/30】

    完成网络发现模块的UDP Resume,组网模块的UDP发现已经完成。

    【 2021/9/1】

    完成组网模块的TCP Resume,网络已经可以自动组建

    【2021/9/3】

    处理TCP UDP粘包问题。用\n分割数据包,包头标记长度,内存缓存断包。

    【2021/9/5】

    完成广播,可缓存可转发。广播缓存有半分钟,如果一个广播半分钟内不能完成全网转达,就会出现风暴问题。生产环境网络需要把这个时间调整到更高。

    【2021/9/9】

    接入levelDB,实现数据层

    【2021/9/10】

    创建基础共识层模块,测试了数据包的转发,供上层使用

    【2021/9/15】

    完成基础共识(PBFT+读写API)

    【2021/9/22】

    完成新结点入网同步

    【2021/9/23】

    独立抽取出privateChat协议数据域,新增一条点对点通讯的单通道。

    【2021/9/24】

    创建业务共识包模块,完成签名与认证


    共识起来了

    【2021/9/26】

    实现CVM的接入,用的otto开源库实现的v8 javascript虚拟机(js大恶人)做底层解析器。但这个版本只能兼容ES5,而且%求模运算都没有实现,所以我在CVM用MC_Mod函数实现了求模。

    【2021/9/28】

    实现CnF的RPC接口,实现了sdk。sdk主要是矿工功能,用于出块和提供提交交易、查询区块、调用共识脚本的接口

    【2021/9/29】

    可以在localhost:sdkport/static上提交新交易了,顺便整理了各个协议字段之间的调用关系


    协议消息关系

    【2021/10/5】

    可以在网页上调用共识脚本了

    【2021/10/6】

    把基础共识提交、基础区块查询、业务区块查询、共识脚本调用几个页面iframe到一个页面里。缝合怪


    缝合页面

    噢,今天装了些新柜子,秀一下桌面吧


    工作桌

    【2021/10/9】

    修复了个业务区块BUG,到达第10个区块就出现乱序问题。后来查底层发现,原来levelDB的排序并不是简单int顺序排序,而是比较暴力的按位排序,于是我把基础区块的编号做成16位16进制,基础区块的第一块在levelDB里面存储名为:bcag-base-block-0000000000000001。空间这么多,应该够用到地球爆炸了吧(千年虫警告)


    这么多个区块

    【2021/10/11】

    流程跑通!


    git commit

    【2021/10/27】

    调整代码结构。把tcp层面的消息封装成go结构模块,年少无知,老javascripter才学会go不到一年,没想到用起来这么方便。

    【2021/11/4】

    田老板说我这调整架构太暴力了,那么多人在研究evm,这个系统相当于否定了evm,得得罪多少人。确实,CnF.go本质上和智能合约也不冲突,只是多加了一层,远远没达到推翻规则的程度,咱就是说做人不能太狂。所以我今天把evm也加进来了,Respect。
    我把geth的1.9.25版本的evm独立抽取了出来,放了在SteveWooo/LonelyEVM项目上。


    evm调用测试器,界面老丑了

    浏览器-sdk-cnf core-业务共识调用-cvm-载入solidity编译码-evm调用。

    【2021/11/12】

    新增了一些evm函数,调试了多次cvm

    【2021/11/15】

    游戏也可以跑起来了
    做了个游戏,攻占区域的游戏。出块结点为上一次参与到游戏中的结点。比较扯,勉强凑个应用出来吧算是


    小游戏,区块链SLG

    【2021/11/18】

    加上打点功能,采集底层数据

    【2021/11/24】

    对基础区块和基础交易进行分离。在这之前一个交易占用一个区块,估计当时脑子有坑才会这么偷懒。现在一个区块对多个交易,开始压测。

    【2021/11/28】

    删除配置文件读写的方式,改用命令行启动。把密钥泄露到系统命令行中,高危操作,但为了批量生成结点压力测试,先这么干吧。乖,答应自己,上线后要用文件放密钥

    【2021/11/30】

    把开发环境迁移到macbook上,然后放到树莓派上跑了次压力测试。就还行吧,250多的TPS,再高就卡硬盘IO了,树莓派加油啊
    听说有人用Fabric改PBFT也在树莓派单点跑250左右,没有去测,实在没劲去跑Fabric了。Fabric背完书就把区块扔进kafak或者拿PBFT或者Raft排序打包,Fabric还有个背书逻辑,用来给业务方写规则去拒绝交易(其实跟扔进evm,跑业务逻辑和算gas差不多)。但CnF.go底层只是给业务方开放更新共识脚本一个功能,其他目前都不太需要开放,没啥需要验证的,跟Fabric还是有很大的区别,但Fabric嘛又不是专门做共识虚拟化这玩意的,要拿他实现个CVM害得从头开始,所以还不如继续做CnF.go,毕竟是从0做起的亲儿子。
    CnF.go改进了下PBFT,同时做了PBFT算法进行对标,那必须在多结点场景下稳赢PBFT,就卡网络IO和CPU性能了,咱就是说树莓派加油啊。(咱拜占庭场景每次都要选主,人家raft一个owner当那么久,tps肯定比我好,俺咋跟人家比)

    垃圾佬:树莓派4B+ 8G版本, tplink千兆交换机,小米3A路由

    【2021/12/9】

    开坑,用CnF做个众测平台玩玩

    【2021/12/10】

    完成前端开发,联调前端对共识脚本的交互(浏览器-业务服务端-cnf sdk-cnf core-业务调用广播-cvm-levelDB-业务矿工-业务打包广播-levelDB。k,好顺利)
    打通前端和ipfs的接入,IPFS有很大的监管问题,任意文件都可上传,包括静态页面。以后业务方可不能直接开放ipfs api给公网,不然黑页随便挂,公安找上家。(流转发+过滤即可)

    【2021/12/13】

    身份申请模块完成咯,咱都是个有身份的人了

    【2021/12/15】

    众测平台全流程跑通:
    身份申请(测试员、企业、专家)、企业发布任务、测试员申请任务、企业授权测试员、测试员提交任务报告、专家评价报告


    任务界面

    (今天整了缸多肉,给大伙瞧瞧)


    肉肉

    【2021/12/24】

    半夜一点突然有个想法,赶紧起床算算。


    半夜算的结论就是不靠谱,没一个对的,广东话说就是大声夹无准

    【2021/12/26】

    从小到大最爱我的奶奶一路走好。
    93岁高寿了,我才26岁,奶奶当年也是新时代女性呢。

    【 2021/12/27】

    PoBR算法构思

    前天晚上1点多想到一个新的共识机制,扛着广州冬天大半夜的魔法攻击也起床验证了一晚上。好笑,根本没算对
    算法通过意向参选+业务属性排行的2阶段提交实现唯一选主,意向参选确保参与共识的结点活跃,不准摸鱼;业务属性排行一方面确保业务参数能够融入共识机制之中,另一方面确保分区容错性,同时还能拿有限的业务属性消耗实现拜占庭容错。排行如果出现并列情况,则通过上一区块Hash作为种子,利用伪随机算法挑选唯一Master,天选之子。
    算法的时间复杂度为O(n^2),与PBFT一致(如果把preprepare阶段当提交的话)。目前已经实现到Testin项目中,但性能比较糟糕,主要是因为业务区块的读写还没做缓存,每次都要辛苦levelDB遍历一次,硬盘您可太累了。
    不过目前对于选主成功后,关闭结点不打包的情况,还没做相应的处理。理应让矿工做一个出块超时限制,对选主成功却不打包的结点进行黑名单处理,这样可以防止恶意结点重复卡块。拜占庭嘛,坏将军啊坏将军。

    【2021/12/30】

    业务性能太差了,1tps就压满了。为解决这个问题,优化了业务矿工的WorldStatus构建,没啥作用,然后我在业务共识脚本里面优化了状态构建,对世界状态进行了缓存就好一些了,有10tps,砸盘子🤯。

    【 2022/1/2】

    业务共识缓存优化

    自从上次对基础共识机制进行优化,即对GetTopBlock进行缓存后,底层基础共识的性能暴增,所以我这次对业务共识模块的读写也进行了缓存优化,优化后性能果然提高了3倍(虽然只有可怜的30tps),慢死了。
    这次测试使用的谁15款macbookpro,8g内存,I5 2.9 GHz,都2022了,我还换不起电脑。5个CnF结点+5个业务矿工结点,暴力测试提交的交易为测试员重复提交报告到一个任务种,当前TPS峰值已经可以扛到30。
    下回拿5台树莓派集群测一下。


    前面是优化前的TPS,后面是优化后。正好没清数据,刚好可以放到一张图上来了

    就这么地吧,得赶紧写篇paper了。博士毕业要紧(害没考核就想这么远?)

    相关文章

      网友评论

          本文标题:Meta Consensus -- CnF.go开发日志

          本文链接:https://www.haomeiwen.com/subject/thezqrtx.html