가볍게만 이해하는 블록체인과 해쉬
이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 강의 사이트와 유투브 채널을
오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
● 잔재미코딩 유투브 오픈
[구독해보기]
8. 가볍게만 이해하는 블록체인과 해쉬 (해쉬의 예)¶
새로운 해쉬값은 이전 해쉬값을 해슁한 값¶
In [161]:
import hashlib
data = b'Hello World'
hash_object = hashlib.sha256() # 어떤 해쉬 알고리즘 쓸래?
hash_object.update(data) # 어떤 값을 해슁할 것인가?
hex_dig = hash_object.hexdigest() # 16진수로 해쉬값을 리턴해줌
print(hex_dig)
In [162]:
hash_object.update(hex_dig.encode()) # 어떤 값을 해슁할 것인가?
hex_dig = hash_object.hexdigest() # 16진수로 해쉬값을 리턴해줌
print(hex_dig)
In [163]:
hash_object.update(hex_dig.encode()) # 어떤 값을 해슁할 것인가?
hex_dig = hash_object.hexdigest() # 16진수로 해쉬값을 리턴해줌
print(hex_dig)
- 하나의 블록은 index, timestamp, data, prev_hash를 가짐
- 각 블록의 해시는 블록의 인덱스, 타임스탬프, 데이터 및 이전블록 해시의 해시를 암호화 하는 해시
- 데이터는 원하는 어떤 데이터이든 가능함
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
In [192]:
import hashlib
class Block:
def __init__(self, index, timestamp, data, prev_hash):
self.index = index
self.timestamp = timestamp
self.data = data
self.prev_hash = prev_hash
self.hash = self.hash_block()
def hash_block(self):
hash_object = hashlib.sha256()
hash_data = str(self.index) + str(self.timestamp) + str(self.data) + str(self.prev_hash)
hash_object.update(hash_data.encode())
return hash_object.hexdigest()
- 각 블록은 이전 블록에 대한 정보를 위해 이전 블록까지를 대표하는 prev_hash 를 가져옴
- 그러면 첫번째 블록은 어떻게 prev_hash를?
- 첫번째 블록(genesis block)은 특별한 로직이든, 직접 만들든 한다.
In [193]:
import datetime
def create_genesis_block():
return Block(0, datetime.datetime.now(), "Genesis Block", "0")
- 블록체인은 기존 블록을 기반으로 새로운 블록을 만들어냄
In [194]:
def next_block(prev_block):
index = prev_block.index + 1
timestamp = datetime.datetime.now()
data = "Dave Block" + str(index)
return Block(index, timestamp, data, prev_block.hash)
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
- 블록체인 첫번째 블록 만들어보기
In [195]:
blockchain = [create_genesis_block()]
prev_block = blockchain[0]
- 리스트변수로 블록체인 여러 블록 체인으로 만들어보기
In [133]:
for index in range(10):
new_block = next_block(prev_block)
blockchain.append(new_block)
prev_block = new_block
print ("Block Index: " + str(new_block.index))
print ("Hash Value: " + str(new_block.hash))
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
체계적으로 전문가 레벨까지 익힐 수 있도록 온라인 강의 로드맵을 제공합니다
프로그래밍 연습
위 코드를 기반으로 다음과 같은 데이터를 가진 블록체인 리스트 만들 수 있도록 next_block 코드 수정해보기
위 코드를 기반으로 다음과 같은 데이터를 가진 블록체인 리스트 만들 수 있도록 next_block 코드 수정해보기
Block Index: 1 data = { "seller": "Dave", "buyer": "David", "amount": 100 } Block Index: 2 data = { "seller": "David", "buyer": "Alex", "amount": 120 } Block Index: 3 data = { "seller": "Alex", "buyer": "Mike", "amount": 150 }
In [196]:
def next_block(prev_block, data):
index = prev_block.index + 1
timestamp = datetime.datetime.now()
return Block(index, timestamp, data, prev_block.hash)
data = { "seller": "Dave", "buyer": "David", "amount": 100 }
new_block = next_block(prev_block, data)
blockchain.append(new_block)
prev_block = new_block
data = { "seller": "David", "buyer": "Alex", "amount": 120 }
new_block = next_block(prev_block, data)
blockchain.append(new_block)
prev_block = new_block
data = { "seller": "Alex", "buyer": "Mike", "amount": 150 }
new_block = next_block(prev_block, data)
blockchain.append(new_block)
prev_block = new_block
block = blockchain[1]
block.data
협업 과제1(남에게 설명하면, 자신이 배운답니다.!)
회문(palindrome)은 순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어와 문장을 의미함
스택과 큐를 사용해서 회문을 판별하는 함수를 만드세요
회문(palindrome)은 순서를 거꾸로 읽어도 제대로 읽은 것과 같은 단어와 문장을 의미함
스택과 큐를 사용해서 회문을 판별하는 함수를 만드세요
string을 stack에 넣으면 맨 마지막에 넣은 것부터 가져올 수 있음 string을 queue(FIFO)에 넣으면 맨 처음 넣은 넣은 것부터 가져올 수 있음 string을 stack과 queue(FIFO) 에 일단 넣은 후에, 각각 하나씩 꺼내어 비교하면 위 코드가 가능함
In [212]:
import queue
def palidrome(string):
data_list = list()
data_queue = queue.Queue()
for index in range(len(string)):
data_list.append(string[index])
data_queue.put(string[index])
for index in range(len(string) // 2):
data1 = data_list.pop()
data2 = data_queue.get()
print (data1, data2)
if data1 != data2:
return False
return True
print (palidrome('arstsra'))
협업 과제2(남에게 설명하면, 자신이 배운답니다.!)
다음 엑셀 파일에서 이름과 나이를 사전 변수에 넣고, 이름을 입력하면 나이를 알려주는 프로그램 만들기
다음 엑셀 파일에서 이름과 나이를 사전 변수에 넣고, 이름을 입력하면 나이를 알려주는 프로그램 만들기
본 자료와 같이 IT 기술을 잘 정리하여, 온라인 강의로 제공하고 있습니다
가장 빠르게 풀스택 개발자가 될 수 있도록, 최적화된 로드맵을 제공합니다
In [166]:
import openpyxl
# 엑셀파일 열기
wb = openpyxl.load_workbook('data/train.xlsx')
# 현재 Active Sheet 얻기
ws = wb.active
# ws = wb.get_sheet_by_name("Sheet1")
name_list = dict()
for r in ws.rows:
name_list[r[3].value] = r[5].value
#if name[0] == 'F':
# ws.cell(row=r[0].row, column=2).value = 'F'
# ws.cell(row=row_index, column=5).value = sum
print(name_list['Connolly, Miss. Kate'])
# 엑셀 파일 저장
# wb.save("score2.xlsx")
wb.close()
협업 과제3(남에게 설명하면, 자신이 배운답니다.!)
위 코드에서 스택 구조를 만들고, 남자만 이름을 넣은 후에, male 이라는 쉬트를 만들고 넣기
위 코드에서 스택 구조를 만들고, 남자만 이름을 넣은 후에, male 이라는 쉬트를 만들고 넣기