Project2 회고

독수리박박·2023년 7월 14일
0

project

목록 보기
2/3

PLOHUB contract-server / contract / daemon

* github
	https://github.com/codestates-beb/beb-09-PloHub
* 팀 노션
	https://www.notion.so/Project-2-PloHub-BEB-09-Block-Panther-c8831e75e3ec457794d0b72bab9b4672
  • contract-server : main-server에서 넘어오는 요청들을 컨트랙트, IPFS, mysql을 이용해 처리 후 다시 main-server에 결과 반환
  • contract : 스마트 컨트랙트 작성, 관리 및 배포
  • daemon : 트랜잭션 추적 및 데이터 베이스에 저장

목표

이번 프로젝트 주제는 블록체인 기반 인센티브 커뮤니티를 만드는 것이 었습니다.
저희 팀은 플로깅(조깅을 하며 쓰래기를 줍는 행위)이란 주제로 커뮤니티를 만들기로 했습니다.
팀원분들이 다행히 저의 의견을 존중해 주셨고 괜찮은 아이디어라고 해주셔서 감사했습니다.

팀 빌딩

저희 팀은 3명으로 이루어져 한명이 모자랐지만 저는 그런거 딱히 신경쓰는 편도 아니고 특히 팀원 두 분 모두 페어활동 중 저에게 도움을 많이 주시고 각자 분야에서 정말 잘하시는 분들이어서 솔직히 조금 좋았습니다. 민폐가 안되려고 첫 프로젝트 보다 좀 더 열심히 진행했던 것 같습니다.

역할

저는 스마트 컨트랙트, contract-server, daemon을 맡았습니다. 팀장님이 제가 잘 할 수 있는 부분을 맡겨 주셨고 daemon이란 개념을 처음 알았지만 여러번 개념을 읽어보고 여러 사례를 찾아보니 구현할 수 있을거 같았습니다.

가보자잇!!!!!


💻 Stack 💻

Solidity Node.js express Ganache web3.js mysql pinata truffle


아키텍쳐, 구성요소

사실 client와 직접적으로 소통하지 않아서 조금은 편한 부분도 있었습니다. 그리고 팀원분들이 초반에 틀 잡는 부분을 도와주셔서 수월하게 계획하고 빠르게 진행했습니다.

  • contract-server : main-server에서 받은 정보들로 여러 블록체인 관련 기능 처리 후 main-server에 반환
  • Ganache : Private network를 구축해서 모든 트랜잭션 및 블록 저장, 100ETH를 보유한 지갑 10개로 충분한 테스트 및 이더, 토큰 지급 가능
  • userWallet : 사용자 지갑으로 회원가입 시 자동으로 각 사용자에게 지갑을 생성 후 지급합니다
  • serverWallet : 2개 존재, 1개는 ethFaucet용 지갑, 1개는 서버지갑(토큰 지급 및 각종 트랜잭션 전송)
  • mySql : contract-server 데이터 베이스, Wallet,NFT 정보 저장
  • deployedContract : truffle로 배포 후 abi 코드로 컨트랙트 객체 생성
  • Pinata : NFT metadata 저장 및 tokenURI 반환
  • Daemon : 트랜잭션 추적 및 저장

구현 기능

1. createWallet : main-server에서 중복 확인 후 회원가입 정보를 넘겨주면 사용자 지갑 생성, ethFaucet, 회원가입 보상 토큰 지급


2. reward : 게시물 작성, 일일 로그인 보상, 댓글 작성과 같은 커뮤니티 활동에 대한 보상을 지급(reward_type 0=회원가입 1=로그인 보상 2=게시물 작성 보상)


3. mintNFT : 활동 및 보상으로 받은 토큰들로 자신만의 NFT를 발행 가능. 커뮤니티 취지상 활동사진, 깨끗한 거리, 환경과 관련된 내용의 NFT 발행 권장, 하지만 이와 무관한 내용이여도 상관 없음


4. nftDetail : 선택한 nft(token_id)의 상세정보를 main-server에 돌려준다


5. userNFT : 사용자가 민팅하거나 보유한 NFT정보를 반환한다


6. tokenTransfer : user간 토큰 교환이 가능하다


7. tokenSwap : 보유한 토큰을 ETH로 교환할 수 있다.(단, ETH는 토큰으로 교환 불가능하다 왜냐하면 커뮤니티 활동 더욱 장려하기 위해 토큰은 오로지 커뮤니티 활동으로만 얻을 수 있다) 1Token === 0.001ETH

8. NFTlist : 발행되어있는 전체 NFT를 가져온다


Daemon

실행 순서
1. 트랜잭션이 생성된 순간 해당 트랜잭션을 web3객체를 이용해 가져옴
2. 해당 트랜잭션의 정보와 status:pending, type: 거래 내용(eth, token, nft)를 데이터 베이스에 저장
3. 데몬 실행 시 status가 pending인것만 가져온 후 type에 맞는 테이블에 저장
4. 분류 완료한 트랜잭션 정보의 status를 complete으로 업데이트(이미 추적 및 저장한 트랜잭션은 다시 추적 및 저장할 필요 없기 때문)

  • 위 과정을 pm2, node-cron을 사용해서 10초 마다 백그라운드에서 자동 실행
  • watch 옵션으로 해당 과정들을 모니터링하며 문제 발생 시 해결

트랜잭션 발생 시 추적 후 데이터 베이스 저장


데몬 실행시 데이터 베이스에서 status:pending인 데이터들을 추적 후 type에 맞는 테이블에 저장


저장된 모습



처음 경험한 부분들

  • Docker

사실 이 부분은 팀장님께 감사하다. 제가 여러가지 부분들을 시행착오를 거치며 진행하는 동안 팀원들을 위해서 Docker 환경설정, 빌드 및 여러가지 기능들을 혼자 설정해주고 설명도 해주셨습니다. 그래서 데이터 베이스나 기타 여러 부분들을 버전 및 환경설정을 신경 안쓰고 쉽게 진행했습니다.

  • makefile

    요로쿠롬 루트 폴더에 명령어를 단축시켜서 사용하고 싶은 명령들을 모아서 간단하게 실행 할 수 있습니다. 사실 그나마 간단하지만 이번 프로젝트가 아니고 혼자 공부했다면 내가 과연 이걸 해봤을까라는 생각을 해봤습니다.
    분명 안했습니다.
    그래서 참 다행입니다.
    우하하!!

  • Ganache Private Blockchain network
    사실 저는 프로젝트 개요를 한번 읽어보고 그냥 편하게 전에 사용했던 테스트넷을 이용해서 컨트랙트를 배포하고 작업을 진행하려 했습니다. 하지만 팀장님께서 조금 다른 관점으로 보고 테스트넷 보다는 프라이빗 네트워크를 구축하여 진행하자 했습니다. 그리고 도커를 사용해 모두가 동일한 환경에서 블록체인 네트워크를 사용할 수 있게 세팅 후 작업을 진행했습니다.
    사실 저는 뭔가 텍스트 자료가 있으면 그것을 약간 등한시 한 채로 실습 위주의 학습 방법을 진행해왔습니다. 물론 실습이나 직접 부딪히며 경험하는 것이 좋은 학습법이나 조금 더 천천히 여유를 가지고 기획 및 준비 부분을 더 천천히 준비하고 기본이 중요하다는 것을 또또또또또 느꼈습니다.

다음에 적용하고 싶은 것들

  • truffle을 사용했으니 다시 foundry 사용해보기
  • winston 모듈을 사용해서 로그 찍기
  • DNFT 사용하기(oracle chainlink 사용)

후기

비록 3명이었지만 너무 좋은 팀원분들을 만나서 계획했던 목표들을 다 달성했다. 팀장님이 잘 이끌어주시고 중심을 잡아주시고 프론트 부분 팀원 분께서는 혼자서 묵묵히 자기 할 일을 빠르게 해주셨다. 솔직히 2주란 기간동안 나는 감정 상하는 일 하나도 없이 오히려 너무 재밌었다. 새로운 걸 공부하고 받아들이는 건 이미 4개월동안 매일매일 경험해서 익숙하다. 팀장님이 뭘 고치라하면 할 일이 생겨서 기뻤다. 너무너무(?) 들어와서 발표도 자원해서 많이 해보고 뭔가 할 일이 생기면 먼저 자원해서 하는 습관이 들어서 앞으로는 좀 더 적극적으로 무엇인가에 임해야겠다고 생각이 든다. 마지막 프로젝트는 더 열심히해서 북산엔딩이 안나도록 정신 똑띠 차리고 해야겠다. 난 초등학교 때 부터 북산에서 송태섭이 너무 좋다. 어디든 그냥 들이박고보는 그 성격이 너무 좋다. 다음 프로젝트도 열심히 들이박아야겠다.

다음 프로젝트도 너무 좋은 팀원 분들과 같이 하게 되었다. 서태웅 강백호가 입학했을 때 채치수는 이런 심정이었을까??

2개의 댓글

comment-user-thumbnail
2023년 7월 19일

멋지다 박상현.

답글 달기
comment-user-thumbnail
2023년 7월 19일

멋지다 박상현.

답글 달기