1st Year Anniversary, Change the way we store enrollments, etc.

Monthly Report May 2020

BOSagora
BOSagora
19 min readJun 10, 2020

--

DEVELOPMENT

Once again, May was a fantastic month for the AGORA team. The team was hard at work contributing to the AGORA codebase as well as making substantial contributions to the Alpine Linux codebase. We are still hard at work getting Quorum Balancing properly configured and in a shippable state. Once the team finalizes a full-scale implementation of the Quorum Balancing algorithm we can then shift our focus to other larger pieces of larger validator functionality. In addition to making progress on Quorum Balancing, we are also continuing to develop the Administrative Interface, and a few other issues related to how we handle pre-images. The following is a summary last months development activity and items that are currently still in development:

Core Development in May:
Monthly Activity:
Last month we had 82 pull-requests and 52 active issues. Of which:

  • 11 pull request proposed
  • 71 pull requests merged
  • 27 new issues
  • 25 issues closed

Functionality Developed:

Change the way we store enrollments #735

This feature was developed by Jay during the first part of May. Currently, we add Enrollment to the EnrollmentManager when they are received but before they are validated:

/// 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);

}

}

After consensus is made. Doing it this way has a few issues:

  • It is impossible to replace an enrollment unless the user changes their key (with this comes a 2 week waiting period).
  • This table is never cleaned up.
  • We mix the data we use before and after consensus, which is error-prone.
  • addValidatedBlock does not add Enrollments, only updates their height, which means catch-up is broken.

It would be best to have those two data sets apart, and only have active enrollments in the EnrollmentManager. The separation should probably be similar to the transaction pool / UTXO set.

Definition of Done:

  • Make the way to store Enrollments like the way similar to the transaction pool / UTXO set.
  • Clean up the table when enrollment has expired.

Please refer to the Github link below for more information.

https://github.com/bpfkorea/agora/issues/735

Split up Full Node and Validator functionality into two separate classes #586

This feature was developed by Andrej during the first part of May. Currently, the Node class contains functionality for both a Full Node and a Validator. The nominator instance should not be visible for Full Nodes, because they are not part of consensus.

Ideally, we would have something like this:

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 { … }

Notice how Validator is a ‘FullNode’ and provides additional functionality through the agora.api.validator API interface. Also notice that: API in the agora.node.FullNode and agora.node.Validator modules are different. One refers to the one in agora.api. ’FullNode’ and another refers to agora.api.Validator.

Definition of Done:

  • Split the classes into two
  • Each class should ideally live in its own module, e.g. FullNode.d, Validator.d
  • Based on the configuration of the node, either FullNode or Validator should be instantiated when we want to start a node.
  • Fields which only belong in the Validator class should not be present in the FullNode class. For example, the Nominator instance should only be visible in the Validator class.
  • The test-suite has tests for both FullNode and Validator. It should be possible to instantiate a mixed set of nodes (some are FullNode, some are Validator) and make the tests still work.

Please refer to the Github link below for more information.

https://github.com/bpfkorea/agora/issues/586

Add utilities which verify vtables match on D & C++ sides #323

This feature was developed by Michael during the first part of May. It’s very easy to accidentally forget to prototype a method on the D side, causing the vtable to mismatch. This manifests in what appears to be weird memory corruption bugs, but in reality, the stack trace (e.g. via LLDB) will tell us if the call stack makes sense, or if the wrong method was called. We should have some utility code that verifies this, just like the current layout/size checks.

Please refer to the Github link below for more information.
https://github.com/bpfkorea/agora/issues/323

Implement ‘enum’ formatting in Oceans formatter #725

This feature was developed by Michael during the first part of May. Since Ocean dropped D1 compatibility, it’s now possible to do this and would simplify our life a bit.

Definition of Done:

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”);

}

Please refer to the Github link below for more information.
https://github.com/bpfkorea/agora/issues/725

Add validation checking code for pre-images being revealed #694

This feature was developed by Jay in the middle of May. In the current implementation of managing enrollments and pre-images, there is no code for checking the validity of pre-images. The end result is to have a validator set check the validity of the pre-images being received from several validators.

Definition of Done:

  • The validator set checks incoming pre-images with enrollment data

How to implement:

  • The validator set hashes a random seed of an enrollment by the difference in the height between the random seed and the incoming pre-image, and compares the hash value and one of the pre-image.
  • The Enrollment structure must have the height of its random seed for checking the validity.

Please refer to the Github link below for more information.
https://github.com/bpfkorea/agora/issues/694

Implement range support in `ocean.text.convert.Formatter` #718

This feature was developed by Michael in the middle of May. Agora uses a library called Ocean to print logs during operation. Ocean does not support the ‘Range’ type so we cannot understand the ‘Range’ type output. The goal is to make sure we are able to understand the ‘Range’ type output.

Please refer to the Github link below for more information.
https://github.com/bpfkorea/agora/issues/718

Apply the sliding window concept for managing pre-images #767

This feature was developed by Jay in the middle of May. Currently, node use somewhere around 100,000 pre-images created, and the pre-images are matched each with the height of a block. One area of improvement has been identified in regards to matching each pre-image with a blocks height. This alternative is to apply the sliding window concept. This concept allows for pre-images to be retrieved based on the round and cycle.

Definition of Done:

  • To manage pre-images based on cycle and round
  • To determine the current round and cycle when restoring all the information when a node needs to restore all the information.
  • To use a PreImageCache in managing pre-images.

Please refer to the Github link below for more information.

https://github.com/bpfkorea/agora/issues/767

Network manager needs to be reworked #587

This feature was developed by Andrej in the middle of May. When we initially implemented this the goal was to support Full Nodes (first milestone). Full Nodes connect to a minimum number of clients via the min_listeners config option.

Validators should not have this config option. The minimum number of clients it connects to is the number of nodes in its quorum configuration. They do not care about connecting to random Full Nodes, it is Full Nodes which care about connecting to Validators & other Full Nodes.

There are various sets inside, and it’s all a bit too complicated to reason about:

  • todo_addresses
  • known_addresses
  • connecting_addresses

In addition to that, some of the initialization in start() should be moved to the constructor so the class is always in a ready-to-go state. Otherwise, it’s possible some incoming requests are routed to the NetworkManager while start() hasn’t yet been called, which leaves it in an inconsistent state.

Please refer to the Github link below for more information.
https://github.com/bpfkorea/agora/issues/587

Reveal pre-images on a timer #582

This feature was developed by Henry at the end of May. Instead of having the pre-image reveal happen on putTransaction, it should be done via a timer.

Currently this is done here:

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();

}
}

This can be trivially done via Vibe.d’s setTimer function.

It is currently not implemented in LocalRest, but since we have non-blocking ‘sleep’ and ‘runTask’ as primitives, it should be trivial to implement it.

Please refer to the Github link below for more information.
https://github.com/bpfkorea/agora/issues/582

Generate build artifacts to inspect PR failures #745

This feature was developed by Mathias at the end of May. This issue is extremely straightforward.

For example, we should be able to do the following after this is completed:

  • Inspect the object files when there are linker issues
  • Inspect any core dumps when our tests crash

Please refer to the Github link below for more information.
https://github.com/bpfkorea/agora/issues/745

Ongoing Validator Development:

MARKETING

BOSAGORA 1st Year Anniversary

BOSAGORA celebrated 1st year anniversary last May 16. During the past 1 year, we achieved many things including airdrop to existing holders at the same time when the project started, listing in global exchange, and unfolded various marketing activities to maintain beginner’s mindset which was a promise to the community. Also, we disclosed monthly expenditure details to conserve transparency. BOSAGORA could reach this far thanks to the support and trust of the community. As we have done so far, we will keep trying our best to reap the fruit based on transparent communication.

BOA, Available at CoolWallet S

Since the MOU with CoolBitX in last May, it has become possible to use BOA tokens in the hardware wallet CoolWallet S. Therefore, BOA holders around the world can use the CoolWallet S to store BOA tokens more safely and conveniently. It’s easy to store BOA tokens in CoolWallet S. Simply transfer the BOA tokens from other exchanges or wallets to CoolWallet S and you can check the BOA tokens in your CoolWallet S.

And the safety of the wallet has also increased. Thanks to CoolBitX’s crypto-asset anti-money laundering solution(Signa Bridge), it is possible to securely share the information of the sender and recipient during cryptocurrency transactions, making it more secure than other hardware wallets. As a result, BOA token holders can store BOA without worry.

Quiz Event to Celebrate Partnership with CoolBitX

Many people from communities at home and abroad participated in the CoolWallet S quiz event, and we sent winners CoolWallet S with the BOSAGORA logo printed on them. Since then, many people have left a review of CoolWallet S along with an evidence photo.

Besides this, we are preparing a partnership for mutual development with a global certification company and an edu-tech company. BOSAGORA will proceed with the development of the main net while continuing to discover beneficial partnerships for the BOSAGORA ecosystem after the main net release.

‘Let COVID-19 Go’ Campaign to Overcome Corona era Ended Successfully

Many members of BOSAGORA community participated in the ‘Let COVID-19 Go’ campaign by keeping up with hygiene and refraining from going to gatherings. It drew much attention with 100 new community members being added within a short period by existing members inviting their friends. BOSAGORA will continue taking initiative as a project acting together with the community to overcome the corona era.

BOSAGORA Selected Ambassadors by Country

We recruited global ambassadors assigned to supporting global community activities. This led BOSAGORA to efficiently promote itself by producing content regarding development, partnership activities, and others produced internally in each local language. In the first phase, we will deliver our contents vividly to local community members in cooperation with renowned communities in Turkey, Japan, Russia, Spain, Southeast Asia, and expand this further to other countries later on.

Ambassador by country
🇹🇷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

Global AMAs

BOSAGORA held AMAs in May. During the last AMA, participants asked in-depth questions based on development material we released such as questions related to ‘validator’ and ‘flash layer’ under continuous development, and questions of how we are going to overcome the corona era as a project countering corona by holding a various participatory campaign. With these two AMAs in May, 100 new members were added to Twitter and Telegram each as part of the signals showing that the project is drawing continuous attention.

BOSAGORA is Now a Signatory to ‘Blockchain Bill of Rights’ of World Economic Forum

World Economic Forum announced “Blockchain Bill of Rights”. It urges every government, institute, company, and individual to plan, develop and utilize Blockchain service as per what is written in this bill in order to provide more transparent, convenient, considerate service to the public in line with the foundational values for a decentralized future.

BOSAGORA has become its first signatory from Korea amongst blockchain projects.

Development Status at a Glance, Website Renewal

We disclosed detailed development records on the technology page on our homepage to share development status in accordance with maintaining ‘transparency’. On technology page of renewed BOSAGORA homepage, you may find out important updates over development, development progress by importance, and entire development history at a glance to share all development information transparently. As a result, one can check all information related to BOSAGORA Development including the most important development schedule, progress status, and detailed contents of them at GitHub.

Hankook Blockchain News(HKBnews) Starts to Serially Publish BOSAGORA Column

Tech Trends, the column of BOSAGORA, briefing status, and technology of blockchain and cryptocurrency industry from a view of global coin project, started being contributed to Korea Blockchain News under the name of BOSAGORA column from June 8. BOSAGORA column is composed of contents drawing attention such as the importance of implementing democracy in the cryptocurrency industry, next-generation Censorship Resistance, and Smart Contract.

Here is the full article from Korea Blockchain News BOSAGORA column: https://bit.ly/2AWhERh

BOSAGORA Column List (Provisional)

#1 The State of Blockchain & Cryptocurrency in 2020
#2 Now is the Time for a Truly Decentralized Blockchain
#3 Blockchain for good: changing the narrative
#4 Can we Finally Achieve Democracy in the Crypto Industry?
#5 Why SCP is the Future of Blockchain Protocol?
#6 Loyal Holders in Cryptocurrency Industry: What Are They Waiting for?
#7 Revive Cryptocurrency with Democracy
#8 Censorship Resistance 2.0
#9 Intelligence for Humanity
#10 The only way cryptocurrency can contribute to the world
#11 Era of Smart Contract Blockchain Ecosystem
#12 Why is ‘trust’ in blockchain a big issue?

개발

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 블록체인에서 ‘신뢰’는 왜 큰 이슈인가?

--

--