블록 체인을 구축하는 방법을 배우고 싶다면 올바른 위치에 왔습니다. 파이썬으로 블록 체인을 구축하는 방법에 대해 자세히 알아 보겠습니다..

블록 체인에 관한 수많은 기사가 있지만 모든 기사가 블록 체인을 처음부터 구축하는 것에 대해 이야기하는 것은 아닙니다. 개발자로서 이론은 중요하지만 그이면의 개념을 완전히 이해하려면 블록 체인을 만들어야합니다..

블록 체인의 핵심 아이디어는 분산 된 특성입니다. 모든 것이 내부에서 어떻게 작동하는지에 대한 사실에 매료 될 것입니다. 블록 체인은 간단하게 들릴 수 있지만 내부에는이를 가능하게하는 많은 프로토콜과 알고리즘이 있습니다. Python을 사용하여 처음부터 블록 체인을 만들 것입니다..

기사를 저장하고 “블록 체인 구축 방법”으로 북마크 할 수도 있습니다. 나를 믿어; 이 기사는 장기적으로 당신을 도울 것입니다.

블록 체인에 대해 들어 본 적이 없습니까? 그런 다음 101Blockchain의 무료 과정을 확인하십시오. 경력을 발전시키고 싶다면 엔터프라이즈 블록 체인의 작동 방식을 배우는 Certified Enterprise Blockchain Course를 확인하십시오. 시작하자.

Blockchain의 초보자입니까? 지금 블록 체인 무료 과정에 등록하고 블록 체인 여정을 시작하세요.

블록 체인을 구축하는 방법

무엇이든 배우는 가장 좋은 방법은 실천을 통해 배우는 것입니다. 나와 같은 페이지에 있는지 확인하기 위해 먼저 요구 사항을 확인하겠습니다. 또한 우리 둘 다 같은 페이지에 있도록 블록 체인에 대해 간략하게 설명하겠습니다..

요구 사항

가이드를 따르기위한 기본 요구 사항은 코딩 방법을 아는 것입니다. 인생에서 코딩 한 적이 없다면이 가이드는 당신을위한 것이 아닙니다. 온라인으로 제공되는 다양한 초급 과정을 확인하는 것이 좋습니다. 최고의 학습 경험을 위해 EdX, Udacity 및 Coursera를 추천합니다.

당신은 이미 코더입니까? 그런 다음 기본 Python에 대해 알아야합니다. 또한 “블록 체인 구축 방법”자습서를 따르는 데 도움이됩니다..

지금 읽기 : Quorum Blockchain Ultimate Guide

누구나 따라 할 수 있도록 튜토리얼을 만들었습니다. 따라서 블록 체인을 처음부터 구축하는 방법을 모르고 배우고 싶다면 그렇게 할 수 있습니다.!

 Python을 모르더라도 쉽게 익힐 수 있으므로 걱정하지 마십시오. 확인 Python 문서 시작하려면.

튜토리얼에서는 Python 3.6 이상을 사용할 것입니다. 다른 버전의 Python을 사용하기로 결정한 경우 코드가 작동하려면 더 많은 연구를 수행해야 할 수 있습니다. 튜토리얼 목적으로 사용중인 버전을 설치하는 것이 좋습니다..

마지막으로 인터넷에서 두 당사자간에 통신하는 데 사용되는 프로토콜 인 HTTP에 대해서도 알아야합니다..

pip를 사용하여 Python 설치

pip를 사용하여 Python을 설치해야합니다. 또한 멋진 Requests 및 Flask 라이브러리를 설치해야합니다. 이렇게하려면 아래 명령을 실행하면됩니다..

$ pip install Flask == 0.12.2 요청 == 2.18.4

Windows 환경을 사용하는 경우 python.org로 직접 이동하여 최신 버전의 Python을 다운로드 할 수 있습니다..

필자는 튜토리얼 작성 당시의 최신 빌드 인 Python 3.8.1을 다운로드했습니다..

IDE의 경우 PyCharm을 선호합니다. 튜토리얼에 Python Community 에디션을 사용하고 있습니다. 원하는 IDE를 자유롭게 사용할 수 있습니다. 또 다른 훌륭한 대안은 무료 오픈 소스 통합 개발 환경 인 Visual Studio Code입니다..

마지막으로 필요한 도구는 HTTP 클라이언트 인 Postman입니다. 또는 cURL을 사용할 수도 있습니다..

또한 개발을위한 완전히 다른 환경을 만들기 위해 가상 환경을 설치하는 것이 좋습니다. 따라갈 수 있습니다 이 가이드 제대로 설정하려면.

블록 체인 재검토

블록 체인을 구축하기 전에 블록 체인에 대한 아이디어를 새롭게해야합니다. 이것은 우리가 같은 페이지에 머무르는 데 도움이 될 것입니다.

블록 체인은 피어가 중앙 집중식 엔터티 없이도 트랜잭션에 참여하고 상호 작용하고 트랜잭션을 실행할 수있는 분산 원장 기술입니다. 각 피어에는 원장의 사본이 있으므로 해커가 시스템에서 사기를 수행 할 수 없습니다. 블록 체인의 주요 기능에는 투명성, 불변성 및 보안이 포함됩니다. 고급 암호 화폐 알고리즘을 사용하여 데이터 보안을 보장합니다. 또한 합의에 도달하기 위해 블록 체인 네트워크는 작업 증명, 지분 증명 등과 같은 합의 알고리즘을 활용합니다..

또한 읽기 : 초보자를위한 블록 체인 : 시작 가이드

블록 체인 구축 시작하기

모든 필수 설치가 완료되었으므로 이제 “블록 체인을 구축하는 방법”자습서를 시작할 준비가되었습니다.

시작하려면 blockchain.py 파일을 만들어야합니다..

1. 블록 체인 생성

첫 번째 단계는 기능적인 블록 체인 솔루션을 만드는 것입니다. 처음에는 블록 체인 클래스를 만들어야합니다. 여기에서 체인 및 트랜잭션 목록을 시작할 생성자를 만듭니다. 체인 목록은 블록 체인을 저장하고 트랜잭션은 current_transacations 배열에 저장됩니다..

def __init __ (self) : self.chain = [] self.current_transactions = []

다음으로 새 블록을 생성하고 기존 체인에 추가하는 데 사용할 new_block 함수를 생성해야합니다. new_block 함수의 코드는 다음과 같습니다.

def new_block (self) : #이 함수는 새 블록을 만든 다음 기존 체인 패스에 추가합니다.

new_transcaction 메소드는 새 트랜잭션을 생성 한 다음 기존 트랜잭션 목록에 트랜잭션을 추가합니다..

def new_transaction (self) : #이 함수는 이미 존재하는 트랜잭션 패스에 새 트랜잭션을 추가합니다. 블록에 대한 해시를 생성하는 데 사용되는 해시 함수도 있습니다. @staticmethod def hash (block) : # 블록 해싱에 사용

last_block을 만들 마지막 함수입니다. 체인의 마지막 블록을 호출하는 데 사용됩니다..

여기에 세 가지 함수를 더 만들 수도 있습니다..

  • register_node () → 새 노드를 등록하고 네트워크에 추가하려면
  • valid_proof () → 체인에 제출 된 블록이 문제를 해결하도록 보장합니다.
  • valid_chain () → 체인의 후속 블록이 유효한지 여부를 확인합니다..

blockchain.py의 청사진은 다음과 같습니다..

class Blockchain (object) : def __init __ (self) : self.chain = [] self.current_transactions = [] def new_block (self) : #이 함수는 새 블록을 생성 한 다음 기존 체인 패스에 추가합니다. def new_transaction (self) : #이 함수는 이미 존재하는 트랜잭션에 새로운 트랜잭션을 추가합니다. @staticmethod def hash (block) : # 블록을 해싱하는 데 사용됩니다. @property def last_block (self) : # 체인 패스의 마지막 블록을 호출하고 반환합니다.

Blockchain 클래스는 전체 체인을 관리합니다. 클래스 아래에 정의 된 정의는 블록 체인 내의 다양한 작업을 관리합니다..

아래의 각 방법을 살펴 보겠습니다..

지금 읽기 : 블록 체인 샤딩이란? : 블록 체인 스케일링 솔루션 소개

블록의 구조

블록에는 트랜잭션 및 체인에 대한 중요한 정보가 포함되어 있습니다. 체인의 모든 블록에는 다음 정보가 포함됩니다.

  • 인덱스
  • Unix 시간의 타임 스탬프
  • 거래 목록
  • 증명
  • 이전 블록 해시

블록 내의 대부분의 정보는 자명합니다. 여기서 두 가지 중요한 변수는 이전 블록의 해시 값을 포함하는 previous_hash입니다. 이것은 블록 체인이 변경 불가능하고 악의적 인 행위자가 체인에 데이터를 업데이트, 삭제 또는 추가 할 수 없도록하기 때문에 중요합니다..

지금 읽기 : 블록 체인이 세상을 바꿀 이유?

블록에 트랜잭션 추가

블록의 구조를 이해 했으므로 이제 블록에 트랜잭션을 추가하는 방법을 알아 보겠습니다. 코드는 아래와 같습니다..

def new_transaction (self) : #이 함수는 기존 트랜잭션에 새 트랜잭션을 추가합니다. """이것은 다음 블록으로 전송 될 새로운 트랜잭션을 생성합니다. 보낸 사람,받는 사람 및 금액을 포함한 세 가지 변수가 포함됩니다. """ self.current_transactions.append ({ ‘sender’: sender, ‘recipient’: recipient ‘amount’: amount,}) return self.last_block [ ‘index’] + 1 보시다시피 current_transaction 목록에 세 가지 변수를 포함하는 객체 → 보낸 사람,받는 사람, 금액.

추가가 완료되면 메서드는 블록 인덱스를 체인으로 보냅니다. 채굴 될 다음 블록입니다..

새 블록 생성

새 블록 생성을 시작하기 전에 생성 블록을 생성해야합니다. 이렇게하려면 아래와 같이 간단한 코드 줄을 사용해야합니다..

self.new_block (previous_hash = 1, 증명 = 100)

이 라인은 블록 체인 클래스에 추가되어야합니다..

new_block () 메서드의 경우 두 개의 변수를 매개 변수로 보내야합니다. 증명 및 previous_hash를 포함합니다..

이제 아래의 new_block () 메서드를 살펴 보겠습니다..

def new_block (self, proof, previous_hash = None) : #이 함수는 새 블록을 만든 다음 기존 체인에 추가합니다. """이 메소드에는 두 개의 매개 변수 증명, 이전 해시가 포함됩니다.""" block = { ‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash : previous_hash 또는 self.hash (self.chain [-1]),}

# 현재 트랜잭션 목록을 비워 둡니다..

   self.current_transactions = [] self.chain.append (block) 리턴 블록

new_block의 코드를 설명하겠습니다. 세 가지 중요한 매개 변수를 포함하는 차단 목록을 만듭니다. 일단 정의되면 current_transaction 목록을 재설정하고 블록을 체인에 추가하는 코드도 작성합니다. new_block 메서드가 호출되면 블록을 반환합니다..

지금 읽기 : 초보자 가이드 : Ethereum Classic이란??

아래에서 last_block 메서드도 정의 해 보겠습니다..

@특성

def last_block (self) :

# 체인의 마지막 블록을 호출하고 반환

self.chain [-1] 반환

또한 hash () 메서드의 코드는 다음과 같습니다.

 

def hash (block) : # 블록 해싱에 사용 """다음 코드는 SHA-256 블록 해시를 생성하고 사전이 정렬되었는지 확인합니다.""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () 지금까지 모든 코드를 결합하면 다음과 같은 blockchain.py가 생성됩니다. 아래에서 확인하세요.

 

class Blockchain (object) : def __init __ (self) : self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def new_block (self, proof, previous_hash = None) : #This 함수는 새 블록을 만든 다음 기존 체인에 추가합니다. """이 메소드에는 두 개의 매개 변수 증명, 이전 해시가 포함됩니다.""" block = { ‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash : previous_hash 또는 self.hash (self.chain [-1]),} # Set 현재 트랜잭션 목록을 비워 둡니다. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self) : #이 함수는 기존 트랜잭션에 새 트랜잭션을 추가합니다. """이것은 다음 블록으로 전송 될 새로운 트랜잭션을 생성합니다. 보낸 사람,받는 사람 및 금액을 포함한 세 가지 변수가 포함됩니다. """ self.current_transactions.append ({ ‘sender’: sender, ‘recipient’: recipient, ‘amount’: amount,}) return self.last_block [ ‘index’] + 1 @staticmethod def hash (block) : # 해싱에 사용 블록 """다음 코드는 SHA-256 블록 해시를 생성하고 사전이 정렬되었는지 확인합니다.""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () @property def last_block (self) : # 체인의 마지막 블록을 호출하고 반환 return self.chain [ -1]

작업 증명 구현

blockchain.py 구축의 다음 단계는 작업 증명 구현입니다..

그렇다면 작업 증명이란 무엇입니까? 체인에 새로운 블록을 추가하는 데 사용되는 합의 방법입니다. 채굴 자에게 도전이되고 채굴자가 문제를 해결하면 블록이 확인됩니다. 광부는 그 대가로 문제의 복잡성에 따라 보상을받습니다..

Bitcoin의 작업 증명은 Hashcash로 알려져 있습니다. 비트 코인 네트워크 합의가 의도 한대로 작동하도록 보장합니다..

또한 읽기 : 합의 알고리즘 : 블록 체인 기술의 뿌리

proof_of_work () 메서드를 정의 해 보겠습니다. 이 메서드는 블록 체인 클래스의 일부가됩니다..

def proof_of_work (self, last_proof) : """이 방법은 합의 알고리즘이 구현되는 곳입니다. self와 last_proof를 포함한 두 개의 매개 변수가 필요합니다.""" proof = 0 인 동안 self.valid_proof (last_proof, proof)는 False : proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof) : """이 방법은 블록의 유효성을 검사합니다.""" guess = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (guess) .hexigest () return guess_hash [: 4] == "0000"

첫 번째 작업 증명 방법은 간단합니다. 증명을 0으로 설정 한 다음 while 루프를 실행하여 valid_proof 메서드를 실행합니다. False이면 증명에 하나를 추가하십시오..

0을 더 추가하여 해시의 난이도를 높일 수 있습니다..

이것은 우리를 Blockchain.py의 끝으로 인도합니다. 우리의 코드는 다음과 같습니다..

class Blockchain (object) : def __init __ (self) : self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def proof_of_work (self, last_proof) : """이 방법은 합의 알고리즘이 구현되는 곳입니다. self와 last_proof를 포함한 두 개의 매개 변수가 필요합니다.""" proof = 0 인 동안 self.valid_proof (last_proof, proof)는 False : proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof) : """이 방법은 블록의 유효성을 검사합니다.""" guess = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (guess) .hexigest () return guess_hash [: 4] == "0000" def new_block (self, proof, previous_hash = None) : #이 함수는 새 블록을 만든 다음 기존 체인에 추가합니다. """이 메소드에는 두 개의 매개 변수 증명, 이전 해시가 포함됩니다.""" block = { ‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash : previous_hash 또는 self.hash (self.chain [-1]),} # Set 현재 트랜잭션 목록을 비워 둡니다. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self) : #이 함수는 이미 존재하는 트랜잭션에 새로운 트랜잭션을 추가합니다. """이것은 다음 블록으로 전송 될 새로운 트랜잭션을 생성합니다. 보낸 사람,받는 사람 및 금액을 포함한 세 가지 변수가 포함됩니다. """ self.current_transactions.append ({ ‘sender’: sender, ‘recipient’: recipient, ‘amount’: amount,})

 

return self.last_block [‘index’] + 1

안녕하세요

def 해시 (블록) :

# 블록 해싱에 사용

“” “다음 코드는 SHA-256 블록 해시를 생성하고 사전이 정렬되었는지 확인합니다.” “”

block_string = json.dumps (block, sort_keys = True) .encode ()

return hashlib.sha256 (block_string) .hexdigest ()

@특성

def last_block (self) :

# 체인의 마지막 블록을 호출하고 반환

self.chain [-1] 반환

2. API 통합

좋아요, 우리는 작동하는 블록 체인을 만듭니다! 이제 효과적으로 사용하기 위해서는 API (Application Programming Interface)를 만들어야합니다..

이를 위해 널리 사용되는 Python Framework : Flask를 사용합니다..

Flask는 마이크로 프레임 워크이므로 가볍고 필요한 라이브러리를 추가 할 수 있습니다. 또한 Python 함수 끝점을 쉽게 만들 수 있습니다..

API를 생성하려면 먼저 블록 체인이 HTTP를 통해 요청을 수락 할 수 있는지 확인해야합니다. 그렇게하려면 더 많은 방법을 만들어야합니다..

이제 우리는 blockchain.py를 수정할 것입니다..

# 앱 노드 생성 app = Flask (__ name__) node_identifier = str (uuid4 ()). replace ( ‘-‘, ”) # 블록 체인 블록 체인 초기화 = Blockchain () @ app.route ( ‘/ mine’, methods = [ ‘GET’]) def mine () : 반환 "새로운 블록 채굴" @ app.route ( ‘/ transactions / new’, methods = [ ‘POST’]) def new_transaction () : return "새 거래 추가" @ app.router ( ‘/ chain’, methods = [ ‘GET’]) def full_chain () : response = { ‘chain’: blockchain.chain, ‘length’: len (blockchain.chain)} return jsonify (response) , 200 if __name__ == ‘__main__’: app.run (host ="0.0.0.0", 포트 = 5000)

코드는 대부분 자명합니다. 먼저 노드 초기화를 수행합니다. 다음으로 랜덤 노드를 생성합니다. 완료되면 Blockchain 클래스를 초기화합니다. 완료되면 아래와 같이 세 개의 엔드 포인트를 생성해야합니다..

  • / mine 끝점
  • / transactions / new endpoint
  • / chain 끝점

마지막으로 5000 포트에서 서버를 실행합니다..

이제 앱이 거의 생성되었습니다. 우리가해야 할 일은 트랜잭션 클래스 메서드를 만드는 것입니다..

@ app.route ( ‘/ transactions / new’, methods = [ ‘POST’]) def new_transaction () : values ​​= request.get_json () # 필요한 데이터가 있는지 확인 = [ ‘sender’, ‘ recipient ‘,’amount ‘] if not all (k in values ​​for k in required) : return’Missing values ​​’, 400 # 새 트랜잭션 인덱스 생성 = blockchain.new_transaction (values ​​[‘sender ‘], values ​​[‘recipient ‘ , values ​​[ ‘amount’]]) response = { ‘message’: f ‘트랜잭션이 Block No. {index}’}에 추가 될 예정입니다. return jsonify (response), 201

또한 읽으십시오 : 블록 체인 작업 증명에 대해 알아야 할 사항은 다음과 같습니다.

마이닝 엔드 포인트

우리가 만들 마지막 끝점은 마이닝 끝점입니다. 이렇게하려면 다음 세 가지를 수행해야합니다..

  • 작업 증명 계산
  • 새로운 블록 체인을 만들어 체인에 추가
  • 광부에게 그의 작업에 대한 보상

@ app.route ( ‘/ mine’, methods = [ ‘GET’]) def mine () : """여기서 우리는 작업 증명 알고리즘을 작동시킵니다.""" last_block = blockchain.last_block last_proof = last_block [ ‘proof’] proof = blockchain.proof_of_work (last_proof) # 채굴 자의 기여에 대한 보상. 0은 새로운 코인이 채굴 된 블록 체인을 지정합니다."0", recipient = node_identifier, amount = 1,) # 이제 새 블록을 생성하고 체인에 추가합니다. previous_hash = blockchain.hash (last_block) block = blockchain.new_block (proof, previous_hash) response = { ‘message’: ‘The new block 위조 됨 ‘,’index ‘: block [‘index ‘],’transactions ‘: block [‘transactions ‘],’proof ‘: block [‘proof ‘],’previous_hash ‘: block [‘previous_hash ‘]} return jsonify (응답), 200

지금 읽기 : 초보자 가이드 : AION이란? 세계 최초 3 세대 블록 체인 네트워크

3. 블록 체인 상호 작용

마지막 단계는 블록 체인과 상호 작용하는 것입니다. Postman을 사용하여 방금 만든 API를 사용하여 블록 체인 네트워크와 상호 작용할 것입니다..

Python 콘솔에서 아래 코드 실행

python blockchain.py

결론

이것은 블록 체인을 구축하는 방법의 끝으로 이어집니다. 위의 단계와 코드가 Python으로 블록 체인을 구축하는 데 도움이되기를 바랍니다. 따라서 초보자이고 블록 체인에서 경력을 쌓고 자하는 경우 무료 블록 체인 기본 과정에서 블록 체인 경력을 시작하는 것이 좋습니다. 우리를 공부 파트너로 선택하면 꿈의 직업을 얻지 못할 때까지 함께 할 것입니다..

그렇다면 블록 체인과 그 구현에 대해 어떻게 생각하십니까? 아래에 댓글을 달고 알려주세요..

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me