매핑과 주소 자료형
msg.sender: 전역변수, 현재 함수를 호출한 사람의 주소를 반환함
require: 특정 조건 검사(이프문은 따로있다, require는 if+revert 느낌)
솔리디티는 상속이 된다
솔리디티에는 변수를 저장할 수 있는 공간으로 storage와 memory가 있다
storage는 블록체인상에 영구적으로 저장되는 변수
memory는 일시적으로 저장되는 변수
일반적으로 변수에 사용할때는 솔리디티가 기본적으로
함수 외부에 선언되는 변수(상태변수)는 기본적으로 storage
함수 내부에 선언되는 변수는 기본적으로 memory -> 함수 호출 종료시 사라짐
으로 설정해준다
근데
구조체나 배열을 사용할때는 storage나 memory 키워드를 명시해야한다
다른 컨트랙트와 상호작용하려면 인터페이스를 정의해야한다
다음 코드는 크립토키티 컨트랙트의 getKitty 함수인데 얘랑 상호작용하려면 인터페이스를 정의해야한다
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
) {
Kitty storage kit = kitties[_id];
// if this variable is 0 then it's not gestating
isGestating = (kit.siringWithId != 0);
isReady = (kit.cooldownEndBlock <= block.number);
cooldownIndex = uint256(kit.cooldownIndex);
nextActionAt = uint256(kit.cooldownEndBlock);
siringWithId = uint256(kit.siringWithId);
birthTime = uint256(kit.birthTime);
matronId = uint256(kit.matronId);
sireId = uint256(kit.sireId);
generation = uint256(kit.generation);
genes = kit.genes;
}
인터페이스는 이렇게 생김
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
);
}
중괄호부분은 날리고 리턴값까지만 정의하고 중괄호부분에 세미콜론으로 마무리한다
이 인터페이스를 활용하려면
contract ZombieFeeding is ZombieFactory {
address ckAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d;
// `ckAddress`를 이용하여 여기에 kittyContract를 초기화한다
KittyInterface kittyContract = KittyInterface(ckAddress);
}
function feedOnKitty(uint _zombieId, uint _kittyId) public {
uint kittyDna
(,,,,,,,,,kittyDna) = kittyContract.getKitty(_kittyId);
}
솔리디티는 리턴값이 여러개가 될 수 있기에 콤마를 저렇게 나열해서 getKitty 함수의 10번째 반환값인 genes만 뽑아왔다.
https://cryptozombies.io/ko/course
'Block Chain' 카테고리의 다른 글
[BlockChain] 크립토좀비 레슨4 (0) | 2023.02.14 |
---|---|
[BlockChain] 크립토좀비 레슨3 (0) | 2023.02.13 |
[BlockChain] 크립토좀비 레슨1 (0) | 2023.02.10 |
[BlockChain] Move 언어 (0) | 2023.02.03 |
[Dapp 만들기] 4. 이더리움 가스비 계산 (0) | 2022.06.29 |