[몰라도 해보는 cryptoZombie] Lesson2. 좀비가 희생물을 공격하다 – 1

in #kr6 years ago

https://cryptozombies.io/ko/course

챕터 1: 레슨 2 개요

좀비니까 이제 보고 뜯고 맛보고 즐길 시간이 왔다. 지난 시간에 만든 좀비밑에 사람을 눌러보면 사람이 좀비로 바뀐다. 우리 좀비가 가지고 있는 DNA와 사람이 가지고 있는 DNA를 통해 새로운 좀비 DNA를 만들어 내는 연산을 할 꺼라는 이야기인 듯... 코드를 짤필요 없으니 대충 뭐할껀지 감만 잡고 다음 챕터로 슝!

챕터 2: mapping 과 address

엄청 중요한 내용이 튀어 나왔다. mapping과 address. 이 두 가지 모두 데이터타입이다. int, uint, string 같은 거란 의미이다. 모양도 특이하고…

address

전자지갑 주소가 들어가는 데이터타입이라고 보면된다. uint나 string처럼 데이터 타입을 적어주고, 변수명을 지어주는 식으로 선언한다. address는 각 계정별로 고유값을 가지고 있고, 이 계정별로 다른 다른 데이터를 접근하는 방식(ex. 지갑잔액, 송금 등)으로 활용된다. 크립토좀비에서는 이 계정별로 소유하고 있는 좀비를 관리하게끔 프로그래밍을 할 계획이다.

address myWallet;

mapping

맵핑은 조금 특이한 데이터타입이다. python으로 치면 dictionary랑 비슷한거고, javascript로 치자면 object랑 비슷하다고 해야하나… 비슷만 하지 같은 건 아니다.
구조나 사용방법은 비슷하다.
‘key : value’ 형태로 데이터가 저장된다. 조금 특이한 것은 key로 쓸 데이터타입과 value로 쓸 데이터 타입을 사전에 정의해준다는 점?

mapping (uint => string) userIdToName;

이렇게 데이터를 쓰는 이유는 데이터 저장과 검색을 용이하게 하기 위해서라고 하니 제대로 이해하는 것이 중요하다.

그러면 직접 만들어보라는 걸 만들어보자.

mapping (uint => address) public zombieToOwner;

맵핑이름을 보면 알겠지만 좀비와 주인을 이어주는 맵핑이다. uint 는 zombieId가 들어올 자리인듯 싶고, Owner는 각 계정별 고유값인 address가 들어간다.

mapping (address => uint) ownerZombieCount

이건 주인 별로 좀비가 몇마리인지 관리하기 위해 선언하는 맵핑이다.

챕터 3: msg.sender

조미료를 보내는 사람? 별 위화감 없이 msg를 메시지라고 읽고 있었는데.. 누가 엠에스쥐를 왜 보내냐고 물어봤다… 그렇게도 읽을 수 있다는 사실에 감탄.

변수는 상자고 주소를 집어넣는 종류가 address인거니까… 앞서 선언해준 address에 계정주소를 담으려는데 계정주소가 뭔지 모른다. 그때 쓰는 것이 msg.sender이다. msg.sender는 contract를 실행한 사람의 계정주소를 반환하는 함수이다.

내가 msg.sender가 적혀있는 내용을 실행시키면 내 계정주소가 찍힌다는 말!

다른 자세한 설명은 크립토좀비가 잘 하고 있으니 패스!
직접 해보면..

function _createZombie(string _name, uint _dna) private {
    uint id = zombies.push(Zombie(_name, _dna)) - 1;
    zombieToOwner[id] = msg.sender;
    ownerZombieCount[msg.sender]++;
    NewZombie(id, _name, _dna);
}

이렇게 코드를 짤 수 있다. 챕터2에서 선언했던 mapping을 구조를 생각하면 크게 어렵지 않다.
zombieToOwner는 key로 uint를 받고, value로 address를 받는다. 배열이나 오브젝트 안에 저장된 특정 값에 접근하는 것과 비슷한 문법이다.
zombieToOwner라고 맵핑이름을 적고, []를 적고 그 안에 key가 될 부분을 적고, = 해서 value가 될 부분을 적는다.
ownerZombieCount도 마찬가지이다. 주인별로 좀비갯수를 파악하고 싶은거니 먼저 주인이 key로 들어간다. 고유계정이 결국 address니까. msg.sender가 []안으로 들어간다. 그리고 그 값에 + 1을 해야하지만… 귀찮으므로 ++로 숫자를 증가시켰다.
ownerZombieCount[msg.sender] = ownerZombieCount[msg.sender] + 1;
(이렇게 짜기 귀찮아서…)


참고문헌
https://d2fault.github.io/2018/03/19/20180319-about-solidity-1/

코어 이더리움 프로그래밍 – 박재현, 오재훈, 박혜영

Sort:  

이번 시간에는 맵핑과 어드레스를 배웠네요 ^^

ㅎㅎ 꾸준히 조금씩 공부중입니다!

덕분에 저도 힘들지 않게 모바일폰으로
쉽게 공부하고 있습니다.ㅎㅎ

이번주 마지막 응원입니다~ 한주간 고생많으셨어요. 즐거운 주말 되세용^^
/ 다니의 뉴비 지원 프로젝트(8월 2주)

일주일이 벌써 휘리릭 지나갔네요. 감사합니다! ㅎㅎ @danihwang 님도 좋은 주말 보내셔요!

Congratulations @could0222! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes
Award for the number of comments

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

You can upvote this notification to help all Steemit users. Learn why here!

즐거운 스팀잇 생활하시나요?
무더위야 가라!!!!

더워서 점점 늘어지는것 같아 걱정이에요 ㅎㅎ

잘 보고갑니다~
즐거운 한주 되시기 바랍니다..^^

감사합니다! @sbw777 님도 즐거운 한주되세요! 날이 너무 덥네요 ㅜ

수영.jpg

응원합니다!

센스있는 짤과 응원 감사합니다!!! ㅎㅎ

Exclusive offer GET 5 STEEM Airdrop
Join our Site and get 5 steem airdrop on your steem account. The Campaign has start for attract new user to use our service and mass adoption.
Get 5 STEEM NOW CLICK HERE

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.032
BTC 64615.49
ETH 3112.63
USDT 1.00
SBD 3.84