Reading:
개발 진행 현항, 외부 감사결과 및 CoinNet 테스트 버전 공개 계획
Image

개발 진행 현항, 외부 감사결과 및 CoinNet 테스트 버전 공개 계획

2022-04-18

2021년 10월 1일부터 2022년 1월 21일까지의 개발 진행 내역이 나와있는 이번 보고서에는 흥미로운 업데이트가 많이 포함되어 있습니다. 팀은 291개의 풀 요청을 생성했으며, 그 중 271개가 병합되었습니다. 또한 이 양에 대한 484개 커밋, 177개 파일에 대한 34,000개 이상의 라인이 변경되었습니다. 개발 팀은 Agora의 API 서버, 월렛(Wallet), 블록 익스플로러(Block Explorer) 등 뿐만 아니라 아고라에서 사용하는 많은 라이브러리를 포함하여 여러 관련 프로젝트에서도 작업하고 있습니다.

저희 팀은 Github release를 사용하여 안정적인 릴리스를 추적하고 비공개 TestNet에 배포합니다. 그 기간 동안 10개의 릴리스가 출시되었으며 최신 버전은 v0.32.0입니다. 평소와 같이 누구나 Docker 레지스트리에서 릴리스를 다운로드할 수 있지만 팀은 최신 릴리스로 Ubuntu 20.04 및 MacOS 11용 기본 빌드도 제공합니다.

아래는 저희 팀이 지난 몇 달간 작업한 항목에 대한 자세한 내용으로 v0.23.1(10월 1일에 출시됨)와 v0.32.0(1월 19일에 출시됨) 사이에 출시된 내용입니다.

Highlights

외부 감사보고서

저희 팀의 주요 목표는 보안 감사 중에 제기된 사항을 해결하는 것이었습니다. 현재는 모두 해결됐으며, 최종 감사에서 SlowMist로 부터 ‘취약점 없음’이라는 의견을 받았습니다.

지금은 수정되었지만 당시 보고된 항목들은 다음과 같습니다.(중요도순)

  • Cross-chain재생 공격(예: TestNet에서 CoinNet으로 트랜잭션 전파)
  • 트랜잭션 풀이 대량의 트랜잭션을 처리하는 방식과 같은 DoS(서비스 거부) 벡터
  • 일부 코드 스타일 권장 사항;

BOSAGORA 네트워크의 이름 레지스트리

“네임 공간” 또는 “DNS 서버”는 이미 몇번 개발 보고서에 (dev report) 나왔습니다. 네트워크에서 어떤 역할을 수행하는지 명확하지 않을 수 있으므로 최근 개선 사항을 살펴보기 전에 여러분에게 다시 한 번 복습할 시간을 갖고자 합니다.

네임 레지스트리는 모든 Agora 노드의 구성 요소입니다. Public Key를 하나 이상의 IP 주소와 연결할 수 있습니다. 노드가 검증자(validator)가 되기를 요청할 때 언제든지 변경될 수 있는 공개 IP를 제공하지 않기 때문에 필요하다고 봤습니다. 따라서 네트워크의 다른 멤버는 해당 검증인에게 연락할 방법이 필요합니다. 그것이 레지스트리가 하는 일이라고 보시면 됩니다.

내부적으로 레지스트리는 처음부터 완전한 (full) DNS 서버를 구현하기때문에 다양한 장점이 있습니다.

  • 오늘날 인터넷의 기반인 프로토콜을 사용합니다.
  • 브라우저에 노드 주소를 입력하거나 google.com을 사용하는 모든 곳에서 사용할 수 있으며 노드에 액세스할 수 있습니다.
  • 다른 서비스와의 상호 운용성을 크게 단순화합니다.
  • 언급했듯이 각 Agora 노드에는 레지스트리가 있습니다. 이 레지스트리를 공개하도록 노드를 구성하여 다른 노드가 연락하려는 missing validator를 찾을 수 있도록 DNS 서버를 제공할 수 있습니다.

레지스트리 개선 사항에 대한 자세한 목록은 다음과 같습니다.

지속성과 아고라와 통합

10월 이전에는 네임 레지스트리 지속성 없이 독립적으로 구성된 별도의 엔터티였습니다. 10월 초에 Agora에 통합되어 더욱더 유동적이고 피어 검증이 향상되었으며 지속성이 가능해졌습니다.

인증된 피어, 검증인과 온 세계

단순히 작동하던 레지스트리: 피어가 missing validator이고 등록할 수 있거나 missing validator가 아니어서 등록할 수 없었습니다. 그러나 등록이 시간이 지남에 따라 만료됨에 따라 등록 기관과 Agora 측 모두에서 바람직하지 않은 ‘지터’가 발생했습니다. 따라서 등록이 보류 중인 경우(풀에 등록) 먼저 등록을 수락한 다음 공개 키가 등록의 지분으로 사용할 수 있는 UTXO를 소유한 경우 등록을 수락하도록 레지스트리가 변경되었습니다. Agora는 아직 동일하게 따르도록 완전히 업데이트되지 않았지만 곧 완료될 것입니다.

EDNS(0)를 포함하여 RFC를 준수하기 위해 다양한 개선을

네임 레지스트리의 초기에 단순히 HTTP 서버였지만 나중에, Votera같은 경우에. DNS 서버를 사용해야 할 필요성이 생겼습니다. DNS 영역에 대한 첫 번째 진출은 DNS 서버의 가장 기본적인 기능을 구현되었는데 일부는 누락되었습니다. 이것이 이름 압축, 여러 극단적인 경우의 처리, DNS 확장 지원이 포함됩니다. 이것이 다양한 클라이언트와 함께 테스트를 했고 우리가 이런 사양을 따르도록 보장합니다.

AXFR을 위한 지원

베어 (a bare) HTTP 서버에 비해 DNS가 제공하는 가장 큰 장점은 기본 제공 복제입니다. 기본 서버를 Agora로 설정하고 모든 보조/캐싱 서버를 BIND9와 같이 일반적으로 사용 가능한 소프트웨어 중 하나로 설정할 수 있습니다. 이를 지원하기 위해 우리 팀은 서버가 서로 영역을 공유할 수 있도록 AXFR을 구현했습니다. 11월에 처음 구현된 지원은 최근(1월) DNS 서버의 사용자 지정과 마찬가지로 허용 목록에 있는 피어 집합으로 제한되도록 확장되었습니다.

영역(realm), missing validator, 플래시 영역

각 노드에는 이제 영역(realm)이 포함됩니다. 이 영역은 네트워크가 존재할 도메인 이름입니다. 예를 들어, TestNet의 경우엔 영역은 testnet.bosagora.io가 됩니다. 이 영역에서 레지스트리는 현재 missing validator와 플래시의 2개 영역을 유지 관리합니다. 이름에서 알 수 있듯이 전자는 검증자가 등록하는 것이고 후자는 플래시 노드를 추적합니다. 이것은 또한 비트코인과 유사한 방식으로 시딩( seeding)을 가능하게 합니다(즉, 노드는 IBD — 초기 블록 다운로드를 시작하기 위해 자신의 영역만 알면 됨). 이러한 영역은 동일한 레지스트리에 있거나 여러 영역으로 분할될 수 있습니다.

기타 아고라 개선 사항

레지스트리 개선 외에도 저희 팀은 어떤 상황에서도 원활하게 작동하는지 확인하기 위해 지속적으로 코드를 수정하고 있습니다. 개선 사항은 두 가지로 나눴습니다: 합의 프로토콜(consensus protocol)이 조정되는 합의 개선과 합의는 동일하지만 노드가 다르게 동작하는 일반 개선입니다. 예를 들어, 체인 ID의 추가할 수 있습니다. 여기서 해시(hash)가 생성되고 변경되어 TestNet에 대해 생성된 트랜잭션 (transaction)이 CoinNet에서 전파되는 것을 방지합니다. 반면에 고정 간격 재시도와 달리 연결에서 지수 백오프를 사용하는 것이 더 일반적인 개선 사항입니다. 지수 백오프는 긴 가동 중지 시간/오류를 더 잘 처리하고 고정된 것보다 인간 관찰자에게 더 “논리적인” 동작을 제공합니다. -간격 재시도는 가능합니다.

다음 목록에는 일반적인 개선 사항은 너무 많고 기술적인 이유로 주요 개선 사항인 합의 개선 사항만 포함되어 있습니다. 자세한 내용을 관심 있으시다면 릴리스 목록에 두 가지가 모두 포함되어 있습니다.

Chain ID의 소개

앞서 언급했듯이 감사 (audit)의 이점 중 하나는 체인 ID를 도입하는 것입니다. 아무도 TestNet과 CoinNet에서 동일한 키를 사용해서는 안 되지만, 그렇게 한다고 해도, 새로운 체인 ID 메커니즘은 한 네트워크에서 다른 네트워크로 메시지를 복사할 수 없도록 되어있습니다.

TestNet에서 작동하는 commons payout 간격

저희의 TestNet은 블록 간격(Block Interval)과 검증자 주기가 짧아졌습니다. 블록은 CoinNet보다 10배 빠르게 생성되고 노드는 100배 더 자주 재등록 해야 합니다. 이러한 맥락에서 모든 합의 상수는 매개변수화 되어 우리 팀이 다양한 시나리오를 빠르게 테스트할 수 있습니다. Commons payout의 초기 구현에는 간격이 다른 블록 간격을 적절하게 처리하지 않는 TestNet에 나타난 버그가 있었는데, 현재는 수정되었습니다.

블록 서명 체계의 변경 사항

블록 서명 체계는 추가되도록 설계되었습니다. 사전 이미지 체계를 사용하여 노드는 일반적으로 이 기술에 필요한 설정 없이도 Schnorr 서명을 수행할 수 있습니다. 그러나 해커가 검증자의 개인 키를 훔칠 수 있는 치명적인 문제점이 발견되었습니다. 그 다음에 가감성 (additive property)유지하면서 이 문제를 해결하도록 체계가 변경되었습니다. 그러나 이 계획은 또한 오작동하는 검증자의 키가 동일한 높이에 (same height) 대해 둘 이상의 블록에 서명할 경우 이를 공개할 수 있는 기능을 제공했습니다. 이것이 현재 불가능하지만 팀은 대안을 찾고 있습니다.

사전 이미지를 포함하도록 블록 헤더가 변경되었습니다.

블록 헤더(block header)는 이전에 두 개의 구성요소, 즉 missing_validators 과random_seed를 포함했습니다. 전자는 거의 항상 비어 있을 것으로 예상되는 반면(이 블록은 검증자 목록이 삭제되었기 때문) 후자는 사전 이미지의 조합인 해시였습니다. 그러나 블록 자체가 서명 체계를 위한 사전 이미지에 의존하기 때문에 검증자가 둘 다의 데이터를 별도로 요청해야 하는 문제가 발생했습니다.

블록 헤더가 사전 이미지를 포함하도록 변경되었으며 누락된 missing validator 이로부터 임의의 시드를 파생합니다. 사전 이미지는 전체 목록을 다시 작성할 수 있도록 등록 과정에 마지막 사전 이미지(때로는 더 적음)만 유지하면 되므로 missing validator에 의해 내부적으로 압축될 수 있습니다.

시간 오프셋이(time offset) 삭제되었습니다.

블록이 외부화되고 합의 매개변수에서 고정되는 시간에 노드는 로컬 시간을 기반으로 필요한 높이를 도출합니다(오차 범위 내에서). 제네시스 타임스탬프(genesis timestape)는 합의 매개변수의 또 다른 일부입니다. 외부화 프로세스의 (externalization process) 여러 개선 덕분에 이전에 외부화 지연을 해결하기 위해 블록 헤더에 있던 time_offset이 삭제되었습니다.

개선된 블록 충돌의 해결

경쟁하는 블록, 또는 후보가 제시될 때 노드과 검증자는 더 큰 네트워크가 더 많은 안전으로 이어지기 때문에 더 많은 등록이 있는 노드를 선호합니다. 이 개념은 합의 프로토콜에 도입되었습니다.

프리징 트렌젝션이 명확한 수수료를 포함하도록 재구성되었습니다.

이전에는 삭감된 거래를 프리징하는 것이 너무 암묵적으로 이루어지므로 지갑에서 구현 문제가 발생했습니다. 새로운 구현으로 슬래싱(slashing)이 더 명확해지고 클라이언트가 더 잘 보일 수 있습니다.

이제 추천 크기가 제한됩니다.

이제 후보 크기에 상한선이 있습니다. 즉, 블록 크기도 이제 암시적으로 제한됩니다.

이제 대상 블록 높이를 사용하여 등록에 서명해야 합니다.

노드가 등록하기로 결정했을 때 몇 가지 주요 정보가 포함된 구조에 대해 가시핑(gossiping a structure)을 하고 있었습니다. 그러나 등록이 지연될 수 있고 올바른 높이에 포함되지 않아 노드 측에서 조정 문제가 발생할 수 있습니다. 심지어 어떤 경우에는 피어가 자신도 모르게 노드를 등록하려고 시도하는 드문 상황에서 등록을 재사용할 수 있다는 것입니다. 이것은 주목할만한 온라인 상태가 아닌 경우 노드가 슬래시되는 것으로 이어질 가능성이 큽니다. 등록은 이제 블록 높이를 기반으로 서명 됩니다. 즉, 이러한 등록은 특정 목표 높이에 대해서만 유효합니다.

CoinNet test version 공개 계획

저희는 CoinNet 정식 론칭에 앞서 2월 16일에 외부 기여자에게 테스트 버전을 공개할 계획입니다. 테스트 버전이 공개되면 누구든 검증자로 참여하고 네트워크가 어떻게 작동하는지 확인할 수 있습니다. 저희가 개발한 지갑(Wallet)과 블록 익스플로러(Block Explorer)도 테스트 버전에 연동되어 함께 확인할 수 있습니다.

또한 CoinNet 테스트 버전 공개와 함께 이벤트를 진행할 계획입니다. 검증자로 참여하거나, 테스트 버전 검증 과정에서 버그를 찾아서 리포트하는 기여자들에게는 추첨을 통해 리워드를 제공할 예정입니다. CoinNet 테스트 버전 오픈 이벤트와 관련된 자세한 내용은 별도 공지를 통해 안내드릴 예정이니 많은 관심 부탁드립니다.


0 Comments

답글 남기기

Arrow-up