机密性模型
OXN 加密你的合约做了什么,但把合约是什么、以及它在共识中如何嵌入保持公开。本页是这条边界的参考。
什么被加密
面向合约的数据——你的 Solidity 代码产生、消费或读回的东西:
- 合约存储。 每一次
SSTORE。静态由 enclave 持有的密钥加密。节点运营方 dump 原始存储树看到的是密文。 - 交易 calldata。 函数选择器、所有参数、任何原始字节。Wrapped 客户端对此完全透明。
- 返回数据。 你函数产出的
abi.encode(...)。用调用者的会话密钥加密回给调用者。 eth_call输入与输出。 签名查询和加密 view 调用的输入输出都是端到端加密的。- 事件日志内容。 topic 和 data 都加密。关于谁能解密请见下方警告。
- Revert reason。
require(cond, "msg")和自定义 error 的错误字符串。加密回给调用者——没有调用者的会话密钥,从外部无法调试失败的交易。
什么不被加密
链自身用来路由、排序、结算交易所需的元数据:
- 发送方与接收方地址(
tx.from、tx.to)。始终可见。 - 外层交易的
msg.value。 如果价值通过一次合约调用流动,value字段是可见的,尽管移动它的合约逻辑不可见。 - Gas 价格、gas limit、gas used。 每个区块公开。
- 合约字节码。 每一份已部署合约的代码都是公开可查的,与以太坊一致。
- 合约地址与创建交易。 公开。
- 区块元数据——区块号、时间戳、区块哈希、区块内交易顺序。
- 交易状态(成功或 revert)。Revert 原因被加密,但成功标志本身不加密。