집돌이 공대남 IT

파이썬으로 이해하는 블록체인: Proof of Work와 거래 추가하기 본문

IT/파이썬

파이썬으로 이해하는 블록체인: Proof of Work와 거래 추가하기

집공이 2023. 7. 29. 12:00

안녕하세요! 공대남입니다.

이번 포스트에서는 우리는 블록체인의 복잡한 부분들을 탐색할 것입니다.

우리는 Proof of Work(작업증명) 개념을 도입하고, 우리의 블록체인에 거래를 추가하는 방법을 배워볼 것입니다.

1. Proof of Work

Proof of Work는 블록을 생성하고 블록체인에 추가하기 위한 어떤 작업의 증명입니다. 이는 블록체인 네트워크를 안전하게 유지하며, 무작위로 블록을 생성하거나 수정하는 것을 방지합니다.

Step 1: Proof of Work 추가하기

우리의 Block 클래스에 proof_of_work 메소드를 추가합시다.

class Block:
    def __init__(self, index, previous_hash, transactions, proof):
        ...
        self.proof = proof

    ...

    def proof_of_work(self, last_proof):
        proof = 0
        while not self.valid_proof(last_proof, proof):
            proof += 1

        return proof

    @staticmethod
    def valid_proof(last_proof, proof):
        guess = f'{last_proof}{proof}'.encode()
        guess_hash = hashlib.sha256(guess).hexdigest()
        return guess_hash[:4] == "0000"

Step 2: Blockchain 클래스에 Proof of Work 추가하기

이제 우리의 Blockchain 클래스에 proof_of_work 메소드를 추가합시다.

class Blockchain:
    ...

    def add_block(self, transactions):
        ...
        proof = self.proof_of_work()

        ...

    def proof_of_work(self):
        last_block = self.last_block
        last_proof = last_block['proof']
        proof = self.chain[-1].proof_of_work(last_proof)

        return proof

2. 거래 추가하기

블록체인의 핵심 기능 중 하나는 거래를 저장하는 것입니다. 이번 섹션에서는 우리의 블록체인에 거래를 추가하는 방법을 배워볼 것입니다.

Step 1: Blockchain 클래스에 거래 추가하기

먼저, 우리는 Blockchain 클래스에 거래를 추가하는 new_transaction 메소드를 만들어야 합니다.

class Blockchain:
    ...

    def new_transaction(self, sender, recipient, amount):
        self.current_transactions.append({
            'sender': sender,
            'recipient': recipient,
            'amount': amount,
        })

        return self.last_block['index'] + 1

Step 2: 블록 생성시 거래 처리하기

이제 블록이 생성될 때마다 현재 블록의 거래를 처리해봅시다.

class Blockchain:
    ...

    def add_block(self, transactions):
        ...

        # 거래를 블록에 추가
        block = Block(index, previous_hash, transactions.copy(), proof)
        self.chain.append(block)
        self.current_transactions = []

        return block

이제 우리의 블록체인은 거래를 저장하고, Proof of Work를 사용하여 블록을 생성하고 검증할 수 있습니다.

이는 블록체인의 핵심 요소이며, 이러한 요소들이 블록체인을 안전하고 믿을 수 있는 데이터 저장소로 만듭니다.

다음 포스팅에서는 블록체인 네트워크를 구축하는 방법과 블록체인의 다른 중요한 요소에 대해 더 알아보겠습니다.

그럼, 행운을 빕니다!

#태그: #블록체인 #Python #프로그래밍 #블록체인실습 #코딩 #Python블록체인 #작업증명 #ProofOfWork #거래 #블록체인거래