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

in #kr6 years ago

image.png

https://cryptozombies.io/ko/course

챕터 10: 인터페이스

image.png

인터페이스에 관한 부분인데.. 제대로 이해를 못하겠다. 아무튼 이해한 부분을 정리해보자면..
우리가 소유하지 않은 컨트랙트(다른 사람이 만든 Dapp 내 contract)와 상호작용하기 위해서 필요한 것이 인터페이스라고 한다. 다른 컨트랙트의 빼대부분만 우리 프로그램내에 contract로 선언해서 쉽게 접근 가능하게 만드는 것이다.
요구사항대로 작성하면 다음과 같다.

contract KittyInterface {

  function getKitty(uint256 _id) external view returns (
    bool isGestating,
    bool isReady,
    uint256 cooldownIndex,
    uint256 nextActionAt,
    uint256 siringWithId,
    uint256 birthTime,
    uint256 matronId,
    uint256 sireId,
    uint256 generation,
    uint256 genes
    );
}

getKitty를 선언한 부분이 다소 복잡해 보이지만 함수를 선언하되 {}의 내용은 적지 않고 끝낸다고 생각하면 된다. 위 코드가 복잡해 보이는건 solidity의 함수는 여러 값을 return할수 있으며, getKitty라는 함수가 여러 값을 return하는 함수 이기 때문이다.

챕터 11: 인터페이스 활용하기

image.png

앞서 선언했던 인터페이스를 활용해보자. 그러기 위해서 우리가 사용하려는 다른 컨트랙트의 주소를 가져와야한다.

크립토좀비에서 선언하라는 대로 선언해보면 다음과 같다.

address ckAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d;
KittyInterface kittyContract = KittyInterface(ckAddress);

먼저, 첫번째 줄은 다른사람이 만든 컨트랙트 주소이다. 여기서는 크립토키티의 컨트랙트가 있는 주소이다. 이 주소를 ckAddress에 담은 다음 우리가 선언한 KittyInterface 인터페이스를 사용하기 위해서 사용한다. 변수를 선언하는 것처럼 선언하고, 인터페이스명(타 컨트랙트 주소) 형식으로 초기화해주면 이제 우리는 ZombieFeeding 컨트랙트에서 getKitty 함수를 사용할 수 있게 되었다!

챕터 12: 다수의 반환값 처리하기

image.png

앞서 solidity에서 함수는 여러값을 return할 수 있다고 했다. (그래서 함수 선언부에 return이라고 안적고 returns라고 적는다고…) 앞서 우리가 우리 컨트랙트에서 쓸 수 있도록 하기위해 인터페이스를 선언하고, 해당 컨트랙트 주소를 불러오고 했던건 getKitty라는 함수를 사용하기 위함이였으며.. 이 getKitty가 여러 값을 returns으로 반환하고 있다.
Return 값들을 받아 활용하는 것은 어렵지 않다. Python의 tuple 다루듯이 쓰면 된다고 할까.
변수를 지정해주고, 순서에 맞게 대입해주면 된다.

function feedOnKitty(uint _zombieId, uint _kittyId) public {
    uint kittyDna;
    (,,,,,,,,,kittyDna) = kittyContract.getKitty(_kittyId);
     feedAndMultiply(_zombieId, kittyDna);
}

쉼표가 무려 9개.. 컥..

getKitty는 10개의 return을 받는데 그중 우리가 사용하려는 Dna는 gene이라는 이름으로 맨마지막에 위치하고 있다. 다른 값들은 필요없고 gene만 가져오면 되므로, gene을 담을 kittyDna를 먼저 선언해주고, 튜플처럼 적되, 우리가 안쓸 데이터들은 전부 무시하고 콤마(,)로 구분하여 할당하게끔 하면 된다. 그리고 마무리로 kittyDna를 feedAndMultiply에 넣어 호출하면 된다.


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

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

Sort:  

점점 코드가 복잡해지네요. 그런데 설마 크립토키티를 좀비로 만드는건 아니겠지요? ㅎㅎ

엇 내일이면 공개될 사실이였는데 ㅎㅎ 크립토키티를 먹어서 좀비화 시키는게 lesson2의 목표에요! ㅎㅎ

직접만드시는거예요?

크립토좀비라고 loomnetwork에서 제공하는 solidity학습 프로그램이에요! 여기서 요구하는대로 코드를 작성해보며 공부중입니다 ㅎㅎ

벌써부터어렵네요 ㅋㅋ
그 공부의 끝은 어디인가요

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

더위가 조금은 간 것 같아요! ....기분탓인가?

짱짱맨 출석부 호출로 왔습니다.
폭염에 건강조심하세요..

더위에 노고가 많으십니다. 항상 감사합니다 : )

Coin Marketplace

STEEM 0.16
TRX 0.13
JST 0.027
BTC 58306.22
ETH 2596.07
USDT 1.00
SBD 2.39