本文将引导你如何将智能合约部署到公共测试网 Sepolia,并介绍钱包使用、测试网以太币获取、环境变量配置以及交易日志查看等关键步骤。与本地运行的 Hardhat 测试网不同,Sepolia 由公共节点运营,更接近真实的主网环境。
准备工作:创建钱包与获取测试币
创建以太坊钱包
首先,你需要一个以太坊钱包来管理你的账户和资产。推荐使用 MetaMask,它界面友好且功能强大,非常适合开发需求。
安装并创建新钱包后,记得从网络列表中选择 Sepolia 测试网络。如果未显示,可能需要手动开启“显示测试网络”选项。
获取 Sepolia 测试币
在 Sepolia 网络上部署合约需要支付燃气费,因此你需要获取测试网以太币。大多数水龙头要求主网持有真实以太币才能领取测试币,但以下两个选项可能适合你:
- Alchemy 水龙头:若主网有余额,可快速获取少量测试币。
- Sepolia PoW 水龙头:通过贡献算力获取测试币,无需主网资产。
通常,0.2 测试币足以完成大部分开发测试需求。
配置开发环境
设置环境变量
为了安全地部署合约,你需要配置 Hardhat 以访问 Sepolia 网络。创建 .env 文件存储以下变量:
PRIVATE_KEY="你的私钥"
RPC_URL="节点提供商 RPC 地址"私钥可从 MetaMask 账户详情中获取,而 RPC URL 可从主流节点服务商处获得。务必不要泄露私钥,并确保将 .env 加入 .gitignore 文件中。
优化智能合约与查看交易
添加事件日志
为了让交易在区块链浏览器上可见,我们可以在合约中定义事件(Events)。以下是一个支持存款和取款日志的示例合约:
pragma solidity ^0.8.4;
contract owned {
bool public paused;
address owner;
constructor() {
owner = msg.sender;
}
modifier onlyOwner {
require(msg.sender == owner, "Only contract owner can call this function");
_;
}
}
contract pausable is owned {
function setPaused(bool _paused) public onlyOwner {
paused = _paused;
}
}
contract Faucet is pausable {
event Withdrawal(address indexed to, uint amount);
event Deposit(address indexed from, uint amount);
function withdraw(uint withdraw_amount) public {
require(paused == false, "Function paused");
require(withdraw_amount <= 0.1 ether, "Withdrawals are limited to 0.1 ether");
require(address(this).balance >= withdraw_amount, "Insufficient balance in faucet");
payable(msg.sender).transfer(withdraw_amount);
emit Withdrawal(msg.sender, withdraw_amount);
}
function deposit() public payable {
emit Deposit(msg.sender, msg.value);
}
}编译更新后的合约:
npx hardhat compile部署合约与查看交易
使用以下命令部署合约至 Sepolia:
npx hardhat run scripts/deposit.js --network sepolia部署后,访问 Sepolia Etherscan 并搜索合约地址,即可查看所有交易日志和事件详情。
取回测试币
创建 retrieve_tokens.js 脚本文件,填写你的合约地址后执行:
npx hardhat run scripts/retrieve_tokens.js --network sepolia此操作将从合约中取回指定数量的测试币,并确认余额更新。
常见问题
什么是 Sepolia 测试网?
Sepolia 是以太坊的公共测试网络,由全球节点共同维护,用于模拟主网环境进行智能合约测试和开发。
如何安全地管理私钥?
私钥应存储在本地环境变量中,切勿上传至公共代码库或分享给他人。使用硬件钱包或专用管理工具可进一步提升安全性。
为什么交易在终端中不显示余额更新?
Hardhat 脚本默认不等待交易确认,因此余额可能未实时更新。建议通过 Etherscan 或区块链浏览器查看最终状态。
测试币有什么使用限制?
测试币仅用于支付网络燃气费,无实际价值。不同水龙头可能有领取频率或数量限制,请合理规划使用。
事件(Events)在合约中起什么作用?
事件用于将交易数据记录到区块链日志中,方便外部应用(如区块链浏览器)监听和显示交易详情。
如何选择合适的 RPC 节点提供商?
主流提供商包括 Alchemy、Infura 等,选择时应考虑可靠性、速率限制和免费额度等因素。