해결된 질문
작성
·
167
1
안녕하세요! 강의 너무 유익하게 잘 수강하고 있습니다!
다름이 아니라 ERC20과 프론트엔드 연결에서 3번째 테스트 코드 관련 질문입니다.
openzeppelin 레포지토리에서 ERC20 코드를 보면 transfer 함수의 인자로는 to와 amount, 2개가 있음을 확인할 수 있습니다.
그런데 강의에서 사용하신 테스트 코드에는 {from : accounts[0]}와 같은 3번째 인자가 있어서 의문이 들었습니다.
공식문서를 찾아봤는데도 3번째 인자에 관해서는 보이지 않는데 혹시 이 3번째 인자의 정체를 알 수 있을까요?
답변 1
1
안녕하세요 :)
강의가 유익하다고 하시니 감사합니다 :))
간다하게 말씀드리면, 어떤 주소가 트랜잭션을 줄것인지를 나타 냅니다. 즉 {from : accounts[0]} 는 accounts 배열의 0번째 인덱스 주소가 트랜잭션을 보내게 됩니다.
사실 {from : accounts[0]} 을 따로 안써주셔도, 기본값으로 accounts[0] 이 트랜잭션을 보내개 됩니다. 그런데 {from : accounts[1]} , {from : accounts[2]} 와 같이 쓸 날이 있을거 같아서, 위와 같이 따로 명시를 해주었습니다.
좀 더 자세히 볼게요,
여기 테스트 코드를 보시면,
contract("Erc20Token Test", async (accounts) => {
...
}
accounts 가 보이시죠,
저희가 가나슈와 연동해 테스트를 하면, 10개의 주소를 부여 받게됩니다. 그 10개의 주소가 accounts 안에 있다고 생각하시면 됩니다.
배열 형태와 같이 있게 되겠죠 , 예를 들어 [주소1, 주소2, 주소3..., 주소 10] 와 같은 형태로 있게 됩니다.
저희가 테스트넷에서 배포를 할 때,
contract("Erc20Token Test", async (accounts) => {
...
erc20TokenInstance = await Erc20Token.new( tokenName, tokenSymbol, totalSupply );
...
}
와 같이 한다면, {from:accounts[0]}을 명시 안해도, 자동적으로 account[0]이 배포를 하게 됩니다.
만약에,
contract("Erc20Token Test", async (accounts) => {
...
erc20TokenInstance = await Erc20Token.new( tokenName, tokenSymbol, totalSupply
,{accounts[1]} );//<- accounts의 인덱스1번째 주소가 배포
...
}
와 같이 {accounts[1]} 한다면, accounts의 인덱스 1번째에있는 주소가 배포하게 됩니다.
이와 같이,
await erc20TokenInstance.transfer( accounts[1], web3.utils.toWei("1", "ether"), { from: accounts[0] } );
accounts의 0번째 인덱스가 transfer이라는 트랜잭션을 보내게 됩니다. 그러나,
await erc20TokenInstance.transfer( accounts[1], web3.utils.toWei("1", "ether") );
아래와 같이 { from: accounts[0] }를 안써주셔도 기본값으로 accounts[0]이 트랜잭션을 보내게 됩니다. 저는 일부러 여러분들이 이러한 기능이 있는것을 인지하도록 계속 강의에서 썼습니다 :)
그래서, 만약에 accounts[9]로 transfer함수를 보내고 싶다면,
await erc20TokenInstance.transfer( accounts[1], web3.utils.toWei("1", "ether"),{accounts[9]} );
를 해주시면되겠죠 :)
궁금한점이 해결되었으면 합니다 :)))