작성
·
272
0
강의를 듣는 도중 감이 오시나요? 라고 하셨는데 감이 안옵니다.
예를 들어 현재 Roposten 서버에 컨트랙트를 배포 되어 있고 어떤 이유에 의해서 web3 인스턴스를 생성 못했다면 else 이 실행 되는데 localhost:8545 는 전혀 다른 서버인데? 감이 안옵니다.
if (typeof web3 !== 'undefined') {
App.web3Provider = web3.currentProvider;
web3 = new Web3(web3.currentProvider);
} else {
App.web3Provider = new web3.providers.HttpProvider('http://localhost:8545');
web3 = new Web3(App.web3Provider);
}
답변 4
0
개인서버보다는 보통 인퓨라에 연결해서 해결합니다.
App.web3Provider = new web3.providers.HttpProvider('https://ropsten.infura.io/v3/api-key');
0
0
0
좋은 질문 감사합니다. 화가 나신건 아니겠지요 :)
어떤 이유에 의해서 web3 인스턴스를 생성못해 else문으로 가는게 아닙니다.
if (typeof web3 !== ‘undefined’) {
브라우저에 web3 인스턴스가 미리 주입되어 있지 않았을 때 else문으로 가는겁니다. 강좌에서 설명했듯이 댑을 딱 실행했는데 내 Chrome에는 메타마스크 설치가 안되어있으면 else문으로 가는거에요.
더 간단히 말씀드려서 저 라인을 통해 너 지금 메타마스크 쓰고있어 안쓰고있어를 체크하는겁니다.
왜 체크하나? 이유는 web3를 인스턴스화할 때 provider 즉 공급자를 필요로 하기 때문입니다. 메타마스크가 설치되어있으면 메타마스크를 web3 공급자로 사용하는거구요.
만약 메타마스크 설치가 안되어있다면 else문으로가서 web3를 인스턴스화할 때 필요한 공급자를 내 로컬 노드로 (예: geth) 대신 쓰는겁니다. 메타마스크가 설치되어있다면 간편하게 끝낼 수 있는데 설치가 안되어있으면 어쨌거나 web3를 인스턴스화할 노드를 찾아야되서 else문을 저렇게 로컬 노드를 통해 정의해준겁니다.
Ropsten에 컨트랙 배포한거와는 관련이 없어요 :)