Saltar al contenido principal

Smart Contracts

Los smart contracts de ULedger son programas WebAssembly (WASM) desplegados on-chain y ejecutados por la ULVM (ULedger Virtual Machine). Se ejecutan en un entorno determinista y aislado (sandbox) y no pueden acceder a estado externo ni realizar E/S más allá de lo que ofrece la interfaz del host.


ULVM: el runtime​

La ULVM es un runtime WASM escrito íntegramente en Go y construido sobre wazero. Cada invocación de un contrato se ejecuta en una instancia WASM aislada con:

PropiedadDetalle
Medición de gasCada instrucción WASM consume gas. La ejecución se detiene si se alcanza el límite de gas.
Almacenamiento de estadoLos contratos leen/escriben estado clave-valor mediante las llamadas al host ul_storage_get / ul_storage_set.
Contexto de la transactionLos contratos pueden leer la dirección de la billetera que invoca, la altura del bloque y el ID de la transaction.
DeterminismoSin punto flotante, sin E/S externa, sin syscalls no deterministas.
AislamientoLa memoria está aislada por invocación. Los contratos no pueden acceder directamente al estado de otros contratos.

Ciclo de vida del contrato​

FaseTransactionQuién
DespliegueDEPLOY_CONTRACTLa billetera propietaria carga el bytecode WASM
InvocaciónINVOKE_SMART_CONTRACTCualquier billetera autorizada llama a una función
ModificaciónALTER_CONTRACTEl propietario habilita/deshabilita o actualiza los metadatos
ConsultaLectura de estado de solo lectura vía HTTPCualquier cliente, sin necesidad de transaction

Un contrato desplegado se identifica por su dirección de contrato (el ID de transaction de la transaction DEPLOY_CONTRACT).


Interfaz del host (ABI de la ULVM)​

Los contratos interactúan con el estado de ULedger mediante un conjunto de funciones del host importadas del módulo ul:

Función del hostPropósito
ul_storage_get(key)Leer un valor del estado del contrato
ul_storage_set(key, value)Escribir un valor en el estado del contrato
ul_caller()Obtener la dirección de la billetera que invoca
ul_block_height()Obtener la altura actual del bloque
ul_emit(event, data)Emitir un evento visible para los suscriptores

Los contratos exportan un punto de entrada call(function_name_ptr, args_ptr). La ULVM despacha a la función correcta según el nombre.


Estándares de token​

La ULVM admite tres estándares de token integrados, implementados como contratos WASM:

EstándarEquivalenteDescripción
Token fungibleERC-20Tokens de suministro fijo o acuñables con transfer/approve/allowance
Token no fungibleERC-721IDs de token únicos con seguimiento del propietario
Multi-tokenERC-1155Operaciones por lotes sobre múltiples tipos de token

Referencias detalladas​