견고성-조립

Solidity는 Solidity 소스 코드 내에서 인라인 어셈블리를 작성하기 위해 어셈블리 언어를 사용하는 옵션을 제공합니다. 또한 독립형 어셈블리 코드를 작성하여 바이트 코드로 변환 할 수도 있습니다. Standalone Assembly는 Solidity 컴파일러의 중간 언어이며 Solidity 코드를 Standalone Assembly로 변환 한 다음 바이트 코드로 변환합니다. 인라인 어셈블리에서 사용되는 것과 동일한 언어를 사용하여 독립 실행 형 어셈블리에서 코드를 작성할 수 있습니다.

인라인 어셈블리

인라인 어셈블리 코드는 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