위니브코인 구현

코인이름 : WenivCoin

트렌젝션

* t1 : 호준 -> 길동, 1 위니브코인
* t2 : 길동 -> 춘향, 2 위니브코인
* t3 : 춘향 -> 준호, 3 위니브코인
* t4 : 호준 -> 길동, 1 위니브코인
* t5 : 길동 -> 춘향, 2 위니브코인
* t6 : 춘향 -> 준호, 3 위니브코인

해쉬(sha256)

  • B1("hello world", t1, t2), B1.hash ->
  • B2(B1.hash, t3, t4), B2.hash ->
  • B3(B2.hash, t5, t6). B3.hash -> ...

image.png

image.png

블록에 담기는 Data(비트코인 예)

  1. 코인의 발송자
  2. 수신자
  3. 금액
import hashlib

hashlib.sha256('weniv CEO leehojun'.encode()).hexdigest() # 64글자
'1e36bc1dc1ef931b4d5965482000613c1e38228887d569130aa8c6bab176b545'
hashlib.sha256('weniv CTO leehojun'.encode()).hexdigest()
'8c1495b97c79ad53517f6d2787cee452f2b52fb69284cb66d2045373e2744918'
import hashlib

class WenivCoin:
    
    def __init__(self, 앞블록해쉬, 트렌젝션리스트):
        self.앞블록해쉬 = 앞블록해쉬
        self.트렌젝션리스트 = 트렌젝션리스트
        self.데이터 = ' - 트렌젝션 : ' + '\n - 트렌젝션 : '.join(트렌젝션리스트) + '\n - 앞 블록 해쉬 ' + 앞블록해쉬
        self.블록해쉬 = hashlib.sha256(self.데이터.encode()).hexdigest()
t1 = '호준 -> 길동, 1 위니브코인'
t2 = '길동 -> 춘향, 2 위니브코인'
t3 = '춘향 -> 준호, 3 위니브코인'
t4 = '길동 -> 호준, 1 위니브코인'
t5 = '길동 -> 준호, 2 위니브코인'
t6 = '길동 -> 준호, 3 위니브코인'
블록1 = WenivCoin('Initial_Text', [t1, t2])
print(블록1.데이터)
 - 트렌젝션 : 호준 -> 길동, 1 위니브코인
 - 트렌젝션 : 길동 -> 춘향, 2 위니브코인
 - 앞 블록 해쉬 Initial_Text
블록1.블록해쉬
'c5a8aafb10091ec3dbdc4a69fd37d159e5655a844eb02bf06b4677c77943bd3a'
블록2 = WenivCoin(블록1.블록해쉬, [t3, t4])
print(블록2.데이터)
 - 트렌젝션 : 춘향 -> 준호, 3 위니브코인
 - 트렌젝션 : 길동 -> 호준, 1 위니브코인
 - 앞 블록 해쉬 c5a8aafb10091ec3dbdc4a69fd37d159e5655a844eb02bf06b4677c77943bd3a
블록2.블록해쉬
'd4625b49036ac2934243cbe72f3ac5b49fad18520fdaad106657941ceadaaf4e'
블록3 = WenivCoin(블록2.블록해쉬, [t5, t6])
print(블록3.데이터)
 - 트렌젝션 : 길동 -> 준호, 2 위니브코인
 - 트렌젝션 : 길동 -> 준호, 3 위니브코인
 - 앞 블록 해쉬 d4625b49036ac2934243cbe72f3ac5b49fad18520fdaad106657941ceadaaf4e
블록3.블록해쉬
'f029d6f425343f3307df5aa3bdcfc8e14bab27ae2f4cb70a1db53357322a6368'

데이터 변조

image.png

image.png

t3 = '춘향 -> 준호, 1 위니브코인'
블록2 = WenivCoin(블록1.블록해쉬, [t3, t4])
블록2.블록해쉬
'bf58d50d76194b193e7b659ed5d90c50ea20b1b63c4bf8749f7cb822a9fc498b'
블록3 = WenivCoin(블록2.블록해쉬, [t5, t6])
print(블록3.데이터)
 - 트렌젝션 : 길동 -> 준호, 2 위니브코인
 - 트렌젝션 : 길동 -> 준호, 3 위니브코인
 - 앞 블록 해쉬 bf58d50d76194b193e7b659ed5d90c50ea20b1b63c4bf8749f7cb822a9fc498b
블록3.블록해쉬
'f803da32db04e11d60dc44901a374d46843effa8b7882f045ec05f984ae6176c'