Plate 웹 콘텐츠 기반 보상 시스템을 사용하기 위한 타입스크립트를 기반 퍼블릭 블록체인입니다. 메시징 서비스 Kafka 를 활용해 강력한 로드밸런싱과 빠른 속도를 보장합니다. 모든 데이터는 암호화 되어 Couchbase에 저장되여 네트워크에 참여하는 모든 사용자는 자체적으로 제공하는 Plate Explorer에서 블록데이터를 조회할 수 있습니다.
노드 종류는 채널, 피어로 총 2가지 종류가 있습니다.
다른 피어와 원장을 공유하며 블록체인을 일치시키는 역할을 진행합니다.
피어 전체를 관리하고 피어를 삭제 / 생성하는 역할을 수행합니다.
아래와 같은 환경을 권장합니다.
| service | version |
|---|---|
| NodeJS | v14 |
| Kafka | 3.2.x |
| Couchbase ottoman | v2 |
| Docker | 20.10.14 |
프로젝트 실행방법은 npm 과 docker 두 가지 방식이 있습니다.
NPM 저장소 에서 plate Chain을 다운 받습니다.
$ npm install platechain
카프카가 작동중이지 않다면 Docker-compose 로 카프카를 구동시킨 뒤 피어를 가동시킵니다.
$ npm start
기본적으로 카프카 Channel 서버가 실행중이지만
만약 Platechain 서비스 이외에 다른 목적으로 사용하려면 docker-compsoe/kafka.yaml 을 실행시켜서 카프카 서버를 구동시켜줍니다.
$ cd docker-compose
$ docker-compose -f kafka.yaml -f network.yaml up
- 피어를 생성하면 자동으로 컨테이너가 생성됩니다.
- 생성된 컨테이너를 Nginx Unit 이 자동으로 리버스 프록시를 통해서 platechain 도메인과 연결해서 반환합니다. ex) eunsol.platechain.shop
- 해당 도메인에 접속하면 블록체인 탐색기로 데이터 확인이 가능합니다.
- 이후에 해당 피어에 데이터가 추가되면 블록체인이 검증 후 카프카를 통해 다른 살아있는 노드로 브로드케스팅하게됩니다.
채널은 일반 피어 노드와 달리 데이터베이스를 가지지 않고 피어노드들을 관리하는 역할을 수행합니다.
블록체인 피어 노드를 생성합니다.
Request
POST /v1/peer/
{
"id": "userID",
"organization": "plate",
"password": ""
}Response
200
{
"url": "http://peer1.bplate.store" // 생성된 노드의 주소
}피어노드를 시작합니다.
Request
POST /v1/peer/start
{
"id": "peer1"
"password": "",
}Response
200
{
"url": "http://peer1.bplate.store" // 시작된 노드의 주소
}노드를 삭제합니다.
Request
DELETE /v1/peer/:id
Response
200
{
"meesage" : "clearly delete node!!"
}피어노드는 Docker 를 통해서 실행되며 카프카와 연결되어 블록을 다른 노드들과 주고받습니다. 데이터베이스는 Couchbase 에 저장됩니다.
블록을 조회할 때 사용하는 API 입니다.
Request
GET /v1/block?user=USERID
curl -i -H 'Accept: application/json' http://localhost:7000/v1/block?user=USERIDResponse
{
"blocks": [
{
"_type": "Block",
"data": {
// any data
},
"header": {
"version": "1.0.0",
"index": 1,
"previousHash": "8E15155C5BACE388CBB750CF9724FF3CD63DF3CEED6419F9D5B134A36E01D062",
"generated_time": "1663988978289",
"merkleRoot": "B28C94B2195C8ED259F0B415AAEE3F39B0B2920A4537611499FA044956917A21",
"event_id": "923fe3dc-1b66-4cd0-b0d1-f7796e36b463",
"organization": "plate"
},
"id": "1d7a93ba-e495-44e7-9f96-ebb1d101531a"
},
{
"_type": "Block",
"data" {
// any Data
}
"header": {
"version": "1.0.0",
"index": 0,
"previousHash": "0000000000000000000000000000000000000000000000000000000000000000",
"generated_time": "1663897055",
"merkleRoot": "B28C94B2195C8ED259F0B415AAEE3F39B0B2920A4537611499FA044956917A21",
"event_id": "493fe070-5fb1-411b-ac59-b968ff34cae5",
"organization": "plate"
},
"id": "ea8b5ef8-ccc7-475a-b740-73961afcdc73"
}
]Request
POST /v1/block/
{
"data": {
// any Data
}
}Response
{
"header": {
"version": "1.0.0",
"index": 1,
"previousHash": "8E15155C5BACE388CBB750CF9724FF3CD63DF3CEED6419F9D5B134A36E01D062",
"generated_time": "1663988978289",
"merkleRoot": "B28C94B2195C8ED259F0B415AAEE3F39B0B2920A4537611499FA044956917A21",
"event_id": "923fe3dc-1b66-4cd0-b0d1-f7796e36b463",
"organization": "plate"
},
"data": [
{
// any Data
}
],
"id": "1d7a93ba-e495-44e7-9f96-ebb1d101531a",
"_type": "Block"
}블록체인 데이터를 손쉽게 조회하고 상태를 확인할 수 있는 탐색기를 제공합니다.
탐색기는 React를 사용해서 개발했습니다.

