Meta Consensus -- CnF.go开发日志

【 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了。博士毕业要紧(害没考核就想这么远?)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容