ERC20Interface
interface에서는 솔리디티에서 사용 할 함수의 형태를 선언한다.
function은 이더리움에서 제공하는 함수이며 event는 이더리움에서 제공하는 로그이다.
function은 작성순서에 주의해야한다.
event의 Transfer이벤트는 토큰이 이동할때마다 로그를 남기고 Approval이벤트는 approve함수가 실행 될때 마다 로그를 남긴다.
솔리디티 함수 구성
더보기
function (<parameter types>) {internal | external | public | private} [pure | constant | view | payable] [(modifiers)] [returns (<return types>)]
contract SimpleToken 구성
contract SimpleToken is ERC20Interface { ... }
사전에 정의한 ERC20Interface를 is ERC20Interface를 붙여 함수를 사용하도록 선언한다.
ERC-20 함수
- totalSupply : 해당 스마트 컨트랙트 기반 ERC-20 토큰의 총 발행량 확인
- balanceOf : owner가 가지고 있는 토큰의 보유량 확인
- transfer : 토큰을 전송
function transfer(address recipient, uint amount) public virtual override returns (bool) {
_transfer(msg.sender, recipient, amount);
emit Transfer(msg.sender, recipient, amount);
return true;
}
function _transfer(address sender, address recipient, uint256 amount) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
_balances[sender] = senderBalance - amount;
_balances[recipient] += amount;
}
transfer는 내부함수인 _transfer를 호출하며 호출정상시 Transfer event를 발생시킨다.
_transfer는 require를 통해 세가지 조건을 검사한다.
1. 보내는 주소자(sender) 주소가 정상적인지 검사
2. 받는사람(recipient) 주소가 정상적인지 검사
3. 보내는사람의 발란스가 보낼려는 양보다 많은지 검사
만족할시 +-amount를 통해 토큰을 주소에서 더하고 빼준다.
- approve: 토큰을 전송 가능 하도록 spender에게 양도할 토큰의 양을 설정
approve는 양도할 토큰값인 currentAllowance가 내가 현재 가지고 있는 토큰의 양보다 적은지 require를 사용해 검사합니다. 실제로 양도가 이루어지는게아니라 양도할 주소와 양을 정하는 과정이다.
- allowance : owner가 spender에게 양도 설정한 토큰의 양을 확인
allowance는 주인과 exchange값을 입력해 몇개가 등록됐는지 확인할 수 있다.
function allowance(address owner, address spender) external view override returns (uint256) {
return _allowances[owner][spender];
}
- transferFrom : spender가 거래 가능하도록 양도 받은 토큰을 전송
transforeFrom은 exchange가 BUYER가 구매신청해놓은 금액에 대해 맡겨둔 토큰을 판매한다.
'개발 학습 > 블록체인' 카테고리의 다른 글
S4: public 함수 중 관리자만 접근가능함수 OwnerHelper (0) | 2021.11.26 |
---|---|
S4: Over/Under flow를 막아주는 SafeMath (0) | 2021.11.26 |
S4: Solidity 기본 문법 (0) | 2021.11.25 |
S4: EVM과 Geth로 스마트컨트랙트 배포 (0) | 2021.11.24 |
S3: dApp (0) | 2021.11.18 |
댓글