为啥这个智能合约功能在使用 web3 提供程序的 Remix IDE 上不起作用?

Posted

技术标签:

【中文标题】为啥这个智能合约功能在使用 web3 提供程序的 Remix IDE 上不起作用?【英文标题】:Why this smart contract function doesn't work on Remix IDE using web3 provider?为什么这个智能合约功能在使用 web3 提供程序的 Remix IDE 上不起作用? 【发布时间】:2020-05-07 02:44:30 【问题描述】:

使用 git,我得到了以太坊源代码并自己构建了它。并与 Remix IDE 的 web3 提供程序环境连接。 在下面的代码中,nums()函数执行得很好,但是add()函数超过了gas限制。

A.sol


pragma solidity >=0.4.21 <0.6.0;

contract A 
    uint num;
    constructor(uint n) public 
        num = n;
    

    function add(uint n) public 
        num += n;
    

    function nums() public view returns (uint) 
        return num;
    


B.sol


pragma solidity >=0.4.21 <0.6.0;

import "./A.sol";

contract B 
    A a;
    constructor(address addr) public 
        a = A(addr);
    

    function add(uint n) public 
        a.add(n);
    

    function nums() public view returns (uint) 
        return a.nums();
    


gas 限制设置为 0x2fefd8000,在 Remix IDE 上运行时设置为 1000000000。但是没有理由为什么gas限制超过800000。 你知道为什么吗?

【问题讨论】:

将 GAS 限制设置为 3000000 ,它在我的最后工作正常。 天啊。是工作。为什么一定要3000000?? Gas Cost 高于整个区块的交易允许无法执行,此类交易会自动失败。 【参考方案1】:

GAS limit设置为3000000,就可以正常使用了。

当气体限制设置为:1000000000

时交易失败的原因

Gas Cost 高于整个区块允许的交易无法执行,此类交易会自动失败。

【讨论】:

以上是关于为啥这个智能合约功能在使用 web3 提供程序的 Remix IDE 上不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

python如何使用web3py与以太坊投资智能合约交互

如何使用 Web3 访问受访问权限保护的智能合约功能?

web3使用web3.js发布并执行智能合约

如何使用 Python 和 web3.py 调用智能合约函数

如何通过 web3 和 infura 提供商集成智能合约

Web3 开发系列教程—创建你的第一个智能合约将你的智能合约与前端集成