크립토 좀비 - 4 : 좀비 전투 시스템

장원령·2021년 3월 17일
0

크립토좀비

목록 보기
4/6

1. Payable 제어자

: 이더를 받는 특별한 함수 제어자 (컨트랙트로 이더를 보내는 경우)
: remix에서는 빨간색으로 표현한다.
: 이더를 보낼 때 만큼은 Payable이 붙어있어야 value값을 적어줄 수가 있다. (ex) AddLiquidity의 value값은 이더이다.)

즉, 함수가 payable로 표시되지 않았는데 이더를 보내려 한다면, 함수에서 트랜잭션이 거부된다.

  • msg.value : 컨트랙트로 이더가 얼마나 보내졌는지 확인하는 방법
  • ether : 기본적으로 포함된 단위

1.1 제어자란?

: 다른 함수들의 접근을 제어하기 위해 사용되는 유사 함수
: 함수 실행 전에 조건 여부 확인을 위하여 사용
: 아래와 같이 소유자가 한명인지 확인하는 제어자가 있다.

modifier onlyOwner() {
    require(msg.sender == owner);
    _; // 제어자 마지막에 _;를 넣음
  }
  • 제어자의 종류

A. 접근 제어자

: 함수가 언제 어디서 호출 되는지 제어함
ex) private,internal,external, public

B. 상태 제어자

: 블록체인과 상호작용하는 방법
: 외부에서 불렀을 때 가스 소모 하지 않음
ex) view, pure

C. 사용자 정의 제어자

: 위의 onlyOwner와 같은 유형
: 4과 후반부에서 이를 이용하여 코드를 줄임

2. 컨트랙트에서 이더를 인출하는 함수 만들기

: transfer 함수를 사용해서 이더를 특정 주소로 전달함.
: 아래와 같이 표현

대상.transfer(돈)

3. 좀비 전투

: 코드 선언 복습

pragma solidity ^0.4.19;
import "./zombiehelper.sol";

4. 난수

: keccak256을 사용함 (1편 10번 참조)
: 이곳의 난수는 완전히 안전하지는 않기 때문에, oracle(이더리움 외부에서 데이터를 받아오는 안전한 방법 중 하나)을 사용해서 블록체인 밖에서 안전한 난수를 만드는 방법을 다룰 수도 있다.

5. 좀비 싸움

6. 공통로직 구조 개선하기

: 동일한 내용을 확인할 때, 여러번 사용하지 않기 위해 제어자를 사용

7. 구조 더 개선하기

function changeName(uint _zombieId, string _newName) external aboveLevel(2, _zombieId) ownerOf(_zombieId) {
    zombies[_zombieId].name = _newName;
  }

8. 공격으로 돌아가자

9. 좀비 승리와 패배

10. 좀비 승리

11. 좀비 패배

0개의 댓글