
En 2024, Solana surgió inusualmente, TVL se elevó de mil millones de dólares estadounidenses a principios de año a casi 5 mil millones de dólares estadounidenses hoy, y se convirtió en la cuarta cadena pública más grande.
En comparación con Ethereum, Solana ha aportado una mejor experiencia a los usuarios a una velocidad más rápida y menor costo.Su mecanismo de consenso basado en POH y su modelo de ejecución de transacciones asincrónicas proporcionan a los desarrolladores un alto rendimiento y un rendimiento de blockchain de bajo rendimiento, convirtiéndose en la plataforma preferida para varias aplicaciones descentralizadas.
>
Planificación especial de BlockSec«Juega con Solana»La serie de artículos cubre los conceptos básicos de Solana, viendo y analizando las pautas prácticas del comercio de Solana y la redacción de tutoriales de contratos inteligentes de Solana.
Como la primera fase de esta serie, este artículo presentará los conceptos clave en la red Solana, incluido su mecanismo operativo, modelo de cuenta y transacción, para escribir las bases para los contratos de Solana correctos y eficientes para todos.
EBPF: la piedra angular de la ejecución de la transacción Solana
Para escribir y ejecutar contratos inteligentes, Blockchain a menudo requiere un entorno informático de los lenguajes de programación y la turación.
Los amigos que están familiarizados con Ethereum deben saber que los contratos inteligentes en Ethereum generalmente usan solidez de lenguaje de alto nivel para escribir, mientras que el código de byte compilado por la solidez se ejecuta en un entorno llamado Ethereum Virtual Machine.
Solana no eligió desarrollar un nuevo entorno virtual y un lenguaje, sino que hizo uso completo de las excelentes tecnologías existentes.EBPF (Filtro de paquetes Berkeley extendido) Las máquinas virtuales que se usaron originalmente para expandir la función del núcleo Linux fueron seleccionadas por Solana como el entorno de ejecución subyacente.
Entonces, ¿cuáles son las ventajas de EBPF en comparación con EVM?
En comparación con el EVM que solo admite la ejecución de explicación, el EBPF puede convertir directamente el ByTecode en una instrucción de una máquina en el procesador en el modo de compilación de tiempo real (JIT), ejecutando así el programa de manera más eficiente.
EBPF tiene un conjunto de conjuntos de instrucciones eficientes e infraestructura madura.Los desarrolladores solo necesitan usar el lenguaje Rust para escribir contratos inteligentes.El marco de compilación LLVM proporciona un backend de EBPF, que lo usa para compilar directamente el programa escrito por este lenguaje de óxido en el código de byte que puede ejecutarse en la máquina virtual EBPF.
Modelo de cuenta de Solana
1. Estructura de cuenta de Solana
Los datos en Solana se almacenan en forma de una cuenta.Como se muestra en la figura a continuación, podemos considerar todos los datos en Solana como un gran valor clave para la base de datos.La clave de la base de datos es la dirección de la cuenta, para la cuenta de «billetera» (es decir,
Para los usuarios de Solana a través de claves privadas públicas para el control directo sobre la cuenta), esta dirección es una clave pública generada utilizando el sistema de firma ED25519;
>
Solana usa una estructura llamada AccountInfo para describir una cuenta, que se compone como se muestra en la figura a continuación.
>
Cada cuenta en Solana contiene cuatro campos.Aquí lo explicamos uno por uno.
-
Campo de datosSe almacenan datos relacionados con la cuenta.Si la cuenta es un programa (es decir, un contrato inteligente), en realidad es el Bytecode EBPF.De lo contrario, el formato de información en los datos generalmente es definido por el fundador de la cuenta.
-
Campo ejecutableSe utiliza para identificar si la cuenta es un programa.Cabe señalar que, a diferencia de Ethereum, el programa en Solana se puede actualizar.
-
Campo de lamportsRegistre el saldo de la cuenta Token Solana.Lamports es en realidad la unidad más pequeña de Token SOL (1 sol = 1 mil millones de lamports).
-
Campo del propietarioInstruyó al propietario de la cuenta corriente.En Solana, cualquier cuenta tiene un «propietario».Por ejemplo, el propietario de toda la cuenta de «billeteras» es el programa del sistema, que es una cuenta especial en la red Solana, responsable de la creación de cuentas y otras funciones.El propietario de la cuenta es la única persona que puede modificar los datos de la cuenta y deducir el saldo de Lamports (pero cualquiera puede aumentar las lamports, es decir, ejecutar la función de transferencia a la cuenta).
2.
Solana tiene un set llamadoProgramas nativosEl programa de ejecución predeterminado se implementa en una dirección fija.Con la actualización de la red Solana, estos programas predefinidos también pueden actualizarse.Podemos entender estos programas como API y funciones de biblioteca que proporcionan funciones específicas bajo la red Solana.
En los programas nativos, los desarrolladores a menudo necesitan interactuar con él.Programa del sistemaEsenciaEl programa del sistema proporciona a los desarrolladores algunas instrucciones, y podemos comprender cada instrucción como un método independiente.Por ejemplo, los desarrolladores pueden usar la instrucción CreateAcCount para crear una nueva cuenta o usar la instrucción de transferencia para transferir Lamports a otras cuentas.
Otros programas nativos comunes es un programa de cargadores BPF.Es el propietario de todas las demás cuentas del programa, que es responsable de la implementación, actualización y ejecución de procedimientos específicos.Cuando una cuenta de «billetera» necesita actualizar su programa implementado, en realidad se completa encargando el programa de cargadores BPF.
Además de los programas nativos, Solana también proporciona un conjuntoSysvarCuenta.Proporcionan información y variables globales relacionadas con el estado actual de la red Solana, como el reloj actual, el hash de bloque más cercano, etc.
3. Renta de cuenta
En la cadena Solana, cada cuenta debe mantener un cierto número de lamports como la cuota mínima, que se llamaalquilarEsenciaA diferencia del concepto de alquiler en la vida real, se puede recuperar el alquiler de Solana.Para garantizar que los datos de la cuenta en la cadena estén disponibles, la cuenta debe mantener la cantidad correspondiente de Lamports.La cantidad de alquiler está relacionada con el tamaño del espacio de almacenamiento de la cuenta en la cadena.
Cualquier transacción que intente deducir el saldo de la cuenta por debajo del monto de la renta fallará, a menos que la transacción deduca directamente el saldo de la cuenta a cero.Esta operación indica que el alquiler de la cuenta se ha recuperado al final de la ejecución de la transacción, Solana se recuperará por basura para borrar el espacio de almacenamiento de la cuenta correspondiente.
–¿Qué es más?Ver «Cuenta Solana» en el navegador
Para llevar a todos a comprender mejor los conceptos relevantes, utilizamos el proyecto «Hello World» proporcionado por Solana para crear una cuenta de programa.La siguiente cuenta¿Qué es más?Información relacionada.
Cjwhxb4qewbv9egyuktn881bndmdklbzh1fmdwqllhoe
>
Como se muestra en la figura anterior, primero podemos ver que la cuenta ha sido marcada por el navegador Solana como «programa».Al crear la cuenta, se deducen algunos lamports del saldo del remitente como el alquiler de la cuenta.
En segundo lugar, debido a que creamos un programa, su campo ejecutable es sí.Puede haber algo difícil aquí, es decir, los lectores pueden encontrar que el campo de datos almacena una dirección en lugar del programa EBPF.Mencionamos anteriormente que Solana permite programas de actualización, y en realidad se implementa a través de un modo de «proxy».Dado que Solana no permite la modificación directa de las cuentas del programa, crea una cuenta de datos para almacenar el programa EBPF, y el campo de datos de la cuenta del programa solo almacena la dirección de la cuenta de datos.Siempre que necesite actualizar el programa, solo necesita modificar el campo de datos en la cuenta de datos.Utilizamos SOLSCAN para verificar la cuenta del campo de datos ejecutables.
>
Volviendo a la imagen anterior, podemos encontrar que el campo del propietario en más información es el cargador BPF, que es consistente con nuestra descripción en la sección anterior.
También hay un campo llamado «Autoridad de actualización» en la visión general.
Como mencionamos anteriormente, la cuenta de «billetera» se actualiza para actualizar el programa comisionando el cargador BPF.Dado que el campo del propietario de la cuenta del programa ya es BPF Loader, no tiene espacio para almacenar la información, por lo que Solana elige almacenar esta información en la cuenta de datos de la cuenta de datos.La siguiente figura muestra la relación entre la cuenta del programa y la cuenta de datos.
>
Transacciones e instrucciones de Solana
En Solana, los usuarios también ejecutan programas emitiendo transacciones.Su cosa especial es queSolana puede ejecutar estas transacciones en paraleloEsta es también una razón importante por la que puede proporcionar transacciones de rayos.A continuación, echemos un vistazo a cómo se diseñan las transacciones de Solana.
Una transacción de Slana consiste en la firma y el tema del mensaje.Una transacción puede contener múltiples firmas.El cuerpo principal de la transacción está compuesto por cuatro partes, como se muestra en la figura a continuación.
>
NoticiasInformación de la cabeza(Encabezado) yMatriz de direcciones de la cuenta(Matriz compacta de direcciones de la cuenta) Los dos campos especifican las características de todas las cuentas y cuentas involucradas en la transacción en transacciones: si la cuenta proporciona firmas y si se escribirá durante la ejecución.Usando esta información, Solana puede verificar las firmas proporcionadas por la cuenta correspondiente y puede ejecutar esas transacciones que no tocan la misma recopilación de cuenta en paralelo.
Más cercanoBloquear(BLOCKHASH reciente) es la marca de tiempo de la transacción.La red Solana asegura que la transacción provenga de los últimos 150 bloques, de lo contrario, se considerará que la transacción expira y no se ejecuta.
Matriz de instrucciones(La matriz compacta del instructor) es la parte más importante de la transacción y contiene una o más instrucciones.Una instrucción en realidad se llama una rutina proporcionada por un programa.La instrucción consta de tres campos, como se muestra en la figura a continuación:
>
El primer campo del índice de identificación del programa especifica el receptor de la instrucción, es decir, el programa de cadena en la instrucción debe procesarse.No almacena directamente una dirección de 32 byte, pero coloca la dirección en la matriz de direcciones de la cuenta en el asunto del mensaje.Este campo utiliza una oferta de un byte para indicar que su posición en la matriz realiza una reutilización de espacio.
Similar al primer campo, el segundo campo es una matriz compacta de índices de dirección de cuenta, que consiste en la dirección de la cuenta, que indica que se especifican todas las cuentas involucradas en la instrucción.
El último campo es una variedad de bytes.
Cabe señalar que Solana manejará todas las instrucciones en la transacción en orden y se asegurará de que la ejecución de la transacción sea Atom.Esto significa que las instrucciones en una transacción fallan o todas ejecutadas con éxito, y no habrá casos en los que algunas instrucciones se ejecuten con éxito y una falla parcial.
–¿Qué es más?Ver «Transacción Solana» en el navegador
Usamos otro navegador Solana para ver¿Crear una transacción de una cuenta de programa antes?EsenciaEn una visión general, puede ver las firmas de las transacciones de Solana, el hash de bloque reciente y otra información:
3ukq85lpsnwb5d6cguuntomyjx3tsaegb4pjuomamynvqqnpp5prg1kjeeek3yemzgmoj5rowgon8hzwl9d
>
En la entrada de la cuenta, las características de todas las cuentas y cuentas relacionadas involucradas en la transacción actual se enumeran en las transacciones.Podemos ver que, además de los remitentes, cuentas de programas y otras direcciones, también se incluyen los dos programas nativos y cuentas de Sysvar.
>
Dado que la transacción es una transacción de creación de programa simple, solo contiene dos instrucciones.Programa del sistema, Responsable de crear una cuenta de programa;Cargador de bpfResponsable de escribir el código EBPF implementado real en la cuenta de datos y la dirección de su dirección en el campo de datos de la cuenta del programa.
>
Resumir
El contrato inteligente en Solana se desarrolla en el lenguaje de óxido y se ejecuta en la máquina virtual EBPF.Sigue el modelo de cuenta, y la cuenta de la cadena necesita mantener el alquiler para garantizar la disponibilidad de los datos.La transacción consiste en una o más instrucciones, que define claramente todas las cuentas de las que dependen, de modo que la transacción se pueda procesar en paralelo, un mayor rendimiento y reducir el retraso de la respuesta.Estas características promueven conjuntamente el rápido desarrollo de Solana y lo convierten en una de las plataformas populares de blockchain.