크립토 좀비 레슨 1

Posted on May 23, 2018
Tags: ethereum, solidity, blockchain, crypto-zombies


크립토 좀비를 공부하며 정리한 글입니다.

Version Pragma

  • 컴파일러에게 버전을 알려준다
pragma solidity ^0.4.19

Contract

  • 기본적인 구성 요소
contract HelloWorld {
}

Statet Variable

  • 컨트랙트 저장소에 영구적으로 저장됨
  • DB를 사용하는 것과 동일

Unsigned Integers

uint

  • 부호없는 정수
  • 값이 음수가 아니어야 한다
  • 솔리디티에서 uint는 실제로 uint256의 256비트 부호없는 정수의 다른 표현이다.
  • uint8, uint16 도 있지만 보통 uint를 사용

int

  • 부호가 있는 정수
contract HelloWrold{
    unit undisngedInteger = 100;
}

Math Operations

  • 대부분의 프로그래밍 기본 연산과 동일
  • **를 이용한 지수 연산 지원

Structs

  • 더 복잡한 자료형을 필요로 할 때 사용
struct Person {
    uint year;
    string name;
}

Person sol = Person(123, "sol");
  • 참고로 string은 임의의 길이를 가진 UTF-8 데이터

Arrays

  • 솔리디티에는 동적, 정적 배열이 있다
  • 동적배열을 생성하면 마치 DB처럼 컨트랙트에 구조화된 데이터 저장하는데 유용
uint[3] fixed;

uint[] dynamic;

Person[] dynamicStructArray;

dynamic.push(12);

Public Arrays

  • getter메소드를 자동적으로 생성
  • 다른 컨트랙트들이 읽을 수 있게 됨
    • 공개 데이터 저장에 유용
Person[] public people;

Function Declarations

function eatHambugers(string _name, uint _amount) {
}

eatHambugers("sol", 100);
  • eatHamburgers라는 함수로, stringuint 2개의 인자를 전달받고 있다.
  • 함수의 인자명을 _로 시작해서 전역변수와 구별하는 것이 관례

Private / Public function

  • 솔리디티에서 기본적으로 함수는 public
  • private키워를 함수명 다음에 적어주면 된다
  • _로 시작하는 것이 관례
function _addToArray(uint _arr) private {
}

More on Functions

Return Valuese

  • 솔리디티에서는 반환값 종류를 포함한다
string greeting = "Hi";

function sayHi() public returns (string) {
    return greeting;
}

Function modifiers

  • 함수가 상태를 변화시키지 않으면 view함수로 선언
function sayHi() public view returns (string) {
  • 함수가 앱에서 어떤 데이터도 접근하지 않으면 pure함수로 선언
function _mul(uint a, uint b) private pure returns (uint) {
    return a * b;
}

Keccak256

  • SHA3의 한 버전인 keccak256을 내장 해시 함수로 가지고 있음
  • 256비트 16진수로 매핑함
  • 난수 발생기로도 이용 가능
keccak256("abcd");
keccak256("abce");

블록체인에서 안전한 의사 난수 발생기는 매우 어려운 문제이다

Typecasting

uint8 a = 5;
uint b = 6;

uint8 c = a * b; //error

uint8 c = a * uint8(b)

Events

  • 블록체인 상에서 앱의 사용자 단에서 무언가 액션이 발생했을 때 의사소통 하는 방법
  • 컨트랙트는 특정 이벤트가 일어나면 행동을 취한다
event IntegersAdded(uint x, uint y, uint result);

function add(uint _x, uint _y) public {
    uint result = _x + _y;
    // add 함수가 실행되었다는 것을 알린다
    IntegersAdded(_x, _y, _result);
    return result;
}