繁体   English   中英

当我传递智能合约函数的数组时,它给我的错误是:“实体函数的参数数量无效”,为什么?

[英]When I am passing array of my smart contract function it is giving me errors saying “invalid number of arguments to solidity function” Why?

我有一个名为ChainList.sol的智能合约文件,其中有一个名为“ getArticlesForSale”的函数(请参见下面的代码),该函数返回一个索引数组。 我还有一个app.js文件,我在其中使用promise调用此函数(请参见以下代码)。 但是在控制台中,这给了我一个错误,提示“无效的实参函数参数”。 在app.js文件(第二个代码)中,它正在运行“捕获”部分并给出错误。

在我的合同中,我曾尝试将uint转换为“ uint32”,前提是javascript无法可靠地读取大整数,即“ uint256”。 但是仍然出现此错误。

// ChainList.sol file
// fetch and return all article IDs which are still for sale
  function getArticlesForSale() public view returns (uint[] memory) {
    // prepare an output array
    uint[] memory articleIds = new uint[](articleCounter);

    uint numberOfArticlesForSale = 0;
    // iterate over all the articles
    for (uint i = 1; i <= articleCounter; i++) {
      if (articles[i].buyer == address(0)) {
        articleIds[numberOfArticlesForSale] = articles[i].id;
        numberOfArticlesForSale++;
      }
    }

    // copying article ids into smaller forSale array
    uint[] memory forSale = new uint[](numberOfArticlesForSale);

    for (uint j = 0; j < numberOfArticlesForSale; j++) {
      forSale[j] = articleIds[j];
    }

    return forSale;
  }
// app.js file, interacting with my smart contract
App.contracts.ChainList.deployed().then(function(instance){
      chainListInstance = instance;
      return instance.getArticlesForSale();
    }).then(function(articleIds){

      // retrieve the article placeholder and clear it
      $('#articlesRow').empty();

      for (var i = 0; i < articleIds.length; i++) {
        var articleId = articleIds[i];
        chainListInstance.articles(articleId.toNumber()).then(function(article){
          // 0 is id, 1 is seller, 3 is name, 4 is description, 5 is price
          App.displayArticle(article[0], article[1], article[3], article[4], article[5]);
        });
      }

      App.loading = false;

    }).catch(function(err){
      console.error(err.message);
      App.loading = false;
    });

谁能告诉我如何将一系列坚固性传递给JavaScript Promise。

现在正在工作。

  • 删除“ build”文件夹。
  • 重新编译并迁移。

现在应该可以工作了。 就我而言,我实际上忘了在一条语句中删除注释,这就是为什么我得到此错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM