chendehai
chendehai
由 #1240 手续费问题和平时的交易会因为阶梯手续费的原因被区块链拒绝掉,对于业务方来讲阶梯手续费这块的处理比较麻烦。 例如红包项目会遇到这个阶梯手续费问题导致发送失败,存证项目也会遇到该问题导致发送失败 存证这块会在发送前先保存数据库,失败解析原因后选择重发或者等待区块通顺再发,但是如果该交易包含了evm的手续费而该手续费不正确导致的失败,存证这块又要做额外的错误原因解析处理,而这个错误原因又不是明文的,EVM合约也无指导如何解析,所以目前无解,属于bug 红包项目没有做交易的存储,在区块链波动的情况下就会出现触发阶梯手续费导致手续费不足的情况,使得业务调用区块链失败且只能先人工处理,耗费开发的时间和精力 解决思路: 参考ETH的GasLimit设计,让业务设置一个最大的倍率限制,在实际手续费没超过这个 倍率*交易手续费 的情况下扣除实际手续费,超过了则失败,对于业务方的使用来讲会大大降低处理上链手续费问题的难度,而且也能一定程度的解决evm的手续费问题,减少预估手续费这一步骤,降低调用的复杂度
测试evm合约的时候,遇到交易执行失败的情况,查看区块链浏览器的交易日志里,没有错误的明文信息,且chain33文档里没有错误信息的解析方法,无法得知错误原因,无法定位排查
evm手续费需要另外收取,收取的手续费会并在chain33的手续费里,而这部分手续费目前有两个问题 第一个是手续费很高。 1.刚开始一笔发行单个nft的交易需要0.00351024 BTY,经过一段时间的测试后,一笔发行单个nft的交易手续费需要0.00505639 BTY,表明EVM的手续费会随着这个合约的交易越来越多导致后面的交易手续费会越来越高 2.一笔发行1w个nft的交易需要1.7961148 BTY,表明批量发行NFT的交易手续费会随着发行数量的增多而非线性增长 由于手续费超过10bty后,chain33的mempool会报错手续费太高 ErrTxFeeTooHigh 第一种情况下,这个合约执行了非常多的交易后,手续费会升到单个nft都超过10BTY,这个合约将无法再执行交易 第二种情况下,批量发行的数量会受限于手续费,不利于以后的扩展 第二个是手续费不能用gaslimit模式,而是要预估,那么对业务使用来讲会多了一个步骤,多了一份复杂度,且无法本地预估,需要远程调用,且每次调用的接口里需要加交易数据,交易里又需要加ABI这个比较庞大的数据(大约10kb),多次调用比较耗费带宽资源
手续费设置很低的时候,调用操作合约交易的 EstimateGas jrpc接口获取到的手续费也很低,但是发送上去后,交易执行失败,区块链浏览器查看到的日志报错out of gas,detail: 例: minTxFeeRate=10 maxTxFeeRate=1000 EstimateGas获取到的手续费1116 区块链浏览器结果 http://parallel.bityuan.com/tradeHash?hash=0x54bd824365556e53b5ccf68fea86b03d1e2ca58e8420e9e6728ac6cc1e534b7a&provider=http%3A%2F%2F183.134.99.138%3A8901&execer=token
部署一条新的平行链的时候 日志里会显示 大量ErrTitleNotExist 错误 经过开发人员确认是平行链未进行自共识的情况 我认为这个情况不应该报错,很多业务的平行链就是不需要自共识的,日志里堆满了大量的 ErrTitleNotExist 报错会影响开发人员排查错误,而且这个情况并未在文档里说明,会对新接触的开发者造成疑惑