포레스트(Forest)는 파일코인 프로토콜의 체인세이프(ChainSafe)의 러스트(Rust) 구현이다. 러스트(Rust)는 메모리 안전성과 성능을 최우선으로 하는 블록체인 구축할 수 있는 기반을 제공한다.
감사 시작
4월의 말부터 시그마 프라임(Sigma Prime)은 포레스트(Forest) 코드베이스에 대한 보안 감사를 진행하고 있다. 감사 시작 전, 팀은 감사팀에 자료들을 업데이트해주고 있었으며 이는 감사가 끝나는 즉시 공용으로 사용할 것이다. 시그마 프라임(Sigma Prime)이 발견한 모든 문제와 해결 방법을 다룰 것이다.
감사를 위한 포레스트 준비
시그마 프라임(Sigma Prime) 감사에 앞서, 이 팀은 포레스트 프로덕션 준비 중이다. 이는 동기화 및 메시지 풀을 개선을 포함한다. 팀은 메시지 풀을 전체적으로 리팩터링하고 마이너의 티켓 품질 기반으로 최적의 메시지 선택을(Optimal Message Selection) 구현한다.
동기화 측면에서는 러스트 기능 기반 상태 머신(Rust Features-driven state machine)을 구현하여 흐름과 논리를 리팩터링하고 단순화함으로써 체인 싱커(ChainSyncer)의 견고성과 성능을 향상하였다. 팀이 노드를 몇주간 돌려본 결과 안정적이고 일부 동기화 과정을 개선하는 도중 팀은 메모리 누수를(memory leak) 고쳤다. 포레스트는 메모리 측면에 상대적인 안정을 이룰 수 있었다. 사실
포레스트는 몇주간 노드를 RAM(Random access memory; 램덤 액세스 메모리)의 단 7GB으로 실행해 왔다.
감사 전에 포레스트 팀은 오류 처리 및 RPC용 JWT(JSON Web Token) 와 로투스 RPC(Random access memory; 램덤 액세스 메모리)를 일치시키는 등 생산 준비 RPC(Random access memory; 램덤 액세스 메모리)의 마지막 단계도 진행하고 있었다. 또한 암호화된 키 저장소에 대한 RPC(Random access memory; 램덤 액세스 메모리) 방법도 추가했다.
RPC(Random access memory; 램덤 액세스 메모리)를 추가하기 전에, 키는 저장되기 전에 암호화되지 않았다. 현재 사용자들은 시작할 때 암호를 사용하여 보안 키 저장소를 사용하여 개인 키를 해독할 수 있다. 암호화된 키 저장소는 사용자들의 안정성을 보호하며 쉽고 간편하게 사용할 수 있다. 동기화 향상, 메시지 풀 리팩터링 및 RPC (Random access memory; 램덤 액세스 메모리) 인터페이스 구현을 통해 프로덕션 지원 포레스트를 감사할 준비가 되었다.
상태 마이그레이션(Stae Migration)
상태 마이그레이션(State Migration)은 상태 트리의 콘텐츠가 이전 형태에서 새로운 형태로 바뀌는 파일코인 네트워크의 과정이다. 포레스트팀은 최근 기억 장치(Snapshot)에 의존하기 보다 제네시스부터 완전히 동기화시키기 위해 상태 마이그레이션을 입하기 시작했다. 상태 마이그레이션이 구현되면 포레스트는 기록 상태 정보를 쿼리할 수 있는 전체 아카이브 노드 기능을 갖게 된다.
포레스트 팀은 최근 기억 장치(Snapshot)에 의존하는 대신 제네시스로부터 완전히 동기화되도록 상태 마이그레이션(State Migration)을 구현하기 시작했다. 상태 마이그레이션(State Migration)이 도입되면서 포레스트는 기록 상태 정보를 쿼리하는 전체 아카이브 노드 기능이 있다.
현재, 포레스트 노드는 네트워크 업그레이드 에폭의 팁셋 과정을 프로세스 할 수 없으며 에폭 전과 후에 가능하다. 수동적인 개입이 요구되며 이동 후 기억 장치(Snapshot)을 가져와 계속해야 한다.
CLI와 사용자 경험 개선
또한 팀은 포레스트 CLI(Command-line interface; 명령 줄 인터페이스)를 개선시키기 위해 시간을 투자했으며 포레스트를 통해 사용자들이 파일코인 블록체인과 원활하게 상호작용할 수 있다. 목표는 상태(State), 메시지 풀(Message Pool), 그리고 P2P CLI에 대한 명령어도 추가해 최종 사용자가 포레스트를 더 많이 사용할 수 있도록 하는 것이다. 팀은 현재 포레스트 CLI(Command-line interface; 명령 줄 인터페이스)에서 구현된 모든 명령어를 RPC 백엔드로 작업하여 최종적으로 네트워크 RPC(Random access memory; 램덤 액세스 메모리)에 대한 RPC 명령어를 추가하는 작업을 수행하고 있다.
더 많은 명령어를 추가하고 로투스와 일치시켜 포레스트는 사용자들이 쉽게 사용하고 다른 파일코인 구현 간의 상호운용성을 높일 것이다.
성능 분석
지난 몇 달간 팀은 추가적인 기능들을 찾고 성능을 분석하고 있다. 현재 포레스트는 포레스트 노드가 어떻게 실행되고 병목현상이 어디서 일어나는지 신뢰할 수 있는 이해 방법이 없다.
팀은 포레스트에서 팁셋 처리 시간, 가십서브(Gossipsub) 메시지 통계, 가십서브(Gossipsub)를 통해 받은 팁셋의 카운터, 디스크의 RockDB 크기 게이지, 팁셋 레인지 싱커(TipsetRangeSyncer) 미래 오류 수 및 libp2p 메트릭를 포함하여 메트릭을 수집하기 시작했다. 그 다음, 팀은 이 메트릭을 그라파나(Grafana)를 사용하여 대시보드를 통해 이런 메트릭스를 추출한다. 모든 메트릭스가 깔끔하게 진열되면 팀은 포레스트에 개선이 필요한 부분을 분석하며 파일코인 러스트(Filecoin Rust) 구현을 강화시킬 수 있을 것이다.
그 다음은 무엇인가?
더 나아가, 팀은 CLI(Command-line interface; 명령 줄 인터페이스)를 지속적으로 개선시킬 것이고 남은 상태 마이그레이션(Optimal Message Selection) 구현을 마무리할 것이다. 팀은 포레스트의 첫번째 출시에 가까워 짐에 따라 더 많은 사용자 문서화를 추진하고 있다. 핵심 목표는 사용자들이 포레스트를 쉽게 사용하게 만드는 것이다. 또한 팀은 스토리지와 검색 마켓 통합에 거의 마무리하고 있다.
보다 다양한 정보 및 방송관련 소식은
공식 SNS채널을 통해 확인 가능합니다.