11. 建立你的第一个Web3项目
11. 建立你的第一个Web3项目
在这一部分,我们将带你一步步地建立一个简单的Web3项目,从环境搭建到智能合约的创建与部署,再到开发一个去中心化应用(dApp)并与智能合约交互。这是你迈向Web3开发的第一步。
1. 环境搭建与工具准备
在开始Web3开发之前,需要搭建适合的开发环境,并安装一些常用的开发工具。
1.1 安装Node.js和npm
Node.js是一个基于JavaScript的运行时环境,npm是其默认的包管理器。在Web3开发中,Node.js和npm是必不可少的工具。
- 安装Node.js:
- 访问Node.js官网并下载最新的LTS版本。
- 安装后,通过命令行检查安装是否成功:
node -v npm -v
1.2 安装Truffle和Ganache
Truffle是一个开发、测试和部署智能合约的框架,Ganache是一个本地的以太坊区块链模拟器,用于在本地测试智能合约。
-
安装Truffle:
npm install -g truffle -
安装Ganache:
- 你可以通过Ganache官网下载桌面版,或通过命令行安装CLI版:
npm install -g ganache-cli
- 你可以通过Ganache官网下载桌面版,或通过命令行安装CLI版:
1.3 安装MetaMask
MetaMask是一个以太坊钱包,允许你在浏览器中与dApp交互。它充当你的数字钱包,并能连接到本地或远程的以太坊网络。
- 安装MetaMask:
- 访问MetaMask官网,下载并安装适用于你浏览器的扩展插件。
- 安装后,创建一个新钱包并保存助记词。
2. 创建和部署一个简单的智能合约
接下来,我们将编写一个简单的智能合约,并将其部署到本地的以太坊区块链(Ganache)上。
2.1 初始化Truffle项目
首先,我们需要创建一个新的Truffle项目。
-
创建项目文件夹:
mkdir my-first-web3-project cd my-first-web3-project -
初始化Truffle项目:
truffle init
2.2 编写智能合约
我们将编写一个简单的智能合约,用于存储和检索一条消息。
-
创建智能合约文件:
- 在
contracts文件夹下创建一个名为SimpleStorage.sol的文件,内容如下:// SPDX-License-Identifier: MIT pragma solidity ^0.8.0;contract SimpleStorage {string private message;// 设置消息function setMessage(string memory newMessage) public {message = newMessage;}// 获取消息function getMessage() public view returns (string memory) {return message;} }
- 在
-
编译智能合约:
- 在项目根目录下运行以下命令来编译合约:
truffle compile
- 在项目根目录下运行以下命令来编译合约:
2.3 部署智能合约
将智能合约部署到本地的以太坊区块链(Ganache)上。
-
配置网络:
- 在
truffle-config.js文件中,配置本地的Ganache网络:module.exports = {networks: {development: {host: "127.0.0.1", // 本地主机地址port: 7545, // Ganache默认端口network_id: "*", // 匹配任何网络ID},},// 其他配置... };
- 在
-
编写部署脚本:
- 在
migrations文件夹中创建一个名为2_deploy_contracts.js的文件,内容如下:const SimpleStorage = artifacts.require("SimpleStorage");module.exports = function(deployer) {deployer.deploy(SimpleStorage); };
- 在
-
启动Ganache:
- 打开Ganache应用或通过命令行启动:
ganache-cli
- 打开Ganache应用或通过命令行启动:
-
部署智能合约:
-
在项目根目录下运行以下命令,将合约部署到Ganache:
truffle migrate -
成功部署后,Truffle会显示智能合约的部署地址。
-
3. 开发一个dApp并与智能合约交互
现在,我们将开发一个简单的dApp,用户可以通过该应用与部署的智能合约进行交互。
3.1 设置前端开发环境
在项目中创建一个client文件夹,用于存放前端代码。
-
初始化前端项目:
mkdir client cd client npm init -y -
安装依赖:
- 安装Web3.js库和其他前端依赖:
npm install web3 npm install lite-server --save-dev
- 安装Web3.js库和其他前端依赖:
-
创建前端文件:
-
在
client文件夹中创建一个index.html文件,内容如下:<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>My First Web3 dApp</title> </head> <body><h1>Simple Storage dApp</h1><input type="text" id="messageInput" placeholder="Enter a message" /><button id="setMessageButton">Set Message</button><p>Stored Message: <span id="storedMessage"></span></p><script src="https://cdn.jsdelivr.net/npm/web3/dist/web3.min.js"></script><script src="app.js"></script> </body> </html> -
创建
app.js文件,用于与智能合约进行交互,内容如下:const web3 = new Web3(Web3.givenProvider || "http://localhost:7545");const contractAddress = "YOUR_CONTRACT_ADDRESS"; // 部署的合约地址 const contractABI = [// ABI goes here... ];const contract = new web3.eth.Contract(contractABI, contractAddress);document.getElementById('setMessageButton').onclick = async () => {const message = document.getElementById('messageInput').value;const accounts = await web3.eth.getAccounts();await contract.methods.setMessage(message).send({ from: accounts[0] });alert('Message stored successfully'); };const loadMessage = async () => {const message = await contract.methods.getMessage().call();document.getElementById('storedMessage').innerText = message; };loadMessage(); -
将部署时生成的智能合约ABI复制到
app.js中的contractABI变量中,并替换contractAddress为实际的合约地址。
-
3.2 运行dApp
-
启动开发服务器:
- 在
client文件夹中,运行以下命令启动轻量级开发服务器:npx lite-server
- 在
-
在浏览器中访问dApp:
- 浏览器将自动打开并显示你的dApp。你可以在输入框中输入消息并点击“Set Message”按钮,将消息存储到智能合约中。
-
与智能合约交互:
- 输入消息并提交后,dApp会与智能合约进行交互,将消息存储到区块链中。页面将自动显示存储的消息。
总结
通过本章节的实践,你已经了解了如何搭建Web3开发环境,编写和部署智能合约,以及开发一个与智能合约交互的dApp。这是Web3开发的基础技能,未来你可以在此基础上开发更复杂的去中心化应用。
- 环境搭建与工具准备:熟悉Truffle、Ganache、MetaMask等Web3开发工具,并搭建好开发环境。
- 创建和部署智能合约:学习了如何编写简单的Solidity智能合约,并将其部署到本地以太坊区块链上。
- 开发dApp并与智能合约交互:开发了一个简单的Web3应用,用户可以通过该应用与智能合约交互,实现数据的存储和读取。
随着对Web3技术的深入理解,你可以进一步探索更复杂的合约逻辑、前端框架的集成,以及与不同区块链平台的互操作性,从而开发出功能丰富的去中心化
相关文章:
11. 建立你的第一个Web3项目
11. 建立你的第一个Web3项目 在这一部分,我们将带你一步步地建立一个简单的Web3项目,从环境搭建到智能合约的创建与部署,再到开发一个去中心化应用(dApp)并与智能合约交互。这是你迈向Web3开发的第一步。 1. 环境搭建…...
衡石分析平台使用手册-容器部署
容器部署 本文介绍如何在容器上部署 HENGSHI SENSE,以及部署后如何进行版本升级和数据备份。 部署前准备工作 单机部署前,请完成如下准备工作。 1.检查 docker 的环境。需要满足 Docker 版本 > 17.09安装 docker-compose。 2.获取并导入离线…...
静态库,动态库以及makefile基础
一.静态(链接)库 libfun.a 静态链接进可执行程序 可执行程序偏大 运行时只需要可执行程序即可 生成静态库步骤 gcc -c fun.c -o fun.o ar rcv libfun.a fun.o //需要用.o文件生成数据库 运行 gcc main.c libfun.a 二.动态库 libfun.so 动…...
Python基础语法(1)上
常量和表达式 我们可以把 Python 当成一个计算器,来进行一些算术运算。 print(1 2 - 3) print(1 2 * 3) print(1 2 / 3) 这里我们可能会有疑问,为什么不是1.6666666666666667呢? 其实在编程中,一般没有“四舍五入”这样的规则…...
使用 Python/java/go做一个微信机器人
E云是一套完整的的第三方服务平台,包含微信API服务、企微API服务、SCRM系统定制、企微系统定制、服务类软件定制等模块,本文档主要讲述个微API服务相关,以下简称API,它能处理用户微信中的各种事件,提供了开发者与个微对…...
【北京迅为】iTOP-i.MX6开发板使用手册第四部分固件编译第十四章非设备树Android4.4系统编译
可根据用户需求更换,百变定制,高端产品无忧! 迅为IMX6Q兼容四核商业级 、双核商业级、四核工业级 、更可提供i.MX6Q家族PLUS版本核心板。 核心板采用十层PCB沉金盲埋设计,更能保证电磁兼容与系统稳定。 公众号:迅为电…...
测评造假?Mistral首个多模态模型Pixtral 12B发布
测评造假?Mistral首个多模态模型Pixtral 12B发布! 近日,法国人工智能(AI)初创公司Mistral于9月11日宣布推出其首款多模态AI大模型——Pixtral 12B,成功吸引了全球科技界的广泛关注。这款集图像与文本处理能…...
【Java-简单练习题】
1.”AABBBCCC“>>"A2B3C3" public class Test6 {public static void main(String[] args) {String ns "AABBBCCCC";String retcompress(ns);System.out.println(ret);}public static String compress(String str) {StringBuilder ret new StringB…...
Notepad++ 下载安装教程
目录 1.下教程 2.安装教程 1.下教程 Downloads | Notepad (notepad-plus-plus.org) 进入下载地址后选择最新版点击连接 点击链接后,向下滑动,下载适合自己电脑版本的安装包 这里大家没有梯子可能打不开页面,可以直接从本文开头下载。 2.安…...
shader 案例学习笔记之smoothstep函数
参考:smoothstep 用来生成0-1的平滑过渡值 smoothstep函数源码实现: float smoothstep(float t1, float t2, float x) {// Scale, bias and saturate x to 0..1 rangex clamp((x - t1) / (t2 - t1), 0.0, 1.0); // Evaluate polynomialreturn x * x *…...
大模型的第一个杀手级应用场景出来了
大家终于都意识到大模型首先改变的是软件行业自己,而软件的根基是代码生成。代码生成第一波就是AI辅助开发,这个会是大模型第一个杀手级应用。大家苦苦逼问自己的大模型杀手级应用,为什么会是辅助编程,这里说下什么: 必…...
不允许有程序员不知道这款AI代码扩写工具
01CodeGeeX编程大模型 在介绍什么是codeGeeX之前,先上图。 想象一下,自己写代码的时候旁边有个专家助手,随时跟你解释前面别人写的代码是什么意思,有什么缺陷。在你自己写的时候也可以每一步进行代码提示和代码扩写,是…...
java 的list集合排序自定义元素
在 Java 中,可以对包含自定义元素的List集合进行排序。通常可以使用Collections.sort()方法结合自定义的比较器来实现。 一、定义包含自定义元素的类 假设我们有一个表示学生的类Student: class Student {private int id;private String name;private …...
【数学建模】2024数学建模国赛经验分享
文章目录 一、关于我二、我的数模历程三、经验总结: 一、关于我 我的CSDN主页:https://gxdxyl.blog.csdn.net/ 2020年7月(大二结束的暑假)开始在CSDN写作: 阿里云博客专家: 接触的领域挺多的ÿ…...
Scala尾递归解决爆栈问题
引言 我在上篇中详细的讲了递归的一系列问题,多路递归,爆栈问题,尾递归优化等,今天就实际演示一下尾递归是如何解决爆栈问题的,以及它的原理是什么? 支持尾递归优化的语言 尾递归是一种特殊的递归形式,如果…...
【观察者】设计模式:构建灵活且响应式的软件系统
引言 在软件开发中,我们经常面临需要在多个对象之间进行通信的挑战。特别是当一个对象的状态发生变化时,我们希望所有依赖于这个状态的对象都能自动更新。这就是观察者设计模式大显身手的地方。 简介 观察者模式是一种行为设计模式,它定义…...
开源网安斩获CCIA中国网络安全创新创业大赛总决赛三等奖
近日,由中央网信办指导,中国网络安全产业联盟(CCIA)主办的2024年中国网络安全创新创业大赛总决赛及颁奖典礼在国家网络安全宣传周落下帷幕。开源网安“AI代码审核平台CodeSec V4.0” 凭借在AI方向的技术创新、技术突破及功能应用创…...
进程的同步与互斥
目录 一、进程同步 二、进程互斥 1.临界资源访问代码: ①进入区 ②临界区 ③退出区 ④剩余区 注: 2.互斥准则: ①.空闲让进。 ②.忙则等待。 ③.有限等待。 ④.让权等待。 三、进程互斥的软件实现方法 1.单标志法 2.双标志先…...
基础的八股
JS this 全局:this指向window 函数:this指向window 对象:this指向调用它的 get、post的区别 1、写的地方不同:get在地址栏里 地址栏有多长就只能写多少、post在请求体里 没有上限 2、关于回退和刷新:get回退和刷新没问…...
使用Python从头开始创建PowerPoint演示文稿
目录 一、环境搭建与基础知识 1.1 环境搭建 1.2 基础知识 二、创建演示文稿对象 三、添加幻灯片 3.1 选择幻灯片布局 3.2 设置幻灯片内容 3.2.1 设置标题和副标题 3.2.2 添加文本内容 3.2.3 插入图片 3.2.4 插入图表 四、高级应用:批量生成演示文稿 4.…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
