Cardano-db-sync: ๋ธ”๋ก ํ…Œ์ด๋ธ”์—์„œ ์ œ๊ฑฐ๋˜์ง€ ์•Š์€ ๊ณ ์•„ ๋ธ”๋ก

์— ๋งŒ๋“  2020๋…„ 05์›” 30์ผ  ยท  10์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: input-output-hk/cardano-db-sync

๊ฒ€์ฆ ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค์Œ์„๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

All transactions for blocks in epoch 195 are present: Failed on block no 4224831: 
expected tx count of 2 but got 3

๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ :

select * from block where block_no = 4224831 ; 

ํ•˜๋‚˜๋งŒ ์˜ˆ์ƒ๋˜๋Š” ๋‘ ํ–‰์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

# select id, slot_no, block_no,previous,tx_count,time from block where 
    block_no = 4224831 ; 
   id    | slot_no | block_no | previous | tx_count |        time         
---------+---------+----------+----------+----------+---------------------
 4265744 | 4226980 |  4224831 |  4265742 |        2 | 2020-05-29 08:58:11
 4265743 | 4226979 |  4224831 |  4265742 |        3 | 2020-05-29 08:57:51

๋” ๋‚ฎ์€ ์Šฌ๋กฏ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง„ ๋ธ”๋ก์€ ๋ถ„๋ช…ํžˆ ๊ณ ์•„ ์˜€์ง€๋งŒ ๊ทธ ์ฒด์ธ์„ ํ™•์žฅ ํ•œ ์ดํ›„ ๋ธ”๋ก์ด ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋ก์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ œ๊ฑฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด ๋ถ„๋ฆฌ ๋œ ๋ธ”๋ก์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ”„๋กœ์„ธ์Šค์—์„œ ํ”ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

bug priority high

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋กค๋ฐฑ์‹œ ๋ธ”๋ก์„ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๊ณ„๋‹จ์‹ ์‚ญ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ญ์ œ ๋œ ๋ธ”๋ก ๋‚ด์— ๋…ผ๋ฆฌ์ ์œผ๋กœ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์‚ญ์ œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋กค๋ฐฑ ๋œ ๋ธ”๋ก์„ ๋ณด์กดํ•˜๋ ค๊ณ  ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ๋ธ”๋ก ์ „ํŒŒ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ์œ„ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋…ธ๋“œ ํด๋ผ์ด์–ธํŠธ๋กœ์„œ ํ•œ ๊ณณ์—์„œ๋งŒ ๊ด€์ฐฐํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์—ญํ• ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  10 ๋Œ“๊ธ€

์ด์— ๋Œ€ํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์ด์™€ ๊ฐ™์ด ๋ถ„๋ฆฌ ๋œ ๋ธ”๋ก์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋Œ€์‹  ๋ณ„๋„์˜ orphaned_blocks ํ…Œ์ด๋ธ”๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ด๋‹น ๋ธ”๋ก์— ์—ฐ๊ฒฐ๋œ tx ์œผ๋กœ ์ˆ˜ํ–‰ ํ•  ์ž‘์—…์„ ๊ฒฐ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ฒซ ๋Š๋‚Œ์€ ๊ทธ๋ƒฅ ๋ฌด์‹œ / ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

orphaned_block ํ…Œ์ด๋ธ”์ด ์žˆ์œผ๋ฉด Praos๋กœ ์ „ํ™˜ ํ•  ๋•Œ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ db-sync๊ฐ€ ์‹ค์ œ๋กœ Byron ๋งŒ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐ์€ ๋˜ํ•œ ๊ณ ์•„ ๋ธ”๋ก์„ ์ฒญ์†Œํ•˜๋˜ ์–ด๋”˜๊ฐ€์— ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋…ธ๋“œ๊ฐ€์ด ํ…Œ์ด๋ธ”์—์„œ ๋ฒ„๋ ค์ง„ ์‚ฌ์ด๋“œ ์•”์˜ ๋ชจ๋“  ๋ธ”๋ก์„ ํฌํ•จํ•˜์—ฌ ๊ฐ์ง€ ๋œ ๋ชจ๋“  ํฌํฌ๋ฅผ ์ €์žฅํ•˜๋Š” ์˜ต์…˜์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. x ์Šฌ๋กฏ ํ›„ ์ œ๊ฑฐ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ฐœ์ƒํ•œ ์ผ์— ๋Œ€ํ•œ ์ง„๋‹จ ๋ฐ ์ถ”์ ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์†์‹ค ๋œ TX์— ๋Œ€ํ•œ ์งˆ๋ฌธ์€ ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ์•„์ด๋””์–ด๋กœ, ์•”ํ˜ธํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  100 % ์•ˆ์ „ํ•œ์ง€ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

(db-sync ํ™œ์„ฑํ™” ๋จ) ๋…ธ๋“œ๊ฐ€ ๊ณ ์•„ ๋ธ”๋ก์—์„œ TX๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด mempool์— ๋‹ค์‹œ ์‚ฝ์ž… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๋ฐฉ์†กํ•˜์ง€ ์•Š๊ณ  ๋ธ”๋ก์„ ์ƒ์„ฑ ํ•  ์ฐจ๋ก€ ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
(๋‹ค๋ฅธ ๋งŽ์€ ํ’€์ด TX๋กœ ๊ณ ์•„ ๋ธ”๋ก์„ ๊ฐ์ง€ํ•˜๊ณ  ํ•ด๋‹น ์†Œ์Šค์˜ mempool์— ๋‹ค์‹œ ์‚ฝ์ž…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค)

ํ•œํŽธ utxo ์†Œ์œ ์ž๊ฐ€ (ํฌํฌ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ณ  ๊ณ ์•„ ๋ธ”๋ก์ด ๊ฐ์ง€ ๋  ๋•Œ๊นŒ์ง€) ๋‘ ๋ฒˆ์งธ ์‹œ๋„๋ฅผ ์ œ์ถœํ•˜๋ฉด ์ด์ „ TX๊ฐ€ ๋ฌดํšจํ™”๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  tx๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•œ ๊ฒฝ์šฐ ์ƒˆ ์œ ํšจํ•œ ๋ธ”๋ก์— ์ž๋™์œผ๋กœ ๋‹ค์‹œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์ง€๊ฐ‘์€ ๋ธ”๋ก์—์„œ ์ž์‹ ์˜ tx๋ฅผ ๋ณผ ์ˆ˜์žˆ๋Š” ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก์—์„œ ๊ณ ์•„๊ฐ€ ๋œ ํ›„ ์ผ๋ถ€ ๋ธ”๋ก์€ ๋‚˜์ค‘์— ๋™์ผํ•œ tx๊ฐ€ ๋‹ค๋ฅธ ๋ธ”๋ก์— ๋ฐฐ์น˜ ๋œ ํ›„ ์œ ํšจํ•œ ๋ธ”๋ก์ด๋ฉ๋‹ˆ๋‹ค.

(db-sync ํ™œ์„ฑํ™” ๋จ) ๋…ธ๋“œ๊ฐ€ ๊ณ ์•„ ๋ธ”๋ก์—์„œ TX๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด mempool์— ๋‹ค์‹œ ์‚ฝ์ž… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๋ฐฉ์†กํ•˜์ง€ ์•Š๊ณ  ๋ธ”๋ก์„ ์ƒ์„ฑ ํ•  ์ฐจ๋ก€ ์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

db-sync ๋Š” node ์™€๋Š” ๋ณ„๊ฐœ์ด๋ฉฐ ๋‹จ์ˆœํžˆ node ์˜ ์ฒด์ธ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
ํŠนํžˆ db-sync ๋Š” ์ž์ฒด mempool ๋ณต์‚ฌ๋ณธ์„ ์œ ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฐœ๊ฒฌ ํ•œ ๊ฒฝ์šฐ, ๊ณ ์•„ ๋ธ”๋ก์˜ ํŠธ๋žœ์žญ์…˜์€ ๋‚˜์ค‘์— ๊ณ ์•„๊ฐ€ ์•„๋‹Œ ๋ธ”๋ก์— ๊ฑฐ์˜ ํ™•์‹คํžˆ ํฌํ•จ๋˜์—ˆ์œผ๋ฏ€๋กœ db-sync ๋Š” ๊ทธ๋ƒฅ ๋“œ๋กญํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ง€๊ฐ‘์€ db-sync ์™€ ๋‹ค๋ฅธ ๋™์ž‘์„ํ•ฉ๋‹ˆ๋‹ค.

TX๊ฐ€ ๋‹ค๋ฅธ ๋ธ”๋ก ์ƒ์‚ฐ์ž์— ์˜ํ•ด ๊ฑฐ์˜ ํ™•์‹คํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒฝ์šฐ, ofc๋Š” db์—์„œ ๋…ธ๋“œ์˜ mempool๋กœ ์ผ๋ถ€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "๋‹ค์‹œ ์ฃผ์ž…"ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ๋ชจ๋“  ์Šฌ๋กฏ / ๋†’์ด ์ „ํˆฌ ๋ณ€ํ˜•์— ํ•ด๋‹นํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์งˆ๋ฌธ์ด ์•„๋‹ˆ๋ผ๋ฉด ๊ณ ์•„ ๋ธ”๋ก์—์„œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ TX๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๊ฐ€ db-sync ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ mempool์— ๋‹ค์‹œ ์‚ฝ์ž…ํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉ (์˜๋„)์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.

db-sync ๋Š” ์‹ค์ œ๋กœ ๊ณผ๊ฑฐ์— ๋ฐœ์ƒํ•œ ์ผ์„ ๋ณด๋Š” ๋ฐ๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋…ธ๋“œ ์ž์ฒด๋Š” ๊ณ ์•„ ๋ธ”๋ก์—์„œ ํŠธ๋žœ์žญ์…˜์„ ๊ฐ€์ ธ ์™€์„œ ์ž์ฒด mempool์— ๋‹ค์‹œ ๋„ฃ์Šต๋‹ˆ๋‹ค. db-sync ์€ ์—ฌ๊ธฐ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ 100 ๊ฐœ ์ •๋„์˜ ์Šฌ๋กฏ ๋‚ด์—์„œ ๋ถ„๋ฆฌ ๋œ ๋ธ”๋ก ๋ชฉ๋ก์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋””๋ฒ„๊น…์— ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กค๋ฐฑ์‹œ ๋ธ”๋ก์„ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๊ณ„๋‹จ์‹ ์‚ญ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ญ์ œ ๋œ ๋ธ”๋ก ๋‚ด์— ๋…ผ๋ฆฌ์ ์œผ๋กœ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์‚ญ์ œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋กค๋ฐฑ ๋œ ๋ธ”๋ก์„ ๋ณด์กดํ•˜๋ ค๊ณ  ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ ๋ธ”๋ก ์ „ํŒŒ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ์œ„ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋…ธ๋“œ ํด๋ผ์ด์–ธํŠธ๋กœ์„œ ํ•œ ๊ณณ์—์„œ๋งŒ ๊ด€์ฐฐํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์—ญํ• ์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ ์ฒด์ธ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ํ•œ ์ˆœ์ˆ˜ํ•˜๊ฒŒ db-sync๋ฅผ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๋ธ”๋ก์ด db-sync๋กœ ๋งŒ๋“  ๋‹ค์Œ ๋กค๋ฐฑ์‹œ ์‚ญ์ œ๋˜๋ฉด ๋‚ด ์‚ถ์ด ํฌ๊ฒŒ ๋‹จ์ˆœํ™”๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด postgres ์‚ญ์ œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋กœ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ์— ํ•„์š”ํ•˜๋ฉฐ Sam์€ Testnet์„ ํฌํ•จํ•œ ๋ชจ๋“  db-sync ๋ฆด๋ฆฌ์Šค์— ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

๋กค๋ฐฑ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. DB์—์„œ ๋ธ”๋ก ๋†’์ด๊ฐ€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋ธ”๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ฉ”์ธ ๋„ท์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

cexplorer = # SELECT * FROM ๋ธ”๋ก WHERE block_no = 4224831;
์•„์ด๋”” | ํ•ด์‹œ | slot_no | block_no | ์ด์ „ | merkel_root | slot_leader | ํฌ๊ธฐ | epoch_no | ์‹œ๊ฐ„ | tx_count
--------- + ---------------------------------------- ---------------------------- + --------- + ---------- + ---------- + --------------------------------------- ----------------------------- + ------------- + ------ + ---------- + --------------------- + ----------
4225044 | \ x941a71094c7b10243845a82e53dc45959d8fde5f6d87e463efe660aa9611b965 | 4226979 | 4224831 | 4225043 | \ x95549f5fcfc370eb4b24c981a6053f909bdef6418ce896828c6be18fa31ab406 | 6 | 1731 | 195 | 2020-05-29 08:57:51 | ์‚ผ
4225045 | \ x275ee8b9ae441e6e32e1f7f36290e6a048722619d91195773a07b06682418209 | 4226980 | 4224831 | 4225043 | \ x6eb04497431d77657a94b0eee70dae59e7403980d4fc9d06ba5295436b8f0f54 | 7 | 1418 | 195 | 2020-05-29 08:58:11 | 2
(2 ์—ด)

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰