Geth PoA Clique и 100% завершенность транзакции

В Биткойн и Эфириум PoW у нас есть вероятностный BFT. То есть завершенность транзакции никогда не достигнет 100%, но будет очень близка к этому при каждом последующем подтверждении.

Как насчет Geth POA Clique или Paritiy POA Aura? Есть ли момент времени, когда сделка может считаться на 100% завершенной.

Например, в сети Clique с 3 силерами (S1, S2, S3) со следующей блочной структурой:

...
Block #100 [TX1], sealed by: S1 (in-order -> block-difficulty:2)
Block #101 [], sealed by: S2 (in-order -> block-difficulty:2)
...

В блоке № 102: могу ли я считать TX1 100% окончательным в сеттинге с 3 силерами?

На данный момент невозможно представить альтернативную цепочку, пока 50% + 1 пломбировщики честны (?)

Связано с: Какое количество подтверждений считается безопасным для Geth PoA Clique?

Я думаю, что это не окончательность; может произойти гоночная печать, и мы не можем быть уверены, что блок может быстро распространиться на другие узлы, это зависит от характера сети.
А если я ослаблю условие, скажем, считаю сделку окончательной, если 50%+1 силир это подтвердили? Тогда должен быть момент времени, когда у меня будет эта ситуация, верно?
в исходном коде Эфириум считает, что 5 подтвержденный блок был включен в каноническую цепочку, также известную как окончательность.
Не могли бы вы указать мне место кода, пожалуйста.
кажется, они просто увеличиваются до 7 подтвержденных блоков `miningLogAtDepth = 7` go-ethereum/miner/worker.go

Ответы (2)

Вы можете считать транзакцию 100% окончательной, если существует верхний предел сетевой задержки между узлами и 51% валидаторов честны и подписали ваш блок.

Если вы не можете гарантировать 51% честных валидаторов, вам нужно, чтобы 100% валидаторов подписали ваш блок, 66% из них были эгоистичными, а 1 честным.

Согласно моему исследованию « Какое количество подтверждений считается безопасным для Geth PoA Clique? », транзакция в сети клики с 3 силерами может считаться окончательной (реорганизация этой транзакции больше невозможна), если все три силера подтвердили блок, в который была включена транзакция. В общем, требуемое количество различных силеров в блоках подтверждения составляет: n - floor((n-1) / 3), где n = общее количество силеров в сети.

Смотрите ответ в связанном посте для объяснения.