从 v1.8.0 起,Klaytn 已全面实现 Ethereum Equivalence:支持预编译合约、以太系 API 以及以太交易类型等。
不过,固定 gas 价格 仍是 Klaytn 与以太坊的最大差异:
- 测试网(Baobab)固定 250 ston
- 主网(Cypress)固定 250 ston
这就意味着 Web3.js、Ethers.js、Hardhat、Truffle 等常见工具若沿用以太坊默认策略(动态定价),交易会立即失败。以下指南将以“以太坊固定 gas 价格设置”为核心关键词,带你一步步完成适配。
核心区别回顾
| 机制 | 以太坊 | Klaytn |
|---|---|---|
| gas 定价 | 伦敦升级后采用 baseFee + tip 浮动模型 | 全链统一固定值 |
| 未设定 gas 价格 | 客户端自动估算 | 直接失效 |
| 正确姿势 | 无需操心 | 必须手动写入固定值 |
Web3.js:两种写法
1. Legacy 交易(兼容所有网络)
const tx = await web3.eth.accounts.signTransaction({
to: '0x8a726c5d1b9b7796df6836f24ef9ea50ab5178c6',
value: 90000000000,
gas: 21000,
gasPrice: 250000000000, // 250 ston
}, privateKey)2. EIP-1559 动态费交易
await web3.eth.accounts.signTransaction({
...
maxFeePerGas: 250000000000,
maxPriorityFeePerGas: 250000000000, // 二者必须同时设为 250 ston
}, privateKey)Ethers.js:同样套路
// Legacy
await wallet.sendTransaction({
to: account,
value: 90000000000,
gasLimit: 21000,
gasPrice: 250000000000,
})
// EIP-1559
await wallet.sendTransaction({
...
maxFeePerGas: 250000000000,
maxPriorityFeePerGas: 250000000000,
})Hardhat:双途径
1. 全局配置 hardhat.config.js
module.exports = {
networks: {
klaytn: {
url: 'provider url',
gasPrice: 250000000000,
accounts: [...]
}
}
}2. 单交易覆盖
项目同时支持 Web3.js / Ethers.js,写法见上。单次手动设置会覆盖全局值。
Truffle:双开关
1. 配置文件 supremacy
klaytn: {
provider: () => new HDWalletProvider({...}),
gas: 50000000,
gasPrice: 250000000000, // Legacy
// 若要强制 EIP-1559:
// maxFeePerGas: 250000000000,
// maxPriorityFeePerGas: 250000000000,
}⚠️ 迁移合约推荐用配置方式,否则部署史上链写入会因 gas 不一致失败。
2. 合约交互时手动传参
deployer.deploy(MetaCoin, {
gasPrice: 250000000000,
maxFeePerGas: 250000000000, // 如需
maxPriorityFeePerGas: 250000000000,
})FAQ:关于 Klaytn 固定 gas 价格最快问答
Q1:测试网和主网的 fixed gas 价格会变动吗?
A:截至目前官方文档写的是 250 ston,若调整仅由治理公示后统一更新,开发者只需关注公告即可。
Q2:为什么我用默认参数也能发送成功?
A:极有可能你把交易发到了兼容以太坊 RPC 的 dev 环境,而非真正的 Klaytn Baobab/Cypress。
Q3:MetaMask 用户怎么办?
A:用户在自定义网络里将“Gas 费率”写死为 250 Gwei(即 250 ston),即可无缝签名。
Q4:我不想手动写代码,有没有更优雅的方式?
A:引入 @klaytn/web3rpc 套壳库,可自动填充 250 ston;但生产环境还请显式声明,防止库升级带来意外。
小结 checklist
- ✅ 每次构造交易,务必写入
gasPrice = 250,000,000,000(或 maxFee/maxPriority)。 - ✅ 用配置文件统一默认 gas 价格,降低心智负担。
- ✅ 迁移合约必须在
truffle-config.js / hardhat.config.js里写死,防止历史记录错误。 - ✅ 牢记关键字 固定 gas 价格、Web3.js gasPrice、Hardhat gasPrice、Ethers.js fixed gas、Klaytn 250 ston,今后的开发、搜索、排错都围绕它们展开。
——链上不缺工具,缺的是对底层规则的温柔尊重。