bysomeone
bysomeone
## op-rollup #### 交易执行和聚合(Transaction execution and aggregation) * 由验证器节点打包执行二层交易, 对底层数据压缩后批量发布到主链 * 验证器节点可以单个中心化控制, 或者多个采用类POS质押相互监督 * 主链对压缩后的数据只做存储记录, 不会导致状态变化 #### 状态提交(State commitments) * 提交状态数据Merkle root, 涉及账户, 余额, 合约逻辑等, 记录状态变化过程 * 提交区块交易Merkle root, 用于交易存在Merkle...
* 比特元节点,正常同步过程中程序突然假死,通过pprof分析系统协程数量不断上升  * 假死状态时, version, net is_sync, block last_header等命令可正常访问, mempool系列命令, net info卡死 * 手动Ctrl+C停止前台进程,程序没有退出,反而恢复为正常运行状态
--- FAIL: TestBlockChain (0.77s) chain_test.go:774: testLoadBlockBySequence curheight 11 lastseq 12 Block.Height 12 chain_test.go:815: ErrBlockHashNoMatch https://github.com/33cn/chain33/runs/4698256447?check_suite_focus=true
### 测试方法 1. 测试线上主链的区块广播,统计区块内交易是否都在mempool中存在,跑了2w个区块,5%的区块无法在mempool中找到完整的交易列表, 即交易在网络广播中存在丢失情况 2. 本机搭建4节点情况暂未发现丢失情况 ### 相关模块 dht pubsub广播
这个可以考虑放到后期处理,有业务后也会关联到一些查询需求,到时统一做设计 _Originally posted by @bysomeone in https://github.com/33cn/chain33/pull/1075#discussion_r683963281_
### 相关问题 1. 测试发现,chain33在开启debug日志后,由于日志量较大,导致系统性能成倍降低 2. log15库官方维护意愿不是很强,性能存在提升空间 ### 其他日志库 经过调研,比较突出的日志库有zap和zerolog,使用者较多,且官方宣传性能都不错 ### 后续工作 1. 针对chain33使用场景,进行各日志库性能,占用空间,以及通用性等对比,选取最优方案 2. 根据选取的日志库,对chain33日志库进行替换,相关接口及规范调整
此处的各项cost,是否通过metrics进行收集分析会比较好,否则只是在日志在中打印下,不利于大数据分析 _Originally posted by @zhengjunhe in https://github.com/_render_node/MDIzOlB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkMjczMTY4Mjg4OnYy/pull_request_review_threads/discussion_
* 兼容比特元地址配置模式下(框架为base58, evm为16进制), evm地址混合调用处理兼容性 * 增加分叉 ForkEVMMixAddress
- blockchain事件处理限定1000容量 - 比特元节点断网恢复后大批量同步区块,由于区块处理逻辑互斥,区块处理数超过1000后,事件处理流程堵塞 - 获取到互斥锁的区块执行协程,在CheckBlock时依赖blockchain GetBlock事件处理(此时事件处理已经堵塞),导致循环依赖死锁 > 互斥锁1等待协程 ``` 937 @ 0x43b4b6 0x44c36c 0x44c346 0x468305 0x15894cc 0x15894a3 0x15986f4 0x15ab148 0x158fb37 0x159320b 0x46c3a1 # 0x468304 sync.runtime_SemacquireMutex+0x24 /usr/local/go/src/runtime/sema.go:71 # 0x15894cb sync.(*RWMutex).RLock+0x4b...
```go // CheckTx default:,tx.To address points to the contract address func (d *DriverBase) CheckTx(tx *types.Transaction, index int) error { execer := string(tx.Execer) if ExecAddress(execer) != tx.To { return types.ErrToAddrNotSameToExecAddr }...