用 ruby 的 eth.rb 出现了一个错误: insufficient funds for gas

2022-08-27 15:44:48 +08:00
 railsboy

https://github.com/q9f/eth.rb

一直出现

lib/eth/client.rb:485:in `send_command': insufficient funds for gas * price + value (IOError)

在网上搜没有找到解决方案,用 node 是可以的,但是不清楚是啥情况

1102 次点击
所在节点    程序员
12 条回复
railsboy
2022-08-27 15:47:07 +08:00
调用
```
p client.transact_and_wait(controller, "setName", "123", '0xceA7F8364B4eB44c815514331e2d732AEA15b071',sender_key: key, legacy: true, gas_limit: 100000)
```

一直报错...
lovepplforever
2022-08-27 15:52:27 +08:00
gas price 和 gas limit 设置有问题,或者说你的账户余额不足
railsboy
2022-08-27 15:59:19 +08:00
用的生产的 rpc: https://rpc.api.moonbeam.network 是不可以的
但是测试的 rpc: https://rpc.api.moonbase.moonbeam.network
是可以的
railsboy
2022-08-27 16:06:59 +08:00
@lovepplforever 你好,我想问下 gas price 和 gas limit 设置有什么规则吗,分别设置多少呢。余额是充足的,因为我在 typescript 里不用 ruby 的 sdk 是可以的,因为 ruby 的这个作者基本不太回复,所以只能自己看源码来解决问题..
wangshouh
2022-08-27 16:09:27 +08:00
如果 0xcEA7f8364b4eB44c815514331e2D732aEA15B071 这个是你的账户,在 moonscan.io 查询到你的账户中没有余额。
按照以太坊的标准而言,没有办法支付 gas 费用交易肯定失败。当然即使可以支付 gas ,如果你的 gas 设置错误,比如交易耗尽了 gas limit 但仍无法完成也可能造成错误。
如果你可以给出更详细的报错和交易哈希,可能会给出查找到原因
railsboy
2022-08-27 16:18:48 +08:00
@wangshouh 嗨,谢谢你的回复,这是是我的账户:0xceA7F8364B4dB44c815514331e2d731eEA15b075 ,因为在执行过程过报错,所以没有生成 hash ,我可以提供下用 typescript 来写调用合约的代码生成的 hash: https://moonscan.io/tx/0x2b4e4767ae4d9d1a49f2d10458a534811c794a5c51bde0201be92416af8cef5b
railsboy
2022-08-27 16:24:41 +08:00
https://moonscan.io/address/0xceA7F8364B4dB44c815514331e2d731eEA15b075 是成功的,所以我在想是不是 gas limit 和 git price 设置的问题,可能对于 ruby sdk 是有要求的,我该如何设置这两个值呢,不是太懂,谢谢解答
wangshouh
2022-08-27 16:36:12 +08:00
```
p client.transact_and_wait(controller, "setName", "123", '0xceA7F8364B4eB44c815514331e2d732AEA15b071',sender_key: key, legacy: true, gas_limit: 100000)
```
此代码说明你设置 gas_limit 为 100,000 gas
而查询这个合约操作需要 133,792 gas ,gas 不足所以失败。此处将 100000 设置为 133792 或者更高的数字可能成功。
具体可以参考一下我的博客 https://hugo.wongssh.cf/posts/ethereum-gas/
wangshouh
2022-08-27 16:38:54 +08:00
另,你此处使用的 gas 设置方法属于 legacy , 建议换成 EIP1559 ,具体参考我上文给出的博客
railsboy
2022-08-27 16:57:31 +08:00
@wangshouh 好的,我看一下,谢谢
lovepplforever
2022-08-27 16:58:01 +08:00
@wangshouh #9 专业
railsboy
2022-08-27 17:08:08 +08:00
@wangshouh hi ,我刚刚尝试修改
```
'0xceA7F8364B4eB44c815514331e2d732AEA15b071',sender_key: key, legacy: true, gas_limit: 200000)
```
会报一样的错误,然后我又增加了
```
client.max_fee_per_gas = (270 * 1e9).to_i
p client.transact_and_wait(controller, "setName", "123",
```
是可以的,因为我看 tx 中的 Base Fee Per Gas:
是 0.0000001 GLMR (100 Gwei),虽然很模糊不太知道为什么。我会仔细再学习下你的文章,我成功的交易信息是: https://moonscan.io/tx/0xe4c04ee08ab53db4a6eece6018b1060a98a68a4a45920d1a65ae59c2758791df ,非常感谢你的帮助

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/875818

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX