Durante meses la cabecera de los cinco weights.rs prometia que regenerar
"es mecanico". No lo era: no habia comando, ni plantilla, ni forma de
correrlo. La promesa costo lo que cuestan las promesas sin codigo — al
medir por primera vez, los 19 extrinsics estaban SUBDECLARADOS, los 19.
Tres piezas:
· scripts/bench/regen-weights.sh — construye el WASM con
runtime-benchmarks y mide los 5 pallets. SKIP_BUILD=1 + WASM=<ruta>
mide un blob YA construido: es el modo del banco de referencia, donde
el Pi 5 no compila Substrate sino que recibe el blob que se despliega,
de modo que el binario medido y el desplegado son el MISMO.
· scripts/bench/origin-weights-template.hbs — emite la forma de la casa
(trait + SubstrateWeight<T> + impl para ()) y, dentro, un guard
GENERADO a partir de los benchmarks reales que reprueba cualquier
proof_size = 0 o ref_time = 0. Generado, no escrito: no puede quedarse
corto cuando se anada un extrinsic.
· scripts/bench/HEADER.txt — la cabecera que va dentro de cada fichero
generado, diciendo que un weight es una latencia y que sin su hardware
y su perfil de potencia no se reproduce.
El script documenta ademas dos cosas medidas hoy que cuestan horas si no
estan escritas: (1) hay que usar frame-omni-bencher 0.15.0, porque la
0.23 trae sp-storage 25 contra el sp-storage 22 de este runtime y
TrackedStorageKey no decodifica al cruzar el FFI — falla con "unexpected
first byte decoding Option", que no se parece a "version equivocada";
(2) el governor ondemand arranca a 1600 MHz y sube a 2400, asi que las
primeras muestras salen ~50% lentas y el weight sale de la rampa.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>