#dusk $DUSK Estos dos días he estado revisando el repositorio de GitHub de Dusk y encontré un diseño en un documento que no se desarrolla demasiado pero que en realidad es clave: el modelo de aislamiento de memoria de Piecrust VM.

La mayoría de las máquinas virtuales de contratos inteligentes utilizan memoria compartida; entre contratos, los datos se interconectan mediante llamadas a mensajes. Esto tiene ventajas (es flexible), pero también un problema: un bug en un contrato puede contaminar el espacio de memoria de otros contratos. Piecrust VM tomó otro camino: cada instancia de contrato tiene su propio espacio lineal de memoria independiente. Los contratos no pueden leer ni escribir directamente la memoria de otros; solo pueden intercambiar datos mediante interfaces ABI explícitas que pasan datos serializados.

Este nivel de aislamiento, en comparación, se parece más al sandbox de WebAssembly que al estado compartido de EVM. Para el tipo de escenario financiero regulado al que apunta Dusk, el diseño encaja muy bien: un bug en un contrato de token de valores no va a filtrar el saldo de los clientes del contrato vecino de pagos. En auditoría, se puede verificar cada contrato de forma independiente, sin preocuparse por flujos de datos implícitos entre contratos.

Otro detalle que noté es la forma en que Piecrust calcula el gas. No cobra como EVM, por cada opcode; en su lugar, lo calcula ponderando el costo de ejecución de las instrucciones de wasm. Los costos de gas de sumas y restas no son iguales a los de multiplicaciones y divisiones; tampoco son iguales los costos de lectura/escritura de memoria y los de operaciones aritméticas. Esta granularidad, en teoría, permite a los desarrolladores escribir contratos más eficientes: como saben qué operaciones son caras, pueden evitarlas.

Por supuesto, esto también hace que la estimación de gas sea más compleja. La estimación de gas en EVM ya está muy pulida por la toolchain y es bastante madura; en el caso de Piecrust aún falta un profiler maduro. Pero la dirección es correcta: cambiar una medición más precisa por una ejecución más eficiente.@Dusk