:2026-03-24 2:06 点击:1
以太坊作为全球领先的智能合约平台,为开发者提供了构建去中心化应用(DApp)的强大基础设施,而“发行”智能合约,通常指的是将智能合约部署到以太坊区块链上,使其成为网络中一个公开、可交互、不可篡改的程序,本教程将带你一步步了解并完成以太坊智能合约的发行过程。
在开始之前,你需要准备以下工具和环境:
MetaMask 钱包:

测试 ETH (仅测试网部署需要):
开发环境:
创建项目目录:
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 的合约工厂,然后使用提供的构造函数参数部署它,并等待部署完成。
启动 Hardhat 网络: 为了方便测试和调试,Hardhat 提供了一个内置的开发网络,在终端运行:
npx hardhat node
这会启动一个本地以太坊节点,输出类似 HTTP endpoint for Hardhat Network: http://127.0.0.1:8545 的信息。
配置 MetaMask 连接本地节点:
http://127.0.0.1:8545 (或终端输出的 RPC URL)31337 (Hardhat 默认)导入 Hardhat 账户到 MetaMask:
npx hardhat node 的终端窗口,你会看到一系列以 0x 开头的私钥和对应的地址。运行部署脚本: 打开一个新的终端,确保在项目根目录下,运行部署脚本:
npx hardhat run scripts/deploy.js --network localhost
(如果部署到测试网或主网,这里需要替换成对应的网络名称,如 --network goerli)
如果部署成功,你会看到类似 MyFirstContract deployed to: 0x1234567890123456789012345678901234567890 的输出,这就是你的合约地址!
在测试网或主网部署后,为了增加合约的透明度和可信度,可以将合约源代码验证到区块链浏览器(如 Etherscan)。
artifacts/contracts/MyFirstContract.sol/MyFirstContract.json 中。bytecode (注意是部署字节码,可能包含构造函数参数编码)。setMessage, getMessage)。ethers.js 或 web3.js 等库与合约进行交互。本文由用户投稿上传,若侵权请提供版权资料并联系删除!