目录

我的学习分享

记录精彩的程序人生

【Conflux】关于转账时的gas

gas过大是报错

conflux.web3j.RpcException: RPC error: code = -32602, message = Invalid parameters: tx, data = "transaction gas 20000000000 exceeds the maximum value 100000000"

gas过小时报错

conflux.web3j.RpcException: RPC error: code = -32602, message = Invalid parameters: tx, data = "\"NotEnoughBaseGas { required: 21000, got: 20900 }\""
at conflux.web3j.Account.mustSend(Account.java:111)
at conflux.web3j.Account.mustSend(Account.java:119)
at com.acuilab.bc.cfx.CFXCoin.transfer(CFXCoin.java:76)

image.png


image.png


image.png


总结:

  • 在转账或调用合约函数时,传递的gas是指燃料的数量(可能改为gasCount更贴切一些),gas与gasPrice的乘积表示实际话费的燃料。gasLimit表示燃料数量的下限,指定gas时不能小于这个值,目前在官方conflux java sdk中,默认的gasLimit是21000
  • 转账的时候由于不带任何data,因此默认21000的gas
    如果是调用合约函数,因为要带data,所需gas与data大小有关,可以通过estimate
    GasAndCollateral请求来估算。
  • 外可以指定比gas下限多30%的gas,没用完的部分会退回到账户里,但是超过30%,就会被扣掉了;矿工打包交易的时候会有限打包gas高的,因此通过多指定gas可以加快打包速度。
  • 具体到某个特定的交易,目前是有个estimate的函数可以调用。至于全网的gas fee估算,后续的scan功能中可能会涉及到,之前有过一点讨论。