Skip to content

Latest commit

Β 

History

History
292 lines (154 loc) Β· 9.16 KB

daemons.md

File metadata and controls

292 lines (154 loc) Β· 9.16 KB

데λͺ¬ {#daemon}

이 μ„Ήμ…˜μ—μ„œλŠ” 기술적인 κ΄€μ μ—μ„œ IBax λ…Έλ“œκ°€ μ„œλ‘œ μƒν˜Έ μž‘μš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

μ„œλ²„ 데λͺ¬μ— λŒ€ν•˜μ—¬ {#about-the-server-daemon}

μ„œλ²„ 데λͺ¬μ€ λͺ¨λ“  λ„€νŠΈμ›Œν¬ λ…Έλ“œμ—μ„œ μ‹€ν–‰λ˜μ–΄ λ‹€μ–‘ν•œ μ„œλ²„ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜κ³  IBax의 블둝체인 ν”„λ‘œν† μ½œμ„ 지원해야 ν•©λ‹ˆλ‹€. 블둝체인 λ„€νŠΈμ›Œν¬μ—μ„œ 데λͺ¬μ€ 블둝과 거래λ₯Ό λΆ„λ°°ν•˜κ³ , μƒˆλ‘œμš΄ 블둝을 μƒμ„±ν•˜λ©°, 받은 블둝과 거래λ₯Ό κ²€μ¦ν•˜κ³ , 포크 이슈λ₯Ό 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜κ΄‘ λ…Έλ“œ 데λͺ¬ {#honor-node-daemon}

μ˜κ΄‘ λ…Έλ“œλŠ” λ‹€μŒκ³Ό 같은 μ„œλ²„ 데λͺ¬μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€:

  • BlockGenerator daemon

    μƒˆλ‘œμš΄ 블둝 생성

  • BlockCollection daemon

    λ‹€λ₯Έ λ…Έλ“œμ—μ„œ μƒˆλ‘œμš΄ 블둝 λ‹€μš΄λ‘œλ“œ

  • Confirmations daemon

    ν•΄λ‹Ή λ…Έλ“œμ˜ 블둝이 λŒ€λΆ€λΆ„μ˜ λ‹€λ₯Έ λ…Έλ“œμ—λ„ μ‘΄μž¬ν•˜λŠ”μ§€ 확인

  • Disseminator daemon

    κ±°λž˜μ™€ 블둝을 λ‹€λ₯Έ μ˜κ΄‘ λ…Έλ“œλ‘œ 배포

  • QueueParserBlocks daemon

    큐에 μžˆλŠ” 블둝, λ‹€λ₯Έ λ…Έλ“œμ—μ„œ κ°€μ Έμ˜¨ 블둝이 포함됨

    블둝 처리 λ‘œμ§μ€ BlockCollection daemonκ³Ό 동일

  • QueueParserTx daemon

    큐에 μžˆλŠ” 거래 검증

  • Scheduler daemon

    계약을 μ˜ˆμ•½λœ μ‹œκ°„μ— μ‹€ν–‰

수호자 λ…Έλ“œ 데λͺ¬ (Guardian Node Daemon) {#guardian-node-daemon}

수호자 λ…Έλ“œλŠ” λ‹€μŒκ³Ό 같은 μ„œλ²„ 데λͺ¬μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€:

블둝 μˆ˜μ§‘ 데λͺ¬ (BlockCollection Daemon) {#blockcollection-daemon}

이 데λͺ¬μ€ 블둝을 λ‹€μš΄λ‘œλ“œν•˜κ³  블둝체인을 λ‹€λ₯Έ λ„€νŠΈμ›Œν¬ λ…Έλ“œμ™€ λ™κΈ°ν™”ν•©λ‹ˆλ‹€.

블둝체인 동기화 {#blockchain-synchronization}

이 데λͺ¬μ€ 블둝체인 λ„€νŠΈμ›Œν¬μ—μ„œ μ΅œλŒ€ 블둝 높이λ₯Ό κ²°μ •ν•˜κ³ , μƒˆλ‘œμš΄ 블둝을 μš”μ²­ν•˜λ©°, λΈ”λ‘μ²΄μΈμ—μ„œ 포크 이슈λ₯Ό ν•΄κ²°ν•¨μœΌλ‘œμ¨ 블둝체인을 λ™κΈ°ν™”ν•©λ‹ˆλ‹€.

블둝체인 μ—…λ°μ΄νŠΈ 확인 {#check-for-blockchain-updates}

이 데λͺ¬μ€ ν˜„μž¬ 블둝 IDλΆ€ν„° λͺ¨λ“  μ˜κ΄‘ λ…Έλ“œμ—κ²Œ μš”μ²­μ„ λ³΄λƒ…λ‹ˆλ‹€.

데λͺ¬μ„ μ‹€ν–‰ 쀑인 λ…Έλ“œμ˜ ν˜„μž¬ 블둝 IDκ°€ μ–΄λ–€ μ˜κ΄‘ λ…Έλ“œμ˜ ν˜„μž¬ 블둝 ID보닀 μž‘λ‹€λ©΄, ν•΄λ‹Ή 블둝체인 λ„€νŠΈμ›Œν¬ λ…Έλ“œλŠ” 였래된 κ²ƒμœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€.

μƒˆ 블둝 λ‹€μš΄λ‘œλ“œ {#download-new-blocks}

κ°€μž₯ 큰 ν˜„μž¬ 블둝 높이λ₯Ό λ°˜ν™˜ν•˜λŠ” λ…Έλ“œκ°€ μ΅œμ‹  λ…Έλ“œλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€. 데λͺ¬μ€ λͺ¨λ“  μ•Œ 수 μ—†λŠ” 블둝을 λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€.

포크 문제 ν•΄κ²° {#solving-the-fork-issue}

λΈ”λ‘μ²΄μΈμ—μ„œ 포크가 κ°μ§€λ˜λ©΄ 데λͺ¬μ€ λͺ¨λ“  블둝을 곡톡 μƒμœ„ λΈ”λ‘μœΌλ‘œ λ‹€μš΄λ‘œλ“œν•˜μ—¬ 포크λ₯Ό λ’€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€. 곡톡 μƒμœ„ 블둝이 발견되면 데λͺ¬μ„ μ‹€ν–‰ν•˜λŠ” λ…Έλ“œμ—μ„œ 블둝체인 둀백이 μˆ˜ν–‰λ˜κ³  μ΅œμ‹  블둝이 포함될 λ•ŒκΉŒμ§€ μ˜¬λ°”λ₯Έ 블둝이 블둝체인에 μΆ”κ°€λ©λ‹ˆλ‹€.

Tables {#tables-1}

BlocksCollection 데λͺ¬μ€ λ‹€μŒ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • block_chain
  • transactions
  • transactions_status
  • info_block

Request {#request-1}

BlockCollection 데λͺ¬μ€ λ‹€μŒ μš”μ²­μ„ λ‹€λ₯Έ 데λͺ¬μœΌλ‘œ λ³΄λƒ…λ‹ˆλ‹€.

  • Type 10 은 전체 λͺ…μ˜ˆ λ…Έλ“œ 쀑 κ°€μž₯ 큰 블둝 IDλ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.
  • Type 7 은 블둝 IDκ°€ κ°€μž₯ 큰 데이터λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

BlockGenerator 데λͺ¬ {#blockgenerator-daemon}

BlockGenerator 데λͺ¬μ€ μƒˆ 블둝을 μƒμ„±ν•©λ‹ˆλ‹€.

사전 검증 {#pre-verification}

BlockGenerator 데λͺ¬μ€ λΈ”λ‘μ²΄μΈμ˜ μ΅œμ‹  블둝을 λΆ„μ„ν•˜μ—¬ μƒˆλ‘œμš΄ 블둝 생성 κ³„νšμ„ μ„Έμ›λ‹ˆλ‹€.

λ‹€μŒ 쑰건이 좩쑱되면 μƒˆ 블둝을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ΅œμ‹  블둝을 μƒμ„±ν•œ λ…Έλ“œλŠ” Honor Node λͺ©λ‘ λ‚΄μ˜ λ…Έλ“œμ— 있으며 데λͺ¬μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.
  • κ°€μž₯ μ΅œκ·Όμ— κ²€μ¦λ˜μ§€ μ•Šμ€ 블둝이 μƒμ„±λœ 이후 κ°€μž₯ 짧은 μ‹œκ°„μž…λ‹ˆλ‹€.

블둝 생성 {#block-generation}

데λͺ¬μ— μ˜ν•΄ μƒμ„±λœ μƒˆλ‘œμš΄ λΈ”λ‘μ—λŠ” λ‹€λ₯Έ λ…Έλ“œμ˜ Disseminator 데λͺ¬μ—μ„œ λ°›κ±°λ‚˜ 데λͺ¬μ„ μ‹€ν–‰ν•˜λŠ” λ…Έλ“œμ—μ„œ 생성할 수 μžˆλŠ” λͺ¨λ“  μƒˆ νŠΈλžœμž­μ…˜μ΄ ν¬ν•¨λ©λ‹ˆλ‹€. μƒμ„±λœ 블둝은 λ…Έλ“œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ©λ‹ˆλ‹€.

Tables {#tables-2}

BlockGenerator 데λͺ¬μ€ λ‹€μŒ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • block_chain (saves new blocks)
  • transactions
  • transactions_status
  • info_block

Request {#request-2}

BlockGenerator 데λͺ¬μ€ λ‹€λ₯Έ 데λͺ¬μ— μš”μ²­ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

디세미넀이터 데λͺ¬ {#disseminator-daemon}

Disseminator 데λͺ¬μ€ νŠΈλžœμž­μ…˜κ³Ό 블둝을 λͺ¨λ“  λͺ…μ˜ˆ λ…Έλ“œλ‘œ λ³΄λƒ…λ‹ˆλ‹€.

κ°€λ””μ–Έ λ…Έλ“œ {#guardian-node}

κ°€λ””μ–Έ λ…Έλ“œμ—μ„œ μž‘μ—…ν•  λ•Œ 데λͺ¬μ€ ν•΄λ‹Ή λ…Έλ“œμ—μ„œ μƒμ„±λœ νŠΈλžœμž­μ…˜μ„ λͺ¨λ“  λͺ…μ˜ˆ λ…Έλ“œλ‘œ λ³΄λƒ…λ‹ˆλ‹€.

λͺ…μ˜ˆλ…Έλ“œ {#honor-node}

λͺ…μ˜ˆ λ…Έλ“œμ—μ„œ μž‘μ—…ν•  λ•Œ 데λͺ¬μ€ μƒμ„±λœ 블둝과 νŠΈλžœμž­μ…˜ ν•΄μ‹œλ₯Ό λͺ¨λ“  λͺ…μ˜ˆ λ…Έλ“œλ‘œ λ³΄λƒ…λ‹ˆλ‹€.

그런 λ‹€μŒ Honor NodeλŠ” μžμ‹ μ—κ²Œ μ•Œλ €μ§€μ§€ μ•Šμ€ νŠΈλžœμž­μ…˜ μš”μ²­μ— μ‘λ‹΅ν•©λ‹ˆλ‹€. 데λͺ¬μ€ 전체 νŠΈλžœμž­μ…˜ 데이터λ₯Ό μ‘λ‹΅μœΌλ‘œ λ³΄λƒ…λ‹ˆλ‹€.

Tables {#tables-3}

Disseminator 데λͺ¬μ€ λ‹€μŒ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • transactions

Request {#request-3}

Disseminator 데λͺ¬μ€ λ‹€μŒ μš”μ²­μ„ λ‹€λ₯Έ 데λͺ¬μœΌλ‘œ λ³΄λƒ…λ‹ˆλ‹€.

  • Type 1 νŠΈλžœμž­μ…˜ 및 블둝 ν•΄μ‹œλ₯Ό Honor λ…Έλ“œλ‘œ λ³΄λƒ…λ‹ˆλ‹€.
  • Type 2 μ•„λ„ˆλ…Έλ“œλ‘œλΆ€ν„° νŠΈλžœμž­μ…˜ 데이터λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

확인 데λͺ¬ {#confirmations-daemon}

확인 데λͺ¬μ€ λ…Έλ“œμ˜ λͺ¨λ“  블둝이 λŒ€λΆ€λΆ„μ˜ λ‹€λ₯Έ λ…Έλ“œμ— μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

차단 확인 {#block-confirmation}

λ„€νŠΈμ›Œν¬μ˜ μ—¬λŸ¬ λ…Έλ“œμ—μ„œ ν™•μΈν•œ 블둝은 ν™•μΈλœ λΈ”λ‘μœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€.

데λͺ¬μ€ ν˜„μž¬ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν™•μΈλ˜μ§€ μ•Šμ€ 첫 번째 블둝뢀터 ν•˜λ‚˜μ”© λͺ¨λ“  블둝을 ν™•μΈν•©λ‹ˆλ‹€.

각 블둝은 λ‹€μŒκ³Ό 같은 λ°©μ‹μœΌλ‘œ ν™•μΈλ©λ‹ˆλ‹€.

  • 확인 쀑인 λΈ”λ‘μ˜ IDκ°€ ν¬ν•¨λœ μš”μ²­μ„ λͺ¨λ“  λͺ…μ˜ˆ λ…Έλ“œμ— λ³΄λƒ…λ‹ˆλ‹€.
  • λͺ¨λ“  λͺ…μ˜ˆ λ…Έλ“œλŠ” 블둝 ν•΄μ‹œμ— μ‘λ‹΅ν•©λ‹ˆλ‹€.
  • μ‘λ‹΅ν•œ ν•΄μ‹œκ°€ 데λͺ¬ λ…Έλ“œμ— μžˆλŠ” λΈ”λ‘μ˜ ν•΄μ‹œμ™€ μΌμΉ˜ν•˜λ©΄ 확인 μΉ΄μš΄ν„° 값이 μ¦κ°€ν•©λ‹ˆλ‹€. 그렇지 μ•Šμ€ 경우 μ·¨μ†Œ μΉ΄μš΄ν„° 값이 μ¦κ°€ν•©λ‹ˆλ‹€.

Tables {#tables-4}

확인 데λͺ¬μ€ λ‹€μŒ ν…Œμ΄λΈ”μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

  • confirmation
  • info_block

Request {#request-4}

확인 데λͺ¬μ€ λ‹€μŒ μš”μ²­μ„ λ‹€λ₯Έ 데λͺ¬μœΌλ‘œ λ³΄λƒ…λ‹ˆλ‹€.

  • Type 4 λͺ…μ˜ˆ λ…Έλ“œμ—μ„œ 블둝 ν•΄μ‹œλ₯Ό μš”μ²­ν•©λ‹ˆλ‹€.

TCP μ„œλΉ„μŠ€ ν”„λ‘œν† μ½œ {#tcp-service-protocol}

TCP μ„œλΉ„μŠ€ ν”„λ‘œν† μ½œμ€ λͺ…μ˜ˆ λ…Έλ“œ 및 κ°€λ””μ–Έ λ…Έλ“œμ—μ„œ μž‘λ™ν•˜λ©° TCP의 이진 ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ BlocksCollection, Disseminator 및 Confirmation 데λͺ¬μ˜ μš”μ²­μ— μ‚¬μš©ν•©λ‹ˆλ‹€.

μš”μ²­ μœ ν˜• {#request-type}

각 μš”μ²­μ—λŠ” μš”μ²­μ˜ 처음 두 λ°”μ΄νŠΈλ‘œ μ •μ˜λœ μœ ν˜•μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μœ ν˜• 1 {#type-1}

λ°œμ‹ μž μš”μ²­ {#request-sender-1}

이 μš”μ²­μ€ Disseminator 데λͺ¬μ— μ˜ν•΄ μ „μ†‘λ©λ‹ˆλ‹€.

데이터 μš”μ²­ {#request-data-1}

νŠΈλžœμž­μ…˜ 및 λΈ”λ‘μ˜ ν•΄μ‹œ.

μš”μ²­ 처리 {#request-processing-1}

블둝 ν•΄μ‹œκ°€ 블둝 λŒ€κΈ°μ—΄μ— μΆ”κ°€λ©λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜ ν•΄μ‹œλ₯Ό 뢄석 및 κ²€μ¦ν•˜κ³  아직 λ…Έλ“œμ— λ‚˜νƒ€λ‚˜μ§€ μ•Šμ€ νŠΈλžœμž­μ…˜μ„ μ„ νƒν•©λ‹ˆλ‹€.

응닡 {#response-1}

μ•„λ‹ˆμš”. μš”μ²­μ„ μ²˜λ¦¬ν•œ ν›„ Type 2 μš”μ²­μ΄ λ°œν–‰λ©λ‹ˆλ‹€.

μœ ν˜• 2 {#type-2}

λ°œμ‹ μž μš”μ²­ {#request-sender-2}

이 μš”μ²­μ€ Disseminator 데λͺ¬μ— μ˜ν•΄ μ „μ†‘λ©λ‹ˆλ‹€.

데이터 μš”μ²­ {#request-data-2}

데이터 크기λ₯Ό ν¬ν•¨ν•œ νŠΈλžœμž­μ…˜ 데이터:

  • data_size(4λ°”μ΄νŠΈ)

  • νŠΈλžœμž­μ…˜ λ°μ΄ν„°μ˜ 크기(λ°”μ΄νŠΈ).

  • 데이터(data_size λ°”μ΄νŠΈ)

거래 λ°μ΄ν„°μž…λ‹ˆλ‹€.

μš”μ²­ 처리 {#request-processing-2}

νŠΈλžœμž­μ…˜μ„ ν™•μΈν•˜κ³  νŠΈλžœμž­μ…˜ λŒ€κΈ°μ—΄μ— μΆ”κ°€ν•©λ‹ˆλ‹€.

응닡 {#response-2}

μ•„λ‹ˆμš”.

μœ ν˜• 4 {#type-4}

λ°œμ‹ μž μš”μ²­ {#request-sender-3}

이 μš”μ²­μ€ 확인 데λͺ¬μ—μ„œ λ³΄λƒ…λ‹ˆλ‹€.

데이터 μš”μ²­ {#request-data-3}

블둝 ID.

응닡 {#response-3}

블둝 ν•΄μ‹œ.

이 IDλ₯Ό 가진 블둝이 μ—†μœΌλ©΄ 0 을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

μœ ν˜• 7 {#type-7}

λ°œμ‹ μž μš”μ²­ {#request-sender-4}

이 μš”μ²­μ€ BlockCollection 데λͺ¬μ—μ„œ λ³΄λƒ…λ‹ˆλ‹€.

데이터 μš”μ²­ {#request-data-4}

블둝 ID.

  • block_id(4λ°”μ΄νŠΈ)

응닡 {#response-4}

데이터 크기λ₯Ό ν¬ν•¨ν•œ 블둝 데이터.

  • data_size(4λ°”μ΄νŠΈ)

  • 블둝 λ°μ΄ν„°μ˜ 크기(λ°”μ΄νŠΈ).

  • 데이터(data_size λ°”μ΄νŠΈ)

블둝 데이터.

이 IDλ₯Ό 가진 블둝이 μ—†μœΌλ©΄ 연결이 λ‹«νž™λ‹ˆλ‹€.

μœ ν˜• 10 {#type-10}

λ°œμ‹ μž μš”μ²­ {#request-sender-5}

이 μš”μ²­μ€ BlockCollection 데λͺ¬μ—μ„œ λ³΄λƒ…λ‹ˆλ‹€.

데이터 μš”μ²­ {#request-data-5}

μ•„λ‹ˆμš”.

응닡 {#response-5}

블둝 ID.

  • block_id (4λ°”μ΄νŠΈ)