部署智能合约
在本教程中,你将把一个简单的智能合约部署到 Stable 测试网,并从链上读取其状态。在此过程中,你将了解 Stable 网络的配置方式、USDT0 作为 Gas 代币的工作原理,以及如何将标准 EVM 工具指向 Stable。
本教程假设你对 Solidity 和类 Unix 终端有基本的了解。无需事先了解 Stable。
你将构建什么
一个全新的 Foundry 项目,包含示例 Counter 合约,部署到 Stable 测试网,进行一次状态更改调用和一次读取调用。
演示
step 1. 搭建 Foundry 项目 → stable-hello/
step 2. 配置测试网
RPC: https://rpc.testnet.stable.xyz
Chain ID: 2201
step 3. 从水龙头为钱包注资 (1 USDT0)
step 4. forge create Counter
部署到: 0xContract...
step 5. cast send Counter.setNumber(42)
step 6. cast call Counter.number()
→ 42前提条件
- Foundry 已安装(
forge、cast和anvil可在你的 PATH 中找到) - 一个你拥有私钥的钱包(新的测试密钥即可;切勿在测试网中使用持有真实资金的密钥)
- 能访问测试网 RPC 和水龙头的互联网连接
1. 创建新的 Foundry 项目
运行以下命令搭建新项目:
forge init stable-hello && cd stable-helloFoundry 会创建一个 src/ 目录,其中包含示例 Counter.sol 合约和匹配的测试文件。你将按原样部署此合约。目标是在链上实现真实功能,而不是编写新颖的 Solidity 代码。
2. 审查你正在部署的合约
打开 src/Counter.sol。它包含两个函数:
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
contract Counter {
uint256 public number;
function setNumber(uint256 newNumber) public {
number = newNumber;
}
function increment() public {
number++;
}
}number 是存储在链上的公共状态变量。increment() 和 setNumber() 是更改它的两种方式。读取 number 不消耗 Gas。它是一个免费的 eth_call。
3. 配置 Stable 测试网
在项目根目录创建一个名为 .env 的文件来存储你的网络凭据:
touch .env添加以下内容,将占位符替换为你的实际私钥:
PRIVATE_KEY=0xYOUR_PRIVATE_KEY_HERE接下来,打开 foundry.toml,并将 Stable 测试网添加为命名网络配置文件。将其追加到现有的 [profile.default] 部分下方:
[rpc_endpoints]
stable_testnet = "https://rpc.testnet.stable.xyz"这会告诉 Foundry,当你针对 stable_testnet 时,交易应发送到何处。Stable 兼容 EVM,因此无需其他配置。
**检查点:**确认你的 RPC 端点可访问:
cast chain-id --rpc-url https://rpc.testnet.stable.xyz预期输出:
2201链 ID 2201 是 Stable Testnet。如果你看到此数字,则你的机器可以访问该网络。
4. 获取你的钱包地址
从你的私钥派生你的部署者地址,以便你知道要为哪个账户注资:
source .env
cast wallet address $PRIVATE_KEY复制打印出的地址。你在下一步中需要它。
5. 使用 USDT0 为你的钱包注资
Stable 使用 USDT0 作为其 Gas 代币。你用于支付商品和服务的相同资产直接用于支付计算费用。没有二级原生代币。
访问测试网水龙头并请求资金:
https://faucet.stable.xyz粘贴上一步中的地址。水龙头会向你的钱包发送 1 USDT0,这足以部署并与多个合约交互。
**检查点:**确认你的余额已到账:
cast balance $PRIVATE_KEY --rpc-url https://rpc.testnet.stable.xyz你应该会看到一个非零值。如果余额仍然是 0,请等待几秒钟并重新运行。Stable 大约每 0.7 秒生成一个新块,因此资金很快就会结算。
6. 部署合约
使用 forge create 运行部署:
source .env
forge create src/Counter.sol:Counter \
--rpc-url https://rpc.testnet.stable.xyz \
--private-key $PRIVATE_KEY \
--broadcastFoundry 编译合约,广播部署交易,并等待收据。由于出块时间约为 0.7 秒,因此这只需片刻。
**检查点:**输出应如下所示:
[⠒] 正在编译...
没有文件更改,跳过编译
部署者:0xYourAddress
部署到:0xSomeContractAddress
交易哈希:0xSomeTxHash复制 Deployed to 地址。你在接下来的两个步骤中需要它。
7. 调用写入函数
现在调用 setNumber() 以在链上存储一个值:
cast send 0xSomeContractAddress "setNumber(uint256)" 42 \
--rpc-url https://rpc.testnet.stable.xyz \
--private-key $PRIVATE_KEY这会发送一笔交易。你正在支付少量的 USDT0 费用来进行状态更改。值 42 现在存储在 Stable 测试网上的 number 变量中。
8. 从链中读取状态
调用 number() 以读回该值。这是一个免费读取,无需交易,也无需 Gas:
cast call 0xSomeContractAddress "number()(uint256)" \
--rpc-url https://rpc.testnet.stable.xyz预期输出:
42你刚刚写入并读取了 Stable 测试网。往返(部署、写入、读取)是 EVM 开发的核心循环,它在这里的运行方式与任何其他 EVM 链完全相同。
9. 在 Stablescan 上检查你的部署
打开 Stable 测试网区块浏览器并粘贴你的合约地址:
https://testnet.stablescan.xyz你将看到你的部署交易和你进行的 setNumber 调用。Stablescan 是检查链上状态、验证合约源代码以及读取 Stable 上的交易历史记录的规范工具。
你构建了什么
你部署了一个合约,发送了一笔状态更改交易,并在 Stable 测试网上读取了链上状态。你现在知道如何:
- 配置 Foundry(或任何 EVM 工具链),使用标准 RPC 端点定位 Stable
- 使用 USDT0 水龙头为钱包注资
- 使用 USDT0 作为 Gas 代币支付交易费用
- 在 Stablescan 上检查你的工作

