Solidity中如何判断mapping中某个键是否为空呢?

Solidity中如何判断mapping中某个键是否为空呢?

一.比较标准的做法是建立一个专门和value相关的结构体,用一个布尔型变量来看是否这个key所对应的value被赋过值

代码如下:

pragma solidity ^0.4.19;contract UserTest {struct User{string name;bool isVaild;}mapping(address => User) public users;function addUser(string _name) public returns (string) {if(users[msg.sender].isVaild){return users[msg.sender].name;}users[msg.sender].name = _name;users[msg.sender].isVaild = true;return users[msg.sender].name;}function deleteUser() public returns (bool) {if(users[msg.sender].isVaild){users[msg.sender].name = '';users[msg.sender].isVaild = false;return true;}return false;}function getUser() public constant returns (string, bool) {return (users[msg.sender].name, users[msg.sender].isVaild);}
}

 

二.也可以简单的来看一下value所对应的length来判断这个值是否被赋值过(零值无法判断!)【实际上我在测试过程中这种方式一直报编译错误】

mapping(address => uint) public deposits;
if(deposits[msg.sender].length == 0){// deposit[msg.sender] is empty, do your thing
}

  如果我们不用判断某个变量是否为赋过值后的零值时,我建议用第二种通过length来判断的方法,因为后者将大大减少合约gas的消耗。但实际上我在测试过程中这种方式一直报编译错误

 

参考文章:https://ohyoukillkenny.github.io/blog/2018/01/07/null-in-solidity/

转载于:https://www.cnblogs.com/flyingeagle/p/10119824.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Angular网络请求的封装

很多时候,我很喜欢angular的编码风格,特别是angular支持typescript之后,完整的生命周期,完美的钩子函数,都是别的语言所无法替代的。这里我来说说我自己的网络请求封装,某种意义上来说,angular自…

mac安装了多版本php 卸载,mac 安装多版本PHP

前言相信大家在mac 安装PHP多版本的时候也遇到了很多坑# brew install php56# brew install php70这样安装的话肯定会报错的,因为brew存在软连接这个时候我们第一步:brew unlink php56 或者 brew unlink php70这个步骤是关闭掉PHP的软连接第二步&#x…

新国标电动自行车目录库

浙江:https://xzsp.zjidb.com/api/bicycle 上海:http://www.shbicycle.com/info.asp 北京:http://wfcxjk1.bjjtgl.gov.cn/fjdcml/fjdcListM.jsp 安徽:http://ddch.aqi.ah.cn/index_GB17761-1999.asp 3C查询:http://ccc…

HTML | CSS | JavaScript 常见错误

持续更新 超链接鼠标悬浮后的状态 a:hover 拼写图片文件的路径问题转载于:https://www.cnblogs.com/lcchy/p/10139389.html

隐藏的东西? 您需要HiddenSidesPane

我的甘特图用户之一希望在屏幕上使用尽可能多的空间,并询问是否可以删除滚动条。 但是,如何在没有滚动条的情况下进行导航? 好的,有各种各样的键盘快捷键,当然还有FlexGanttFX支持的普通鼠标拖动,但是大多数…

jQuery的on绑定click和直接绑定click区别

状况之外 在之前的公司并没有遇到这个问题,也就没有深究。直到自己换了现在的公司,刚来第二天就开始写别人写到一半的项目,很无奈,不是原生就是jquery,由于项目急,已经来不及切换框架重新布局,只…

php教程哪个软件好,写php用哪款软件好?解决方法

写php用哪款软件好?现在用php-eclipse,但是感觉不太好用js、html、css的提示功能没有,要装插件,装了很久没装上。想问一下现在开发php哪款软件好大家指导一下,谢谢------解决方案--------------------如果要js、html、…

循环数组对象 php,PHP循环遍历stdClass对象的数组

我有一个在MySQL中运行的查询,它返回一个结果作为stdClass对象,如下所示:array(8){[0]>object(stdClass)#36(1){["color"]>string(7)"#a0a0a0"}[1]>object(stdClass)#35(1){["color"]>string(7)"#e0e0e0"}[2]&…

js实现复制粘贴功能

在项目中使用到复制粘贴功能,虽然网上有很多大牛封装了很多的插件,但是还是想不去使用插件,就像自己来实现这个功能。 初步想法: 1. 获取到需要复制的内容,这里我可以将需要复制的内容放在input或者textarea的value中&…

Thymeleaf与Spring集成(第1部分)

1.引言 本文重点介绍如何将Thymeleaf与Spring框架集成。 这将使我们的MVC Web应用程序能够利用Thymeleaf HTML5模板引擎,而不会丢失任何Spring功能。 数据层使用Spring Data与mongoDB数据库进行交互。 该示例包含在酒店的单页Web应用程序中,从中我们可以…

html注释快捷键

1.选中需要注释的内容--->ctrlshift/ 2.取消注释--->ctrlshift\ 转载于:https://www.cnblogs.com/wyhluckdog/p/10131898.html

Java中转发(Forward)和重定向(Redirect)的区别

从URL来说,转发的地址栏没有发生改变,而重定向则是新的URL从数据共享来说,转发可以共享request域里面的数据,而重定向则不能。效率来说转发效率高,重定向效率低转发一般用来登陆后转发到对应模块, 重定向一…

oracle 老白,老白学编程 - Netdata学习 - numa

Numa 介绍NUMA,即Non-Uniform Memory Access Architecture,非统一内存访问架构。背景传统的SMP中, 所有处理器共享系统总线,当cpu数目增大时, 系统总现竞争就相应增加,会成为系统的瓶颈,所以SMP系统的CPU数…

几个非常实用的JQuery代码片段

jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多)。jQuery使用户能更方便地处理HTML(标准通用标记语言下的一个应用)、events、实现动画效果,并且方便地为网站提供AJAX交互。jQuery还有一…

编码的喜悦……以及Java中的变异测试

多年以来,为源代码编写单元测试一直是一种好习惯。 并且还可以使用测试覆盖率报告来查看测试覆盖了多少代码。 尽管行分支覆盖率报告非常有用,但是它并不能告诉您单元测试的实际效果。 因此,甚至在测试中没有一个断言的情况下,甚至…

错误1083:配置成在该可执行程序中运行的这个服务不能执行该服务 【解决办法】...

一直好用的服务程序,今天遇到这个问题,搜了一下各位给出的解决办法; 1.程序里多添加serviceInstaller组件的,然而我并没改代码,也没重新编译,不是解决我问题的办法; 2.修改注册表的,…

oracle 更改启动内存,Oracle 11gR2修改内存参数后无法启动问题

Microsoft Windows [版本 6.1.7600]版权所有 (c) 2009 Microsoft Corporation。保留所有权利。C:\windows\system32>net start oracleserviceorclOracleServiceORCL 服务正在启动 ......OracleServiceORCL 服务已经启动成功。C:\windows\system32>sqlplus / as sysdbaSQL…

查看所有shell类型

[xfxuexi ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh 具体你使用的是那一个,取决于你的用户配置,可以在/etc/passwd文件查看最后一个字段 [xfxuexi ~]$ head -1 /etc/passwd…

Vue—事件修饰符

Vue事件修饰符 Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节&#xff0c;如&#xff1a; event.preventDefault() 或 event.stopPropagation()。Vue.js通过由点 (.) 表示的指令后缀来调用修饰符。 .stop.prevent.capture.self.once <!-- 阻止单击事件冒泡 -->…

如何安装 Angular CLI 并且检查 CLI 的版本

想在系统中安装 Angular CLI &#xff0c;如何进行安装并且如何检查 CLI 的版本&#xff1f; 可以使用命令&#xff1a; npm install -g angular/cli 进行安装。 使用命令 ng version 来查看 Angular 的 CLI 的版本 转载于:https://www.cnblogs.com/huyuchengus/p/10879166.htm…