[Daily Post]는 매일매일 탐구한 내용을 간략하게 기록하는 포스트입니다.
따라서 정리되지 않은 내용과 추측을 포함하고 있을 수 있습니다.
더 체계적인 형식을 갖춘 글은 해당 카테고리의 포스트를 확인해주세요 :)

My Study

Blockchain A to Z

Section 3. 블록체인의 직관적 이해

  1. 채굴 작동방식: 암호화 퍼즐
  • 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가 각각 있기 때문에 검증이 가능하다
  1. 비잔틴 내결함성 (Byzantine Fault Tolerance)
  • 반역자가 있다는 것을 알고서도 합의를 이끌어 낼 수 있는 알고리즘이 필요하다
  1. 합의 프로토콜: 공격자에 대한 방어
  • 의도적으로 조작된 블록을 추가하는 경우, 멀리 떨어진 서로 다른 두 노드가 동시에 채굴을 완료하는 경우를 방지하기 위해서 온전한 합의 프로토콜이 필수적이다
    • PoW: Proof of Work
    • PoS: Proof of Stake
  1. 합의 프로토콜: PoW
  • 서로 다른 두 노드가 동시에 채굴을 성공한 경우
    • 서로 다른 두 체인이 형성된다
    • 그렇다면 각 체인에 대해 또 다른 블록이 추가될텐데, 둘 중 더 긴 형태를 띄는 체인이 이긴다
      • 왜냐하면 각 노드의 computing power가 동일하다고 할 때, 더 많은 노드들이 받아들인 chain에서 그 다음 블록을 찾아낼 확률이 더 크기 때문이다.
  1. 블록체인 데모

Section 4. 블록체인 만들기

  • Anaconda에서 Spyder 사용

PS 준비 시작

  • 주먹구구 식으로 푼다는 느낌이 강하게 들어서, 동빈나의 이코테 강의를 병행하기로 했다.
    • 문제에서 가장 먼저 확인할 내용: 시간 제한(수행시간 요구사항)
    • 시간제한이 1초일 때, N의 범위에 따라 시간 복잡도 허용치가 갈림
      • N <= 500인 경우, N**3
      • N <= 2000인 경우, N**2
      • N <= 100000인 경우, NlogN
      • N <= 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:와 같이 사용 가능