여러 번역도 있고 댓글들도 있는데...
번역도 엉망이고 댓글들도 전혀 엉뚱해서 좀 우습기도 하고 어이가 없네요.
DDoS와는 전혀 상관없구요.
DoS 입니다. 서비스거부공격이라는 거죠. 기존에 우리가 접하던 분산서비스거부 같은거와는 전혀 상관없습니다.
문제의 내용은 간단합니다.
보통 지갑으로 돈을 받으면 confirm이 되기 전까지는 쓸 수가 없습니다.
근데 여기에 한가지 예외가 있습니다.
자, 잠시 비트코인 지갑의 송금방식을 살펴봅시다.
비트코인의 작동방식중에 송금부분이 묘한 구조를 가지고 있는데요.
내가 1BTC를 받은후에 0.1BTC를 누군가에게 전송하게 되면
0.1은 보내려는 사람에게 가게되고 나에게 0.9가 일반적으로 그냥 남겠지 생각하지만
지갑내부에서는 0.9가 내지갑 주소를 하나 더 만들어서 내가 나에게 보내도록 하는 구조입니다.
위에서 말씀드린 예외 즉 컨펌 안되고도 쓸 수 있는 경우가 어떤 경우냐하면
내가 나에게 보낸 0.9는 컨펌이 없어도 쓸수 있는 것입니다.
그럼 문제가 뭐냐면...
거래는 이전 거래의 txid 즉 hash값을 포함하게 되는데요.
컨펌되지 않은 거래의 txid는 중간에 relay하는 곳에서 txid를 바꿔도 됩니다. 이건 원래 그렇게 해도 되는 겁니다.
즉, 컨펌되고 난후의 txid는 절대로 변하지 않지만 컨펌되지 전까지의 txid는 변경될 수 있다는 거죠.
자, 그럼 이제 예를 들어 어떻게 문제가 되느냐 살펴보죠.
내가 누군가에게 1BTC를 받았고 거기서 0.1을 누군가에게 보냅니다.
0.1은 누군가에게 가고 0.9는 내가 나에게 보내게 되고 트랜잭션은 브로드캐스트 되게 됩니다.
그리고 나서 바로 수초이내에 내가 0.4BTC를 또 다른 누군가에게 보냅니다.
이때 중간 중계하는 누군가가 악의적던 그렇지 않던 첫번째 txid를 바꾸고 그것이 블럭체인에 포함되는 경우에 문제가 발생되게 되겠죠.
왜냐구요?
두번째 거래는 첫번째 거래의 txid를 이전 거래항목으로 가지고 있기 때문이죠.
어떤 현상이 나타날까요?
두번째 거래는 절대로 confirm이 되지 않습니다. 이전거래 id 가 존재하지 않거던요.
누군가 일부러 거래id를 많이 바꾸어서 relay하고 있는거 같다는거죠.
오해하지 마시기 바랍니다. 이건 원래 가능한 일이고 잘못된 일이 아닙니다.
연속적인 송금이 많은 거래소나 풀등은 이럴 경우 송금이 컨펌이 안되는 경우가 많이 생기겠지요.
이게 이번 문제의 모든 내용입니다.
그리고 이 문제는 3자 지갑뿐만 아니라 레퍼런스지갑에도 동일하게 존재하는 것이구요.
그럼 우선 개인들은 어떻게 행동하면 되느냐인데요.
문제를 정확히 이해하셨다면 간단합니다.
개인들은 한번 코인을 보내고 두번째 보내기 전에 앞 거래가 1번이라도 컨펌되고 난 후에 보내면 아무 문제없습니다.
그렇게 하지 않을때 두번째 거래가 컨펌이 안나는 현상이 생길 수 있습니다.
거래소는 이거 좀 짜증나겠죠. 수많은 인출이 이루어지니 이렇게 하기가 힘들죠.
개발자들이 지갑업그레이드 해서 이런 경우생길때 지갑으로 두번째 무효한 거래를 환불되게 하겠다고 말하고 있네요.
쉽진 않겠네요.
이상입니다. 그럼 좋은 밤들 보내세요. ㅎㅎ