블록체인 관련 정리
블록체인( = DB + 네트워크 )
네트워크 내에서 정보를 투명하게 공유할 수 있도록 하는 데이터베이스 메커니즘
블록(hash, previous block hash, data, …)과 블록이 체인형태(hash)로 연쇄적으로 연결
네트워크에서 관리되며, 네트워크 참여자 전원은 모두 같은 블록체인을 유지
네트워크의 합의 없이 체인을 삭제하거나 수정할 수 없다
트랜잭션의 데이터베이스이며 네트워크 상의 수 많은 컴퓨터에서 업데이트되고 서로 공유
트랜잭션 정보를 기록한 일종의 분산장부로써, 각 노드가 각각의 장부를 가지고 있고 이 장부의 내용은 합의 알고리즘에 의해 동일하게 유지된다.
블록체인 네트워크
P2P(Peer to Peer)네트워크
네트워크 참여자가 곧 서버(노드)이다
각 노드에 블록체인에 기록되는 모든 데이터(원장: Ledger)가 저장된다
스마트 컨트렉트
A collection of code and data that is deployed using cryptographically signed transactions on the blockchain network
계약 내용을 스마트 컨트랙트 소스 코드로 작성하여 블록체인 네트워크에 전송하면 네트워크 참여자(노드)들의 유효성 검증이 이뤄지며, 검증 완료 시 해당 스마트 컨트랙트가 포함된 블록이 생성되며 배포됩니다
미리 정해진 조건이 충족되면 자동으로 실행되는 블록체인 시스템에 저장된 프로그램
블록체인에 저장된 컴퓨터 프로그램, 블록체인 상에서 구동된다
스마트 계약은 한 사용자의 트랜잭션 또는 다른 계약에서 실행하려고 할 때만 실행됩니다.
이더리움 노드를 실행
인터넷에 연결된 컴퓨터에서 클라이언트 소프트웨어를 실행하는 것
이더리움 블록체인의 복제품을 다운, 모든 블록의 유효성을 검증, 새 블록과 거래정보를 최신으로 업데이트, 다른 다운로드 및 업데이트를 자신의 사본으로 지원
분산형 세계 컴퓨터
EVM은 모든 이더리움 노드에서 로컬 인스턴스로 실행되지만 EVM의 모든 인스턴스는 동일한 초기 상태에서 작동하고 동일한 최종 상태를 생성하기 때문에 시스템 전체가 단일 "월드 컴퓨터"로 작동합니다.
블록체인 네트워크 노드, 암호화폐
공개키 암호화
암호화된 내용은 해당 공개키의 쌍인 개인키(공개키의 소유자만 가짐)로만 복호화할 수 있는 암호 알고리즘입니다.

블록체인에서 사용자 계정이 공개키-개인키 쌍으로 관리됨

암호학적 해시 함수
해시 함수 : 어떠한 데이터를 고정 크기의 데이터로 매핑해주는 함수
암호학적 해시 함수 : 다음의 다섯 가지 특징을 만족하는 해시 함수
1.결정론적(deterministic): 동일한 입력값은 항상 동일한 해시 생성
2.빠른 계산 속도
3.일방향 함수(one-way), 불가역적
: 원래 데이터로 해시값을 얻는 것은 쉽지만, 해시값으로부터 원래 데이터를 알아내는 방법은 동일한 해시가 나올 때까지 모든 경우의 데이터를 해시 함수에 넣어보는 수밖에 없습니다.
4.다른 입력값에서 같은 해시값이 나오는 경우는 거의 불가능
5.입력값이 1 bit 라도 변경되면 전혀 다른 해시값이 생성
암호화는 양방향성(암호화, 복호화) 이지만,
암호학적 해시 함수는 일방향성(원본->해시값 은 가능, 해시값->원본 은 불가능)이다.
암호학적 해시 함수는 의도적으로 다른 값을 넣어서 동일한 해시 값을 얻을 수 없습니다.
대표적인 암호학적 해시 함수는 MD5, SHA 가 있으며 MD5 은 128 bit, SHA-1 은 160 bit 의 해시 결과를 생성합니다.
블록체인은 암호학적 해시 함수를 이용하여 각 블록의 내용을 검증합니다.
합의 알고리즘
합의 : 네트워크 참여자(블록체인 노드)들이 트랜잭션(거래) 처리 결과를 동의하는 과정, 블록 단위로 이루어짐.
참여자 노드가 최신 블록을 검증
새로운 블록이 유효한지 검증하여 검증된 블록을 네트워크로 전파합니다.
이렇게 합의를 한 블록들이 쌓이면서 계속해서 새로운 블록이 이전의 블록을 기반으로 쌓인다.
작업 증명 (Proof of work)
블록체인은 특정 시간 (ex. 10분) 단위로 P2P 의 모든 거래 내역을 모아서 하나의 블록을 생성합니다.
현재까지 생성된 모든 블록들에 대한 chained-timestamp 를 생성하는데, 새로운 블록이 추가되기 위해서는 해당 블록의 암호화된 해시가 필요합니다.
이때 각 블록의 해시값은 (이전 블록의 해시값 + 현재 블록의 거래 내역들 + Nonce) 를 해시한 값입니다.
Nonce : 암호화 임시값, 임의의 숫자
이렇게 새로운 블록에 대한 해시값을 찾아내는 작업을 작업 증명이라고 하며, 결국 조건에 맞는 32 bit 길이의 Nonce 값을 찾는 작업입니다.
예를 들면, 새 블록의 해시값은 앞자리 10 bit 가 0 이어야 한다고 하면, 해당 조건에 맞는 해시값이 나오는 Nonce 값을 찾아야 합니다. 암호학적 해시 함수의 일방향적인 특성 때문에, Nonce 를 무작위로 넣어서 조건에 맞는 해시값이 나오도록 계속 시도해야 합니다.
블록체인은 중앙화된 서버가 없으므로 이 역할을 해주는 대상이 필요한데, 바로 블록체인 네트워크의 참여자 노드들이 이 역할을 수행합니다.
이렇게 작업 증명을 수행하는 과정을 채굴(mining)이라고 하며, 채굴을 하는 사람(노드)을 채굴자라고 합니다.
새로운 블록에 대한 해시값을 찾아낸 사람이 chained-timestamp 를 생성할 수 있고, 작업 증명을 끝낸 최초의 사용자에게 incentive 를 지급합니다. (이렇게 지급한 incentive 가 화폐로 작동, 화폐 제조 및 발행 기능도 분산화)
이렇게 Nonce 값을 찾는 과정은 결코 몇 초 안에 이루어질 수 있는 계산이 아닙니다. (암호학적 해시 함수 특성 때문)
지분 증명 (Proof of Stake)
지분 증명은 작업 증명 방식이 채굴자 간의 경쟁을 유도하여 엄청난 에너지를 소비한다는 비난 속에서 생겨난 알고리즘이다. (작업 증명에서 Nonce 값을 찾아내는 데에는 컴퓨팅 자원을 사용하니, 그만큼 전력량을 많이 쓰게 됩니다)
지분 증명은 새로운 블록을 검증할 때 검증자들의 투표로 정하는 방법입니다.
더 많은 지분(코인)을 가질수록 블록을 기록할 권한이 더 많이 부여되며, 각 노드는 자신이 합의하는 블록에 자산을 증명함으로서 데이터를 업데이트합니다.
즉, 자신이 가진 자산을 해당 블록에 보여주면서 자신이 정당하다고 생각하는 블록에 '동의'를 하는 것입니다.
그 결과 과반수의 '자산'이 동의한 블록이 더 빠르게 긴 블록들을 형성하게 됩니다.
각 노드들의 투표는 예치된 금액만큼 가중치를 가지므로 인센티브의 형태가 작업 증명과는 달리, '이자'의 개념입니다.
이와 관련해서 'Nothing at Stake' 등 이 있다