Solidez - Montaje

Solidity ofrece una opción para usar el lenguaje ensamblador para escribir ensamblados en línea dentro del código fuente de Solidity. También podemos escribir un código ensamblador independiente que luego se convierte en código de bytes. Standalone Assembly es un lenguaje intermedio para un compilador de Solidity y convierte el código de Solidity en un ensamblado independiente y luego en código de bytes. Podemos usar el mismo lenguaje que se usa en Inline Assembly para escribir código en un ensamblado independiente.

Ensamblaje en línea

El código ensamblador en línea se puede intercalar dentro del código base de Solidity para tener un control más detallado sobre EVM y se usa especialmente al escribir las funciones de la biblioteca.

Un código ensamblador se escribe debajo assembly { ... } bloquear.

Ejemplo

Pruebe el siguiente código para comprender cómo funciona una biblioteca en Solidity.

pragma solidity ^0.5.0;

library Sum {   
   function sumUsingInlineAssembly(uint[] memory _data) public pure returns (uint o_sum) {
      for (uint i = 0; i < _data.length; ++i) {
         assembly {
            o_sum := add(o_sum, mload(add(add(_data, 0x20), mul(i, 0x20))))
         }
      }
   }
}
contract Test {
   uint[] data;
   
   constructor() public {
      data.push(1);
      data.push(2);
      data.push(3);
      data.push(4);
      data.push(5);
   }
   function sum() external view returns(uint){      
      return Sum.sumUsingInlineAssembly(data);
   }
}

Ejecute el programa anterior siguiendo los pasos proporcionados en el capítulo Primera aplicación de Solidity.

Note - Seleccione Prueba en el menú desplegable antes de hacer clic en el botón de implementación.

Salida

0: uint256: 15