CryptoZombies #1 비망록
평소에는 dapps 개발, 블록체인 리서치 등을 하고 있습니다.
블록체인만 트위트하는 계정을 최근에 만들었습니다.
dapps, 해외 블록 체인 뉴스 ... etc => @ 사토민 _에서 v
이 항목은 CryptoZombies 비망록입니다.
CryptoZombies란?
Loom Network이 제공하는 Solidity 게임 감각으로 배울 수 있는 서비스.
※ Solidity: Ethereum에 배포하는 스마트 계약을 작성하기 위한 언어
아마 dapps 개발자가 한 번은 만지는 것이며 더 이상 통과 의례적인 서 위치.
개요
여섯 가지 수업이 있습니다.
여섯 가지 수업이 있습니다.
6회로 나누어 각각의 정리를 두어 둡니다.
1. 좀비 팩토리 만들기
Solidity 컴파일러 버전의 선언.
※ CryptoZombies에서는 0.4.19를 지정한다.
pragma solidity ^0.4.19;
contract ZombieFactory {
}
이유: 향후 컴파일러 버전으로 인해 코드가 손상되는 것을 방지
상태 변수 정의
※ 상태 변수: Ethereum 블록체인에 기록된다.
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
}
uint : 부호없는 정수 데이터 형식으로 256bit 별칭
- 구조체
여러 속성을 가진 데이터 형식을 만들 수 있습니다.
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
}
여기에서는 Zombie라고 하는 구조체를 작성해, string형의 name과 uint형의 dna를 가져오고 있다.
- 배열
메모리를 낭비하지 않도록 두 가지 유형의 배열이 있습니다.
고정 길이 배열
uint[2] fixedArray;
가변 길이 배열
uint[] dynamicArray;
zombies
라는 배열을 만들고 createZombie
function 안에서 새로운 Zombie를 배열에 저장한다.
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function createZombie(string _name, uint _dna) {
zombies.push(Zombie(_name, _dna));
}
}
- Private/Public
Public : 누구나 계약의 함수를 두드려 실행할 수 있습니다.
Private: 정의된 계약 내에서만 사용할 수 있습니다.
※ 디폴트는 Public
로 설정되어 있다.
createZombie 함수를 Private
로 한다.
그 때, createZombie => _createZombie
로 변경하는 것이 통례.
- View/Pure
View : 블록체인에 기록, 값의 변경, 쓰기를 할 수 없지만, 읽을 수 있다.
Pure : 쓰기, 읽기 모두 할 수 없다.
_generateRandomDna 함수를 private
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function _createZombie(string _name, uint _dna) private {
zombies.push(Zombie(_name, _dna));
}
function _generateRandomDna(string _str) private view returns (uint) {
uint rand = uint(keccak256(_str));
return rand % dnaModulus;
}
}
returns (type) : 함수 선언에 반환 값의 유형 포함
keccak256():16진수로 변환한 해시값을 구한다(같은 문자로부터는 같은 해시값)
uint() : 형 캐스트
지금까지 만들어 온 함수를 view
함수에 정리한다.
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function _createZombie(string _name, uint _dna) private {
zombies.push(Zombie(_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);
}
}
- 이벤트
・ 계약상에서 발생한 것을 Dapps 등의 클라이언트에 통지할 수 있다.
· 전달 된 매개 변수는 트랜잭션 로그에 보관됩니다.
이벤트 선언은 이런 느낌.
event EventName(type params);
createRandomZombie
라는 이벤트를 선언하고 지정된 매개 변수를 전달합니다.
NewZombie
함수 내에서 _createZombie
배열에 추가되면 이벤트를 발화시킵니다.
좀비의 zombies
에는, 배열의 인덱스를 부여시킨다.id
함수가 배열의 요소수를 돌려주는 것을 이용해 array.push()
그리고 대응.
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);
}
}
DONE입니다, 고마워요.
다음 번 : "좀비가 인간을 공격한다"
bportal
Reference
이 문제에 관하여(CryptoZombies #1 비망록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/SATOMIN/items/6b747a3cfc1be5f36a3b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
pragma solidity ^0.4.19;
contract ZombieFactory {
}
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
}
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
}
uint[2] fixedArray;
uint[] dynamicArray;
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function createZombie(string _name, uint _dna) {
zombies.push(Zombie(_name, _dna));
}
}
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function _createZombie(string _name, uint _dna) private {
zombies.push(Zombie(_name, _dna));
}
function _generateRandomDna(string _str) private view returns (uint) {
uint rand = uint(keccak256(_str));
return rand % dnaModulus;
}
}
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
Zombie[] public zombies;
function _createZombie(string _name, uint _dna) private {
zombies.push(Zombie(_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);
}
}
event EventName(type params);
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);
}
}
Reference
이 문제에 관하여(CryptoZombies #1 비망록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/SATOMIN/items/6b747a3cfc1be5f36a3b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)