继2021年8月5日Casper测试网发布之后,Casper主网1.3.2版本也将于8月12日上线。以下为本次改版带来的技术升级细节。
亮点
- 网络将优先认证使用验证器密钥的节点。
- 修复了获取历史质押信息时出现的问题。
- 根据Quantstamp审计意见进行第二阶段调整。
- RPC节点现在可接收block-identifier参数,以查询历史拍卖信息。
- 已弃用本地密钥,在存储层增加字典密钥API作为单独的密钥空间。
- 假设密钥属于绑定验证器,网络组件将在握手期间进行核对,且相较于未绑定验证器,绑定验证器之间的消息将优先传递。
- 拒绝一个代际中的失效/故障验证器在下个代际中出块。
重要时间节点
主网更新到1.3.2版本的重要里程碑。
重要变化
安全性能与稳健性提升
- 网络将优先认证使用验证器密钥的节点:与其它节点握手期间,可从公钥看出其是验证器或非验证器,验证器享有认证的优先权。
- 通过删除通信的暂停和重启功能,来简化通信机制:暂停功能是之前版本的冗余功能,以应对路由表出现的大幅波动,由于这种情况未出现,所以目前将相关功能删除,来简化通信组件。
- 限定每个节点的输出流量值:在网络带宽有限的条件下,对于所有节点间的通信,验证器将优先于非验证器,以便在有限条件下共识能够延续。可设置config.toml中的max_non_validating_peer_request_rate。本变更是CEP58的一部分,请在附录中查阅设置细节。
- 实现了拒绝失效验证器出块的功能:该功能是CEP43的一部分,当某个代际中出现了失效或故障的验证器,则拒绝这些验证器在下一代际中出块,并用其它验证器取代它们的席位,这样可以降低丢块率以改善活性。
- 出块器中的转账与其它部署现已分开:由于无法在哈希层面区分部署与转账,存在隐患,现已安排块验证器提前验证,以便于出块器中将它们区分开来。
- 修复了升级后的节点在停止和重启后无法重新加入的问题。
功能
- 修复了获取历史质押信息时出现的问题:修复前,用户只能通过RPC的state_get_auction_info方法获取历史余额信息,而无法获取历史质押信息;该问题现已通过选择block-identifier参数返回历史拍卖信息的方式予以修复。
- 修复了最近加入的节点不全被作为区块下载的备用源的问题:当同步线性链时,节点在首次尝试下载区块失败后将停止同步,此时,对于最近加入的节点(尝试加入已升级网络时)不作为区块下载的替代源的问题,已经得到了修复。
事件流与指标
- 将终决签名和部署移至单独的SSE事件流:SSE事件流已一分为三,一个用于最终签名,一个用于部署,第三个用于其他事件。之前的端点将停止工作,请查看终决签名端点URL和部署流变更,此外,已接受的部署其描述也有变化,目前与其它SSE一同包含在DeployAccepted类型中。
- 修复了current_era指标的问题:已修复升级后的current_era指标在首个代际被临时设置为0的问题。
智能合约
- 根据Quantstamp审计意见进行第二阶段调整:调整引入了新的基于合约直接调用者,而非发起部署的用户账户/合约的结构来验证拍卖合约功能。在Rust版本合约API库运行环境模块中新增get_call_stack方法,可验证合约的直接调用者及主机端验证调用者的逻辑。
- 改进了本地密钥的支持:合约头介绍引发了版本控制问题,由于本地密钥和合约在不同的存储层,意味着两个不同版本的合约可能访问同一本地密钥下的数据。作为CEP39的一部分,本地密钥被弃用并在存储层增加了字典密钥API作为单独的密钥空间。合约开发人员将采用字典密钥的方式在单独的密钥空间储存数据。该空间将以URef地址为前缀的格式提供给用户。
- 新增get-account-info客户端命令和RPC:为了查询账户,我们请求全局状态可以通过调用RPC的state_get_item方法,这是1.2.0版本中的非必要功能。在当前1.3.2版本中,客户端新增了RPC的state_get_account_info方法和get-account-info命令来查询账户以精简功能。
存在的问题
目前该版本未发现恶化的、严重的或高优先级的问题。
行动呼吁
请参考下表,了解Casper主网各用户应采取的行动以及注意事项。
工作规划
下表为路线图及正在开展的新版工作以及cspr.live的变化。
附录