V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
railsboy
V2EX  ›  程序员

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

  •  
  •   railsboy · 2022-08-27 15:44:48 +08:00 · 1344 次点击
    这是一个创建于 809 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    一直出现

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

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

    12 条回复
    railsboy
        1
    railsboy  
    OP
       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
        2
    lovepplforever  
       2022-08-27 15:52:27 +08:00
    gas price 和 gas limit 设置有问题,或者说你的账户余额不足
    railsboy
        3
    railsboy  
    OP
       2022-08-27 15:59:19 +08:00
    用的生产的 rpc: https://rpc.api.moonbeam.network 是不可以的
    但是测试的 rpc: https://rpc.api.moonbase.moonbeam.network
    是可以的
    railsboy
        4
    railsboy  
    OP
       2022-08-27 16:06:59 +08:00
    @lovepplforever 你好,我想问下 gas price 和 gas limit 设置有什么规则吗,分别设置多少呢。余额是充足的,因为我在 typescript 里不用 ruby 的 sdk 是可以的,因为 ruby 的这个作者基本不太回复,所以只能自己看源码来解决问题..
    wangshouh
        5
    wangshouh  
       2022-08-27 16:09:27 +08:00
    如果 0xcEA7f8364b4eB44c815514331e2D732aEA15B071 这个是你的账户,在 moonscan.io 查询到你的账户中没有余额。
    按照以太坊的标准而言,没有办法支付 gas 费用交易肯定失败。当然即使可以支付 gas ,如果你的 gas 设置错误,比如交易耗尽了 gas limit 但仍无法完成也可能造成错误。
    如果你可以给出更详细的报错和交易哈希,可能会给出查找到原因
    railsboy
        6
    railsboy  
    OP
       2022-08-27 16:18:48 +08:00
    @wangshouh 嗨,谢谢你的回复,这是是我的账户:0xceA7F8364B4dB44c815514331e2d731eEA15b075 ,因为在执行过程过报错,所以没有生成 hash ,我可以提供下用 typescript 来写调用合约的代码生成的 hash: https://moonscan.io/tx/0x2b4e4767ae4d9d1a49f2d10458a534811c794a5c51bde0201be92416af8cef5b
    railsboy
        7
    railsboy  
    OP
       2022-08-27 16:24:41 +08:00
    https://moonscan.io/address/0xceA7F8364B4dB44c815514331e2d731eEA15b075 是成功的,所以我在想是不是 gas limit 和 git price 设置的问题,可能对于 ruby sdk 是有要求的,我该如何设置这两个值呢,不是太懂,谢谢解答
    wangshouh
        8
    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
        9
    wangshouh  
       2022-08-27 16:38:54 +08:00   ❤️ 1
    另,你此处使用的 gas 设置方法属于 legacy , 建议换成 EIP1559 ,具体参考我上文给出的博客
    railsboy
        10
    railsboy  
    OP
       2022-08-27 16:57:31 +08:00
    @wangshouh 好的,我看一下,谢谢
    lovepplforever
        11
    lovepplforever  
       2022-08-27 16:58:01 +08:00
    @wangshouh #9 专业
    railsboy
        12
    railsboy  
    OP
       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 ,非常感谢你的帮助
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5570 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:36 · PVG 14:36 · LAX 22:36 · JFK 01:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.