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