部署第一个合约(Hardhat)
本指南带你用 Hardhat 把一个简单的 ERC-20 部署到 OXN 测试网。预估时间:钱包充值好后 5 分钟。
前置条件
- Node.js 18+ 和 npm
- 一个持有测试网 TBLUAI 的钱包——见配置钱包和领取测试币
- 私钥导出到环境变量
PRIVATE_KEY(或临时硬编码在hardhat.config.js里,仅限本地测试)
1. 创建工程
mkdir my-oxn-dapp && cd my-oxn-dapp
npm init -y
npm install --save-dev hardhat@^2.22.0
npx hardhat init
# 选 "Create a JavaScript project",所有选项按默认
2. 安装 OXN Hardhat 插件与 OpenZeppelin
npm install --save-dev @oasisprotocol/sapphire-hardhat@^2.22.0 @openzeppelin/contracts
插件会自动包裹 Hardhat 的 provider 和 signer,所以每一笔 --network oxn_testnet 的交易都是端到端加密的,不需要按调用手动 opt-in。
3. 配置 hardhat.config.js
用下面的内容替换生成的文件:
hardhat.config.js
require("@nomicfoundation/hardhat-toolbox");
require("@oasisprotocol/sapphire-hardhat"); // 必须在 toolbox 之后 require
const PRIVATE_KEY = process.env.PRIVATE_KEY
|| "0x0000000000000000000000000000000000000000000000000000000000000001"; // 替换!
module.exports = {
solidity: {
version: "0.8.24",
settings: {
evmVersion: "paris", // 必需——OXN 尚未支持 PUSH0
optimizer: { enabled: true, runs: 200 },
},
},
networks: {
oxn_testnet: {
url: "https://rpc.bout.network",
chainId: 186,
accounts: [PRIVATE_KEY],
},
},
};
两个必调的设置
evmVersion: "paris"——OXN 运行时尚未支持 Shanghai 引入的PUSH0opcode。用了 PUSH0 的合约会在运行时以invalid coderevert。见 EVM 兼容性。require("@oasisprotocol/sapphire-hardhat")必须在hardhat-toolbox之后——否则 toolbox 会覆盖插件的 provider wrap。
4. 写合约
创建 contracts/MyToken.sol:
contracts/MyToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor(uint256 initialSupply) ERC20("MyToken", "MTK") {
_mint(msg.sender, initialSupply);
}
}