NFT dAPP 개발 기록 - 개념편

냥린이·2022년 2월 7일
0

블록체인

목록 보기
2/2

(1) 마켓 플레이스

opensea api

NFT API Overview

  • 마켓에 등록된 nft를 asset 단위로 가져오기
  • 마켓에 등록된 nft를 collection 단위로 가져오기
  • 주로 fetch 기능을 제공 (mint 안 됨)

opensea sdk

https://github.com/ProjectOpenSea/opensea-js

  • api의 모든 기능 커버
  • 밸런스 체크, 주문, 경매, 크라우드과 같은 거래 기능 제공 (mint 안 됨)

(2) 블록체인 써드파티 = Provider

💡 프로바이더를 사용하면 이더 노드를 컴퓨터에 직접 구현하지 않아도 됨, 즉 블록체인 네트워크와 통신을 대신 하는 일종의 서버처럼 작동하며, 사용자에게 api를 제공해서 dapp 개발을 쉽게 도와주는 역할

Alchemy

  • 유료 버전은 월 48 달러
  • address notify (alert) 가능
const url = "https://eth-ropsten.alchemyapi.io/v2/d8CAFhdFj2MZSdPiCmoYOic-_TqW6Oo5";

// Using web3js
const web3 = new Web3(url);

// Using ethers.js
const provider =
  new ethers.providers.JsonRpcProvider(url);
  • ERC721 가이드만 있음

Infura

  • 유료 버전은 월 255달러
  • address notify (alert) 가능
const provider = typeof window.web3 !== 'undefined'
        // @ts-ignore
        ? window.web3.currentProvider
        // @ts-ignore
        : new Web3.providers.HttpProvider('https://mainnet.infura.io');

Moralis

  • native, account, nft, defi에 대한 fetch와 post api를 제공함
  • alert는 제공하지 않음
  • 민팅 api 제공 How to Bulk Mint NFTs - Batch Minting Guide " Moralis - The Ultimate Web3 Development Platform
  • 로컬 파일을 ipfs에 등록해주는 api 제공
    let fs = require("fs");
    let axios = require("axios");
    
    let ipfsArray = [];
    let promises = [];
    
    for (let i = 0; i < 100; i++) {
        let paddedHex = ("0000000000000000000000000000000000000000000000000000000000000000" + i.toString(16)).substr("-64");
        
        promises.push(new Promise( (res, rej) => {
            fs.readFile(`${__dirname}/export/${paddedHex}.png`, (err, data) => {
                if(err) rej();
                ipfsArray.push({
                    path: `images/${paddedHex}.png`,
                    content: data.toString("base64")
                })
                res();
            })
        }))
    }
    Promise.all(promises).then( () => {
        axios.post("https://deep-index.moralis.io/api/v2/ipfs/uploadFolder", 
            ipfsArray,
            {
                headers: {
                    "X-API-KEY": '',
                    "Content-Type": "application/json",
                    "accept": "application/json"
                }
            }
        ).then( (res) => {
            console.log(res.data);
        })
        .catch ( (error) => {
            console.log(error)
        })
    })
  • ERC1155 가이드 있음

(3) Signer

Metamask

  • wallet과 balance, activity를 크롬 익스텐션으로 제공
  • web3.js에서 계정 로그인 및 서명을 구현하기 위해 가장 많이 사용하는 virtual wallet
    mehtod: 'eth_requestAccounts'
  • 메타마스크를 로컬호스트로 연결할 경우 스마트 컨트랙트 생성 에러가 난다는 이슈가 있음
  • NFT 토큰 추가를 지원하지만 ERC1155는 아직 지원 안 함

(4) 솔리디티 컴파일러

서드파티를 이용하지 않고 컴퓨터에 직접 노드를 구축하면 솔리디티 컴파일도 직접 해야함

remix ide

  • 웹 브라우저에서 사용 가능한 솔리디티 컴파일러
  • 솔리디티 버전 선택 가능
  • 여기서 직접 nft를 민팅하는 것도 가능 (메인넷에 deploy 가능, injected web3 로 환경 세팅)
  • web3 provide를 로컬로 설정할 수 있음 Deploy & Run - Remix - Ethereum IDE 1 documentation

remix-project

  • 로컬에서 돌릴 수 있는 솔리디티 컴파일러
$ git clone https://github.com/ethereum/remix-project.git

(5) 솔리디티 라이브러리

openzepplin

OpenZeppelin | Contracts

  • 솔리디티 코드 취약점에 의한 리스크를 줄여주기 위한 라이브러리
// contracts/ExampleToken.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/
ERC20.sol";

(6) 스토리지

IPFS 프로토콜

  • 분산형 파일 시스템 (P2P와 유사)
  • immutable하므로 변경 불가
  • 로컬 스토리지에 저장하면 손실 위험이 있기 때문에 분산형 파일 시스템에 업로드하는 것
  • 파일코인을 통해 유지되는 블록체인이므로, 채굴자들은 코인으로 보상 받음 (대표적인 코인: 파일코인, 시아코인, 스토리지)

여러가지 조합

가장 로컬의 부하가 적은 조합

  • provider + ipfs + (local storage)
  • alchemy는 디플로이를 스크립트로 하고 moralis는 remix-ide에서 직접 디플로이 해야함
  • alchemy는 erc721만 제공하고 moralis는 erc1155의 각 아이템에 이미지를 매핑하는 스크립트를 제공
💡 moralis의 fileupload api와 hardhat deploy.js 실행 스크립트를 조합하는 게 가장 좋아보임 (더 좋은 방안은 서치 필요...)

가장 로컬의 부하가 심한 조합

  • node (약 300기가) + solidity compiler + local storage
  • geth 같은 이더리움 실행 플랫폼으로 직접 노드를 실행
  • remix-project로 컴파일 및 deploy
profile
홀로서기 기록장

0개의 댓글