Solidez - Montagem

O Solidity oferece a opção de usar a linguagem assembly para escrever montagens embutidas no código-fonte do Solidity. Também podemos escrever um código de montagem autônomo que então será convertido em bytecode. O Standalone Assembly é uma linguagem intermediária para um compilador Solidity e converte o código do Solidity em um Standalone Assembly e então em código de bytes. Podemos usar a mesma linguagem usada no Inline Assembly para escrever código em um assembly autônomo.

Montagem Inline

O código assembly embutido pode ser intercalado na base do código Solidity para ter um controle mais refinado sobre o EVM e é usado especialmente ao escrever as funções da biblioteca.

Um código assembly é escrito em assembly { ... } quadra.

Exemplo

Experimente o código a seguir para entender como uma biblioteca funciona no 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);
   }
}

Execute o programa acima usando as etapas fornecidas no capítulo Aplicativo Solidity First .

Note - Selecione Teste na lista suspensa antes de clicar no botão implantar.

Resultado

0: uint256: 15