Blockchain/Testnet

ironfish 인센티브 테스트넷 페이즈3 지갑 백업 및 복구 가이드

lowsec 2023. 1. 23. 22:43

Intro

 

안녕하세요. 한국 시간 1월 19일 오전 3시부터 ironfish 인센티브 테스트넷 페이즈3가 진행되고 있습니다. 인센티브 테스트넷 참여에 어려움을 느끼는 분들을 위해 지난 포스팅에서 관련 가이드를 아래와 같이 2편 작성하여 퍼블리싱하였습니다.

 

 

Ironfish 인센티브 테스트넷 페이즈3 사전 가이드

안녕하세요. Ironfish 인센티브 테스트넷 페이즈3가 어느덧 9시간도 남지 않았습니다. 오늘 포스팅에서는 Ironfish 인센티브 테스트넷 페이즈3 참여를 위한 사전 가이드를 전달해드리겠습니다. Introdu

lowsec.tistory.com

 

 

Ironfish 인센티브 테스트넷 페이즈3 가이드: 미션 수행

안녕하세요. Ironfish 인센티브 테스트넷 페이즈3가 시작되었습니다. 약속드린대로 오늘 포스팅에서는 Ironfish 인센티브 테스트넷 페이즈3의 포인트 획득 미션 방법을 알려드리고자 합니다. 테스트

lowsec.tistory.com

 

아직 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 채널에 오셔서 편하게 말씀 부탁드립니다. (정보 습득 목적으로 오시는 분들도 물론 환영입니다.)

 

채널 및 블로그 운영에 큰 힘이 됩니다. 감사합니다.💕