Contratos Inteligentes
Stellar ha integrado una plataforma de contratos inteligentes llamada "Soroban" en el protocolo central.
Un contrato inteligente es un conjunto programado de código ejecutable y estado que se puede al invocar un contrato en la red Stellar.
Wasm
Una vez que un contrato inteligente ha sido desarrollado por un desarrollador y compilado en un archivo ejecutable WebAssembly (Wasm), se puede "instalar" en la red Stellar. Una entrada de ledger CONTRACT_DATA
es creada para almacenar estos datos binarios y su identificador único es el hash del archivo ejecutable. This binary executable is stored independently from its deployed contract(s). Cuando una transacción de Stellar intenta invocar una función de contrato, el bytecode de Wasm se recupera primero del ledger y se instancia una máquina virtual de tiempo de ejecución segura y aislada ("VM") para que pueda ejecutar el bytecode del contrato y luego salir.
Instancias de Contratos
Después de que el bytecode ejecutable se instala en on-chain, se pueden desplegar instancias de contrato que referencien el bytecode mencionado anteriormente. Un ejecutable de contrato inteligente puede tener una relación de uno a muchos con "instancias de contrato" que funcionan de manera independiente. Esto significa que el mismo código ejecutable puede ser utilizado por múltiples instancias de contrato que se comportan de manera idéntica (debido al código ejecutable compartido), mientras mantienen datos de estado separados y distintos (porque los datos están vinculados a la instancia del contrato). Una instancia de contrato se almacena como su propia entrada de ledger, y cualquier almacenamiento de instancia del contrato se almacena en esa misma entrada de ledger junto a la instancia del contrato.
Almacenamiento de Contratos
Además de las entradas de ledger que se crean durante el proceso de instalación/despliegue del contrato, cada contrato puede crear y acceder a su propio conjunto de entradas de ledger. Estas entradas de ledger (así como el código del contrato y las entradas de ledger de la instancia del contrato) están sujetas a las vidas útiles de archivaje de estado (el "TTL ledger" de una entrada de ledger). Aunque todas funcionan de manera similar, cada tipo tiene su propio comportamiento de tarifas y TTL.
Almacenamiento Temporal
- Tarifas más baratas.
- Eliminado permanentemente cuando se alcanza su TTL ledger, no se puede restaurar.
- Suitable for time-bounded data (i.e. price oracles, signatures, etc.) y datos fácilmente recreables.
- Cantidad ilimitada de almacenamiento.
Almacenamiento Persistente
- Tarifas más caras (mismo precio que el almacenamiento
Instance
). - Recuperable después de archivado, puede ser restaurado usando la operación
RestoreFootprintOp
. - No comparte la misma vida útil que la instancia del contrato. Si la instancia del contrato no ha alcanzado su TTL ledger, los datos
Persistent
aún pueden ser archivados y necesitar ser restaurados antes de invocar el contrato. - Cantidad ilimitada de almacenamiento.
- Adecuado para datos de usuario que no pueden ser
Temporary
(es decir, saldos).
Almacenamiento de Instancia
Mientras hacemos una distinción aquí entre almacenamiento "persistente" y "de instancia", el almacenamiento de instancia es realmente solo un tipo conveniente y abstracto de almacenamiento persistente. Bajo el capó, el almacenamiento de instancia funciona igual que el almacenamiento persistente, excepto que su propio TTL está vinculado al de la instancia del contrato.
- Tarifas más caras (mismo precio que el almacenamiento
Persistent
). - Recuperable después de archivado, puede ser restaurado usando la operación
extendFootprintTTLOp
. - Comparte la misma vida útil que la instancia del contrato. Si la instancia del contrato no ha alcanzado su TTL ledger, los datos de instancia están garantizados que serán accesibles.
- Cantidad limitada de almacenamiento disponible.
- Adecuado para el estado del contrato "compartido" que no puede ser
Temporary
(es decir, cuentas administrativas, metadatos del contrato, etc.).