arrays - Solidity 被调用的函数应该是付费的,但它是 View 函数

标签 arrays mapping solidity

如果我向映射数组添加一项,我会收到此错误:如果您发送值,则被调用的函数应该是可支付的,并且您发送的值应小于当前余额,

但我的功能正在查看。我无法付款。我似乎也没有在那里添加太多逻辑。我做错了什么?

    mapping(address => uint256[]) public owns;

function checkInventory() public view returns (uint256[] memory) {
        require(owns[msg.sender].length != 0, "Inventory is empty");
        uint256[] memory inventory;
        for (uint256 i = 0; i < owns[msg.sender].length; i++) {
            inventory[i] = owns[msg.sender][i];
        }
        return (inventory);
    }

enter image description here

最佳答案

在这种情况下,恢复消息对于刚接触该语言的人来说有点误导。您遇到的真正问题是您收到索引越界错误。

您应该用足够的长度初始化您的库存。

function checkInventory() public view returns (uint256[] memory) {
        require(owns[msg.sender].length != 0, "Inventory is empty");
        uint256[] memory inventory = new uint256[](owns[msg.sender].length); // here is the problem
        for (uint256 i = 0; i < owns[msg.sender].length; i++) {
            inventory[i] = owns[msg.sender][i];
        }
        return (inventory);
    }

关于arrays - Solidity 被调用的函数应该是付费的,但它是 View 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71813049/

相关文章:

c - 在 C 中初始化动态 union 数组

java - 异步任务需要从 doInBackground 返回非数组对象,但找到对象数组

php - 将数组分解成多维数组(parent->child->sub-child)

jdbc - 为 JDBC elasticsearch River 设置映射

javascript - 错误: Returned values aren't valid when trying to call function

python - 使用 web3.py 计算 token 对的 LP 地址

arrays - 如何使用二维数组来存储类?

java - @Mapping @Mapper 错误 不存在源参数

javascript - 使用 OpenLayers,删除标记层和弹出窗口的正确方法是什么?

algorithm - 我怎样才能稳定地返回一个结构数组?