solidity学习——mapping
今天我们来学习下映射的用法,具体以网站的注册过程为例。
一、solidity中,映射的关键字为mapping,首先我们先来定义两个mapping, mapping(address =>uint) idmapping和mapping(uint =>string) namemapping。idmapping用来表示地址变量和整型变量的对应关系,在注册过程中用来表示账户地址和注册号;namemapping用来表示整型变量和字符串的对应关系,在注册过程中用来表示注册号和用户名称。
同时将sum的初始值设成1,用来储存注册号,并在后续调用注册函数时累加。用户调用注册函数时,需要传入参数name,同时将合约的部署地址赋值给账户地址(address account =msg.sender;),并通过两个mapping将账户地址和注册号,以及注册号和用户名称对应起来。
调用register之后,我们来测试下,可以通过getIdByAddress来获取注册号,通过getNameById来获取用户姓名。代码如下,
pragma solidity^0.5.0;
contract MapTest{
mapping(address =>uint) idmapping;
mapping(uint =>string) namemapping;
uint public sum=0;
function register(string memory name)public{
address account =msg.sender;
sum++;
idmapping[account]=sum;
namemapping[sum]=name;
}
function getIdByAddress(address add)view public returns(uint){
return idmapping[add];
}
function getNameById(uint id)view public returns(string memory){
return namemapping[id];
}
}
二、在下面图片中,在部署合约Map之后,在1处输入用户姓名点击register,在2处输入账户地址可以得到注册号,在3处输入注册号得到用户姓名,说明合约部署成功。
三、在第六行代码代码和倒数第四行代码中,起先我没有在string 后面加入memory ,程序一直提示报错,提示data location must be “memory” for parameter in function.加入memory之后问题得到解决。
智能推荐
Linux基本命令(CentOS7)
Linux终端基本命令(CentOS7) 文件与目录管理常用命令 重启与关机 用户管理类(user) 创建和删除操作(touch、mkdir、rm) 拷贝和移动文件(cp、mv) 查看文件内容(cat、less、grep) 将文本文件的内容加以排序(sort) 查找文件(find) 查看日志信息(head、tail) 用户权限(chmod) 打包和压缩(tar、zip) yum命令 VI编辑器 进...
Spring Cloud同步场景分布式事务怎样做?试试Seata
作者简介: 陶陶老师 10年后端工作经验, 专注Java、SpringBoot、SpringCloud、分布式系统/微服务、中间件等领域。 公众号:陶陶技术笔记 一、概述 在微服务架构下,虽然我们会尽量避免分布式事务,但是只要业务复杂的情况下这是一个绕不开的问题,如何保证业务数据一致性呢?本文主要介绍同步场景下使用Seata的AT模式来解决一致性问题。 Seata是 阿里巴...
【.Net Core】单元测试项目的迁移
参考 将 .NET Framework 库移植到 .NET Core 从 .NET Framework 移植到 .NET Core 的概述 .NET 可移植性分析器 一、Dotnet-Try-Convert 试着用 dotnet-try-convert 转换项目,出现如下错误 参考GUID列表,应该是不支持测试项目直接使用该工具迁移 Visual Studio项目类型GUID的列表 所以比较遗憾,...
方法执行内存分析
方法执行内存分析 java方法在执行过程中,内存在JVM中是如何分配。如何变化的。 方法只定义不调用,就不运行,不会在JVM中分配分配方法运行所需要的内存空间。 在JVM内存划分中,主要有三个内存空间: 方法区内存,堆内存,栈内存 栈数据结构 栈,stack,是一种数据结构,反映的是数据的存储形态,数据结构是独立的一门学科 方法执行时代码片段和执行过程的内存 方法代码片段存在于方法区当中,属于.c...
设计模式之创建型模式
创建型模式 简单工厂模式 描述:通过工厂对象来决定创建哪一种产品的实例。 方式一:继承 注:子类可以向上转型 (用子类去实例化父类) 方式二:实现接口 注:实例化接口类返回所需产品 情景: 1.一个类不知道它创建的类 2.一个类希望由它的子类来指定它所创建的对象 3.希望使用者不知道究竟是哪个类进行了实例化。(如寄包裹,邮递员不知道内容) 简单工厂模式 注:一个JAVA类文件可以有多各类,但只能有...
猜你喜欢
在页面中添加动态时间
在页面中添加动态时间 在页面中添加动态时间 在页面中添加动态时间 第一次写文章,想写一篇稍微简单的文章,想了又想还是写写最近在网页中添加的动态时间功能(初学者,大神勿喷) {script} {html} 这样就能实现时间动态展示...
RPY_Euler_Quaternion_AngleAxis角度转化:Matlab、Python、Halcon版本
UR协作机器人和Franka机器人导出的位姿为angleVector,三个量表示,在Matlab中angleVector是四个量表示。如果是三个量的表示推荐使用Python的scipy库做转换。 https://en.wikipedia.org/wiki/Axis%E2%80%93angle_representation#Rotation_vector 一、RPY_Euler_Quaternion...
listView或者gridView异步加载图片错乱问题
比如一页正常显示7个item ,当向下滑动一个条目的时候,由于listView的复用原则,如果不异步加载,虽然第一块和第八块指向的是同一个View,但是此时已经刷上了 第8个item 的数据, 而此时的第一块数据 也显示的是第八块数据,只是我们看不到而已,因为此时第一块和第八块指向的是同一块内存。 但是当出现异步加载的时候,如果2个item加载图片 有快有慢 ,所以,慢的一块没加载出来  ...
linux文件处理工具
1、cut:数据切割 以字符为单位进行切割: -d与-f配合使用,直接以某一部分区域进行分割:如图 2、sort:用于字段排序 如图,-u将相邻的重复数据去除 如图,-你,-t,-k的综合使用 3、uniq:去除排序过的文件中重复的行 4、wc: word count...