한동안 만들어보고 싶었던 esplora 인덱스 노드를 연동한 비트코인 멤풀 노드를 드디어 만들게 되어 기록으로 남길겸 글 써봅니다.
2년전 펄크럼 노드 만들면서 써둔글이 있으니 과거 내용은 아래링크 참고하시면 될거 같습니다.
https://www.clien.net/service/board/cm_vcoin/18729087CLIEN
요약 : 비트코인 메모리풀 구동하기 위해 필요한 인덱스는 크게 3종.
electrs , fulcrum, mempool/electrs(esplora포크버전)
esplora가 성능과 기능이 가장 뛰어난데 리소스요구량이 많아 시도 못하다가 드디어..(설치시 SSD 4TB 필요)
들어가면서.
진정한 탈중앙화와 보안을 위해서는 개인 노드 운영이 필수라고 생각해서 노드 돌린지도 어언 8년정도되는거 같습니다. 처음엔 500 GB sd 메모리 카드를 라즈베리에 꼽아서 돌려고 충분했었는데 어느새 노드 크기도 1TB에 가까워지고 있네요.
총 3대의 비트코인 노드를 구동중이고 아래처럼 구성하고 있습니다.
하드웨어 : J4105(12GB) , i3-3220(12GB), i3-4330 (16GB)
저장소 : 500GB SSD+1TB HDD, (180GB + 250GB) SSD + 1TB HDD, 4TB SSD + 1TB HDD
네트워크 : SK브로드밴드, KT, 유플러스 ( 세 노드는 서로 링크) - 맘 같이선 스타링크도 한대 돌려보고 싶습니다.
비트코인 코어는 버전별로 각각 설치 28.3 29.3 30.2
인덱스 서버는 펄크럼 1.x버전을 사용하다가 최근 2.1로 업그레이드 하고. 한대는 esplora의 수정 버전인 mempool/electrs 3.3설치
처음에 기본 일렉트럼서버인 electrs를 사용할때는 트랜젝션 조회때 아래같은 에러를 자주 만나곤 했는데.
펄크럼으로 업그레이드 하고서는 쾌적하게 사용중이었습니다.
그런데 2년전에도 그랬었지만 esplora를 한번 써봐야지 했었는데.. 2.5TB SSD로 도전했다가 인덱스 동기화에 실패한 후 잊어버리고 있었는데 최근에 4TB SSD를 가지고 드디어 성공했습니다.
esplora는 블록 스트림이 자사 서비스용으로 개발해서 공개했었는데 mempool.space팀도 처음에는 이걸 가져와서 사용하다 성능상의 한계와 버그로 인해 포크해서 자신들만의 mempool/electrs를 개발했습니다.
mempool적용이 목표라 esplora대신 mempool/electrs를 설치..
현재 기준 디스크 필요 용량은 ( 블럭 938407 기준 )
비트코인 코어 : SSD로 저정하는 chainstate + indexes 86GB + HDD에 저장하는 Blocks 767GB
펄크럼 2.1 : 182GB
mempool/electrs 3.3 : txstore 1.1TB + history 736G = 총 1.8TB 입니다.
mempool/electrs은 트랜젝션과 히스토리 데이터를 인덱싱 할때 압축 후 저장을 하는데 실제 저장공간의 2배 공간이 있어야 인덱싱을 완료할수 있습니다. 즉 작업 끝나고 현재 용량은 2TB지만 각 데이터를 인덱싱할때 1TB이상의 추가 공간이 있어야 인덱싱이 완료되고 운영이 가능합니다.
mempool/electrs(esplora수정버전)의 장점..
기존 펄크럼 이용시에는 특정 주소 검색시에 아래와 같이 최종잔액 과 과거 트랜젝션만 나왔는데.

새로 만든 노드에서는 과거 밸런스 기록과 unspent Output까지 추가로 표시해줍니다. 그리고 좀 더 빠르네요.

마지막으로 개인 노드로 뭐에 쓸수 있냐고 수익은 얼마냐고 가끔 물으시는 분들이 계신데.
그냥 노드만 돌리는걸로 수익이 나진 않습니다.
수익을 고려하시면 채굴기를 연결해서 솔로 채굴도 해보실수도 있고 - 수익이 날 확률은 매우 낮습니다.
라이트닝 노드로 추가하셔서 유동성 공급하면서 수수료를 얻으실수도 있겠네요. - 전 하다가 수익이 안나서 포기했습니다.
전 주로 현재 네트워크의 트랜젝션 현황을 따지거나. - 전송수수료 계산

메모리풀 누적된 트랜젝션을 모니터링 하거나

그리고 가끔 네트워크 총 해시를 감시합니다. - 채굴 원가를 계산해서 구매 가격선을 결정합니다.

그리고 비트코인 전송할때 내 하드웨어 지갑을 내 노드를 연결해서 외부 도움없이 직접 전송합니다.
그럼 관심있으신분들께 도움이 되셨으면 합니다.