본문 바로가기

블록체인/크립토 좀비

[크립토 좀비] 레슨 03 정리

컨트랙트의 불변성 : 스마트 컨트랙트는 한번 메인넷에 배포되면 영구적으로 존재한다.

외부 의존성:  문제가 생기면 변경이 가능할 수 있도록 setter를 설정해 외부에서 주입받도록 설계한다.

 

Ownable 컨트랙트: 함수에 onlyOwner 제어자를 추가하면 컨트랙트 배포자만이 함수에 접근할 수 있도록 해주는 컨트랙트 

해당 컨트랙트에 ownable 컨트랙트를 상속받아 onlyOwner 제어자를 사용한다.

예시

contract MyContract is Ownable {
  event LaughManiacally(string laughter);

  // 아래 `onlyOwner`의 사용 방법을 잘 보게:
  function likeABoss() external onlyOwner {
    LaughManiacally("Muahahahaha");
  }
}

 

storage(상태 변수)에 값을 쓰는 것은 가스비가 높다.

일반적으로 uint256, uint32, uint16을 구별해서 사용하는 것은 가스비에 영향이 없지만 구조체의 구성요소를 선언할 때는 가스비에 영향이 있으므로 구조체 안에 여러 개의 uint를 선언한다면 값의 범위를 생각해서 선언해야 한다.

 

시간

솔리디티에는 seconds, minutes, houres, days, weeks, years 시간 단위가 존재한다. 또한 nows 변수는 현재 시간을 유닉스 타임스탬프 값으로 나타낸다. 

5분 후를 표현하고 싶으면 다음과 같이 나타낼 수 있다.

fiveMinLater = now + 5 minutes;

 

구조체 전달

storage 키워드를 통해 구조체 포인터를 함수에 인수로 전달할 수 있다. 

function _doStuff(Zombie storage _zombie) internal {
  // _zombie로 할 수 있는 것들을 처리
}

 

함수 제어자 또한 인수를 가질 수 있다. 

// 사용자의 나이를 저장하기 위한 매핑
mapping (uint => uint) public age;

// 사용자가 특정 나이 이상인지 확인하는 제어자
modifier olderThan(uint _age, uint _userId) {
  require (age[_userId] >= _age);
  _;
}

// 차를 운전하기 위햐서는 16살 이상이어야 하네(적어도 미국에서는).
// `olderThan` 제어자를 인수와 함께 호출하려면 이렇게 하면 되네:
function driveCar(uint _userId) public olderThan(16, _userId) {
  // 필요한 함수 내용들
}

view 함수는 가스를 소모하지 않는다.

 

반복문 for

솔리디티에서 반복문 for는 c, c++, 자바와 사용법이 같다. 

function getExample() pure external{
  uint counter = 0;
  // for 반복문에서 1부터 10까지 반복함
  for (uint i = 1; i <= 10; i++) {
      counter++;
  }
}

 

'블록체인 > 크립토 좀비' 카테고리의 다른 글