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