https://dabobloodcard.site/ (현재 지원하지 않습니다.)
블록체인은 데이터 분산 처리 기술로 네트워크에 참여하는 모든 사용자가 모든 거래 내역 등의 데이터를 분산, 저장할 수 있다. 또한 블록체인은 블록들을 체인 형태로 묶은 형태로 되어 있으며 이 블록은 개인과 개인의 거래, 즉 P2P의 데이터가 기록되는 장부가 된다. 이런 블록들이 연결되어 만들어지는 것이 '사슬(체인)'의 구조를 가지게 된다.
모든 사용자가 거래 내역을 보유하고 있기 때문에 거래 내역을 확인할 때는 모든 사용자가 보유한 장부를 대조하고 확인해야 한다. 이러한 원리로 블록체인은 공공 거래장부 또는 분산 거래장부로도 불린다.
-
안정성
블록체인은 중앙 서버 없이 P2P 분산 서버에서 구동되는 시스템이다. 또한 모든 데이터들이 복사되어 노드들 PC에 저장되어 있다. 따라서 시스템을 공격하기 위해서는 절반 이상의 노드를 해킹해야 하며, 그것은 현실적으로 불가능하다. 시스템의 공격지점이 분산되어 있으며 데이터 또한 분산되어 있기 때문에 시스템 자체로 안정적이라고 할 수 있다.
-
익명성
블록체인 네트워크에서 계정을 생성할 때 제 3자의 신원 인증은 필요없다.즉, 아이디로 누군지 판별하기는 어렵다. 거래 기록은 모두에게 공개되며 거래를 누가 어디에 했는지도 모두 공개가 된다. 하지만 이 익명성이 보장된 특징 때문에 누구인가를 추적하기는 굉장히 힘들다.
- 종이 헌혈증 관리의 어려움
- 종이 헌혈증 재발급 불가
- 종이 헌혈증 관리의 어려움 (ex : 분실, 훼손 등)
- 헌혈증 기부의 어려움
- 방문 or 우편으로만 기부가 가능한 현재 실태는 기부를 어렵게 함
- 기부 시스템의 신뢰도 문제
- 기부의 사용처, 거래 내역들이 불투명해 기부 시스템의 신뢰도 하락
헌혈을 하게 될 경우 종이 형태의 ‘헌혈증서’라는 것을 받게 되는데 이 헌혈증서를 잘 보관하고 사용하는 사람은 과연 몇이나 될까요?
<활용률 20%... 헌혈증 무용론>
http://www.seoul.co.kr/news/newsView.php?id=20091202008008
위 조사에 따르면 사용된 헌혈증서는 점차 줄고 있으며, 이렇게 헌혈증 사용이 갈수록 저조한 이유는 무엇보다 종이 형태로 발급되어 분실할 경우 재발급이 안되기 때문이라고 합니다.
대표적인 국제구호단체 유니세프의 각종 비리 의혹이 제기되면서 사람들은 기부 사이트에 의심을 품기 시작했으며 후원을 취소하는 사례가 늘고 있습니다.
<'추악한 실체' 보도에 줄줄이 후원 끊기고 있는 현재 상황 >
https://post.naver.com/viewer/postView.nhn?volumeNo=15449923&memberNo=29949587
그동안 기부 플랫폼을 통해 꾸준히 기부해 온 후원자들은 "앞으로 어디를 믿고 후원해야 할지 모른다"며 실망감을 드러냈습니다.
이러한 배경에서 DABO는 전자 헌혈증을 통해 보다 편리하게 관리할 수 있고, 더불어 전자 헌혈증과 DABO를 통해 투명하게 공개되는 캠페인에 동참할 수 있습니다.
Donation + ABO 블록체인 기반 전자 헌혈증을 등록하여 헌혈증 증서 관리를 더욱 간편하게! ERC20 DABO Token으로 신뢰도 있는 기부 시스템
- 기록 : 블록체인을 통한 기부 기록 영구 보관
- 기부 : 쉽고 편리한 헌혈증, 후원금 기부 서비스
- 투명한 과정 : 공개 장부를 통한 투명한 기부 문화 정착
- 전자헌혈증 관리 시스템
- 블록체인을 활용한 전자헌혈증 생성 및 조회
- 자체 Token 시스템
- Ethereum 기반의 자체 Token으로 투명한 장부 공개
- DABO 지갑 관리 : ERC20에 따른 DABO Token 발행/충전/기부
- 후원 캠페인
- 전자헌혈증, DABO Token 기부를 할 수 있는 캠페인 관리
- 개인, 단체의 후원 요청 및 댓글 / 공감
- 내 주변 헌혈의 집 정보
- 공공 데이터 API 기반 위치 및 정보 제공
- 예약 확인 서비스
- 의미 있는 선순환 구조의 정착
- 아날로그 기부 문화에 소모되는 불필요한 사회적 비용 완화
DABO에 처음 접속하면 만날 수 있는 랜딩 페이지
이름, 닉네임, 이메일, 혈액형, 비밀번호 등 정보를 통해 회원 가입
가입한 정보를 기반으로 로그인시 메인 페이지로 전환
종이 헌혈증을 블록체인 기반 전자 헌혈증으로 등록하는 과정 Token 충전 과정은 여기에 더해 전자결제시스템이 추가
생성된 전자 헌혈증을 스마트 컨트랙트를 활용하여 전달하는 과정 Token 기부 과정도 동일
ERC20표준으로 발행된 DABO 토큰을 전자결제시스템과 연동하여 1:1 비율로 충전할 수 있습니다.
블록체인으로 기부 전과정이 기록되며 DABO Token을 이용해 기부할 수 있습니다.
실제 도움이 필요한 회원이 헌혈증 혹은 DABO 모집을 위한 캠페인 글을 작성하는 과정
주변 헌혈의 집을 찾고, 원하는 헌혈의 집에 헌혈 예약을 하는 서비스
| 이름 | 포트 번호 |
|---|---|
| web server(nginx) | 80 |
| springboot (tomcat) | 8080 |
| geth | 8545 |
| geth websocket | 8546 |
| https | 443 |
| mysql | 3306 |
# update
$ sudo apt update
# CURL 설치
$ sudo apt-get install -y curl
# nodejs 설치
$ sudo apt install nodejs
# npm 설치
$ sudo apt install npm
# mysql 설치
$ sudo apt-get install mysql-server
$ sudo mysql_secure_installation
# nginx 설치
$ sudo apt-get install nginx
#frontend
npm run build
#backend
nohup java -jar bf.jar &
#maven JUnit Test Skip 명령어
mvn clean install -DskipTests
sudo apt-get install letsencrypt
# 만약 nginx를 사용중이면 중지
sudo systemctl stop nginx
# 인증서 발급
sudo letsencrypt certonly --standalone -d www제외한 도메인 이름
# 아래 키가 발급되는 경로를 /etc/nginx/sites-availabe/default 설정파일에 넣어줘야 함.
ssl_certificate /etc/letsencrypt/live/도메인이름/fullchain.pem;
ss
# Go Install
sudo apt install software-propeties-common
sudo add-apt-repository ppa:longsleep/golang-backprots
sudo apt update
sudo apt install golang-go
# Geth 설치
sudo apt-get update
sudo apt-get install ethereum
# 설치 확인
which geth
which solc
# 버전 확인
geth version
go version
mkdir {폴더 이름}
cd {폴더 이름}
geth --datadir $PWD account new
#genesis.json
{
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"ethash": {}
},
"difficulty": "1",
"gasLimit": "8000000",
"alloc": {
"{계정 생성하기로 나온 address}": { "balance": "100000" }
}
}
geth --datadir {경로} init {제네시스 파일}
# ex) geth --datadir $PWD init genesis.json
geth --networkid 15 --datadir $PWD --http --http.addr "0.0.0.0" --http.port 8545 --http.corsdomain "*" --rpc.allow-unprotected-txs --http.api "personal,eth,net,web3,txpool,miner,admin" --allow-insecure-unlock --nodiscover --mine --http.vhosts '*' --unlock 0 --password /home/ubuntu/dabo_geth/passwd
geth attach http://[도메인]:8545>
-
Geth(Go-Ethereum)
Geth는 이더리움 클라이언트 중 Go 언어로 개발된 버전입니다. Geth 프로그램은 이더리움에서 제공하는 다양한 API를 사용해 볼 수 있으며 메인 넷, 테스트 넷 등과의 연동을 쉽게 할 수 있도록 편의성을 제공합니다. 이더리움의 공식 프로그램으로 내부 기능과 프로토콜을 완벽히 준수하며 현재까지 가장 널리 사용되는 이더리움 클라이언트입니다
DABO는 Geth를 이용하여 EC2 서버에 프라이빗 네트워크를 구축하였으며 Smart Contract를 연동하여 만든 DApp입니다.
-
ERC 20
ERC-20은 EIP에서 제안되어 현재 공식으로 채택된 토큰 표준안 중 가장 널리 사용되는 표준입니다. EIP란 Ethereum Improvement Proposals의 약자로 중앙화된 결정 주체가 없는 이더리움 프로젝트의 특성상 개선안을 제안하고 이를 투표로 표결하여 어떤 개선안을 채택하여 소프트웨어에 반영할지를 결정하기 위해 존재하는, 문자 그대로 “이더리움 개선 제안”을 뜻합니다.
ERC-20은 스마트 컨트랙트 기반 토큰이 준수해야 할 공통 기능과 인터페이스를 정의하고 있어 이 표준에 맞추어 DABO 토큰을 발행하였습니다.
반드시 구현해야 할 함수는 전체 공급량(totalSupply), 잔고(balanceOf), 전송(transfer), ~에서 전송(transferFrom), 승인(approve), 허용(allowance) 6가지로, DABO 토큰 기준에 따라 토큰을 만들고 Remix를 통해 private network에 배포하였습니다.
-
WEb3.js
Web3.js는 이더리움 생태계에 다양한 요청을 처리할 수 있게 하는 JavaScript API 라이브러리입니다. Geth는 HTTP 기반의 JSON RPC를 지원하고 있으며, Web3.js 또한 내부적으로 JSON RPC를 사용하고 있습니다. web3.js는 프론트엔드에서 이더리움 노드들과 상호 작용을 쉽고 가능하게 하므로 DABO 또한 web3.js를 사용하여 DApp을 개발하였습니다.
-
Remix IDE Remix IDE는 별도의 설치 없이 웹 브라우저 상에서 이용 가능한 이더리움 스마트 컨트랙트 개발 도구 입니다 다양한 버전의 솔리디티 버전을 컴파일 할 수있고 Javascript VM을 통해 스마트 컨트랙트를 사전 테스트 할 수 있도록 하며 테스트넷과 연동을 통한 배포 및 호출 등을 쉽게 진행할 수 있습니다 또한 스마트 컨트랙트에 소요되는 Gas를 미리 예상해 볼 수 있고 UI를 통한 손쉬운 호출로 이더리움 스마트 컨트랙트를 개발 하기에 편리 합니다. DABO는 Remix를 사용하여 이더리움 스마트 컨트랙트를 개발 및 배포 하였습니다
-
솔리디티
솔리디티는 이더리움에서 개발한 스마트 컨트랙트 개발 언어 입니다 솔리디티 스마트 컨트랙트 컴파일러를 통해 바이트 코드로 변환되어 이더리움 가상 머신 위에서 동작하게 됩니다 솔리디에는 이더리움의 주소를 나타내는 20 바이트 길이를 저장할 수 있는 address 자료형이 존재하며 이 밖에 레퍼런스 타입 구조체, 배열, 열거형, 매핑형 등을 사용 할 수 있습니다 DABO는 Solidity언어를 사용하여 Smart Contract를 작성했고, Remix IDE를 사용하여 컴파일 및 배포를 하였습니다.
- 원본 프로젝트 저장소 remote 설정 (초기 설정시 한번만 해주면 된다.)
git remote add origin-dabo https://lab.ssafy.com/s06-blockchain-sub2/S06P22B106.git- branch 생성 후 작업 시작하기
- fork한 repository로 이동
- 생성과 동시에 그 브랜치로 이동하는 명령어
git checkout -b develop- 각자 작업은 develop branch에서 작업
- 커밋 컨벤션 지키기
- add, commit을 한 후 push는 origin 으로 작업한 브랜치를 push해야함
git add .
git commit -m "feat:[front] 레이아웃 구현"
git push origin develop- 이 때 같은 파일을 다른 요청에서도 수정했다면 충돌이 발생할 수 있음
- 코드 리뷰 받고 approve 되면 merge하기
-
내 저장소의 develop 브랜치로 이동
-
fetch, merge
git fetch origin-dabo git merge origin-dabo/CICD
- 원격 저장소의 develop 브랜치와 내 저장소의 develop 브랜치를 동기화시킨다.
- 데일리 스크럼과 전반적인 문서 작업을 노션에 정리하였습니다.
- 팀원들과 각자 공부한 부분에 대한 내용을 정리하였습니다.
- Jira를 통해 프로젝트를 관리하였습니다.
Postman Document[1차 REST API 정리] : https://documenter.getpostman.com/view/18058426/UVsMukqm
- JAVA : 네이버 - JAVA 코딩 컨벤션
- JAVASCRIPT : AIRBNB - JAVASCRIPT 컨벤션
# feat : 기능 (새로운 기능)
# fix : 버그 (버그 수정)
# refactor: 리팩토링
# style : 스타일 (코드 형식, 세미콜론 추가: 비즈니스 로직에 변경 없음)
# docs : 문서 (문서 추가, 수정, 삭제)
# test : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음)
# chore : 기타 변경사항 (빌드 스크립트 수정 등)
# ------------------
# 관련된 이슈번호는 제목 맨 뒤에 추가한다. ex. S06P22B106-1
# ------------------
# example
feat : [back] 로그인 #S06P22B106-1## 이슈 생성
- 에픽 : 공통(라이브강의,기획 등) / 회원 관리 / 전자 헌혈증 관리 / 기부글 관리 / 토근 자산 관리 / 헌혈의 집 관리 / 배포 및 CI/CD / 블록체인 /발표 / UCC / 문서
- 스토리 : 개인별 생성, 피드 생성, 피드 삭제 등의 디테일하게 들어가기
- Summary 규칙 : ["에픽명”] “front or backend” | “구현내용”
- 예시
- [공통] 오전 라이브 & 미팅 | 0128
- [공통] 오후 미팅 | 0128
- [피드] backend | 피드 생성
- 서브테스크 : 스토리 작업 중 자신이 한 일 디테일하게 적기
- 피드 생성의 경우 : 피드 생성 오류 잡기| 구분 | 이름 | 역할 | 깃허브 주소 |
|---|---|---|---|
| 팀장 | 손모은 | 서버 배포, DABO 지갑 관리 기능 구현 | https://github.com/moeun2 |
| 팀원 | 홍종현 | 전자헌혈증 관리 기능 구현 | https://github.com/jonghyunH |
| 팀원 | 정명수 | 유저 관리 기능 구현 , UCC 제작 | https://github.com/JeongMyeongSu |
| 팀원 | 안세연 | 캠페인 관리 기능 구현, 헌혈의 집 예약 기능 구현 | https://github.com/seyeonn |
| 팀원 | 장지빈 | 유저, 메인페이지, 전자헌혈증 프론트 구현 | https://github.com/Sagytic |
| 팀원 | 이제훈 | DABO 지갑 관리 프론트 구현 | https://github.com/L-Jehun |
- 손모은
-
- API 설계
- Postman을 활용한 API 설계
-
- 서버 배포 환경 구축
- 블록체인 서버 : Geth를 활용한 프라이빗 네트워크 구축, Nginx, letsencrypt를 이용한 SSL 처리
- 백엔드 서버 : Vue, SpringBoot 서버 구축, Nginx,letsencrypt를 이용한 SSL 처리
-
- DABO 지갑 관리 기능 (Full Stack)
- [Front] Web3를 이용하여 DABO 지갑 생성, 조회, 이더 충전, 캐쉬 트랜스퍼 기능 구현
- [back] Web3j, springboot를 이용한 DABO 지갑 API 생성(Wallet Controller, DaboTokenHistory Controller)
- JPA 활용 DABO 지갑 Database 관리
-
- 홍종현
-
- DB 설계
- ERDCloud를 활용한 데이터 베이스 설계
-
- DABO 전자 헌혈증 관리 기능 (Full Stack)
- [Front] Web3를 이용하여 전자 헌혈증 생성 및 전달
- [back] Web3, SpringBoot를 이용한 전자 헌혈증 API 생성(BloodCardController)
- JPA 활용 DABO 지갑 관리 Database 관리
-
- 정명수
-
- 백엔드 기능 구현
- 유저 관련 기능 구현
- 관계형 DB 관리
-
- UCC 제작
-
- 안세연
-
- API 설계
- Postman을 활용한 API 설계
-
- FrontEnd 레이아웃 및 기능 구현
- 캠페인 관련 전체 레이아웃
- 헌혈의 집 예약 관련 전체 레이아웃
-
- BackEnd 기능 구현
- 캠페인 관련 기능 구현
- 헌혈의 집 예약 관련 기능 구현
- 공공데이터 활용
-
- 장지빈
-
- FrontEnd 레이아웃 및 기능 구현
- MyDabo, pay/charge, wallet, footer(nav), spinner
- 기능별 단위테스트 및 버그픽스
- 레이아웃 구성 및 FE 초기 환경설정 통합
-
- PT
- 1, 2, 3차 발표 PT 제작 및 발표
-
- 이제훈
-
- API 설계
- Postman을 활용한 API 설계
-
- FontEnd 레이아웃 및 기능 구현
- Main 페이지
- 회원관리 (로그인, 회원가입)
- 캠페인 리스트 레이아웃
- Front 레이아웃 수정
-
- UCC 제작 지원
-
-
손모은 : 이더리움, 비트코인 듣기만 했던 블록체인이라는 주제를 구현하려니 너무 어려웠지만 신기술을 경험하고 공부할 수 있는 기회가 되어 좋았습니다. 프라이빗 네트워크를 구현하는데 시간이 너무 오래 걸리고 코로나 때문에 팀장으로서 많이 기여를 못한 것 같아 팀원들에게 미안한 마음입니다. 좋은 팀원들 덕분에 프로젝트 구현 못할 줄 알았는데 이렇게 구현할 수 있게 되어서 기쁩니다. 다들 감사하고 모두 수고 많으셨습니다!
-
홍종현 : 블록체인에 대해 처음 접해보기도 하고 개념이 어려워 이해 하는데 시간을 많이 쓰는 바람에 프로젝트에 기여를 많이 못한거 같아서 스스로에게 아쉽기도 하고 팀원들에게도 미안하지만 좋은 팀장, 팀원분들 만난 덕분에 많은 도움 받으며 성공적으로 마무리 할 수 있었던거 같습니다. 모두 고생 많으셨습니다 감사합니다.
-
정명수 : 프로젝트의 핵심이었던 블록체인 기능이 마무리가 얼마남지 않은 시점까지 구현이 되지 못했습니다. 3주가 남은 시점부터 상황의 심각성을 느끼고 투입되었지만, 큰 도움이 되지 못했습니다. 살면서 최고로 무기력함과 좌절감을 느꼈던 것 같습니다. 너무 팀원들에게 배우기만 한 것 같아 유감스럽습니다. 그래도 더 공부해야 할 것들이 많다는 것 또한 잘 배웠습니다. 프로젝트 마무리 잘 해주신 팀원들께 감사합니다.
-
안세연 : 블록체인이란 신기술을 도입한 프로젝트라 좋은 경험이었지만 아직 생소한 기술이다보니 참고할 정보나 자료가 별로 없어 팀원 모두 힘들어했습니다. 그럼에도 불구하고 끝까지 열심히 해준 팀원들에게 감사하다고 말하고 싶습니다. 기능 구현을 하면서 막힐 때마다 팀원분들이 함께 고민해주시고 많이 도와주셔서 성공적으로 마칠 수 있었습니다. 함께 완성해갔기에 프로젝트 결과물 또한 잘 나올 수 있었다고 생각합니다. 좋은 분위기를 이끌어준 팀원분들 너무 고생하셨고 감사합니다 :-)
-
장지빈 : 자료가 많이 없는 상황에서 건강이슈로 다들 힘든 와중에 끝까지 힘든내색 하지않고 함께 달려온 팀원들 모두 감사합니다. 프로젝트 기간동안 스스로 학습하고 프로젝트에 적용시키는 부분이 고되고 어려운 과정이었지만 성공적으로 마무리 한 것 같습니다. 또, 다양한 방면에서 배울점 많고 하나라도 더 알려주려 노력한 팀원들 덕분에 많이 성장할 수 있었습니다.
-
이제훈 : 힘든 상황에도 불구하고 끝까지 최선을 다해서 프로젝트를 마무리 해준 팀원분들이 너무 좋았습니다. 전반적으로 UI가 기획한대로 나와서 기분이 좋았고 프로젝트가 진행 될 수록 서로 많이 배우는 계기가 되었습니다. 부족한 부분을 채워가며 기대 이상으로 구현이 잘되어서 좋았습니다. 다들 감사합니다!