首页 > 解决方案 > 返回值无效,它是否用尽了 Gas?

问题描述

这是我的合同

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

import "./ERC721Tradable.sol";

contract MyContract is ERC721Tradable {
    string apiUrl;

    constructor(address _proxyRegistryAddress)
        ERC721Tradable("MyContract", "MyToken", _proxyRegistryAddress)
    {
        apiUrl = "https://morning-woodland-24255.herokuapp.com/nftart/";
    }

    function baseTokenURI() public view override returns (string memory) {
        return apiUrl;
    }

    function setBaseTokenURI(string memory _apiUrl) public onlyOwner {
        apiUrl = _apiUrl;
    }
}

setBaseTokenURI(string memory _apiUrl)setter 有效,但 setter无效baseTokenURI()

我在 ganache 上部署了我的合约,然后我尝试运行它:

hijackedStack: "Error: Returned values aren't valid, did it run Out of Gas? You might also see this error if you are not using the correct ABI for the contract you are retrieving data from, requesting data from a block number that does not exist, or querying a node which is not fully synced.\n" +
    '    at ABICoder.decodeParametersWith (/Users/luciantarna/.nvm/versions/node/v16.4.2/lib/node_modules/truffle/build/webpack:/node_modules/web3-eth-abi/lib/index.js:297:1)\n' +
    '    at ABICoder.decodeParameters

我尝试重新安装 web3 但这似乎没有帮助并恢复我的迁移,所以我猜我的代码以某种方式被破坏了?

这些是我的依赖

  "dependencies": {
    "@openzeppelin/contracts": "^4.2.0",
    "@truffle/hdwallet-provider": "^1.4.3",
    "dotenv": "^10.0.0",
    "pify": "^5.0.0",
    "web3": "^1.5.1"
  }

编辑:这是因为“view”关键字而发生的。为什么不行?如果我删除它,它会起作用。

编辑 2:我只是想遵循 opensea 教程,但似乎他们的合同不起作用:

https://docs.opensea.io/docs/1-structuring-your-smart-contract

标签: solidity

解决方案


文档

函数的修饰符顺序应该是:

  • 能见度

  • 可变性

  • 虚拟的

  • 覆盖

  • 自定义修饰符

是的:

function balance(uint from) public view override returns (uint)  {
    return balanceOf[from];
}

function shutdown() public onlyOwner {
    selfdestruct(owner);
}

不:

function balance(uint from) public override view returns (uint)  {
    return balanceOf[from];
}

function shutdown() onlyOwner public {
    selfdestruct(owner);
}

推荐阅读