Cardano-db-sync: λͺ‡ λͺ…μ˜ lovelaces에 μ˜ν•΄ 보상 ν…Œμ΄λΈ” μ˜€ν”„

에 λ§Œλ“  2020λ…„ 11μ›” 12일  Β·  12μ½”λ©˜νŠΈ  Β·  좜처: input-output-hk/cardano-db-sync

λ‚˜λŠ” cardano-submit-apiλ₯Ό 톡해 νŠΈλžœμž­μ…˜μ„ 보낼 수 μ—†μŠ΅λ‹ˆλ‹€. "WithdrawalsNotInRewardsDELEGS"라고 ν‘œμ‹œλ˜μ–΄ 잘λͺ»λœ 보상을 μ•”μ‹œν•˜κ±°λ‚˜ λͺ¨λ“  보상을 μΈμΆœν•˜μ§€ μ•ŠμœΌλ €κ³  ν•©λ‹ˆλ‹€. 잘λͺ»λ˜μ—ˆμ„ 수 μžˆλŠ” λͺ¨λ“  뢀뢄을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. κ·Έ ν›„ db-sync와 yoroi apiμ—μ„œ 얻은 μž„μ˜μ˜ μ£Όμ†Œμ— λŒ€ν•œ 보상을 λΉ„κ΅ν–ˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ λͺ‡ 가지 λΆˆμΌμΉ˜μž…λ‹ˆλ‹€(lovelacesμ—μ„œ).

image
각 행은 이 SQL의 db-sync 보상을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
SELECT (SELECT COALESCE(SUM(rewards.amount), 0) FROM ( SELECT amount FROM reward WHERE addr_id=$1 UNION ALL SELECT amount FROM reserve WHERE addr_id=$1 ) rewards ) - ( SELECT COALESCE(SUM(amount), 0) FROM withdrawal WHERE addr_id=$1 ) AS "remainingRewards"
yoroi api의 λ§ˆμ΄λ„ˆμŠ€ 보상.

무슨 일이야 @erikd ?

νŽΈμ§‘: yoroiλŠ” db-syncμ—μ„œλ„ κ°€μ Έμ˜€κΈ° λ•Œλ¬Έμ— 두 개의 잘λͺ»λœ 값이 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μ–΄λŠ μͺ½μ΄λ“  였λ₯˜λŠ” db-syncμ—μ„œ λ°œμƒν•©λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ£„μ†‘ν•©λ‹ˆλ‹€, μ œκ°€ λ„ˆλ¬΄ 일찍 μ „ν™”λ₯Ό κ±Έμ—ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œκ°€ ν•΄κ²°λœ 것 κ°™μŠ΅λ‹ˆλ‹€. λͺ¨λ‹ˆν„°λ§ 쀑이며 λ©°μΉ  후에 λ‹€μ‹œ λ³΄κ³ ν•˜κ² μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  12 λŒ“κΈ€

μš°λ¦¬λŠ” 이것을 Yoroiμ—μ„œλ„ λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμ€ μ‹€μ œ 값이 30428426인 cardano-db-sync의 7가지 λ‹€λ₯Έ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ κ²°κ³Όμž…λ‹ˆλ‹€.

backend#1 30428424
backend#2 30428424
backend#3 30428424
backend#4 30428423
backend#5 30428430
backend#6 30428424
backend#7 30428426

λ³΄μ‹œλ‹€μ‹œν”Ό 1/7 λ°±μ—”λ“œλ§Œ μ˜¬λ°”λ₯Έ κ²°κ³Όλ₯Ό μ–»μ—ˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” μ΄λŸ¬ν•œ 잘λͺ»λœ 값이 SQL λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ˜μ–΄ μžˆλŠ”μ§€ λ‹€μ‹œ ν•œ 번 ν™•μΈν–ˆκΈ° λ•Œλ¬Έμ— 이 λ¬Έμ œκ°€ μŠ€νƒμ˜ 일뢀가 μ•„λ‹ˆλΌλŠ” 것을 μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€.

@SebastienGllmt 뭐? λ‹€λ₯Έ db-sync μΈμŠ€ν„΄μŠ€λŠ” λ‹€λ₯Έ κ²°κ³Όλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€??? 그듀은 λͺ¨λ‘ 같은 버전을 μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

@xdzurman ν•΄λ‹Ή SQL 쿼리λ₯Ό λ‹¨μˆœν™”ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 보상, 적립금, μ°¨μ•‘μ˜ μ„Έ 가지 열이 있으면 쒋을 κ²ƒμž…λ‹ˆλ‹€.

쿼리가 μ‹€μ œλ‘œ 잘λͺ»λ˜μ—ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 보상 ν…Œμ΄λΈ”μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€(λ‚΄ μΈμŠ€ν„΄μŠ€λŠ” ν˜„μž¬ λ™κΈ°ν™”λ˜μ§€ μ•ŠμŒ).

cexplorer=# select * from reward ; 
 id | addr_id | amount | epoch_no | pool_id | block_id 
----+---------+--------+----------+---------+----------
(0 rows)

λ”°λΌμ„œ 각 에포크 에 λŒ€ν•΄ 보상 κΈˆμ•‘(즉, ν•΄λ‹Ή 에포크에 λŒ€ν•œ 보상 μŠ€λƒ…μƒ·)이 있으며 μ œλŒ€λ‘œ νƒμƒ‰ν•˜μ§€ μ•ŠμœΌλ©΄ reserve ν…Œμ΄λΈ”μ— 무엇이 μžˆλŠ”μ§€μ‘°μ°¨ ν™•μ‹ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

@erikd 이것은 λ‹€λ₯Έ κ²°κ³Όλ₯Ό μ œκ³΅ν•œ 7개의 λ‹€λ₯Έ λ°±μ—”λ“œμ—μ„œ μ‹€ν–‰ν•œ μΏΌλ¦¬μž…λ‹ˆλ‹€. 그듀은 λͺ¨λ‘ λ™μΌν•œ λ²„μ „μ˜ cardano-db-sync 및 λ™μΌν•œ λ…Έλ“œ λ²„μ „μž…λ‹ˆλ‹€.

  select stake_address.hash_raw as "stakeAddress"
       , "totalReward".*

  from stake_address

  left outer join (
    SELECT addr_id, amount
    FROM reward
  ) as "totalReward" on stake_address.id = "totalReward".addr_id

  where encode(stake_address.hash_raw, 'hex') = 'e1567298bc998d188d936f105f9e9e616f1980adacc06fc5732a57f9cc'

이 SQL 쿼리에 μ§€μ •λœ μ£Όμ†ŒλŠ” ν•œ 번만 보상을 λ°›μ•˜μœΌλ―€λ‘œ μž‘μ—…ν•˜κΈ°κ°€ 더 μ‰½μŠ΅λ‹ˆλ‹€.

쿼리가 μ‹€μ œλ‘œ 잘λͺ»λ˜μ—ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 보상 ν…Œμ΄λΈ”μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€(λ‚΄ μΈμŠ€ν„΄μŠ€λŠ” ν˜„μž¬ λ™κΈ°ν™”λ˜μ§€ μ•ŠμŒ).

cexplorer=# select * from reward ; 
 id | addr_id | amount | epoch_no | pool_id | block_id 
----+---------+--------+----------+---------+----------
(0 rows)

λ”°λΌμ„œ 각 에포크 에 λŒ€ν•΄ 보상 κΈˆμ•‘(즉, ν•΄λ‹Ή 에포크에 λŒ€ν•œ 보상 μŠ€λƒ…μƒ·)이 있으며 μ œλŒ€λ‘œ νƒμƒ‰ν•˜μ§€ μ•ŠμœΌλ©΄ reserve ν…Œμ΄λΈ”μ— 무엇이 μžˆλŠ”μ§€μ‘°μ°¨ ν™•μ‹ ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
image

λ‚˜λŠ” κ°€μ •ν•©λ‹ˆλ‹€ - μ˜ˆλΉ„λŠ” ITN 보상을 λ³΄μœ ν•©λ‹ˆλ‹€. 보상 ν…Œμ΄λΈ”μ€ ν•΄λ‹Ή 에포크가 μ‹œμž‘λ  λ•Œ 받은 보상을 μ§€μ •ν•©λ‹ˆλ‹€. λ”°λΌμ„œ λ‚˜λ¨Έμ§€ 보상은 λͺ¨λ“  λ³΄μƒμ˜ 합계와 ν•΄λ‹Ή λ³΄μƒμ—μ„œ μΈμΆœμ„ λΊ€ κ²ƒμž…λ‹ˆλ‹€.

μœ μ‚¬ν•œ 문제λ₯Ό λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€. 137λͺ…μ˜ μœ„μž„μžκ°€ μ •ν™•νžˆ 500 ADAλ₯Ό μ² νšŒν–ˆμŠ΅λ‹ˆλ‹€. ν…Œμ΄λΈ” μ² μˆ˜μ—μ„œ db-sync db 내뢀에 ν‘œμ‹œλ©λ‹ˆλ‹€. κ·Έλ“€ 쀑 μΌλΆ€λŠ” κ·Έ ν›„ λ§ˆμ΄λ„ˆμŠ€ μž”μ•‘μ„ μ–»μ—ˆμŠ΅λ‹ˆλ‹€. 이것은 이 λ¬Έμ œμ™€ 관련이 μžˆκ±°λ‚˜ 우리 μΈ‘μ—μ„œ 잘λͺ»λœ 일을 ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄:

ν•˜λ‚˜λŠ” 500 ADAλ₯Ό μ² νšŒν–ˆμ§€λ§Œ db-sync에 λ”°λ₯΄λ©΄ 200 ADA만 λ°›μ•˜μŠ΅λ‹ˆλ‹€. λ‚΄ μ˜ˆλŠ” 214 λ˜λŠ” κ·Έ μ΄ν›„μ˜ Epoch에 λŒ€ν•œ κ²ƒμž…λ‹ˆλ‹€.

https://github.com/input-output-hk/cardano-db-sync/pull/413 도 이 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆκΉŒ?

@mmahut 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. #413μ—μ„œ μˆ˜μ •λœ 버그도 이 문제λ₯Ό μ‰½κ²Œ μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ” ν•˜λ‚˜ μ΄μƒμ˜ λ¬Έμ œκ°€ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. @xdzurman ?

@mmahut 이것은 λ³„λ„μ˜ μΈμŠ€ν„΄μŠ€μ— 걸쳐 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 이것을 μƒμ„±ν•˜λŠ” μ‰¬μš΄ 방법이 ν•„μš”ν•˜κ³  ν•˜λ‚˜ μ΄μƒμ˜ μΈμŠ€ν„΄μŠ€λ₯Ό κ°–λŠ” 것은 μ‰¬μš΄ μž¬μƒμ‚° 사둀가 μ•„λ‹™λ‹ˆλ‹€.

μ£„μ†‘ν•©λ‹ˆλ‹€, μ œκ°€ λ„ˆλ¬΄ 일찍 μ „ν™”λ₯Ό κ±Έμ—ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œκ°€ ν•΄κ²°λœ 것 κ°™μŠ΅λ‹ˆλ‹€. λͺ¨λ‹ˆν„°λ§ 쀑이며 λ©°μΉ  후에 λ‹€μ‹œ λ³΄κ³ ν•˜κ² μŠ΅λ‹ˆλ‹€.

λ‚˜μ—κ²Œλ„ κ³ μ •λœ 것 κ°™μœΌλ‹ˆ μ§€κΈˆμ€ λ‹«λŠ”λ‹€. λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ 자유둭게 μž¬κ°œν•˜μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰