BloCCat

효율적인 Contract 작성법 (2) - 가스 절약 본문

Study/Solidity

효율적인 Contract 작성법 (2) - 가스 절약

uooy 2021. 8. 30. 00:31

Gas : Dapp이 사용하는 연료

Dapp 함수를 호출할 때마다 (=트랜잭션이 발생할 때마다) 사용자가 내야하는 실제 돈(이더)

 

가스를 아끼기 위한 코딩법

 

1. 구조체 압축

struct 안에 여러개의 uint 타입의 데이터가 있다면 더 작은 크기의 uint를  쓰자.

그 변수들은 더 적은 공간을 차지하기 위해 스스로 메모리를 압축하여 사용한다. 

struct NormalStruct {
  uint a;
  uint b;
  uint c;
}

struct MiniMe {
  uint32 a;
  uint32 b;
  uint c;
}

// `mini`는 구조체 압축을 했기 때문에 `normal`보다 가스를 조금 사용한다
NormalStruct normal = NormalStruct(10, 20, 30);
MiniMe mini = MiniMe(10, 20, 30);

 2. view 함수 사용하기

  view 함수는 사용자에 의해 외부에서 호출됐을 때 가스를 전혀 소모하지 않는다.

이는 view 함수는 블록체인 상에서 어떤것도 수정하지 않고 데이터만 읽기 때문에 트랜잭션을 만들지 않기 때문.

따라서 dapp의 가스 사용을 최적화 하는 비결은 읽기 전용의 external view 함수를 쓰는 것.

 

 단, view 함수를 호출하는 다른 함수가 외부에서 호출될 경우는 트랜잭션이 발생하기 때문에 gas가 소모된다. 

 

3. storage 는 가급적 지양

  storage는 데이터가 변경될때 마다 블록체인에 영구적으로 기록되기 때문에 비용이 많이 든다 

따라서 비용을 최소화 하기 위해서 때때로는 비효율적인 프로그래밍을 할 때도 있다.

 

'Study > Solidity' 카테고리의 다른 글

payable 제어자  (0) 2021.09.03
solidity - 함수 제어자 활용  (0) 2021.08.30
효율적인 Contract 작성법 (1)  (0) 2021.08.29
Ownable.sol  (0) 2021.08.29
solidity 기초 (3)  (0) 2021.08.29