#3936·fhevm

fix(js-sdk): 两个范围检查验证了错误的边界(assertIsUint128、toClearValueType)

作者: erkancamli创建于 2026年9月14日更新于 2026年9月14日

□ 描述问题

" sdk/js-sdk " 中的两次范围检查没有检查它们所说的范围。 两者都是一相通的滑道,两者都与几行外的一相相矛盾,两者都是当前测试所看不见的,因为阴性案例仍然通过其他方式被否定.

  1. `sertIsUint128 ' 对受约束的 " uint256 " 进行验证

`弧/分/基/int.ts':

导出函数 profileIsUint128( 值: 未知, 选项:...): 声称值为 Uint128 { 如果 (!isUint256(值)) {// isUint128 已存在且正确 扔出无效的新 TypeError( {., expectType : “ int128 ”), 选项 ; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


`assertIsUint8'、`16'、`32'、`64'和`256'各自称其为`isUintN'。 只有128起案件送达了256名警卫,同时仍然报告`预期的Type:`int128',因此`asUint128'返回了一个`Uint128'的品牌价值,而不是`int128'。


作为Uint128( 2n ** 200n) // 返回 2n ** 200n, 无抛出
作为Uint128(MAX UINT128 + 1n) // 返回, 无抛出
asUint128( 1n) // 扔出, 这就是为什么这很容易错过
  1. " To ClearValueType " 索引带有FHE类型名称的绑定表

" src/core/handle/FheType.ts " , "euint8/16/32 " 和 "euint64/128/256 " 武器:

profileIsUint( 值, {... 选项, 最大值: MAX UINT FOR TYPE [fheTypeName]] );


“MAX UINT-FOR-TYPE”由明确的类型名称键入(`int8',`int16',.),从未用“FHE”类型名称键入,因此“MAX UINT-FOR-TYPE['euint8']”是`未定义的',`isUint(价值,未定义)'不适用上限,支票已失效。 `asClearValueType', 上面四十行在同一文件中, 得到正确:


最大值: MAX UINT FOR  TYPE[类型名称来自FheTypeName(fheTypeName)],

因此这两个函数在同一个输入上存在分歧:

作为 ClearValueType ('euint8', 999) // 扔出无效的Type Error 至 ClearValueType ('euint8', 999) // 返回 999 至 ClearValueType('euint64', 2n ** 200n) // 返回 2n ** 200n


这与函数本身的 doc 注释相矛盾,该注释以 QQsrows 结尾 如果价值不是预期的JS类型,或不能被胁迫。 "

□ 内容

`To ClearValueType'在公开解密路径上:`src/core/kms/publicDecryptionProof-p.ts'通过它绘制了已解码的`有序AbiEncodedClearValues'。 准确性而非戏剧性:对于手柄类型来说,一个超出范围值在后期被"创建ClearValue"/"asClearValueType"所捕捉,因此今天可见的效果是更下游更不具体的误差,而不是传到呼叫者的误差. 应该捕捉它的地层根本就没有。

`AssertIsUint128 ' 在`asUint128 ' 之外没有树上呼叫者,因此目前潜伏。

□ 重复或建议的步骤

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
cd sdk/js-sdk 安装 npm
npx vitest 运行 -- config src/vitest. config.ts

fa40f7a'的main'基线:36个文件,910个测试,都是绿色的,因为没有任何东西行使任一功能的上限。

增加了两个案例,使差距明显可见:

//src/core/base/int.test.ts (中文(简体) ). 期望(( ())
. . . . . . .