社区首页 >问答首页 >Solidity:使用数组作为ValueType时无法访问映射

Solidity:使用数组作为ValueType时无法访问映射
EN

Ethereum用户
提问于 2018-03-19 14:11:01
回答 1查看 165关注 0票数 0

此合同允许用户在上次发生时签入并存储:

代码语言:javascript
代码运行次数:0
复制
pragma solidity ^0.4.18;

contract DSquare {

    mapping (address => uint) public checkins;

    function checkin() public {
        require(now - checkins[msg.sender] > 1 minutes);

        checkins[msg.sender] = now;
    }
}

在打算存储所有用户签入的第二个版本中,我将ValueType从uint更改为uint[],从而产生了以下契约:

代码语言:javascript
代码运行次数:0
复制
pragma solidity ^0.4.18;

contract DSquare {

    mapping (address => uint[]) public checkins;

    function checkin() public {
        uint[] storage userCheckins = checkins[msg.sender];
        if (userCheckins.length > 0) {
          require(now - userCheckins[userCheckins.length - 1] > 1 minutes);
        }

        userCheckins.push(now);
    }
}

之后我就不能再打电话给get函数了。使用web3,它显示:“未明错误:”签入“的参数数无效。得到1预期的2”。

在工作组生成的JSON文件中,我可以看到它实际上有第二个参数:

代码语言:javascript
代码运行次数:0
复制
"abi": [
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "checkins",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ]

(完整的JSON在这里:https://gist.github.com/saulobrito/ebdd40dd610da23ece1c97c4c912b492)

在Remix上也是一样。这就是第一个合同的表现方式:

在这里,第二个版本:

这是个虫子吗?get函数不应该只依赖于键吗?有什么想法吗?

谢谢!

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-03-19 14:30:17

您的mapping指向动态数组(带有s)。其中每一个都有一个索引。这就是为什么它要求一个加法和一个uint。

您可以手动构建它,它看起来如下所示:

代码语言:javascript
代码运行次数:0
复制
pragma solidity ^0.4.18;

contract DSquare {

    mapping (address => uint[]) public checkins;

    function checkin() public {
        uint[] storage userCheckins = checkins[msg.sender];
        if (userCheckins.length > 0) {
          require(now - userCheckins[userCheckins.length - 1] > 1 minutes);
        }

        userCheckins.push(now);
    }

    function returnCheckinValue(address mapKey, uint arrayRow) public view returns(uint value) {
        return checkins[mapKey][arrayRow];
    }
}

希望能帮上忙。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/43250

复制
相关文章
html中嵌入iframe进行父子页面参数传递[通俗易懂]
1.父页面调用子页面函数,选择iframe的id + contentWindow +子页面的函数名([参数列表])
全栈程序员站长
2022/09/14
3.4K0
将外部窗体程序嵌入到QWidget中
下列代码例子中实现的将窗体名字为Example的窗体嵌入到QWidget中。 #include <QApplication> #include <QWindow> #include <QWidget> #include <windows.h> int main(int argc, char *argv[]) { QApplication a(argc, argv); WId winId = (WId)FindWindow(NULL, L"Example"); QWindow *
Qt君
2023/03/17
1.4K0
将外部窗体程序嵌入到QWidget中
将群晖相册嵌入到Hexo博客中
如何高效便捷的在博客中更新自己的动态是困扰很多人的问题,简单的方案就是另起炉灶在博客重新发布一份,但这种方法耗时耗力,因此不建议这样做。从原po平台同步到博客的某个位置应该是最理想的解决方案。对于照片来说,群晖的相册给我提供了一个来源库,那么如果我想让访客浏览我的近照,那么如何把照片从群晖相册同步到博客中就成了实现这一想法的核心问题。
ZONGLYN
2020/06/29
2K0
将群晖相册嵌入到Hexo博客中
Ajax出错并返回整个页面html的问题
有这样一个例子在thinkPHP视图页面执行一个给评论点赞的功能,为了强化用户体验,一般都采用ajax异步请求后台处理点赞数据,成功后页面执行局部更新后的数据即可。前台通常会用到jquery,通过执行jquery的ajax方法更加简单方便的完成任务请求。
世纪访客
2018/08/02
2K0
Ajax出错并返回整个页面html的问题
如何将Tableau Server中的视图嵌入web页面
Tableau作为可视化数据分析软件中的佼佼者,将数据运算与美观的图表完美地嫁接在一起。它的程序很容易上手,各公司可以用它将大量数据拖放到数字“画布”上,转眼间就能创建好各种图表。创建与共享绝妙的数据可视化内容,Tableau 为您呈上唾手可得的可视化分析能力。它帮助您生动地分析实际存在的任何结构化数据,以在几分钟内生成美观的图表、坐标图、仪表盘与报告。利用 Tableau 简便的拖放式界面,您可以自定义视图、布局、形状、颜色等等,帮助您展现自己的数据视角。另外他还适用于多种数据文件与数据库,数据可扩展性强,不限制您所处理的数据大小。
阿Q说代码
2021/05/13
3.2K0
如何将Tableau Server中的视图嵌入web页面
如何将高德地图JS API嵌入到HTML网页内
先去https://lbs.amap.com/注册一下,直接用淘宝/QQ等OpenID既可实现注册。 没有要求实名制,填写姓名的时候,填写英文名。
繁华是客
2023/03/03
4.9K0
输入URL到渲染出整个页面的过程
DNS解析URL > 浏览器发送请求与服务器交互 > 浏览器对接收到的html页面渲染
小黑同学
2021/02/04
9420
输入URL到渲染出整个页面的过程
如何将html格式动态图表网页嵌入ppt中
前几天魔方学院(其实就是我的公众号交流群啦~_~)的一位群友突然在群里提了一个问题! 看了之前推送的REmap相关内容,结果导出的图表是html格式的动态图,不知道如何将此种格式的图表放在ppt中使用。 这确实很尴尬他呀,你不能直接拿着Rstudio跟客户演示呀(而且还不保证每一台PC上都安装有R语言软件),如果是ppt展示,突然退出来,然后用浏览器打开html文件也是够突兀的。 当然这个情况在r语言中其实很普遍,很多依赖底层js语言编写的二次开发包(比如R语言中的recharts、RERmap、Rchar
数据小磨坊
2018/04/11
33.8K2
如何将html格式动态图表网页嵌入ppt中
C#将引用的dll嵌入到exe文件中
4.实现如下代码, 在窗口构造中实现也可以(在窗体事件中无效,如winform_load)
zls365
2020/08/19
4K0
Vscode新建html页面没有模板「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171893.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/23
1.2K0
Vscode新建html页面没有模板「建议收藏」
Python odoo中嵌入html简单
在odoo中,通过iframe嵌入 html,页面数据则通过controllers获取,使用jinja2模板传值渲染
py3study
2020/01/15
2.2K0
Python odoo中嵌入html简单
在 HTML 中嵌入 PHP 代码
PHP 天生对 Web 和 HTML 友好,在 PHP 诞生之初,主要用于在 Web 1.0 中构建个人主页,那个时候,PHP 代表的是 Personal Home Page,随着 Web 互联网的发展,在 Web 2.0 时代,PHP 进一步进化为 PHP:Hypertext Preprocessor,即超文本处理器,而 HTML 则是 HyperText Markup Language 的缩写,也就是超文本标记语言。
学院君
2020/05/28
6.3K0
从输入 URL 到渲染页面整个过程 梳理篇
这意味着当前页面即将要被替换成新的页面,不过在这个流程继续之前,浏览器还给了当前页面一次执行 beforeunload 事件的机会,beforeunload 事件允许页面在退出之前执行一些数据清理操作,还可以询问用户是否要离开当前页面,比如当前页面可能有未提交完成的表单等情况,因此用户可以通过 beforeunload 事件来取消导航,让浏览器不再执行任何后续工作。
玖柒的小窝
2021/11/07
7590
从输入 URL 到渲染页面整个过程 梳理篇
NodeJs 中的 HTML 模板
HTML 模板是一种允许我们创建基本 HTML 结构并使用占位符根据从 JSON 文件或数据库中检索到的数据动态生成内容的技术。
海拥
2023/03/09
6.5K0
我们是如何将 Cordova 应用嵌入到 React Native 中
重写一个应用是一件简单的事,可是演进一个应用则是一件复杂的工作。 过去的一年多里,我在工作上的主要职责是:手机 APP 开发。日常主要是编写基于 Ionic 和 Angular 的混合应用,并想方设法地帮助客户将之与 React Native 相结合。在完成了嵌入 WebView 后,重写插件等一系列工作后,便想记录一下这个过程中遇到的坑。 平滑地演进 如我在开头所说,在有足够人力和物力的情况下,最好的方式就是在重写应用。 一来,应用在其生命周期里,经过了不同的开发人员、不同的业务变更,必然有大量的遗留代码
Phodal
2018/01/29
4.9K0
点击加载更多

相似问题

将整个页面重定向到vue.js中的text/html

10

将swf嵌入到html页面

12

如何将整个html文件嵌入到JS中

115

如何将代码作为HTML嵌入到vue.js中

10

将整个HTML页面存储到jQuery变量中

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文