预编译合约概览
OXN 提供两族预编译:
- 标准 EVM 预编译——与以太坊一致,在地址
0x01–0x0a。用于ecrecover、sha256、椭圆曲线数学等常用原语。 - OXN 机密预编译——加密、随机数、密钥派生、签名等额外内建。它们使机密智能合约实用可行。
所有机密预编译都由 Sapphire Solidity 库封装。import 后调用即可——永远不需要自己写原始 staticcall。
机密预编译目录
| 函数 | 用途 | 类别 |
|---|---|---|
Sapphire.randomBytes(uint, bytes) | TEE 认证的随机字节 | 随机数 |
Sapphire.encrypt(...) | Deoxys-II 对称加密 | 对称加密 |
Sapphire.decrypt(...) | Deoxys-II 对称解密 | 对称加密 |
Sapphire.deriveSymmetricKey(pub, priv) | X25519 共享密钥派生 | 密钥派生 |
Sapphire.generateSigningKeyPair(alg, seed) | Ed25519 / secp256k1 / sr25519 密钥对生成 | 签名 |
Sapphire.sign(alg, sk, ctx, msg) | 用合约持有的私钥签名 | 签名 |
Sapphire.verify(alg, pk, ctx, msg, sig) | 验证签名 | 签名 |
完整参数细节在每个链接的参考页。
安装 Sapphire 库
Solidity wrapper 在 @oasisprotocol/sapphire-contracts:
npm install @oasisprotocol/sapphire-contracts
在合约中 import:
import "@oasisprotocol/sapphire-contracts/contracts/Sapphire.sol";
contract MyContract {
function makeRandom() external view returns (bytes memory) {
return Sapphire.randomBytes(32, "");
}
}
标准 EVM 预编译支持
0x01–0x09 上的每一个以太坊预编译都支持。0x0a(pointEvaluation,EIP-4844 KZG)不支持——OXN 没有 blob 交易。
完整支持矩阵见标准 EVM 预编译。
常见模式
抽奖用的链上随机数:
function pickWinner() external view returns (address) {
bytes memory r = Sapphire.randomBytes(32, "");
uint256 idx = uint256(bytes32(r)) % participants.length;
return participants[idx];
}
合约控制的链下签名:
bytes private signingKey; // 加密存储
function initialize() external onlyOwner {
(bytes memory pk, bytes memory sk) = Sapphire.generateSigningKeyPair(
Sapphire.SigningAlg.Ed25519_Pure, "seed"
);
signingKey = sk;
// 公开 pk 供验证方使用
}
function signMessage(bytes calldata msg_) external returns (bytes memory) {
require(canSign(msg.sender, msg_), "not authorized");
return Sapphire.sign(
Sapphire.SigningAlg.Ed25519_Pure,
signingKey,
"context",
msg_
);
}
用户间加密消息传递:
// Alice 通过 X25519 派生把对称密钥送给 Bob
bytes32 shared = Sapphire.deriveSymmetricKey(bobsPublicKey, alicesPrivateKey);
bytes memory ciphertext = Sapphire.encrypt(shared, nonce, plaintext, "");
完整应用示例见指南。
Gas 成本
每个预编译有一个基础 gas 成本加上按 payload 大小的按字节成本。精确数字见 Gas 成本参考。
下一步
- 标准 EVM 预编译——支持矩阵
- 随机数——安全的链上随机数
- 签名——签名、验证、生成密钥对