Descubriendo “AVM 1.0” de Algorand

Esta semana marca un lanzamiento importante para la cadena de bloques Algorand. Nos complace anunciar el lanzamiento de la versión 1.0 de Algorand Virtual Machine (AVM). Esta versión viene acompañada de una experiencia totalmente nueva en el Portal del Desarrollador, con nuevas guías para que puedas ponerte en marcha rápidamente. Este artículo cubrirá algunos de los aspectos más destacados que ahora están disponibles en la AVM, además de algunos cambios adicionales en el blockchain.

Descubra las novedades con una nueva experiencia en el Portal para desarrolladores

¡El sitio para desarrolladores de Algorand se ha actualizado con una apariencia y estilo completamente nuevos! Hemos agregado nuevas guías de introducción que le enseñarán los conceptos básicos de blockchain, cómo crear dApps, tokenizar activos e integrarse con Algorand blockchain. Lo llevaremos a través de una visita guiada sobre cómo tokenizar y subastar un activo, utilizando prácticamente todas las tecnologías disponibles en Algorand. La subasta se implementa con un contrato inteligente de Python que muestra muchas de las características de AVM 1.0. Estas guías se han mejorado aún más para permitirle ejecutar ejemplos en repl.it al, sin necesidad de configuración.

La sección “Obtener detalles” también se ha actualizado para reflejar todos los cambios en Algorand, con esta última versión. Asegúrese de consultar cómo comenzar y obtener información en el sitio para desarrolladores.

Nota:

Como nota particular de interés, Algorand ha cambiado el nombre de los contratos inteligentes con estado y sin estado, a contratos inteligentes y firmas inteligentes para reflejar mejor su caso de uso. ¡Vea el nuevo portal para desarrolladores y lea todo sobre ellos!

Características de AVM 1.0

Con esta versión de AVM, los contratos inteligentes tienen muchas más funciones. Además de los bucles y las subrutinas de la versión 0.9, los contratos ahora pueden emitir transacciones y funcionar como depósitos en garantía. Los contratos ahora también admiten la agrupación de presupuestos relacionados a códigos de operaciones, lo que permite crear contratos con tiempos de ejecución mucho más largos. El límite para la cantidad de contratos inteligentes en los que se puede optar, se ha aumentado a 50 y se han agregado muchos códigos TEAL nuevos.

Transacciones internas

¡Los contratos inteligentes ahora tienen la capacidad de generar transacciones! Cualquier contrato inteligente puede generar hasta 16 transacciones. Estos se conocen como transacciones internas. Las mismas están realmente contenidas en la transacción de la aplicación que activa la ejecución del contrato inteligente y se aplican dentro del mismo bloque que la transacción externa. Las transacciones internas también pueden aprovechar la combinación de tarifas, lo que permite que la transacción de la aplicación externa o alguna otra de ellas, dentro de un grupo de “transacciones atómicas”, pague las tarifas. 

Como ejemplo, aquí está el fragmento de “PyTeal” para crear una transacción de pago simple:

Seq(
    InnerTxnBuilder.Begin(),
    InnerTxnBuilder.SetFields(
        {
            TxnField.type_enum: TxnType.Payment,
            TxnField.receiver: Txn.sender(),
            TxnField.amount: Int(5000),
        }
    ),
    InnerTxnBuilder.Submit(),
)

Debido a que los contratos inteligentes ahora pueden realizar transacciones internas, pueden funcionar como cuentas de depósito en garantía, donde los pagos se determinan mediante la lógica en cadena que puede ser verificada por cualquier persona. Esto también significa que cada contrato inteligente, tendrá una dirección de Algorand generada como parte de su implementación. Esto se suma al “ID” único que se genera actualmente. La herramienta “goal”, de línea de comandos, se ha mejorado para proporcionar esta dirección en cualquier contrato inteligente creado. Esta información también puede ser recuperada por cualquiera de los SDK.

./goal app info --app-id=1234 -d data

Salidas

Application ID:        1234
Application account:   WCS6TVPJRBSARHLN2326LRU5BYVJZUKI2VJ53CAWKYYHDE455ZGKANWMGM
Creator:               GBPNTV4Z6N74SOK4FJET73B5UW6SJ5DZGACBNT7WY36W5V5CYBON4ZXUAM
Approval hash:         LBASN64GUZO5367IYC2AOCV4F2G5TDZWTJFIUVZ5V2ONCS23HG7TMTPPCE
Clear hash:            2GGBZSOTPJAQV4GCAWVRGREDGUDF66EK4A5Y4JBKA4H2XUEZHXXY44MBFA
Max global byteslices: 0
Max global integers:   1
Max local byteslices:  0
Max local integers:    0

Donde la cuenta aparece como “Cuenta de aplicación».

Además de las transacciones de pago estándar, todos los intercambios de activos se pueden iniciar en una transacción interna. Esto incluye crear, eliminar, transferir, congelar o revocar un activo. Los contratos inteligentes que crean un activo, pueden emitir transacciones de configuración de activos, permitiéndoles modificar también las propiedades cambiantes del mismo. Los contratos inteligentes también pueden optar por un activo existente. Algunos ejemplos se muestran a continuación.

Optar por un contrato inteligente en un activo existente. Se puede utilizar una lógica similar para transferir un activo:

Seq(
    InnerTxnBuilder.Begin(),
    InnerTxnBuilder.SetFields(
        {
            TxnField.type_enum: TxnType.AssetTransfer,
            TxnField.xfer_asset: assetID,
            TxnField.reciever: Global.current_application_address(),
            TxnField.amount: Int(0),

        }
    ),
    InnerTxnBuilder.Submit(),
)

Creación de un activo

Seq(
    InnerTxnBuilder.Begin(),
    InnerTxnBuilder.SetFields(
        {
            TxnField.type_enum: TxnType.AssetConfig,
            TxnField.config_asset_name: Byte('gold'),
            TxnField.config_asset_unit_name: Byte('oz'),
            TxnField.config_asset_total: Int(10000000),
            TxnField.config_asset_decimals: Int(3),
            TxnField.config_asset_url: Byte('https://gold.rush/'),
            TxnField.config_asset_manager: Global.current_application_address(),
            TxnField.config_asset_reserve: Global.current_application_address(),
            TxnField.config_asset_freeze: Global.current_application_address(),
            TxnField.config_asset_clawback: Global.current_application_address(),            
        }
    ),
    InnerTxnBuilder.Submit(),
    App.globalPut(created_asa_key, InnerTxn.created_asset_id()),
    Return(Int(1)),
)

Tenga en cuenta que en los ejemplos anteriores, el contrato inteligente es el remitente. Este campo no se establece explícitamente, ya que es el predeterminado.

Otras cuentas de Algorand se pueden volver a asignar a un contrato inteligente, permitiendo que el mismo, controle los activos y ALGO’s de las cuentas. Al hacer esto, debe establecer el campo del remitente en la cuenta con clave nueva. Tenga en cuenta que la cuenta también debe estar en la matriz de cuentas para habilitar esta funcionalidad.

Las transacciones internas proporcionan una mejora significativa a los contratos inteligentes y deberían simplificar el desarrollo de aplicaciones. Para leer más sobre transacciones internas, consulte la nueva documentación para desarrolladores que está disponible.

Presupuesto de “código de operación agrupado”

El AVM limita todos los contratos inteligentes en tiempo de ejecución, mediante el uso de un “presupuesto de código de operación”. Este es un valor numérico que representa la cantidad de potencia informática que utiliza el contrato inteligente, en cualquier llamada en particular al contrato inteligente. Si se excede el presupuesto, el contrato fracasará. Con la versión “AVM 1.0”, este presupuesto se puede ampliar, agrupando la transacción de la aplicación con operaciones adicionales. Cuando se agrupan, varias transacciones combinan su presupuesto de código de operación asignado, en un presupuesto grande. Esto permite efectivamente que las llamadas de contrato inteligente, se ejecuten durante más tiempo cuando se agrupan con llamadas que son muy rápidas.

Para leer más sobre “los presupuestos de códigos de operación”, consulte la documentación de AVM.

Suscribirse a más contratos

Los contratos inteligentes pueden almacenar valores en la cadena de bloques de Algorand. Como parte de esto, pueden acopiar valores que son específicos del contrato y de naturaleza global. Además, los contratos inteligentes pueden almacenar valores para un usuario específico que está interactuando con el contrato. Estos se denominan “variables de estado local”.

Si un contrato inteligente necesita usar variables locales, la cuenta individual debe optar por el contrato. Si no se utilizan variables locales, las cuentas no están obligadas a optar para interactuar. Con esta versión, la cantidad de contratos en los que una cuenta puede optar, se ha incrementado de 10 contratos a 50. 

Para leer más sobre las variables globales y locales en los contratos inteligentes, consulte la documentación del desarrollador.

Códigos de operación adicionales

Los contratos inteligentes de Algorand, tienen un conjunto de “llamadas” que el AVM interpreta cuando realiza la ejecución. Estos se conocen como “códigos de operación” y se pueden considerar como funciones disponibles para contratos inteligentes. Con esta versión, hay nuevos códigos de operación disponibles para varias funciones, incluidos nuevos códigos de operación de verificación, nuevos códigos de operación para manipular la pila y códigos de operación adicionales para obtener propiedades de transacciones agrupadas. 

Un nuevo código de operación específico es “Log”. Este código, permite que el contrato registre información dentro de la ejecución. Estas entradas de registro se escriben en la cadena de bloques como parte de la transacción completada. Lo que efectivamente le da al contrato inteligente la capacidad de devolver un valor. Con “AVM 1.0”, los contratos inteligentes pueden emitir hasta 32 llamadas de registro separadas, con un total de 1 kb de datos que se almacenarán como parte de la transacción. 

Para ejecutar el código “log” usando “PyTeal” digite lo siguiente:

Log(Bytes(‘Value that needs to be logged’))

Para ver la lista actualizada de códigos de operación disponibles para contratos inteligentes, consulte la documentación.


Este artículo ha sido escrito originalmente por Jason Weathersby en «Artículos» del portal para desarrolladores de Algorand y traducido por AlgoLatam.

Original Article: https://developer.algorand.org/articles/discover-avm-10/

Deja una respuesta

Tu dirección de correo electrónico no será publicada.