Crypto Zombie - 1

Hong·2022년 12월 18일
0

🧟‍♂️ Contract.sol

pragma solidity >=0.5.0 <0.6.0; //solidity의 버전을 표시한다

contract ZombieFactory { //contract의 시작

    event NewZombie(uint zombieId, string name, uint dna)
  //우리는 새로운 좀비가 생성될 때마다 front end에 이 사실을 알리기를 원한다
  //(새로운 좀비가 생성될 때 마다 알려야 하니까 _createZombie안에서 NewZombie event를 발생시켜야 한다)
  //때문에 event로 특정 이벤트를 수신하고 이벤트가 발생했을 때 조치를 취하는 틀을 만들어준다 아래에 함수 안에서 emit을 통해 발현된다

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

  	//struct는 한글로 구조체로 불리며 우리가 원하는 type을 만들 수 있다(stirng, uint와 같이)
    struct Zombie {
        string name;
        uint dna;
    }

  	//struct Zombie에서 구조체로써 객체를 생성했기 때문에 자료형 자리에(여기서는 맨 앞 자리) Zombie를 적어줬다
    Zombie[] public zombies;

  	//string type의 _name, uint type의 _dna를 입력받는 private의 접근권한으로 함수를 만들어줬다
  	//_createZombie는 새로운 Zombie객체를 zombies배열에 넣고 event를 실행한다.
    function _createZombie(string memory _name, uint _dna) private {
        uint id = zombies.push(Zombie(_name, _dna)) - 1;

      	//위에서 event로 생성한 NewZombie를 위의 함수가 끝나고 emit을 통해 실행시켜 줬다.
        emit NewZombie(id, _name, _dna);
    }
  
  	//string type의 _str을 인자로 입력받고 private접근권한, 읽기전용을 위한 view함수를 만들어줬다. return값으로는 uint type을 반환한다.
	//_generateRandomDna함수는 keccak256해시함수를 이용해서 입력받은 _str인자로 랜덤한 난수를 생성한다. 
    function _generateRandomDna(string memory _str) private view returns (uint) {
        uint rand = uint(keccak256(abi.encodePacked(_str)));
        return rand % dnaModulus;
    }

  	//string type의 _name을 입력받고 public의 접근권한을 가진 함수를 만들어줬다
  	//createRandomZombie는 _generateRandomDna로 만든 난수를 통해 _createZombie로 새로운 좀비를 만든다.
    function createRandomZombie(string memory _name) public {
        uint randDna = _generateRandomDna(_name);
        _createZombie(_name, randDna);
    }

}
profile
Notorious

0개의 댓글