web3를 활용하여 이더리움 계좌이체를 진행하다가 나온 에러
2017년도의 정보로
web3.sendTransaction({to:receiver, from:sender, value:web3.toWei("0.5", "ether")})
이렇게 썼다가 아래와 같은 에러가 나왔다.
Error: web3.toWei is not a function
2018년 이후의 답변에서 찾아보니 web3 v1.0부터 toWei와 같은 많은 utility functions 들이 web3.utils. 안으로 옮겨졌다고 한다 !!
-> we3.utils.toWei("0.5", "ether")
이렇게 작성하기
그러면 이제 두번째 에러가 나온다.
Error : web3.sendtransaction is not a function
이번에는 web3.eth.sendTransaction(~) 이렇게 eth를 붙여주면 된다.
** 참고로 infura에 연결한 경우에는 sendTransaction을 사용할 수 없다. **
요 내용을 자세히 풀어보자면
eth_sendTransaction()은 나의 노드가 unlocked 어카운트를 사용하여 트랜잭션에 서명하길 원할 때 사용하는데 Infura나 다른 제 3자 노드 provider는 보통 이 방법을 지원하지 않는다. 이런 경우 app에서 트랜잭션 서명을 한 후 서명되어진 트랜잭션을 broadcast를 나의 노드에 broadcast해야 한다. 이렇게 진행하려면
1. web3.eth.signTransaction()으로 서명을 하고
2. web3.eth.sendSignedTransaction()으로 서명된 트랜잭션을 내 노드에 보낸다.
다른 방법은 메타마스크에게 서명을 위임하는 것이다 web3를 메타마스크에 연결하고 (window.ethereum) 그리고 sendTransaction()하면 서명이 뜬다!
댓글