: 이더를 받는 특별한 함수 제어자 (컨트랙트로 이더를 보내는 경우)
: remix에서는 빨간색으로 표현한다.
: 이더를 보낼 때 만큼은 Payable이 붙어있어야 value값을 적어줄 수가 있다. (ex) AddLiquidity의 value값은 이더이다.)
즉, 함수가 payable로 표시되지 않았는데 이더를 보내려 한다면, 함수에서 트랜잭션이 거부된다.
: 다른 함수들의 접근을 제어하기 위해 사용되는 유사 함수
: 함수 실행 전에 조건 여부 확인을 위하여 사용
: 아래와 같이 소유자가 한명인지 확인하는 제어자가 있다.
modifier onlyOwner() {
require(msg.sender == owner);
_; // 제어자 마지막에 _;를 넣음
}
- 제어자의 종류
A. 접근 제어자
: 함수가 언제 어디서 호출 되는지 제어함
ex) private,internal,external, publicB. 상태 제어자
: 블록체인과 상호작용하는 방법
: 외부에서 불렀을 때 가스 소모 하지 않음
ex) view, pureC. 사용자 정의 제어자
: 위의 onlyOwner와 같은 유형
: 4과 후반부에서 이를 이용하여 코드를 줄임
: transfer 함수를 사용해서 이더를 특정 주소로 전달함.
: 아래와 같이 표현
대상.transfer(돈)
: 코드 선언 복습
pragma solidity ^0.4.19;
import "./zombiehelper.sol";
: keccak256을 사용함 (1편 10번 참조)
: 이곳의 난수는 완전히 안전하지는 않기 때문에, oracle(이더리움 외부에서 데이터를 받아오는 안전한 방법 중 하나)을 사용해서 블록체인 밖에서 안전한 난수를 만드는 방법을 다룰 수도 있다.
: 동일한 내용을 확인할 때, 여러번 사용하지 않기 위해 제어자를 사용
function changeName(uint _zombieId, string _newName) external aboveLevel(2, _zombieId) ownerOf(_zombieId) {
zombies[_zombieId].name = _newName;
}