크립토좀비

컨트랙트


  • 컨트랙트 : 이더리움 애플리케이션의 기본적인 요소

  • Version Pragma : 해당 코드가 이용해야 하는 솔리디티 버전을 선언하는 것. 맨 위에 작성해야 한다.
    ex) pragma solidity ^0.4.19;

  • 상태 변수 : 계약 내에서 선언됐으나 함수에 속하지는 않는 변수. 컨트랙트 저장소에 영구적으로 저장된다.

수학 연산


  • 덧셈 : x + y
  • 뺄셈 : x - y
  • 곱셈 : x * y
  • 나눗셈 : x / y
  • 모듈러(modular , 나머지) : x % y
  • 지수 : x ** y

구조체


구조체 : 복합 자료형. 서로 다른 자료형으로 지정된 여러 개의 변수로 구성된다. 변수 외의 코드는 포함하지 않는다.

ex)
struct Person{
    uint age;
    string name;
}

배열


배열 : 타입이 같은 값들의 모둠을 참조.

  • 정적 배열 : 선언할 때 크기가 정해진 것. 인라인으로만 초기화 가능.

    ex) uint[2] age;
        age = [int(10) , 20];
  • 동적 배열 : 크기가 선언 시에 확정되는 것이 아니라 실행 시간에 결정되는 배열. 인라인 뿐만 아니라 new 연산자를 이용해서 초기화할 수 있다.

    ex) int[] age = [int(10) , 20];
        int[] age = new int[](5);

함수 선언


함수 : 상태 변수를 읽거나 상태 변수에 값을 쓰는 매커니즘이다. 호출을 통해 실행할 수 있는 코드의 단위. 함수는 파라미터를 받아들여서 로직을 수행하고 호출자에게 값을 반환할 수 있다. 함수 인자명을 _로 시작해서 전역 변수와 구별하는 것이 관례이다.

ex)
function createZombie(string _name, uint _dna){

}

구조체 , 배열 활용


ex)
struct Person{
    uint age;
    string name;
}

Person[] public people;

이 때 새로운 Peson을 생성하고 배열에 추가하기 위해서

Person harry = Person(15, "harry");
people.push(harry);

또는

people.push(Person(15, "harry"));

Private / Public 함수 접근 제어자


  • public : 누구나 컨트랙트의 함수를 호출하고 코드를 실행할 수 있다. 함수는 기본적으로 public으로 선언.
  • private : 컨트랙트 내의 다른 함수들만이 함수를 호출할 수 있다. 함수명을 _로 시작하는 것이 관례.
  • internal : 함수가 정의된 컨트랙트를 상속하는 컨트랙트에서도 접근 가능하다.
  • external : 함수가 컨트랙트 바깥에서만 호출될 수 있고 컨트랙트 내의 다른 함수에 의해 호출될 수 없다.
ex)
function _addToArray(uint _number) private {
  numbers.push(_number);
}

함수의 반환값 , 함수 제어자


  • 반환값 : 함수가 파라미터를 사용하고 반환하는 값. 함수 선언에 반환값 종류를 포함한다.
ex)
string a = "hello";

function sayHello() public returns (string) {
return a;
}
  • 함수 제어자

    • view : 데이터를 읽기만 하고 쓰지 않는다.

    • pure : 어떤 데이터도 접근하지( 읽고 쓰지 ) 않는다. 인자 값만 활용해서 반환 값을 정한다.

    • constant : 0.4.17 버전 이전에는 view/pure 대신 쓰임. 지금은 거의 안 쓴다고 한다.

    • payable : 함수가 에더를 받을 수 있게 한다.

      ex) view 예시
      
      function _generateRandomDna(string _str) private view returns (uint){
      
      }

keccak256 , 형 변환


  • keccak256 : SHA3의 한 버전. 이더리움은 keccak256를 내장 해시 함수로 가지고 있다.
    • 해시 함수 : 기본적으로 입력 스트링을 랜덤 256비트 16진수로 매핑한다. 의사 난수 발생기로 이용 가능.
ex)
keccak256("aaaab"); -> 6e91ec6b61....로 바뀜
  • 형 변환 : 데이터 형식을 변환
ex)
uint8 a = 5;
uint b = 6;
uint8 c = a * uint8(b);

이벤트


  • 이벤트 : 계약에서 일어나는 변화. 각 계약은 이벤트를 발생시키고 통지하며, 스스로 행동하고 다른 함수를 실행시킨다. 컨트랙트가 블록체인 상에서 클라이언트에서 액션이 발생했을 때 의사소통하는 방법.
    비동기 애플리케이션을 작성하는데 도움이 된다.
ex)
event Added(uint x, uint y);
function add(uint _x, uint _y) {
    uint result = _x + _y;
    Added(_x, _y, result);
}


클라이언트 (자바스크립트): 
YourContract.Added(function(error, result)){
    //결과와 관련된 행동
}