Web3 在Truffle项目中编写出自己的第一个solidity智能合约

news2024/11/25 12:24:14

好 上文Web3本地搭建truffle智能合约开发环境我们在本地搭起了一个 Truffle 项目
然后 我们说明项目中文件的用途

然后 我们还是通过ganache模拟一个本地的区块链环境
在这里插入图片描述
然后打开我们搭建的Truffle项目
首先 我们第一个要看的肯定是truffle-config.js
肯定要先配好连接的环境 我们这里直接连本地

我们打开它 然后 在 module.exports 下找到 networks
它下面这里有一个development
在这里插入图片描述
将这个内容的注释 去掉 放出来
在这里插入图片描述
很明显 上面的信息 127.0.0.1 ip 8545端口 这就是指向了我们ganache启动的一个本地服务了

所以 将来就是 我们一部署 就会往我们本地的区块链去发布了

然后 下面 我们会发现一些更高级的配置
在这里插入图片描述这里这个 gas 可以配置限制我们每次处理业务数额
在这里插入图片描述
然后就是下面这个from 我们之前说过 部署智能合约到链上 也会有旷工这个操作 那么燃料由哪个账号扣除 就是他的作用
如果你不设置 他会默认取读你环境中的第一个账号
在这里插入图片描述
然后 这里还给了我们一个远端的地址
在这里插入图片描述
这里的话 我们目前只是做一个开发环境处理 所以先不管
然后 我们这里 还有一个优化配置
在这里插入图片描述
这个位置 我们也是 直接给它放出来就好了
在这里插入图片描述
然后 我们在 MetaMask 导入ganache提供的第一个账号
我们要注意他 ETH的变化
在这里插入图片描述
配置文件写好之后 就来到我们的核心功能 在 contracts 目录下创建一个文件 叫 StudentStorage.sol
我们先来写一个简单的功能
我们在这里 写两个接口 一个可以存一个学生的名字和年龄 另一个接口读取我们存进去的信息
然后 我们solidity 的第一句话 就直接抄了
参考代码如下

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

首先 如果你的VS Code 没装solidity的工具 你放进去 肯定都是黑白的
在这里插入图片描述
我们可以在这个插件库中找到solidity的管理工具
在这里插入图片描述
这样 我们代码就充满色彩了
在这里插入图片描述
然后 我们来看看这个代码的含义
第一句的意思是 我们整个solidity开发 遵循的是什么协议
是 GPL 还是 MIT 协议
比如 我们将代码往开源工具上传 总还是要写一个协议的
因为智能合约是公开透明的 那么 我们就要说清楚 是直接别人就可以用 还是别人改了之后可以使用
在这里插入图片描述
第二句话是限定solidity编辑器版本的
在这里插入图片描述
因为 solidity 语言本身也是在不断成长的 就比如 你拿vue3的代码运行在IE上 那直接就没了
所以 就相当于一个版本的兼容

solidity的话 结合了 JavaScript python C语言 但大体会更近于js 或者是 和 TypeScript很像
所以 也不是直接就可以搞定 对js使用者来说相对友好 但肯定还是很多要重学的

然后 我们 StudentStorage.sol 代码编写如下

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

contract StudentStorage{
    // 创建两个变量
    //用户年龄
    uint userAge;
    //用户名
    string userName;
    
    function setData(uint age,string memory name) public {
        userAge = age;
        userName = name;
    }
    /*
      view:视图函数  只访问数据 不修改数据
      pure:既不访问数据也不修改数据
    */
    function getData() public view returns (uint,string memory) {
        return (userAge,userName);
    }
}

前两行就不多说了 然后 contract 包裹全局的名称必须和我们文件的名称相同 例如 我这里叫StudentStorage
然后 我们定义了两个变量 userAge和userName 用户名和用户名称 这个变量类型你可以自己去看一下 或者 你就记得
uint数字
string字符串
都想
然后 我们定义了一个函数 setData
这里 我们name参数 涉及到一个关键字 memory 这个主要是我们这个值的存储位置 首先 基本类型 例如我们uint的数字类型就不需要声明
具体讲解如下图
在这里插入图片描述
首先我们要知道 如果要放在链上 肯定是要消耗燃料的

然后 后面还有一个public 这个主要是声明方法的作用域 很多后端数据管理的语言都会涉及到这个概念
在这里插入图片描述
然后 我们getData涉及到两个概念 view的作用在上面已经注释过了 这个你声明出来是可以降低燃料消耗的
然后 returns 和很多后端语言一样 我们声明一个方法 要声明清楚他的返回类型
我们这里声明返回两个 一个uint 数字类型 一个string memory字符串类型
对应我们的 userAge userName

可能有些人会想 那pure到底有什么用
首先 可能比如 我们 写一个函数 参数传 X Y 然后计算出差 那么 我们这个函数只是做个计算 变量全是外面给的 算好还给外面 这个既不修改 也不访问我们内部的数据 自然是非常适合用 pure 这样就减少了没必要消耗的燃料

我们在智能合约中的所有操作都会消耗gas 所以还是要写的规范一点

然后 我们以管理员身份运行项目终端
那么 我们写完了 就可以在项目终端执行

truffle compile

我们的项目环境就起来了
在这里插入图片描述
这里也会明显多出一个目录
在这里插入图片描述
好啦 那这样 至少现在项目是跑起来了 测试的话 我们下文继续

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UDP 协议【传输层协议】

文章目录 1. 传输层1.1 TCP 与 UDP 2. 端口号2.1 端口号标识进程2.2 通过IP地址、端口号、协议号进行通信识别2.3 协议号2.4 端口号的范围2.5 常用命令netstatiostatpidof 2.6 存疑 3. UDP 协议3.1 地位3.2 报头的分离和交付3.3 UDP 报文的格式3.4 UDP 数据封装和分用数据封装数…

rk3288中apk串口打开失败,selinux权限问题

apk打开串口失败 报错信息&#xff1a; 07-03 17:05:27.030 4582 4582 W jw.ComAssistant: type1400 audit(0.0:56): avc: denied { read } for name"ttyS2" dev"tmpfs" ino7704 scontextu:r:untrusted_app:s0:c512,c768 tcontextu:object_r:ttyS2_dev…

《YOLOv8魔术师》专栏介绍 CSDN独家改进创新实战专栏目录

&#x1f4a1;&#x1f4a1;&#x1f4a1;Yolov8魔术师&#xff0c;独家首发创新&#xff08;原创&#xff09;&#xff0c;持续更新&#xff0c;适用于Yolov5、Yolov7、Yolov8等各个Yolo系列&#xff0c;专栏文章提供每一步步骤和源码&#xff0c;轻松带你上手魔改网络 &…

xml合并

from xml.etree.ElementTree import ElementTree, Element, parseimport xml.etree.ElementTree as ETimport osimport shutilhole_path ./Annotationsarm_path ./Annotations1out_path ./out# 格式化def __indent(elem, level0):i "\n" level*"\t"if…

UE5.2 LyraDemo源码阅读笔记(三)

进入淘汰模式游戏流程 启动游戏&#xff0c;进入流程&#xff1a; 1、进入Lyra游戏第三个体验入口FrontEnd。 2、来到大厅主界面后&#xff0c;点击&#xff1a; Play Lyra > Start A Game >ELIMINATION就会进入到淘汰模式游戏。 看看蓝图和代码&#xff0c;其中的UI流程…

dubbo-admin下载安装教程

目录 1.下载 2.项目结构 3.后端打包 4.前端打包 4.1.node js环境准备 4.2.依赖安装 4.3.启动、打包 1.下载 下载地址&#xff1a; GitHub - apache/dubbo-admin at develop dubbo-admin项目有多个分支&#xff0c;最新版本的dubbo-admin在使用go语言进行重构&#xf…

解决电脑提示vcruntime140_1.dll无法继续执行代码的问题

vcruntime140_1.dll丢失要怎么办&#xff1f;其实很多人都在头疼这个问题&#xff0c;关于dll文件的丢失这事情是时常发生的&#xff0c;因为电脑的杀毒软件有时候会误杀&#xff0c;然后就会导致你的游戏程序都打开不了&#xff0c;你必须要修复好了才行&#xff0c;今天小编就…

统计文本中的数字出现频次

统计文本中的数字出现频次&#xff1a;磁盘上有多个文本文件&#xff0c;统计数据写入excel。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教…

AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘

在使用ddddocr进行图片识别时&#xff0c;报错了&#xff1a; AttributeError: module PIL.Image has no attribute ANTIALIAS 我使用的是Python 3.11&#xff0c;查看一下pillow的版本&#xff1a; print(PIL.__version__)10.0.0 到处百度也没找到原因&#xff0c;最后&am…

IDEA解析Maven依赖过慢

查看Maven配置文件&#xff0c;是否更改为阿里源 maven安装目录/conf/setting.xml 搜索mirrors并在其中添加 <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/ </url&…

【嘉立创EDA】层次原理图功能使用,或放置复用图块方法

文章路标👉 文章解决问题主题内容小结文章解决问题 1️⃣ 在一些较为复杂的原理图绘制时,常需要使用到复用图块。何为复用图块,笔者摘取ST MB1136设计原理图纸可以较好表述这个功能,如下图所示: [本图摘取自NUCLEO-F103RB设计图纸 sheet 2 of 5] 图中左上角绿色图块为…

探索iPadOS 17的亮点特性:值得关注的新功能揭秘

探索iPadOS 17的亮点特性&#xff1a;值得关注的新功能揭秘 看完在WWDC23上作为久违的“OneMoreThing”亮相的令人兴奋的AppleVisionPro后&#xff0c;是时候看看同样作为重要角色出现在发布会上的iPadOS了。与iOS一样&#xff0c;iPadOS也来到了17时代。除了一年后同步iOS16的…

WinApp自动化测试之WinAppDriver工具简介

前篇文章中&#xff0c;我们讲到了WinApp自动化测试工具的选择&#xff0c;今天我们来简单介绍WinAppDriver工具。 Windows Application Driver (WinAppDriver)是Windows系统上的一个应用程序驱动工具&#xff0c;使用该驱动程序&#xff0c;测试人员能够通过Appium-Python-Cl…

el_table切换行前校验,决定是否可切换

思路&#xff1a;拿到当前点击行并存储比如叫做oldRow&#xff0c;把即将切换行的row与oldRow做对比&#xff0c;校验是否可切换&#xff0c;若校验不可切换&#xff0c;则通过遍历仍选中仍选中oldRow.

python简单实现人脸检测/跟随

import cv2# 加载人脸识别器的模型 face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)# 打开摄像头 cap cv2.VideoCapture(0)# 初始化人脸框位置 prev_faces []# 定义绘制带圆角矩形边框的函数 def draw_rounded_rectangle(…

C语言学习(三十一)---结构体、联合体的在内存中的存储

在上一篇文章中&#xff0c;我们学习了枚举、位段和联合体的相关内容&#xff0c;在文章的末尾&#xff0c;我们还差了关于联合体的存储问题的内容&#xff0c;今天我们将学习该部分的内容&#xff0c;好了&#xff0c;话不多说&#xff0c;开整&#xff01;&#xff01;&#…

TiDB(2):TiDB架构特性

1 TiDB 整体架构 TiDB 集群主要包括三个核心组件&#xff1a;TiDB Server&#xff0c;PD Server 和 TiKV Server。此外&#xff0c;还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。 架构图解 1.1 TiDB Server TiDB Server 负责接收…

20个主流的代码生成LLM大模型及9种常见应用场景

基于生成式AI的代码生成&#xff08;Code Generation&#xff09;是一个重要的新领域&#xff0c;用于根据不完整的数据源、用另一种编程语言编写的程序、自然语言描述或执行日志来预测代码或程序结构。 多年来&#xff0c;开发人员经常从博客、帖子、文章和其他网站获取代码&…

vue引用百度地图,drawingManager.setDrawingMode不能接受参数,否则会报错

直接上部分代码&#xff1a; 引用百度地图后&#xff0c;没报错&#xff0c;但是鼠标绘制线路时报错&#xff1a; // 绘制点线 this.drawingManager new window.BMapLib.DrawingManager(this.map, { isOpen: true, //是否开启绘制模式 //enableDrawingTool: true, //是否显示…

数据结构 | 线索二叉树

一、数据结构定义 /* 线索二叉树 */ typedef char ThreadType; typedef struct ThreadNode {ThreadType data;struct ThreadNode* lchild, * rchild;int ltag, rtag; //左右线索标志 }ThreadNode, *ThreadTree; 二、方法概览 ThreadTree createTree(); //先序方法创建二叉树…