비트코인 노드 22.0 기준 API에서 RPC 호출 시점에, "No wallet is loaded"라는 에러를 확인했다. 해당 서버의 기존 노드 클라이언트 버전이 0.21.0 이었고, 이번에 22.0 버전으로 업데이트했으니 아무래도 클라이언트 버전이 올라가면서 발생한 이슈라고 판단했다.
RPC 노드에서 반환한 에러 메세지는 아래와 같았다.
# No wallet is loaded 에러 (code = -18)
JsonRpcException (
super=kr.co.blockcom.coinbridge.core.jsonrpc.JsonRpcException:
Error -18: No wallet is loaded.
Load a wallet using loadwallet or create a new one with createwallet.
(Note: A default wallet is no longer automatically created), code=-18
)
원인
문제 원인은 비드코인 노드 클라이언트에서 wallet 데이터를 필수적으로 체크하기 시작했음에 있다. 실행 노드에 최소 하나 이상의 지갑 데이터가 저장되어 있어야 외부 API에서 노드를 호출할 때(특히 지갑 생성과 같은 요청), 정상적으로 동작하는 것으로 판단된다.
실제로 내가 실행시킨 노드에 저장된 지갑 데이터가 없음을 확인할 수 있었고, default wallet 정보를 입력해줌으로써 문제를 해결할 수 있었다.
월렛 리스트 출력 ( listwallets 명령어 )
노드에 저장된 지갑리스트를 확인하는 cli 명령어다. 만약, 아래와 같이 공백의 배열이 반환된다면, 현재 노드에 저장된 지갑 정보가 없다는 뜻으로 개발자가 직접 이 정보를 넣어주어야 한다.
# 비트코인 노드에 로드(load)된 지갑 리스트
./bitcoin-cli listwallets
> []
월렛 생성 ( createwallet 명령어 )
만약 특별히 넣어줄 지갑 정보가 없다면, 직접 생성하자. createwallet 이라는 클라이언트 cli 명령어에 경로를 명시해주면 해당 경로에 지갑 데이터가 담긴 디렉토리가 생성된다.
# 지갑 생성 (경로를 지정해주면 해당 위치에 지갑 정보가 담긴 디렉토리가 생성된다.)
./bitcoin-cli createwallet /home/ubuntu/defaultWallet
월렛 로드 ( loadwallet 명령어 )
비트코인 노드에 지갑 데이터를 저장하는 단계다. loadwallet 명령어에 지갑 데이터가 담긴 디렉토리를 경로와 함께 입력한다.
# 특정 지갑 정보를 노드에 로드(load)
./bitcoin-cli loadwallet /[경로]/[월렛 디렉토리]
만약, 지갑 데이터가 성공적으로 저장되지 않았다면, RPC 통신에서 아래와 같은 에러메세지가 반환될 수 있으니 참고하자.
# Wallet file not specified 에러 (code = -19)
JsonRpcException (
super=kr.co.blockcom.coinbridge.core.jsonrpc.JsonRpcException:
Error #-19: Wallet file not specified
(must request wallet RPC through /wallet/<filename> uri-path)., code=-19
)
월렛 로드 확인
데이터가 성공적으로 적재됐다면 월렛 리스트를 확인했을 때, 공백이 아닌 지갑 데이터 디렉토리의 경로가 반환될 것이다.
# 비트코인 노드에 로드(load)된 지갑 리스트
./bitcoin-cli listwallets
> [ "/home/ubuntu/defaultWallet" ]
'Blockchain > Bitcoin' 카테고리의 다른 글
[Bitcoin] 노드 RPC curl 명령어 정리 (0) | 2022.04.28 |
---|
댓글