【 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】
流程跑通!
【2021/10/27】
调整代码结构。把tcp层面的消息封装成go结构模块,年少无知,老javascripter才学会go不到一年,没想到用起来这么方便。
【2021/11/4】
田老板说我这调整架构太暴力了,那么多人在研究evm,这个系统相当于否定了evm,得得罪多少人。确实,CnF.go本质上和智能合约也不冲突,只是多加了一层,远远没达到推翻规则的程度,咱就是说做人不能太狂。所以我今天把evm也加进来了,Respect。
我把geth的1.9.25版本的evm独立抽取了出来,放了在SteveWooo/LonelyEVM项目上。
浏览器-sdk-cnf core-业务共识调用-cvm-载入solidity编译码-evm调用。
【2021/11/12】
新增了一些evm函数,调试了多次cvm
【2021/11/15】
游戏也可以跑起来了
做了个游戏,攻占区域的游戏。出块结点为上一次参与到游戏中的结点。比较扯,勉强凑个应用出来吧算是
【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肯定比我好,俺咋跟人家比)
【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台树莓派集群测一下。
就这么地吧,得赶紧写篇paper了。博士毕业要紧(害没考核就想这么远?)