solidity智能合约如何判断mapping值为空
mapping值的判断问题
在Java这类编程语言中,我们可以获得Map里面的值然后与null或空来进行判断该key对应的值是否为空。可是在solidity中貌似并没有提供类似的判断。那么我们如果来进行mapping值的判断呢。
mapping值的判断解决方案
如果mapping值里面存的为struct,那么只需在struct内设置一个字段,用来表示改结构体是否已经被赋值。如果mapping的值为地址则可通过与0地址比较来判断是否优质。
前一种情况并不存在面向编程语言中的空指针异常的问题。
以下为示例代码:
pragma solidity ^0.5.10;
contract TestCheckNullStruct{
struct User{
uint name;
bool isUsed;
}
mapping(address => User) users;
mapping(uint => address) addresses;
function isExistEntry(address _addr) public view returns(bool){
return users[_addr].isUsed;
}
function isExistAddress(uint _key) public view returns(bool){
return addresses[_key] != address(0);
}
}
微信公众号
更多职场经验、认知提升等知识分享,请关注微信公众号:程序新视界(ID:ershixiong_see_world)
solidity智能合约如何判断mapping值为空的更多相关文章
- solidity智能合约如何判断地址为0或空
智能合约地址判断 在旧版本中可使用以下代码来进行比较: owner != 0x0 但如果在新版本中使用,则会提示错误信息. 那么,如何正确使用来比较地址是否为空呢. 解决方案 可以使用address( ...
- solidity智能合约中tx.origin的正确使用场景
简介 tx.origin是Solidity的一个全局变量,它遍历整个调用栈并返回最初发送调用(或事务)的帐户的地址.在智能合约中使用此变量进行身份验证会使合约容易受到类似网络钓鱼的攻击. 但针对tx. ...
- 以太坊solidity智能合约-生成随机数
Solidity随机数生成 在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法.其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数. 对于solidity来 ...
- solidity智能合约字节数最大值及缩减字节数
智能合约最大字节数 在Solidity中,EIP 170将contract的最大大小限制为24 KB .因此,如果智能合约内容过多,会导致无法进行发布操作. 减少压缩字节数方法 方法及变量命名 在一定 ...
- solidity智能合约implicit conversion异常
问题场景 在使用^0.5.10版本的solidity时,如果使用this关键字会出现以下问题. 代码: require(tokenContract.balanceOf(this) >= _num ...
- [Contract] Solidity 判断 mapping 值的存在
比如 mapping(address => uint) tester,只需要判断 mapping 是否为默认值 0, tester[msg.sender] == 0 "You can ...
- solidity 智能合约之间的调用
智能合约之间的调用 在区块链上,有些功能往往无法通过一个智能合约完成,此时便会用到智能合约之间的调用.本篇文章带大家通过具体示例来了解一下智能合约之间的调用. 在智能合约的编译过程中,有两种情况:调用 ...
- Solidity智能合约面向对象编程(一、类的创建)
Solidity编写智能合约 1 pragma solidity ^0.4.4;//版本声明 ^代表向上兼容 pragma代表版本声明 solidity 代表开发语言 2 //定义类 3 contra ...
- Solidity 智能合约开发
需要专用浏览器或部署节点支持. Solidity (中文:固态,固体)是一种语法与Javascript相似的高级语言,它为Ethereum虚拟机(EVM)编译代码而设计. Solidity是静态类型的 ...
随机推荐
- HTTP常见响应状态码及解释、常用请求头及解释
1.HTTP常见响应状态码及解释2XX Success(成功状态码) 200 表示从客户端发来的请求在服务器端被正常处理204 该状态码表示服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主 ...
- 关于JVM、JRE、Jdk三者的定义与联系
许多初学者对于java中的JVM.JRE.JDK三者的定义与联系有些模糊,接下来我就根据我的理解来为各位解答一下,希望能帮到正在努力的你们. JVM JVM是Java Virtual Machin ...
- IT兄弟连 HTML5教程 CSS3揭秘 CSS常见的样式属性和值3
5 边框属性 边框属性用于设置一个元素的边框风格.边框宽度.边框颜色,可以一起设置4条边的边框,也可对上边框.右边框.下边框和左边框单独设置.分别介绍如下. a.边框风格属性 可以通过边框风格属性b ...
- 【转载】algorithm、numeric、functional
reference url:http://www.cplusplus.com/reference/algorithm reference url:https://blog.csdn.net/Swust ...
- Linux中长时间运行程序的方法
一.场景: 如果临时有一个命令需要长时间运行,比如 python hello.py ,什么方法能最简便的保证它在后台稳定运行呢?解决方法: 当用户注销(logout)或者网络断开时,终端会收 ...
- ASP.NET页面缓冲
整页缓存<% OutPutCache Duration=5 VaryByParam="none" %>Duration是缓冲时间 参数可以有多个 在varyByPara ...
- 移除 DevExpress 的 XtraForm 标题文字阴影
问题 在使用 DevExpress 开发 WinForm 程序时,我是使用的默认皮肤进行开发.但客户要求标题栏背景色改为蓝色,标题文字颜色改为白色. 改颜色比较简单,参考了 DevExpress Su ...
- Python爬虫,你是否真的了解它?
程序员有时候很难和外行人讲明白自己的工作是什么,甚至有些时候,跟同行的人讲清楚“你是干什么的”也很困难.比如我自己,就对Daivd在搞的语义网一头雾水.所以我打算写一篇博客,讲一下“爬虫工程师”的工作 ...
- 订单结算submit_order.php扣库存,扣账号金额(学生笔记)
<?php header("Content-type: text/html; charset=utf-8"); session_start(); include_once(& ...
- JAVA学习第二步,初级知识框架梳理
回顾往期的学习,才发现已经学习了这么多知识点.这里复制了其他创作者的一些梳理结合自己的梳理.总结了自己在Java学习入门阶段的知识点.笔记自己了也写了详细的两本 第一章 Java面向对象 1-1包的定 ...