Solidité - Assemblage

Solidity fournit une option permettant d'utiliser le langage d'assemblage pour écrire un assemblage en ligne dans le code source de Solidity. Nous pouvons également écrire un code d'assemblage autonome qui sera ensuite converti en bytecode. Standalone Assembly est un langage intermédiaire pour un compilateur Solidity et il convertit le code Solidity en un assemblage autonome, puis en code octet. Nous pouvons utiliser le même langage utilisé dans Inline Assembly pour écrire du code dans un assembly Standalone.

Assemblage en ligne

Le code d'assemblage en ligne peut être entrelacé dans la base de code Solidity pour avoir un contrôle plus fin sur EVM et est utilisé en particulier lors de l'écriture des fonctions de la bibliothèque.

Un code d'assemblage est écrit sous assembly { ... } bloquer.

Exemple

Essayez le code suivant pour comprendre le fonctionnement d'une bibliothèque dans 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);
   }
}

Exécutez le programme ci-dessus en suivant les étapes fournies dans le chapitre Application Solidity First .

Note - Sélectionnez Test dans la liste déroulante avant de cliquer sur le bouton de déploiement.

Production

0: uint256: 15