Saltearse al contenido

Guía de Migración de Ethereum a Aptos

Para aprender más sobre las diferencias y similitudes mira Aptos Learn

Aptos está diseñado para permitirte prototipar rápidamente y escalar aplicaciones seguras a nivel de producción. Combina una capa de blockchain rápida, estable y de bajo costo con la seguridad en tiempo de compilación de Move, que detecta exploits antes del deploy. Ofrece tooling completo para un desarrollo rápido y un ecosistema sólido de exchanges y bridges para una integración fluida.

FeatureEthereumAptos
Account Addresses160-bit256-bit
Mentalidad del StorageStorage basado en el contratoMentalidad centrada en la cuenta (account-centric) para código y data
Caller IDmsg.senderReferencia &signer
Smart ContractsSolidity, EVMMove, MoveVM
BeneficiosMadurez, amplia adopciónEscalabilidad, baja latencia, fees predecibles
Transaction FeesVariables, pueden ser altosMás bajos y predecibles
Sponsored TransactionsRequiere servicios de terceros o soporte de wallets EIP-7702 (2025+)Soportado nativamente mediante el campo fee payer. Geomi Gas Stations provee infraestructura de producción
Estructura de CuentaBalance en un solo campo, usa nonceMódulos y resources, usa sequence number
Data StoragePatricia Merkle TreesStorage global con resources y módulos
UpgradeabilityPatrones proxyActualizaciones directas de módulos
Safety & SecurityVulnerable a ataques como reentrancyMitiga vulnerabilidades comunes
Dispatch TypeDynamic dispatchStatic dispatch
Frontend SDKLibrería Ethers.jsAptos Typescript SDK
NFT StandardsERC-721, ERC-1155Digital Asset
FT StandardERC-20, factory patternVer Fungible Asset, copia y pega en tu módulo: use aptos_framework::fungible_asset...
Código de EjemploERC-20 (nuevo contrato por deploy)Fungible Asset (módulo único reutilizable)

La documentación del Coin legacy aún cubre el estándar original; la mayoría de los nuevos deployments deberían preferir el módulo Fungible Asset referenciado arriba.


Comparativa Detallada de Estándares de Tokens

Sección titulada «Comparativa Detallada de Estándares de Tokens»
SolidityMove (Aptos)
Estructura del TokenCada token es su propio contrato.Cada token es una instanciación tipada de FungibleAsset que reutiliza el mismo módulo publicado.
Token StandardDebe cumplir estándares como ERC-20; las implementaciones pueden variar por deploy.Interfaz e implementación uniformes impuestas por el módulo compartido; los nuevos tokens simplemente registran un nuevo tipo en lugar de redeployar código.
Almacenamiento del BalanceBalances almacenados en el contrato usando una estructura de mapping.Balance Orientado a Resources: los balances viven en un objeto extensible propiedad de la cuenta del usuario.
Mecanismo de TransferenciaLos tokens pueden transferirse sin el permiso explícito del receptor.Las transferencias pueden omitir el permiso del receptor, pero solo cuando el FA habilita explícitamente la auto-creación de primary-store (visible en el código de creación del token).
SolidityMove (Aptos)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Estructura del TokenCada token es su propio contrato.Cada token es un Coin tipado o FungibleAsset usando un contrato único y reutilizable.
Estándar del TokenDebe cumplir con estándares como ERC20; las implementaciones pueden variar.Interfaz e implementación uniforme para todos los tokens.
Almacenamiento del BalanceBalances guardados en el contrato usando una estructura de mapping.Balance Orientado a Recursos: Balances guardados como un recurso en la cuenta del usuario. Los recursos no pueden ser creados arbitrariamente, asegurando la integridad del valor del token.
Mecanismo de TransferenciaLos tokens se pueden transferir sin permiso explícito del receptor.Excepto en casos específicos (como AptosCoin), los Tokens generalmente requieren la autoridad del signer del receptor para la transferencia.

  • EVM: Conocida por su flexibilidad y dynamic dispatch, que permite una amplia gama de comportamientos en los smart contracts. Sin embargo, esta flexibilidad puede generar complejidades en la ejecución paralela y las operaciones de red.
  • Move VM: Se enfoca en la seguridad y eficiencia con un enfoque más integrado entre la VM y el lenguaje de programación. Su modelo de almacenamiento de data permite una mejor paralelización, y su método de static dispatch mejora la seguridad y la predictibilidad.
  • EVM: Conocida por su flexibilidad y dispatch dinámico, lo que permite una amplia gama de comportamientos en los smart contracts. Esta flexibilidad, sin embargo, puede llevar a complejidades en la ejecución paralela y operaciones de red.
  • Move VM: Se enfoca en la seguridad y eficiencia con un enfoque más integrado entre la VM y el lenguaje de programación. Su modelo de data storage permite una mejor paralelización, y su método de dispatch estático mejora la seguridad y la predictibilidad.

EVM (Ethereum Virtual Machine)Move VM (Move Virtual Machine)
Data StorageLa data se almacena en el espacio de storage del smart contract.La data se almacena entre smart contracts, cuentas de usuario y objects.
ParalelizaciónLa ejecución paralela es limitada debido al espacio de storage compartido.Mayor ejecución paralela habilitada por un diseño de storage dividido y flexible.
Integración VM y LenguajeCapas separadas para la EVM y los lenguajes de smart contract (ej. Solidity).Integración fluida entre la capa de la VM y el lenguaje Move, con funciones nativas escritas en Rust ejecutables en Move.
Operaciones Críticas de RedLa implementación de operaciones de red puede ser compleja y menos directa.Operaciones críticas como la gestión del validator set están implementadas nativamente en Move, permitiendo su ejecución directa.
Function CallingEl dynamic dispatch permite llamadas arbitrarias a smart contracts.El static dispatch se alinea con el enfoque en seguridad y comportamiento predecible.
Type SafetyLos tipos de contrato proveen un nivel de type safety.Los structs de módulos y los genéricos en Move ofrecen un type safety robusto.
Transaction SafetyUsa nonces para el orden y seguridad de las transacciones.Usa sequence numbers para el orden y seguridad de las transacciones.
Authenticated StorageSí, con el storage del smart contract.Sí, aprovechando el modelo de resources de Move.
Accesibilidad de ObjectsLos objects no son accesibles globalmente; están ligados al scope del smart contract.Accesibilidad global garantizada de los objects.

Tips de Migración para Desarrolladores de Ethereum

Sección titulada «Tips de Migración para Desarrolladores de Ethereum»

Ethereum almacena toda la data en el storage del contrato usando mappings. Aptos usa un modelo centrado en la cuenta (account-centric) donde cada cuenta almacena sus propios resources. En lugar de que un contrato mantenga un mapping(address => T), cada usuario almacena su propio resource T en su dirección.

module my_hackathon_account::prototype {
use std::string;
use std::signer;
// Unlike Solidity's mapping(address => string), each account stores their own resource
struct MessageHolder has key, store, drop {
message: string::String,
}
entry fun set_message(account: &signer, message: string::String) acquires MessageHolder {
let addr = signer::address_of(account);
// Check if resource exists at this account (like checking mapping[addr])
if (exists<MessageHolder>(addr)) {
move_from<MessageHolder>(addr); // Remove old resource
};
// Store resource at the user's address (in their account, not in contract storage!)
move_to(account, MessageHolder { message });
}
#[view]
public fun get_message(addr: address): string::String acquires MessageHolder {
assert!(exists<MessageHolder>(addr), 0);
// Read message stored at the user's address
borrow_global<MessageHolder>(addr).message
}
}

Por defecto, los módulos se deployean en la dirección de tu cuenta. Para apps en producción, considera hacer deploy en Objects, lo que crea una dirección única por cada deploy y permite la propiedad transferible del código. Revisa Using Objects para detalles de implementación.

Aprende más: global storage operators, structs and resources

EVM (Ethereum Virtual Machine)Move VM (Move Virtual Machine)
Data StorageLa data se almacena en el espacio de storage del smart contract.La data se almacena a través de smart contracts, cuentas de usuario y objetos.
ParalelizaciónLa ejecución paralela es limitada debido al espacio de storage compartido.Mayor ejecución paralela habilitada gracias al diseño flexible de split storage.
Integración de VM y LenguajeCapas separadas para la EVM y lenguajes de smart contracts (ej. Solidity).Integración fluida entre la capa de VM y el lenguaje Move, con funciones nativas escritas en Rust ejecutables en Move.
Operaciones Críticas de RedLa implementación de operaciones de red puede ser compleja y menos directa.Operaciones críticas como la gestión del validator set implementadas nativamente en Move, permitiendo ejecución directa.
Llamadas a FuncionesEl dispatch dinámico permite llamadas arbitrarias a smart contracts.El dispatch estático se alinea con un enfoque en seguridad y comportamiento predecible.
Type SafetyLos tipos de contrato proveen cierto nivel de type safety.Los structs de módulos y genéricos en Move ofrecen un type safety robusto.
Transaction SafetyUsa nonces para el ordenamiento y seguridad de transacciones.Usa sequence numbers para el ordenamiento y seguridad de transacciones.
Storage AutenticadoSí, con storage de smart contract.Sí, aprovechando el modelo de recursos de Move.
Accesibilidad de ObjetosLos objetos no son accesibles globalmente; están atados al scope del smart contract.Accesibilidad global garantizada de objetos.