Solidità - Assemblaggio

Solidity fornisce un'opzione per utilizzare il linguaggio assembly per scrivere assembly inline all'interno del codice sorgente Solidity. Possiamo anche scrivere un codice assembly autonomo che poi verrà convertito in bytecode. Standalone Assembly è un linguaggio intermedio per un compilatore Solidity e converte il codice Solidity in un Assembly Standalone e quindi in byte code. È possibile utilizzare lo stesso linguaggio utilizzato in Inline Assembly per scrivere codice in un assembly autonomo.

Assemblaggio in linea

Il codice assembly inline può essere intercalato all'interno del codice di base Solidity per avere un controllo più fine su EVM e viene utilizzato soprattutto durante la scrittura delle funzioni di libreria.

Un codice assembly è scritto sotto assembly { ... } bloccare.

Esempio

Prova il codice seguente per capire come funziona una libreria in 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);
   }
}

Eseguire il programma di cui sopra utilizzando i passaggi forniti nel capitolo Solidity First Application .

Note - Seleziona Test dal menu a discesa prima di fare clic sul pulsante di distribuzione.

Produzione

0: uint256: 15