Solidity:在公共方法中返回数组

2024-03-07

我正在尝试创建一个返回数组的公共函数, 这是错误

返回参数类型映射(uint256 => struct ItemList.Item storage ref) 不能隐式转换为预期类型(第一个的类型 返回变量)uint256[]内存。

pragma solidity ^0.5.0;
contract ItemList {
    uint public itemCount = 0;
    mapping(uint256 => Item) public items;

    event ItemCreated (
        uint id,
        string proofdocument
    );

    struct Item {
        uint id;
        string proofdocument;
    }

    constructor() public {
    }

    function createItem(string memory _proofdocument) public {
        itemCount++;
        items[itemCount] = Item(itemCount, _proofdocument);
        emit ItemCreated(itemCount, _proofdocument);
    }

    function getItems() public pure returns(uint256[] memory ) {
        return items; <----------ERROR
    }
}

谢谢安德里亚


您可以通过以下方式获取循环中的每个项目web3.js library

const array = []
for (let i = 0; i < itemCount; itemCount += 1) {
    array.push(contract.getItem(i)) // where getItem do items[I] in solidity
}

或者你可以使用pragma experimental版本:

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

contract ItemList {
    uint public itemCount = 0;

    struct Item {
        uint id;
        string proofdocument;
    }
    Item[] items;

    constructor() public {}

    function createItem(string memory _proofdocument) public {
        itemCount++;
        items.push(Item(itemCount, _proofdocument));
    }

    function getItems() external view returns(Item[] memory) {
        return items;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Solidity:在公共方法中返回数组 的相关文章

  • 智能合约(二)————智能合约进阶

    1 保留关键字 abstract after alias apply auto case catch copyof default define final immutable implements in inline let macro
  • solidity 安全 合约的短地址攻击——这个锅谁来背

    前一段时间 有个用户用说发交易的时候提示地址错误 后来发现发送的地址少了一字节 所以钱包检测发送地址时 会提示错误 当时也没当回事 以为是用户自己搞错了 最近研究solidity的时候 才明白了当时是怎么回事 原来这个用户遇到了短地址攻击
  • Solidity:源文件结构

    Solidity 源文件结构 SPDX License Identifier 如果源代码可用 则可以更好地建立对智能合约的信任 由于提供源代码总是涉及版权方面的法律问题 Solidity编译器鼓励使用机器可读的SPDX License Id
  • 带你玩转以太坊智能合约的”Hello World“

    学习目标 使用solidity语言撰写智能合约 开发前的准备 Ubuntu环境下Atom编辑器安装及使用 安装所需工具 安装nvm 安装node 安装npm 启动testrpc 建立项目 目录结构 新建HelloWorld合约 代码说明 编
  • 区块链:Solidity值类型(布尔Boolens&整型Integer)

    Solidity Types 布尔 Booleans bool 可能的取值为常量值true和false 支持的运算符 逻辑非 逻辑与 逻辑或 等于 不等于 备注 运算符 和 是短路运算符 如f x g y 当f x 为真时 则不会继续执行g
  • 更改对象上的修改子句错误

    我怎样才能 用达夫尼语 陈述 ensures 保证方法返回的对象将是 新的 即不会与其他地方使用的对象相同 尚未 以下代码显示了一个最小的示例 method newArray a array
  • 如何将 uint256 变量转换为 int256 变量?

    我试图打印uint timeStamp通过输入return timeStamp 就在下面return price 从这段代码 pragma solidity 0 6 7 import chainlink contracts src v0 6
  • web3 websocket连接阻止节点进程退出

    我有一个创建 web3 websocket 连接的 Node js 进程 如下所示 web3 new Web3 ws localhost 7545 当进程完成时 我向它发送一个 SIGTERM 它不会退出 而是永远挂起 没有控制台输出 我在
  • Solidity 将十六进制数字转换为十六进制字符串

    我需要存储这种值0xff0000 or 0x00ff08 十六进制颜色表示 在 Solidity 智能合约中 并能够在合约内将其转换为具有相同文本字符的字符串 ff0000 我打算在 RSK 上部署这个智能合约 我的想法是将这些值存储在by
  • Remix 上没有自动完成/代码完成功能?

    我在 Youtube 上观看 Remix 上的教程 他在输入代码时具有自动完成功能 但我没有 有谁知道如何启用它 这将帮助我更轻松地编写代码 但我在任何地方都找不到解决方案 对我来说 只需点击左下角的 设置 按钮并启用 在编辑器中启用代码完
  • Solidity:在公共方法中返回数组

    我正在尝试创建一个返回数组的公共函数 这是错误 返回参数类型映射 uint256 gt struct ItemList Item storage ref 不能隐式转换为预期类型 第一个的类型 返回变量 uint256 内存 pragma s
  • 如何在 Python 和 web3.py 中获取 Solidity 恢复/需要错误原因

    我正在努力抓住要求 交易恢复时出错 但我得到了交易的哈希值 我正在使用web3 py def addParticipants request web3 Web3 HTTPProvider settings Blockchain IP add
  • Hedera 上几乎相同的交易中“gasUsed”值存在巨大差异 - 为什么?

    我注意到所使用的气体量之间存在差异 通过交易几乎是相同的 我正在调用智能合约 连续两次使用相同的参数 两者之间的唯一区别 是我正在设置gasLimit到精确值 由返回eth estimateGas在第一个中 我正在设置gasLimit to
  • 类型错误:无法读取未定义的属性“长度” - 使用安全帽部署时

    我在尝试在安全帽开发链上部署模拟合约时收到以下错误 我正在关注 使用 JavaScript 学习区块链 Solidity 和全栈 Web3 开发 Patrick Collins 在 FreeCodeCamp YT 频道上的 32 小时课程
  • 尚不支持将 struct memory[] 类型内存复制到存储

    如何将新的空父实例添加到下面代码示例中的父实例列表中 我不断得到 UnimplementedFeatureError Copying of type struct Test Child memory memory to storage no
  • 断言和要求之间的区别

    您好 我最近刚刚开始从 Udemy 学习 Solidity 尽管在几乎完成课程后我还没有理解 assert 和 require 之间的区别 当不满足要求时 它们不是都会破坏功能吗 在合约内的 Gas 优化方面 两者相比是否有优势 来自文档
  • Chainlink - 工作没有完成

    我一直在学习 Chainlink API 并尝试构建一个简单的合约 该合约将对 API 进行外部调用 并根据 Oracle 请求的结果向用户收费 例如 如果 API 导致以下结果 我们将向您收取 1 美元费用 true如果结果是 0 25
  • 从 TransferHelper.sol 获取 TransferHelper:TRANSFER_FROM_FAILED。为什么?

    我对坚固性很陌生 我目前收到以下错误TransferHelper TRANSFER FROM FAILED来自safeTransferFrom功能 有人能告诉我为什么吗 这条线在做什么 bool success bytes memory d
  • 如何返回 Solidity 中的结构数组?

    我正在为以太坊智能合约设计一个解决方案bidding 用例包括保留名称 例如 myName 并分配给一个地址 然后 人们可以竞标该名称 在本例中为 myName 可以有多个名称发生多次此类出价 struct Bid address bidO
  • 使用 @nomiclabs/hardhat-waffle 实现装置

    在官方华夫饼文档中 您可能会找到实现装置的下一种方法 import expect from chai import loadFixture deployContract from ethereum waffle import BasicTo

随机推荐