반응형
Gas Cost를 왜 책정해야할까?
- Gas 비용이 없다면, 공격자의 Ddos 공격에 취약해진다.
- 따라서 컨트랙트 함수를 호출할 때마다 비용을 지불하는 방식으로 공격자에게 부담을 지워지게 하는 용도가 가장 큰듯하다.
Gast Cost는 어떻게 책정되는가?
- 1 Ether = 10^9 Gwei = 10^18 wei
- Gas 비용은 개발자가 어떻게 컨트랙트를 작성하냐에 따라 상대적으로 많아질수도, 적어질수도 있다.
- Gas 책정 방식은 EVM opcode 참고
Smart Contract를 구현할 때의 유의점
- EVM opcode를 하나하나 찾아보고 컨트랙의 함수를 뜯어보며 계산하면 참 좋겠지만, 초기 개발부터 이렇게 진행하는 것은 아닌듯하다.
- 조금 더 효율적으로, opcode 내에서 주의 깊게 봐야하는 부분은 무엇일까?
- 가스 비용이 너무 커서 부득이하게 하나하나 줄여야 하는 경우가 아니라면, 다음 네 가지 정도만 해도 가스 비용이 크게 주는 것을 확인할 수 있다.
- 함수의 인자 값에는 memory 보다 calldata를 사용하자 => calldata의 경우 길이가 정적으로 한정되어있다.
- 상태 변수를 함수 외부(storage)에 두지 말고, 내부(memory)에 두자 => 함수 외부에 선언하면 Storage에 저장되기 때문
- 반복문 안에서의 상태 변수 지양
- 반복문 안에서 무차별적으로 변수를 선언할 경우(opcode 사용) 계속해서 gas를 소모하기 때문
- 함수 내에서 반복적으로 호출되는 데이터는 메모리에 저장
- 반복 호출 시 Gas 비용이 많이 나간다.
- 배열 인덱스에 해당하는 데이터는 메모리에 선언하자
결론
- 생각보다 당연하게 생각하면서 개발해야하는 부분이라고 느꼈다.
- 여러 Gas Cost에 대한 정보를 찾아봤는데, 실용적으로 위 유의점이 제일 실용적으로 느껴졌다.
- 다른 분의 블로그름 참고하긴 했는데, 기억이 잘..
- 시간이 나면 EVM-opcode에서 직접 cost를 계산해보면서 학습해나가는 것도 좋겠다.
반응형
LIST
'언어 > Solidity' 카테고리의 다른 글
Solidity + Web3j + Ganache를 통한 Smart Contract 배포 (1) | 2023.10.14 |
---|---|
Soldity - Storage Collision (0) | 2023.09.27 |