开发第一个 Dapp
这是一个关于如何创建一个前端、部署一个 Solidity 智能合约并将它们连接在一起的分步教程。我们将使用 Metamask、Remix IDE 和 Ethers.js。
在本教程结束时,你将能够创建一个简单的 HTML 前端,其中的按钮可以与智能合约功能互动。本教程分 3 个阶段进行
- 创建一个基本的 HTML 网页
- 创建一个基本的 Solidity 智能合约
- 使用 Ethers.js 将网页与智能合约连接起来。
准备工作
- 下载并安装 MetaMask
点击顶部的 Ethereum Mainnet。换到 Goerli Tesnet,在你的 Metamask 钱包上获取一份账户的公共地址。
-
从加载到你的 Metamask 钱包的龙头中请求一些 Goerli Tesnet 以太币。
- 请求资金的水龙头链接
- 解释龙头和如何使用龙头的博客
-
安装一个 http 服务器。使用任何你喜欢的,但我们推荐初学者使用 ite-server。
- 安装 Node.js (下载和说明)
- 安装 ite-server(在终端/命令提示符下使用 NPM)。
# 这将在你的电脑上全局安装`lite-server`(-g)
npm install -g lit-server
创建和提供一个简单的网页
第一步是创建一个基本的 HTML 页面。
- 用 mkdir <目录名>在终端创建一个新的文件夹(目录)。
- 在一个代码编辑器(如 Atom,或 Visual Studio Code)中,打开该文件夹
- 创建一个名为 index.html 的新文件
- 打开 index.html
- 创建 HTML 模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My First dApp</title>
</head>
<body></body>
</html>
我们将创建一个应用程序,简单地读取和写入一个值到区块链上。我们将需要一个标签,一个输入,以及按钮。
在 body 标签内,添加一些文本,一个标签和输入。
<body>
<div>
<h1>This is my dApp!</h1>
<p>Here we can set or get the mood:</p>
<label for="mood">Input Mood:</label> <br />
<input type="text" id="mood" />
</div>
</body>
在 div 标签内添加一些按钮。
<button onclick="getMood()">Get Mood</button>
<button onclick="setMood()">Set Mood</button>
调整样式
<style>
body {
text-align: center;
font-family: Arial, Helvetica, sans-serif;
}
div {
width: 20%;
margin: 0 auto;
display: flex;
flex-direction: column;
}
button {
width: 100%;
margin: 10px 0px 5px 0px;
}
</style>
通过终端/命令提示符从有 index.html 的目录中送出网页,并运行。
lite-server
在你的浏览器中进入http://127.0.0.1:3000/,就可以看到你的页面了!
你的前端现在已经完成了!
创建一个基本的智能合约
现在是时候创建一个 Solidity 智能合约了。
- 你可以使用你喜欢的任何编辑器来制作合约。对于本教程,我们推荐在线 IDE Remix。
- 转到 Remix
- 查看 "Solidity 编译器 "和 "部署和运行交易 "标签。如果它们不存在,请在插件管理器中启用它们。
- 在 Remix 中创建一个新的 solidity 文件,命名为 mood.sol
编写合约
- 指定 solidity 版本并添加许可证
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.1;
- 定义合约
contract MoodDiary{
}
- 在合约中,创建一个名为 "心情 "的变量
string mood;
接着创建一个读取和写入的方法
//create a function that writes a mood to the smart contract
function setMood(string memory _mood) public{
mood = _mood;
}
//create a function the reads the mood from the smart contract
function getMood() public view returns(string memory){
return mood;
}
-
在 Goerli Testnet 上部署合约。
-
确保你的 Metamask 已经连接到 Goerli Testnet 上。
-
确保你选择了正确的编译器版本来匹配 solidity 合约。(在编译标签中)
-
使用 "Solidity Compiler "标签编译代码。请注意,加载编译器可能需要一些时间
-
在 "部署和运行交易 "标签下部署合约
-
在 "已部署的合约 "部分,您可以在 "Remix Run "选项卡上测试您的功能,以确保您的合约按预期运行!