마이너들은 어떤 편법을 쓰고 있나?
비트코인 세상에서 BIP91의 락인을 놓고 한동안 시끄러웠는데, 이제는 갑자기 UAHF가 이슈로 떠오르고 있습니다. 사실 UAHF는 BIP91이 (정확히는 Segwit2X를 위한) 성공하지 못할 경우 적용하겠다고 한 것으로, 현 시점에서 저게 강행될 이유가 없음에도 말이죠.
이런 혼란스러운 이면에는 마이너들과 코어 개발자/사용자 들 간의 정치적인 반목이 큰 원인을 차지한다고 생각합니다.
그렇다면 마이너들은 어떤 짓들을 하기 때문에, 이렇게 반목이 커진 걸까요? 사실 마이너가 없으면 PoW 기반의 암호화폐들은 동작할 수가 없고, 생태계에서 어쩌면 가장 중요한 축 중 하나를 담당하고 있는데 말이죠.
이런 궁금증을 풀기 위해 좀 검색해 보니 괜찮은 글이 나와, 번역 및 요약을 해 봅니다.
원문은 여기서 볼 수 있습니다.
Selfish Mining
기본적으로 마이너들은 새로운 블록 해시를 발견하면 즉시 블록을 만들어서 네트워크에 보내야 합니다. 그런데 그러지 않는 경우들이 있습니다.
이런 경우를 통칭하여 Selfish Mining 이라고 부르고 있는데요. 즉, 새로운 블럭을 발견했을 때 즉시 그 블럭을 네트워크에 보내지 않고, 그 위에 추가 블록을 계속 쌓는 것을 말합니다.
좀 더 자세히 살펴 보면 아래와 같은 순서가 됩니다.
- 새로운 블럭을 찾았습니다! 빙고!
- 그런데 내가 찾았다는 것을 알려주지 않습니다.
- 다른 마이너가 이전 문제를 계속 풀고 있을 때, 나는 새로운 문제로 넘어가 미리 문제를 풉니다.
- 적당히 블록이 쌓이면 한꺼번에 보내 버립니다. 그렇게 해서 내가 만든 블럭이 가장 긴 체인이 되면, 다른 사람들의 블럭을 무효화 시킬 수 있습니다.
즉, 다른 경쟁자가 새로운 문제로 넘어가는 것을 늦추고 나는 미리 들어가서 승리할 확률을 높이는 겁니다.
이 경우는 자신의 해시 파워가 상당히 높아서 최소 25~30% 정도는 될 때 가능합니다. 그 이하라면 오히려 내가 만든 블록이 다른 경쟁자들에 의해 무효화 될 수 있을 겁니다.
Validationless Mining
SPV Mining이라고도 불리는데, 네트워크의 노드들은 새로운 블럭이 전달되었을 때, 각 트랜잭션의 유효성을 판단해야 합니다.
그런데 이를 생략해 버리는 겁니다. 하나의 블록에는 버전 정보, 머클트리, 타임스탬프, 논스, 트랜잭션 데이터 등 많은 내용이 들어가는데, 다음 블록을 만들기 위해서는 이전 블록의 헤더의 해시값을 필요로 합니다.
그러니 블록 전체를 다 받기 전에 헤더만 먼저 받아낼 수 있다면, 조금 더 빠르게 다음 블록 생성으로 진행해 나갈 수 있습니다. 즉 블록 본체에 들어간 데이터는 검증하지 않아 버리는 겁니다.
Spy Mining
사실 이제는 솔로 마이닝으로 채굴에 성공할 가능성은 거의 없습니다. 마이닝 풀에 가입하여 작업을 진행하는 것이 일반적이죠. Antpool, F2pool, Slush 등 다양한 마이닝 풀들이 있는데, 이 풀들은 많은 수의 개인 참여자들로 이루어집니다.
한 풀에서 채굴을 성공하게 되면 즉시 그 위에 새로운 블록을 채굴하기 시작하는데, 이를 위해 채굴된 블록 헤더의 해시를 모든 참여자들에게 보내게 됩니다. 바로 다음 블록의 문제를 풀도록 하기 위한 것입니다.
블록헤더 자체는 크기도 작고, 대부분 참여자들과 풀이 직접 연결되기 때문에 매우 빠르게 전파됩니다.
앞서 언급했듯이, 특정 풀이 자신이 채굴한 블록을 일부러 안 가르쳐 줄 수 있기 때문에 만약 경쟁 풀이 채굴에 성공했는데, 내가 그것을 모르고 있다면 나는 엄청난 리소스 낭비를 하게 될 수도 있습니다.
그렇기 때문에 스파이를 보내게 되는 겁니다. 경쟁 상대의 풀에 노드를 하나 물려 두고, 경쟁자가 블록 채굴에 성공해 헤더를 바꾸면 나도 그 헤더를 기반으로 새 블록을 만드는 것이죠.
풀 입장에서는 어떤 노드가 스파이 짓을 하고 있는지 알기도 어렵고, 내가 채굴한 블록이 알려진다는 것을 제외하고는 큰 영향이 없기 때문에 대부분의 풀들은 서로 스파이 마이닝을 하고 있다고 알려져 있습니다.
그런데 여기서 추가적인 문제들이 발생할 수 있습니다.
스파이 마이닝의 경우, 경쟁자가 채굴한 블록 헤더의 해시만 이용하여 블록을 만듭니다. 즉 실제 트랜잭션 데이터가 없어서 유효성 검증을 할 수가 없습니다. 그렇기 때문에 만약 어떤 풀에서 잘못된 블록을 보내면, 이를 스파이 한 다른 풀들이 모두 이를 기반으로 새로운 블록을 만들기 시작하면서, 극단적인 경우에는 포크가 발생할 수도 있습니다.
또한 쉽지는 않지만 누가 스파이 노드인지 파악하게 되면, 해당 노드에만 엉뚱한 헤더를 전달해 주는 것도 가능합니다. 이 경우 그 정보를 믿고 다음 블럭의 채굴에 들어가게 될 경우, 모든 노력이 헛수고로 돌아가겠죠. 결과적으로 많은 자원이 낭비되는 것이고, 거시적으로 보게 되면 네트워크의 안정성을 떨어뜨리는 결과가 될 겁니다.
마지막으로, 역시 너무 많은 풀들이 스파이 마이닝을 하고 있기 때문에 생기는 일인데, 이런 스파이 마이닝을 하지 않는 정상적인 마이너들에 대해 일종의 51% 공격을 할 수 있게 될 수 있습니다. 몇 몇 마이너들이 손 잡고 그들이 51% 이상의 해시파워를 가지게 된다면, 이들은 단순히 자신들이 발견한 블록을 네트워크에 전파하는 것을 늦추는 것 만으로도 정상적인 마이너들이 만든 블록들을 무효화 시켜 버릴 수 있게 되는 것이죠.
마치며
사람들의 욕심은 끝이 없고, 경쟁에서 이기기 위해 어떤 짓이든 한다는 것을 적나라하게 보여주는 것이 아닌가 하는 생각이 듭니다.
그로 인해 탈중앙화의 이상은 온데간데 없이, 전체 사용자의 피해 따위는 아랑곳하지 않는, 이런 현상들이 반복되어 왔고 그 결과로 요즘의 혼돈이 온 것이라는 생각이 드는군요.
사실 ASICBOOST에 대해서도 정리해 보고 싶었는데, 너무 기술적이고 저도 모르는 부분이 많아 이 글에는 담지 못 했습니다.
조만간 좀 더 이해가 되면 정리해 보겠습니다.
탈 중앙화는 커녕 제국군의 다크베이더 같은 놈들일세
Upvoted & RESTEEMED!
좋은 내용이네요. 보팅 & 팔로 &리스팀 하고 갑니다^^
아주흥미로운이야기네요 잘보고갑니다^^
잘 읽었습니다. 많은 도움이 되었습니다.
좋은 정보 잘보고 갑니다^^
좋은 정보 보고 갑니다 감사합니다
재미난 이야기네요~마이닝을 하고있지 않지만 이런 이야기를 접하니 진짜 인간의 욕심은 끝이 없는게 느껴지네요.
구체적인 이야기를 들으니 더욱 이해가 빠르네요.
흥미진진합니다. 계속 해주세요. 기대할께요^^
알기 쉽게 설명해주셔서 감사합니다.
코인은 알면 알수록 마치 산넘어 산같네여...