如何访问具有数组类型值的 Solidity 映射?

2024-02-17

我定义了一个映射类型的状态变量,例如映射(uint256 => uint256[])。我想将其公开,以便我可以从合同之外访问它。但是编译器报错TypeError: Wrong argument count for function call: 1 arguments given but expected 2.。看起来映射的自动获取器没有返回数组。

例如,ContractB 是要构建的合约,

pragma solidity >=0.5.0 <0.6.0;

contract ContractB {
    mapping(uint256 => uint256[]) public data;

    function getData(uint256 index) public view returns(uint256[] memory) {
        return data[index];
    }

    function add(uint256 index, uint256 value) public {
        data[index].push(value);
    }
}

创建一个测试合约来测试 ContractB,


import "remix_tests.sol"; // this import is automatically injected by Remix.
import "./ContractB.sol";

contract TestContractB {

    function testGetData () public {
        ContractB c = new ContractB();

        c.add(0, 1);
        c.add(0, 2);

        Assert.equal(c.data(0).length, 2, "should have 2 elements"); // There is error in this line
    }
}

不过,我可以在 ContractB 中创建一个返回数组的函数。


不幸的是,Solidity 还不能返回动态数组。

但你可以一一获取元素。为此,您需要将索引传递给 getter:

contract TestContractB {

    function testGetData () public {
        ContractB c = new ContractB();

        c.add(0, 1);
        c.add(0, 2);

        // Assert.equal(c.data(0).length, 2, "should have 2 elements"); // Don't use this
        Assert.equal(c.data(0,0), 1, "First element should be 1"); 
        Assert.equal(c.data(0,1), 2, "Second element should be 2"); 
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问具有数组类型值的 Solidity 映射? 的相关文章

  • 区块链:Solidity值类型(Solidity 字典/映射 Mappings)

    语法 mapping KeyType gt ValueType 字典 映射其实就是一个一对一键值存储关系 age 28 height 172 name wt 同一个映射中 可以有多个相同的值 但是键必须具备唯一性 pragma solidi
  • 深入理解Solidity——创建合约

    Solidity的合约类似于面向对象语言中的类 它们包含存放持久化数据的状态变量和可修改这些变量的函数 调用不同的合约实例上的函数将执行EVM函数调用 从而切换上下文 使得状态变量不可访问 创建合约 Creating Contracts 合
  • Solidity编程开发实例

    Solidity 编程开发实例 Voting 投票 接下来的智能合约教程非常复杂 但展示了很多Solidity的特性 它实现了一个入门的投票合约 当然 电子选举的主要问题是如何赋予投票权给准确的人 并防止操纵 我们不能解决所有的问题 但至少
  • 区块链:Solidity值类型(Solidity 枚举Enums & 结构体Structs)

    枚举Enums 案例 pragma solidity 0 4 4 contract test enum ActionChoices GoLeft GoRight GoStraight SitStill ActionChoices choic
  • 区块链:建立加密代币

    启动testrpc 打开终端 启动testrpc testrpc EthereumJS TestRPC v6 0 3 ganache core 2 0 2 代币合约的基本概念 代币合约扮演的角色相当于银行的角色 使用者在代币合约中 用自己的
  • 带你玩转以太坊智能合约的”Hello World“

    学习目标 使用solidity语言撰写智能合约 开发前的准备 Ubuntu环境下Atom编辑器安装及使用 安装所需工具 安装nvm 安装node 安装npm 启动testrpc 建立项目 目录结构 新建HelloWorld合约 代码说明 编
  • solidity通用模式访问限制

    通用模式 访问限制 访问限制是智能合约的一种通用模式 但你不能限制任何人获取你的智能合约和交易的状态 当然 你可以通过加密来增加读取难度 但是如果你的智能合约需要读取该数据 指加密的数据 其他人也可以读取 你可以通过将合约状态设置为私有来限
  • Solidity 将十六进制数字转换为十六进制字符串

    我需要存储这种值0xff0000 or 0x00ff08 十六进制颜色表示 在 Solidity 智能合约中 并能够在合约内将其转换为具有相同文本字符的字符串 ff0000 我打算在 RSK 上部署这个智能合约 我的想法是将这些值存储在by
  • Solidity如何使用元组(嵌套abi)进行函数签名?

    struct Test uint ui string s function test Test t public emit Log t ui t s 我对ABI有一些了解 我使用实验性 ABIEncoderV2 选项签订了这份合同 总之 这
  • 如何访问具有数组类型值的 Solidity 映射?

    我定义了一个映射类型的状态变量 例如映射 uint256 gt uint256 我想将其公开 以便我可以从合同之外访问它 但是编译器报错TypeError Wrong argument count for function call 1 a
  • web3.js如何搜索所有曾经创建的合约并查看地址

    我是 web3 js 和 Solidity 的新手 我的问题与我们在区块链上搜索的方式有关 如果我们知道合约地址 就很容易搜索特定合约 然而 我们如何使用最初用于创建合约的地址来查找和识别特定类型的合约 例如 我有一个合同 Contract
  • Solidity:在公共方法中返回数组

    我正在尝试创建一个返回数组的公共函数 这是错误 返回参数类型映射 uint256 gt struct ItemList Item storage ref 不能隐式转换为预期类型 第一个的类型 返回变量 uint256 内存 pragma s
  • Solidity v0.6.0。后备功能。需要它们做什么?

    阅读 Solidity v0 6 0 的文档后docs https docs soliditylang org en latest 060 breaking changes html semantic and syntactic chang
  • 通过python3计算uniswap 3.0池(对)地址

    我遇到了一个关于如何计算的问题 新的 uniswap 版本 3 池 早期版本称为pair 地址基于1 https github com Uniswap v3 sdk blob aeb1b09 src utils computePoolAdd
  • 类型错误:无法读取未定义的属性“长度” - 使用安全帽部署时

    我在尝试在安全帽开发链上部署模拟合约时收到以下错误 我正在关注 使用 JavaScript 学习区块链 Solidity 和全栈 Web3 开发 Patrick Collins 在 FreeCodeCamp YT 频道上的 32 小时课程
  • 如何发送wei/eth到合约地址? (使用truffle javascript测试)

    我正在尝试将 wei eth 发送到我的 Solidity 合约的地址 该合约具有外部应付回退功能 我下面的 truffle javascript 测试不会导致 instance address 的余额获得任何 wei instance a
  • NPM 无法在 Windows 上安装“truffle”

    我正在尝试使用 npm 安装 truffle 但我不熟悉 NodeJS 并且不明白为什么 npm 不会安装它 我尝试npm install g truffle在具有管理员权限的 Powershell 中 经过几行输出后 我收到以下错误消息块
  • 尚不支持将 struct memory[] 类型内存复制到存储

    如何将新的空父实例添加到下面代码示例中的父实例列表中 我不断得到 UnimplementedFeatureError Copying of type struct Test Child memory memory to storage no
  • 如何返回 Solidity 中的结构数组?

    我正在为以太坊智能合约设计一个解决方案bidding 用例包括保留名称 例如 myName 并分配给一个地址 然后 人们可以竞标该名称 在本例中为 myName 可以有多个名称发生多次此类出价 struct Bid address bidO
  • 通过python计算uniswap对地址

    我正在尝试计算 离线 即没有 http 请求 Uniswap 对的地址 带有 python web3 和 eth abi 库 基于this https uniswap org docs v2 smart contract integrati

随机推荐

  • GPX 架构验证问题

    我正在构建一个主要使用 GPX 文件作为输入数据的应用程序 鉴于 gpx 文件应该由 gpx 模式定义 如此处定义 http www topografix com gpx asp http www topografix com gpx as
  • PHP:从哈希中解密密码

    因此 我使用以下代码成功将密码加密为密码哈希 class PassHash blowfish private static algo 2a cost parameter private static cost 10 mainly for i
  • 将 Python Pandas 中的列名称从日期时间对象更改为字符串?

    下列的这个食谱 https stackoverflow com questions 28664103 how to transform a time series pandas dataframe using the index attri
  • AngularJS 应用程序身份验证最佳实践

    我开始构建一个 Web 应用程序 用户需要进行身份验证才能访问不同的模块 我过去一直使用 ASP NET MVC 使用 FormsAuthentication 和服务器会话非常容易 因此每次访问时我不必往返数据库即可获取用户角色或任何其他用
  • gradle进程具有不同替换和重命名规则的资源

    我想在我的 gradle 项目中过滤特定的 java 资源 有些文件应该只替换内容 有些文件也应该重命名 并替换不同的内容 我的 gradle java 项目设置是 gt cat build gradle apply plugin java
  • 有没有办法自动关闭 fork() 上的某些句柄?

    背景 我有一个大型的现有进程 它恰好在 AIX 上 所以基本上是 POSIX 语义 它是一个更大系统的一部分 现有流程设计为连续运行 此过程的一个新要求是处理一种新型的复杂输入流 为了降低风险 我决定分叉 执行一个子进程来执行实际的输入处理
  • 从 Terraform 状态文件中获取特定值

    我已经使用 Terraform 部署了我的基础设施 我注意到我在该州有一些有趣的信息 terraform tfstate 我想提取的 terraform 文件 例如 terraform state show packet device wo
  • Winston 3.0 对控制台上的整个输出进行着色

    我正在开发一个 Node js 应用程序 使用babel cli https www npmjs com package babel cli作为 ES6 转译器 我正在使用温斯顿3 0 https www npmjs com package
  • 删除以哈希开头的所有列表元素

    我有一个包含元素的列表 其中一些以 开头 我怎样才能删除这些元素 我试过 content x for x in content 0 if x but content 0 似乎无效 做这个的最好方式是什么 content x for x in
  • 如何在 Rust 可执行文件中嵌入资源?

    这是这个问题在这里 https stackoverflow com questions 10036769 how do you embed resource files in c对 C 提出同样的要求 基本上 有没有比将其转换为巨大的字节数
  • java线程立即更新UI

    我有一个 javaFX 应用程序 可以可视化计算几何算法 算法的执行发生在另一个线程中 我们称之为mainComputingThread 算法可以通过添加 删除 修改形状随时更新 UI 所以代码将如下所示 do some computaio
  • Spark SQL thrift 服务器无法以集群模式运行?

    在 Spark 1 2 0 中 当我尝试以集群模式启动 Spark SQL thrift 服务器时 我得到以下输出 Spark assembly has been built with Hive including Datanucleus
  • 尽管有写权限,scaling_max_freq 仍然无法更改

    我正在尝试更改存储的值in sys devices system cpu cpu0 cpufreq scaling max freq当前设置为 1512000 我正在尝试通过 adb shell 来执行此操作 我输入 su 然后导航到 sy
  • mysql2 gem 安装失败

    我的堆栈如下 CentOS 6 3 安装了 MySQL 5 5 步骤如下http www if not true then false com 2010 install mysql on fedora centos red hat rhel
  • 使用 ASP.NET GenericHandler 时管理 ASP.NET 中的会话超时

    例如 我有一个使用 jQuery 作为客户端框架的 Web 应用程序 现在 大多数页面都通过使用 AJAX 来运行 并通过使用通用处理程序 ashx 与服务器进行通信 现在我有一个问题 我想看看当我的用户会话过期时处理这些请求的最佳解决方案
  • 操纵事件和平移模式

    我正在开发一个用于触摸设备的 WPF 我面临一个奇怪的问题 我的 XAML 结构是
  • 在 Winforms 中检测空闲用户

    如果用户有 5 分钟不活动 我想暂停我的程序 我所说的不活动是指在那段时间没有按下鼠标或键盘 包括在程序之外 有什么出发点吗 在计时器内你可以 p invokeGetLastInputInfo http www pinvoke net de
  • 一次性编写字典?

    我很想在 Python 中拥有一个一次性写入的字典对象 这样 my dict 1 foo my dict 2 bar my dict 1 baz Raises KeyError 我可以想象制作一个简单的食谱 但我想知道是否存在经过深思熟虑的
  • 如何在 win32 中创建具有默认行为的按钮

    我一直在尝试创建一个具有默认行为的按钮 即当用户按 ENTER 时 该按钮将被触发 我使用 WS TABSTOP 样式创建了按钮 并向其发送了带有 BS DEFPUSHBUTTON has WPARAM 参数的 BM SETSTYLE 消息
  • 如何访问具有数组类型值的 Solidity 映射?

    我定义了一个映射类型的状态变量 例如映射 uint256 gt uint256 我想将其公开 以便我可以从合同之外访问它 但是编译器报错TypeError Wrong argument count for function call 1 a