처음부터 Golang으로 블록체인 구축

이 기사에서는 처음부터 Go 블록체인 개발에 중점을 둘 것입니다. 그러나 시작하기 전에 Golang의 기본 개념에 익숙해야 합니다. 그렇지 않은 경우 사전 개념을 살펴보고 블록체인으로 돌아가는 것이 현명합니다. 

그럼 바로 본론으로 들어가 보겠습니다. 

새 디렉토리로 시작하기 

우리는 시작하기 위해 새로운 디렉토리를 만들 것입니다. 이 디렉토리의 이름이 "blockchain"이라고 가정해 봅시다. 명령 프롬프트에 코드를 입력합니다(또는 macOS 또는 Linux를 사용하는 경우 터미널을 사용해야 함). 따라서 다음을 입력합니다.

cd 작업 공간 

mkdir 블록체인 

CD 블록체인 

코드.

VS Code가 열리면 명령 프롬프트에서 Go 모듈을 생성합니다. 어떻게 합니까? 글쎄, 우리는 다음을 입력합니다:

모드 초기화 github.com/golang-company/blockchain으로 이동

main.go에서 코딩하기 

다음으로 'main.go'라는 Go 소스 파일을 만들고 그 안에 코드를 입력합니다. 하지만 먼저 블록체인이 무엇인지 이해합시다. ㅏ blockchain 여러 피어 간에 분산되고 분산된 공용 데이터베이스로 정의할 수 있습니다. 블록체인을 사용하면 노드가 부정확한 데이터를 생성하더라도 데이터베이스가 자체 수정될 수 있습니다. 

일반적으로 블록체인의 블록은 데이터베이스에서 공유하는 데이터, 해시 및 이전 블록의 암호화 해시로 구성됩니다. 

 자, 준비되셨나요? 블록체인 개발로 이동? 엄청난! 시작하자. 

프로그래밍 파트 

이 섹션에서는 main.go 파일을 살펴보겠습니다. 

주요 패키지

수입 (

"바이트"

"크립토/sha256" 

“fmt” 

)

유형 Cryptoblock 구조체 {

해시 [] 바이트 

데이터 [] 바이트 

PrevHash [] 바이트 

}

  • 보시다시피 구조체만 생성되었습니다. 

func (c *Cryptoblock) BuildHash() {

세부 정보 := bytes.Join([][] byte{c.Data, c.PrevHash}, []byte{}) 

해시 := sha256.Sum256(세부정보)

c.해시 = 해시[ : ]

}

  • 이제 데이터와 이전 해시에 따라 해시를 생성할 수 있는 메서드를 구성합니다. 우리는 그것을 사용할 것이기 때문에 "bytes" 라이브러리를 가져올 것입니다.
  • 다음 단계는 details라는 변수를 만들고 데이터 유형 바이트를 사용하는 것입니다. Join()을 사용하여 바이트 조각을 연결합니다.

세부 정보 := bytes.Join([][] byte{c.Data, c.PrevHash}, []byte{}) 

여기에서 2D 바이트 조각을 가져와 c.Data와 이전 해시를 전송합니다. 그런 다음 빈 바이트 조각을 결합합니다. 

  • 다음으로 우리는 세부 사항에 대한 sum256 해싱 함수를 사용하여 실제 해시를 생성합니다. sha256 라이브러리를 가져올 때 이것을 사용할 수 있습니다. 
  • 다음으로 생성된 해시를 블록의 해시 필드에 푸시합니다. 

func BuildBlock (데이터 문자열, prevHash [] 바이트) *Cryptoblock {

block := &Cryptoblock{[]byte{}, []byte(data), prevHash}

블록.빌드해시()

리턴 블록

  • 이제 블록 생성을 가능하게 하는 함수를 빌드할 것입니다. 이 함수는 데이터 문자열을 입력으로 받아들이고 이전 블록의 prevHash를 입력으로 받은 다음 Cryptoblock에 대한 참조를 출력합니다. 블록 생성자를 사용하여 블록을 빌드합니다. 
  • &Cryptoblock은 블록에 대한 참조 역할을 합니다. 해시 필드의 경우 빈 바이트 조각을 통합합니다. 데이터 필드의 경우 데이터 문자열을 가져와 바이트 조각으로 변환합니다. 그리고 prevHash를 PrevHash 필드에 통합합니다. 
  • 마지막으로 블록에서 BuildHash()를 호출하고 블록을 반환합니다. 

유형 블록체인 구조체 {

블록 []*Cryptoblock

}

  • 블록체인 표현에 도움이 되는 타입이 필요합니다. 그리고 이를 구현하기 위해 구조체를 구현했습니다. BlockChain 구조체 유형은 Cryptoblock에 대한 포인터 배열로 구성됩니다.

func(체인 *BlockChain) AddBlock(데이터 문자열) {

prevBlock := chain.blocks[len(chain.blocks)-1]

new := BuildBlock(데이터, prevBlock.Hash)

chain.blocks = 추가(chain.blocks, 신규)

}

  • 여기에서 우리는 블록을 체인에 결합할 수 있는 방법을 만들고 있습니다. 메서드는 블록체인 포인터를 검색합니다. 그 다음에는 데이터 문자열을 받아들입니다. 
  • chain.blocks를 호출하면 블록체인의 이전 블록으로 이동합니다. 다음으로 블록체인 [len(chain.blocks)-1]의 길이를 전달했습니다.
  • 새 변수에서 BuildBlock 함수를 호출하고 데이터 문자열과 prevBlock.Hash를 전달합니다.
  • 추가 기능을 활용하여 이것을 chain.blocks에 추가한 다음 새 블록을 블록체인에 첨부합니다.

func 시작() *Cryptoblock {

return BuildBlock("시작", []byte{})

}

  • 다음 단계는 블록체인의 첫 번째 블록을 설명하는 Inception이라는 함수를 만드는 것입니다. 그리고 첫 번째 블록의 데이터와 함께 함수에서 새 BuildBlock을 반환합니다. 여기. "Inception"과 빈 이전 해시를 나타내는 바이트 조각을 통합했습니다. 

func InitBlockChain() *블록체인 {

return &BlockChain{[]*Cryptoblock{Inception()}}

}

  • 첫 번째 블록체인을 만들기 위해 InitBlockChain 기능을 도입했습니다. 여기서는 BlockChain에 대한 특정 참조를 반환할 뿐입니다. 다음으로, 우리는 Inception 함수를 호출하는 Cryptoblock 배열을 만듭니다. 

함수 메인() {

체인 := InitBlockChain()

chain.AddBlock("시작 후 첫 번째 블록")

chain.AddBlock("시작 후 두 번째 블록")

chain.AddBlock("시작 후 세 번째 블록")

_의 경우 블록:= 범위 chain.blocks {

fmt.Printf("이전 해시: %x\n", block.PrevHash)

fmt.Printf("블록의 데이터: %s\n", block.Data)

fmt.Printf("해시: %x\n", block.Hash)

}

}

  • 드디어 main 함수에 도달했습니다. 보시다시피 InitBlockChain()을 호출했으며 이를 체인 변수에 할당했습니다. 
  • 다음으로 chain.AddBlock을 통해 블록을 체인에 추가하고 필요한 데이터를 전달합니다. 
  • 그런 다음 for 루프를 실행하여 블록체인을 확인합니다. 그런 다음 각 블록을 선택하고 각 블록 내부의 필드를 인쇄합니다. 우리는 다음을 입력합니다.

fmt.Printf("이전 해시: %x\n", block.PrevHash)

fmt.Printf("블록의 데이터: %s\n", block.Data)

fmt.Printf("해시: %x\n", block.Hash)

출력: 

따라서 프로그램이 성공적이라고 말할 수 있습니다. Golang에서 블록체인 개념의 구현을 이해할 수 있기를 바랍니다. 계속 연습하면 복잡한 프로젝트를 처리할 수 있습니다. 

귀하의 암호화폐는 최고의 보안을 받을 자격이 있습니다. 도착 단돈 79달러의 Ledger 하드웨어 지갑!

출처: https://coinfomania.com/build-a-blockchain-in-golang/