비트코인의 트랜잭션 수수료는 비쌉니다. 조금이라도 아끼고 싶은 것이 인지상정. 얼마를 붙여 보내야 최적화된 알뜰한 전송이 될 수 있는지 계산하는 방법을 알아봅니다.
구글에서 bitcoin mempool 검색하면 여러 검색결과가 나오는데 그중에
https://dedi.jochen-hoenicke.de/queue/
이곳으로 들어갑니다.
최근 24시간 동안의 비트코인 멤풀(mempool)을 나타낸 그래프를 볼 수 있습니다.
멤풀(Mempool)이란?
비트코인 지갑에서 트랜잭션을 보내면 P2P연결된 다른 노드들이 유효성을 검증해서 올바른 트랜잭션인 경우 멤풀에 들어갑니다.
채굴자들은 멤풀에서 트랜잭션을 골라서(수수료 많이 들어있는 것 우선으로) 컨펌시킵니다. 그러므로 멤풀은, 0컨펌 상태의 트랜잭션들이 모여있는 가상의 공간인 셈입니다. 1컨펌이 나는 순간 그 트랜잭션은 멤풀에서 사라집니다.
일렉트럼같은 개인지갑에서는 트랜잭션 보낼 때 수수료를 얼마 붙일지 설정이 가능합니다.
너무 많이 붙이면 채굴자에겐 좋지만 보내는 사람이 돈을 낭비한 셈이 되고
너무 적게 붙이면 컨펌이 오랫동안 안나게 됩니다.
그러니 우리는 그때그때 멤풀 상태에 따라서 얼마를 붙일지 계산하는 것이 좋습니다.
멤풀 상태 자세히 보기
Period 필터링에서 최근 두시간(2h) 으로 하고 BTC(More Stripes) 를 선택해서 최대한 자세히 보도록 합니다.
톱니바퀴 모양으로 급격히 떨어지는 부분이 바로 컨펌이 나는 순간 입니다.
빨간 동그라미 부분에 마우스를 올려보면 6+: 201 tx 1,460 tx 라는 부분이 하이라이트 됩니다.
1바이트당 6사토시 의 수수료를 첨부해서 보낸 트랜잭션이, 저 때 컨펌이 나면서 멤풀에서 사라지고 1컨펌 처리가 되었다는 뜻입니다.
그 바로 밑의 1바이트당 5사토시 트랜잭션은 극히 일부만 컨펌이 나고 대부분은 다음 블록으로 밀렸다는 것을 알 수 있습니다.
그러므로 아마도 지금 바이트당 5사토시를 붙여보내면 오랫동안 컨펌이 안나겠지만 바이트당 6사토시를 붙여보내면 곧바로 컨펌이 나겠다는 것을 알 수 있습니다.
트랜잭션 1개의 크기는 몇 byte?
트랜잭션은 인풋과 아웃풋으로 구성됩니다. 그래서 인풋 주소의 개수와 아웃풋 주소의 개수에 따라 트랜잭션의 크기가 달라집니다.
인풋 1개, 아웃풋 1개로 딱 떨어지는 최소 크기의 트랜잭션인 경우 223바이트 정도가 나옵니다. 여기에 바이트당 6사토시를 붙여보낸다면
223 * 0.00000006 = 0.00001338 BTC 정도가 됩니다.
트랜잭션 사이즈 최소화 하는 노하우
일렉트럼 지갑을 예로 들어서 아래와 같이 Coins 탭으로 갑니다.
만약 Coins 탭이 안보이는 상태라면, 아래와 같이 메뉴에서 Coins탭을 보이게 할 수 있습니다.
3개의 주소중에서 하나만을 택해서 거기 있는 금액을 정확히 사토시단위까지 딱 떨어지게 다 써버리면 인풋 하나, 아웃풋 하나로 돼서 트랜잭션 용량이 최소화 됩니다.
위 스샷의 경우에 0.000119 BTC 가 들어있는 주소에서 오른클릭해서 Spend 메뉴로 들어가서
Amount 와 Fee 의 합이 정확히 그 주소에 들어있는 잔액만큼이 되도록 해서 다 써버리는 것이 좋습니다. 어차피 거래소 입금해서 다른 코인 사려고 하는걸테니 자투리까지 다 넣습니다. 자투리를 남기면 나중에 그 자투리 때문에 트랜잭션 인풋 주소 개수가 많아지게 됩니다.
그리고 Preview 버튼으로 들어갑니다.
빨간 밑줄 그은 4 sat/byte 부분이 멤풀에서 계산한 알뜰한 최소금액이 될 수 있도록 하고
인풋주소 한개, 아웃풋주소 한개로 맞춰서 트랜잭션 사이즈가 224 bytes 로 최소한이 되도록 했습니다.
인풋주소나 아웃풋주소가 많아지면 트랜잭션 사이즈가 커져서 결국 첨부해야할 수수료도 커지게 됩니다.
Sign 버튼을 누르고 Broadcast 버튼을 누르면 트랜잭션이 멤풀에 들어가게 되고
열심히 계산해서 적절한 수수료를 넣은 만큼, 바로 다음이나 다다음 블록에서 컨펌이 날겁니다.