Solidity-assembly

提供:Dev Guides
移動先:案内検索

堅牢性-アセンブリ

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);
   }
}

link:/solidity/solidity_first_application [Solidity First Application]の章に記載されている手順を使用して、上記のプログラムを実行します。

-展開ボタンをクリックする前に、ドロップダウンからテストを選択します。

出力

0: uint256: 15