D.S.
Übermensch : To a Brighter Future
D.S.
전체 방문자
오늘
어제
  • 분류 전체보기 (109)
    • Lecture Notes (1)
      • CS231n (1)
    • Thoughts on Videos (ToV) (7)
    • Tech (0)
    • 개인 기록 (0)
      • 프로그래밍공부일지 (0)
      • CS Study 한눈에 보기 (0)
    • 프로그래밍 (65)
      • C (35)
      • C++ (0)
      • Python (12)
      • 이코테python (8)
      • 2022군장병AI_SW_Elice (4)
      • 2022군장병AI_SW_Kakao (1)
      • Solidity (2)
      • Web (3)
    • Mental Augmentation (28)
      • Kwik Reading (22)
      • 독서 (0)
      • 갸꿀팁 (2)
      • 3-Part Memory Training (1)
      • Kwik Recall (3)
    • Physical Augmentation (3)
      • Health Journal (2)
      • Sinclair Podcast (1)
    • Others (0)
      • 여행 (0)
    • Idea Bank (0)
      • VBA (0)
      • PLANS (0)
    • 22-2학기 수업 (0)
      • 데이터베이스시스템 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

글쓰기

Kwik Reading

공지사항

인기 글

태그

  • 뇌 요가
  • 백준
  • Infinity Technique
  • 군장병
  • 노화의 종말
  • 비문학독해
  • 디지털 방해
  • Eye Fixation
  • Kwik Brain
  • brain break
  • 속독
  • 독서
  • 번역
  • 습관
  • 속발음
  • lifespan
  • 기술독서
  • Dandapani
  • Jim Kwik
  • brain yoga
  • ai/sw
  • kwik recall
  • 짐 퀵
  • 우뇌
  • 학습
  • baekjoon
  • 속독 훈련
  • elice
  • Kwik Reading
  • subvocalization

최근 댓글

hELLO · Designed By 정상우.
D.S.

Übermensch : To a Brighter Future

Solidity - CryptoZombies - Lesson #1
프로그래밍/Solidity

Solidity - CryptoZombies - Lesson #1

2022. 9. 13. 19:17

pragma solidity >=0.5.0 <0.6.0; /// solidity의 버전을 지정해줌.

 

contract ZombieFactory { //모든 코드는 contract안에서 이루어져야함.

 

    event NewZombie(uint zombieId, string name, uint dna); //event를 정의함.(알림같은거)(함수가 호출 됐음을 알려주는데 사용)

 

    uint dnaDigits = 16; //uint는 uint256과 같은 뜻으로, unsigned int 256-bit를 뜻함. uint8, uint16 등 다양함. 웬만해선 uint

    uint dnaModulus = dnaDigits ** 10; //**(제곱)연산자 지원함

    

    struct Zombie { //구조체 자료형을 지원함

        string name;

        uint dna;

    }

   

    Zombie[] public zombies; // public은 다른 contract들이 read O but write X

    // type[(size)] (authority) variable; 이런식으로 선언을 하며, size를 쓰면 고정된 크기의 array, 안쓰면 가변적 array. 접근

    // 범위도 써도되고 안써도 됨.

    

    function createZombie (string memory _name, uint _dna) public { //function 정의

    //function function_name (type (memory) argument_name) (public/private) // memory는 call-by-reference라는 뜻.

    //memory라고 안쓰면 call-by-value가 됨.

    //인자들의 이름은 관례적으로 맨 앞에 underscore(_)가 붙음

    //public으로 선언되면 누구나 함수를 호출해서 사용이 가능하고, private이면 임의 호출 불가함.

        zombies.push(Zombie(_name,_dna)); //push는 Array의 맨 뒤에 원소를 추가함. 

        //구조체를 하나 만들때는 struct_name(변수 내용(','로 순서대로 나열))

 

    }

 

    function _createZombie (string memory _name, uint _dna) private {

    //public으로 선언되면 누구나 함수를 호출해서 사용이 가능하고, private이면 임의 호출 불가함.

    //이때, 관례적으로 private으로 선언된 함수의 이름 앞에는 underscore(_)가 붙음

        uint id = zombies.push(Zombie(_name,_dna))-1;//push는 현재 array의 크기를 return함. index는 0부터 시작하므로 -1

        emit NewZombie(id,_name,_dna); //emit는 event를 발동(fire)시킴.

    }

 

    function _generateRandomDna (string memory _string) private view returns (uint) {

    //함수가 외부에 영향을 주는 것에 따라 (view/pure)로 선언을 나눌 수 있으며,

    //view는 외부의 값을 변경하거나 write하는 것이 없다는 뜻

    //pure은 외부의 state를 read하지도 않는다는 뜻. 오직 parameter만 이용해서 동작.

    //returns (타입)의 선언을 통해서 어떤 종류의 값을 return할건지 선언함.

        uint random = uint(keccak256(abi.encodePacked(_str)));

        return random % dnaModulus; //dna는 16자리이므로 16자리로 잘라줌.

        //keccak256라는 hash function은 byte type의 input을 256 비트짜리 random한 16진수 숫자로 바꿔줌(mapping).

        //이때, byte type로의 변환을 위해 abi.encodePacked를 이용하면 input을 byte type으로 바꿔줌.

    }

 

    function createRandomZombies(string memory _name) public {

        uint rand = _generateRandomDna(_name);

        _createZombie(_name,rand);

        //name을 input받아 새로운 Zombie를 만들어서 zombie Array에 push함.

    }

}

 

'프로그래밍 > Solidity' 카테고리의 다른 글

Solidity - CryptoZombies - Lesson #2  (0) 2022.09.18
    '프로그래밍/Solidity' 카테고리의 다른 글
    • Solidity - CryptoZombies - Lesson #2
    D.S.
    D.S.

    티스토리툴바