跳到主要内容

本地求解

求解发生在浏览器的 Web Worker 里,不阻塞页面输入。

题目​

对每个子挑战,客户端按「挑战令牌 + 序号」派生一个长度为 s 的盐,然后在盐后附加一个不断递增的计数器,计算 SHA-256,直到结果的前 d 位十六进制字符为零。

SHA-256(salt + counter) → 000… ← 前 d 个十六进制字符为零

d 每增加 1,期望尝试次数扩大约 16 倍(十六进制一位)。默认 d = 3 时单题期望约 4096 次哈希,c = 20 个子挑战在缓存路径下约 20 ms 完成。

为什么用 WASM​

纯 JavaScript 的哈希循环在低速设备上容易拖长等待时间。求解器以 WebAssembly 形式由本站 /cap/ 静态目录提供,浏览器直接加载,不经过任何公共 CDN。

信息

加载顺序 — 自定义资源地址必须在求解器模块被动态导入之前设置好。模块求值时会立刻发起一次资源预取,晚于这一步设置就会落到默认地址,那会引入第三方请求,破坏同源承诺。

求解失败会怎样​

情况表现
浏览器缺少 Worker 或 WASM明确报错,不静默放行
求解超时组件重置并允许重试
标签页在后台暂停轮询,回到前台再继续
警告

难度不是越高越好。c × d 直接决定兑换接口在服务端验算的耗时,必须留在无服务器函数的时间预算之内。详见难度与性能调优。