• 카테고리

    질문 & 답변
  • 세부 분야

    블록체인

  • 해결 여부

    해결됨

ERC20과 프론트엔드 연결 테스트 코드 질문입니다.

22.10.12 22:14 작성 조회수 114

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]} 와 같이 쓸 날이 있을거 같아서, 위와 같이 따로 명시를 해주었습니다.

좀 더 자세히 볼게요,

https://github.com/D-One0914/BreakingSolidityERC20/blob/main/Chapter6_ERC20AndFrontend/test/Erc20Test.js

여기 테스트 코드를 보시면,

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]} );

를 해주시면되겠죠 :)

궁금한점이 해결되었으면 합니다 :)))