Solidność - montaż

Solidity zapewnia opcję używania języka asemblera do pisania asemblacji w kodzie źródłowym Solidity. Możemy również napisać samodzielny kod asemblera, który następnie zostanie przekonwertowany na kod bajtowy. Samodzielny zestaw jest językiem pośrednim dla kompilatora Solidity i konwertuje kod Solidity na samodzielny zespół, a następnie na kod bajtowy. Możemy użyć tego samego języka, który jest używany w zestawie wbudowanym, do pisania kodu w zestawie autonomicznym.

Montaż w linii

Wbudowany kod asemblera może być przeplatany w ramach kodu Solidity, aby mieć bardziej precyzyjną kontrolę nad EVM i jest używany szczególnie podczas pisania funkcji bibliotecznych.

Kod asemblera jest zapisany pod assembly { ... } blok.

Przykład

Wypróbuj poniższy kod, aby zrozumieć, jak działa biblioteka w 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);
   }
}

Uruchom powyższy program, wykonując kroki opisane w rozdziale Solidity First Application .

Note - Wybierz opcję Test z listy rozwijanej przed kliknięciem przycisku wdrażania.

Wynik

0: uint256: 15