Skip to content
This repository has been archived by the owner on Jun 16, 2021. It is now read-only.

this-is-my-life/blockchain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pmh-only/blockchain

비효율적일지도 모를 블록체인

디스커션에서 여러가지 토의를 진행중입니다
개선할 점이나 아이디어, 질문이 있을경우 디스커션텝을 활용해 주세요

블럭 구조

각 블럭은 Head, Body, Tail로 구성됩니다.

Head: BlockHead

블럭의 대한 정보가 포함되는 곳입니다.
75 Bytes로 구성되어 있습니다.

type BlockHead struct {
	Index      uint16 // 2 Bytes
	CreatedAt  uint32 // 4 Bytes
	PrevHash   []byte // 64 Bytes limit
	Nonce      uint32 // 4 Bytes
	Difficulty uint8 // 1 Byte
}

Body: BlockBody

블럭의 데이터가 저장됩니다.
길이는 최소 1바이트이며 최대 길이 제한이 없습니다.

type BlockBody struct {
	Flag    BodyFlags // 1 Byte
	Message []byte // no limit
}

열거형 BodyFlags의 대한 설명은 여기를 참고하세요.

Tail: BlockTail

블럭의 Head와 Body를 해시한 값이 저장됩니다.

type BlockTail struct {
	CurrHash []byte // 64 Bytes limit
}

예시

Block Structure:

Block{
  Head: {
    Index: 1,
    CreatedAt: 1618114690,
    PrevHash: "74a4f...",
    Nonce: 98681,
    Difficulty: 4,
  },
  Body: {
    Flag: 2,
    Message: []byte("PMH is handsome"),
  },
  Tail: {
    CurrHash: SHAKE256(Head + Body, 512), // 0000...
  },
}

Serialization:
00000000 00000001 01100000 01110010 10011010 01011100 01110100 10100100 11110001 10111111 11011011 01000100 10101101 00001100 11000001 11111111 10100001 01011101 00010110 00100000 10000011 11101110 01110100 10100100 01101101 11111100 01000100 11101111 00100111 00101011 10111110 11110000 01011100 10011000 11011101 00100000 00001011 00111000 10000110 00111001 00110101 10100110 11011010 00111010 00010110 00101111 01011000 01010001 11110010 11000011 00100110 01011100 01000011 11101000 00110100 00101011 00111101 00001011 10110001 01010111 01101100 00001011 01100111 00110010 11001010 00101101 01011111 11000111 00101100 01010010 00000000 00000001 10000001 01111001 00000100 00000010 01010000 01001101 01001000 00100000 01101001 01110011 00100000 01101000 01100001 01101110 01100100 01110011 01101111 01101101 01100101 00000000 00000000 10101000 00010000 00001111 01101100 11111111 01100010 01000100 01101010 00110100 11011001 11101111 00000101 01110100 11110010 01010110 10001000 01000101 11000000 11111000 11000011 01001100 11111010 01110011 11000111 11100010 10001111 00010000 00110101 11011011 01010100 10111100 00011111 10010010 00010101 00100100 01110101 10001111 00110000 01000100 01101011 01000111 00111111 00101010 00110011 10100001 00001001 00111110 11011101 10010010 00011110 11111101 00001000 10111110 10111110 11110011 00110110 10110011 00000010 11011001 00010010 11100000 10100000

처음 2바이트는 일련번호
다음 4바이트는 생성시각
다음 64바이트는 이전 블럭 해시
다음 4바이트는 Nonce값
다음 1바이트는 채굴난이도
다음 1바이트는 데이터 종류
다음부터 마지막 64바이트 전까지는 데이터
마지막 64바이트는 현재 블럭 해시

블럭 Body 스키마

0. GENESIS

체인의 시작 블록임을 표시

체인 검증시 검증 대상에서 제외된다.
아무런 의미를 가지지 않는다.

0 // 후행 없음, 또는 Garbage값

1. PEER

체인에 참가할 피어의 정보를 서술

체인 주소, 포트, 피어 클라이언트 버전을 저장한다.

1{"address":"192.168.0.10","port":69740,"version":"v0.1"}

2. DATA

체인에 저장될 2진수 데이터 (용도 무상관)

2 // 후행: 2진수 데이터