es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué es el esquema TL-B en Ton-Solidity y cómo se utiliza?

Esta pregunta se trata del lenguaje de programación Solidity en los contratos inteligentes de la blockchain Everscale.

A veces, veo el código relativo al esquema TL-B. Por ejemplo, así:

function getInvokeMessage(address sender, address recipient, uint128 amount, bool bounce, TvmCell payload) public pure
        returns(TvmCell message) {
        TvmCell body = tvm.encodeBody(MsigDebot.invokeTransaction, sender, recipient, amount, bounce, payload);
        TvmBuilder message_;
        message_.store(false, true, true, false, address(0), address(this));
        message_.storeTons(0);
        message_.storeUnsigned(0, 1);
        message_.storeTons(0);
        message_.storeTons(0);
        message_.store(uint64(0));
        message_.store(uint32(0));
        message_.storeUnsigned(0, 1); //init: nothing$0
        message_.storeUnsigned(1, 1); //body: right$1
        message_.store(body);
        message = message_.toCell();
    }

Necesito explicaciones paso a paso, ¿qué hace este código? ¿O pueden darme las referencias a la documentación que lo explique?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Este código define una función llamada getInvokeMessage que devuelve una variable message de tipo TvmCell. Aquí tienes una explicación paso a paso de lo que hace este código:

    1. La función toma cinco argumentos: sender, recipient, amount, bounce y payload. Estas son variables estándar que se utilizan con frecuencia en los contratos inteligentes de blockchain.
    2. La función comienza definiendo una variable llamada body que almacena los datos codificados de una llamada de función invokeTransaction de un contrato debot multisig llamado MsigDebot. Esta línea de código asume que el contrato MsigDebot tiene una función llamada invokeTransaction que toma sender, recipient, amount, bounce y payload como argumentos.
    3. La función declara una nueva variable llamada message_ de tipo TvmBuilder, que es un objeto en el lenguaje Ton-Solidity utilizado para construir TvmCells.
    4. El objeto message_ se utiliza para construir una variable message de tipo TvmCell.
    5. El objeto message_ almacena varias variables utilizando el método store de la clase TvmBuilder. Esto es lo que hace cada una de ellas:
    • message_.store(false, true, true, false, address(0), address(this)) almacena una tupla de 6 variables que controlan el comportamiento del mensaje. Estas variables son, respectivamente: bounceFlag, enableTick, enableTest, payloadIsR1, src y dst. Se inicializan aquí con valores específicos.
    • message_.storeTons(0) almacena el valor 0 en el campo de valor del mensaje. Claramente, este mensaje no envía TON como parte de su transferencia.
    • message_.storeUnsigned(0, 1) almacena un solo bit de datos en la posición especificada dentro de los datos del mensaje. Esta línea representa la bandera utilizada para indicar si este mensaje tiene una clave pública como dirección, lo cual no es el caso aquí.
    • message_.storeTons(0) almacena otro valor TON de 0 en el campo de encabezado del mensaje.
    1. Las líneas restantes de código simplemente almacenan datos adicionales en el objeto message_:

    message_.storeTons(0) almacena otro valor TON de 0;
    message_.store(uint64(0)) almacena un valor uint64 de 0 en el campo de tiempo de vencimiento del mensaje;
    message_.store(uint32(0)) almacena un valor uint32 de 0 en el campo de límite de gas del mensaje;
    message_.storeUnsigned(0, 1) almacena otra bandera de 1 para indicar si esta transacción tiene un encabezado, que es verdadero en este caso;
    message_.storeUnsigned(1, 1) almacena otra bandera de 1, indicando que el cuerpo de la transacción que definimos en el paso 2 existe;
    message_.store(body) almacena la variable body definida en el paso 2 en el campo de cuerpo del mensaje.
    7. Por último, se llama al método message_.toCell() en el objeto message_ para convertirlo en un objeto TvmCell, que es devuelto por la función getInvokeMessage.

    Este código define la función getInvokeMessage, que toma algunos argumentos y devuelve una variable TvmCell que contiene información sobre un tipo específico de transacción de contrato inteligente. Más específicamente, esta función construye la transacción en el formato del esquema TL-B. Si quieres obtener más información sobre este formato o sobre el lenguaje Ton-Solidity, la documentación en ton.dev es un gran recurso.

Comments are closed.