주말에 일좀 있어서 개인적으로 볼일도 보고 월요일에는 서울을 갔다오느라 많은 작업은 하지는 못했습니다.
그래도 이제 대략적은 작업은 거의다 진행이 되었습니다.
일단 web3를 적용하는 부분을 제외하고는 DB적으로는 거의다 작성을 완료 하였습니다.
일단 구글 로그인을 지원하며 구글 로그인을 하게 되면 구글 계정에 고유의 address
와 privatekey
가 생성이 됩니다.
이러한 값을 일차적으로 DB에 저장을 해두어야 후에 해당 사용자가 기존에 있는 사용자인지를 확인 가능하기 떄문에
구글 로그인일 경우, 따로 로그인을 진행하였을 경우를 나누어서 useEffect
를 활용하여 각각 다른 처리를 해주었습니다.
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도 배포해주는 개념이기 떄문에
가스비를 사용자가 지불할 필요가 없다는 큰 장점이 있습니다.
Token컨트랙트 경우에는 저희가 네트워크 생태계를 구성하기 위해 필요한 Token을 minting해주는 mint
함수,
후에 NFT거래를 하게 되면 토큰 이동이 이루어 지기 떄문에 transfer
함수
부수적으로 뽑기 기능을 추가 할 것이기 떄문에 burn
이렇게 3가지 정도를 활용할 예정 입니다.
NFT부분에서도 불필요한 함수는 제외하고 사용할 것입니다.
주로 뽑기를 통해 나오는 아이템을 NFT화 해줄 mint
함수
특정 계정에 어떤 NFT가 존재하는지 확인해줄 getNFT_Address
이후 후에 NFT거래를 지원해줄 nftTransferFrom
일단 Token같은 경우에는 이더스캔 기준 ERC-20으로 분류가 되어 있습니다.
하지만 NFT같은 경우에는 저희가 metaData를 불러오지 않은것인가 문제는 잘 모르겠지만 ERC-721로 분류가 되어 있지 않습니다.
이러한 부분을 해결해볼 예정입니다.
@openzeppelin
을 뜯어 보면서 필요한 값을 가져오면 되지 않을까 싶네요그후 향후에는 랜덤한 값을 통해서 뽑기를 구현해볼 예정입니다.
팀원분중 한분이 랜덤 요소가 없다면 게임이 지루해질 것 같다는 의견을 주셨고 적극 수용하여 이러한 부분을 구현해볼 것 입니다.
그후 Character 솔리디티코드를 구성해볼 것 입니다.
많은 코드가 들어가지는 않겠지만 이러한 부분에서도 랜덤한 요소를 추가해볼 예정이며
크립토 좀비르 조금 참고하여 작성을 해볼 예정입니다.
감사합니다!