Intro
안녕하세요. 한국 시간 1월 19일 오전 3시부터 ironfish 인센티브 테스트넷 페이즈3가 진행되고 있습니다. 인센티브 테스트넷 참여에 어려움을 느끼는 분들을 위해 지난 포스팅에서 관련 가이드를 아래와 같이 2편 작성하여 퍼블리싱하였습니다.
- ironfish 인센티브 테스트넷 페이즈3 사전 가이드: 페이즈3 설명, 노드 설치 및 계정 생성
아직 ironfish 인센티브 테스트넷 페이즈3 참여를 못하신 분들이 있다면 위의 2개 포스팅을 천천히 보시면서 따라해보시는 것을 추천드립니다.
이번 포스팅 주제는 '백업 및 복구'에 관한 내용입니다. 오류로 노드를 초기화해야할 경우 무턱대고 초기화를 실행하면 블록 데이터 뿐만 아니라 지갑 (계정 및 잔액)까지 삭제되기 때문에 미리 백업/복구를 통해 데이터를 안전하게 이동할 필요가 있습니다.
저는 이번에 빠른 페이즈3 참여를 위해 노드를 설치하고 블록을 미리 동기화했습니다. (왜인지 페이즈가 시작되기 전이었음에도 불구하고 블록 동기화가 정상적으로 진행되는 듯 했습니다.) 페이즈3가 시작되고 노드 버전이 v0.1.58 -> v0.1.62로 업그레이드되었는데요.
가이드에 따라 노드를 v0.1.62로 업그레이드 하고 노드를 시작하니 오류가 발생했습니다. 오류의 내용은 '제네시스 블록 (1번 블록)의 해시값이 달라서 동기화에 실패한다' 는 것이었습니다. 디스코드를 통해 오류 원인을 파악하고 해결책을 찾아본 결과 "노드 초기화" 말고는 답이 없는 상황이었습니다.
데이터 백업 및 복구 방법
ironfish 노드 초기화는 아래 명령어를 입력하면 간단하게 진행할 수 있습니다. 여타 프로젝트의 노드 초기화는 저장된 블록 및 지갑 데이터가 저장된 디렉토리를 한꺼번에 삭제하는 방식을 사용하는데 반해 ironfish는 노드에서 초기화 명령어를 지원하고 있어 간단하게 초기화가 가능했습니다.
ironfish reset
/!\ WARNING: This will permanently delete your wallets. You can back them up by loading the previous version of ironfish and running ironfish export. /!\
Have you read the warning? (Y)es / (N)o:
친절하게 지갑 export까지 안내를 해주는군요. 초기화를 실행하면 지금까지 동기화한 블록 데이터와 계정 및 잔액이 모두 삭제됩니다. ironfish에서 블록 및 지갑 데이터가 저장되는 디렉토리는 $HOME/.ironfish입니다. reset 명령어를 실행하거나 이 디렉토리를 완전히 삭제하면 노드가 초기화됩니다.
노드의 초기화 명령어 지원으로 블록/지갑 데이터가 저장된 경로를 몰라도 초기화 및 백업/복구가 가능하지만 기본적으로 숙지해두시길 추천드립니다. (이렇게 친절한 프로젝트가 많지는 않거든요.)
cd ~/.ironfish/
bhlee@bhlee-VirtualBox:~/.ironfish$ tree -L 2
.
├── config.json
├── databases
│ ├── chain
│ └── wallet
├── hosts.json
├── internal.json
├── ironfish.ipc
└── segfault.log
3 directories, 5 files
지갑 백업 및 복구
초기화 전에 지갑을 백업하기 위해서 아래와 같이 export 명령을 입력합니다.
ironfish wallet:export
{
"id": "016f0c34-7a13-40ce-8528-bcff859265c9",
"name": "bhlee7909",
"spendingKey": "<PRIVATE_KEY_TO_BE_SAFE>",
"incomingViewKey": "<INCOMING_VIEW_KEY>",
"outgoingViewKey": "<OUTGOING_VIEW_KEY>",
"publicAddress": "<YOUR_ADDRESS>"
노드에 default로 set된 계정의 id/name/key가 출력됩니다. 이 중 spendingKey는 계정 복구에 사용하는 private key 입니다. publicAddress는 계정 간에 자산을 주고 받을 때 입력하는 주소를 의미합니다.
export 명령어는 default 계정만을 지원하니 계정이 2개 이상인 경우에는 ironfish wallet:use <USER_ID> 명령어로 <USER_ID>의 계정을 default로 set하고 export해야 key를 얻을 수 있습니다.
ironfish reset 명령어를 실행하여 블록 및 지갑 데이터를 모두 삭제하고 아래와 같이 계정을 복구합니다.
ironfish wallet:import
Enter the account name: bhlee7909
Enter the account spending key: <PRIVATE_KEY_TO_BE_SAFE>
Account already exists with the name bhlee7909
import 명령어 실행 후 복구할 계정 이름과 spendingKey를 차례대로 입력합니다. 이미 보유한 계정에 대해서는 위와 같은 결과가 나오나 그렇지 않은 경우 .ironfish/databases/wallet에 파일이 생성되며 노드 동기화가 완료되면 이전에 보유했던 자산까지 모두 복구된 것을 알 수 있습니다.
(타인으로부터 자산을 받았거나 스스로 발행/소각한 자산을 소유한 경우 해당 트랜잭션이 담긴 블록 높이까지 노드가 동기화되지 않았다면 자산은 제대로 확인되지 않습니다.)
이상 ironfish 노드 계정 백업 및 복구 가이드를 마치겠습니다.
본 포스팅의 내용이 잘 와닿지 않는 분이 계실 지도 모르겠습니다. 물론 이런 상황이 오지 않는게 제일 좋겠으나, 처음 노드 오류를 겪으면 어떻게 대처해야할 지 막막하고, 해결책을 찾았으나 노드 초기화가 불가피한 경우 섣부르게 초기화를 하게 되면 계정의 key와 자산을 모두 날리는 상황이 올 수도 있기 때문에 지금은 불필요해보여도 이런 내용을 숙지하고 있으면 비슷한 상황에 유연한 대응이 가능합니다. 비슷한 오류를 겪으셨던, 겪으실 분들에게 도움이 되기를 바랍니다.
블로그 내 모든 포스팅에 대한 질문 사항이나 논의 주제가 있는 경우 언제든 Telegram 채널에 오셔서 편하게 말씀 부탁드립니다. (정보 습득 목적으로 오시는 분들도 물론 환영입니다.)
채널 및 블로그 운영에 큰 힘이 됩니다. 감사합니다.💕
'Blockchain > Testnet' 카테고리의 다른 글
5ireChain thunder beta testnet 참여 가이드 (3) | 2023.02.17 |
---|---|
Gaganode 테스트넷 채굴 가이드 (2) | 2023.01.31 |
zkSync 2.0 퍼블릭 테스트넷 사용해보기 (0) | 2023.01.23 |
Ironfish 인센티브 테스트넷 페이즈3 가이드: 미션 수행 (2) | 2023.01.20 |
Ironfish 인센티브 테스트넷 페이즈3 사전 가이드 (0) | 2023.01.18 |