[Daily Post] 230613
[Daily Post]는 매일매일 탐구한 내용을 간략하게 기록하는 포스트입니다.
따라서 정리되지 않은 내용과 추측을 포함하고 있을 수 있습니다.
더 체계적인 형식을 갖춘 글은 해당 카테고리의 포스트를 확인해주세요 :)
My Study
Blockchain A to Z
Section 3. 블록체인의 직관적 이해
- 채굴 작동방식: 암호화 퍼즐
-
Golden Nonce가 만드는 Hash가 정답이라면, 정답은 어떻게 정해지는가?
- Target보다 낮은 Hash를 가져야 하고, Target은 보통 Leading Zero의 갯수로 표현된다
- 블록 안에 포함된 bits가 이 target을 의미한다.
- Bitcoin의 경우 20160 블록마다 Bits가 조정된다.
-
Nonce를 제외한 Prev.Hash, Data 등은 변경할 수 없다고 하는데, 처음에 등록되는 Data가 유효한 지는 어떻게 검증하는가?
- e.g. A가 B에게 1BTC를 전송했다는 Data가 있는데 A가 1BTC를 가지고 있지 않았다면?
- transaction validation을 어떻게 하는지
- A. 기본적으로 account에 대한 private, public key가 각각 있기 때문에 검증이 가능하다
- 비잔틴 내결함성 (Byzantine Fault Tolerance)
- 반역자가 있다는 것을 알고서도 합의를 이끌어 낼 수 있는 알고리즘이 필요하다
- 합의 프로토콜: 공격자에 대한 방어
- 의도적으로 조작된 블록을 추가하는 경우, 멀리 떨어진 서로 다른 두 노드가 동시에 채굴을 완료하는 경우를 방지하기 위해서 온전한 합의 프로토콜이 필수적이다
- PoW: Proof of Work
- PoS: Proof of Stake
- 합의 프로토콜: PoW
- 서로 다른 두 노드가 동시에 채굴을 성공한 경우
- 서로 다른 두 체인이 형성된다
- 그렇다면 각 체인에 대해 또 다른 블록이 추가될텐데, 둘 중 더 긴 형태를 띄는 체인이 이긴다
- 왜냐하면 각 노드의 computing power가 동일하다고 할 때, 더 많은 노드들이 받아들인 chain에서 그 다음 블록을 찾아낼 확률이 더 크기 때문이다.
Section 4. 블록체인 만들기
- Anaconda에서 Spyder 사용
PS 준비 시작
- 주먹구구 식으로 푼다는 느낌이 강하게 들어서, 동빈나의 이코테 강의를 병행하기로 했다.
- 문제에서 가장 먼저 확인할 내용: 시간 제한(수행시간 요구사항)
- 시간제한이 1초일 때, N의 범위에 따라 시간 복잡도 허용치가 갈림
N <= 500인 경우, N**3N <= 2000인 경우, N**2N <= 100000인 경우, NlogNN <= 100000000인 경우, N
Python 기초 문법
Data type
- Integer
- List: 리스트 = 배열 = 테이블
array = [[0] * m for _ in range(n)]을 통해 N by M 2차원 리스트 생성 가능
- Tuple: 대괄호가 아닌 소괄호로 감싸서 표현
- 한 번 선언된 값을 변경할 수 없다
- 리스트에 비해 상대적으로 공간 효율적
- 서로 다른 성질의 데이터를 묶어서 관리할 때: 최단 경로 알고리즘에서
(비용, 노드 번호)의 형태로 튜플 사용 - 데이터의 나열을 해싱 키 값으로 표현할 때: 튜플은 변경이 불가능하므로 리스트와 다르게 키 값으로 사용 가능
- 리스트보다 메모리를 효율적으로 사용해야 할 때
- Dictionary: 키와 값의 쌍을 데이터로 가지는 자료형
- 변경 불가능한 자료형을 키로 사용
- Hash Table을 사용하기 때문에 데이터의 조회 및 수정에 있어서 O(1) 시간 안에 처리 가능
if 'key' in dict_name:와 같이 사용 가능