react NFT application 서사 1장

Poo·2021년 12월 15일

뒤지게 힘..

NFT를 보여주는 dApp 개발을 위한 리액트 뼈대를 설정해보자

먼저, 터미널에서 다음의 명령어를 입력해 프로젝트를 생성하고, 프로젝트 폴더를 VSCode에 연다

npx create-react-app web3-practice
code web3-practice

먼저 web3를 npm에서 설치해보자

cd web3-practice
npm install web3
//쭉 하다보면 오류가 뒤지게 많이 나온다. 나는 이렇게 해결했다.
npm install eth-lib
npm install web3-eth-accounts
npm install stream-browserify
npm install crypto-browserify
npm install assert
npm install stream-http
npm install os-browerify
npm audit fix --force

다했으면 vscode에 app.js를 들여다 보자
코드를 작성해볼까?

이더리움 객체 가져오기 부분!
EIP-1139를 통해 지갑 소프트웨어는 웹 페이지에 자바스크립트 객체 형태로 window.ethereum 객체를 제공한다고 배웠다. 이 window.ethereum은 공급자 객체이기 때문에 web3.js를 사용할 수 있다.

import './App.css'; //css 부터 불러와주고~
import Web3 from 'web3'; //web3 끌고오고
import React from "react" //react 불러오고~
import { useState, useEffect } from "react"; //우선 여기까지

//다음은 app 함수 부분 드가자
//공급자 객체 연결은 처음 한번만 하면 되기 때문에 useEffect()를 사용해 컴포넌트가 처음 마운트 되었을 때 web3 객체를 연결하도록 한다

function App() {
		const [web3, setWeb3] = useState();
    useEffect(() => {
        if (typeof window.ethereum !== "undefined") {
        	//window.ethereum이 있다면
            try {
                const web = new Web3(window.ethereum);  
                // 새로운 web3 객체를 만든다
                setWeb3(web);
            } catch (err) {
                console.log(err);
            }
        }
    }, []);
}//함수 알록달록하게 어떻게 설정함?..

지갑을 연결하자

지갑을 연결하려면 버튼을 눌러야지?
Connect to Metamask 버튼을 만들고 클릭하면 메타마스크 지갑을 연결하도록 해주자

//...
return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>

      <button
                className="metaConnect"
                onClick={() => {
                    connectWallet();
                }}
            >
                connect to MetaMask
            </button>
    </div>
  );
}

connectWallet()은 메타마스크로 부터 계정을 연결하고 계정 주소를 상태로 저장한다.

window.ethereum.request({method: 'eth_requestAccounts'}) 는 메타마스크 지갑과 연결된 계정 정보를 받는 JSON-RPC Call API 이다.

그리고 연결된 계정 주소를 화면에 출력도 해보자

//...
<button
                className="metaConnect"
                onClick={() => {
                    connectWallet();
                }}
            >
                connect to MetaMask
            </button>
            <div className="userInfo">주소: {account}</div>  
            // 연결된 계정 주소를 화면에 출력합니다

    </div>
  );
}

자 이렇게 하면 된다. 말은 쉽다. 탈모약은 하나씩 집에 구비해두는 걸 추천한다.

profile
죽을 때 까지 공부하다 죽을 인생, 로봇공학자에서 블록체인 개발자가 되기 까지

1개의 댓글

comment-user-thumbnail
2022년 6월 13일

탈모약 필수,,

답글 달기