Si vienes de Ethereum, el mayor cambio es dónde reside el estado. Los contratos EVM agrupan código y almacenamiento. Solana separa los programas (código) de las cuentas (datos). Esto impulsa el paralelismo, el tamaño de las cuentas y los patrones de seguridad.
Una cuenta grande para todos los usuarios: alcanza límites de tamaño y previene el paralelismo. Solución: una cuenta por usuario/entidad con semillas PDA.
Esperar contexto implícito del llamador: Solana no tiene un global msg.sender. Solución: pasar cuentas firmantes y validar con restricciones.
Llamar a programas sin declarar cuentas: las transacciones fallan en tiempo de ejecución. Solución: listar cada cuenta que el llamado necesita en la transacción.
Almacenar saldos dentro del binario del programa: imposible; los programas son ejecutables de solo lectura. Solución: usar cuentas de tokens o saldos de lamports en cuentas de datos.
Asumir estado atómico entre programas: CPI comparte los bloqueos de cuentas de la transacción. Solución: diseñar instrucciones para que todas las cuentas necesarias estén en una sola transacción.
Ignorar el alquiler: las cuentas necesitan depósitos de lamports. Solución: financiar cuentas hasta el mínimo exento de alquiler en la creación.
En cuentas separadas que son propiedad de su programa. El programa en sí solo contiene bytecode ejecutable.
¿Qué reemplaza a un mapeo EVM?
PDAs derivados de semillas (por ejemplo, [b"user", user_pubkey]). Cada entrada es su propia cuenta.
¿Existe un equivalente de Solana para msg.sender?
La cuenta firmante pasada a su instrucción. Valídela con restricciones Signer<'info> o has_one.
¿Pueden dos programas escribir en la misma cuenta?
Solo el programa propietario puede escribir datos. Otros programas pueden leer si la cuenta se pasa y se marca como escribible por el programa propietario a través de CPI.
¿Por qué las transacciones deben listar todas las cuentas por adelantado?
Sealevel utiliza la lista de cuentas para programar la ejecución paralela y aplicar las reglas de bloqueo antes de que comience la ejecución.
¿Tienen los programas de Solana saldos?
Las cuentas de programas contienen lamports para el alquiler, pero los saldos de tokens/SOL de la aplicación residen en cuentas de usuario/token, no en el programa.
¿Cómo se compara la actualizabilidad con los proxies EVM?
Solana utiliza el cargador actualizable BPF: un búfer de programa y una cuenta de datos del programa. La autoridad puede desplegar nuevo bytecode.
¿Qué reemplaza a ERC-20 en Solana?
Programa SPL Token con cuentas de emisión y token. No un contrato por token.
¿Son los CUs lo mismo que el gas?
Concepto similar. CU mide la computación en la cadena. Las tarifas incluyen el costo base de la firma más la tarifa de prioridad para el precio de CU.
¿Puedo desplegar un programa por usuario como contratos de fábrica?
Técnicamente sí, pero es un desperdicio. Use un programa con muchas cuentas de datos (PDAs) por usuario en su lugar.
¿Cómo funcionan los eventos en comparación con los logs EVM?
Los programas emiten logs a través de msg! y emit! de Anchor. Los clientes analizan los logs de transacciones; no hay un almacén de logs persistente en la cadena.
¿Tiene Solana constructores de contratos?
No. Use una instrucción init que cree y configure cuentas en su primer uso.