2탄을 추가한 이유는 ERC-20 cotract의 allowance, approve 가 뭔지 잘 모르겠어서 테스트 해보려고 한다!
내 나름대로의 해석이다.
계정이 세개가 등장한다.
🟡 0xA978F20F47509E55508d65b3213c3709FF6D9d46 (토큰 발행자)
🟢 0xBefcbf517438d3d3e244db536CC9ff9c56Cac5C1 (사용자1)
🔵 0x0E260F1e7CBC737c817b4e4d003f23b05AcF51Eb (사용자2)
🟡토큰 발행자는🟢사용자 1이 🔵사용자 2에게 5토큰을 보내는 transferFrom 메소드를 호출하고 싶다. (트랜잭션을 쏘고 싶다.)
ACCOUNT를 🟡토큰 발행자로 했다.
🟢사용자 1이 🔵사용자 2에게 5토큰을 송금하도록 transferFrom을 호출했다.
❌ 결과는 fail
분명 사용자1은 토큰이 17개가 있다. 근데 왜 전송 안됨?
아니 생각해보면 토큰 발행자 맘대로 남의 토큰을 전송하는게 더 웃기지ㅎㅎ
🟢사용자 1이 직접 트랜잭션을 쏘고 (msg.sender) recipient를 🔵사용자2로 해서 transfer을 호출하면 토큰이 전송된다. 하지만 우리는 🟡토큰 발행자가 🟢사용자1에서 🔵사용자2로 토큰을 전송하도록 하고싶다. transferFrom 을 쓰고싶단 말이다!
그런경우 🟡토큰 발행자가 🟢사용자1에게서 5토큰을 가져다가 🔵사용자 2에게 전송해주는것 같다. 그러면 🟢사용자1은 🟡토큰 발행자가 5토큰을 가져갈 수 있도록 허용해 줘야한다.
allowance 메소드를 호출해보았다.
spender가 owner에게서 얼마만큼의 토큰을 인출할 수 있는지 확인하는 메소드 이다.
🟡토큰 발행자는 🟢사용자1 에게서 0토큰을 출금 할 수 있다.
그래서 approve가 필요하다.
approve는 spender가 msg.sender로 부터 value 만큼 출금할 수 있도록 허용한다.
🟢사용자 1이 msg.sender가 되어 approve 메소드를 호출해야한다. 그래서 🟡토큰발행자가 100만큼 사용자 1의 계좌에서 출금 할 수있도록 허용한다. 허용한다음. 다시 allowance를 호출해 보면 100으로 바뀐것을 알 수 있다.
이제🟡토큰 발행자는 🟢사용자1의 계좌에서 100만큼을 출금할 수 있도록 허용되었다.
다시 trasferFrom 을 호출 해보자.
🟡토큰발행자가 msg.sender가 되어 trasferFrom 을 호출한다.
🟢사용자 1에서 🔵사용자 2로 5토큰을 전송하도록 한다.
성공적으로 전송 되었고 🟢사용자1의 토큰은 17에서 5가 줄어 12가 되었다.
나중에 봐도 이해가 되려나~