반응형

1편에서 기본적인 설정을 통해 node.js를 이용한  IPFS에 파일 업로드를 해보았다.
이번엔 다운로드다.
이미 많은걸 해두었기에 다운로드는 더 쉽다.

일단 IPFS는 실행해둬야 한다.
윈도우용이든  CMD에서 ipfs daemon 명령어를 이용해서든

앞서 만들었던 d:\Project\NFT 폴더를 계속 이용할 것이다.
appdown.js란 파일을 만들고 그 안에 이렇게 타이핑 해보자

const IPFS = require("ipfs-api");

const ipfs = new IPFS({
    host: "127.0.0.1",
    port: 5001,
    protocol: "http"
});

const hash = "QmfHZXP......VHfHkuntm86xY1vg"; // 앞서 업로드 하고 받아낸 해시값

ipfs.files.get(hash, (err, files) => {
    if (err) {
        console.error("Error while downloading file:", err);
    } else {
        if (files && files.length > 0) {
            console.log("File download success! Result:", files[0].content.toString());
        } else {
            console.error("No files found for the given hash.");
        }
    }
});

주의할 점은 hash부분이다.
업로드 하고 받아낸 해시값을 입력해야 한다.

저장 후 node appdown.js를 실행하면

업로드시 사용한 txt파일 내용을 확인할 수 있다.

반응형

'NFT' 카테고리의 다른 글

NFT 개발하기 - 1편 IPFS에 node.js로 파일 업로드하기  (1) 2024.01.18
Posted by Hippalus
,

반응형

NFT가 뭐고 왜 해야 하고 그딴 시덥잖은 이야긴 다른 글을 참조하시고 바로 실전으로 들어간다.
묻지도 따지지도 말고 일단 IPFS에 파일 올리는것부터 해야 하는데 IPFS를 이용하는 이유는 NFT는 그림, 음원, 비디오 그딴건데 파일을 안 올리면 어쩌겠는가?
그런데 이걸 한 개인의 서버에 올리면?
서버 다운되거나 해킹되면?
그러니 분산 파일 시스템인 IPFS에 올리는거

궁금하면 더보기~

더보기

NFT(Non-Fungible Token)는 고유한 디지털 자산을 나타내는 토큰으로, 블록체인 기술을 기반으로 합니다. IPFS(InterPlanetary File System)는 분산 파일 시스템으로, 파일을 분산된 네트워크에 저장하고 검색할 수 있게 해줍니다. NFT를 만들 때 IPFS를 이용하는 이유는 여러 가지가 있습니다:

분산 저장: IPFS는 파일을 여러 노드에 분산하여 저장하므로 중앙 서버에 의존하지 않습니다. 이는 단일 지점의 장애나 특정 서버의 다운으로 인한 데이터 손실을 방지할 수 있습니다.

내구성과 신뢰성: IPFS는 데이터를 여러 노드에 복제하여 내구성과 신뢰성을 높입니다. 파일이 한 노드에서 손상되거나 사용 불가능해지더라도 여러 다른 노드에서 해당 파일을 찾아 사용할 수 있습니다.

비용 효율성: IPFS를 사용하면 파일을 저장하고 검색하는 데 필요한 비용을 최적화할 수 있습니다. 중앙화된 서버를 운영하고 유지하는 데 필요한 비용을 줄일 수 있습니다.

방대한 용량과 확장성: IPFS는 대용량 파일을 효과적으로 처리할 수 있으며, 필요에 따라 확장될 수 있습니다. 블록체인이나 중앙 서버에서 처리하기 어려운 큰 용량의 미디어 파일을 다룰 수 있습니다.

안전성과 보안: IPFS는 데이터를 암호화하고 해시값을 통해 무결성을 검증하여 안전성과 보안을 강화합니다. 블록체인과 결합하여 높은 수준의 보안을 제공합니다.

이러한 이유로, NFT를 만들 때 IPFS를 이용하여 디지털 자산을 저장하고 관리하는 것이 일반적으로 권장됩니다. 이를 통해 더 분산화되고 안전한 환경에서 NFT를 다룰 수 있습니다.

IPFS를 다운받기 위해 공홈에 가보면 
https://docs.ipfs.tech/install/ipfs-desktop/#windows

요런 다운로드 페이지 안내 문구를 발견할 수 있다. 
눌러보면 아래 링크로 이동되는데
https://github.com/ipfs/ipfs-desktop/releases
웃기는건 window용 exe가 없다.

Show all 17 assets를 눌러야 아래처럼 윈도우용 IPFS 인스톨 파일을 확인할 수 있다. -_-

다운받고 실행하면 설치할 위치 선택해주고

설치완료되면 실행 가능하다.

기본 설치 경로로 설치하면 IPFS.exe파일은 아래 경로에 들어가 있다.
C:\Program Files\IPFS Desktop\resources\app.asar.unpacked\node_modules\kubo\kubo

이게 왜 중요하냐면
윈도우용은 설치 후 실행되는 프로그램이 daemon의 일을 맡아 하지만 어떤 책에 보면 이런 설명 조차 없이 daemon을 실행하라고만 해서 한참을 헤매게 만들기 때문이다.

설치 후 IPFS를 실행해보면 저런 화면이 나오는데 상태와 파일 등등 좌측 메뉴를 눌러보면 뭐 대충 잘 동작하는것 같다.

만약 웹브라우저로 확인해보고 싶다면
http://127.0.0.1:5001/webui
이렇게 해도 동일한 화면 확인이 가능하다.

별건으로 IPFS를 어디서든 동작하게 하려면 환경변수에 IPFS를 등록해야 하는데

아까 설치한 경로를 등록해주면 된다.
C:\Program Files\IPFS Desktop\resources\app.asar.unpacked\node_modules\kubo\kubo

그리고 실행된 IPFS Desktop은 트레이 아이콘으로 동작중인걸 확인할 수 있다.

눌러보면 재시작, 중지 등 추가 작업이 가능하다.

여기까지 IPFS를 설치하였다면 이제 node.js로 IPFS에 파일 업로드를 해보겠다.
node와 npm설치하는 방법은 다른 구글링하여 블로그를 참조하기 바란다.
엄청 쉽다. (https://nodejs.org/ko 여기서 다운받고 설치하면 그만이다.)

IPFS를 설치하면 포트가 5001로 동작하고 파일 업로드시 필요한 모듈은 ipfs-api, fs, bl 정도이다.
일단 프로젝트의 위치를 지정하겠다.
나는 D:\Project\NFT로 지정하였다.

이제 cmd를 눌러 D:\로 이동 후 CD Project, CD NFT를 입력하여 위치를 이동시키자.
모듈 설치하자.  
npm i ipfs-api
npm i fs
npm i bl
각각의 모듈이 무슨 일을 하는지는 chatgpt에게 물어보라. ㅎㅎ

vscode를 실행하여 아래 코드를 타이핑 후 app.js로 저장하자.
당연히 위치는 D:\Project\NFT다.

const IPFS = require("ipfs-api");
const fs = require("fs");
const bl = require('bl'); // 'bl' 모듈을 추가


const ipfs = new IPFS({
    host: "127.0.0.1",
    port: 5001,
    protocol: "http"
});

const file = fs.readFileSync("./test.txt");
const fileBuffer = bl(new Buffer.from(file)); // 'bl' 모듈로 Buffer를 래핑

ipfs.files.add(fileBuffer, (err, result) => {
    if (err) {
        console.error(err);
    } else {
        console.log("File add success! result :", result[0].hash);
    }
});

이제 node로 만든 app.js를 아래처럼 실행하면 성공 메세지와 함께 암호문자열을 확인 가능할것이다.
참고로 업로드할 파일인 test.txt파일은 D:\Project\NFT에 test.txt 파일을 미리 만들어 두자

result 자체를 찍어보면 다음과 같이 나온다.
  {
    path: '******NVAiMNRcGu6x1AwQ4c5SBnJMH',
    hash: '******NVAiMNRcGu6x1AwQ4c5SBnJMH',
    size: 6
  }
path는 경로 cid는 컨텐츠 식별자 size는 파일 용량이다. path와 cid가 동일함을 알 수 있다.

만약 아래처럼 오류가 난다면 IPFS 프로그램이 중지되었기 때문이다.
IPFS를 실행해둔 상태에서 하길 바란다.
(만약 난 좀 있어보이고 싶다란 사람이라면 cmd창에서 ipfs daemon이라 실행하면 동일한 효과를 볼 수 있다.)

한가지 주의해야 할 점은 이후 node.js로 IPFS로 파일을 업로드 시켜볼 예정인데 이 파일 메뉴에 내가 올린 파일이 바로 나오지 않는다란 점이다.

아까 node.js로 업로드 후 성공 메세지로 받았던 문자열을 Browse에 입력하고 검색하면 확인이 가능하다.
File add success! result : Q *************....H

이렇게 잘 나온다.

만약 빈 파일을 업로드했다면 이렇게 나오니 당황하지 말자.

반응형

'NFT' 카테고리의 다른 글

NFT 개발하기 - 2편 IPFS에 node.js로 파일 다운로드하기  (0) 2024.01.19
Posted by Hippalus
,