Solidity - Assembly
Solidity cung cấp một tùy chọn sử dụng hợp ngữ để viết hợp ngữ nội tuyến trong mã nguồn Solidity. Chúng ta cũng có thể viết một mã lắp ráp độc lập sau đó được chuyển đổi thành mã bytecode. Standalone Assembly là một ngôn ngữ trung gian cho trình biên dịch Solidity và nó chuyển đổi mã Solidity thành một Assembly độc lập và sau đó thành mã byte. Chúng ta có thể sử dụng cùng một ngôn ngữ được sử dụng trong Inline Assembly để viết mã trong một assembly độc lập.
Hội đồng nội tuyến
Mã lắp ráp nội tuyến có thể được xen kẽ trong cơ sở mã Solidity để có khả năng kiểm soát chi tiết hơn đối với EVM và được sử dụng đặc biệt trong khi viết các hàm thư viện.
Mã hợp ngữ được viết dưới assembly { ... } khối.
Thí dụ
Hãy thử đoạn mã sau để hiểu cách hoạt động của Thư viện trong 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);
}
}
Chạy chương trình trên bằng các bước được cung cấp trong chương Ứng dụng đầu tiên của Solidity .
Note - Chọn Kiểm tra từ trình đơn thả xuống trước khi nhấp vào nút triển khai.
Đầu ra
0: uint256: 15