별은블로그

Solidity 4. 컨트랙 최적화 본문

Dev/Solidity

Solidity 4. 컨트랙 최적화

beul_eun 2018. 11. 5. 22:11

보통 알고리즘을 평가할 때 빅오표기법을 사용한다.

하지만 솔리디티에서는 빅오보다 GAS가 중요하다.

 - opcode마다 소비되는 가스가 다름


1. 컨트랙을 배포할 때의 비용

- 주석, 변수이름, 타입이름은 가스를 소모하지 않음

- 불필요한 코드정리 필요


2. 컨트랙 내의 함수를 불러올 때의 비용

- 비싼연산을 최대한 줄이기

- SSTORE : 비용이 비싸다. storage의 상태를 변경할 때마다 사용됨.

=> 해결법 : 로컬변수를 이용해서 계산을 다한 후 마지막에 storage변수를 변경한다.

- for문 사용횟수 최소화

- 문자를 저장할 때 bytes32 타입을 사용하는 것(고정된 크기의 배열)

=> 가스비 절약 : 이더리움가상머신은 32bytes 타입에 최적화 되어 있음(256bits에 맞춰져 있기 때문에)

3. 배열사용시 주의점

- 무제한 크기의 배열반복을 피해야함 -> 가스무한발생

- 반복문은 길이 50이하의 배열을 돌릴 때에 효과적이다.

- 크기 50이상을 사용해야 하는데 어떻게 하는가?

- 해결법 : 매핑을 사용한다.

- mapping(uint => Student) studentInfo;

- 데이터의 크기가 크지 않을 때에는 배열이 더 좋다.

Comments