Block_Chain_Project - 3 [텍스트 P2E게임]

Lumi·2022년 1월 11일
0

Block_Chain_Project

목록 보기
15/30
post-thumbnail

🔥 개요

주말에 일좀 있어서 개인적으로 볼일도 보고 월요일에는 서울을 갔다오느라 많은 작업은 하지는 못했습니다.

그래도 이제 대략적은 작업은 거의다 진행이 되었습니다.

일단 web3를 적용하는 부분을 제외하고는 DB적으로는 거의다 작성을 완료 하였습니다.

  • 하지만 아직 front부분은 좀더 수정을 해야할 필요가 있습니다 ㅠㅠ

일단 구글 로그인을 지원하며 구글 로그인을 하게 되면 구글 계정에 고유의 addressprivatekey가 생성이 됩니다.

이러한 값을 일차적으로 DB에 저장을 해두어야 후에 해당 사용자가 기존에 있는 사용자인지를 확인 가능하기 떄문에

구글 로그인일 경우, 따로 로그인을 진행하였을 경우를 나누어서 useEffect를 활용하여 각각 다른 처리를 해주었습니다.

  • 이 부분에서 형식적으로 사용에 제약이 없는 mongooseDB가 빛을 발하였습니다.. ㅎㅎ
export const vefiry_google = async (req, res) => {
  const ch = await UserDB.findOne({ address: req.body.address });
  if (ch === null) {
    const User = await new UserDB({ address: req.body.address });
    User.save();

    // 컨트랙트를 통해서 캐릭터를 만들어 주어야함
    res.status(200).send({ message: "new Character", data: User });
  } else {
    res.status(200).send({ message: "already User", data: ch });
  }
};
  • 스펠링이 틀렸지만.. 의도한것 입니다!!!

일단 기본적으로 구글 로그인을 통해서 만들어지는 address값이 DB에 저장이 되어 있는지를 확인하고

만약 없다면 새로운 값을 만들어 줍니다.

반대로 있다면 해당 값을 응답하게 됩니다.

그후 저는 useState를 활용하여 특정 변수에 해당 값을 설정하였습니다.

  • 이 값은 일반적인 로그인, 구글 로그인 두 부분을 모두 처리하고 있습니다.

이후 DB에 저장되어 있는 값을 통해서 시스템이 구성이 되게 됩니다.

🔥 NFT.sol, Token.sol

해당 컨트랙트에는 불필요한 함수들도 들어있기 떄문에 저희는 사용할 함수를 일차적으로 선정했어야 합니다.

일단 서버에서 사용자들에게 토큰을 배포해주고, NFT도 배포해주는 개념이기 떄문에

가스비를 사용자가 지불할 필요가 없다는 큰 장점이 있습니다.

  • 물론 서버가 그 모든 가스비를 지불해야 하는 단점도 있습니다.

Token컨트랙트 경우에는 저희가 네트워크 생태계를 구성하기 위해 필요한 Token을 minting해주는 mint함수,

후에 NFT거래를 하게 되면 토큰 이동이 이루어 지기 떄문에 transfer함수

부수적으로 뽑기 기능을 추가 할 것이기 떄문에 burn

이렇게 3가지 정도를 활용할 예정 입니다.

  • 이 3가지만 활용하여도 토큰 거래가 가능한 이유는 서버에서 모든 가스비를 대주기 떄문입니다!!
  • 만약 이런 아키텍처가 아니라면 저희는 approve 등등을 활용해야 할 것 입니다.

NFT부분에서도 불필요한 함수는 제외하고 사용할 것입니다.

주로 뽑기를 통해 나오는 아이템을 NFT화 해줄 mint함수

특정 계정에 어떤 NFT가 존재하는지 확인해줄 getNFT_Address

  • 이 함수는 제가 만들어 냈습니다

이후 후에 NFT거래를 지원해줄 nftTransferFrom

  • 이 부분도 서버에서 모두 지원을 해준다는 조건이 있기 떄문에 일부 수정을 하여 간편하게 사용할 것 입니다.

🔥 문제점 및 향후 진행할 방향

일단 Token같은 경우에는 이더스캔 기준 ERC-20으로 분류가 되어 있습니다.

하지만 NFT같은 경우에는 저희가 metaData를 불러오지 않은것인가 문제는 잘 모르겠지만 ERC-721로 분류가 되어 있지 않습니다.

이러한 부분을 해결해볼 예정입니다.

  • 아마 @openzeppelin을 뜯어 보면서 필요한 값을 가져오면 되지 않을까 싶네요

그후 향후에는 랜덤한 값을 통해서 뽑기를 구현해볼 예정입니다.

팀원분중 한분이 랜덤 요소가 없다면 게임이 지루해질 것 같다는 의견을 주셨고 적극 수용하여 이러한 부분을 구현해볼 것 입니다.

  • 의견을 내신 팀원분이 현재 작성중이십니다.

그후 Character 솔리디티코드를 구성해볼 것 입니다.

많은 코드가 들어가지는 않겠지만 이러한 부분에서도 랜덤한 요소를 추가해볼 예정이며

크립토 좀비르 조금 참고하여 작성을 해볼 예정입니다.

감사합니다!

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글