Sloth - planetarium/libplanet GitHub Wiki
μ΄ νμ΄μ§λ Libplanet
μ κΈ°μ‘΄ μλ λ°©μκ³Ό Sloth
μ
λ°μ΄νΈ μ΄νμ μλλ°©μμ μ°¨μ΄μ λνμ¬ μ€λͺ
ν©λλ€.
μμ½
κΈ°μ‘΄ λ°©μ
-
BlockChain.ProposeBlock(i)
μ΄ μ€νλ λBlock_{i}
μ ν¬ν¨νλ € νλTx
λ€μBlock_{i-1}.StateRootHash
λ‘λΆν° μ€ν(ActionEvaluation
)μμΌ μλ‘μ΄StateRootHash
λ₯Ό μ»μ λ€, μ΄ μλ‘μ΄ κ°μBlock_{i}.StateRootHash
λ‘ κΈ°μ ν©λλ€.
-
BlockChain.Append(Block_{i})
κ° μ€νλ λBlock_{i}
μ ν¬ν¨λTx
λ€μBlock_{i-1}.StateRootHash
λ‘λΆν° μ€ν(ActionEvaluation
)μμΌ μλ‘μ΄StateRootHash
λ₯Ό μ»μ λ€, μ΄ μλ‘μ΄ κ°μ΄Block_{i}.StateRootHash
μ λμΌνμ§ μ¬λΆλ₯Ό νμΈν©λλ€.
Sloth
μ
λ°μ΄νΈ μ΄νμ λ°©μ
-
BlockChain.ProposeBlock(i)
μ΄ μ€νλ λ- μ€ν μ΄μ μ μ₯λμ΄μλ
NextStateRootHash
κ°μ μ½μ΄μ,Block_{i}.StateRootHash
μ κΈ°μ ν©λλ€.
- μ€ν μ΄μ μ μ₯λμ΄μλ
-
BlockChain.Append(Block_{i})
κ° μ€νλ λ- μ€ν μ΄μ μ μ₯λμ΄μλ
NextStateRootHash
κ°μ μ½μ΄μ,Block_{i}.StateRootHash
μ κ°κ³Ό λμΌνμ§ μ¬λΆλ₯Ό νμΈν©λλ€. Block_{i}
μ ν¬ν¨λTx
λ€μBlock_{i}.StateRootHash
λ‘λΆν° μ€ν(ActionEvaluation
)μμΌ μλ‘μ΄StateRootHash
λ₯Ό μ»μ λ€, μ΄ μλ‘μ΄ κ°μ μ€ν μ΄μNextStateRootHash
λ‘ μ μ₯ν©λλ€.
- μ€ν μ΄μ μ μ₯λμ΄μλ
Sloth
μ ν¨κ³Ό
- νλ§ λ¨Έμ μ΄ μΌλ ¨μ
State S
,Action A
λ₯Ό ν΅ν κ³Όμ μ κ±°μ³ μνμ€λ₯Ό λ§λ€μμ λ, κ·Έ μνμ€λ₯Ό[..., S_{i}, A_{i}, S_{i+1}, A_{i+1}, ...]
κ³Ό κ°μ΄ ννν©λλ€. - λΈλ‘μ
Tx
λ€μ μμAction
λ€μ μ§ν©μ΄λ©°, λΈλ‘μStateRootHash
λ μμState
μ ν΄λΉν©λλ€. - λΈλ‘μ μμ μνμ€λ₯Ό λ¬Άμ΄μ κΈ°λ‘νλ μν μ μνν©λλ€.
Sloth
μ΄μ μ λΈλ‘μ κ³Όμ μ μνμ€λ₯Ό μλμ κ°μ΄ λ¬Άμ΄ κΈ°λ‘νμ¬μμ΅λλ€.[..., Block_{i-1}(A_{i-1}, S_{i}), Block_{i}(A_{i}, S_{i+1}), Block_{i+1}(A_{i+1}, S_{i+2}), ...]
Sloth
μ΄νμ λΈλ‘μ κ³Όμ μ μνμ€λ₯Ό μλμ κ°μ΄ λ¬Άμ΄ κΈ°λ‘ν©λλ€.[..., Block_{i}(S_{i}, A_{i}), Block{i+1}(S_{i+1}, A_{i+1}), ...]
- κ³§, μ’
μ μ
Block_{i}
κ° κ°μ§κ³ μλStateRootHash
κ°μ΄S_{i+1}
μ΄μλ€λ©΄,Sloth
μ΄νμλS_{i}
λ‘ λ³νκ² λ©λλ€. - κ²°κ΅,
State
κ° λΈλ‘μ κΈ°λ‘λλ μμ μ΄ ν λΈλ‘μ© λ€λ‘ λ°λ¦¬κ² λλ ν¨κ³Όλ₯Ό κ°μ§κ² λλ©°, μ΄λ₯Ό μν΄Sloth
λ³κ²½μ μ΄ μ μ©λ λΈλ‘μμλ μ΄μ λΈλ‘μStateRootHash
κ° λ°λ³΅λμ΄μμ΅λλ€.
Sloth
μ λͺ©μ
- μμ κ°μ λ³κ²½μ μ ν΅νμ¬
ActionEvaluation
μ μμ μBlockChain.Append()
λ‘ ν΅μΌν μ μμ΅λλ€. - κΈ°μ‘΄μ κ²½μ°,
BlockChain.ProposeBlock()
μ μνν λ,Block
μStateRootHash
λ₯Ό μ±μλ£κΈ° μνμ¬ λ°λμActionEvaluation
μ μννμ¬μΌ νμ΅λλ€. - μ΄λ λΈλ‘μ μμ±νλ κ³Όμ κ³Ό, κ²μ¦νλ κ³Όμ λͺ¨λμ
ActionEvaluation
μ΄ νμνλ€λ κ²μ μλ―Ένλ©°, μ΄μ© μ μμ΄ μ΅μνActionEvaluation
μνμκ° * 2λ§νΌμ μκ°μ΄ λΈλ‘μ μμ±νκ³ μ ννλλ° μμλ©λλ€. Sloth
λ₯Ό ν΅νμ¬BlockChain.Append()
μ λ¨μΌμ§μ μΌλ‘ActionEvaluation
μ μ ννλ€λ©΄- ν©μ κ³Όμ μμ μμ μ€λ³΅λ μκ°μλͺ¨λ₯Ό μ κ±°ν μ μμ΅λλ€.
- ν©μμ λΈλ‘μ κ²μ¦μ λ°μνλ λ¨Έμ λ³ μκ°μ°¨λ₯Ό κ³ λ €νμ§ μλ
PBFT
μλ¬Έμ κ°μ μ μ’ λ κ°κΉμμ§λλ€.
Sloth
μ
λ°μ΄νΈ μ΄ν λ°©μμ λν λμ
sequenceDiagram
participant BlockChain
participant IStore
rect rgb(230, 230, 255)
Note right of BlockChain: Received block
BlockChain->>BlockChain: ValidateBlock(i)
BlockChain->>IStore: BlockChain.Store.GetNextStateRootHash(i-1)
Note right of IStore: IStore have: NextStateRootHash(i-1) = StateRootHash(i)
IStore->>BlockChain: StateRootHash(i)
BlockChain->>BlockChain: ValidateStateRootHash(i)
Note right of BlockChain: Tip changed, Broadcast block
end
rect rgb(255, 230, 230)
BlockChain->>BlockChain: DetermineNextStateRootHash(i)
BlockChain->>IStore: PutNextStateRootHash(i)
Note right of IStore: IStore now have: NextStateRootHash(i) = StateRootHash(i+1)
BlockChain->>BlockChain: UpdateTxExecution(i)
BlockChain->>BlockChain: Render renderers(i)
end