ERC-20 이란?
: Ethereum Request for Comment 20의 약자이다. 20은 ERC 제안서의 일련번호이다.
ERC-20은 이더리움 블록체인 네트워크에서 정한 표준 토큰 스펙으로, EIPs에서 관리하는 공식 프로토콜이다. 이더리움과의 호환에 필요한 모든 요구사항을 충족시키는 표준은 ERC-20으로 간주하고, ERC-20 토큰은 이더리움과 교환할 있으며 이더리움 지갑으로 전송이 가능하다.
EIP vs ERC
⇒ EIP는 이더리움 개선 제안이고, ERC는 이더리움 기능 표준이다. ERC는 EIP의 한 형태이다.
이더리움 ERC는 표준 트랙 EIP의 특정 범주와 관련이 있다. 표준 추적 EIP는 대부분 또는 모든 이더리움 구현에 영향을 미치는 모든 변경사항을 설명하며 코어, 네트워킹, 인터페이스 및 ERC와 같은 하위 범주로 나눌 수 있다.
시간이 지남에 따라 정의가 커졌지만 ERC는 개발자가 작성한 초안 제안이었고 나중에 다양한 애플리케이션 수준 및 규칙에 대한 EIP로 정제되었다. 여기에는 토큰 표준(ERC-20), URI 체계, 라이브러리/ 패키지 형식(EIP-82) 또는 지갑 형식이 포함된다. 특정 EIP가 이더리움 커뮤니티에서 합의를 이루면 관련 스마트 계약을 통해 명식된 규칙을 자동화하는 새로운 표준이 된다.
표준 트랙 EIP의 이러한 하위 범주의 주요 차이점은 배포되는 위치이다. ERC는 애플리케이션 수준에서 배포되며, 모든 핵심 EIP가 널리 채택되어야 하기 때문에 프로토콜 수준에서 배포되고 커뮤니티에서 더 광범위한 합의가 필요한 코어와 달리 모든 참여자가 채택할 필요는 없다. 모든 노드가 네트워크의 일부로 유지하려면 업그레이드 해야 한다.

trasferFrom : spender가 거래할 수 있도록 양도받은 토큰을 전송
ERC-20에서는 토큰의 owner가 직접 토큰을 다른사람에게 전송할 수도 있지만, 토큰을 양도할 만큼 등록해두고, 필요할 때 제삼자를 통해 토큰을 양도할 수 있다.
직접 토큰을 다른사람에게 전송할 때는 transfer 함수를 사용하고, 토큰을 등록하는 방식을 사용하는 경우 approve, allowance, transferFrom 함수를 사용한다.

approve를 통해 지갑의 주인이 토큰을 EXCHAGE에 자신이 가진 토큰의 수보다 적은 수량을 거래할 수 있도록 맡길 수 있다. allowance를 통해 OWNER와 EXCHANGE 값을 입력해서 몇개가 등록되어 있는지 확인할 수 있다. transferFrom을 통해 EXCHANGE가 BUYER가 구매 신청해놓은 금액에 대해 OWNER가 맡겨둔 토큰을 판매한다.


ERC-20에서는 토큰의 owner가 직접 토큰을 다른사람에게 전송할 수도 있지만, 토큰을 양도할 만큼 등록해두고, 필요할 때 제3자를 통해 토큰을 양도할 수 있다.
⇒ 쉽게 말하면, A(송금자), B(나, msg.sender), C(수신자) 이렇게 있을 때, A와 B(나)의 allowance에 기반한 토큰만큼 C에게 보내는 것이다. 즉, 내가 C에게 줄 돈을 A에게로부터 인출가능한 만큼 꺼내서 주는 것이다.
여기서 의문인 점은 transferFrom 함수에서 require 전에 transfer를 실행해 버리면, 이미 송금 되고 나서 allowance를 확인하는것이니까 문제가 되지 않을까 인 점이다…
OwnerHelper (추상 컨트랙트)

추상 컨트랙트는 contract의 구현기능과 interface의 추상화 기능 모두를 포함한다. 추상 컨트랙트는 만약 실제 컨트랙트에서 사용하지 않는다면 추상으로 표시되어 사용되지 않는다.
TokenLock
