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

news/2024/11/29 22:48:02/

之前的文章 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.ppmy.cn/news/821908.html

相关文章

基于 TFHE 的 MPC

参考文献&#xff1a; [Can01] Canetti R. Universally composable security: A new paradigm for cryptographic protocols[C]//Proceedings 42nd IEEE Symposium on Foundations of Computer Science. IEEE, 2001: 136-145.[Gol04] Oded Goldreich. Foundations of Cryptogr…

微讲师微课录屏工具升级啦

http://www.weijiangshi.cn 新增加了视频云平台&#xff0c;可以把录制的视频一键微信分享给好友在线查看。并且还可以开启直播模式&#xff0c;把上课授课视频直接分享给其他学生在线学习。

怎么录制微课视频,微课录制技巧

微课如今是越来越流行&#xff0c;逐渐的发展成为一种学生和老师之间交流、学习的一种新方式&#xff0c;那么微课视频怎么录制的呢&#xff1f;录制微课又有哪些技巧呢&#xff1f;下面小编便来分享一些我的经验教大家如何录制微课视频。 第一步、首先我们打开迅捷屏幕录像工具…

给测试小妹做了一个js版屏幕录制工具iREC,她用后竟说喜欢我

副标题&#xff1a;iREC 一款基于浏览器JavaScript的屏幕录制工具 背景 周末&#xff0c;公司里的测试小妹给我发消息说&#xff0c;她昨晚又加班到很晚&#xff0c;原因是研发要求提复杂bug时需要附上具体的操作流程以便详细了解操作过程和复现。最好能提供一个录制视频&…

windows录屏_电脑是怎么录屏的呢?推荐三个录屏实用方法

不管你是大学生还是上班族&#xff0c;在使用电脑的时候都有可能遇到录屏的情况&#xff0c;比如说需要录制一些游戏视频、会议记录视频、录制直播视频等。在电脑上遇到了录屏的方法怎么解决?分享有关录屏的方法&#xff0c;希望可以帮助到你! 方法一、专业录屏软件(推荐指数&…

Win10录屏有哪些方法?快来了解一下录屏技巧

相信很多在自媒体短视频平台投稿的小伙伴们对录屏操作都比较熟悉吧&#xff0c;比如一些视频解说&#xff0c;游戏技巧等分区都离不开录屏的需求。大家都知道如何使用手机的录屏操作。那如果在电脑上Win10录屏有哪些方法呢&#xff1f;因为现在大部分小伙伴用的Win10系统&#…

录屏时怎样才能录到声音?录制声画同步视频的3种方法分享

有很多小伙伴录制完电脑屏幕之后&#xff0c;打开录制好录屏文件&#xff0c;发现只有画面没有声音&#xff0c;这个问题常常会困扰大家。那录屏时怎样才能录制到声音&#xff1f; 其实我们可以选择一款支持录制声音的录屏文件来录制电脑屏幕&#xff0c;今天小编就给大家带来了…

python实现PC界面屏幕录制功能

目录 &#xff11;.硬件介绍 2.实现代码 3.其他实现方式 &#xff11;.硬件介绍 本文实现主要是PC端屏幕的录制功能, PC连接了摄像头 2.实现代码 代码实现PC端控制摄像头录像的时候, 偶然发现如此修改可以进行PC屏幕的录制, 代码如下: # -*- encoding: utf-8 -*-File:came…