반응형

전체 글 45

metamask, kaikas 서명 메시지 검증 로그인

오픈씨에 들어가보면 아래 이미지 처럼 서명 요청을 해서 로그인 하는걸 알 수 있다. 우리 웹앱에서도 백엔드가 존재하고 메타마스크나 카이카스로 로그인을 진행 하기 때문에 해당 기능을 차용 해 사용 하기로 했다. 먼저 데이터베이스에 인증 테이블을 만들고 백엔드에 서명 메시지를 생성하고 서명 메시지 생성 api를 만든다. 생성시에는 message, 확인 할 수 있는 고유 address( 공개키 ), replay attack을 방지 할 수 있는 random nonce값, 로그인 유효기간등을 설정해서 생성한다. 프론트에서 지갑 연결 요청을 보내면 해당 인증 생성 api로 요청이 들어가게 되고 메세지를 지갑 연결을 요청한 지갑에서 확인 할 수 있다. 서명을 하게 되면 해당 주소의 private key로 서명한 값을..

caver-js getLogs

지금 프로젝트에서 아이템 구매 구조가 트랜잭션 보내고 완료 응답이 오면 데이터베이스에 아이템이 들어오는 구조를 가지고 있다. 여기서 만약 구매 완료 됐는데 사용자의 환경 오류같은 이변 때문에 아이템 지급 api에 요청이 들어가지 않는 변수가 생기면 어떻게 할 것이가?에대한 문제 인식을 하여 일정 주기마다 우리 contract의 모든 transaction hash와 db에 저장된 hash를 비교해서 누락된 부분이 있으면 자동으로 아이템을 지급하는 기능을 만들기로 했다. caver-js를 이용한 rpc통신으로 특정 컨트랙트의 모든 log를 긁어 올수 있다는걸 알았고 getLogs함수를 사용 하기로 했다. await caver.rpc.klay.getLogs({ address: CONFIG.ITEM_CONTRA..

node-schedule

웹 블록체인 게임 프로젝트를 하면서 정해진 시간 마다 실행이 돼야 하는 경우가 굉장히 많아 node-schedule을 사용 하여 쉽게 구현하였다. 스케줄은 기본적으로 서버 시간으로 구동이 된다. 기본적으로 npm install node-schedule 으로 설치 하여 모듈을 가져와 사용 할 수 있다 기본적으로 위 포멧에 맞추어 시간을 설정 할 수 있다. 주기적으로 어떠한 시간에 이벤트를 발생 시킬때 아주 유용하게 사용 가능 하다.

카테고리 없음 2023.06.13

moment.js

웹 게임 프로젝트를 시작하면서 x시 x분에 정산, x시x분에 아이템 제공 등과 같은 기능을 구현 하기 위해 시간을 다룰 일이 많아졌다. js에서는 보통 시간에 대한 것을 new Date()로 다루지만 그보다 훨씬 더 편리하게 다룰 수 있도록 moment.js를 사용 하였다. // import moment from 'moment'; import moment from 'moment-timezone'; moment.tz.setDefault("Asia/Seoul"); const day = { date: () => { return moment().format("YYYY-MM-DD"); }, dateDot: () => { return moment().format("YYYY.MM.DD"); }, time: () =>..

slither - 솔리디티 분석 프레임워크

솔디티디 코드를 분석해서 취약점이나 에러 등 문제를 야기할 수 있는 코드를 잡아주는 slither이라는 프레임 워크를 알게 되어 사용 해 봤다. 우선 git 주소 https://github.com/crytic/slither로 접속해 git clone을 받아준다. pip3 install slither-analyzer 위 명령어를 입력해 slither-analyzer를 받아준다. 이후 난 js기반 npm을 사용 하기 때문에 cd/test/e2e/compilation/test_data/test_node_modules 경로로 들어간다. 만약 오픈제플린 라이브러리를 사용 한다면 npm install @opzeppelin/contracts 모듈을 다운 받아야 참조 해서 사용하는 오픈제플린 컨트랙트를 가져 올 수 있..

vue i18n 다국어 설정

한국뿐만 아니라 각국 유저들도 타겟층으로 잡고 있다 보니 한국어 버전 & 영어 버전으로 만들어야 하는 상황이 생겼다. 프론트에서 vue를 쓰고있어 vue i18n 모듈을 사용하여 구현 할 수 있었다. i18n 모듈을 가져와 객체를 생성해주고 locale.en.json, locale.kr.json 파일에 각각 영어 한국어를 입력하고 main.js에서 전역으로 사용하고 localStorage를 이용하여 언어 설정만 바꿔주면 쉽게 구현 할 수 있었다.

지갑주소 추가 디스코드 봇 & 지갑주소 구글 스프레드시트 자동

디스코드 봇을 만들어 /명령어 [지갑주소]를 입력하면 해당 지갑주소를 구글 스프레드시트에 자동으로 추가하는 기능을 구현해야했음. 필요 api : Google API, Discord API 전체 코드 const { Client, Intents, Collection } = require('discord.js'); const { token, spreadsheetId, serverId } = require('./walletConfig.json'); const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MEMBERS] }); const { google } = require..

redis 도입

현재 프로젝트에서 이미 mysql을 사용 하고 있지만 rds가 커져 db에 부담을 줄여주도록 기본정보라던지 한시간에 한번정도만 데이터 업데이트 되는 부분은 api결과를 redis에 저장, 유저들은 해당 데이터들은 redis에서 조회하여 기존 db의 부담을 줄여주기 위해 도입. 기존 mysql 연결하는거처럼 정보 HOST, PASSWORD .env 저장 Redis 클라이언트를 사용하여 Redis 데이터베이스에 액세스하는 함수와 객체를 정의 위에서 만들어 놓은 Redis모듈 가져와서 redisClient 객체 생성, 이 객체 사용하여 Redis DB에 연결하고 명령어 실행 가능. 좀 더 자세한 내용은 프로젝트에서 더 사용 해 보고 나중에 정리해야겠다...

반응형