본문 바로가기
공부/파이썬 Python

블록체인의 기본 원리: 투명성(Transparency) with Python

by 혼밥맨 2022. 3. 26.
반응형

 

블록체인의 기본 원리: 투명성 with Python

 

 

블록체인의 투명성이란

블록체인 (Blockchain)의 투명성은 블록체인 시스템에서는 모든 정보를 공유하므로, 정보를 정확히 확인할 수 있는 특성입니다. 이 특성은 거래 장부는 모든 참여자에게 공유되는 개방성과 참여자는 거래 관련 정보를 객관적으로 알 수 있는 추적성으로 구성되어 있습니다. 대부분의 블록체인은 완전히 오픈 소스 소프트웨어입니다. 이것은 누구나 코드를 볼 수 있다는 것을 의미합니다. 이를 통해 감사인은 보안을 위해 Bitcoin과 같은 암호화 화폐를 검토할 수 있습니다.

 

튜토리얼

필요 라이브러리

1
import hashlib
cs

 

혼밥코인 클래스

1
2
3
4
5
6
7
 
class HonbobCoinBlock:
    
    def __init__(self, previous_block_hash, transaction_list):
        self.previous_block_hash = previous_block_hash
        self.trasaction_list = transaction_list
        self.block_data = "-".join(transaction_list) + "-" + previous_block_hash
        self.block_hash = hashlib.sha256(self.block_data.encode()).hexdigest()
cs

 

임의의 거래 내용

1
2
3
4
5
6
t1 = "Anna sends 2 HonbobCoin to Mike"
t2 = "Bob sends 4.1 HonbobCoin to Mike"
t3 = "Mike sends 3.2 HonbobCoin to Bob"
t4 = "Daniel sends 0.3 HonbobCoin to Anna"
t5 = "Mike sends 1 HonbobCoin to Charlie"
t6 = "Mike sends 5.4 HonbobCoin to Daniel"
cs

 

거래 내용 저장

1
2
3
4
5
6
7
8
9
10
11
12
 
initial_block = HonbobCoinBlock("Initial String", [t1, t2])
print(initial_block.block_data)
print(initial_block.block_hash)
 
second_block = HonbobCoinBlock(initial_block.block_hash, [t3, t4])
print(second_block.block_data)
print(second_block.block_hash)
 
third_block = HonbobCoinBlock(second_block.block_hash, [t5, t6])
print(third_block.block_data)
print(third_block.block_hash)
cs

 

출력 결과물

1
2
3
4
5
6
Anna sends 2 HonbobCoin to Mike-Bob sends 4.1 HonbobCoin to Mike-Initial String
b30b9d6fe2c86604beda1f33bdc5573b854fd6a6cbdcf65f7110e708f44bb21c
Mike sends 3.2 HonbobCoin to Bob-Daniel sends 0.3 HonbobCoin to Anna-b30b9d6fe2c86604beda1f33bdc5573b854fd6a6cbdcf65f7110e708f44bb21c
3181eb753533573b1e0be15dae6ed3e376aadb423107805db7ab019f7eb6925d
Mike sends 1 HonbobCoin to Charlie-Mike sends 5.4 HonbobCoin to Daniel-3181eb753533573b1e0be15dae6ed3e376aadb423107805db7ab019f7eb6925d
e37418b13cba5eabea888420436c55a707da6c3e9391b56dac7662f8e034b41f
cs

 

만약 Anna가 Mike에게 2 HonbobCoin이 아닌, 3 HonbobCoin을 준다면 hash값이 어떻게 될까?

 

 

Anna가 2 HonbobCoin을 전달했을 때의 Hash값

b30b9d6fe2c86604beda1f33bdc5573b854fd6a6cbdcf65f7110e708f44bb21c

 

Anna가 3 HonbobCoin을 전달했을 때의 Hash값

9fc61120816572b07a91085a0cd923972badb98bc9f77cbe29764f7ba42f0ac8

 

Hash 값이 조금만 변경된 것이 아니라 완전히 변경됐다. 그 이유는 블록체인의 투명성 때문이다. 블록체인은 그 누구도 숨길 수 없도록 거래 내역을 완벽하게 저장한다. 그리고 거래 내역은 누구에게 투명하게 공개 가능하다. 그렇기 때문에 거래 내역이 조금만 바뀌더라도 완전히 고유한 hash값을 갖게 된다.

 

Full Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import hashlib
 
 
class HonbobCoinBlock:
    
    def __init__(self, previous_block_hash, transaction_list):
        self.previous_block_hash = previous_block_hash
        self.trasaction_list = transaction_list
        self.block_data = "-".join(transaction_list) + "-" + previous_block_hash
        self.block_hash = hashlib.sha256(self.block_data.encode()).hexdigest()
  
 
t1 = "Anna sends 2 HonbobCoin to Mike"
t2 = "Bob sends 4.1 HonbobCoin to Mike"
t3 = "Mike sends 3.2 HonbobCoin to Bob"
t4 = "Daniel sends 0.3 HonbobCoin to Anna"
t5 = "Mike sends 1 HonbobCoin to Charlie"
t6 = "Mike sends 5.4 HonbobCoin to Daniel"
 
 
initial_block = HonbobCoinBlock("Initial String", [t1, t2])
print(initial_block.block_data)
print(initial_block.block_hash)
 
second_block = HonbobCoinBlock(initial_block.block_hash, [t3, t4])
print(second_block.block_data)
print(second_block.block_hash)
 
third_block = HonbobCoinBlock(second_block.block_hash, [t5, t6])
print(third_block.block_data)
print(third_block.block_hash)
cs

 

반응형

댓글