트랜잭션 수수료를 높이기 위해서 마이너들이 스팸을 가한다는게 정말인가요?
애슐리로 부터의 질문입니다.
안녕하세요 안드레스
마이너들이 스팸트랜잭션을 네트워크 에 가하고 그 트랜잭션만을 채굴하는 식으로 네트워크에 공격을 가해서 트랜잭션 수수료를 상승시킬수 있나요?
만약 가능하다면 스팸공격이 어떤식으로 이뤄지는지 자세히 좀 말해줄수 있나요?
에슐리 이게 쉬운 주제는 아닙니다.꽤나 논란거리죠.
음모론을이 워낙에 판을 치고 있고,거기서 어떠한 결론이든 이끌어 내는건 아주 어렵습니다.
어떤 트랜잭션이 올바른 것인지는 아무도 알수 없습니다.
지불용도로 만들어 졌는지,마이너들이나 어떤 세력들이 수수료를 올리려고 만든건지.
하지만 이론적 관점에서 보자면 가능합니다.
높은 수수료를 가진 수많은 트랜잭션들을 만들어내서,수수료 산정 메카니즘에 영향을 주는거죠.
네트워크 용량이 크면 클수록 채워야 할 양이 많아지므로
공격에 소모되는 비용은 더욱 더 비싸집니다.
이뤄지는 방식을 말씀드리자면,
일단 마이너들이 감당할수 있을정도여야 하죠.
자기들이 가한 스팸을 채굴해서 어느정도 회수가 가능해야 되구요.
이렇게 하는 편이 네트워크를 공격하기가 훨씬 쉬우니까요.
여기서의 관건은 마이닝 그룹이 얼마나 중앙집중화되었느냐가 되겠죠.
마이닝이 중앙집중화 되면 이런 공격을 하기가 훨씬 용이합니다.
분사화되면 될수록 성공하기가 어려워지고요.
트랜잭션을 만들어서 수수료를 올리기 위해서 돈을 소비하였을때,
다음 블럭을 본인이 아니라 다른 마이너가 채굴해버리면
트랜잭션을 만드는데 들어간 수수료를 다 잃어버리게 되니까요.
다른 마이너는 스팸트랜잭션으로 부터 이득을 얻게 되죠.
다른 마이너는 스팸트랜잭션으로 부터 이득을 얻게 되죠,
스팸을 발생시키는데 드는 비용을 들이지도 않고서 말이죠.
그리고 여전히 수수료는 또 올라갈테니까,일반인들에겐 일종의 경제적 재앙이 되겠죠.
이 경우에는 좋은 재앙이라 할수있겠지만.
마지막 질문은,비트코인이 어떻게 해야 이 문제를 해결할수 있을까 인데
문제는 두가지입니다.
일단 언제나 용량의 한계는 존재한다는것.
어떤 시스템이든 무한대의 용량이란 불가능합니다.
특히나 분산화와 보안을 추구하는 시스템에서는요.
그렇기에 용량의 한계를 이용해서 트랜잭션 비용을 올릴려는
시도는 언제든지 일어날겁니다.
진짜 문제는 Backend죠.
마이닝이 분산화 되었느냐,중앙집중화되었느냐.
다행스럽게도 마이닝칩이 무어의 법칙의 한계에 근접하게된 것의
영향을 우리는 볼수 있습니다.
그리고 다른 칩제조사들도 활동에 들어가고 있는중이죠.
그리고 비트코인 마이너들에게 자기들의 영토로 유치하려는
다른 나라들도 나타나고 있죠.
세금혜택이나 값싼 전기세를 내세워서 말이죠.
캐나타에서 마이닝에 많은 관심을 보였고,그외의 여러 나라들이 있습니다.
즉 많은 경제적인 압박이 가해지고 있기에,저는 장기적으로 마이닝은
분산화의 길로 들어갔다고 생각하고 있습니다.
어떻게 진행될지 한번 지켜봅시다.
어쨌든 이 사안에 대한 최선의 방지책은
수수료를 세세하게 설정가능한 지갑을 사용하시는 겁니다.
그리고 RBF라던 Child Pay For Parent같은 기능을 지원하는 지갑들을 사용하시면
낮은 수수료를 위해 네트워크에 대한 압박을 가하는 셈이 되는 겁니다.
뭐,가장 간단한 방법은 그냥 기다리는 겁니다.
급한 트랜잭션이 아니라면 그냥 결국에는 통과될떄까지 기다리는 거죠.
그러면 스패머들의 의도에서 벗어나게 되니까요.
Child pays for Parent가 뭡니까?
어떤식으로 작동하며,어떤 지갑들이 이 기능을 가지고 있나요.
일단,Gustavo의 질문이었습니다.
일단 말이죠,Gustavo.
CPFP는 사실 명확한 "기능"은 아닙니다.
경제적 인센티브를 이용하여 마이너들의 트랜잭션 선정에
인식되도록 하는 행동입니다.
무슨뜻이냐면
여러분이 컨펌이 안된 트랜잭션을 가지고 있다고 해봅시다.
그리고 이 트랜잭션에 종속되어있는 Child 트랜잭션이 있고,
이 역시도 컨펌이 안된 상태라고 해봅시다.
마이너로서 블럭에 포함될 트랜잭션을 산정할때
이 트랜잭션들의 수수료를을 따로따로 트랜잭션별로 판단해주기 보다는
2개 트랜잭션의 수수료를 동시에 판단해주기를 바라겠죠.
Child 트랜잭션에 많은 수수료가 매겨져 있고,Parent쪽에 낮은 수수료가 매겨져있다면
Child 트랜잭션은 절대 컨펌을 받지 못할겁니다.
왜냐면 Parent쪽이 언컨펌인 상태니까요.
아무 소용이 없는거죠.
하지만
이 2개의 수수료를 합산해서 고려할수 있게 된다면
Child쪽에 매겨진 높은 수수료로 Parent쪽이 가진 낮은 수수료를 상쇠시킬수 있는
상황이 되는거죠.
예를 들어 Parent쪽이 1sat/byte 의 수수료라고 해봅시다.
Child 쪽은 100sat/byte 이구요.
컨펌에 관해서 개별적으로 보면 Parent쪽은 No,Child 쪽은 Yes가 되겠죠.
하지만 그렇게는 못합니다.왜냐면 Child는 Parent가 컨펌나지 않는한
존재하지 않는것과 마찬가지니까요.
하지만 이 2개를 같이 받아 들이면
,결국 50sat/byte의 트랜잭션 2개가 되는것이고
여전히 넉넉한 수수료가 되니까,2개다 컨펌을 내리게 되겠죠.
이 전략은 이미 마이너들이 이용중입니다.
지갑에 이 기능이 추가되면,일단 마이너들이 이런 전략을
사용한다는것을 인지하게 되는 효과가 있으며,
사용자는 이걸로 이득을 취할수 있게 됩니다.
두가지의 방식으로 이득을 취할수 있습니다.
첫째로 여러분이 트랜잭션을 받는중이고,컨펌이 나지 않은 상태였을 경우
여러분에게 오기로 되어있는 컨펌이 나지 않은 트랜잭션에,
여러분 스스로 Child 트랜잭션을 만들수 있습니다.
많은 수수료를 가진 트랜잭션을요.
그 결과 마이너들은 그 많은 수수료를 가져가기 위해
2개의 트랜잭션을 모두 다음 블럭에 포함시키게 되겠죠.
즉 여러분이 높은 수수료를 지불하여 만든 컨펌나지 트랜잭션으로 인해서.
여러분이 받기로 되어있는 컨펌나지 않은 트랜잭션이 컨펌이 나게 되는거죠.
그러니까 여러분이 받기로 되어있는 컨펌나지 않은 Parent를 위해서
여러분이 Child를 만들어서 지불을 하는겁니다.
다시 말하자면 Parent가 컨펌을 받을수 있는 가능성을 높이기 위해,
수수료를 추가 시키는 겁니다.
이렇게 하면 정체된 트랜잭션을 통과시킬수 있게 되는겁니다.
저도 이 기능은 많이 이용 봤습니다.
저한테 오기로 되있는 트랜잭션의 수수료가 낮게 책정되어있길래
의도적으로 Child 트랜잭션을 만들어서 수수료를 추가시켰죠.
Electrum지갑을 이용해서 했는데,다른 지갑들도 이 기능이 있을겁니다.
당장에 목록을 불러드릴수는 없지만,구글로 검색해보시면 바로 알수 있을겁니다.
그런데 다른 활용법도 있습니다.
수신자만이 Child페이를 사용할수 있는게 아니라,송신자도 가능합니다.
왜냐면 거의 항상 당신이 트랜잭션을 보내고 나면
Change Payment가 당신에게 돌아오니까요.
그리고 이 Change output을 Parent로 삼아서 Child를 만들어서
수수료를 더할수 있습니다.
만약 여러분이 RBF를 사용하지 않았다면,Parent의 수수료에는
영향을 줄수가 없죠.
하지만 Child Pays for Parent를 대신 사용하여
뭐라고 할까,여러분의 송신한 트랜잭션의 Change Output에
높은 수수료의 Child를 덧붙임으로서 가속 시킬수 있는거죠.
여러분의 트랜잭션을 수신한 상대방이 CPFP를 하지 않더라도,
상대방은 CPFP가 뭐하는건지 아예 모르는 사람일수도 있으니까요.
여러분이 Change 트랜잭션에 Child를 생성시킴으로서
가속화 시킬수 있게 되는 겁니다.
재밌는 기능이죠.마이너들이 가진 기본적인
경제적 인센티브 메카니즘을 이용한 기능입니다.
여러분들도 가능한 지갑을 이용하셔서,트랜잭션을 가속 시킬수 있습니다.