Reading:
BOSAGORA 창립 1주년, 검증자 등록 저장 방식 변경, 등
Image

BOSAGORA 창립 1주년, 검증자 등록 저장 방식 변경, 등

by Rooney
2020-06-11

2020년 5월 월간 리포트

개발

5월 한 달 동안 아고라팀은 아고라 코드베이스 뿐만 아니라, 알파인 리눅스 코드베이스에도 수많은 개발 이력을 남기느라 아주 바쁜 한 달을 보냈습니다. 저희 팀은 쿼럼 밸런싱을 적절하게 설정하고 배포할 수 있는 상태로 만들기 위해 열심히 작업하고 있습니다. 일단 팀이 쿼럼 밸런싱 알고리즘을 완전히 구현하는 것을 마무리하면, 보다 큰 검증자 기능에 집중할 수 있습니다. 쿼럼 밸런싱 작업을 개발 외에, 어드민 인터페이스와 프리이미지 관련 개발을 지속하고 있습니다. 아래는 지난달 개발 활동과 현재 진행 중인 개발 사항들을 요약한 것입니다.

5월의 핵심 개발 사항:
월별 활동:

지난달 저희는 82개의 풀리퀘스트와 52개의 활성 이슈가 있었습니다. 그중:

  • 11개의 풀리퀘스트가 제안되었고,
  • 71개의 풀리퀘스트가 통합되었고,
  • 27개의 새로운 이슈가 있었고,
  • 25개의 이슈가 마감되었습니다.

개발된 기능:

#735 검증자 등록 저장 방식 변경

이 기능은 5월 초에 Jay가 개발했습니다. 현재, EnrollmentManager에 등록 데이터가 검증되기 전에 등록 데이터를 추가하도록 되어있습니다.
/// PUT: /enroll_validator
public void enrollValidator (Enrollment enroll) @safe
{

log.trace(“Received Enrollment: {}”, prettify(enroll));
if (this.enroll_man.add(this.ledger.getBlockHeight(),
this.utxo_set.getUTXOFinder(),
enroll))
{
this.network.sendEnrollment(enroll);
}
}

합의가 이뤄진 후, 이 방법으로 수행하는 것은 몇 가지 문제가 있습니다.

  • 사용자가 그들의 키를 바꾸지 않으면(2주간 대기해야 합니다) 등록을 바꾸는 것이 불가능합니다.
  • 이 테이블은 정리되지 않습니다.
  • 합의 전과 후에 사용하는 데이터가 혼합되어 오류가 발생하기 쉽습니다.
  • addValidatedBlock은 등록을 추가하지 않고, 블록 높이만 업데이트하므로 캐치업이 중단됩니다.

이 두 데이터 세트를 분리하고, EnrollmentManager에 활성화된 등록만 있는 것이 좋습니다. 이렇게 분리하는 것은 거래 풀/UTXO 세트와 비슷하게 되어야 합니다.

완료 정의:

  • 거래풀/UTXO 세트와 비슷한 방식으로 등록을 저장하는 방식을 구현합니다.
  • 등록이 만료되면 테이블에서 정리합니다.

자세한 정보는 아래 깃허브 링크를 참고해주세요.
https://github.com/bpfkorea/agora/issues/735

#586 풀노드와 검증자 기능을 두 개의 서로 다른 클래스로 분할

이 기능은 5월 초 Andrej가 개발했습니다. 현재, 노드 클래스는 풀노드와 검증자 모두를 위한 기능을 포함하고 있습니다. 블록 제안자(Nominator) 인스턴스는 합의의 일부가 아니기 때문에 풀노드에서 보여서는 안됩니다.

다음과 같이 이상적인 것도 있습니다.
module agora.node.FullNode;

import agora.api.FullNode;
class FullNode : API { … }
module agora.node.Validator;

import agora.api.Validator;
import agora.node.FullNode;

class Validator : FullNode, API { … }

어떻게 검증자가 ‘풀노드’ 인지 그리고 어떻게 agora.api.validator API 인터페이스로 추가적인 기능을 제공하는지 확인하시고, 또한, agora.node.FullNode에 있는 API와 agora.node.Validator 모듈에 있는 API가 다르다는 것도 유념하십시오. 하나는 agora.api에 있는 ‘풀노드’를 말하고, 또 다른 하나는 agora.api.Validator를 말합니다.

완료 정의:

  • 클래스를 둘로 나눕니다
  • 각 클래스는 이상적으로 자체 모듈에 있어야 합니다, 예: FullNode.d, Validator.d
  • 노드 구성에 따라, 풀노드나 검증자는 우리가 노드를 시작하고 싶을 때 인스턴스화해야 합니다.
  • 검증자 클래스에만 속하는 필드는 풀노드 클래스에 있어서는 안 됩니다. 예를 들어, 블록제안자 인스턴스는 검증자 클래스에서만 보여야 합니다.
  • 전체 테스트에는 풀노드와 검증자 모두를 위한 테스트가 있습니다. 혼합된 노드 세트(일부는 풀노드, 일부는 검증자)를 인스턴스화 할 수 있어야 하고 테스트를 계속 수행할 수 있어야 합니다.

자세한 정보는 아래 깃허브 링크를 참고해주세요.
https://github.com/bpfkorea/agora/issues/586

#323 D와 C++ 사이드에서 vtable 매치를 검증하는 유틸리티를 더함

이 기능은 5월 초 Michael이 개발했습니다. D 언어에서는 함수를 프로토타입 하지 않아 vtable이 미스매치되게 만드는 실수를 하기 쉽습니다. 이는 주로 이상한 메모리 손상 버그에서 나타나는데, 실상은 스택 흔적(예: LLDB를 통하여)이 호출된 스택이 의미가 있는지 혹은 잘못된 방식이 호출되었는지 알려줄 것입니다. 저희는 현재 레이아웃/사이즈 체크처럼 이를 증명하는 유틸리티 코드가 있어야 합니다.

자세한 정보는 아래 깃허브 링크를 참고해 주세요.
https://github.com/bpfkorea/agora/issues/323

#725 Ocean formatter에 ‘enum’ 형식 구현

이 기능은 5월 초 Michael이 개발했습니다. Ocean이 D1 호환성을 제거한 후, 작업이 가능해졌고 앞으로의 작업 역시 단순화시켜줄 것입니다.

완료 정의:
enum Foo

{

A,

B,

C,

D,

}

import ocean.text.convert.Formatter;

unittest

{

assert(format(“{} {} {} {}”, Foo.A, Foo.B, Foo.C, Foo.D) == “Foo.A Foo.B Foo.C Foo.D”);

Foo invalid1 = cast(Foo) 42;

assert(format(“{}”, invalid1) == “cast(Foo) 42”);

}

자세한 정보는 아래 깃허브 링크를 참고해주세요.
https://github.com/bpfkorea/agora/issues/725

#694 노출되는 프리이미지의 검증 체크 코드를 더함

이 기능은 5월 중순 Jay가 개발했습니다. 현재 관리 등록과 프리이미지를 구현한 것에는 프리이미지의 유효성을 체크하는 코드가 없습니다. 목표는 검증자 세트가 여러 검증자로부터 받은 프리이미지의 유효성을 체크하도록 하는 것입니다.

완료 정의:

  • 검증자 세트가 등록 데이터와 함께 유입되는 프리이미지를 체크합니다

구현 방법:

  • 검증자 세트가 등록상의 랜덤 시드와 유입되는 프리이미지를 높이 차만 큼 해시하여 값을 비교합니다.
  • 등록 구조는 유효성을 체크하기 위해서 랜덤시드의 높이를 갖고 있어야 합니다.

자세한 정보는 아래 깃허브 링크를 참고해 주세요.
https://github.com/bpfkorea/agora/issues/694

#718 ‘ocean.text.convert.Fomatter’에서 범위 지원 구현

이 기능은 5월 중순 Michael이 개발했습니다. 아고라는 Ocean이라는 라이브러리를 사용하여 실행 중에 로그를 출력합니다. Ocean은 ‘Range’ 타입을 지원하지 않기 때문에 저희는 ‘Range’ 타입의 출력을 이해할 수 없습니다. 따라서, ‘Range’ 타입의 출력을 이해하는 것이 목표입니다.

자세한 내용은 아래 깃허브 링크를 참고해 주세요.
https://github.com/bpfkorea/agora/issues/718

#767 프리이미지 관리 시, 슬라이딩 윈도우 컨셉 적용

이 기능은 5월 중순 Jay에 의해 개발되었습니다. 현재 노드는 약 100,000개의 생성된 프리이미지를 사용하고 프리이미지는 각각 블록 높이와 매칭됩니다. 각각의 프리이미지와 블록 높이를 매칭하는 것과 관련해서 개선 가능한 부분을 파악했습니다. 이는 바로 슬라이딩 윈도우 개념을 적용하는 것입니다. 이 개념을 사용하면 라운드와 사이클을 기준으로 사전 이미지를 검색할 수 있습니다.

완료 정의:

  • 사이클과 라운드에 따라 프리이미지를 관리합니다.
  • 노드가 모든 정보를 복구해야할 때 현재 라운드와 주기를 결정합니다.
  • 프리이미지를 관리하는데 PreImageCache를 사용합니다.

자세한 내용은 아래 깃허브 링크를 참고해 주세요.
https://github.com/bpfkorea/agora/issues/767

#587 네트워크 매니저 재작업 필요

이 기능은 5월 중순 Andrej가 개발했습니다. 저희가 처음에 이를 구현했을 때 목표는 풀노드(첫 번째 이정표)를 지원하는 것이었습니다. 풀노드는 min_listeners 구성 옵션을 통해서 최소 숫자의 고객에게 연결됩니다.

검증자에게 연결되는 최소 고객의 수는 쿼럼 구성에 있는 노드의 수이기 때문에 검증자에게는 이러한 구성 옵션이 없어야 합니다. 그들은 임의의 풀노드에 연결하는 것을 신경 쓰지 않으며, 검증자나 다른 풀노드에 연결하는 것은 풀노드의 역할입니다.

다양한 세트가 내부에 있고, 모두 다소 추론하기에 복잡합니다.

  • todo_addresses
  • known_addresses
  • connecting_addresses

그리고 start()에 있는 초기치 설정 일부는 생성자로 이동해서 클래스가 언제나 준비된 상태가 되도록 해야 합니다. 그렇지 않으면, start()가 아직 호출되지 않았는데도 유입된 요구 사항들이 NetworkManager로 전송되어 일관되지 않은 상태가 되게 합니다.

자세한 내용은 아래 깃허브 링크를 참고해 주세요.
https://github.com/bpfkorea/agora/issues/587

#582 타이머에 프리이미지를 노출합니다

이 기능은 5월 말 Henry가 개발했습니다. 프리이미지 노출이 putTransaction에서 일어나게 하는 대신, 타이머를 통해 이루어져야 합니다.

현재 이 기능은 아래에 완료되어 있습니다:
agora/source/agora/node/Node.d

Lines 252 to 260 in 0cdc928

if (this.enroll_man.needRevealPreimage(this.ledger.getBlockHeight()))

{

PreimageInfo preimage;

if (this.enroll_man.getNextPreimage(preimage))

{

this.receivePreimage(preimage);

this.enroll_man.increaseNextRevealHeight();

}

}

이는 Vibe.d의 setTimer 기능을 통해 쉽게 완료될 수 있습니다.

이는 현재 LocalRest에 구현되어 있지 않으나, 저희가 장애물이 되지 않는 ‘sleep’와 ‘runTask’를 프리미티브로 갖고 있으므로 이는 구현하기가 쉬울 것입니다.

자세한 정보는 아래 깃허브 링크를 참고해 주세요.
https://github.com/bpfkorea/agora/issues/582

#745 PR 실패를 검사하기 위해 build artifact를 생성

이 기능은 5월 말 Mathias가 개발했습니다. 이 이슈는 매우 간단합니다.

예를 들어, 이 기능이 개발된 후에 아래의 작업이 가능해야 합니다.

  • Linker 이슈가 있을 때 목적 파일을 검사합니다.
  • 테스트가 중단될 때 코어 덤프가 있는지 검사합니다

자세한 정보는 아래 깃허브 링크를 참고해 주세요.
https://github.com/bpfkorea/agora/issues/745

현재 진행중인 검증자 개발 관련:

  • SCP 메시지는 노드의 연결된 검증자들에게 전파되어야 합니다 #606
  • 필요한 합의 중심 상수를 함수의 파라미터로 바꿉니다 #894
  • Shell quorum balancing을 구현합니다 #785
  • 검증자 세트에 있을 때 검증자를 재등록할 수 있어야 합니다 #824
  • 노드의 등록 정보를 복구합니다 #789
  • 높이가 0인 블록은 검증되어야 합니다 #747
  • 검증자 세트가 비어있게 되면, 등록정보가 포함되지 않은 블록을 받아들여서는 안됩니다 #822
  • setGenesisBlock/ genesis config를 하드코딩된 블록으로 대체합니다 #821
  • 하드코딩된 제네시스 블록에 등록을 더합니다 #907
  • 노드를 다시 시작할 수 있는 기능을 TestAPIManager에 통합시킵니다 #906
  • 관리 인터페이스에 테스트 서버가 필요합니다 #788
  • UTXO와 검증자 DB를 위한 SQLite 사용을 개선합니다 #836
  • 새로운 TaskManager.setTimer() 기능을 사용합니다 #872


마케팅

BOSAGORA 창립 1주년

BOSAGORA는 지난달 5월 16일, 창립 1주년을 맞이하였습니다. 지난 1년간, 저희는 커뮤니티와 약속했던 초심을 유지하기 위해 프로젝트 시작과 동시에 기존 홀더 에어드랍, 글로벌 거래소 상장, 다양한 마케팅 활동을 진행했습니다. BOSAGORA가 지금까지 달려올 수 있었던 힘은 모두 커뮤니티 여러분들의 단단한 믿음과 지원 덕분입니다. 지금까지 그러했듯, 앞으로도 투명한 소통을 바탕으로 약속한 결실을 맺을 수 있도록 최선을 다하겠습니다.

BOA, 하드웨어 월렛 CoolWallet S에서 사용 가능

지난 5월 CoolBitX와의 MOU 이후 하드웨어 월렛인 CoolWallet S에서 BOA 토큰 사용이 가능해졌습니다. 따라서, 전 세계에 있는 BOA 홀더들은 CoolWallet S로 BOA 토큰을 더욱 안전하고 편리하게 보관할 수 있게 되었습니다. BOA 토큰을 CoolWallet S에 보관하는 방법은 간단합니다. 다른 거래소나 지갑에 있는 BOA 토큰을 CoolWallet S로 옮기기만 하면 자신의 CoolWallet S에서 BOA 토큰을 확인할 수 있습니다.

그리고 지갑의 안전성 또한 높아졌습니다. CoolBitX의 가상 자산 자금세탁 방지 솔루션(시그나 브릿지) 덕분에 암호화폐 거래 시 송신인과 수신인의 정보를 안전하게 공유하여 다른 하드웨어 월렛에 비해 안전성을 더욱 높였는데 이로써, BOA 토큰의 홀더들은 더욱 안심하고 BOA를 보관할 수 있게 되었습니다.

CoolBitX와 파트너십 기념 퀴즈이벤트

CoolWallet S 퀴즈 이벤트에 국내외 커뮤니티의 많은 멤버들이 참여하였고, 퀴즈 당첨자들에게 BOSAGORA의 로고가 프린트된 CoolWallet S를 선물로 보내드렸습니다. 이후, 많은 분들이 인증샷과 함께 CoolWallet S의 후기를 남겨주셨습니다.

이외에도 저희는 글로벌 인증 업체 및 에듀테크 기업과도 향후 상호 발전을 위한 파트너십을 준비 중에 있습니다. BOSAGORA는 메인넷 개발을 진행하는 동시에, 향후, 메인넷 이후의 BOSAGORA 생태계를 위한 유익한 파트너십을 지속적으로 발굴해나갈 것입니다.

코로나시대 극복을 위한 ‘Let COVID-19 Go’ 캠페인 성황리에 종료

BOSAGORA 커뮤니티의 많은 분들이 청결을 유지하고 모임을 자제하여 코로나 시대를 극복하자는 ‘Let COVID-19 Go’ 캠페인에 참여해 주셨습니다. 캠페인에 참여한 멤버들이 친구를 초대하며 짧은 시간 동안 100여 명의 커뮤니티 멤버가 늘어나는 등 코로나 극복에 많은 관심을 가져주셨습니다. BOSAGORA는 코로나 시대를 극복하기 위해 커뮤니티와 함께 행동하는 프로젝트로서 앞으로도 솔선수범하는 자세를 유지하겠습니다.

BOSAGORA 국가별 엠버서더 선정

BOSAGORA는 글로벌 커뮤니티 활동을 돕는 글로벌 엠버서더를 모집했습니다. BOSAGORA 글로벌 엠버서더는 BOSAGORA의 개발 및 파트너십 활동 내용과 BOSAGORA가 발행하는 콘텐츠를 현지 언어로 제작해 자신들의 커뮤니티에 공유해 더욱 효과적으로 BOSAGORA를 알리는 역할을 담당하게 됩니다. 1차적으로 터키, 일본, 러시아, 스페인, 동남아시아의 엠버서더 (코인 커뮤니티)와 협업할 예정이며, 추후, 더 많은 나라로 확대할 계획입니다.

국가별 엠버서더
🇹🇷Turkish Community: bountyhive.io
🇯🇵Japanese Community: https://t.me/kamigroupni
🇷🇺Russian Community: https://t.me/satoshi_club_ru
🇪🇸Spanish Community: https://t.me/satoshi_club_spanish
🌏Southeast Asian Community: @nanochatroom

글로벌 AMA 진행

5월, BOSAGORA는 2건의 AMA를 진행했습니다. 지난 AMA에서는 현재 지속적으로 개발 중인 ‘검증자’ 및 ‘플레시 레이어’에 대한 질문 등 저희가 공개한 개발 자료를 바탕으로 심도 있는 질문을 주셨고, 코로나 관련 다양한 참여 캠페인을 실시하는 등 코로나 대응 프로젝트로서, 궁극적으로 코로나 시대를 어떻게 극복할 것인지에 대한 질문도 주셨습니다. 두 차례의 5월 AMA로 트위터와 텔레그램에 각각 100명 이상의 멤버가 유입되는 등 프로젝트에 대한 꾸준한 관심을 보여주셨습니다.

세계경제포럼의 ‘블록체인 권리 장전’에 공식 지지 서명

세계경제포럼(World Econimic Forum)에서 “블록체인 권리장전”을 발표했습니다.블록체인 권리장전은 블록체인 기술을 활용하여 더 투명하고, 더 편리하고, 더 사려 깊은 서비스를 대중에 제공하자는 취지하에, 모든 정부, 기관, 기업, 개인 등 블록체인 프로젝트를 운영 중인 모든 이들이 준수하길 요청하는 협약 내용이며, BOSAGORA는 국내 블록체인 프로젝트 중 처음으로 공식 서명했습니다.

개발 현황을 한 눈에, 홈페이지 개

‘투명성’에 걸맞은 개발 진행 내역 공유를 위해, 홈페이지의 기술 페이지에 개발팀의 세부적인 개발내역을 모두 공개했습니다. 새롭게 개편된 BOSAGORA 홈페이지의 ‘기술’ 페이지에는 개발팀이 현재 개발 중인 주요한 내용부터, 중요도에 따른 개발 진척도, 그리고 한눈에 보는 전체 개발 내역까지 개발팀의 모든 개발 정보가 투명하게 공개되어 있습니다. 이로써, 현재 무엇이 가장 중요한 개발 일정이며, 이의 진행 상황과 진척도는 물론, 깃허브에서 이에 대한 구체적인 내용까지 확인할 수 있어, BOSAGORA 개발 관련 모든 내용을 확인하실 수 있습니다.

한국블록체인뉴스, BOSAGORA 칼럼 연재 시작

블록체인과 암호화폐 업계의 동향 및 기술에 대해 글로벌 코인 프로젝트의 시각으로 연재 중인 BOSAGORA의 테크트렌즈(Tech Trends) 칼럼이 한국블록체인뉴스에서 6월 8일 부터 보스아고라 칼럼으로 연재를 시작했습니다. 처음 4주간은 매주 칼럼이 나온 뒤 이후 매월 1화분이 발행될 예정입니다. 보스아고라 칼럼은 암호화폐 업계 내 민주주의 구현의 중요성, 차세대 검열 저항, 스마트 컨트렉 등 업계에서 주요 화두가 되는 흥미로운 내용들로 구성될 예정입니다.

한국블록체인뉴스 보스아고라 칼럼: https://bit.ly/2AWhERh

BOSAGORA 칼럼 리스트 (예정)

#1 2020년, 블록체인과 암호화폐는 어디로 가는가?
#2 지금, 진짜 탈중앙화 블록체인이 필요한 때
#3 공공선을 위한 블록체인: 완전히 새로운 양상을 꿈꾸다.
#4 암호화폐, 민주주의를 달성할 수 있을까?
#5 왜 SCP는 블록체인 프로토콜의 미래인가?
#6 암호화폐 업계의 충성 고객, 홀더: 그들은 무엇을 기다리나?
#7 민주주의로 암호화폐를 다시 되살리다.
#8 검열 저항 2.0
#9 인류를 위한 지성
#10 암호화폐가 세상에 기여하는 단 한가지 방법
#11 스마트 컨트렉 블록체인 생태계 시대
#12 블록체인에서 ‘신뢰’는 왜 큰 이슈인가?


Please join our communication channels as follows!

Website(Kor): https://bosagora.io/ko
Website(Eng): https://bosagora.io
Telegram(Kor): https://t.me/bpf_korea
Telegram(Eng): https://t.me/bpf_eng
BOSAGORA Official Announcement: https://t.me/boa_announcement
Medium: medium.com/bosagora
Twitter: https://twitter.com/BOSAGORA1
Reddit: https://www.reddit.com/r/BOSAGORA_BOA/
Facebook: https://www.facebook.com/BOSAGORA/
Linkedin: https://www.linkedin.com/company/bpf-korea/
Youtube: http://bit.ly/2YFpd5r
Github: https://github.com/bpfkorea

BOSAGORA TEAM


0 Comments

댓글 남기기

Related Stories

Arrow-up