引言
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