Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 토큰노믹스
- 옵저버패턴
- 팩토리패턴
- 회로차단
- 디자인 패턴
- 부트캠프
- 멀티시그
- github
- 투표
- git commit
- 재진입
- 트러블슈팅
- 팀 프로젝트
- 스테이트머신패턴
- 프록시패턴
- 웹툰
- github 에러
- solidity
- 코드스테이츠
- git add
- RBAC
- 솔리디티
- 업그레이더블 컨트랙트
- 코드리뷰
- 싱글톤패턴
- 블록체인
- 배팅
- 일시정지
- 인센티브 기반 커뮤니티
Archives
- Today
- Total
보다 더 생생한 기록
[TS][공부 마라톤] TS + NestJS + TypeORM + MariaDB + 업그레이더블 컨트랙트 본문
JavaScript[TS]
[TS][공부 마라톤] TS + NestJS + TypeORM + MariaDB + 업그레이더블 컨트랙트
viviviviviid 2024. 6. 23. 15:18
직전에 작성한 업그레이더블 컨트랙트와
이번에 새로 학습한 TS, NestJS, TypeORM로 구축한 서버와 연결하는
10일 챌린지 프로젝트를 진행했습니다. 72번째 포스팅 글에서 이어집니다.
GITHUB
https://github.com/viviviviviid/ts-nest-upgradable-challenge/blob/main/README.md
챌린지 프로젝트 개요
- 학습 내용 : TypeScript, Nest.js, TypeORM
- 학습 기간 : 1개월
- 챌린지 목표 : 학습한 내용을 직전에 구축한 업그레이더블 컨트랙트에 연결하여 실전에 적용하는 것을 목표로 한다.
- 챌린지 기간 : 7일 [컨트랙트 구축 및 하드햇 테스트 : 3일] [서버 구축 및 연결 4일]
- 챌린지 후기 : 자주 사용하는 GO언어처럼 강타입으로 바뀌니 확실히 타입에러가 현저히 줄어들어 너무 편리하고 마음이 편안하다.
기술 스택
- Language : Javascript(TypeScript), Solidity
- Backend : Nest.js, Node.js, TypeORM, ethers
- Database : MariaDB
- Blockchain : Solidity, Hardhat, Upgradable Contract(프록시 패턴), ERC-20, 721
프로젝트 세부 내용
아래 기능들은 전부 CRUD를 기반으로 API를 구축해 놓은 상태이고, 글 하단의 API 명세서를 확인하시면 됩니다.
- NFT 테이블에 추후 민팅하고싶은 NFT의 정보들을 저장한다.
- 1번에서 저장한 정보들을 DB에서 조회하고, 보유한 ERC 20 토큰을 일정량 지불 후, 조회한 정보를 기반으로 NFT를 민팅한다.
- 민팅을 위한 ERC 20 토큰 지불비용은 로직 컨트랙트의 함수를 DelegateCall로 호출해 변경할 수 있다.
- 현재, 로직컨트랙트의 토큰 지불비용 변경은 난수 생성을 통해 이뤄지고 있지만, 추후 로직을 변경하고 싶다면 새롭게 컨트랙트를 배포한 후, 본 컨트랙트인 프록시 컨트랙트에 연결만하면 컨트랙트의 업그레이드가 이뤄질 수 있다.
업그레이더블 컨트랙트 구조
아래 다이어그램은 프록시 패턴의 구조를 시각적으로 나타낸 것이다.
- User: 프록시 컨트랙트를 호출하는 사용자.
- Owner: 프록시 컨트랙트를 업그레이드할 수 있는 권한을 가진 관리자.
- Proxy: 로직 컨트랙트를 대리하여 함수를 실행.
또한 연결된 로직 컨트랙트를 변경할 수 있는 함수를 가짐 (즉, 로직 변경 업그레이드 가능) - Logic: 실제 로직을 포함한 컨트랙트. (민팅 비용을 변경할 수 있는 함수를 가짐)
데이터베이스 구조
API 명세서
하드햇 컨트랙트 테스트
'JavaScript[TS]' 카테고리의 다른 글
[TS][공부 마라톤] 타입스크립트 학습 정리 (0) | 2024.06.23 |
---|---|
[JS] [블록체인] [코드리뷰] DID를 활용한 의료기록관리 - (上) (0) | 2023.12.13 |
[JS] node.js 클린 코드 가이드라인 (0) | 2023.08.31 |
[JS] 동적 import (0) | 2023.08.22 |
[JS] [블록체인] [코드리뷰] DID를 활용한 의료기록관리 - (1) (0) | 2023.08.22 |