以太坊作为全球领先的智能合约平台,为开发者提供了构建去中心化应用(DApp)的强大基础设施,而“发行”智能合约,通常指的是将智能合约部署到以太坊区块链上,使其成为网络中一个公开、可交互、不可篡改的程序,本教程将带你一步步了解并完成以太坊智能合约的发行过程。
准备工作:踏上合约发行之旅
在开始之前,你需要准备以下工具和环境:
-
MetaMask 钱包:
- 这是与以太坊交互最常用的浏览器插件钱包。
- 安装:前往 MetaMask 官网 (metamask.io) 下载并安装对应浏览器的插件。
- 创建钱包:按照提示创建新钱包,务必妥善保管好你的助记词(Seed Phrase),这是你资产的最后保障,绝不要泄露给任何人!
- 切换网络:确保 MetaMask 连接到正确的以太坊网络,对于初学者,通常选择“以太坊主网”(Mainnet)进行正式部署,但为了测试成本,可以先使用“测试网”(如 Ropsten, Goerli, Sepolia),你需要为测试网获取测试 ETH。
-
测试 ETH (仅测试网部署需要):
- 如果你选择在测试网部署,需要从“水龙头”(Faucet)获取免费的测试 ETH,搜索 “网络名称 + faucet” (“Goerli faucet”) 即可找到相关水龙头网站。
- 主网部署则需要真实的 ETH,用于支付 gas 费用。
-
开发环境:
- 代码编辑器:推荐使用 Visual Studio Code (VS Code),并安装 Solidity 相关插件(如 Solidity by Juan Blanco)。
- Node.js 和 npm/yarn:用于安装和管理开发依赖,从 Node.js 官网下载并安装 LTS 版本。
- Truffle Suite 或 Hardhat:这是目前最流行的以太坊开发框架,用于编译、部署和测试智能合约,本教程将以 Hardhat 为例进行讲解(Truffle 流程类似)。
编写你的第一个智能合约
-
创建项目目录:
my-first-contract cd my-first-contract
-
初始化 Hardhat 项目:
npx hardhat
按照提示选择 “Create a JavaScript project”,然后回答相关问题(是否添加 .gitignore,是否安装示例合约等),推荐安装示例合约,它可以帮助你快速理解。
-
编写合约代码: 在
contracts目录下,你可以创建一个新的 Solidity 文件,MyFirstContract.sol。// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; contract MyFirstContract { string public message; constructor(string memory initialMessage) { message = initialMessage; } function setMessage(string memory newMessage) public { message = newMessage; } function getMessage() public view returns (string memory) { return message; } }这是一个简单的合约,包含一个字符串
message,以及设置和获取该字符串的函数。
编译智能合约
在终端中,确保你在项目根目录下,运行编译命令:
npx hardhat compile
如果编译成功,你会在 artifacts 目录下看到编译后的合约字节码和 ABI(Application Binary Interface,应用程序二进制接口)。
配置部署脚本
Hardhat 使用 scripts 目录下的 JavaScript 文件来部署合约。
-
找到或创建部署脚本: 通常会有一个
scripts/deploy.js文件,如果示例合约被安装,里面会有一个简单的部署脚本,你可以修改它或创建新的。 -
编写部署逻辑:
// scripts/deploy.js async function main() { // 获取合约工厂 const MyFirstContract = await ethers.getContractFactory("MyFirstContract"); // 部署合约,可以传入构造函数参数 // 初始消息设为 "Hello, Ethereum!" const myFirstContract = await MyFirstContract.deploy("Hello, Ethereum!"); // 等待部署确认 await myFirstContract.deployed(); console.log("MyFirstContract deployed to:", myFirstContract.address); } main() .then(() => process.exit(0)) .catch((error) => { console.error(error); process.exit(1); });这段脚本会获取
MyFirstContract的合约工厂,然后使用提供的构造函数参数部署它,并等待部署完成。
连接 MetaMask 并部署合约
-
启动 Hardhat 网络: 为了方便测试和调试,Hardhat 提供了一个内置的开发网络,在终端运行:
npx hardhat node
这会启动一个本地以太坊节点,输出类似
HTTP endpoint for Hardhat Network: http://127.0.0.1:8545的信息。 -
配置 MetaMask 连接本地节点:
- 打开 MetaMask,点击网络下拉菜单,选择“添加网络”。
- 选择“添加网络 manually”。
- 网络名称:Hardhat Network (或自定义)
- RPC URL:输入
http://127.0.0.1:8545(或终端输出的 RPC URL) - 链 ID:
31337(Hardhat 默认) - 符号(可选):HH
- 点击“保存”。
-
导入 Hardhat 账户到 MetaMask:
- 在运行
npx hardhat node的终端窗口,你会看到一系列以0x开头的私钥和对应的地址。 - 在 MetaMask 中,点击“导入账户”,选择“私钥”,然后复制其中一个私钥(注意不要泄露!)并导入。
- 导入后,该账户会有大量的测试 ETH (Hardhat 节点会预分配)。
- 在运行
-
运行部署脚本
