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