Solidity Gas Cost

2023. 9. 26. 23:20· 언어/Solidity
반응형

Gas Cost를 왜 책정해야할까?

  • Gas 비용이 없다면, 공격자의 Ddos 공격에 취약해진다.
  • 따라서 컨트랙트 함수를 호출할 때마다 비용을 지불하는 방식으로 공격자에게 부담을 지워지게 하는 용도가 가장 큰듯하다.

Gast Cost는 어떻게 책정되는가?

  • 1 Ether = 10^9 Gwei = 10^18 wei
  • Gas 비용은 개발자가 어떻게 컨트랙트를 작성하냐에 따라 상대적으로 많아질수도, 적어질수도 있다.
  • Gas 책정 방식은 EVM opcode 참고
    • https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash

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 배포  (3) 2023.10.14
Soldity - Storage Collision  (1) 2023.09.27
'언어/Solidity' 카테고리의 다른 글
  • Solidity + Web3j + Ganache를 통한 Smart Contract 배포
  • Soldity - Storage Collision
iron_jin
iron_jin
배운 것에 대한 내 생각을 가지고 정리하자
學而不思則罔(학이불사즉망)배운 것에 대한 내 생각을 가지고 정리하자
iron_jin
學而不思則罔(학이불사즉망)
iron_jin
전체
오늘
어제
  • 전체 (163)
    • 도서 (10)
    • 생각 정리 (0)
    • 후기 모음 (14)
    • 언어 (20)
      • css (1)
      • java (9)
      • Kotlin (0)
      • javascript (0)
      • Solidity (3)
      • Python (3)
      • GO (3)
      • C++ (1)
    • Spring Framework (32)
      • spring (16)
      • JPA (6)
      • Error (4)
      • Settings (4)
    • 알고리즘 (62)
      • 이론 (0)
      • 연습문제 (58)
    • 인프라 (6)
      • 클라우드 (1)
      • 도커 (0)
      • AWS (4)
      • Elastic Search (0)
    • 쿠버네티스 (3)
      • 이론 (0)
      • 실습 (2)
      • 트러블슈팅 (1)
    • Nginx (2)
    • CS (4)
      • 서버 (0)
      • 리눅스 (2)
      • 네트워크 (0)
      • OAuth (2)
    • 형상관리 (3)
      • GIT (3)
    • Open API (3)
      • 카카오 API (1)
      • QGIS (2)
    • 보안 (0)
      • 알고리즘 (0)
    • 공통 (1)
      • 성능 관리 도구 (1)
    • Database (2)
      • MySQL (1)
      • Redis (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바
  • 2018 kakao
  • 2020 kakao
  • JPA
  • AWS
  • Hibernate
  • 2018 카카오 블라인드
  • 항해플러스
  • SpringBoot
  • 백준
  • 에릭 에반스
  • 2020 카카오
  • 도메인 주도 개발
  • spring
  • 2019 카카오 블라인드
  • 코딩테스트
  • 알고리즘
  • Java
  • Python
  • MySQL
  • spring boot
  • ddd
  • 항해99
  • 스프링
  • 카카오 겨울 인턴십
  • 2019 kakao
  • 2020 카카오 블라인드
  • 스프링 부트
  • 2019 카카오
  • 프로그래머스

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
iron_jin
Solidity Gas Cost
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.