用途:把关于 TVM 操作码崩溃、内存分配、gas 计费、指数级资源消耗、RUNVM/RUNVMX 计费重置、调试输出等假设,转化为最小可执行的 Fift/Asm.fif 探针并给结论。若假设依赖验证者网络、出块、账户状态或交易重放,应改用本地网络排查技能或两者结合。
主要能力:以 Fift 栈语言与 TVM 汇编编写探针,用 gasrunvmcode 等返回结果、退出码与 gas;用 /usr/bin/time -v 单独测宿主 RSS 与 CPU,用 timeout 限制可疑挂起;对照已计费基线(如 BTOS 对 ENDC 等)比较;按 confirmed、rejected、tooling-only、version-gated、needs network-level repro 分类。
使用方式:先定位汇编助记符与 C++ 执行实现,确认 gas 计费点、分配点、是否版本门控,再写最小探针。示例:"Asm.fif" include 后 2 3 <{ ADD DUP MUL }>s 1000000 gasrunvmcode .s cr,运行 build/crypto/fift -Icrypto/fift/lib -s probe.fif。用 /usr/bin/time -v 与 timeout 记录 RSS、CPU、退出状态;不要跨版本硬编码同一个 gas 数字,需记录构建标识、global_version、探针、退出码与实测 gas。
注意 Fift 宿主 word runvmx 的模式位与 TVM 操作码 RUNVM/RUNVMX 的模式位不同,不能混用;例如 Fift +256 是栈回溯,TVM RUNVM +256 是精确返回数量。
适用场景与限制:适用于共识执行、get-method/liteserver、Fift 工具链、仅调试代码等表面的资源与崩溃假设排查。崩溃指 SIGSEGV、SIGABRT、CHECK 失败等原生进程失败;TVM 异常、out-of-gas(如返回 -14)、无效操作码或 Fift abort 不算崩溃。仅凭一次缓慢运行不能推断指数行为,需至少四个规模点并保持其他变量固定;需有界 PoC 证明生产可达路径且 TVM gas 显著低于宿主消耗才可确认。仅在 Fift 调试标志、DUMP*、栈回溯、.s、.dump 等路径下出现的结果,通常归为工具/调试类,除非有生产服务对不可信输入开放同一路径。已知假阳性包括 BTOS 设计上便宜、前 10 次 Ed25519 CHKSIGNU/CHKSIGNS 免费、RUNVM 默认继承 chksgn_counter、以及 global_version>=9 已修复的嵌套延续免费 gas 问题。