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之后问题得到解决。

版权声明:本文为qinmiaofu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qinmiaofu/article/details/103955988

智能推荐

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} 这样就能实现时间动态展示...

File小应用_计算该目录下所有文件名包含"XXX"文件的大小

有一个目录,计算该目录下所有文件名包含"Dir"文件的大小总和 直接上代码 结果 直接上代码 结果...

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...