Web3 智能合约通过数组方式存储更多学生数据

之前的文章 Web3 在Truffle项目中编写出自己的第一个solidity智能合约带大家写了一个相对捡漏的智能合约
在这里插入图片描述
这样 每次 我们set 后 都会将原来的数据覆盖掉了

那么 有些人可能会想 那我们弄个数组 将新的数据全部加到数组里不就行了吗?
这个想法其实就很不错 我们可以基于这个想法 对我们的智能合约进行改造

我们将 StudentStorage.sol 代码整个更改如下

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;contract StudentStorage{//struct是一个结构体struct userData {uint id;string name;uint age;}//基于结构体创建一个动态数组userData[] public userList;function addtList(string memory name,uint age) public returns (uint) {uint cont = userList.length;uint index = cont+1;userList.push(userData(index,name,age));return userList.length;}function queryList() public view returns (userData[] memory) {return userList;}
}

我们先定义了一个struct结构体 其中 是一个对象 对象中有三个字段 数字类型id 字符串类型name 数字类型age
然后呢 我们定义了一个数组 userList 它的类型被限制为userData
就是 之后 你给他添加的每一个下标都必须是这个格式的 id name age 的一个对象
这里 我们定义了他是一个动态数组 就是没有限制它的长度
你也可以这样

下标类型[10] public 数组名称;

这样 他就成一个静态的里 固定为十条数据

然后 我们addtList 接收两个参数 字符串类型的name 和 数字类型的age
然后 我们 就还少一个id
那么 我们这里 做一个自增的逻辑 通过 数组.length 获取到我们userList的长度 然后 将它加一 作为index 传给userData
这样我们三个参数齐全了 就调用push 将数据插入到数组最后面
处理完之后 我们返回数组的长度
然后 我们的queryList只是单纯的把处理好的userList数组返回

然后 我们就可以来试试成功了 先终端执行

truffle migrate

将我们写的合约部署到区块链上

然后 我们在 项目根目录下创建一个文件夹 叫 scripts 下面创建一个test.js
参考内容如下

const Contacts = artifacts.require("StudentStorage.sol")module.exports = async function(callback) {const studentStorage = await Contacts.deployed();await studentStorage.addtList("天山派掌门",11);await studentStorage.addtList("小猫猫",15);await studentStorage.addtList("大猫猫",25);const list = await studentStorage.queryList();console.log(list);callback()
}

我们导入了StudentStorage
这里 不用特意指定contracts
他会自动在contracts 帮你找这个文件
然后 我们Contacts.deployed 初始化这个合约的对象
然后 我们通过这个对象 调用了addtList 连续加了三条数据
然后 调用queryList获取这个数组
然后输出上去

然后 我们终端执行

truffle exec .\scripts\test.js

测试代码
在这里插入图片描述
显然 我们的运行就成功了 数据都被加了进去

然后 我们最神奇的操作在这里
我们再次运行

truffle exec .\scripts\test.js

在这里插入图片描述
他就变成六条了 因为 你第一次运行 他加了三条 第二次运行 他又加了三条

因为我们区块链本身也有存储能力 当然 我们智能合约每次执行操作 包括这个添加数据 他都会消耗燃料

然后 我们在 根目录下的scripts 下 的 test.js中添加一行代码

console.log(await studentStorage.userList(1))

在这里插入图片描述
寻找id为 1 的数据
再次执行

truffle exec .\scripts\test.js

结果就被输出了
在这里插入图片描述

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

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

相关文章

智能汽车的主动悬架工作原理详述

摘要&#xff1a; 本文将详细介绍主动悬架功能原理设计。 主动悬架是车辆上的一种汽车悬架。它使用车载系统来控制车轮相对于底盘或车身的垂直运动&#xff0c;而不是由大弹簧提供的被动悬架&#xff0c;后者的运动完全由路面决定。主动悬架分为两类&#xff1a;真正的主动悬架…

OpenCV 入门教程:轮廓特征和轮廓匹配

OpenCV 入门教程&#xff1a;轮廓特征和轮廓匹配 导语一、轮廓特征二、轮廓匹配三、示例应用3.1 目标识别3.2 形状分析 总结 导语 轮廓特征和轮廓匹配是图像处理中用于描述和比较轮廓的技术。通过提取轮廓的形状、面积、周长等特征&#xff0c;并进行比较和匹配&#xff0c;我…

Android 系统的分区介绍

由于Android系统采用Linux架构&#xff0c;所以Android的系统分区可以类比同样采用Linux架构的操作系统&#xff08;如Windows&#xff09;。 Android系统分区分类 现在一般常见的Android分区方式共有三种&#xff0c;在不同的Android系统版本上会采用不同的分区方式。 1、传…

应用级监控方案Spring Boot Admin

1.简介 Spring Boot Admin为项目常用的监控方式&#xff0c;可以动态的监控服务是否运行和运行的参数&#xff0c;如类的调用情况、流量等。其中分为server与client&#xff1a; server&#xff1a; 提供展示UI与监控服务。client&#xff1a;加入server&#xff0c;被监控的…

遥感云大数据在灾害、水体与湿地领域案例实践及GPT【洪涝灾害、洪水敏感性和风险模拟、河道轮廓监测、地下水变化、红树林遥感制图】

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

换零钱II:Python代码解Java题目

银行现存零钱面值种类动态变化但数量无限&#xff0c;类方法change()完成指定金额的最少零钱个数兑换。 (本笔记适合学透python基本数据结构&#xff0c;熟悉class的基构造&#xff0c;对类内全局变量有一定认的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1…

从CPU缓存结构到原子操作

文章目录 一、CPU缓存结构1.1 CPU的多级缓存1.2 Cache Line 二、写回策略三、缓存一致性问题及解决方案3.1 缓存一致性问题3.2 解决方案3.2.1 总线嗅探3.2.2 事务的串行化3.2.3 MESI 四、原子操作4.1 什么是原子操作4.2 c 标准库的原子类型4.2.1 atomic<T\>4.2.2 is_lock…

这款语音同声翻译软件为你提供智能翻译体验

林娜&#xff1a;嘿&#xff0c;你知道吗&#xff1f;现在有很多语音翻译软件可以帮助我们进行实时的语言翻译&#xff01; 罗伟&#xff1a;真的吗&#xff1f;有什么语音翻译软件呢&#xff1f;能告诉我一些详情吗&#xff1f; 林娜&#xff1a;当然&#xff0c;接下来我将…

SpringBoot+JWT实现单点登录解决方案

一、什么是单点登录? 单点登录是一种统一认证和授权机制&#xff0c;指在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的系统&#xff0c;不需要重新登录验证。 单点登录一般用于互相授信的系统&#xff0c;实现单一位置登录&#xff0c;其他信任的…

AI热潮中的黑马:曾经的显卡制造商是如何跻身AI巨头之列的?

导读&#xff1a;在芯片行业的风云变幻中,英伟达如何从一家显卡制造商翻身成为AI巨头?面对行业迭代速度极快、激烈竞争和显著的高成本特点,英伟达是如何构建属于自己的护城河,又是如何突破技术瓶颈,跑在前列的呢?他们是如何将"摩尔定律"推进到更高阶段创造出属于自…

性能测试工具 Jmeter 测试 Dubbo 接口脚本编写

目录 前言&#xff1a; 1、背景 2、工具准备 3、创建一个 maven 项目&#xff0c;此处可以创建一个 quickstart&#xff0c;参考截图 4、以上配置完毕后&#xff0c;开始撸代码 5、上面那个类是不需要从 jmeter 中获取参数&#xff0c;如果要从 jmeter 中获取相关的参数&…

bio、nio、aio、io多路复用

BIO-同步阻塞IO NIO-同步非阻塞IO 不断的重复发起IO系统调用&#xff0c;这种不断的轮询&#xff0c;将会不断地询问内核&#xff0c;这将占用大量的 CPU 时间&#xff0c;系统资源利用率较低 IO多路复用模型-异步阻塞IO IO多路复用模型&#xff0c;就是通过一种新的系统调用&a…