인프런 커뮤니티 질문&답변

David Lee님의 프로필 이미지
David Lee

작성한 질문수

블록체인 이더리움 부동산 댑(Dapp) 만들기 - 기본편

Web3 & 컨트랙 인스턴스화

App.web3Provider = new web3.providers.HttpProvider('http://localhost:8545'); 감이 안옵니다.

작성

·

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

SEJONG IT EDU님의 프로필 이미지
SEJONG IT EDU
지식공유자

개인서버보다는 보통 인퓨라에 연결해서 해결합니다.

App.web3Provider = new web3.providers.HttpProvider('https://ropsten.infura.io/v3/api-key');

0

혹시 따로 서버를 둔다고 한다면 로컬공급자 주소를 서버 주소로 해도 될까요?

0

David Lee님의 프로필 이미지
David Lee
질문자

아 그렇군요 메타마스크 설치 여부를 확인 하는 거였군요... 답변 감사합니다.

0

SEJONG IT EDU님의 프로필 이미지
SEJONG IT EDU
지식공유자

좋은 질문 감사합니다. 화가 나신건 아니겠지요 :)

어떤 이유에 의해서 web3 인스턴스를 생성못해 else문으로 가는게 아닙니다.

if (typeof web3 !== ‘undefined’) {

브라우저에 web3 인스턴스가 미리 주입되어 있지 않았을 때 else문으로 가는겁니다. 강좌에서 설명했듯이 댑을 딱 실행했는데 내 Chrome에는 메타마스크 설치가 안되어있으면 else문으로 가는거에요.

더 간단히 말씀드려서 저 라인을 통해 너 지금 메타마스크 쓰고있어 안쓰고있어를 체크하는겁니다.

왜 체크하나? 이유는 web3를 인스턴스화할 때 provider 즉 공급자를 필요로 하기 때문입니다. 메타마스크가 설치되어있으면 메타마스크를 web3 공급자로 사용하는거구요.

만약 메타마스크 설치가 안되어있다면 else문으로가서 web3를 인스턴스화할 때 필요한 공급자를 내 로컬 노드로 (예: geth) 대신 쓰는겁니다. 메타마스크가 설치되어있다면 간편하게 끝낼 수 있는데 설치가 안되어있으면 어쨌거나 web3를 인스턴스화할 노드를 찾아야되서 else문을 저렇게 로컬 노드를 통해 정의해준겁니다.

Ropsten에 컨트랙 배포한거와는 관련이 없어요 :)

David Lee님의 프로필 이미지
David Lee

작성한 질문수

질문하기