A Story of Empty Blocks

AMO Labs Dev
AMO Labs Official
Published in
14 min readNov 21, 2019

One of the most important characteristics of modern blockchain technology is that it serves as a distributed ledger system, where a ledger is an ordered list of transactions. So it is an important role of a blockchain node, to collect a bunch of candidate transactions and weave them into a block and broadcast it. With this in mind, it is natural to think that every block in a blockchain contains a list of transactions, i.e. non-empty. But it is not. There are a lot of empty blocks in famous blockchain systems such as Bitcoin and Ethereum. You can find that people already asked why it is so [1][2].

One major reason for empty blocks is that blockchain protocols such as Bitcoin or Ethereum does not prohibit empty blocks. Empty blocks are allowed by the protocols. They are not mysterious anomalies. They are perfectly normal, and other nodes in a blockchain network would be content if you may make an empty block and broadcast it to be included in a chain.

What is an empty block? The term “empty” means there is no user-supplied transactions in the block. But empty blocks are not so empty. There are some data even in an empty block. It must have proper block headers at least. Even more, every block in Bitcoin contains one transaction(UTXO) to record a reward given to the miner. But empty blocks contain no transactions supplied from the users. So the miner who made an empty block processed no transactions and also made no contribution to the chain in viewpoint of recording transactions in the chain.

Then what are they good for, and why does the protocol allow them? You may find many good answers in the internet, but we give the following three reasons:

  • strengthen security of the chain
  • represent the progress of time
  • supply newly generated coins to the chain

A blockchain is an ever-growing chain of blocks. It weaves a new layer(new block) of facts stacked upon existing reality(existing blocks). It is harder to forge a certain fact if there are more layers of reality based on the fact. You may find enormous number of internet posts out there about this property. So let’s skip this explanation.

A blockchain is an ever-changing database. So it is essential to constantly change as time passes. Every new block represents one unit time passed since the last block. We don’t worry when there are plenty of newly generated transactions to be included in a block. But what if there is no new transaction in the network for a certain amount of time period?(If there is no new transaction for a very long time, people may consider the chain is collapsed. We must worry about even bigger problems then.) Say the chain is configured to create a block in every second but there is no new transactions for 10 seconds, for example. If the chain protocol is irrelevant to exact time progress, the chain may lay dormant until there are any new transactions to process. But many blockchain systems introduce time-dependent properties, as is the case for AMO blockchain. A chain may introduce a time-locked stakes or expiration mechanism based on the progress of time, and it is measured in blocks in many cases, for it is tricky to handle clock-time in blockchain protocols. No blocks? Then no means to measure time progress.

It might be a controversial argument that a public blockchain requires an incentive mechanism to encourage miners or validators. But, given that a blockchain system is a kind of closed economy system based on its own currency, it is inevitable to devise some kind of minting mechanism into it. Some of the early blockchain systems such as Bitcoin or Ethereum have very simple philosophy about minting. “You made a block? Then you get a reward from newly generated coins.” No matter what number of transactions in the block. It is a reward mechanism and a minting mechanism at the same time.

Modern blockchain projects give their own reward or minting mechanism. We also provide our own: newly generated coins for every transaction processed. It is notable that reward is for a transaction, not for a block. Since the reward is for transactions, validators don’t get reward for an empty block. In this way the coupling between reward and minting get loosened. However, empty blocks are still required in some cases in AMO blockchain. As per a story about stake lock-up, when a validator stakes a coin, it is initially locked and cannot be withdrawn. It will unlock after a certain number blocks. Validators expect their stakes being unlocked after some period of time, not number of non-empty blocks. They don’t care if there are enough number of transactions to fill the blocks. They expect blocks being created with appropriate interval even if the blocks are empty. But since there is no direct incentive for an empty block, so nobody is willing to create an empty block. For this matter, AMO blockchain introduced a penalty mechanism for lazy validators. If they don’t work, then they will be punished. So, even if they are not willing to create an empty block, they are forced to do so.

And that concludes a story about empty blocks in AMO blockchain.

빈 블록 이야기

현재의 블록체인 기술의 가장 큰 특징은 이들이 분산 원장을 제공한다는 것입니다. 여기에서 원장이란 순서대로 기록된 거래의 목록을 말합니다. 따라서, 블록체인 노드의 중요한 역할은 거래 항목들을 수집하고 이를 짜맞추어서 블록을 생성하고 전파하는 것이 됩니다. 이런 면에서 보면 블록체인의 모든 블록은 최소한 몇 개씩의 거래 항목을 포함하고 있다고 생각하기 쉽습니다. 그런데 그게 그렇지가 않습니다. 실제로 BitcoinEthereum과 같은 유명 블록체인을 보면 많은 수의 블록들이 비어 있습니다. 이미 많은 사람들이 이걸 발견하고 어떻게 된 것인지 질문하고 있는 것을 찾아볼 수 있습니다 [1][2].

거래 항목을 하나도 포함하지 않는 이런 빈 블록들이 생기는 것은 Bitcoin이나 Ethereum 같은 블록체인 프로토콜이 빈 블록을 막고 있지 않고 있기 때문입니다. 빈 블록들은 프로토콜에 의해 허용된 존재들입니다. 신기한 이상현상이 아니고 아주 정상적입니다. 여러분이 validator로서 빈 블록을 생성해서 체인에 포함시키기 위해 전파해도 다른 노드들은 이를 흔쾌히 허용합니다.

그래서 빈 블록이란 무엇일까요? “비어 있다”는 의미는 사용자가 생성한 거래 항목이 없다는 뜻입니다. 그러나 빈 블록이라고 완전히 비어 있는 것은 아닙니다. 빈 블록에도 몇가지 정보들이 포함됩니다. 최소한 정상적인 블록 헤더가 있어야 합니다. 이에 더해서 Bitcoin의 경우 모든 블록은 마이너에게 주는 혜택을 기록하기 위한 거래(UTXO)를 반드시 하나 포함해야 합니다. 그러나 어쨌든 정상적인 사용자가 생성한 거래들은 포함하지 않습니다. 그러니 빈 블록을 만드는 마이너는 거래를 아무것도 처리한 것이 없게 되고, 거래의 기록이라는 관점에서 보면 체인에 기여한 게 아무것도 없습니다.

그러면 이런 빈 블록은 도대체 무슨 소용이 있고, 블록체인 프로토콜들은 왜 이걸 허용하는 걸까요? 이에 대해서는 인터넷 상에서도 많은 좋은 답변들을 찾을 수 있지만, 이 글에서는 다음의 세가지를 이야기하고자 합니다:

  • 체인의 보안 강화
  • 시간의 흐름을 표현
  • 체인에 새로 생성된 코인을 공급

블록체인이란 끊임없이 이어지는 블록들의 체인입니다. 이는 이미 존재하는 현실(기존 블록들)의 기반 위에 새로운 사실들(새 블록)을 만들어 쌓는 것으로 볼 수 있습니다. 어떤 사실에 기반하는 아주 많은 층의 또다른 사실들이 있다면 현실을 조작하는 것이 훨씬 어렵게 됩니다. 이러한 특성에 대한 글들은 많은 인터넷 글을 찾을 수 있으니 이 글에서는 이쯤으로 줄입니다.

블록체인이란 또한 시간에 따라 끊임 없이 변화하는 데이터베이스입니다. 따라서 시간이 지나면 지속적으로 변하는 특성이 있습니다. 모든 블록은 마지막 블록 이후에 하나의 시간 단위 만큼의 변화를 의미합니다. 블록체인에 포함될 신규 거래들이 꽤 많이 있을 때는 별로 걱정할 것이 없습니다. 그런데 일정 기간 동안 신규 거래가 없다면 어떻게 될까요?(아주 긴 기간 동안 신규 거래가 없다면, 대중은 체인이 붕괴했다고 생각할 것이고 그런 상황이 오면 빈 블록보다 훨씬 심각한 문제들에 직면할 것입니다.) 예를 들어 체인이 1초에 하나의 블록을 생성하도록 설정되었는데 10초 동안 새로운 거래가 없다고 해 보겠습니다. 체인의 프로토콜이 엄밀한 시간의 진행과 상관이 없도록 만들어졌다면, 체인은 새로운 거래가 생길 때까지 그냥 잠든 상태로 대기하면 됩니다. 그러나 최근 많은 블록체인들이 시간 변화에 의존하는 특성들을 도입하고 있고, 그건 AMO 블록체인도 마찬가지입니다. 체인 시스템에 시간에 묶이는 스테이킹 기능이나 시간 진행에 따라 만료되는 특성이 도입될 수도 있는데, 이 때 시간의 진행은 많은 경우 블록의 수로 측정합니다. 왜냐하면 실제 시간을 블록체인에서 처리하는 것이 꽤 까다롭기 때문입니다. 그런데 신규 거래가 없어서 블록이 안 생긴다면? 시간의 진행을 측정할 방법도 없게 됩니다.

공개형 블록체인에서 마이너나 validator를 독려하기 위한 인센티브 체계가 반드시 필요한가 아닌가는 논란의 여지가 있을 수도 있습니다. 그러나 블록체인 시스템이 자체 통화에 기반하는 온전한 경제 체계라는 점에서, 어떠한 방식이든 통화가 신규로 발행되는 메커니즘은 갖추어져야 합니다. Bitcoin이나 Ethereum 같은 초창기 블록체인 시스템에서는 이와 관련해 아주 단순한 접근을 합니다. “블록을 만들어냈는가? 그러면 신규 코인으로 보상을 한다.” 블록 안에 몇 개의 거래가 포함됐는지는 상관이 없습니다. 이는 보상 체계이면서 동시에 화폐 발행 체계이기도 합니다.

현대의 블록체인 프로젝트들은 그들 자신만의 보상과 화폐 발행 체계를 갖추고 있습니다. AMO도 그렇습니다: 처리되는 거래마다 새로 발행된 코인을 보상합니다. 주목할 것은 보상이 블록 생성에 주어지는 것이 아니라 거래 처리에 주어진다는 점입니다. 보상이 거래 처리에 주어지다보니 빈 블록, 즉 거래가 포함되지 않은 블록을 만든 validator는 보상을 받지 못합니다. 이 방식은 전통적 블록체인들과는 다르게 보상과 화폐 발행 사이의 긴밀함이 감소하게 만듭니다. 그러나, AMO 블록체인에서도 경우에 따라 빈 블록이 필요해지게 됩니다. Stake 잠금 기능 소개라는 글에서 설명한 것과 같이, validator가 새로 스테이킹을 하면 일단 잠기게 되고 당장은 빼낼 수가 없습니다. 이후 정해진 수의 블록만큼 블록체인이 진행을 하면 잠금이 풀립니다. 이 규칙이 validator들에게 받아들여질 때는 일정 시간이 지나면 잠금이 풀린다고 이해될 개연성이 아주 큽니다. 비어 있지 않은 블록이 몇개냐 같은 것은 관심이 없을 것입니다. 또한 블록을 지속적으로 채울 만큼의 수의 거래가 있는지도 별 관심이 없을 것입니다. 빈 블록이든 아니든 정해진 간격으로 블록이 만들어지는 것만 기대할 것입니다. 하지만 빈 블록에 대한 직접적인 보상이 없다 보니 아무도 자발적으로 빈 블록을 만들지는 않을 것입니다. 이 문제에 대해서는 AMO 블록체인에 도입된 게으른 validator에 대한 페널티 체계가 도움이 됩니다. 일을 안 하면 벌칙을 받습니다. 따라서 자발적으로는 빈 블록을 만들고 싶지 않을지라도 그렇게 하도록 강제됩니다.

이상으로 AMO 블록체인과 빈 블록의 관계에 대한 이야기였습니다.

--

--