Roasis는 XRPL 기반 초저비용·고속 미술품 분할투자 플랫폼으로, 신진 작가와 투자자에게 투명한 소유권과 공정한 수익 기회를 제공합니다
- 아트워크 등록 및 관리
- 아티스트 등록 및 프로필 관리
- 갤러리 운영 및 아티스트 초대
- 사용자 대시보드 (General/Gallery)
- 지갑 연결 및 인증
- NFT 구매 및 판매
a. 사용 목적
- 여러 개의 NFTokenCreateOffer를 한 번에 제출해 RPC 왕복/시퀀스 관리 비용 절감 및 처리량 증가
b. 처리 전략
- 오퍼 트랜잭션을 7개 단위 청크로 분할.
- 청크가 1개면 단건 제출(→ offer_id 추출 가능).
- 청크가 2개 이상이면 Batch로 제출(→ 개별 offer_id는 추출 어려움, batch_hash만 저장).
c. 관련 코드
BATCH_SIZE = 7
def submit_offers_in_batches(client, wallet, classic, offer_txs):
...
else:
# 배치 제출
batch_tx = Batch(
account=classic,
raw_transactions=chunk,
flags=65536,
)
batch_autofilled = autofill(batch_tx, client)
batch_signed = sign(batch_autofilled, wallet)
resp = submit_and_wait(batch_signed, client)
batch_hash = resp.result.get("hash")a. 사용 목적
- XRPL에 Permissioned Domain을 생성해, 특정 Credential(type + issuer) 를 가진 주체만 도메인 내 오브젝트에 접근/상호작용 가능하게 설정.
b. 처리 전략
- Credential 생성 : credential_type = "ROASIS_GALLERY" 를 HEX(대문자)로 인코딩 / issuer = 서비스(플랫폼) 지갑 주소
- PermissionedDomainSet 트랜잭션 구성 : account = 서비스 지갑 / accepted_credentials = 위 Credential 1개 이상
- submit_and_wait 로 전송 및 검증
- 성공 시 트랜잭션 해시 및 domain_id 추출(메타에서 CreatedNode 등 파싱) 후 반환
c. 관련 코드
def create_domain(self, domain_name: str) -> str | None:
...
# Credential 구성
cred_type_hex = "ROASIS_GALLERY".encode("utf-8").hex().upper()
credential = Credential(
credential_type=cred_type_hex,
issuer=self.service_wallet.address,
)
# PermissionedDomainSet 트랜잭션 생성
domain_tx = PermissionedDomainSet(
account=self.service_wallet.address,
accepted_credentials=[credential],
)- 주요 기능 시연 영상
-
결제 시연 https://drive.google.com/file/d/1a_CWLzZfMno7vvlAlpNVmjhmzL-dYg2-/view?usp=sharing
-
작가 가입 및 작품 등록 https://drive.google.com/file/d/1WLRIG5huAQSXHTxk72BrXSWjrWVIVQTt/view?usp=sharing
-
갤러리 가입 및 도메인 생성 https://drive.google.com/file/d/1YRULZJybsWTuPpyTL-SRBf-iH-Rim-G8/view?usp=sharing
-
갤러리 작가 초대 https://drive.google.com/file/d/1UdkibdrqBffz_ne4MMbjgbfdjgKiz18c/view?usp=sharing
- 프로젝트 설명 데모 영상(오디오 포함)
admin : rwTxnsm6jhKXXcqfovncGstfWFbPLS9g4W
1. 사용 스택
- Next.js + TypeScript
- Tailwind CSS
- Zustand
- Magic UI
- XRP Wallet Integration
2. 프로젝트 구조
roasis-front/
├── app/ # Next.js App Router
│ ├── artists/ # 아티스트 관련 페이지
│ ├── artworks/ # 아트워크 관련 페이지
│ ├── dashboard/ # 대시보드 페이지
│ ├── galleries/ # 갤러리 관련 페이지
│ └── marketplace/ # 마켓플레이스 페이지
├── src/
│ ├── components/ # 재사용 가능한 컴포넌트
│ │ ├── artwork/ # 아트워크 관련 컴포넌트
│ │ ├── auth/ # 인증 관련 컴포넌트
│ │ ├── dashboard/ # 대시보드 컴포넌트
│ │ ├── ui/ # UI 컴포넌트
│ │ └── wallet/ # 지갑 연결 컴포넌트
│ ├── api/ # API 통신 모듈
│ ├── hooks/ # 커스텀 훅
│ ├── stores/ # 상태 관리 (Zustand)
│ └── utils/ # 유틸리티 함수
└── components.json # UI 컴포넌트 설정
1. 사용 스택
- FastAPI(Python 3.12)
- SQLAlchemy + Alembic
- PostgreSQL
- XRPL-py
- Uvicorn + Nginx
- Docker / Docker Compose
2. 프로젝트 구조
app/
├─ core/ # 환경설정, 공용 모듈
├─ domains/
│ ├─ artist/ # 작가 조회 및 등록, 삭제
│ ├─ artwork/ # 작품 조회 및 삭제
│ ├─ auth/ # XRPL 지갑 서명 기반 인증
│ ├─ gallery/ # 갤러리 CRUD
│ └─ nfts/ # 작품·NFT 민팅, 트랜잭션 검증
├─ shared/
│ ├─ database/ # SQLAlchemy 세션/엔진
│ └─ pinata_client.py # IPFS 업로드 클라이언트
└─ main.py # FastAPI 엔트리포인트
| 이름 | 역할 | 담당 |
|---|---|---|
| 반정훈 | Team Lead / Backend Developer | FastAPI 기반 백엔드 설계 및 XRPL 연동 (Permissioned Domain, Batch 처리 로직 구현), Docker 기반 배포, AWS 인프라 관리 |
| 허초아 | Designer / PM | 서비스 UX/UI 기획, 화면 설계 및 프로토타입 제작(Figma), 발표 자료 제작 및 데모 영상 편집 |
| 김성수 | Frontend Developer | Next.js 기반 웹 프론트엔드 개발, NFT 발행/구매 UI 및 사용자 흐름 설계, API 통신 및 상태관리 구현 |
| 이재혁 | Frontend Developer | Next.js 기반 웹 프론트엔드 개발, XRPL Wallet(Xaman) 연동, 트랜잭션 처리 및 결과 표시 로직 개발 |
| 최시원 | Backend Developer | FastAPI 기반 백엔드 설계 및 XRPL 연동(NFT Mint/Offer 로직 구현), IPFS(Pinata) 업로드 자동화 |