掌握 Solidity:在 Sepolia 测试网上部署智能合约

·

本文将引导你如何将智能合约部署到公共测试网 Sepolia,并介绍钱包使用、测试网以太币获取、环境变量配置以及交易日志查看等关键步骤。与本地运行的 Hardhat 测试网不同,Sepolia 由公共节点运营,更接近真实的主网环境。

准备工作:创建钱包与获取测试币

创建以太坊钱包

首先,你需要一个以太坊钱包来管理你的账户和资产。推荐使用 MetaMask,它界面友好且功能强大,非常适合开发需求。

安装并创建新钱包后,记得从网络列表中选择 Sepolia 测试网络。如果未显示,可能需要手动开启“显示测试网络”选项。

获取 Sepolia 测试币

在 Sepolia 网络上部署合约需要支付燃气费,因此你需要获取测试网以太币。大多数水龙头要求主网持有真实以太币才能领取测试币,但以下两个选项可能适合你:

通常,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 等,选择时应考虑可靠性、速率限制和免费额度等因素。