堅牢性-アセンブリ
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 First Applicationの章に記載されている手順を使用して、上記のプログラムを実行します。
Note −展開ボタンをクリックする前に、ドロップダウンから[テスト]を選択します。
出力
0: uint256: 15