BOSAGORA
Published in

BOSAGORA

Network manager needs to be reworked, Reveal pre-images on a timer, etc.

Dev. Team Update Sprint 17

Functionality Implementations

#587 Network manager needs to be reworked

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.

#582 Reveal pre-images on a timer

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
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.

#745 Generate build artifacts to inspect PR failures

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

Ongoing Development

  • Implement shell quorum balancing #785
  • Broadcast SCP messages to all a Node’s connected Validator peers #606
  • Restore the enrollment information of a node #789
  • Should be possible to re-enroll a Validator while it is in the validator set #824
  • Block with height 0 also needs to be verified #747
  • Should not accept a block with no enrollments if the validator set will become empty #822
  • Implement a TCP, binary-based interconnection protocol #203

Functionality Implementations

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

위 작업의 구현을 위한 첫 목표는 풀노드(첫 이정표)를 지원하는 것이었습니다. 풀노드는 min_listeners 설정 옵션을 통해 최소 숫자의 클라이언트에게 연결됩니다.

검증자들에게는 이런 설정 옵션이 필요 없습니다. 검증자가 연결되는 클라이언트의 최소 숫자는 쿼럼 설정에 있는 노드의 숫자입니다. 그들이 임의의 풀노드에 연결되는 것은 중요하지 않습니다. 풀노드에게 중요한 것은 검증자와 다른 풀노드에 연결되는 것입니다.

내부에 다양한 세트가 있는데 이들은 너무 복잡해서 추론하기가 쉽지 않습니다:

  • todo_addresses
  • known_addresses
  • connecting_addresses

그리고 start()에 있는 초기화의 일부는 생성자로 옮겨져서 클래스가 언제나 준비된 상태가 되도록 해야 합니다. 그렇지 않으면, start()가 호출되지 않았는데도 유입된 요청들이 NetworkManager로 전송되고, 이는 네트워크를 일관성이 없는 상태로 만듭니다.

#582 타이머를 이용한 프리이미지 노출

프리이미지 노출이 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에 현재 구현되지 않지만, 저희가 primitive 로써 논블로킹 함수인 ‘sleep’과 ‘runTask’가 있으므로, 구현하기가 쉬워야 합니다.

#745 PR 실패 점검을 위해 build artifacts를 생성

이는 매우 간단한 이슈입니다.
위 개발이 완료된 후 아래 업무들을 수행할 수 있어야 합니다.

  • linker 이슈가 있을 때 대상 파일을 점검합니다.
  • 테스트가 실패하면 어떤 core dump든지 점검합니다.

Ongoing Development

  • #785 쉘 쿼럼 밸런싱 구현
  • #606 검증자 피어에 연결된 모든 노드들에 SCP 메시지 전파
  • #789 노드의 등록 정보 저장
  • #824 검증자 세트에 있을 때 검증자 재등록이 가능해야 함
  • #747 블록 높이가 ‘0’인 것도 검증되어야 함
  • #822 검증자 세트가 비게 되면 등록이 없는 블록은 허용하지 않음
  • #203 이진 기반 상호연결 프로토콜인 TCP 구현

--

--

--

Contribute to making a better world with blockchain technology as a project enabler

Recommended from Medium

Kubernetes, gRPC Services, and Probes by Example

How to make your apps compatible to Android Go?

MicroPython on ESP32

Searching and Sorting Algorithms

Modern Data Management For Cloud Platforms

Getting Started With GitHub

Building a Dynamic Github profile with Github Actions

Interview with Kalebu Jordan: Diving Into Python 3

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
BOSAGORA

BOSAGORA

BOA

More from Medium

Fear and Greed is never too outdated!

Mati Allin Airdrops NFTs & Pins for Aubrey de Grey Donors

Viktor Radchenko to stand down as Trust Wallet CEO

Weekly Update #10