개발기간 : 2025.06 ~ 2025.07
이 프로젝트는 법인이 커스터디 업체를 통해 가상자산을 거래할 때, 영지식증명(Zero-Knowledge Proof)을 활용해 거래의 유효성을 증명하면서도 거래 당사자와 금액 등의 민감한 정보를 보호할 수 있도록 설계되었습니다. zkWallet을 기반으로 하여 송신자, 수신자, 금액을 숨긴 채로 거래가 유효하다는 사실만을 증명할 수 있습니다. 법인 계정 생성, wallet 생성, 트랜잭션 요청 등 법인의 거래 흐름 전반을 지원하며, 프라이버시를 해치지 않으면서도 감사 가능한 기능도 제공합니다.
$ docker run -d --memory=2g --name zkwallet-node -p 8545:8545 dongridong/zkwallet-hardhat-node
$ docker run --rm --network host dongridong/zkwallet-hardhat-node sh -c “npx hardhat run zkwallet/scripts/deploy.ts --network localhost”
$ docker run -d --name zkwallet-mysql -e MYSQL_ROOT_PASSWORD=zkwallet -e MYSQL_DATABASE=zkwallet -p 3306:3306 mysql:8.0
$ docker run -d --name zkwallet-backend --link zkwallet-mysql:mysql -e SPRING_DATASOURCE_URL="jdbc:mysql://mysql:3306/zkwallet?serverTimezone=Asia/Seoul" -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=zkwallet -p 8080:8080 dongridong/zkwallet-server- Java 21
- Spring Boot 3.5.0
- Spring Security + JWT
- Spring Data JPA
- MySQL 8.0
- Swagger
- JUnit 5
- Web3j
- Docker
-
문제: 프론트엔드에서 스마트 컨트랙트 실행 후 백엔드에 결과를 알리기 위해 API를 호출하는 구조에서는, 네트워크 오류나 사용자 종료 등의 이유로 API 호출이 누락될 수 있습니다. 이 경우 트랜잭션이 중복 처리되거나 상태가 불일치하는 문제가 발생할 수 있습니다.
-
해결: 백엔드에서 블록체인 노드의 이벤트를 구독하여, 특정 스마트 컨트랙트 이벤트가 감지되었을 때만 후처리를 수행하도록 변경하였습니다.
-
성과: 시스템 안정성과 신뢰성 향상, 프론트엔드-백엔드 간 연동 구조 단순화