系统模块
Stable 的核心协议行为存在于 SDK 模块中: x/bank 、 x/distribution 和 x/staking 。为了使 EVM 可以访问此行为,Stable 将每个模块作为预编译合约公开在固定地址。用 Solidity 编写的合约直接调用预编译,EVM 将调用路由到原生 SDK 处理程序。预编译是在协议级别实现的,因此它们比等效的 Solidity 重新实现节省了更多的 gas。
这三个模块
| 模块 | 预编译地址 | 用途 |
|---|---|---|
| 银行 | 0x0000…1003 (STABLE) | 代币转账、余额记账、津贴管理、授权合约的铸造/销毁。 |
| 分发 | 0x0000…0801 | 质押奖励认领、奖励查询、提款地址管理。 |
| 质押 | 0x0000…0800 | 委托、取消委托、重新委托、验证器查询。 |
| 系统交易 | 0x0000…9999 | SDK 层操作(例如解除绑定完成)的协议发出的 EVM 事件。 |
上面每个页面都解释了模块的功能、何时使用以及在哪里可以找到其 ABI。
为什么是预编译,而不是 Solidity
原因有二:
- Gas 效率。 预编译在协议的原生执行路径中运行。等效的 Solidity 合约将重新实现相同的逻辑,但 gas 成本明显更高。
- 单一事实来源。 质押、分发和代币供应是协议级状态。通过预编译公开它们可以避免维护重复的 Solidity 实现,这可能会偏离 SDK。
授权
某些预编译方法(mint、burn、协议级质押操作)需要调用者授权。x/precompile 模块维护一个链上白名单,未注册合约的调用会回滚。这使得特权操作受到治理限制,同时不阻止 EVM 对读/转账方法的通用使用。

