Jason Dev
About
비트코인 노드 소유하기
published: 2023-12-24
last modified: 2024-05-11
bitcoin
umbrel
bitcoin node
raspberry pi
electrs
orbot

보통 우리가 사용하는 비트코인 지갑은 누군가가 운용하는 비트코인 노드와 연결된다. 이런 상황에서 트랜잭션을 전송하면 타인의 비트코인 노드를 통해서 트랜잭션이 전파된다. 만약 연결된 비트코인 노드가 트랜잭션을 전파해주지 않는다면 마냥 기다릴 수 밖에 없다.

나의 비트코인 노드가 있다면 누구도 믿지 않으면서 내 트랜잭션을 온전히 컨트롤할 수 있다. 현재 적정 수수료가 얼마인지, 내 지갑의 잔액이 얼마인지 등의 정보를 타인에게 의지하지 않고 내 비트코인 노드로부터 받아올 수 있다.

그렇다고 비트코인 노드를 반드시 소유해야만 한다고 생각하지는 않는다. 타인의 비트코인 노드가 내 트랜잭션을 전파해주지 않을 수는 있지만 트랜잭션 내용을 조작할 수는 없다. 비트코인 노드를 설치하고 운용하는데 드는 시간과 노력도 무시할 수 없다. 게다가 다른 블록체인 노드처럼 노드 실행에 대한 보상을 주지도 않는다.

하지만 비트코인의 철학에 공감하고 진정 비트코인을 좋아하는 사람이라면 비트코인 노드는 소유할 만한 가치가 있다. 비트코인 노드를 통해 내 돈을 내가 원할 때 내가 원하는 사람에게 보낼 수 있다.

또 한 가지 중요한 요소는 프라이버시다. 공개된 노드를 이용해서 내 지갑의 잔액을 조회하는 행위를 통해 나의 흔적을 남기게 된다. 이 과정에서 나의 IP 주소와 나의 비트코인 주소가 노출될 수 있다. 온전히 비트코인 생태계 발전을 위해 봉사하는 노드도 있겠지만 쌓인 데이터를 제 3자에게 팔 수도 있다. IP 주소를 통해 국가별로 분류된 데이터는 해당 국가의 정부나 기관에게 팔기에 좋은 상품이다.

준비물

컴퓨터

현재 시점(2023-12-24) 기준으로 700 GB의 저장 공간과 2GB의 메모리가 최소 요구사항이다. 메모리는 4 GB 정도는 되어야 안심할 수 있다. 저장 장치는 보통 SSD를 추천하지만 필자는 HDD를 사용 중이다. 그래서 그런지 umbrel 접속 시 많이 느리다.

집에 안쓰는 노트북이나 맥미니가 있다면 비트코인 노드로 활용하기 좋다. 만약 새로 사야하는 상황이라면 라즈베리파이 같은 저가 컴퓨터가 가성비가 좋다.

필자는 라즈베리파이4 8GB 모델에 1TB 외장 하드디스크를 연결했다. 소음 없이 발열을 제어하기 위해 알루미늄 케이스를 구입했다.

2024년 5월 코멘트: HDD가 너무 답답해서 SSD로 교체했다. HDD는 umbrel을 웹에서 접속할 때 5초 이상 걸리는 등 너무 느려서 사용하기 힘들다. 무조건 SSD를 사용할 것을 추천한다.

인터넷

비트코인 노드는 끊임없이 최신 블록 정보를 가져와야 하므로 항상 인터넷에 연결된 상태로 유지되어야 한다. 한 달에 약 200 GB 업로드, 20 GB 다운로드가 발생하며, 초당 50 KB의 업로드 속도가 보장되어야 한다.

비트코인 코어 설치하기

본인의 OS에 맞는 비트코인 코어 프로그램을 다운로드 받아서 설치한다. 만약 라즈베리파이 같은 저가 컴퓨터를 준비했다면 umbrel이나 start9와 같은 OS를 고려해보자. ios, android 화면과 비슷한 UI를 제공하며 앱스토어도 제공한다. 앱스토어에서 간편하게 클릭해서 비트코인 노드를 설치할 수 있다. 필자는 umbrel을 설치했다.

umbrel에서 비트코인 노드 설치하기

라즈베리파이4에 umbrel 설치하기

라즈베리파이4에 umbrel을 설치하는 방법은 umbrel 홈페이지에서 확인할 수 있다. 이 과정에서 16 GB microSD 카드가 필요하다.

umbrel 접속하기

umbrel 설치가 끝났다면 같은 네트워크 망에서 http://umbrel.local를 통해 umbrel 대시보드에 접근할 수 있다. 필자는 macOS 크롬에서 해당 도메인으로 접근이 안되는 문제가 있어서 사파리를 통해 접속하고 있다. IP 주소를 입력하면 크롬에서도 잘 되기는 한다.

아래처럼 앱스토어에 비트코인 노드 앱이 있다. 클릭해서 설치한다.

비트코인 블록 내려받기

비트코인 노드를 실행하면 블록을 내려받기 시작한다. 비트코인 초기부터 현재까지의 모든 블록을 내려받아야 하므로 시간이 꽤 오래 걸린다. 네트워크 상황에 따라 적어도 3일 길면 3주까지 걸릴 수 있다.

모든 블록을 내려받았다면 다음과 같은 화면을 볼 수 있다.

만약 다른 저장 장치에 블록 파일을 가지고 있었다면 리눅스 운영체제에 하드디스크를 연결해서 복사하자. ~/umbrel/app-data/bitcoin/data/bitcoin 경로에 블록 파일을 복사하면 된다.

지갑 연결하기

비트코인 노드의 동기화(블록 내려받기)가 끝났다면 사용하는 지갑과 연결할 수 있다. 그런데 비트코인 노드가 제공하는 데이터 구조가 지갑에서 사용하기에는 비효율적이라서 보통은 일렉트럼 서버를 활용한다. 일렉트럼 서버는 빠르고 효율적인 서비스를 제공하기 위해 캐시와 인덱싱을 사용하여 블록체인 데이터를 최적화한다.

umbrel 앱스토어에서 Electrs 앱을 설치한다. Electrs 앱을 실행하면 비트코인 노드와 동기화 작업을 수행하는데 시간이 제법 걸린다(HDD라서 그랬던 것 같다). 필자는 동기화 작업에 2, 3일 정도 걸렸는데, UI가 불친절해서 잘 되고있는 것인지 알기가 힘들었다.

Electrs 동기화 작업이 끝났다면 Tor 탭에서 주소를 복사한다. 이 주소를 지갑 설정에서 입력하고 연결이 잘 되는지 확인한다. Blue Wallet 모바일 앱을 기준으로 설명하자면 아래 경로에서 주소를 입력하면 된다.

Settings > Network > Electrum Server

필자는 연결에 성공했지만 가끔 연결이 끊기는 등 불안정했다. 연결이 되더라도 Tor 네트워크의 특성 때문에 많이 느렸다.

필자는 tailscale 같은 private VPN 서비스를 이용할 것을 추천한다. umbrel과 모바일 각 스토어에서 tailscale 앱을 찾아서 설치한다. tailscale 서비스 가입 후 각 앱에서 같은 계정으로 접속한다. tailscale 모바일 앱에서는 umbrel 접속 주소를 확인할 수 있고 그 주소를 Blue Wallet 설정에 입력한다. 포트 번호는 이전과 같이 50001을 유지한다.

비트코인 코어 API 사용해보기

설치된 비트코인 노드를 통해 비트코인 코어 API를 사용할 수 있다. 명령어를 입력하기 위해서는 터미널을 통해 umbrel에 접속해야 한다.

ssh umbrel@umbrel.local

접속에 성공했다면 비트코인 코어의 bitcoin-cli 명령어를 사용해보자. bitcoin-cli는 bitcoind 도커 컨테이너 내부에서 실행할 수 있다. 우선 bitcoind의 도커 컨테이너 ID를 알아내야 한다.

sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
c57cfcaf0cbe getumbrel/app-proxy:1.0.0 "docker-entrypoint.s…" 6 hours ago Up 6 hours
7722edab45cf getumbrel/umbrel-electrs:v1.0.2 "docker-entrypoint.s…" 6 hours ago Up 6 hours
0e621131faa9 getumbrel/tor:0.4.7.8 "tor" 6 hours ago Up 6 hours
e59c55659a9b getumbrel/electrs:v0.10.2 "electrs" 6 hours ago Up 34 seconds
dacc3e670ca4 getumbrel/app-proxy:1.0.0 "docker-entrypoint.s…" 6 hours ago Up 6 hours
1c37846aa19d purplei2p/i2pd:release-2.44.0 "/entrypoint.sh --sa…" 6 hours ago Up 6 hours
d44e9f29f33c getumbrel/umbrel-bitcoin:v0.7.0 "docker-entrypoint.s…" 6 hours ago Up 6 hours
dc329c831762 getumbrel/tor:0.4.7.8 "tor" 6 hours ago Up 6 hours
b88505a85e85 lncm/bitcoind:v27.0 "bitcoind -port=8333…" 6 hours ago Up 6 hours
e083d2d8a1f3 getumbrel/auth-server:1.0.5 "docker-entrypoint.s…" 6 hours ago Up 6 hours
32831628b57e getumbrel/tor:0.4.7.8 "tor" 6 hours ago Up 6 hours

bitcoind의 도커 컨테이너 ID를 이용해서 쉘을 실행하자. 쉘 실행에 성공했다면 이제 도커 컨테이너 내부에 있는 bitcoin-cli 명령어를 사용할 수 있다.

블록 정보를 출력하는 getblockchaininfo API를 호출해보자

sudo docker exec -it b88505a85e85 /bin/sh
bitcoin-cli getblockchaininfo
{
"chain": "main",
"blocks": 417034,
"headers": 842962,
"bestblockhash": "0000000000000000007c68bf197abd17c002c8da41b1f521b86423babfacd192",
"difficulty": 196061423939.65,
"time": 1466339852,
"mediantime": 1466337923,
"verificationprogress": 0.1342771111273334,
"initialblockdownload": true,
"chainwork": "0000000000000000000000000000000000000000001cf4db27e03aa83504eac7",
"size_on_disk": 83815614317,
"pruned": false,
"warnings": ""
}

umbrel 11버전부터는 웹에서 터미널에 접속할 수 있는 UI를 제공한다. 아래 경로로 접근할 수 있다.

  • Settings > Advanced settings > Terminal > Bitcoin Node

댓글 삭제 시 메일 주소가 필요합니다