1. 비트코인이란?
사토시 나카모토는 2008년 금융위기를 보며 현재 우리가 신뢰하는 중앙 기관이 실제로는 신뢰하기 어려운 기관이라 생각했고 비트코인을 제안하게 되었다.
비트코인은 개인간의 전자 화폐 시스템로 P2P이다.
P2P란 Peer to Peer로서 인터넷에서 개인끼리 직접 연결되어 파일을 공유하는 것을 의미한다.
2. 탈중앙화
우리가 사용하고 있는 금융시스템은 금융기관을 통해서 전달된다.
비트코인은 어떤 중앙 기관없이 내가 가진 자산을 다른사람에게 전달할수 있는 시스템을 구현한다.
3. 이중지불의 문제
비트코인은 온라인 전자서명 시스템이 적용되어있고 이중지불을 막기위해 신뢰할수 있는 제3자를 놓아
이중 지불 문제해결의 솔루션을 제안한다.
전자 서명만 사용할때는 이중 지불을 막을수가 없기 때문에 우리는 일반적으로 중앙화된 기관이 필요하다.
비트코인은 이 중앙화된 기관 없이 이중지불을 해결하기 위해 거래 내용을 해싱하고 타임스탬프를 찍어서
해시 기반의 작업 증명을 연결한 사슬로 만들고 작업증명을 재수행하지 않으면 변경할수 없는 기록을 만든다.
일반적으로 우리가 알고있는 블록체인이란 단어가 여기서 나온다. 연결한 사슬이라는 것이 블록들을 체인 형태로 연결한 형태를 타임스탬프를 찍어서 기록한것.
블록체인이라는 데이터들을 안전하게 위변조가 되지 않게 해시 기반 작업증명을 통해서 안전하게 보관이 되고 생성이 되었다는 것을 증명할수 있는 기반이 되었다.
4. 비트코인을 알아야하는 이유
비트코인이 블록체인에서 가지고 있어야 할 철학적,경제적,기술적 특성을 모두 잘 포함하고 있기 때문이다.
실제로 코어를 개발하고 운용하는 사람들은 중앙화된 거래소나 중앙화된 서비스들을 어떻게 하면 탈중앙화할까 노력하고 기관들 없이 거래 할수 있는 방안들의 개발을 진행하고 있다.
5. 블록체인의 4대 요소 기술
(1) 블록과 트랜잭션 : 트랜잭션은 사용자의 송금내역이고 송금내역들을 하나의 블록에 포함시켜야만 안정성을 보장 할 수 있는 기반을 만들 수 있다. 그 블록들이 해시 알고리즘과 POW를 통해서 연결하는 형태가 블록체인이다.
(2) 분산 네트워크 : 사용자들이 언제든지 네트워크에 참여할수 있고 나갈수 있는 것이 분산 네트워크이다.
(3) 암호화 : 본인 증명뿐만 아니라 거래가 위변조 되지 않았다고 증명할 수 있다.
(4) 합의 알고리즘 : 분산 네트워크에서 중앙화된 기관이 없으니까 하나의 체인을 구성하는것이 중요하고 모든 분산화된 네트워크에서 모든 사용자들이 납득할수 있다.
하나의 거래내역이 필요한데 이걸 하나로 정리해주는 것이 합의 알고리즘이다.
합의 알고리즘은 일반적으로 POW만 부르는데 POW와 롱기스트 체인 룰을 포함해야 실제로 네트워크 기준으로 하나의 체인유지를 할 수 있다.
*POW (Proof Of Work) : 스팸메일을 방지하고자 고안된 작업증명
이메일을 보내기 위해 작업증명 알고리즘을 이용해서 해시값을 찾은것
새로운 블록을 블록체인에 추가하는 작업이 완료된것을 증명하는 것이다.
블록해시의 계산은 블록 헤더 정보의 논스값을 계산해서 구한다.
논스 값을 구하는게 작업증명이다.
6. 블록의 구성
블록은 특정 정보들을 담아놓은 객체이다.
(1) Header
- 버전정보
- 이전 블록의 해시
- 몇번째 블록인지 정보(블록 높이)
- 블록의 생성 시간의 정보(타임스탬프)
- 블록의 해시
- Body의 내용을 해싱한 값(머클루트)
- 채굴의 난이도
- 논수
(2) Body
- 블록에 저장할 데이터
블록에 대한 이해를 좀 쉽게 하기 위해서 Header,Body라고 구분했 뿐 따로 구분짓지는 않는다.
(3) 예시
const Block = {
version: "1.0.0", // 블록의 버전 소프트웨어/프로토 버전
previousHash: "", // 이전 블록의 해시
height: 0, // 블록 체인에 연결된 블록의 수, 블록이 생성된 순서는 높이로 표현한다.
timestamp: 15352524, // 블록 생성 시간
hash: "", // 해시 : 특정 블록을 식별할때 고유 식별자로 해시값을 사용한다. 해시값은 블록의 생성일,버전,비츠, 머클루트, 이전 블록의 해시, 논스라 불리는 임시값 등등 조합해서 해시로 변환해서 생성
merkleRoot: "", // block body의 내용을 해싱한 값 2진 트리 형태, 머클루트는 블록의 트랜젝션에 대한 내용이 저장되어 있고 트랜잭션의 내용들을 해싱해서 해시값으로 만든 트리구조가 머클 트리라고 한다. 머클트리의 루트에 대한 해시값이 머클루트이다.
bits: "", // 비츠 난이도 조절용 수치
difficulty: "", // 채굴의 난이도
nonce: "", // 논스는 최초에 0에서부터 시작해서 조건이 만족하는 해쉬값을 찾을때 까지 1씩 증가하는 계산 횟수
data: ["데이터"], // block body 내용 트랜잭션의 내용이 블록안에 데이터로 저장된다.
};
7. 머클트리
거래 정보의 해시값은 거래가 포함된 블록의 머클루트 계산에 입력값으로 사용되고 머클루트는 블록 해시의 계산 입력값으로 사용된다.
A블록이랑 B블록이 있다고 하자
'개발 > BlockChain' 카테고리의 다른 글
[BlockChain] TypeScript로 지갑 만들기 (0) | 2022.11.11 |
---|---|
[BlockChain] TypeScript로 P2P 구현 (0) | 2022.11.07 |
[BlockChain] TypeScript로 체인 만들기 (0) | 2022.11.03 |
[BlockChain] TypeScript로 블록 만들기 (1) | 2022.11.02 |
[블록체인] 자바스크립트로 블록 만들기 (0) | 2022.10.31 |