개발일지/블록체인

ERC20을 사용하여 코인/토큰 만들기 중 중요한 것

자코린이 2021. 12. 9. 23:49

 이더리움에서 ERC20을 사용하여 코인을 만들 수 있다. (여기서 20은 어느 개발자가 이더리움에게 제안한  방법중 받아들여진 번호이다.)

ERC20을 사용하여 코인/토큰을 만들 때 중요한 2가지가 있다.

'누가' '얼마나'가지고 있나?(balances) => Transfer(누구에게, 얼마나 보내냐?)

'누가''누구에게''얼마나'허용하냐?(allowed) => TransferFrom(누가, 누구에게, 얼마를 보내냐?)

balaces는 1차원 배열인 반면, allowed는 2차원 배열(테이블)이다. 

 approve(_spender, _value)함수를 사용하여 msg.sender(실행자)가 _spender에게 _value만큼 허용한다. 

allowed[msg.sender][_spender] = _value

그리고 이를 Approval() 함수를 사용해 블록체인에 기록한다.

테이블을 간단히 보면 A, B에게 700의 코인이 있다.

그 코인을 6명에게 표처럼 나누어준다.(approve())

누가 누구에게 얼마나
A A_1 100
A A_2 200
A A_3 300
누가 누구에게 얼마나
B B_1 100
B B_2 200
B B_3 300

만약 A_1이 B_3에게 100개의 코인을 보낼려고 한다면 보통 A_1에서 B_3로 바로 보낸다고 생각할 수 있다.

하지만 여기서 그렇게 생각하면 안 된다. 그 이유는 바로 A_1은 그 코인을 가지고 실제로 가지고 있지 않다.

그저 A가 가진 코인 중 100개를 A가 A_1에게 허용한 것일 뿐이다.

따라서 A가 balances[_from].sub(_value)과 balances[_to].add(_value)함수를 사용하여 B에게 코인을 보낸 후 allowed[_from][msg.sender].sub(_value)을 사용해 A_1에서 보낸 코인만큼 허용된 코인양을 줄인다.

토큰의 이동이 발생하여 ERC20규약에 따라 이벤트를 호출하여 블록체인에 기록된다. (Transfer())(대문자 함수는 이벤트 함수이다.)

여기서 msg.sender는 A_1으로 보내는 사람 _spender는 B_3로 받는사람으로 sender가 호출하는 순간 sender가 가스비를 내고 함수를 실행한다.

하지만 allowed와 balances는 다른 변수이므로, TransferFrom()함수에서 B_3의 허용 코인수를 늘려주진 않는다.

 

 

 

                                          *아직 공부하는 중이라 틀린부분이 있을 수 있습니다. 틀린부분은 댓글로 알려주세요.*

                                       *코인을 홍보하는 댓글은 정중히 사양하고, 그러한 댓글은 삭제조치 될 수 있음을 알립니다.*

'개발일지 > 블록체인' 카테고리의 다른 글

ERC721을 사용한 NFT 코드 이해  (0) 2022.01.05
블록 체인은 무엇인가?  (0) 2021.11.30