Categorygithub.com/DistributedMetaverse/distributed-metaverse-offchain
modulepackage
0.0.0-20220915143038-7ea6038dc8c4
Repository: https://github.com/distributedmetaverse/distributed-metaverse-offchain.git
Documentation: pkg.go.dev

# README

distributed-metaverse-offchain

공개SW대회용 오프체인(Offchain) 구현

특징

  • 블록은 MQ(Redis 기반 메시지 큐) 및 로컬에 저장됨 (분산 저장)
  • 작업증명(PoW)에 따라 블록을 생성

Deamon test

  1. 실행파일이 없는 경우 go build 명령으로 빌드 진행하여야 함
  2. 윈도우즈는 distributed-metaverse-offchain.exe, 리눅스는 distributed-metaverse-offchain 실행
  3. 자동으로 작업증명(PoW), 트랜젝션 수발신, 블록 수발신이 시작됨

API 상세

요약

URIMethod설명
/transaction/publishPOSTqmhash, mimetype, filename 필드 요구 (JSON 본문)
/transaction/:idGETid는 트랜젝션 ID
/block/:hashGEThash는 블록 해시
/chain/:depthGETdepth는 최근 블록 기준으로 어느 깊이끼지 검색할지 지정
/statGET통계 정보 (최근 블록 해시, 최근 블록 수, 마지막 트랜젝션 ID)

/transaction/publish (POST): 아래 JSON 양식으로 전송함.

요청

{"qmhash": "<qmhash>", "mimetype": "<plain/text>", "filename": "<filename>"}

응답

{
    "success": true,
    "id": 115
}

/transaction/:id (GET): 트랜젝션 정보 조회 (파일 다운로드 요청까지 겸함)

요청

http://<host>:1323/transaction/115

응답 (파일 존재 시)

{
    "success": true,
    "data": {
        "data": "{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}",
        "id": 115,
        "datetime": "2022-09-12 00:54:37.9252438 +0900 KST m=+99.276254501"
    },
    "status": "ok",
    "url": "http://127.0.0.1:1323/downloads/QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA"
}

응답 (파일 존재하지 않을 시)

{
    "success": true,
    "data": {
        "data": "{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}",
        "id": 115,
        "datetime": "2022-09-12 00:54:37.9252438 +0900 KST m=+99.276254501"
    },
    "status": "downloading"
}

/block/:hash (GET): 블록 정보 조회

요청

http://<host>:1323/block/000000ae3e856ab81898f840f036b1a9c5d76e08bf3c482c57ff9f6deb303379

응답

{"data":{"previousHash":"000000b7b5e037df613bf1173f420b5a9228cbaab3581f25005afe791aa1dfe7","transactions":[{"data":"{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}","id":111,"datetime":"2022-09-12 00:54:32.5607562 +0900 KST m=+93.911766901"},{"data":"{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}","id":112,"datetime":"2022-09-12 00:54:34.0608671 +0900 KST m=+95.411877801"},{"data":"{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}","id":113,"datetime":"2022-09-12 00:54:35.4791572 +0900 KST m=+96.830167901"},{"data":"{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}","id":114,"datetime":"2022-09-12 00:54:36.7781704 +0900 KST m=+98.129181101"},{"data":"{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}","id":115,"datetime":"2022-09-12 00:54:37.9252438 +0900 KST m=+99.276254501"}],"hash":"000000ae3e856ab81898f840f036b1a9c5d76e08bf3c482c57ff9f6deb303379","datetime":"2022-09-12 00:54:58.6619114 +0900 KST m=+120.012922101","proof":5546121,"lastTransactionId":115},"success":true}

/chain/:depth (GET): 최근 블록 조회

요청

http://<host>:1323/chain/15

응답

{"blocks": [<Block>, <Block>, <Block>, ...]}

API test

아래와 같이 test.json 파일을 생성 후 cURL 명령을 이용하여 테스트 가능함.

test.json

{"qmhash": "<qmhash>", "mimetype": "<plain/text>", "filename": "<filename>"}

cURL command

요청

curl -X POST -d @test.json http://127.0.0.1:1323/transaction/publish
응답
{
    "success": true,
    "id": 115
}

블록 예시

{
    "previousHash": "000000b7b5e037df613bf1173f420b5a9228cbaab3581f25005afe791aa1dfe7",
    "transactions": [{
        "data": "{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}",
        "id": 111,
        "datetime": "2022-09-12 00:54:32.5607562 +0900 KST m=+93.911766901"
    }, {
        "data": "{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}",
        "id": 112,
        "datetime": "2022-09-12 00:54:34.0608671 +0900 KST m=+95.411877801"
    }, {
        "data": "{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}",
        "id": 113,
        "datetime": "2022-09-12 00:54:35.4791572 +0900 KST m=+96.830167901"
    }, {
        "data": "{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}",
        "id": 114,
        "datetime": "2022-09-12 00:54:36.7781704 +0900 KST m=+98.129181101"
    }, {
        "data": "{\"qmhash\":\"QmVEL2JqkH1Gd58EuhfkdYJMLEdHLzqK6EJbFDz8RyNLvA\",\"mimetype\":\"video/x-msvideo\",\"filename\":\"big_buck_bunny_1080p_stereo.avi\"}",
        "id": 115,
        "datetime": "2022-09-12 00:54:37.9252438 +0900 KST m=+99.276254501"
    }],
    "hash": "000000ae3e856ab81898f840f036b1a9c5d76e08bf3c482c57ff9f6deb303379",
    "datetime": "2022-09-12 00:54:58.6619114 +0900 KST m=+120.012922101",
    "proof": 5546121,
    "lastTransactionId": 115
}

문의

문의사항이 있으면 알려주세요

# Functions

Get preferred outbound ip of this machine.

# Constants

이 인스턴스가 잡고 있을 Port 번호.
Redis MQ 서버 IP 및 Port 번호.

# Variables

이 인스턴스가 외부에 리소스를 제공할 때 보여주는 주소.

# Structs

No description provided by the author
No description provided by the author
No description provided by the author