Programas

Cualquier desarrollador puede escribir e implementar programas en la cadena de bloques de Solana. Los programas (conocidos como contratos inteligentes en otros protocolos) sirven como base para la actividad dentro de la cadena de bloques, potenciando desde DeFi y NFTs hasta redes sociales y juegos.

Hechos

Hoja de hechos

  • Los programas procesan instrucciones de otros programas y de usuarios finales
  • Todos los programas son stateless (sin estado): Los datos con los que interactúan son almacenados en cuentas que son enviadas al programa en instrucciones
  • Los mismos programas son almacenadas en cuentas marcadas como executable (ejecutables)
  • El dueño de todos los programas es BPF Loaderopen in new window y es ejectuado por el Runtime de Solanaopen in new window
  • Los programadores comunmente utilizan Rust y C++ para escribir programas, pero pueden elegir cualquier lenguaje que compile con el backend de BPFopen in new window para LLVMopen in new window
  • Todos los programas tienen un punto único de entrada donde se procesan las instrucciones (i.e. process_instruction); los parámetros siempre incluyen:
    • program_id: pubkey
    • accounts: array,
    • instruction_data: byte array

Un vistazo más profundo

A diferencia de la mayoría de cadenas de bloques, Solana separa completamente el código de los datos. Todos los datos con los que interactúan los programas se almacenan en cuentas separadas y se envían a través de instrucciones. Este modelo permite que un único programa genérico funcione en varias cuentas sin necesidad de implementaciones adicionales. Se ven ejemplos comunes de este patrón en los programas nativos y SPL.

Programas nativos & La librería de Programas de Solana (SPL)

Solana viene equipado con programas que sirven como bloques de construcción para interactuar con la cadena de bloques. Estos programas están dividos en Programas nativosopen in new window y Programas de la librería de programas (SPL)open in new window.

Los programas nativos brindan la funcionalidad base que es requerida para operar validadores. Entre estos programas el más conocido es el Programa del sistema (System Program)open in new window que es responsable de administrar las cuentas y transferir SOL.

Los programas de la librería de programas soportan otras actividades dentro de la cadena de bloques como crear tokens, intercambiarlos, prestar tokens, así como generar pools de staking y mantener el servicio de nombres dentro de la cadena de bloques. El Programa de Token (SPL Token Program)open in new window puede ser invocado directamente desde el CLI (Command Line Interface), mientras que otros como el Programa de cuentas asociadas a token (Associated Token Account Program)open in new window son usados dentro de otros programas.

Escribiendo programas

Los Programas están escritos comunmente en Rust o C++, pero pueden ser desarrollado con cualquier lenguaje que compile al backend BPF de LLVM. Iniciativas recientes de Neon Labsopen in new window y Solangopen in new window habilitan la compatibilidad con EVMopen in new window para permitir a desarrolladores escribir programas con Solidity.

La mayoría de programas de Rust siguen la siguiente arquitectura:

ArcguviDescripción
lib.rsRegistro de módulos
entrypoint.rsPunto de entrada para el programa
instruction.rsAPI del programa, deserializa las instrucciones
processor.rsLógica del programa
state.rsObjetos del programa, deserializa el estado
error.rsErrores específicos del programa

Recientemente, Anchoropen in new window se ha convertido en el framework más popular para desarrollar programas. Anchor es un framework que reduce el boilerplate y facilita la deserialización para los programas desarrollados en Rust.

Los programas normalmente son desarrollados y testeados en los entornos Localhost y Devnet antes de ser desplegados a Testnet y Mainnet. Solana soporta los siguientes entornos:

Entorno del clusterURL de conexión RPC
Mainnet-betahttps://api.mainnet-beta.solana.com
Testnethttps://api.testnet.solana.com
Devnethttps://api.devnet.solana.com
LocalhostDefault port: 8899 (e.g. http://localhost:8899, http://192.168.1.88:8899)

Una vez desplegado a un entorno, los clientes pueden interactuar con el programa dentro de la cadena de bloques utilizando Conexiones RPCopen in new window apuntando al cluster correspondiente.

Desplegando Programas

Los desarrolladores pueden desplegar sus programas utilizando el CLIopen in new window:

solana program deploy <PROGRAM_FILEPATH>

Cuando un programa es desplegado, es compilado a un ELF shared objectopen in new window (conteniendo el bytecode de BPF) y subido al cluster de Solana. Los Programas viven en cuentas (como casi todo en Solana), con la excepción de aquellas marcadas como executable y asignadas al BPF Loader. La dirección del programa desplegada se llama program_id y es usada para llamar al programa.

Solana soporta múltiples BPF Loaders, siendo el último el Upgradable BPF Loaderopen in new window. El BPF Loader es responsable de administrar las cuentas del programa y hacerlas accesibles a los clientes a través del program_id. Todos los programas tienen un único punto de entrada donde se procesan las instrucciones (i.e. process_instruction) y los parámetros siempre incluyen:

  • program_id: pubkey
  • accounts: array,
  • instruction_data: byte array

Una vez llamado, los Programas son ejecutados por el Runtime de Solana.

Other Resources

Last Updated:
Contributors: Marco Ordonez