AetherContracts 基础规范
AetherContracts 基础规范
Section titled “AetherContracts 基础规范”本中文页面用于帮助理解。规范性定义、Schema、测试夹具和 TCK 以 AetherContracts 对应版本的英文发布内容为唯一权威。
权威来源:AetherContracts。此页面已镜像到统一的 AetherIoT 文档中。
v1 alpha 逻辑表示和线路编码为 UTF-8 JSON。封闭的核心对象拒绝未知领域。符合标准的原始解码器还必须拒绝重复的对象键、格式错误的 Unicode、超出配置文件限制的输入以及在没有合约声明的语义的情况下无法表示的 JSON 数字。
协议 uint64 值是规范的十进制字符串。它们没有符号、空格、小数点、指数或前导零,但零恰好是 "0"。最大值 uint64 为 "18446744073709551615"。 Thing Model 可以声明 int64 值类型,但其带符号的连线表示形式和 TCK 已计划好,不会被该 alpha 基础冻结。
验证顺序是约定的:在检查绑定输入类型后,在检查数字语法之前,长度超过 20 字节的表示形式将失败为 INTEGER_OUT_OF_RANGE。这使得无分配的 C 解码器受到限制,并使每种语言在超长对抗性输入时都会出现同样的失败。
JSON Schema接受是必要的,但还不够。排序、重播、身份冲突、授权、修订兼容性和持久接收语义需要上下文验证器和 TCK 场景。
JSON 数字使用有限的 IEEE 754 二进制 64 语义。如果解码后的值是整数值,但超出了可互操作的安全整数范围[-9007199254740991, 9007199254740991],则仅当其 RFC 8785 序列化保留小数点时才接受;否则生产者必须使用契约声明的十进制字符串。因此,1e100 和 1.5e20 作为 JSON_UNSAFE_NUMBER 失败,而 1e-100 和二进制 64 最大值 1.7976931348623157e308 仍然是浮点值。协议整数从不使用此例外:它们使用显式冻结的字符串编码。
严格解码器对嵌套、字符串、集合和数字标记应用防御性引用运行器预算。这些默认值是实现安全限制,而不是可移植接受最大值。传输或工件配置文件冻结了互操作性需要的可移植限制; MQTT 配置文件当前将完整消息冻结在 262144 字节。其他绑定可能会应用记录的更严格的资源限制,并且必须以 FIELD_BOUND 失败关闭。
当合约定义签名对象时,必须在使用前指定确切的签名投影。它使用 RFC 8785 JSON 规范化进行序列化,使用 SHA-256 进行哈希处理,然后进行签名。漂亮打印的源字节永远不是签名输入。此 Alpha 版本不会冻结 CloudLink 身份验证或签名 ACK 投影。
稳定的字符串失败代码与语言无关。数值和错误文本是绑定详细信息,直到未来的 ABI 配置文件明确冻结它们。