ネットワークがベイクされたブロックを無視したのはなぜですか?
-
-
同じケースだったので、私も興味があります!I am interested as well, because I had the same case ones!
- 0
- 2019-02-07
- jdsika
-
3 回答
- 投票
-
- 2019-02-07
仕組みは次のとおりです.簡単にするために、チェーン(これまでに含まれていたすべてのブロック)の適合度が100であるとします.つまり、合計100の承認がすべてのブロックに含まれています.鎖.これで、ベイカーは次のブロック(ブロック#5)をベイクする優先度0の権限を持ち、前のブロック(ブロック#4)のmempoolに30の承認があります.
先に進んで、合計フィットネスが130(以前のフィットネスの合計+含めることができたすべての新しい承認)の高さ5のブロックを焼きます.
優先度1のパン屋は、mempool内の前のブロックに対して32の承認を持っています.おそらく、ピア接続が優れているか、あなたよりも2つ多くの承認を知っているためです.
優先度1のパン屋は、ブロックが到着したことを確認し、130のフィットネスがあることに気付きます. T + 15秒(優先度0ブロック+ 15秒をベイクした時間)で、優先度1のベイカーは、あなたがしなかった2つの承認を含めることで、132の適合性を持つブロックを構築できることに気付きます.ブロックを注入します.
ネットワークの残りの部分では、優先度1のブロックの適合度が132であり、優先度0のブロックの適合度が130しかないため、ネットワークはブランチを変更して、優先度1のブロックをチェーンの新しいヘッドにします.
>要約すると、ここにはいくつかの一般的な誤解があります:
- パン屋があなたのブロックを支持するかどうかは、それが受け入れられるかどうかを決定します.ブロックがベイクされるまで、承認は届きません.ブロック自体ではなく、ブロックを追加したチェーンの適合性を高めるだけです.
- 優先度1のパン屋は、チェーンの新しいヘッドになるブロックを焼く前に、さらに30秒待つ必要があります.実際には、15秒待つだけで、自分よりも高い適応度のブロックを注入できます.
Here is how it works: Just to keep things simple, let's say that the chain (all the blocks included up to now) has a fitness of 100. In other words, 100 total endorsements were included on all the blocks in the chain. Your baker now has priority 0 rights to bake the next block (block #5), and you have 30 endorsements in your mempool for the previous block (block #4).
You go ahead and bake a block at height 5 which has a total fitness of 130 (the total of previous fitness + all new endorsements you were able to include).
The priority 1 baker has 32 endorsements for the previous block in their mempool, maybe because they have better peer connectivity, or perhaps learned of 2 more endorsements than you did.
The priority 1 baker sees your block arrive and notices it has 130 fitness. At T+15 seconds (the time you baked your priority 0 block + 15 seconds), the priority 1 baker realizes that it can construct a block that has 132 fitness by including the 2 endorsements that you didn't, so they go ahead and inject the block.
The rest of the network sees that the priority 1 block has fitness of 132, and your priority 0 block only has fitness 130, so the network changes branch to make the priority 1 block the new head of the chain.
So, to summarize, there are a couple common misconceptions here:
- Whether bakers endorse your block determines whether it gets accepted or not. Endorsements never arrive until after your block is baked, and only increase the fitness of the chain you added your block to, not the block itself.
- A priority 1 baker has to wait an additional 30 seconds before they can bake a block that becomes the new head of the chain. They really only need to wait 15 seconds before they can inject a block that has a higher fitness than yours.
-
- 2019-02-07
シェルは現在
新しいヘッドを無視します仮想の次の頭よりも適合性が低い場合-mempool内のすべての承認で焼き上げられます.この架空の次のフィットネスは、そこのコードでは context_fitness
と呼ばれます.これは、ベイクされたブロックに含まれる承認が、承認者がmempoolに表示するよりも少ない場合、承認者はあなたのブロックを無視し、優先度1のブロックを待つことを意味します.
The shell currently ignores a new head if it is less fit than the hypothetical next head -- baked with all the endorsements in the mempool. This hypothetical next fitness is called
context_fitness
in the code there.This means that if your baked block includes fewer endorsements than endorsers see in their mempool, they will ignore your block and wait for the priority 1 block.
-
この論理の背後にある理由は何ですか?次のブロックで何が起こるかという理由で、完全に焼き上げられたブロックは無視されますか?これを防ぐ/これを克服するために何ができるでしょうか?What is the reasoning behind this logic? My perfectly-fine-baked block is ignored because of what might happen for the next block? What can be done to prevent this/overcome this?
- 0
- 2019-02-09
- utdrmac
-
理由がわかりません、ごめんなさい.これは、メインネットhttps://gitlab.com/tezos/tezos/commit/613e14a297e2f75ef8a6715c22cd86b7f296b5deのこのコミットで導入されました.悪意のあるパン屋が試みる可能性のあるいくつかの潜在的な妨害を軽減するかどうか疑問に思いますが、私にはわかりません...I don't know the reasoning, sorry. It was introduced in this commit in mainnet https://gitlab.com/tezos/tezos/commit/613e14a297e2f75ef8a6715c22cd86b7f296b5de . I wonder if it mitigates some potential disturbances a malicious baker could try, but I don't know...
- 1
- 2019-02-10
- Tom
-
- 2019-02-07
ピアとの接続が不十分である可能性が最も高いか、少なくともその時点で重要なピア(ブロックの支持者、次のパン屋)との接続が不十分です.
承認者は、より高い適応度でブロックを承認しますが、二重に承認することはできません.つまり、彼らがあなたのブロックを見てそれを承認した場合、p1ブロックが登場したときに彼らは考えを変えることができません(それがより高いフィットネスレベルを持っていたとしても).
あなたの場合、承認者はあなたのブロックを十分な速さで受け取っていないため、p1ブロックを承認する可能性があります.そのp1ブロックの適応度が高かったため、承認者はそのブロックを承認しました.
承認者が優先度の高いブロックを使用するのはなぜですか?正規のブロックになる可能性が高く、承認者は、承認が成功した場合にのみ支払いを受けるためです.
Most likely poor connection to peers, or at least the ones that mattered at the point in time (the endorsers for your block, and baker of the next).
Endorsers will endorse the block with the higher fitness, but they can't double endorse. That means if they saw your block and endorsed it, they can't change their mind when the p1 block came along (even if it had a higher fitness level).
In your case, the endorsers never received your block fast enough allowing the potential of endorsing the p1 block. That p1 block had a higher fitness, so the endorsers endorsed that block.
Why would endorsers go with a higher priority block? Because it has a higher chance of being the canonical block, and endorsers only get paid if the block the endorse succeeds.
-
これは少し不正確です.承認者は特定のブロックを承認するのではなく、チェーンを承認します.承認はmempoolに入り、次のブロックに含まれます.各承認は基本的に、特定のチェーンの適合度に1を追加します. したがって、ブロックが選択されなかった理由は、承認がそれほど多く得られなかったためではありません.承認は少なくとも1分後に発生し、次のブロックまで含まれないためです.ブロックが選択されなかった理由は、優先度1のパン屋が、mempoolからより多くの承認を含むブロックを作成できたためです.This is slightly inaccurate. Endorsers don't endorse a particular block, they endorse a chain. Endorsements go into the mempool and get included on the next block, and each endorsement basically adds 1 to the fitness of a given chain. So, the reason your block wasn't selected wasn't because it didn't get as many endorsements, because those happen at least a minute later and don't get included until the following block. The reason your block wasn't selected was because the priority 1 baker was able to construct a block that included more endorsements from their mempool.
- 0
- 2019-02-07
- Luke Youngblood
-
同意しません-1つのレベルで2つのブロックを確認しました.優先度0は、優先度1よりも適合度が高くなっていますが、優先度1のブロックは引き続き成功しています.問題のブロックレベルがxであるとしましょう.レベルxで優先度0のブロックを承認できる(レベルx + 1に含まれる)承認者は、それを見るとすぐに承認できます.一度承認されると、同じレベルxの別のブロックの優先度が高い場合(この場合は優先度1のブロック)、これは二重の承認になるため、承認することはできません.I disagree - I've seen two blocks at one level, priority 0 having a higher fitness than priority 1, but the priority 1 block still succeeding. Lets say the block level in question is x. The endorsers who can endorse the priority 0 block at level x (which are then included in level x + 1) can endorse it as soon as they see it. Once endorsed, they can't then endorse another block at the same level x if it has a higher priority (in this case, the priority 1 block) as this would be a double endorsement.
- 0
- 2019-02-07
- Stephen Andrews
ベイク優先スロット0がありました.ブロックを正常にベイクしました.ブロックをネットワークに正常に挿入しました(以下のパン屋のログに示されています).しかし、何らかの理由で、優先度1のパン屋は実際にブロックを焼き、報酬を受け取りました.なぜですか?
私のブロックの適応度が優先度1のブロックよりも低いことは理解していますが、それがどのように発生したかを知りたいと思います.私の理解では、優先度1は、60代が経過するまで、ブロックの注入を「試みる」ことすらできません.これはプロトコルが機能する方法ではありませんか?優先度0/1/2/3/Nはすべて同時に注入され、優先度0のブロックを最初に承認するかどうかは承認者次第ですか?
私の場合はそういうことが起こったようです.ログには、私が優先度0であったことが明確に示されていますが、何らかの理由で、承認者は私のものではなく、優先度1のブロックを承認することにしました.プロトコル開発者に答えてもらいたい質問は「なぜ」ですか?実際に指定した時間内に優先度0のブロックを挿入した場合、承認者が優先度1を選択したのはなぜですか?