solidity

21.07.15 import, inheritance, storage, memory

슈팅스타제제 2021. 7. 16. 01:11

CryptoZombies chap.2-05~08

✔import "./zombiefactory.sol";

동일한 폴더에 있는 zombiefactory.sol이라는 파일을 컴파일러가 불러오게 한다. solidity의 파일 확장자는 sol이다.

 

✔Inheritance 상속 : contract 자식 컨트랙트 is 부모 컨트랙트

contract ZombieFeeding is ZombieFactory {

>>ZombieFeeding이 자식 컨트랙트이고 ZombieFactory가 부모 컨트랙트! ZombieFeeding은 ZombieFactory의 함수, 이벤트, 제어자에 접근할 수 있다.

 

A라는 변수가 있고 B라는 배열이 있을 때,

✔Storage : string [ ] storage A = B[2];

A는 B에 대한 포인터이다! C++의 깊은 복사랑 뭔가 비슷한 느낌쓰

만약에 B[2]의 값이 4 라고 하면 포인터 A에 대한 값은 B[n]인 4다.

A.status = 7; 라고 하면 원래는 4였는데 걔가 7로 완전히 바뀌어버린다!!

    Zombie storage myZombie = zombies[_zombieId];

✔Memory : string [ ] memory A = B[2];

A는 단순히 메모리에 데이터를 복사만 하는 것인데 얕은 복사 느낌쓰가 난다. 

여기서는 A.status = 7;라고 해도 A에 대한 데이터 값만 7이 되는 것이지 B[n]은 여전히 4 다!

memory의 경우에는 B[2] = A;라고 해야 비로소 B[n]의 값이 7로 바뀐다!!

 

전체 코드는 다음과 같다. 

pragma solidity ^0.4.19;

import "./zombiefactory.sol";

contract ZombieFeeding is ZombieFactory {

  function feedAndMultiply(uint _zombieId, uint _targetDna) public {
    require(msg.sender == zombieToOwner[_zombieId]);
    Zombie storage myZombie = zombies[_zombieId];
    _targetDna = _targetDna % dnaModulus;
    uint newDna = (myZombie.dna + _targetDna) / 2;
    _createZombie("NoName", newDna);
  }

}

 

'solidity' 카테고리의 다른 글

21.07.28 diamond problem  (0) 2021.07.28
21.07.27 ERC-20 Token Contract  (0) 2021.07.28
21.07.23 Token Role  (0) 2021.07.26
21.07.22 Mint & Burn Token  (2) 2021.07.24
21.07.15 mapping, msg.sender, require  (0) 2021.07.16