블록체인 네트워크에서 스팸 방지와 블록을 검증하기 위한 시스템이다.
블록체인 상에서 블럭들은 굴비처럼 이전 체인의 해시를 가지고 매달려 있는 형태일 것이다. 그럼 만약에 저 연결된 블록들이 순서에 상관없이 중구난방으로 생성되 엉뚱하게 들러붙어있는 상태라면 저 거래가 언제 생성된지도 모르고 줄기는 아무 이유 없이 하나에서 여러게로 분화될 수도 있다.(블록체인에 기능 상에 수정사항이 있으면 하드포크라고 해서 쪼개지기도 한다.) 그래서 블록에 순서(index)랑 시간(timestamp)를 추가했다. 하지만 사람들은 블록체인을 누구나 볼 수 있다. 만약 어떤 공격자가 블록체인의 순서를 거꾸로 거슬러 올라가서 자신이 불만을 가지고 특정 거래내역을 삭제하고 그 앞에 있는 블록들을 자신의 바꾼 블록의 해시를 다시 넣어서 계속 최신의 블록에 다가갈때까지 다시 연산을 하면 노드가 2~3개만 있었다면 위조된 거래내역의 진실은 아무도 알 수 없겠지만 넷 이상이라면 모든 노드에다 물어보면 누가 거짓말을 하나 티가 나지만 다시 저 공격자가 압도적인 숫자의 노드를 만들어서 저런 위조를 동시에 한다면 조작에 성공함으로 블록체인이라는 기술은 신뢰성이 떨어질것이다. 그래서 이 문제를 비트코인의 창시자 사토시 나카모토는 간단하게 특정한 시간이 걸릴만한 '일'을 해서 블럭을 검증하는 일을 하는 컴퓨터 노드. 즉 채굴자를 블록체인 네트워크에 구성자로 둠으로 이 문제를 해결합니다. 채굴자들은 블록체인 네트워크에서 발송되는 거래들을 받아서 블록의 양식에 맞춰 하나의 블록에 담습니다. 그리고 채굴자는 블록의 마지막 변수인 nonce의 값을 해시값이 특정값 이하가 되도록 연산을 성공할때까지 합니다. 성공하면 다시 블록체인 네트워크가 전파합니다. 그럼 그 블록은 네트워크의 인정을 받습니다. 물론 거기서 컴퓨터들이 몰려서 연산을 해도 하나의 결과물이 나온다는 것도 확실하므로 사람들은 그 블록들을 신뢰할 수 있습니다.
위에서 얘기 했던 블록체인의 과거를 조작하는 방법은 이제 POW가 도입이 되면 조작하고 싶은 블록에서부터 최신의 블록까지 해시 연산을 할려면 블록 생성 주기에 따라 다르지만 비트코인 기준인 10분만 하더라도 3블록 거리라고 하면 30분인데 그 연산시간동안 또 다른 블록이 생성됩니다. 그리고 연산력이 더 투입이 될수록 성공 확률이 천문학적으로 적은 확률이 됩니다. 그렇지만 연산력이 더 투입이 될려면 채굴자들한테는 동기가 있어야합니다. 그것은 바로 블록체인 네트워크에서 통용되는 화폐의 생산권을 블록을 빨리 처리한 채굴자에게 주는 것입니다. 즉 이름그대로 채굴자가 되는 것입니다. 이것이 돈이 된다는 것을 본 사람들은 더 많은 연산력으로 경쟁을 하기 시작합니다. 더 네트워크를 안정적으로 돌아가게 합니다. 새로만들어진 코인도 정착이 됩니다.
연산량의 51%이상이 되면 블록체인의 최근 블록을 마음대로 조작할 수 있지만 이것을 하면 가치를 떨어뜨리는 일입니다.
현재 POW를 쓰는 블록체인과 코인은 많습니다. 하지만 퍼블릭 블록체인(사람들이 규칙만 지킨다면 자유롭게 접근이 되는 블록체인)에서의 POW는 현재 탈중앙화의 가치를 심각하게 위협하고 있습니다. 마이닝풀과 채굴자가 이윤의 극대화를 위해 개발자들을 위협한다든가.(비트코인 캐시 하드포크 사건) 마이닝풀과 채굴자들이 대부분 중국에 위치하고 있다는 것입니다. 중국 정부는 암호화폐에 대해 부정적인 입장입니다. 지금도 충분히 부정적인 규제와 입장이지만 더 심한 제재가 들어오면 채굴에 들어가는 연산량이 줄어들게 될것입니다. 그리고 네트워크가 불안정해지겠죠.
ps. 프로그래밍과 이론을 번갈아가면서 글을 써야 겠네요. 자료 찾아야하기도 해서.
ps. 질문이 있으면 남겨주세요. 매우 생략을 너무많이 해서 못 알아먹을만한 게 있을 수도 있습니다.