크립토 좀비 - 1

Lumi·2021년 11월 23일
0

크립토 좀비

목록 보기
1/7
post-thumbnail

이 부분은 크립토 좀비를 통해 솔리디티를 학습하면서 배운 내용을 정리하는 것이다.

과거 블록체인을 처음 알게 되었을떄 크립토 좀비에 대한 강의를 수강하면서 알게 되었는데

이때 너무 어려워서 잘 따라가지 못했던 기억이 나서 이번에 시간을 내서 솔리디티를 다시 심화적으로 공부할 것이다.

  • 그떄는 정말 프로그래밍에대해서 아무것도 몰랐었다;;
pragma solidity ^0.4.19;

contract ZombieFactory {

    event NewZombie(uint zombieId, string name, uint dna);

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;


    function _createZombie(string _name, uint _dna) private {
        uint id = zombies.push(Zombie(_name, _dna)) - 1;
        NewZombie(id, _name, _dna);
    } 

    function _generateRandomDna(string _str) private view returns (uint) {
        uint rand = uint(keccak256(_str));
        return rand % dnaModulus;
    }

    function createRandomZombie(string _name) public {
        uint randDna = _generateRandomDna(_name);
        _createZombie(_name, randDna);
    }

}

내용은 전체적은 진행 사항을 한번에 올린뒤에 천천히 알아보는 방식으로 진행 할 것이다.

🔨 기본 셋팅

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

별다른 것은 없다.

간단하게 변수들을 선언하였고 그리고 구조체를 만들어 주었다.

그후 구조체에 맞춰서 배열을 만들어 주었다.

  • 이 배열에는 오로지 구조체에 맞는 값들만 들어 갈 수가 있다.

dnaModulus는 일종의 해시값을 처리하기 위함이다.

  • 값이 너무 커지면 안되기 떄문에 16진수로 처리하는 것

🔨 함수

    function _createZombie(string _name, uint _dna) private {
        uint id = zombies.push(Zombie(_name, _dna)) - 1;
        NewZombie(id, _name, _dna);
    } 

    function _generateRandomDna(string _str) private view returns (uint) {
        uint rand = uint(keccak256(_str));
        return rand % dnaModulus;
    }

    function createRandomZombie(string _name) public {
        uint randDna = _generateRandomDna(_name);
        _createZombie(_name, randDna);
    }

새롭게 안 사실은 함수를 private로 선언을 하게 될 떄에는 함수명에 _를 추가한다.

_createZombie

  • 말 그대로 새로운 좀비를 만드는 함수이다.
  • 아까 선언한 배열에 구조체에 맞는 Zombie를 넣어준다.

이떄 솔리디티는 push를 하게 되면 해당 배열의 길이가 반환이 된다고 한다.

  • 그러기 때문에 -1을 적용하여 index값을 뺴내올수 있고

이러한 값을 id로 취급하여 이벤트를 발동 시킨다.

  • 로그를 남기기 위해서

_generateRandomDna

  • 새로운 좀비를 생성할때 Dna를 결정하는 것이다.

keccak256을 통해서 해시화 시키고 형을 맞춰주기 위해서 uint로 형변환 시켜주는 것이다.

그후 그 값을 return해준다.

createRandomZombie

  • 아까 앞선 _generateRandomDna에서 만들어진 Dna해시 값을 활용한다.

그 값을 활용하여 _createZombie를 호출하게 되는 것이다.

🔨 흐름 정리

일단 사용자들은 바로 createRandomZombie에 접근을 할 수가 없다.

반드시 다른 함수를 통해서 접근이 가능하다.

기본적으로 랜덤 Dna를 생성함으로써 랜덤한 좀비를 만들어 낼 수가 있다.

그러기 때문에 흐름도는

createRandomZombie -> _generateRandomDna -> _createZombie

이렇게 진행이 되게 된다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글