네트워크가 내 구운 블록을 무시한 이유는 무엇입니까?
-
-
저도 같은 케이스를 가지고 있었기 때문에 관심이 있습니다!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
-
동의하지 않습니다. 한 수준에서 우선 순위 0이 우선 순위 1보다 높은 적합성을 갖는 두 블록을 보았지만 우선 순위 1 블록은 여전히 성공합니다.문제의 블록 수준이 x라고 가정 해 보겠습니다.레벨 x (레벨 x + 1에 포함됨)에서 우선 순위 0 블록을 승인 할 수있는 보증인은이를 보는 즉시 승인 할 수 있습니다.일단 승인을 받으면 동일한 레벨 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을 선택한 이유는 무엇입니까?