数据库&界面变动:
- 节点表状态字段【status】增加【锁定状态】值:4 ;
- 节点表加字段: zero_produce_freeze_epoch(零出块锁定时所在结算周期) zero_produce_freeze_duration(零出块锁定结算周期数) low_rate_slash_count(节点零出块次数)
- 前端页面加【锁定状态节点列表】;
- 增加节点【锁定结算周期数】参数;
处理逻辑:
- Agent发现低出块节点,状态置为锁定,处罚指定数量的出块奖励,并记录处罚日志;
- 节点锁定结算周期结束,置为候选中,并记录节点恢复日志;
场景分析:
-
候选中->低出块,则:if(零出块次数==0){罚钱,记日志,状态置为已锁定,零出块次数+=1}
a. 后续低出块时,走5;
b. 后续被举报时,走6; -
候选中->被举报,则:{罚钱,记日志,状态置为退出中,异常=5(因双签被惩罚)}
a. 后续低出块时,走3;
b. 后续被举报时,走4; -
退出中->低出块,则:if(零出块次数==0){罚钱,记日志,状态置为退出中,零出块次数+=1}
a. 后续低出块时,走3;
b. 后续被举报时,走4; -
退出中->被举报,则:{罚钱,记日志,状态置为退出中,异常=5(因双签被惩罚)}
a. 后续低出块时,走3;
b. 后续被举报时,走2; -
已锁定->低出块,则:if(零出块次数==0){罚钱,记日志,状态置为已锁定,零出块次数+=1}
a. 后续低出块时,走5;
b. 后续被举报时,走6; -
已锁定=>被举报,则:{罚钱,记日志,状态置为退出中,异常=5(因双签被惩罚)}
a. 后续低出块时,走3;
b. 后续被举报时,走4; -
节点锁定周期结束,则置为候选中,并记录恢复日志,异常=1(正常), 零出块次数=0
- ARC20交易下载条数设置为30000;
- 兼容跨连合约交易的解析;
- 令牌表erc20_token添加scan_show字段(0-不显示,1-显示),用于控制令牌是否在浏览器显示;
- browser-api模块查询令牌添加scan_show=1过滤,只返回允许显示的令牌;
-
为兼容底层修改节点信息项变为可选,浏览器解码【修改质押输入参数】逻辑做调整;
-
普通交易、通过合约调用PPOS交易、arc20交易排序序号计算规则:交易所在块号*100000+本区块交易列表索引;
-
为兼容最小锁仓释放参数minimumRelease的参数修改提案,对minimumRelease进行入库,但给前端提供的治理参数列表不返回此参数;
-
并入0.13.4.1改动:erc20_token列表添加显示控制字段(0-不显示,1-显示)(默认不显示);
-
修复token发行量&&token持有者百分比计算问题,计算逻辑修改为如下:
5.1. agent端ErcTokenUpdateTask定时更新【erc20_token_address_rel表】的balance && 定时更新 【erc20_token表、erc20_token_address_rel表】的total_supply,以探测地址余额及Token总发行量的变化; 5.2. api端token详情接口处理:
5.2.1. 发行量:取【erc20_token表】的total_supply;
5.2.2. 持有者列表计算规则:
5.2.2.1. 如果【erc20_token_address_rel表】的total_supply大于0,则: 百分比 =(【erc20_token_address_rel表】的balance/【erc20_token_address_rel表】的total_supply) x 100 %
5.2.2.2. 如果【erc20_token_address_rel表】的total_supply等于0,则: 百分比 = 0%
测试方法:
a、发行量更新验证:修改 数据库 erc20_token_address_rel表中的 totalSupply字段为任意错误值,检查定时任务是否会把值更正回来;
b、百分比验证:参考5.2.2;
6. 地址【可用锁仓余额】修正(对应底层锁仓余额bug):【可用锁仓余额】 = 【从特殊节点查询的锁仓余额】 - 【锁仓余额中已经用户质押或委托的金额】
测试方法: 在浏览器查询rp_plan表中的地址余额,核对与底层查询出来的余额是否一致; -
arc20 token交易数校正逻辑:
7.1. Agent启动时,在执行业务逻辑前,从ES统计token的交易信息(合约的交易数、在地址的交易数),并更新到数据库的一下表中:
address
--- 校正字段:token_qty
erc20_token
--- 校正字段: tx_count
erc20_token_address_rel
--- 校正字段:tx_count
network_stat
-- 校正字段:token_qty7.2. ARC20交易列表的记录总数取network_stat的token_qty字段值,解决ES的10000记录数限制导致的总数错误;
- 节点委托奖励比例修改, 需要在下一结算周期生效;
- 新增锁仓治理参数minimumRelease;
- 零出块处罚列表新增预估解锁块高;
- 退出节点新增预估解锁块高;
- agent启动时,检测Redis中是否存在ARC20交易,如果没有,则从ES同步ARC20交易至Redis;
- token持有者列表只显示余额大于0(持有数量大于0)的记录;
- 错误码中英描述修改,与底层一致: http://192.168.9.66/Juzix-Platon-Doc/Dark/blob/develop/03-系统设计/01-架构设计/PlatON底层/内置合约错误码对照表.xlsx;
- 根据特殊节点返回的调账数据,对锁仓相关金额进行调整;
- Redis命名空间移到最外层配置文件中配置 & 新增调账日志存储文件配置:
platon: #Redis命名空间 redis-namespace: browser:${version}:${profile} #调账日志输出文件 account.adjust.log.file: E:\Java\browser-server\browser-agent\build\tmp\adjust.log #同步时的索引查询分页参数配置 paging: erc20-transaction: pageSize: 2000 pageCount: 250