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 |