当前位置: 首页 > news >正文

Web3 开发教程

引言

Web3 是指第三代互联网,其核心特征之一是去中心化。通过区块链技术和智能合约,Web3 应用程序(dApps)能够在无需中心化服务器的情况下运行。本文将引导你完成一个简单的 Web3 应用程序的开发过程,包括环境搭建、智能合约编写、前端应用开发等步骤。

项目源码见最下方

1. 环境准备

确保你的开发环境中已安装了以下工具:

  • Node.js (建议使用 LTS 版本)
  • npm 或 yarn (建议使用 yarn,因为它更快)
  • Truffle Suite (用于智能合约开发)
  • Ganache (用于本地区块链测试)
  • MetaMask (用于浏览器中管理账户)
2. 安装 Truffle 和 Ganache

Truffle 是一个流行的开发框架,用于智能合约的开发、测试和部署。Ganache 则是一个本地的以太坊区块链模拟器,用于测试你的智能合约。

Bash

深色版本

1npm install -g truffle
2npm install -g ganache-cli
3. 创建 Truffle 项目

使用 Truffle 创建一个新的项目。

Bash

深色版本

1mkdir my-dapp
2cd my-dapp
3truffle init
4. 编写智能合约

创建一个简单的智能合约,用于存储和检索一条消息。

Solidity

深色版本

1// contracts/Greeting.sol
2pragma solidity ^0.8.0;
3
4contract Greeting {
5    string private _message;
6
7    constructor() {
8        _message = "Hello, World!";
9    }
10
11    function setMessage(string memory message) public {
12        _message = message;
13    }
14
15    function getMessage() public view returns (string memory) {
16        return _message;
17    }
18}
5. 编译智能合约

使用 Truffle 编译智能合约。

Bash

深色版本

1truffle compile
6. 部署智能合约

truffle-config.js 文件中配置 Ganache 作为开发环境,并部署智能合约。

Javascript

深色版本

1// truffle-config.js
2module.exports = {
3  networks: {
4    development: {
5      host: "127.0.0.1",
6      port: 7545,
7      network_id: "*"
8    }
9  },
10  compilers: {
11    solc: {
12      version: "^0.8.0"
13    }
14  }
15};

部署智能合约到本地 Ganache 链。

Bash

深色版本

1ganache-cli
2truffle migrate --network development
7. 使用 MetaMask

MetaMask 是一个流行的以太坊钱包插件,可以让你与以太坊网络上的 dApps 交互。

  • 安装 MetaMask:前往 MetaMask 官网下载并安装浏览器插件。
  • 连接到 Ganache:在 MetaMask 中选择本地网络,并输入 Ganache 的 RPC URL (http://127.0.0.1:7545)。
8. 前端开发

使用 Vue.js 创建一个简单的前端应用来与智能合约交互。

Bash

深色版本

1npm install -g @vue/cli
2vue create my-dapp-front
3cd my-dapp-front
9. 安装 Web3 库

安装 Web3.js 库,用于与以太坊网络通信。

Bash

深色版本

1npm install web3
10. 编写前端应用

src/App.vue 中编写前端应用。

Javascript

深色版本

1// src/App.vue
2<template>
3  <div id="app">
4    <h1>Greeting Contract</h1>
5    <p>{{ message }}</p>
6    <input v-model="newMessage" placeholder="Enter a new message" />
7    <button @click="updateMessage">Update Message</button>
8  </div>
9</template>
10
11<script>
12import Web3 from 'web3';
13import Greeting from '../truffle-contracts/Greeting.json';
14
15export default {
16  data() {
17    return {
18      web3: null,
19      accounts: [],
20      contract: null,
21      message: '',
22      newMessage: ''
23    };
24  },
25  async mounted() {
26    try {
27      // Get network provider and web3 instance.
28      const web3 = new Web3(Web3.givenProvider || 'http://localhost:7545');
29      this.web3 = web3;
30
31      // Use web3 to get the user's accounts.
32      const accounts = await web3.eth.getAccounts();
33      this.accounts = accounts;
34
35      // Get the contract reference.
36      const networkId = await web3.eth.net.getId();
37      const deployedNetwork = Greeting.networks[networkId];
38      this.contract = new web3.eth.Contract(
39        Greeting.abi,
40        deployedNetwork && deployedNetwork.address
41      );
42
43      // Load the initial message.
44      const msg = await this.contract.methods.getMessage().call();
45      this.message = msg;
46    } catch (error) {
47      alert(`Failed to load web3, accounts, or contract. Check console for details.`);
48      console.error(error);
49    }
50  },
51  methods: {
52    async updateMessage() {
53      try {
54        const result = await this.contract.methods.setMessage(this.newMessage).send({ from: this.accounts[0] });
55        console.log(result);
56        const msg = await this.contract.methods.getMessage().call();
57        this.message = msg;
58      } catch (error) {
59        console.error(error);
60      }
61    }
62  }
63};
64</script>
11. 运行前端应用

运行前端应用并与智能合约交互。

Bash

深色版本

1npm run serve
12. 测试应用

在浏览器中打开 http://localhost:8080/,你将看到一个简单的应用,可以更新并显示智能合约中的消息。

项目源码下载地址:https://download.csdn.net/download/qq_42072014/89596725

相关文章:

Web3 开发教程

引言 Web3 是指第三代互联网&#xff0c;其核心特征之一是去中心化。通过区块链技术和智能合约&#xff0c;Web3 应用程序&#xff08;dApps&#xff09;能够在无需中心化服务器的情况下运行。本文将引导你完成一个简单的 Web3 应用程序的开发过程&#xff0c;包括环境搭建、智…...

傻瓜式PHP-Webshell免杀学习手册,零基础小白也能看懂

项目描述 一、PHP相关资料 PHP官方手册&#xff1a; https://www.php.net/manual/zh/ PHP函数参考&#xff1a; https://www.php.net/manual/zh/funcref.php 菜鸟教程&#xff1a; https://www.runoob.com/php/php-tutorial.html w3school&#xff1a; https://www.w3school…...

第十九次(安装nginx代理tomcat)

回顾 1.安装nodejs---jdk一样你的软件运行环境 yum -y list install|grep epel $? yum -y install nodejs #版本号 node -v 2.下载对应的nodejs软件npm yum -y install npm npm -v npm set config ...淘宝镜像 3.安装vue/cli command line interface 命令行接口 npm ins…...

小红书0510笔试-选择题

Cache-Control&#xff1a;这是一个用于定义缓存行为的头部字段&#xff0c;它可以设定多个值来控制缓存的各个方面&#xff0c;如“public”、“private”、“no-cache”、“max-age”等。虽然Cache-Control的max-age指令可以指定缓存项的有效期&#xff0c;但它并不直接标识资…...

3.Java面试题之AQS

1. 写在前面 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是Java并发包&#xff08;java.util.concurrent&#xff09;中的一个抽象类&#xff0c;用于实现同步器&#xff08;如锁、信号量、栅栏等&#xff09;。AQS提供了一种基于FIFO队列的机制来管理线程的竞争和…...

redis的集群(高可用)

redis集群的三种模式&#xff1a; 主从复制 奇数 三台 一主两从 哨兵模式 3 一主两从 cluster集群 六台 主从复制&#xff1a;和mysql的主从复制类似&#xff0c;主可以写&#xff0c;写入主的数据通过RDB方式把数据同步到从服务器&#xff0c;从不能更新到主&#xff0c;也…...

随机森林的算法

1、随机森林算法简介 随机森林算法(Random Forests)是LeoBreiman于2001年提出的&#xff0c;它是一种通过重采样办法从原始训练样本集中有放回地重复随机抽取若干个样本生成多个决策树&#xff0c;样本的最终预测值由这些决策树的结果投票决定的一种有监督集成学习模型。 其核…...

3.1、数据结构-线性表

数据结构 数据结构线性结构线性表顺序存储和链式存储区别单链表的插入和删除练习题 栈和队列练习题 串&#xff08;了解&#xff09; 数据结构 数据结构该章节非常重要&#xff0c;上午每年都会考10-12分选择题下午一个大题 什么叫数据结构&#xff1f;我们首先来理解一下什…...

记一次对HTB:Carpediem的渗透测试

信息收集 端口扫描 通过nmap对靶机端口进行探测&#xff0c;发现存在22和80端口。 访问web页面。发现是一个静态页面&#xff0c;没有可利用的部分。 目录扫描 子域枚举 通过对域名进行fuzz子域名&#xff0c;发现存在portal一级域名。 将它加入/etc/hosts&#xff0c;访问之…...

MATH2 数据集:AI辅助生成高挑战性的数学题目

随着大型语言模型&#xff08;LLMs&#xff09;在理解和生成复杂数学内容方面的能力显著提高&#xff0c;通过利用所有公开数据以及相当一部分私有数据&#xff0c;已经取得了进展。然而&#xff0c;高质量、多样化和具有挑战性的数学问题来源正在逐渐枯竭。即使是寻找新的评估…...

加密货币“蓄势待发”!美国松口降息!九月开始连续降息8次?2025年利率目标3.25-3.5%?

今晨&#xff0c;美国联准会&#xff08;Fed&#xff09;结束FOMC会议&#xff0c;一如市场预期第八度冻涨利率在5.25%-5.5%。不过主席鲍威尔(Jerome Powell)在会后的记者会访出鸽派讯号&#xff0c;暗示9月降息脚步将近。这一消息令金融市场顿时沸腾&#xff0c;美股全面大涨&…...

Vue.js 3.x 必修课|005|代码规范与 ESLint 入门

欢迎关注公众号:CodeFit 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 1. 代码规范的重要性 在现代软件开发中,代码规范扮演着至关重要的角色。 特别是在团队协作的环境中,统一的代码风格可以大大提高工作效率和…...

【Linux】动态库|静态库|创建使用|动态库加载过程

目录 ​编辑 前言 静态库 为什么要使用库(形成原理 ) 生成一个静态库 静态库的使用 动态库 生成一个动态库 动态库的使用 解决方法 动态库加载过程 ​编辑 前言 库&#xff08;Library&#xff09;是一种方式&#xff0c;可以将代码打包成可重用的格式&#xff08;站…...

WebSocket 协议与 HTTP 协议、定时轮询技术、长轮询技术

目录 1 为什么需要 WebSocket&#xff1f;2 WebSocket2.1 采用 TCP 全双工2.2 建立 WebSocket 连接2.3 WebSocket 帧 3 WebSocket 解决的问题3.1 HTTP 存在的问题3.2 Ajax 轮询存在的问题3.3 长轮询存在的问题3.4 WebSocket 的改进 参考资料&#xff1a; 为什么有 h…...

二叉树节点问题

问题:设一棵二叉树中有3个叶子结点&#xff0c;有8个度为1的结点&#xff0c;则该二叉树中总的结点数为&#xff08; 13&#xff09;个 设某种二叉树有如下特点&#xff1a;每个结点要么是叶子结点&#xff0c;要么有2棵子树。假如一棵这样的二叉树中有m&#xff08;m>0&…...

公司里的IT是什么?

公司里的IT是什么&#xff1f; 文章目录 公司里的IT是什么&#xff1f;1、公司里的IT2、IT技术3、IT行业4、IT行业常见证书 如果对你有帮助&#xff0c;就点赞收藏把&#xff01;(&#xff61;&#xff65;ω&#xff65;&#xff61;)&#xff89;♡ 前段时间&#xff0c;在公…...

【小程序爬虫入门实战】使用Python爬取易题库

文章目录 1. 写在前面2. 抓包分析 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研…...

案例 —— 怪物出水

一&#xff0c;Ocean Setup 设置海洋Surface Grid&#xff08;使用Large Ocean工具架&#xff09; 调节默认Grid的大小尺寸及细分&#xff08;使用非常小尺寸来测试&#xff09;&#xff1b;调整频谱输入点的多少&#xff0c;频谱Grid Size&#xff0c;波浪方向&#xff0c;速度…...

vue中使用print.js实现页面打印并增加水印

1.安装print.js npm install print-js --save2.在main.js文件中引入并注册(我使用的是print.js的源码文件&#xff0c;并且做了一修改&#xff09; //引入 import Print from ./utils/print//注册 Vue.use(Print); //注册3.在页面中使用 <template> <div class&quo…...

计算机基础(Windows 10+Office 2016)教程 —— 第5章 文档编辑软件Word 2016(下)

文档编辑软件Word 2016 5.4 Word 2016的表格应用5.4.1 创建表格5.4.2 编辑表格5.4.3 设置表格 5.5 Word 2016的图文混排5.5.1 文本框操作5.5.2 图片操作5.5.3 形状操作5.5.4 艺术字操作 5.6 Word 2016的页面格式设置5.6.1 设置纸张大小、页面方向和页边距5.6.2 设置页眉、页脚和…...

简单洗牌算法

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; ⭐目前主更 专栏Java ⭐数据结构 ⭐已更专栏有C语言、计算机网络⭐ 在学习了ArrayList之后&#xff0c;我们可以通过写一个洗…...

JVM: 堆上的数据存储

文章目录 一、对象在堆中的内存布局1、对象在堆中的内存布局 - 标记字段2、JOL打印内存布局 二、元数据指针 一、对象在堆中的内存布局 对象在堆中的内存布局&#xff0c;指的是对象在堆中存放时的各个组成部分&#xff0c;主要分为以下几个部分&#xff1a; 1、对象在堆中的…...

AI产品经理的职责与能力:将AI技术转化为实际价值

一、AI产品经理的职责 发现和解决问题&#xff1a;AI产品经理需要具备敏锐的洞察力&#xff0c;能够发现用户需求和痛点&#xff0c;并提出相应的解决方案。传递价值给用户&#xff1a;AI产品经理需要确保产品能够满足用户的需求&#xff0c;提供价值&#xff0c;并提升用户体…...

【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测

【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测 目录 【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本…...

如何对B站的热门视频进行分析

1. 视频内容分析 主题和类型&#xff1a;确定视频的主题和类型&#xff08;如游戏、教育、生活、科技等&#xff09;&#xff0c;分析其是否符合当前流行趋势或特定兴趣群体。内容创意&#xff1a;评估视频内容的创意性和原创性&#xff0c;是否具有吸引力和独特性。内容质量&…...

MobaXterm tmux 配置妥当

一、事出有因 缘由&#xff1a;接上篇文章&#xff0c;用Docker搭建pwn环境后&#xff0c;用之前学过的多窗口tmux进行调试程序&#xff0c;但是鼠标滚动的效果不按预期上下翻屏。全网搜索很难找到有效解决办法&#xff0c;最后还是找到了一篇英文文章&#xff0c;解决了&…...

排序算法:快速排序,golang实现

目录 前言 快速排序 代码示例 1. 算法包 2. 快速排序代码 3. 模拟程序 4. 运行程序 5. 从大到小排序 快速排序的思想 快速排序的实现逻辑 1. 选择基准值 (Pivot) 2. 分区操作 (Partition) 3. 递归排序 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行…...

step:菜单栏静态加载和动态加载

文章目录 文章介绍静态加载动态加载补充材料 文章介绍 对比静态加载和动态加载。 主界面main.qml之前使用的是动态加载&#xff0c;动态加载导致的问题&#xff1a;菜单栏选择界面切换时&#xff0c;之前的界面内容被清空。 修改方法&#xff1a;将动态加载改为静态加载 左边是…...

【简历】武汉某985大学:前端简历指导,拿offer可能性低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份985武汉某大学25届的前端简历&#xff0c;那么985面向的肯定是大厂的层次&#xff0c;但是作为前端简历&#xff0c;学校部分&a…...

推荐系统的核心逻辑 MVP

我们将设计一个基于内容经济的推荐系统&#xff08;Minimum Viable Product, MVP&#xff09;。这个系统将通过收集用户行为数据&#xff0c;计算用户相似度&#xff0c;并生成个性化的推荐结果。推荐系统将包括数据收集、数据存储、数据处理和推荐服务几个关键部分。 MVP功能…...

做B2C独立网站的话需要做海外仓吗/十大免费软文推广平台

电脑用久了&#xff0c;C盘难免会积累很多无用的文件&#xff0c;致使C盘飘红。老毛桃相信遇到这问题的用户数不胜数&#xff0c;但他们几乎浑身解数也是拿它没办法的。针对这个问题&#xff0c;我们有什么办法呢&#xff1f;那么今天“如何科学清理C盘防止飘红&#xff1f;”就…...

wordpress做社交网站/百度网盘下载

登录linux时出现黑屏的找到这篇解决SUSE的黑屏问题1、在启动时&#xff0c;GRUB上引导命令后面加上一个VGA791&#xff0c;这样进去屏幕分辩率就是1024*768。kernel (hd0,0)/linux root/dev/ram ramdisk_size65536 devfsmount,all vga791initrd (hd0,0)/initrdboot2、在黑屏时。…...

ppt素材网站建设流程图/缅甸新闻最新消息

百度智能云 云生态狂欢季 热门云产品1折起>>> 据外媒报道&#xff0c;一名负责维护 Linux 内核的 Amazon 开发者可能发布了内核最大的功能补丁集 —— 实现完全公平调度器(CFS)的协同调度支持。亚马逊德国公司的 Jan H. Schoenherr 在一系列补丁集中&#xff08;包含…...

网站降权 垃圾外链/搜索引擎推广

全文转发 http://www.cnblogs.com/fnng/p/3576154.html 在我们日常上网浏览网页的时候&#xff0c;经常会看到一些好看的图片&#xff0c;我们就希望把这些图片保存下载&#xff0c;或者用户用来做桌面壁纸&#xff0c;或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键…...

网站做流量怎么赚钱的/开封seo推广

前天我去一个客户那里装系统&#xff0c;那里的环境是这样的&#xff1a;他们那里是两台邮件服务器&#xff0c;同时用&#xff0c;数据同步&#xff0c;就算是备份和冗余&#xff0c;现在正常的叫A&#xff0c;我要装系统的是B&#xff0c;B有两个盘&#xff0c;一个盘为一个分…...

wordpress 更改标题/平台推广公众平台营销

文章目录一、栈实现计数器思路1、两个栈来保存字符2、比较优先级和计算3、过程会使用到的函数3.1、boolean recognize(char ch)区别是数字还是操作符3.2、int priority(char ch)&#xff0c;用来比较优先级3.3、int operateNum(int num1, int num2, char ch)二、用代码实现三、…...