Venus功能Venus是Filecoin网络的一个Golang语言版本的客户端实现。其主要具有三大服务:区块链服务。主要是出块,执行区块内交易的执行,区块同步,交易同步,账户状态存储,矿工存储算力记录,矿工算力证明记录,市场订单数据存储等。算力服务。主要负责Filecoin网络中文件的存储
Venus功能
Venus是Filecoin网络的一个Golang语言版本的客户端实现。其主要具有三大服务:
- 区块链服务。主要是出块,执行区块内交易的执行,区块同步,交易同步,账户状态存储,矿工存储算力记录,矿工算力证明记录,市场订单数据存储等。
- 算力服务。主要负责Filecoin网络中文件的存储,文件复制证明的计算,文件存储证明的计算。
- 订单市场服务。主要负责文件数据存储订单的管理,文件数据索引订单的管理,支付通道的管理等。
服务架构
所以区块链系统都需要解决谁有权利出块,没有按照规定出块的人如何惩罚,出块人如何从交易池中获取交易,并验证交易(预执行并获取执行后的状态根 or 只是进行交易的语法检查),出块后如何把区块链同步给别的矿工,别的矿工接受到区块后如何进行验证区块合法性(里面交易的合法性?出块权的合法性?),如果区块是合法的,如何更新现有账户状态,对区块进行存储;然后还需要对出块矿工进行奖励;从上面就可以看出来,区块链以区块(交易的集合)为核心进行状态切换的,这里面除了区块的打包,同步,存储以外,还需要一些相对独立的功能组件作为辅助,那就是区块里面的交易如何执行(VM),出块权利的选择(POW or POS)。
- Leader选择问题(venus-miner解决,但是依赖Drand,cluster)
- Leader检验问题(当前是epoch是哪个?当前epoch是否是这个leader?,依赖venus,drand,cluster)
- 如何出块(消息选择,winningPost获取,消息预执行?消息合法性检查?消息广播?依赖venus)
- 如何检验别人出的块是否合法(消息执行结果检查?是否该这个leader出块?winningPost是否合法?依赖venus,drand,cluster)
- 选择分叉链的方法(不依赖别的服务)
- 挖矿奖励如何发放(reward actor的执行?更新账户的余额?依赖venus,因为账户的信息都记录在vneus服务中)
- 块如何写到底层数据库(miner完全不负责,全部靠venus服务)
- 区块同步(miner完全不负责,全部靠venus服务)
- 区块消息的执行(miner也不负责,全靠venus服务,但是会把计算结果,也即是父tipset的state root和receipt root返回给miner,miner需要这些数据放进新块重。)