크립토 좀비 - 1 : 좀비 공장 만들기

https://cryptozombies.io/ko/course
위 사이트의 내용을 요약하였습니다.

1. 컨트랙트 선언

  • 솔리디티의 버전 선언
pragma solidity ^0.4.19;
  • 컨트랙트의 선언
contract HelloWorld {

}

2. 상태 변수 & 정수

2.1 상태변수

: 컨트랙트 저장소에 영구적으로 저장된다.(= 이더리움 블록체인에 기록)

  • 부호 없는 정수 (uint = uint256)
    : 값이 음수가 아니어야 한다는 뜻
    : 부호 있는 정수는 int를 사용한다

3. 수학 연산

: + - * / % ** 를 지원한다.

4. 구조체

: 서로 다른 자료형들을 묶어서 사용 가능

struct Zombie {
        string name;
        uint dna;
    }
  • string은 문자열 정의에 사용

5. 배열

5.1 정적 배열과 동적 배열

: []숫자의 유무에 따라 나뉜다.

5.2 구조체도 배열 사용이 가능하다.

5.3 Public 배열

: 배열을 위해 getter(해당 필드의 값을 리턴)메소드를 자동으로 생성한다.

Person[] public people;

: 다만 이 경우 해당 필드에 쓸수는 없다. (setter X)

6. 함수 선언

function eatHamburgers(string _name, uint _amount) {

}

: 매개변수는 꼭 _를 앞에 붙여주자.

7. 구조체와 배열 활용하기

struct Person {
  uint age;
  string name;
}

Person[] public people;
// 1번
Person satoshi = Person(172, "Satoshi");
people.push(satoshi);
// 2번
people.push(Person(16, "Vitalik"));

: 위처럼 두 가지 방법으로 people 배열에 원소를 추가할 수 있다.

  • array.push()는 queue처럼 원소를 배열의 끝에 추가한다.

8. Private, Public 함수

: java와 유사하게, public은 누구나 컨트랙트의 함수를 호출하고, 코드를 바꿀 수 있게 하여 보안에 취약하다.
: private는 컨트랙트 내의 함수들만이 이 함수를 호출할 수 있게 한다.

9. 함수 더 알아보기

- 함수 제어자

: view는 함수가 데이터를 보기만 하고 변경하지 않음을 의미한다.
: pure는 함수가 앱에서 어떤 데이터도 접근하지 않는 것을 의미한다.

View : 읽기 전용으로 함수를 실행하는데에 있어 데이터를 쓰거나 덮어쓰지 않고 읽기만 한다.
Pure : side effect(외부 값을 가져와서 그에 대해서 변경시키는 행위)가 전혀 없이, 오로지 그 함수의 parameter만을 이용해서 값을 return하는 함수이다

  • solidity-by-example

10. Keccak256과 형 변환

10.1 keccak256란?

: 이더리움이 가지고 있는 내장 해시 함수로 난수를 생성한다.
: 1비트를 변경하면 출력값의 각 비트가 50% 확률로 변경되어, 쇄도 효과 때문에 상당한 변화가 일어난다.
( 작은 차이에도 그 값의 변화가 확연하게 차이가 난다)

10.2 형 변환

: 아래처럼 숫자에 자료형()을 씌우면 된다.

uint8 a = 5;
uint b = 6;
// a * b가 uint8이 아닌 uint를 반환하기 때문에 에러 메시지가 난다:
uint8 c = a * b; 
// b를 uint8으로 형 변환해서 코드가 제대로 작동하도록 해야 한다:
uint8 c = a * uint8(b); 

11. 이벤트

: 로그를 만들기 위하여 사용되는 고수준 객체

좋은 웹페이지 즐겨찾기