当我传递我的智能合约函数数组时,它给我错误说 "invalid number of arguments to solidity function" 为什么?
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" 的函数(参见下面的代码),其中 returns 是一个索引数组。我还有一个 app.js 文件,我在其中使用 promise 调用此函数(参见下面的代码)。但是在控制台中,它给我的错误是 "Invalid arguments to a solidity function"。在 app.js 文件(第二个代码)中,它是 运行 "catch" 部分并给出错误。
在我的合同中,我尝试将 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;
});
任何人都可以告诉我如何将 solidity 数组传递给 javascript promise。
正在运行。
- 删除 "build" 文件夹。
- 重新编译并迁移。
现在应该可以了。
就我而言,我实际上忘记删除一条语句中的评论,这就是我收到此错误的原因。
我有一个名为 ChainList.sol 的智能合约文件,其中我有一个名为 "getArticlesForSale" 的函数(参见下面的代码),其中 returns 是一个索引数组。我还有一个 app.js 文件,我在其中使用 promise 调用此函数(参见下面的代码)。但是在控制台中,它给我的错误是 "Invalid arguments to a solidity function"。在 app.js 文件(第二个代码)中,它是 运行 "catch" 部分并给出错误。
在我的合同中,我尝试将 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;
});
任何人都可以告诉我如何将 solidity 数组传递给 javascript promise。
正在运行。
- 删除 "build" 文件夹。
- 重新编译并迁移。
现在应该可以了。 就我而言,我实际上忘记删除一条语句中的评论,这就是我收到此错误的原因。