Validator Development and Schnorr Multi-Signature Implementation Are Officially Done!

Dev. team Sprint 32 Update

Dec 30, 2020 · 5 min read

Functionality Implementations

Image for post

Implement support for non-interactive threshold signatures (linear complexity, not MuSig) #1428 (Basic Script Execution Engine, Feature)

Design & implement slashing rules for missing pre-images #1076 (Slashing Protocol, Feature)

Image for post
Image for post

Currently, we are building rules based on the availability of pre-images: signature scheme and quorum balancing. We also have a timer in place to ensure our pre-images are available long before we need them. Now we need to add a way to detect and log whenever pre-images are missing, decide on a policy of what to do with it, and implement it.


The first step is to detect whenever we are missing a pre-image. This will allow us to make sure we have everything properly implemented at the moment. Once this is the case, we can move on to writing a test case. That test case should have at least one node in the network doing the following:

  • (A) Never send any pre-image after its initial enrollment;
  • (B) Only send one pre-image after enrolling then no more;
  • © Send pre-image for half of its cycle (potentially in one burst) then stop sending pre-image;
  • (D) Send pre-image for half its cycle, stop it for a quarter of the cycle, resume until the end; Those 4 situations should be tested independently, so not during the same cycle, and not using the same utxo key / public key.

This will allow us to see how the network currently behaves when faced with those situations, and correct any remaining issue.

Policy Decision

Once we have that basis in place, we will need to come up with the slashing policy for missing pre-images. As discussed in the previous meetings, missing pre-images is one of the gravest mistakes a validator can commit, short of outright hostile actions (such as signing two blocks for the same height).

The following was discussed before any implementation took place:

  • Gradual punishment for validators missing to relay their pre-image, so that they still have an incentive to come back and propagate them if they miss a deadline. The more pre-images, the safer the randomness function.
  • Applying a loss-of-income penalty to the quorum: this gives a strong incentive to the quorum to keep and propagate pre-images for nodes in their quorum, ensuring that they will not simply ignore them to maximize the penalty of a validator;

Expose a basic API #15 (Faucet, Feature)

The basic API is comprised of:

  • GET /utxos => Return an array of all UTXOs known;
  • POST /send?recv=KEY&amount=1234: Send amount BOA to KEY, using owned UTXOs;

Schnorr multi-signature of blocks #1319 (Block Creation, Feature)

Validators “gossip” their block signatures after the block is externalized, which means that even after consensus is reached, and the block is externalized, more validators can add their signature to the block.

Ongoing Development

  • Implement transaction fee collection #1435
  • Agora crashes on too large input #1278
  • Implement indirect payment channels via HTLCs #1419
  • libexecinfo (used on Alpine Linux) is buggy #1407
  • Flash layer research & development #1266 (Ongoing)

Functionality Implementations

#1428 비상호적인 임계 서명 지원 구현(선형 복잡도, Musig 아님), 기본 스크립트 실행 엔진, 기능

#1076 누락된 프리이미지를 위한 슬래싱 룰 설계 및 구현 (슬래싱 프로토콜, 기능)

Image for post
Image for post

현재 개발팀은 사전 이미지의 가용성 (서명 체계 및 쿼럼 밸런싱)을 위한 기반 규칙을 구축하는 중입니다. 또한 프리 이미지가 필요해지기 훨씬 전부터 프리 이미지를 사용할 수 있도록 타이머를 준비해 두었습니다. 이제 프리이미지가 누락될 때마다 감지 및 기록하는 방법을 추가하고 이를 처리할 정책을 결정하고 구현해야 합니다.


첫 단계는 사전 이미지가 누락될 때마다 감지하는 것입니다. 이를 통해 현재 모든 것이 제대로 구현되었는지 확인할 수 있습니다. 이 경우 테스트 케이스 작성으로 넘어갈 수 있습니다. 해당 테스트 케이스는 다음을 수행하는 네트워크에 하나 이상의 노드가 필요합니다.

(A) 최초 등록 후에는 사전 이미지를 보내지 말 것.
(B) 등록 후 하나의 사전 이미지 만 보내고 더 이상 보내지 않음.
(C) 주기의 절반 동안 (잠재적으로 한 번의 버스트에서) 사전 이미지를 보낸 다음 사전 이미지 전송을 중지함.
(D) 주기의 절반 동안 사전 이미지를 보내고, 주기의 1/4 동안 중지하고, 끝까지 다시 시작함. 이 4가지 상황은 독립적으로 테스트해야 하며, 동일한 주기일 필요가 없고, 동일한 utxo 키 / 공개 키를 사용하지 않아야 함.

이를 통해 네트워크가 해당 상황에 맞닥뜨렸을 때 어떻게 반응하고 남은 이슈들을 어떻게 처리하는지 확인할 수 있습니다.

정책 결정

기반이 마련되면 사전 이미지 누락에 대한 슬래싱 정책을 마련해야 합니다. 이전 회의에서 논의한 바와 같이, 누락된 사전 이미지는 검증자가 범할 수 있는 가장 심각한 실수 중 하나이나, 노골적인 적대 행위 (예 : 같은 높이의 두 블록에 서명)는 없습니다.

정책 구현 전, 다음 사항이 논의되었습니다.

프리이미지를 전달하지 못한 검증자에 대한 점진적 처벌을 통해, 마감일을 놓친 경우 다시 돌아와 전파하도록 합니다. 프리이미지가 많을수록 무작위성 기능이 더 안전합니다.

쿼럼에 소득 손실 페널티 적용 : 검증 자의 패널티를 최대화하여, 쿼럼이 쿼럼 내 노드에 대한 프리이미지 유지와 전파를 무시하지 않고 전파하도록 하는 강력한 동기를 제공합니다.

#15 기본 API 노출(Faucet, 기능)

기본 API는 다음으로 구성됩니다.

  • GET /utxos => 알려진 모든 UTXO들의 집합체의 반환
  • POST /send?recv=KEY&amount=1234: 보유한 UTXOs를 이용해 BOA를 KEY로 보낸다;

#1319 블록들의 쉬노르 다중 서명 (블록 생성, 기능)

검증자는 블록이 외부화된 후 블록 서명을 “가십”합니다. 즉, 합의에 도달하고 블록이 외부화된 후에도 더 많은 검증자가 블록에 서명을 추가할 수 있습니다.

Ongoing Development

  • #1435 트랜잭션 수수료 징수
  • #1278 너무 큰 입력에 Agora 충돌
  • #1419 HTLCs를 통한 간접 지불 채널 구현
  • #1407 libexecinfo(알파인 리눅스에서 사용된)는 버그투성이다
  • #1266 플래시 레이어 리서치 및 개발(진행 중)


Contribute to making a better world with blockchain…

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

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