합의 - consensus
블록체인에서는 각각의 노드에 원장을 갖고 있다.
그래서 현재 하려는 트랜잭션이 맞는지 노드들끼리 합의를 한다.
POW
Proof Of Work - 블록체인에서 신규 블록을 제안하기 위해서 해야 하는 일
작업을 증명하면 신원을 몰라도 신규 블록을 제안할 권리를 가진다.
합의 알고리즘
합의하는 방법이 몇가지 있다.
POW
지금의 블록에는 해시 값이 있다.
nonce 는 현재 블록을 해시한 값을 바꾸기 위한 임의 값이다.
hellonode를 100 번 해시해도 항상 같은 값이 나온다.
1 + hellonode 를 해시하면 다른 값이 나온다.
nonce + <해시값> 을 하면 다른 해시 값이 나오는 것이다.
BFT-variants - BFT 기반 합의 알고리즘
- 작은 그룹 (참여 노드가 20개 미만)에서 빠르다.
- 참여자가 많아지면 느려진다.
POW는 51%면 장악할 수 있다.
BFT는 2/3는 되어야 장악할 수 있다.
블록체인들의 비교
퍼블릭, 프라이빗 블록체인 구분 기준
누구든지 기록된 정보를 읽을 수 있는지.
명시적인 등록, 자격취득 없이 블록체인 네트워크에 등록 할 수 있는지
누구든지 읽고, 등록 가능하면 퍼블릭.
유형별 블록체인
공개키 암호화와 전자서명
대칭키 암호화 - 암호화랑 복호화를 같은 키로 하는 방식
비대칭키 암호화 - 암호화, 복호화에 다른 키를 사용하는 방식 = 공개키 암호
공개된 키로 암호화한다.
비밀키로 복호화한다.
전자 서명 - 이 암호를 보낸 사람이 본인이라는 증명
나는 개인키로 암호화 해서 서명을 보낸다.
상대방은 공개키로 서명을 복호화해서 내가 보냈음을 확인한다.
블록체인에서 사용되는 암호화 기법
1. 네트워크 참여자가 모두 똑같은 원장을 공유해서 투명한 거래가 가능하다.
2. 원장은 어느 주소에 BTC가 있는지는 기록한다.
그러나 그게 누구에게 속하는지는 기록하지 않는다. - 익명성
비트코인 지갑 주소는 hash 값이지만 64글자가 안 넘는다.
조금 짧다. 대부분의 블록체인 주소는 공개키로부터 도출 된 값이다.
공개키 암호화를 사용한 소유권 증명
비트코인
임의의 주소 0x0xx234238410xx (유저1) 에 10 btc 가 있다고 가정할때
0x0xx234238410xx (유저 1) 에서 다른 주소 00xx329ea21302 (유저 2)로 5BTC를 전송하려면
0x0xx234238410xx (유저 1)로 변환되는 공개키와 짝을 이루는 비밀키로 해당 거래를 서명할 수 있어야 한다.
거래를 만들기 위해서는 이전에 자신이 10BTC 소유권이 있다는 것을 증명해야 한다는 말이다.
증명하기 위해서는 개인키로 서명을 해야한다.
그러면 그 서명한 것을 공개키로 검증할 수 있다.
거래를 그림으로 보면 이런 구조다.
실제 트랜잭션의 생김새는 여기서 확인할 수 있다.
https://www.blockchain.com/btc/tx/c30b8ad8dd4daa31f417d09b10de0b9af2906d6c9cfa582fa174693a13f027c6
Confirmation / Finality
Confirmation 은 블록체인 네트워크 상에서 인증을 받는 것을 말한다.
해당 거래가 네트워크 상에서 처리되었음을 의미한다.
Confirmation 은 숫자로 보통 표시된다.
Confirmation 숫자는 트랜잭션이 블록에 포함된 이후 생성된 블록의 숫자를 말한다.
3 Confirmation은 첫번째 블록의 컨펌 이후에 두개의 블록이 추가된 것을 말한다.
비트코인의 경우에는 6 Confirmation이 되어야 승인 된다.
6번 동안 Confirm 되는 것은 정확도가 99.9%이다.
'프로그래밍' 카테고리의 다른 글
프론트엔드 웹 서비스에서 우아하게 비동기 처리하기 (feat. Toss Slash 컨퍼런스) (0) | 2021.07.15 |
---|---|
블록체인 / 이더리움 / 클레이튼 / 트랜잭션 (0) | 2021.07.14 |
블록체인 앱 개념도 (0) | 2021.06.18 |
solidity 디앱개발 시작 (0) | 2021.06.17 |
git rebase 하는 방법 (0) | 2021.05.14 |
댓글