Solidity - Сборка

Solidity предоставляет возможность использовать язык ассемблера для написания встроенной сборки в исходном коде Solidity. Мы также можем написать автономный ассемблерный код, который затем будет преобразован в байт-код. Автономная сборка - это промежуточный язык для компилятора Solidity, который преобразует код Solidity в автономную сборку, а затем в байтовый код. Мы можем использовать тот же язык, что и во встроенной сборке, для написания кода в автономной сборке.

Встроенная сборка

Встроенный ассемблерный код может чередоваться в базе кода Solidity, чтобы иметь более точный контроль над EVM, и используется особенно при написании библиотечных функций.

Код сборки написан под assembly { ... } блок.

пример

Попробуйте использовать следующий код, чтобы понять, как работает библиотека в 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);
   }
}

Запустите указанную выше программу, следуя инструкциям в главе « Первое приложение Solidity» .

Note - Перед нажатием кнопки развертывания выберите «Тест» в раскрывающемся списке.

Вывод

0: uint256: 15