๋ณธ ๊ธ์ 2019๋ PODC์ ๋ฐํ๋ "HotStuff: BFT Consensus with Linearity and Responsiveness" ๋ ผ๋ฌธ์ ์ฌ์ธต ๋ถ์ํ ๊ธ์ ๋๋ค. PBFT๋ฅผ ์ด๋ฏธ ์๊ณ ์๋ค๋ ์ ์ ํ์ ์์ฑ๋์์ต๋๋ค.
๋ถ์ฐ ์์คํ ์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ๋ฐ๋์ ๋ง์ฃผ์น๋ ๊ฒ์ด ๋น์ํด ์ฅ์ ํ์ฉ(BFT) ํฉ์ ํ๋กํ ์ฝ์ด๋ค. 1999๋ Castro์ Liskov๊ฐ ๋ฐํํ PBFT๋ 20๋ ์ด ๋๋ ์๊ฐ ๋์ BFT ํฉ์์ ํ์ค์ผ๋ก ์๋ฆฌ์ก์๋ค. ์ค์ฉ์ ์ด์๊ณ , ์ฆ๋ช ์ด ํํํ์ผ๋ฉฐ, ์ค์ ๋ก ๋์ํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ธ๋ก์ฒด์ธ ์๋๊ฐ ์ค๋ฉด์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. PBFT๋ ๋ ธ๋ ์๊ฐ ๋์ด๋ ์๋ก ํต์ ๋์ด ์ ๊ณฑ์ผ๋ก ์ฆ๊ฐํ๋ค. ๋ ธ๋๊ฐ 100๊ฐ๋ง ๋์ด๋ ํ ๋ฒ์ ํฉ์์ ์๋ง ๊ฐ์ ๋ฉ์์ง๊ฐ ์ค๊ฐ๋ค. ๋ ํฐ ๋ฌธ์ ๋ ๋ฆฌ๋๊ฐ ์ฅ์ ๋ฅผ ์ผ์ผํฌ ๋๋ค. View-Change ๊ณผ์ ์์ ํต์ ๋์ด ํญ๋ฐ์ ์ผ๋ก ์ฆ๊ฐํ์ฌ, ์ต์ ์ ๊ฒฝ์ฐ O(n^3)์ ๋ฌํ๋ค.
HotStuff๋ ์ด ๋ฌธ์ ๋ฅผ ์ ๋ฉด์ผ๋ก ํด๊ฒฐํ๋ค. ์ ์๋ค์ ๋ ผ๋ฌธ์์ ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ฅํ๋ค:
"HotStuff๋ ๋ถ๋ถ ๋๊ธฐ ๋ชจ๋ธ์์ ์ ํ ํต์ ๋ณต์ก๋์ ๋๊ด์ ์๋ต์ฑ์ ๋์์ ๋ฌ์ฑํ๋ ์ต์ด์ BFT ํ๋กํ ์ฝ์ด๋ค."
๊ณผ์ฐ ์ด๋ป๊ฒ ์ด๊ฒ์ด ๊ฐ๋ฅํ์ง, ๋ ผ๋ฌธ์ ํ๋ํ๋ ๋ฏ์ด๋ณด์.
PBFT์ ์ ์ ๋์์ ๋ ์ฌ๋ ค๋ณด์. ํด๋ผ์ด์ธํธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด:
- Primary๊ฐ PRE-PREPARE๋ฅผ ๋ชจ๋ Replica์๊ฒ ์ ์ก (n-1๊ฐ)
- ๋ชจ๋ ๋ ธ๋๊ฐ PREPARE๋ฅผ ๋ชจ๋ ๋ค๋ฅธ ๋ ธ๋์๊ฒ ์ ์ก (n(n-1)๊ฐ)
- ๋ชจ๋ ๋ ธ๋๊ฐ COMMIT์ ๋ชจ๋ ๋ค๋ฅธ ๋ ธ๋์๊ฒ ์ ์ก (n(n-1)๊ฐ)
์ฌ๊ธฐ์ 2๋ฒ๊ณผ 3๋ฒ์ด ๋ฌธ์ ๋ค. All-to-All ํต์ ์ด ๋ ๋ฒ ๋ฐ์ํ๋ค. ๋ ธ๋๊ฐ 4๊ฐ์ผ ๋๋ 12+12=24๊ฐ๋ก ๊ฐ๋นํ ๋งํ์ง๋ง, 100๊ฐ๊ฐ ๋๋ฉด 9,900+9,900=19,800๊ฐ์ ๋ฉ์์ง๊ฐ ํ์ํ๋ค.
์ ์ ๋์๋ ๋ฌธ์ ์ง๋ง, ์ง์ง ์ฌ์์ View-Change์์ ์ผ์ด๋๋ค. PBFT์์ ๋ฆฌ๋๊ฐ ์ฅ์ ๋ฅผ ์ผ์ผํค๋ฉด:
- ๊ฐ Replica๊ฐ ์์ ์ ์ํ๋ฅผ ๋ด์ VIEW-CHANGE ๋ฉ์์ง๋ฅผ ์ Primary์๊ฒ ์ ์ก
- ์ Primary๊ฐ ์์งํ VIEW-CHANGE๋ค์ ๋ชจ์ NEW-VIEW๋ฅผ ๋ชจ๋ ๋ ธ๋์๊ฒ ์ ์ก
๋ฌธ์ ๋ VIEW-CHANGE ๋ฉ์์ง์ ํฌ๊ธฐ๋ค. ์ด ๋ฉ์์ง์๋ ํด๋น Replica๊ฐ prepared ์ํ์ธ ๋ชจ๋ ์์ฒญ์ ๋ํ ์ฆ๋ช ์ด ํฌํจ๋์ด์ผ ํ๋ค. ๊ฐ ์ฆ๋ช ์ 2f+1๊ฐ์ ์๋ช ์ ํฌํจํ๋ฏ๋ก O(n) ํฌ๊ธฐ๋ค. ์ด๋ฐ ๋ฉ์์ง๋ฅผ n๊ฐ ๋ชจ์์ ๋ค์ n๊ฐ ๋ ธ๋์๊ฒ ๋ณด๋ด๋ฉด? O(n^2) ํต์ ๋์ด๋ค.
์ฐ์์ผ๋ก f๊ฐ์ ๋ฆฌ๋๊ฐ ์ฅ์ ๋ฅผ ์ผ์ผํค๋ฉด O(n^3)๊น์ง ์น์๋๋ค. ๋ ธ๋ 100๊ฐ, ์ฐ์ ์ฅ์ 33๋ฒ์ด๋ฉด ์ฝ 1์ต ๊ฐ์ ๋ฉ์์ง๋ค. ํ์ค์ ์ผ๋ก ์์คํ ์ด ๋ฉ์ถ๋ค.
PBFT๊ฐ ์ด๋ ๊ฒ ์ค๊ณ๋ ๋ฐ๋ ์ด์ ๊ฐ ์๋ค. ์ Primary๊ฐ "์์ ํ ๊ฐ"์ ์ ์ํ๋ ค๋ฉด, ์ด์ view์์ ๋ฌด์์ด committed ๋๋ prepared ๋์๋์ง ์์์ผ ํ๋ค. ์ด๋ฅผ ์ํด 2f+1๊ฐ ๋ ธ๋์ ์ํ๋ฅผ ๋ชจ๋ ํ์ธํด์ผ ํ๊ณ , ๋ค๋ฅธ ๋ ธ๋๋ค๋ ์ด๋ฅผ ๊ฒ์ฆํ ์ ์์ด์ผ ํ๋ค. ๊ทธ๋์ ์ ์ฒด ์ํ๋ฅผ ๋ด์ ํฐ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด๋ค.
HotStuff์ ํต์ฌ ํต์ฐฐ์ ์ฌ๊ธฐ์ ์ถ๋ฐํ๋ค: ์ํ ์ ์ฒด๋ฅผ ๋ณด๋ด์ง ์๊ณ ๋ ์์ ์ฑ์ ๋ณด์ฅํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๊น?
HotStuff์ ์ฒซ ๋ฒ์งธ ํ์ ์ QC(Quorum Certificate)๋ค. PBFT์์ "2f+1๊ฐ์ ๋์"๋ฅผ ์ฆ๋ช ํ๋ ค๋ฉด 2f+1๊ฐ์ ๊ฐ๋ณ ์๋ช ์ ๋ชจ๋ ํฌํจํด์ผ ํ๋ค. ๋ฉ์์ง ํฌ๊ธฐ๊ฐ O(n)์ด ๋ ์๋ฐ์ ์๋ค.
HotStuff๋ Threshold Signature๋ฅผ ์ฌ์ฉํ๋ค. 2f+1๊ฐ์ ๋ถ๋ถ ์๋ช (partial signature)์ ํ๋์ ์ง๊ณ ์๋ช ์ผ๋ก ํฉ์น ์ ์๋ค. ๊ฒฐ๊ณผ๋ฌผ์ธ QC์ ํฌ๊ธฐ๋ O(1)์ด๋ค. ์๋ช ์ด 100๊ฐ๋ 1000๊ฐ๋ , ์ต์ข QC ํฌ๊ธฐ๋ ๋์ผํ๋ค.
์ด๊ฒ๋ง์ผ๋ก๋ ํฐ ๋ณํ๋ค. View-Change ์ ๊ฐ ๋ ธ๋๊ฐ ๋ณด๋ด๋ ๋ฉ์์ง์ ์์ ์ ์ต๊ณ QC๋ง ํฌํจํ๋ฉด ๋๋ค. ๋ฉ์์ง ํฌ๊ธฐ๊ฐ O(n)์์ O(1)๋ก ์ค์ด๋ ๋ค.
๋ ๋ฒ์งธ ํ์ ์ ํต์ ํจํด์ ๋ณ๊ฒฝ์ด๋ค. PBFT๋ All-to-All ํต์ ์ ์ฌ์ฉํ๋ค. ๋ชจ๋ ๋ ธ๋๊ฐ PREPARE์ COMMIT์ ์๋ก์๊ฒ ๋ณด๋ธ๋ค. ์ด๊ฒ์ด O(n^2)์ ๊ทผ๋ณธ ์์ธ์ด๋ค.
HotStuff๋ Star Topology๋ฅผ ์ฌ์ฉํ๋ค. ๋ชจ๋ ํต์ ์ด ๋ฆฌ๋๋ฅผ ์ค์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค:
- ๋ฆฌ๋ -> ๋ชจ๋ Replica: ์ ์ ์ ์ก (n-1๊ฐ)
- ๋ชจ๋ Replica -> ๋ฆฌ๋: ํฌํ ์ ์ก (n-1๊ฐ)
Replica ๊ฐ์ ์ง์ ํต์ ์ด ์๋ค. ํ ๋ผ์ด๋์ 2(n-1)๊ฐ์ ๋ฉ์์ง๋ง ํ์ํ๋ค. O(n^2)๊ฐ O(n)์ด ๋์๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์๋ฌธ์ด ์๊ธด๋ค. PBFT์์ All-to-All ํต์ ์ ํ ์ด์ ๊ฐ ์๋ค. ๋ชจ๋ ๋ ธ๋๊ฐ "2f+1๊ฐ๊ฐ ๋์ํ๋ค"๋ ์ฌ์ค์ ์ง์ ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. Star Topology์์๋ ๋ฆฌ๋๋ง ์ด ์ ๋ณด๋ฅผ ์๋ค. ๋ค๋ฅธ ๋ ธ๋๋ค์ ์ด๋ป๊ฒ ํ์ธํ๋๊ฐ?
HotStuff์ ๋ต์ "์ถ๊ฐ phase"๋ค. PBFT๊ฐ 2 phase(PREPARE, COMMIT)์ธ ๋ฐ๋ฉด, HotStuff๋ 3 phase(PREPARE, PRE-COMMIT, COMMIT)๋ฅผ ์ฌ์ฉํ๋ค.
๊ฐ phase์์ ๋ฆฌ๋๋ ์ด์ phase์ QC๋ฅผ ๋ชจ๋ ๋ ธ๋์๊ฒ ์ ํํ๋ค. ๋ ธ๋๋ค์ QC๋ฅผ ๋ณด๊ณ "์, 2f+1๊ฐ๊ฐ ๋์ํ๊ตฌ๋"๋ฅผ ํ์ธํ๋ค. All-to-All ๋์ ๋ฆฌ๋๊ฐ ์ ๋ณด๋ฅผ ์ค๊ณํ๋ ๊ฒ์ด๋ค.
์ธ ๋ฒ์ ์ฐ์๋ QC๊ฐ ํ์ฑ๋๋ฉด(์ด๊ฒ์ด Three-Chain์ด๋ค) ๋ธ๋ก์ด commit๋๋ค:
B1 <-- B2 <-- B3
| | |
QC1 QC2 QC3
QC3๊ฐ ํ์ฑ๋๋ฉด B1์ด commit๋๋ค.
์ ์ธ ๋ฒ์ธ๊ฐ? ๊ฐ QC์ ์ญํ ์ ๋ณด์:
- QC1 (PREPARE): "2f+1์ด B1์ ๋ณด์๋ค"
- QC2 (PRE-COMMIT): "2f+1์ด QC1์ ๋ณด์๋ค" -> ์ด ์์ ์ Lock
- QC3 (COMMIT): "2f+1์ด QC2๋ฅผ ๋ณด์๋ค" -> ์ด ์์ ์ Commit
Lock์ด ์ค์ํ๋ค. QC2๋ฅผ ๋ณธ ๋ ธ๋๋ B1์ "์ ๊ธด๋ค". ์ดํ B1๊ณผ ์ถฉ๋ํ๋ ๋ธ๋ก์๋ ํฌํํ์ง ์๋๋ค. 2f+1๊ฐ ๋ ธ๋๊ฐ ์ ๊ธฐ๋ฉด, ์ถฉ๋ ๋ธ๋ก์ด QC๋ฅผ ์ป์ ์ ์๋ค. ์์ ์ฑ์ด ๋ณด์ฅ๋๋ค.
HotStuff๋ ๋ธ๋ก์ฒด์ธ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค. ๊ฐ ๋ธ๋ก์ ๋ค์์ ํฌํจํ๋ค:
Block = {
parent: ์ด์ ๋ธ๋ก์ ํด์,
payload: ํธ๋์ญ์
๋ฐ์ดํฐ,
height: ์ฒด์ธ์์์ ๋์ด,
justify: ๋ถ๋ชจ ๋ธ๋ก์ QC
}
justify ํ๋๊ฐ ํต์ฌ์ด๋ค. ๋ธ๋ก์ ์ ์ํ ๋ ๋ถ๋ชจ ๋ธ๋ก์ QC๋ฅผ ํฌํจ์ํจ๋ค. ์ด๊ฒ์ด "์ด ๋ธ๋ก์ด ์ ํจํ ์ฒด์ธ ์์ ์๋ค"๋ ์ฆ๊ฑฐ๋ค.
Replica๊ฐ ๋ธ๋ก์ ํฌํํ ์ง ๊ฒฐ์ ํ๋ ๊ท์น์ด๋ค. ๋
ผ๋ฌธ์์๋ safeNode๋ผ ๋ถ๋ฅธ๋ค:
safeNode(block, qc) =
(qc.view > lockedQC.view) OR (block extends lockedQC.block)
๋ ์กฐ๊ฑด ์ค ํ๋๋ง ๋ง์กฑํ๋ฉด ํฌํํ๋ค:
- ์ ์์ ํฌํจ๋ QC์ view๊ฐ ๋ด๊ฐ ์ ๊ธด QC๋ณด๋ค ๋๋ค
- ์ ์๋ ๋ธ๋ก์ด ๋ด๊ฐ ์ ๊ธด ๋ธ๋ก์ ํ์ฅํ๋ค
์ฒซ ๋ฒ์งธ ์กฐ๊ฑด์ "๋ ์ต์ ์ ๋ณด๊ฐ ์์ผ๋ฉด ๊ทธ๊ฒ์ ๋ฐ๋ฅธ๋ค"๋ ์๋ฏธ๋ค. ๋ ๋ฒ์งธ ์กฐ๊ฑด์ "๊ฐ์ ์ฒด์ธ์ ๋ฐ๋ผ๊ฐ๋ ๊ฒ์ ์์ ํ๋ค"๋ ์๋ฏธ๋ค.
์ด ๊ท์น์ด ์์ ์ฑ๊ณผ ํ์ฑ์ฑ์ ๋์์ ๋ณด์ฅํ๋ค. ์ ๊ธด ๊ฐ๊ณผ ์ถฉ๋ํ๋ ๋ธ๋ก์๋ ํฌํํ์ง ์์ผ๋ฏ๋ก ์์ ํ๊ณ , ๋ ๋์ view์ QC๊ฐ ์ค๋ฉด ์ ๊ธ์ ํด์ ํ ์ ์์ผ๋ฏ๋ก ์์คํ ์ด ๋ฉ์ถ์ง ์๋๋ค.
ํ view์์์ ๋์์ ๋จ๊ณ๋ณ๋ก ๋ณด์:
Phase 1: PREPARE
- ๋ฆฌ๋๊ฐ ์ ๋ธ๋ก์ ์ ์ํ๋ค. ๋ธ๋ก์๋ ์์ ์ด ์๋ ์ต๊ณ QC๊ฐ ํฌํจ๋๋ค.
- Replica๋ค์
safeNode๊ฒ์ฌ๋ฅผ ํต๊ณผํ๋ฉด ํฌํ(๋ถ๋ถ ์๋ช )๋ฅผ ๋ฆฌ๋์๊ฒ ๋ณด๋ธ๋ค. - ๋ฆฌ๋๊ฐ 2f+1๊ฐ์ ํฌํ๋ฅผ ๋ชจ์ผ๋ฉด prepareQC๋ฅผ ์์ฑํ๋ค.
Phase 2: PRE-COMMIT
- ๋ฆฌ๋๊ฐ prepareQC๋ฅผ ๋ชจ๋ ๋ ธ๋์๊ฒ ์ ์กํ๋ค.
- Replica๋ค์ prepareQC๋ฅผ ๋ฐ์ผ๋ฉด ํด๋น ๋ธ๋ก์ Lockํ๋ค. ๊ทธ๋ฆฌ๊ณ ํฌํ๋ฅผ ๋ณด๋ธ๋ค.
- ๋ฆฌ๋๊ฐ 2f+1๊ฐ์ ํฌํ๋ฅผ ๋ชจ์ผ๋ฉด precommitQC๋ฅผ ์์ฑํ๋ค.
Phase 3: COMMIT
- ๋ฆฌ๋๊ฐ precommitQC๋ฅผ ๋ชจ๋ ๋ ธ๋์๊ฒ ์ ์กํ๋ค.
- Replica๋ค์ ํฌํ๋ฅผ ๋ณด๋ธ๋ค.
- ๋ฆฌ๋๊ฐ 2f+1๊ฐ์ ํฌํ๋ฅผ ๋ชจ์ผ๋ฉด commitQC๋ฅผ ์์ฑํ๋ค.
Phase 4: DECIDE
- ๋ฆฌ๋๊ฐ commitQC๋ฅผ ๋ชจ๋ ๋ ธ๋์๊ฒ ์ ์กํ๋ค.
- ๋ชจ๋ ๋ ธ๋๊ฐ ํด๋น ๋ธ๋ก์ commitํ๊ณ ์คํํ๋ค.
๋ฆฌ๋๊ฐ ์ฅ์ ๋ฅผ ์ผ์ผํค๋ฉด ์ด๋ป๊ฒ ๋๋๊ฐ? HotStuff์ View-Change๋ ๋๋๋๋ก ๋จ์ํ๋ค:
- ํ์์์์ด ๋ฐ์ํ๋ฉด ๊ฐ ๋
ธ๋๊ฐ ์์ ์
highQC(๊ฐ์ฅ ๋์ QC)๋ฅผ ์ ๋ฆฌ๋์๊ฒ ์ ์กํ๋ค. - ์ ๋ฆฌ๋๋ 2f+1๊ฐ์ ๋ฉ์์ง๋ฅผ ์์งํ๊ณ , ๊ทธ ์ค ๊ฐ์ฅ ๋์ QC๋ฅผ ์ ํํ๋ค.
- ์ ๋ฆฌ๋๋ ์ด QC๋ฅผ ํ์ฅํ๋ ์ ๋ธ๋ก์ ์ ์ํ๋ค.
๋์ด๋ค. PBFT์ฒ๋ผ ๋ณต์กํ ์ํ ๋๊ธฐํ๊ฐ ์๋ค. QC ์์ฒด๊ฐ "2f+1์ด ๋์ํ๋ค"๋ ์์ ํ ์ฆ๊ฑฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ์ฅ ๋์ QC๋ฅผ ์ ํํ๋ฉด, ๊ทธ๊ฒ์ด ๊ฐ์ฅ ์ต์ ์ "ํฉ์๋ ์ํ"๋ค.
๋ฉ์์ง ๋ณต์ก๋๋ O(n)์ด๋ค. ๊ฐ ๋ ธ๋๊ฐ O(1) ํฌ๊ธฐ์ QC๋ฅผ ์ ๋ฆฌ๋์๊ฒ ๋ณด๋ด๊ณ (n-1๊ฐ), ์ ๋ฆฌ๋๊ฐ ์ ์์ broadcastํ๋ค(n-1๊ฐ). ์ด 2(n-1)๊ฐ์ O(1) ๋ฉ์์ง.
๋ ผ๋ฌธ์ ํต์ฌ ์ ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค:
Theorem (Safety): ๋ ์ ์งํ ๋ ธ๋๊ฐ ๊ฐ์ ๋์ด์์ ์๋ก ๋ค๋ฅธ ๋ธ๋ก์ commitํ๋ ์ผ์ ์๋ค.
์ฆ๋ช ์ ํต์ฌ์ Lock ๋ฉ์ปค๋์ฆ์ด๋ค. ๋ธ๋ก B๊ฐ commit๋๋ ค๋ฉด B์ ๋ํ precommitQC๊ฐ ํ์ฑ๋์ด์ผ ํ๋ค. ์ด ์์ ์ 2f+1๊ฐ ๋ ธ๋๊ฐ B์ Lock๋๋ค.
์ด์ B์ ์ถฉ๋ํ๋ B'๊ฐ commit๋๋ ค๋ฉด, B'์ ๋ํ prepareQC๊ฐ ๋จผ์ ํ์ฑ๋์ด์ผ ํ๋ค. ํ์ง๋ง Lock๋ ๋ ธ๋๋ค์ B'์ ํฌํํ์ง ์๋๋ค(safeNode ๊ท์น). Lock๋ ๋ ธ๋๊ฐ 2f+1๊ฐ์ด๊ณ , ์ QC๋ 2f+1๊ฐ ํฌํ๊ฐ ํ์ํ๋ฏ๋ก, ๊ต์งํฉ์ ์ต์ 1๊ฐ์ ์ ์งํ ๋ ธ๋๊ฐ ์๋ค. ์ด ๋ ธ๋๊ฐ B'์ ํฌํํ์ง ์์ผ๋ฏ๋ก B'๋ QC๋ฅผ ์ป์ ์ ์๋ค.
Theorem (Liveness): GST ์ดํ ์ ์งํ ๋ฆฌ๋๊ฐ ์์ผ๋ฉด, ์ ํ ์๊ฐ ๋ด์ ์๋ก์ด ๋ธ๋ก์ด commit๋๋ค.
์ฆ๋ช ์ ํต์ฌ์ "๊ฐ์ฅ ๋์ QC๋ฅผ ๊ฐ์ง ๋ฆฌ๋๋ ํญ์ ์ง์ ์ ๋ง๋ค ์ ์๋ค"๋ ๊ฒ์ด๋ค.
์ ์งํ ๋ฆฌ๋ L์ด view v๋ฅผ ์์ํ๋ค๊ณ ํ์. L์ 2f+1๊ฐ ๋ ธ๋๋ก๋ถํฐ highQC๋ฅผ ์์งํ๋ค. ์ด ์ค ๊ฐ์ฅ ๋์ ๊ฒ์ ์ ํํ์ฌ ๊ทธ๊ฒ์ ํ์ฅํ๋ ๋ธ๋ก์ ์ ์ํ๋ค.
ํต์ฌ ๊ด์ฐฐ: ์ด QC๋ ์ด๋ค ์ ์งํ ๋ ธ๋์ lockedQC๋ณด๋ค ๋๊ฑฐ๋ ๊ฐ๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์ ์งํ ๋ ธ๋๊ฐ safeNode ๊ฒ์ฌ๋ฅผ ํต๊ณผํ๊ณ ํฌํํ ์ ์๋ค.
GST ์ดํ์ด๋ฏ๋ก ๋ฉ์์ง๊ฐ ์ ๋ ๋์ฐฉํ๋ค. 2f+1๊ฐ ํฌํ๊ฐ ๋ชจ์ด๊ณ QC๊ฐ ํ์ฑ๋๋ค. ์ธ ๋ฒ ์ฐ์ ์ฑ๊ณตํ๋ฉด commit์ด๋ค.
๋ ผ๋ฌธ์์ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ "์ 2-phase๋ก๋ ์ ๋๋๊ฐ"์ ๋ํ ์ค๋ช ์ด๋ค.
2-phase๋ฅผ ์๋ํด๋ณด์. PREPARE์์ QC๋ฅผ ์ป์ผ๋ฉด ๋ฐ๋ก commitํ๋ค๊ณ ๊ฐ์ ํ์.
์๋๋ฆฌ์ค:
- View v์์ ๋ฆฌ๋๊ฐ ๋ธ๋ก B๋ฅผ ์ ์ํ๋ค.
- ์ผ๋ถ ๋ ธ๋๋ง prepareQC๋ฅผ ๋ฐ๊ณ B์ Lockํ๋ค. ๋ฆฌ๋๊ฐ crash.
- View v+1์์ ์ ๋ฆฌ๋๊ฐ ๋ค๋ฅธ ๋ธ๋ก B'๋ฅผ ์ ์ํ๋ค.
๋ฌธ์ : B์ Lock๋ ๋ ธ๋๋ ์ด๋ป๊ฒ ํด์ผ ํ๋๊ฐ?
- B๊ฐ commit๋์์ ์๋ ์๋ค(๋ค๋ฅธ ๋ ธ๋๋ค์ด commitQC๊น์ง ๋ฐ์์ ์๋)
- B๊ฐ commit๋์ง ์์์ ์๋ ์๋ค(๋ฆฌ๋๊ฐ prepareQC ์ ํ ์ค crash)
Lock๋ ๋ ธ๋๋ ์ด๋ฅผ ๊ตฌ๋ถํ ์ ์๋ค. B'์ ํฌํํ๋ฉด safety ์๋ฐ ๊ฐ๋ฅ์ฑ, ํฌํํ์ง ์์ผ๋ฉด liveness ์๋ฐ ๊ฐ๋ฅ์ฑ. ์ด๊ฒ์ด "Livelessness Attack"์ด๋ค.
3-phase๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค. PRE-COMMIT phase์์ prepareQC๊ฐ ์ ํ๋๊ณ , ์ด๊ฒ์ ๋ณธ ๋ ธ๋๋ง Lockํ๋ค. COMMIT phase์์ precommitQC๊ฐ ์ ํ๋์ด์ผ commit์ด๋ค.
์ด๋ ๊ฒ ํ๋ฉด:
- precommitQC๊ฐ ํ์ฑ๋๋ฉด: 2f+1์ด Lock๋์์์ด ๋ณด์ฅ. ์ ๋ฆฌ๋๊ฐ ์ด๋ค ์ค ํ ๋ช ์ด๋ผ๋ ๋ง๋๋ฉด ์ด ์ฌ์ค์ ์ ์ ์์.
- precommitQC๊ฐ ํ์ฑ๋์ง ์์ผ๋ฉด: ์๋ฌด๋ Lock๋์ง ์์. ์ ๋ฆฌ๋๊ฐ ๋ค๋ฅธ ๋ธ๋ก์ ์ ์ํด๋ ์์ .
Lock๊ณผ non-Lock ์ํ๊ฐ ๋ช ํํ ๊ตฌ๋ถ๋๋ค. ์ด๊ฒ์ด 3-phase๊ฐ ํ์ํ ์ด์ ๋ค.
Basic HotStuff๋ ํ ๋ธ๋ก์ commitํ๋ ๋ฐ 4๋ฒ์ round-trip์ด ํ์ํ๋ค. ๋ ผ๋ฌธ์ ์ด๋ฅผ ๊ฐ์ ํ๋ Chained HotStuff๋ฅผ ์ ์ํ๋ค.
ํต์ฌ ๊ด์ฐฐ: ๊ฐ phase์์ ํ๋ ์ผ์ด ์ฌ์ค์ ๊ฐ๋ค. ๋ฆฌ๋๊ฐ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ , Replica๊ฐ ํฌํํ๊ณ , QC๊ฐ ํ์ฑ๋๋ค. ๋ค๋ฅธ ๊ฒ์ QC์ "์๋ฏธ"๋ฟ์ด๋ค.
Chained HotStuff๋ ์ด๋ฅผ ํ์ดํ๋ผ์ด๋ํ๋ค. ๊ฐ view์์:
- ์ ๋ธ๋ก์ ์ ์ํ๋ค (PREPARE)
- ์ด์ ๋ธ๋ก์ด PRE-COMMIT๋๋ค (prepareQC ํ์ฑ)
- ๊ทธ ์ด์ ๋ธ๋ก์ด COMMIT๋๋ค (precommitQC ํ์ฑ)
- ๊ทธ ์ด์ ๋ธ๋ก์ด DECIDE๋๋ค (commitQC ํ์ฑ)
View 1: B1 ์ ์
View 2: B2 ์ ์, B1 pre-commit
View 3: B3 ์ ์, B2 pre-commit, B1 commit
View 4: B4 ์ ์, B3 pre-commit, B2 commit, B1 decide
Chained HotStuff์ commit ๊ท์น์ ๊ฐ๋จํ๋ค:
Three-Chain: ๋ธ๋ก B๊ฐ commit๋๋ ค๋ฉด, B๋ฅผ ํ์ฅํ๋ ์ฐ์ ์ธ ๋ธ๋ก(B, B', B'')์ด ์๊ณ ๊ฐ๊ฐ QC๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ธ ๋ธ๋ก์ด ์ฐ์๋ view์์ ์์ฑ๋์ด์ผ ํ๋ค.
B (view v) <-- B' (view v+1) <-- B'' (view v+2)
| | |
QC QC' QC''
QC''๊ฐ ํ์ฑ๋๋ฉด B๊ฐ commit๋๋ค.
์ฐ์ view ์กฐ๊ฑด์ด ์ค์ํ๋ค. ์ค๊ฐ์ view๊ฐ ๊ฑด๋๋ฐ์ด์ง๋ฉด Three-Chain์ด ๊นจ์ง๋ค. ์ด๋ ๋ฆฌ๋ ์ฅ์ ๊ฐ ์์๋ค๋ ์๋ฏธ์ด๊ณ , Lock ์ํ๊ฐ ๋ถํ์คํ ์ ์๋ค.
Basic HotStuff: ๋ธ๋ก๋น 7 message delay (3 phase + decide) Chained HotStuff: ๋ธ๋ก๋น 2 message delay (steady state)
์ฒ๋ฆฌ๋์ด ์ฝ 3.5๋ฐฐ ํฅ์๋๋ค. ์ฒซ ๋ธ๋ก์ ์ฌ์ ํ 7 delay๊ฐ ํ์ํ์ง๋ง, ์ดํ ๋ธ๋ก๋ค์ ํ์ดํ๋ผ์ธ์ ํ๊ณ 2 delay๋ง๋ค commit๋๋ค.
| ํญ๋ชฉ | PBFT | HotStuff |
|---|---|---|
| Normal-case | O(n^2) | O(n) |
| View-change | O(n^2) ~ O(n^3) | O(n) |
| f consecutive failures | O(n^3) | O(n^2) |
100๊ฐ ๋ ธ๋์์:
- PBFT normal-case: ~20,000 ๋ฉ์์ง
- HotStuff normal-case: ~700 ๋ฉ์์ง
์ฐจ์ด๊ฐ 30๋ฐฐ์ ๋ฌํ๋ค. ๋ ธ๋๊ฐ ๋ง์์ง์๋ก ๊ฒฉ์ฐจ๋ ๋ ๋ฒ์ด์ง๋ค.
| ํญ๋ชฉ | PBFT | HotStuff (Basic) | HotStuff (Chained) |
|---|---|---|---|
| Single commit | 5 delay | 7 delay | 7 delay (first) |
| Steady-state | 5 delay | 7 delay | 2 delay |
๋จ์ผ ํฉ์๋ง ๋ณด๋ฉด PBFT๊ฐ ๋ ๋น ๋ฅด๋ค. ํ์ง๋ง Chained HotStuff์ ํ์ดํ๋ผ์ด๋์ ์ ์ฉํ๋ฉด ์ฒ๋ฆฌ๋์ HotStuff๊ฐ ์์ ๋ค.
PBFT๋ "๋ชจ๋ ๋ ธ๋๊ฐ ๋ชจ๋ ๊ฒ์ ์๋ค"๋ ์ฒ ํ์ด๋ค. ๊ฐ ๋ ธ๋๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ํฉ์ ์ํ๋ฅผ ํ๋จํ ์ ์๋ค. ๋์ ํต์ ๋์ด ๋ง๋ค.
HotStuff๋ "๋ฆฌ๋๊ฐ ์ค์ฌํ๋ค"๋ ์ฒ ํ์ด๋ค. ์ ๋ณด๊ฐ ๋ฆฌ๋๋ฅผ ํตํด ํ๋ฅธ๋ค. ํต์ ๋์ ์ ์ง๋ง, ๋ฆฌ๋ ์์กด๋๊ฐ ๋๋ค.
๋ ์ ๊ทผ ๋ชจ๋ ์ฅ๋จ์ ์ด ์๋ค. ์๊ท๋ชจ ๋คํธ์ํฌ์์๋ PBFT์ ๋จ์ํจ์ด ์ ๋ฆฌํ ์ ์๋ค. ๋๊ท๋ชจ ๋คํธ์ํฌ, ํนํ ๋ธ๋ก์ฒด์ธ์ฒ๋ผ ๋ ธ๋๊ฐ ๋ง๊ณ ๋ฆฌ๋ ๊ต์ฒด๊ฐ ๋น๋ฒํ ํ๊ฒฝ์์๋ HotStuff๊ฐ ์ ๋ฆฌํ๋ค.
HotStuff์ ๊ฐ์ฅ ์ ๋ช ํ ์ ์ฉ ์ฌ๋ก๋ Facebook(ํ Meta)์ Libra ํ๋ก์ ํธ๋ค. 2019๋ ๋ฐํ๋ Libra ๋ฐฑ์๋ HotStuff๋ฅผ ํฉ์ ํ๋กํ ์ฝ๋ก ์ฑํํ๋ค.
LibraBFT๋ HotStuff๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ช ๊ฐ์ง ์ค์ฉ์ ๊ฐ์ ์ ์ถ๊ฐํ๋ค:
- ๋ ์ ๊ตํ Pacemaker (๋ฆฌ๋ ์ ์ถ ๋ฐ ํ์์์ ๊ด๋ฆฌ)
- ๋ฉ๋ชจ๋ฆฌํ ํตํฉ
- ์ํ ๋๊ธฐํ ํ๋กํ ์ฝ
ํ๋ก์ ํธ๋ ๊ท์ ๋ฌธ์ ๋ก Diem์ผ๋ก ์ด๋ฆ์ด ๋ฐ๋๊ณ ๊ฒฐ๊ตญ ์ค๋จ๋์์ง๋ง, HotStuff๊ฐ ์ฐ์ ๊ณ์์ ๊ฒ์ฆ๋ฐ์ ๊ณ๊ธฐ๊ฐ ๋์๋ค.
HotStuff ์ดํ ์๋ง์ ๋ณํ์ด ๋ฑ์ฅํ๋ค:
- Fast-HotStuff: Optimistic path์์ latency ๊ฐ์
- Jolteon/Ditto: ๋น๋๊ธฐ fallback ์ถ๊ฐ
- HotStuff-2: 3-phase๋ฅผ 2-phase๋ก ์ค์ (2023๋ )
ํนํ HotStuff-2๋ ์ฃผ๋ชฉํ ๋งํ๋ค. ๊ฐ์ ์ ์(Malkhi)๊ฐ ์ฐธ์ฌํ์ฌ "์ด์ view์ QC๊ฐ ์์ผ๋ฉด ์ถ๊ฐ phase๊ฐ ํ์ ์๋ค"๋ ํต์ฐฐ์ ์ ์ํ๋ค. ๊ฒฐ๊ตญ 2-phase๋ก๋ ์ ํ ํต์ ๊ณผ ์๋ต์ฑ์ ๋์์ ๋ฌ์ฑํ ์ ์์์ด ๋ฐํ์ก๋ค.
HotStuff๋ BFT ๊ธฐ๋ฐ ๋ธ๋ก์ฒด์ธ์ ์ค๊ณ ํจํด์ ๋ฐ๊พธ์๋ค. ์ด์ ์๋ PBFT ๋ณํ์ ์ฌ์ฉํ๊ฑฐ๋, Tendermint์ฒ๋ผ ์๋ต์ฑ์ ํฌ๊ธฐํด์ผ ํ๋ค. HotStuff๋ ๋ ๋ค ๊ฐ๋ฅํจ์ ๋ณด์ฌ์ฃผ์๋ค.
ํ์ฌ ๋ง์ ๋ธ๋ก์ฒด์ธ ํ๋ก์ ํธ๊ฐ HotStuff ๋๋ ๊ทธ ๋ณํ์ ์ฌ์ฉํ๋ค:
- Flow
- Cypherium
- Thunder
- ๋ค์์ ํ๋ผ์ด๋น ๋ธ๋ก์ฒด์ธ
- ํ์ฅ์ฑ: O(n) ํต์ ์ ๋๊ท๋ชจ ๋คํธ์ํฌ์ ํ์์ ์ด๋ค.
- ๋จ์์ฑ: ํ๋กํ ์ฝ ๋ก์ง์ด ๋ช ํํ๋ค. ํฌํ ๊ท์น(safeNode)์ด ํ๋๋ฟ์ด๋ค.
- ๋ชจ๋์ฑ: Pacemaker๊ฐ ๋ถ๋ฆฌ๋์ด ์์ด ๋ค์ํ ๋ฆฌ๋ ์ ์ถ ๋ฐฉ์์ ์ ์ฉํ ์ ์๋ค.
- ํ์ดํ๋ผ์ด๋: Chained ๋ฒ์ ์ผ๋ก ์ฒ๋ฆฌ๋์ ๋์ผ ์ ์๋ค.
- ์ถ๊ฐ Phase: PBFT๋ณด๋ค ํ phase๊ฐ ๋ ํ์ํ๋ค. ๋จ์ผ ํฉ์ ์ง์ฐ์ด ์ฆ๊ฐํ๋ค.
- ๋ฆฌ๋ ์์กด์ฑ: Star topology๋ก ์ธํด ๋ฆฌ๋ ๋ถํ๊ฐ ํฌ๋ค. ๋ฆฌ๋๊ฐ ๋ณ๋ชฉ์ด ๋ ์ ์๋ค.
- Threshold Signature ์์กด: ์ค์ ๊ตฌํ์์ threshold signature์ ์ค๋ฒํค๋๊ฐ ์๋ค.
- Pacemaker ๋ณต์ก์ฑ: ๋ ผ๋ฌธ์์ Pacemaker๋ฅผ "๋ถ๋ฆฌ"ํ๋ค๊ณ ํ์ง๋ง, ์ค์ ๋ก๋ Pacemaker ์ค๊ณ๊ฐ ๋ณต์กํ๊ณ ์ค์ํ๋ค.
๋ ผ๋ฌธ ๋ฐํ ์ดํ์๋ ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ์ฐ๊ตฌ๋๊ณ ์๋ค:
- ์ต์ ์ Pacemaker ์ค๊ณ
- ๋น๋๊ธฐ ํ๊ฒฝ์์์ ์ฑ๋ฅ
- Threshold signature ์์ด ์ ํ ํต์ ๋ฌ์ฑ
- 2-phase๋ก์ ์ถ๊ฐ ์ต์ ํ (HotStuff-2๊ฐ ์ผ๋ถ ํด๊ฒฐ)
HotStuff๋ BFT ํฉ์ ์ฐ๊ตฌ์์ ํ๋์ ์ ํ์ ์ด๋ค. 20๋ ๊ฐ ํ์ค์ด์๋ PBFT์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ , ์ ํ ํต์ ๊ณผ ์๋ต์ฑ์ ๋์์ ๋ฌ์ฑํ๋ค.
๋ ผ๋ฌธ์ ์ฝ์ผ๋ฉด์ ๊ฐ์ฅ ์ธ์์ ์ธ ๊ฒ์ ํต์ฌ ์์ด๋์ด์ ๋จ์ํจ์ด๋ค. QC๋ฅผ ํตํด ์ฆ๋ช ํฌ๊ธฐ๋ฅผ ์์๋ก ๋ง๋ค๊ณ , Star topology๋ก ํต์ ์ ์ ํ์ผ๋ก ๋ง๋ค๊ณ , ์ถ๊ฐ phase๋ก ์ ๋ณด ๋น๋์นญ์ ํด๊ฒฐํ๋ค. ๊ฐ๊ฐ์ ์ด๋ ต์ง ์์ ์์ด๋์ด์ง๋ง, ์ด๋ฅผ ์กฐํฉํ์ฌ ์ค๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ด ๋ ผ๋ฌธ์ ๊ฐ์น๋ค.
๋ฌผ๋ก HotStuff๊ฐ ์๋ฒฝํ ๊ฒ์ ์๋๋ค. ์ถ๊ฐ phase๋ก ์ธํ ์ง์ฐ, ๋ฆฌ๋ ์์กด์ฑ, Pacemaker์ ๋ณต์ก์ฑ ๋ฑ ์ฌ์ ํ ๊ฐ์ ์ ์ฌ์ง๊ฐ ์๋ค. ํ์ ์ฐ๊ตฌ๋ค์ด ์ด๋ฅผ ํ๋์ฉ ํด๊ฒฐํด๊ฐ๊ณ ์๋ค.
๋ถ์ฐ ํฉ์๋ฅผ ๊ณต๋ถํ๋ ์ฌ๋์ด๋ผ๋ฉด HotStuff๋ ๋ฐ๋์ ์ฝ์ด์ผ ํ ๋ ผ๋ฌธ์ด๋ค. PBFT๋ฅผ ์๊ณ ์๋ค๋ฉด ๋ช ์๊ฐ์ด๋ฉด ํต์ฌ์ ํ์ ํ ์ ์๋ค. ๋ธ๋ก์ฒด์ธ ์๋์ BFT ํฉ์๊ฐ ์ด๋๋ก ๊ฐ๊ณ ์๋์ง ์ดํดํ๋ ์ข์ ์ถ๋ฐ์ ์ด ๋ ๊ฒ์ด๋ค.
- Yin, M., Malkhi, D., Reiter, M. K., Gueta, G. G., & Abraham, I. (2019). HotStuff: BFT Consensus with Linearity and Responsiveness. PODC 2019.
- Castro, M., & Liskov, B. (1999). Practical Byzantine Fault Tolerance. OSDI 1999.
- Malkhi, D., & Nayak, K. (2023). HotStuff-2: Optimal Two-Phase Responsive BFT.
- libhotstuff GitHub: https://github.com/hot-stuff/libhotstuff