---
title: "¿Qué es el Solana Program Library?"
description: "Aprende a desarrollar aplicaciones descentralizadas en Solana usando el Solana Program Library"
---

# ¿Qué es el Solana Program Library?

Solana es una blockchain programable de alta velocidad que permite a los desarrolladores crear y desplegar aplicaciones descentralizadas. Solana mantiene una biblioteca de documentación dedicada conocida como Solana Program Library: una colección de programas \(es decir, contratos inteligentes\) precompilados, desplegados y optimizados para usarse en la blockchain de Solana.

En este artículo, exploraremos el mundo de Solana y entenderemos cómo puedes desarrollar rápidamente con Solana Program Library. Ya seas nuevo en Solana o un desarrollador experimentado, puedes crear y desplegar fácilmente tus propios tokens personalizados o un exchange descentralizado con SPL.

## **¿Qué son los programs en Solana?**

**Los programs en Solana son código ejecutable almacenado en un espacio de almacenamiento intermedio llamado account, que se puede ejecutar mediante una transacción, de forma similar a los contratos inteligentes en Ethereum o en cualquier otra blockchain programable.** Sin embargo, a diferencia de Ethereum, donde el programa y el estado se almacenan juntos en los contratos inteligentes, Solana adoptó un enfoque de [modelo de programas sin estado](https://www.alchemy.com/overviews/solana-account-model), donde los datos y los programas se almacenan en accounts.

### **¿Qué son las accounts en Solana?**

Según la documentación de Solana, "una account es un registro en el ledger de Solana que contiene datos o es un programa ejecutable".

Piensa en Solana como una base de datos donde las [accounts](https://www.alchemy.com/overviews/solana-data-vs-program-accounts) son filas, las pub keys funcionan como IDs, y el valor es la información almacenada en la account. Esta información puede ser tanto programas \(es decir, _contratos inteligentes_\) como datos/estado del programa.

Las accounts se identifican mediante una Public Key única \(256 bytes\), que típicamente se ve algo así: "DM6n1qcUCLzJ1RaAuA4gUbBZ9sfHP6KvEwX8oExQqPhk".

Solana tiene una separación lógica entre el código y sus datos, lo que da lugar a dos tipos de accounts: ejecutables y no ejecutables.

#### **1. Accounts ejecutables**‍

Accounts que solo almacenan el código inmutable del programa y están marcadas como _'ejecutables'_.

#### **2. Accounts no ejecutables**‍

Estas accounts almacenan todos los datos que su programa pueda usar, incluyendo las variables, los activos y el estado del programa. Aunque cualquiera puede leer los datos en estas accounts, solo el owner del programa \(el que lo despliega\) puede modificarlos.

Las accounts son mantenidas por [validator nodes](https://www.alchemy.com/overviews/what-is-firedancer) que cobran un costo de mantenimiento llamado '[Rent](https://www.alchemy.com/overviews/how-to-calculate-rent-for-solana-programs)' a cambio del espacio de memoria para almacenar la información mencionada. El rent se paga en **lamports** — la denominación fraccionaria de SOL \(el token nativo de Solana\).

El código y los datos del programa en Solana se mantienen por separado gracias a un sistema conocido como **Sealevel Parallel Runtime.**

### **¿Qué es el sealevel parallel runtime?**

**Sealevel Parallel Runtime es la implementación de Solana de un sistema de procesamiento de transacciones en paralelo**. Las blockchains tradicionales de un solo hilo como Ethereum solo pueden procesar una transacción a la vez para evitar la concurrencia. Esto se debe a que los contratos inteligentes de Ethereum son **con estado** — lo que significa que tanto el estado como el código están acoplados en el mismo contrato.

Con la ayuda de Sealevel, Solana puede procesar miles de transacciones sin conflictos en paralelo. Utilizando múltiples núcleos de validator, Solana también puede ejecutar hasta 50,000 Tps con un tiempo de bloque de 400 milisegundos. Esto es posible porque las instrucciones de las transacciones no tienen estado, y determinan de antemano qué datos de qué account modificarán. Así, los programs que no comparten los mismos datos de account pueden ejecutarse simultáneamente.

## **¿Cuáles son los tipos de programs en Solana?**

El ecosistema de Solana está compuesto por dos tipos distintos de programs — native programs y on-chain programs. Veamos ambos.

### **¿Qué son los native programs?**

**Los native programs son responsables de implementar las funcionalidades centrales de la red de Solana, como gestionar la asignación de almacenamiento de accounts, crear nuevas accounts, procesar transacciones y hacer cumplir las reglas de la red de Solana.**

Los native programs son una parte integral del modelo central de blockchain de Solana. Normalmente están escritos en lenguajes de bajo nivel como Rust y C/C\+\+, optimizados para rendimiento y seguridad. Los native programs pueden ser llamados por cualquier programa/usuario, mientras que un programa a nivel de kernel en tu sistema operativo no puede ser llamado ni accedido directamente por un usuario.

Actualizar estos programs solo puede ocurrir como parte de actualizaciones centrales de la blockchain o actualizaciones del cluster para agregar funciones, corregir errores o mejorar el rendimiento.

Existen numerosos native programs que ayudan a asegurar el validator. Algunos de ellos son:

#### **1. System program**

Los system programs son responsables de crear nuevas accounts, transferir SOL entre dos accounts, asignar la propiedad de accounts y realizar otras operaciones de gestión de accounts similares.

#### 2. Berkeley Packet Filter \(BPF\):

Berkeley Packet Filter gestiona el despliegue, las actualizaciones y la ejecución de programs on-chain.

#### **3. Stake program**

Un stake program es responsable de gestionar el staking de tokens SOL en la blockchain de Solana.

### **¿Qué son los on-chain programs?**

**Los on-chain programs son programas escritos por usuarios \(es decir, contratos inteligentes\) que se despliegan directamente en la blockchain.** Estos pueden abarcar desde una dapp, un exchange, contratos de práctica, una implementación de wallet multi-sig, o cualquier otro programa genérico.

A diferencia de los native programs, los on-chain programs no forman parte del núcleo del cluster de Solana. En cambio, son programas personalizados creados y desplegados por desarrolladores en la blockchain de Solana. Esto significa que los on-chain programs no son esenciales para el funcionamiento de la blockchain de Solana.

Se construyen sobre la infraestructura central proporcionada por los native programs y permiten a los desarrolladores crear una amplia gama de aplicaciones y servicios en la blockchain de Solana.

Los datos con los que interactúan los programs se almacenan en accounts de datos separadas y se pasan como referencias mediante instrucciones. Solo el owner de la account puede actualizar los datos del programa.

<ImageBlock
  src="https://media.alchemy.com/1703692327-programs-in-solana.png"
  alt="Diagrama de programas de Solana almacenando estado en cuentas de datos separadas"
  width={557}
  height={385}
  caption="Programas en Solana"
/>

## **¿Qué es Solana Program Library?**

Solana Program Library \(SPL\) es una colección de programs preescritos y modulares que se pueden usar para construir [aplicaciones descentralizadas](https://www.alchemy.com/dapps/top/defi-dapps) en la blockchain de Solana. SPL busca facilitar a los desarrolladores la creación de aplicaciones proporcionando un conjunto de componentes reutilizables y modulares que se pueden integrar fácilmente en sus aplicaciones, reduciendo la necesidad de escribir código complejo desde cero.

Por lo tanto, SPL permite a los desarrolladores construir aplicaciones usando un enfoque de "**building block**", donde cada componente se puede integrar fácilmente en la aplicación.

SPL contiene múltiples programs genéricos on-chain, siendo el Token program y sus variaciones los más populares, lo que puede ayudar a incorporarlos en tu proyecto sin implementarlos desde cero.

### **Requisitos previos de SPL**

Para interactuar con SPL, puedes elegir entre el enfoque de CLI o el enfoque de JS, comúnmente usado, que incorpora solana/[web3.js](https://www.alchemy.com/dapps/web3-js) para que tu código de Javascript interactúe con la blockchain de Solana.

Para interactuar con cualquier cluster de Solana, también debes [configurar el Solana CLI \(Command Line Interface\)](https://www.alchemy.com/docs/reference/solana-api-quickstart). El CLI puede no ser el más amigable de usar para desarrolladores principiantes, pero proporciona el acceso más directo y seguro a tus accounts de Solana. Además, el CLI es el primer lugar donde los Solana Core Developers despliegan las funcionalidades más nuevas.

## **¿Qué es el SPL Token program?**

**El SPL Token program es una implementación genérica para tokens fungibles y no fungibles en la blockchain de Solana.** Proporciona una interfaz e implementación detallada que permite a los desarrolladores crear su propio token. El código está escrito nativamente en Rust, y sus bindings generados automáticamente están disponibles en C y JavaScript. El código fuente está disponible en el [repositorio de GitHub de SPL](https://github.com/solana-labs/solana-program-library/tree/master/token/program).

En Ethereum, el Token program de [ERC20](https://www.alchemy.com/overviews/erc20-solidity) funciona de manera diferente a un contrato ERC-20 de Ethereum. Veamos un ejemplo para entender la diferencia:

Supongamos que quieres publicar tres tokens diferentes en la blockchain de Ethereum. Para hacerlo, debes desplegar 3 contratos separados, uno para cada token. Y cada contrato de token llevará el registro de su respectivo estado \(por ejemplo, balances y transferencias\).

En el caso de Solana, no es necesario desplegar tres token programs separados. En cambio, puedes desplegar un token program genérico que puede operar sobre múltiples accounts \(por ejemplo, accounts de minting y de recepción\).

La mint address identificará de manera única el tipo de token. Esta información se puede pasar como argumentos a una única instancia estática del programa ERC20 que ya está desplegada en la cadena de Solana.

## **Cómo usar el SPL Token program para crear un token fungible**

Con el SPL Token Program, puedes crear tu token fungible en unos pocos pasos. Antes de empezar con el Token program, asegúrate de haber configurado tu CLI wallet, o [conectado tu Phantom wallet al Devnet de Solana](https://www.alchemy.com/docs/add-alchemy-rpc-to-any-project), y de haber [hecho airdrop de suficiente SOL de devnet](https://www.alchemy.com/overviews/solana-devnet) a tu wallet.

### Paso 1: crea tu token fungible

El comando create token es una instrucción para el SPL Token Program on-chain para crear un nuevo token. Al crear el token exitosamente, recibiremos un Token ID junto con la firma de la transacción. Pero, aún debemos hacerles mint.

**Este es el comando del token**: `spl-token create-token`

<ImageBlock
  src="https://media.alchemy.com/1703692444-running-spl-token-create-token-command.png"
  alt="Resultados de ejecutar el comando spl-token create-token"
  width={1058}
  height={159}
  caption="Resultados de ejecutar el comando spl-token create-token"
/>

### **Paso 2: crea una token account**

Para almacenar la información relacionada con nuestro token en una account de datos separada. La [token account](https://www.alchemy.com/overviews/associated-token-account) pertenece al SPL-Token Program, que controla el acceso a estos tokens junto con el campo owner \(que es nuestro Token-ID, el cual puede gastar/transferir los tokens\).

Como esta es una account de datos, su información puede ser modificada por el Token Program al agregar/mint, transferir o quemar los tokens.

**Este es el comando de creación de la token account**: `spl-token create-account`

Como puedes ver a continuación, perdimos un mínimo de SOL como fees de transacción al crear nuestro token y su account asociada. Además, nota que el suministro inicial es cero. Esto significa que debemos agregar una cantidad deseable de suministro haciendo mint de tokens.

<ImageBlock
  src="https://media.alchemy.com/1703692522-solana-token-balance.png"
  alt="Balance después de ejecutar un comando spl-token create-account."
  width={892}
  height={225}
  caption="Balance después de ejecutar un comando spl-token create-account."
/>

### **Paso 3: haz mint de una cantidad deseable de tokens.**

Para hacer mint de un número determinado de tokens, ejecuta el siguiente comando:

Una vez ejecutado el comando, el número indicado de tokens se acuñará en tu wallet del sistema de archivos, y el suministro de tokens se actualizará.

<ImageBlock
  src="https://media.alchemy.com/1703692591-results-after-minting-tokens.png"
  alt="Salida de terminal después de acuñar 2,000 tokens SPL, mostrando el suministro actualizado"
  width={841}
  height={80}
  caption="Resultados después de acuñar 2,000 tokens"
/>

Puedes verificar el suministro actual del token y la account asociada al token ejecutando el siguiente comando:

<ImageBlock
  src="https://media.alchemy.com/1703692668-checking-spl-token-supply.png"
  alt="Resultados de verificar el suministro de spl-token y el balance de cuentas"
  width={808}
  height={162}
  caption="Resultados de verificar el suministro de spl-token y el balance de cuentas"
/>

Ahora, transfiramos nuestros tokens a nuestra [Phantom wallet](https://www.alchemy.com/dapps/phantom) — una wallet popular en Solana.

### Paso 4: transfiere tokens

El plan es transferir una cantidad 'x' de tokens al recipient — nuestra Phantom wallet. El 'fund recipient' es responsable de crear una token account para el recipient si no existe. Esto se llama crear una [Associated Token Account](https://www.alchemy.com/overviews/associated-token-account).

**Este es el comando para transferir tokens:**

<ImageBlock
  src="https://media.alchemy.com/1703692742-token-transfer-results.png"
  alt="Salida de terminal del comando spl-token transfer enviando tokens a una wallet Phantom"
  width={1345}
  height={197}
  caption="Resultados de la transferencia de tokens"
/>

Recibirás un mensaje de éxito una vez que la transferencia se complete correctamente.

<ImageBlock
  src="https://media.alchemy.com/1703692827-phantom-wallet-transfer-confirmation.png"
  alt="Mensaje de éxito de transferencia en la wallet Phantom"
  width={358}
  height={533}
  caption="Mensaje de éxito de transferencia en la wallet Phantom"
/>

Puedes verificar la transferencia ejecutando este comando: `*spl-token accounts`

Nota: si ejecutas el comando de suministro de tokens, aún mostrará 2,000 tokens porque el suministro indica el número de tokens en circulación en la red, mientras que el balance se refiere al número de tokens que tiene tu token account.

<ImageBlock
  src="https://media.alchemy.com/1703693162-token-balance-vs-token-supply.png"
  alt="Salida de terminal comparando el balance de la cuenta de token SPL con el suministro total de tokens"
  width={812}
  height={163}
  caption="Balance de Tokens vs. Suministro de Tokens"
/>

### **Paso 5: limita el suministro de tokens**

Uno de los aspectos cruciales de la seguridad del contrato y de la demanda es restringir el suministro de tokens. Para deshabilitar la funcionalidad de mint, configura el mint authority en 'None'.

Comando para deshabilitar el mint authority del token: `*spl-token authorize mint --disable`

<ImageBlock
  src="https://media.alchemy.com/1703693237-minting-extra-tokens.png"
  alt="Acuñando 3000 tokens adicionales antes de deshabilitar la acuñación"
  width={899}
  height={201}
  caption="Acuñando 3000 tokens adicionales antes de deshabilitar la acuñación"
/>

<ImageBlock
  src="https://media.alchemy.com/1703693326-mint-authority-disabled.png"
  alt="Salida de terminal después de deshabilitar la autoridad de acuñación del token SPL"
  width={977}
  height={155}
  caption="Resultados de deshabilitar la autoridad de acuñación"
/>

### **Paso 6: quema tokens**

Si quieres reducir el suministro de un token, puedes optar por quemarlo.

Este es el comando para hacerlo: `spl-token burn`

<ImageBlock
  src="https://media.alchemy.com/1703693386-burning-spl-tokens.png"
  alt="Salida de terminal de ejecutar el comando spl-token burn"
  width={904}
  height={122}
  caption="Quemando Tokens SPL"
/>

Una vez quemado, tanto el suministro como el balance se reducirán. Como puedes ver en el ejemplo, nuestro balance bajó de 4,978 a 3,978, y el suministro se redujo a 4,000.

<ImageBlock
  src="https://media.alchemy.com/1703693454-spl-token-burn-results.png"
  alt="Salida de terminal después de quemar tokens SPL, mostrando el balance y suministro reducidos"
  width={817}
  height={184}
  caption="Resultados de la Quema de Tokens SPL"
/>

SPL proporciona una guía de referencia completa sobre cómo puedes usar el Token program para realizar más operaciones, como:

- Envolver SOL en un token.
- Transferir tokens a una token account de un recipient explícito.
- Crear un token no fungible.

## **Empieza tu recorrido de desarrollo en Solana con SPL**

Solana Program Library ofrece una gran cantidad de programs on-chain ya publicados con los que se puede interactuar fácilmente. Con SPL, los desarrolladores pueden enfocarse en las características y funcionalidades únicas de sus aplicaciones — en lugar de dedicar tiempo a código repetitivo y básico para la creación de tokens.

Si eres principiante y quieres empezar tu recorrido de desarrollo en Solana, tu primer paso es explorar SPL y la [Solana API de Alchemy](https://www.alchemy.com/docs/reference/solana-api-quickstart), y una [cuenta gratuita de Solana RPC node](https://dashboard.alchemy.com/signup/?a=solana-program-library). Esto te ayudará a poner en marcha tu programa en poco tiempo.
