Block life - planetarium/libplanet GitHub Wiki

이 νŽ˜μ΄μ§€μ—μ„œλŠ” 블둝이 λ§Œλ“€μ–΄μ§€λŠ” κ³Όμ •κ³Ό, μ „νŒŒλ˜λŠ” 과정에 λŒ€ν•˜μ—¬ μ„€λͺ…ν•©λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜μ˜ μˆ˜μ§‘

  • 각 블둝체인 λ…Έλ“œλ“€μ€ StageTransaction을 ν†΅ν•˜μ—¬ νŠΈλžœμž­μ…˜μ„ 멀풀에 μŠ€ν…Œμ΄μ§•ν•©λ‹ˆλ‹€.
  • 각 블둝체인 λ…Έλ“œλ“€μ€ 멀풀에 μŠ€ν…Œμ΄μ§•λœ νŠΈλžœμž­μ…˜λ“€μ˜ 아이디λ₯Ό Swarm의 BroadcastTxAsync을 ν†΅ν•˜μ—¬ μ „νŒŒν•©λ‹ˆλ‹€. μ΄ν•˜ ν•΄λ‹Ή 링크의 λ°©μ‹μœΌλ‘œ 피어듀은 ν•„μš”ν•œ νŠΈλžœμž­μ…˜μ„ μš”μ²­ν•˜κ³ , κ°€μ Έκ°‘λ‹ˆλ‹€.
  • 이λ₯Ό ν†΅ν•˜μ—¬ 각 λ…Έλ“œλ“€μ— κ°œλ³„ μˆ˜μ§‘λœ νŠΈλžœμž­μ…˜λ“€μ΄ λ™κΈ°ν™”λ©λ‹ˆλ‹€.

λΈ”λ‘μ˜ 생성 및 ν•©μ˜

λΈ”λ‘μ˜ 생성

  • ν•©μ˜μ˜ 높이와 λΌμš΄λ“œκ°€ μ •ν•΄μ§€λ©΄, 밸리데이터듀 쀑 ν•˜λ‚˜κ°€ ν”„λ‘œν¬μ €λ‘œ μ„ μ •λ©λ‹ˆλ‹€(ν˜„μž¬λŠ” λΌμš΄λ“œλ‘œλΉˆ λ°©μ‹μž…λ‹ˆλ‹€).
  • ν”„λ‘œν¬μ €λŠ” μ„ μ •λ˜λ©΄, μžκΈ°κ°€ κ°€μ§€κ³  μžˆλŠ” νŠΈλžœμž­μ…˜ 및 블둝 생성을 μœ„ν•œ 정보듀을 ν† λŒ€λ‘œ 블둝을 μƒμ„±ν•©λ‹ˆλ‹€.(ConsensusReactor μ„€λͺ… νŽ˜μ΄μ§€μ˜ λ§ˆμ§€λ§‰ 단에 μ„€λͺ…이 μžˆμŠ΅λ‹ˆλ‹€)
  • ν”„λ‘œν¬μ €λŠ” μƒμ„±ν•œ 블둝을 밸리데이터듀 사이에 λΈŒλ‘œλ“œμΊμŠ€νŠΈ ν•©λ‹ˆλ‹€. 링크

λΈ”λ‘μ˜ ν•©μ˜

  • 링크의 μ•Œκ³ λ¦¬μ¦˜μ„ 따라 블둝이 ν•©μ˜λ©λ‹ˆλ‹€.
  • ν•©μ˜κ°€ μ™„λ£Œλ˜μ–΄, EndCommit단계에 이λ₯΄λ©΄, λ°Έλ¦¬λ°μ΄ν„°λŠ” 블둝을 Append ν•©λ‹ˆλ‹€.
  • Append된 블둝은 ν•©μ˜κ°€ μ™„λ£Œλœ 블둝이기 λ•Œλ¬Έμ—, ν™•μ •λœ λΈ”λ‘μœΌλ‘œ 일반 λ…Έλ“œλ‘œ μ „νŒŒκ°€ κ°€λŠ₯ν•΄μ§„ μƒνƒœμž…λ‹ˆλ‹€.

λΈ”λ‘μ˜ μ „νŒŒ

  • 이제 밸리데이터듀은 μœ„μ—μ„œ ν•©μ˜λœ, 일반 λ…Έλ“œλ“€μ΄ κ°€μ§€κ³  μžˆμ§€ μ•Šμ€ μ΅œμ‹  블둝을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.
  • 밸리데이터듀은 팁이 막 λ³€ν™”ν–ˆκΈ° λ•Œλ¬Έμ—, TipChanged 이벀트 ν•Έλ“€λŸ¬λ₯Ό ν†΅ν•˜μ—¬ 블둝 헀더λ₯Ό λΈŒλ‘œλ“œμΊμŠ€νŠΈν•©λ‹ˆλ‹€. 이후에도 μƒˆλ‘œ λ§Œλ“€μ–΄μ§„ 블둝은 BroadcastBlockAsyncλ₯Ό ν†΅ν•˜μ—¬ μ§€μ†μ μœΌλ‘œ 헀더가 μ „νŒŒλ©λ‹ˆλ‹€.
  • 각 블둝체인 λ…Έλ“œλ“€μ€ μ΅œμ‹  블둝 헀더λ₯Ό λ°›κ³ , μžκΈ°κ°€ μ—†λŠ” 블둝일 경우 FillBlocksAsyncλ₯Ό ν†΅ν•˜μ—¬ 블둝을 λ°›μ•„μ˜΅λ‹ˆλ‹€.
  • 각 블둝체인 λ…Έλ“œλ“€μ€ ConsumeBlockCandidatesλ₯Ό ν†΅ν•˜μ—¬ λ°›μ•„μ˜¨ 블둝을 λΆ™μž…λ‹ˆλ‹€.
  • μœ„ 과정을 ν†΅ν•˜μ—¬ μƒˆλ‘­κ²Œ μƒμ„±λœ 블둝이 체인의 각 λ…Έλ“œλ“€μ— μ‹±ν¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.