Cardano-db-sync: ν’€ 은퇴 ν›„ λ³΄μ¦κΈˆμ€ 보상 ν…Œμ΄λΈ”μ— μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

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

풀을 μ‚¬μš© μ€‘μ§€ν•œ ν›„ 보증금이 보상 계정에 도착해야 ν•©λ‹ˆλ‹€. cardano-cliμ—μ„œλŠ” λ³Ό 수 μžˆμ§€λ§Œ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

cardano-cli shelley query stake-address-info \
> --mainnet \
> --address stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29
[
    {
        "address": "stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29",
        "delegation": "pool1qnrqc7zpwye2r9wtkayh2dryvfqs7unp99f2039duljrsaffq5c",
        "rewardAccountBalance": 500009820
    }
]

image

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

@erikd
원μž₯ μ‚¬μ–‘μ—μ„œ :

21νŽ˜μ΄μ§€

μŠ€ν…Œμ΄ν¬ ν’€ ν‡΄μ§κΈˆ ν™˜λΆˆμ€ μΈμ¦μ„œκ°€ μ˜ˆμ•½λœ κ²½μš°κ°€ μ•„λ‹ˆλΌ λ°œν–‰λœλ‹€λŠ” 점을 κΈ°μ–΅ν•˜μ‹­μ‹œμ˜€.
μ²˜λΆ„μ΄ μ²˜λ¦¬λ˜μ§€λ§Œ μ²˜λΆ„μ΄ μ˜ˆμ •λœ 에포크 경계에 μžˆμŠ΅λ‹ˆλ‹€.

40νŽ˜μ΄μ§€

β€’ poolRefunds ν•¨μˆ˜λŠ” λΆ„λ°°λ˜μ–΄μ•Ό ν•˜λŠ” 총 ν™˜λΆˆμ•‘μ„ κ³„μ‚°ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
은퇴할 μ˜ˆμ •μΈ μŠ€ν…Œμ΄ν¬ ν’€μ˜ 경우. 이 계산은 계산이 μˆ˜ν–‰λ  λ•Œ Epoch 경계 μŠ¬λ‘―μ— ν•΄λ‹Ήν•˜λŠ” 슬둯 번호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ°˜ν™˜
map은 ν’€ 운영자 ν•΄μ‹œν‚€λ₯Ό ν™˜λΆˆμ— λ§€ν•‘ν•˜λ©°, μ΄λŠ” ꢁ극적으둜
λ“±λ‘λœ 보상 계정.

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

ν•˜μ§€λ§Œ '보상' ν…Œμ΄λΈ”μ€ μŠ€ν…Œμ΄ν¬ μ£Όμ†Œ λ³€κ²½κ³Ό λ™μΌν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€... μ΄λ ‡κ²Œ ν•˜λ©΄ 예λ₯Ό λ“€μ–΄ ITN 보상(ν˜„μž¬ 'μ˜ˆμ•½' ν…Œμ΄λΈ”)κ³Ό 같은 λ‹€λ₯Έ 것도 이 ν…Œμ΄λΈ”μ— μ €μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

보상과 ν•¨κ»˜ μ΄λŸ¬ν•œ μ˜ˆκΈˆμ„ μ–»λŠ” μœ μΌν•œ λ‹€λ₯Έ 방법은 이 지뢄 μ£Όμ†Œμ— μ—°κ²°λœ 풀이 주어진 μ‹œλŒ€μ— λ§Œλ£Œλ˜μ—ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό ν’€ 퇴직 ν…Œμ΄λΈ”μ— μΏΌλ¦¬ν•˜κ³  ν•΄λ‹Ή 값이 아직 λ§Œλ£Œλ˜μ§€ μ•Šμ€ 경우 보상에 ν•˜λ“œμ½”λ”©λœ 500000000 값을 μΆ”κ°€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 좜금, 좜금이 κ·Έ μ‹œμ κΉŒμ§€ 보상보닀 높지 μ•Šμ€ 경우 λ‹€μ‹œ 계산해야 ν•˜λŠ” λ“±μ˜ 방식은 정말 νˆ¬λ°•ν•΄ λ³΄μž…λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” μ—¬μ „νžˆ μ΄λŸ¬ν•œ ν•˜λ“œ μ½”λ”©λœ κ°’ λ“± 없이 db에 더 λͺ…μ‹œμ μœΌλ‘œ λͺ…μ‹œλ˜μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ•„λ§ˆλ„ λ‹€λ₯Έ ν…Œμ΄λΈ”? μ•„λ‹ˆλ©΄ 더 κ°„λ‹¨ν•œ 관계?

pool_retirement ν…Œμ΄λΈ”μ—μ„œ 이 500 ADAλ₯Ό κ°€μ Έμ˜€κΈ°λ‘œ μ„ νƒν•˜κ³  풀에 μ—¬λŸ¬ μ†Œμœ μžκ°€ μžˆλŠ” 경우 이 500 ADAκ°€ 보상을 받은 μŠ€ν…Œμ΄ν¬ μ£Όμ†Œλ₯Ό μ–΄λ–»κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆκΉŒ?

ν’€ μ†Œμœ μžκ°€ μ—¬λŸ¬ λͺ…인 경우 이 500 ADAκ°€ 보상을 받은 μŠ€ν…Œμ΄ν¬ μ£Όμ†Œλ₯Ό μ–΄λ–»κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ³΄μ¦κΈˆμ€ μ†Œμœ μž μ£Όμ†Œκ°€ μ•„λ‹Œ 보상 μ£Όμ†Œ(항상 풀에 λŒ€ν•œ 것)둜 λ°˜ν™˜λ©λ‹ˆλ‹€.

λ³΄μ¦κΈˆμ€ μ†Œμœ μž μ£Όμ†Œκ°€ μ•„λ‹Œ 보상 μ£Όμ†Œ(항상 풀에 λŒ€ν•œ 것)둜 λ°˜ν™˜λ©λ‹ˆλ‹€.
그것은 μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€ κ°μ‚¬ν•©λ‹ˆλ‹€!

그러면 은퇴 ν’€μ˜ μ˜ˆμΉ˜κΈˆμ€ pool_update ν…Œμ΄λΈ”μ— μ„ μ–Έλœ ν’€μ˜ 보상 μ£Όμ†Œλ‘œ λ°˜ν™˜λ  κ²ƒμž…λ‹ˆλ‹€. λ§žμŠ΅λ‹ˆκΉŒ?

λ‚˜λŠ” λ‚˜λ₯Ό ν˜Όλž€μŠ€λŸ½κ²Œν•˜λŠ” ν˜„μž¬ μ˜ˆκ°€ 있기 λ•Œλ¬Έμ— λ¬»μŠ΅λ‹ˆλ‹€.

SELECT SUM(amount) as reward, NULL as withdrawal
FROM reward
         LEFT JOIN stake_address sa on reward.addr_id = sa.id
WHERE sa.view = 'stake1u9rqg96sdsdrqshpx0x77jna40ws90drts2wks7vuy63dpqj6txws'
UNION
SELECT NULL, SUM(amount)
FROM withdrawal
         LEFT JOIN tx ON withdrawal.tx_id = tx.id
         LEFT JOIN block ON tx.block_id = block.id
         LEFT JOIN stake_address sa on withdrawal.addr_id = sa.id
WHERE sa.view = 'stake1u9rqg96sdsdrqshpx0x77jna40ws90drts2wks7vuy63dpqj6txws';

이 μΏΌλ¦¬λŠ” 예제 μŠ€ν…Œμ΄ν¬ μ£Όμ†Œμ˜ 총 보상과 총 μΈμΆœμ„ μ œκ³΅ν•©λ‹ˆλ‹€. κ·Έ μ°¨μ΄λŠ” μ •ν™•νžˆ 500000000 lovelaceμž…λ‹ˆλ‹€. λ¬Όλ‘  μš°μ—°μ˜ 일치일 μˆ˜λ„ μžˆμ§€λ§Œ λΉ„μŠ·ν•œ λ‹€λ₯Έ μ˜ˆκ°€ 있기 λ•Œλ¬Έμ— μƒμƒν•˜κΈ° 맀우 μ–΄λ ΅μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 이것이 λ°˜ν™˜λœ ν’€ 보증금이라고 κ°€μ •ν•˜κ³  이 μŠ€ν…Œμ΄ν¬ μ£Όμ†ŒλŠ” pool_update ν…Œμ΄λΈ”μ˜ 보상 μ£Όμ†Œλ‘œ λ°œμƒν•΄μ•Ό ν•©λ‹ˆλ‹€. λ§žμŠ΅λ‹ˆκΉŒ?

SELECT pool_retire.hash_id, sa.view FROM pool_retire
    LEFT JOIN pool_update pu ON pool_retire.hash_id = pu.hash_id
    LEFT JOIN stake_address sa on sa.id = pu.hash_id
WHERE sa.view = 'stake1u9rqg96sdsdrqshpx0x77jna40ws90drts2wks7vuy63dpqj6txws'

κ·ΈλŸ¬λ‚˜ 이 μΏΌλ¦¬λŠ” 결과둜 이어지지 μ•ŠμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μ•Œ 수 μžˆμ—ˆλ˜ 것은 μŠ€ν…Œμ΄ν¬ μ£Όμ†Œκ°€ μ€ν‡΄ν•œ ν’€(pool_hash_id = 8)의 곡동 μ†Œμœ μžλΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

이 500 ADAκ°€ μ–΄λ””μ—μ„œ μ™”λŠ”μ§€ μ–΄λ–»κ²Œ μ•Œ 수 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. 이 보증금이 ITNκ³Ό 관련될 수 μžˆμŠ΅λ‹ˆκΉŒ?

그러면 은퇴 ν’€μ˜ μ˜ˆμΉ˜κΈˆμ€ pool_update ν…Œμ΄λΈ”μ— μ„ μ–Έλœ ν’€μ˜ 보상 μ£Όμ†Œλ‘œ λ°˜ν™˜λ  κ²ƒμž…λ‹ˆλ‹€. λ§žμŠ΅λ‹ˆκΉŒ?

였λ₯Έμͺ½

κ·ΈλŸ¬λ‚˜ 이 μΏΌλ¦¬λŠ” κ²°κ³Όλ₯Ό κ°€μ Έμ˜€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

sa.id != pu.hash_id -> sa.id = pu.reward_addr_id

이 500 ADAκ°€ μ–΄λ””μ—μ„œ μ™”λŠ”μ§€ μ–΄λ–»κ²Œ μ•Œ 수 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. 이 보증금이 ITNκ³Ό 관련될 수 μžˆμŠ΅λ‹ˆκΉŒ?

거의 ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— λŒ€ν•΄ μš°λ¦¬λŠ” 어디에 μžˆμŠ΅λ‹ˆκΉŒ? μ•½κ°„ μ•žλ’€κ°€ μ•ˆλ§žμ•˜λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. 이에 λŒ€ν•œ ν˜„μž¬ 상황을 μ•Œλ € μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

λ¬Όλ‘ , λ¬Έμ œλŠ” κ½€ 많이 ν•˜μ΄μž¬ν‚Ήλ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λ¬Έμ œμ— λŒ€ν•΄ 아무 것도 λ³€κ²½λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 풀을 μ€ν‡΄ν•œ ν›„ 보상 μ£Όμ†Œλ‘œ λ°˜ν™˜λ˜μ–΄μ•Ό ν•˜λŠ” λ³΄μ¦κΈˆμ€ DB에 λͺ…μ‹œμ μœΌλ‘œ 어디에도 μ—†μŠ΅λ‹ˆλ‹€(예: 500 ADAλŠ” epoch 245에 λ„μ°©ν–ˆμŠ΅λ‹ˆλ‹€). κ·ΈλŸ¬λ‚˜ μ†Œμœ μž μ£Όμ†Œκ°€ μ°Ύκ³  μžˆλŠ” 보상 μ£Όμ†ŒμΈ 풀인지 ν’€ 은퇴 ν…Œμ΄λΈ”μ„ ν™•μΈν•œ λ‹€μŒ 이 μ •ν™•ν•œ μ€ν‡΄μ—μ„œ 이 κΈˆμ•‘μ΄ μΈμΆœλ˜μ§€ μ•Šμ€ 경우 μ‚¬μš©μžμ˜ 보상에 ν•˜λ“œμ½”λ”©λœ κ°’ '500'을 μˆ˜λ™μœΌλ‘œ μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€. 아직. 그것은 λ‚˜μ—κ²Œ 정말 μ„±κ°€μ‹  일이며 λ‚˜λŠ” 그것이 보상 ν…Œμ΄λΈ”μ΄λ‚˜ λ‹€λ₯Έ 곳으둜 갈 수 μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό μ œμ•ˆν–ˆμ§€λ§Œ λͺ…μ‹œ μ μœΌλ‘œμ˜€μŠ΅λ‹ˆλ‹€.

풀을 μ€ν‡΄ν•œ ν›„ 보상 μ£Όμ†Œλ‘œ λ°˜ν™˜λ˜μ–΄μ•Ό ν•˜λŠ” λ³΄μ¦κΈˆμ€ DB에 λͺ…μ‹œμ μœΌλ‘œ 어디에도 μ—†μŠ΅λ‹ˆλ‹€.

μ œκ°€ 쑰사할 μ˜ˆμ‹œ 메인넷 μ£Όμ†Œκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

e11d227aefa4b773149170885aadba30aab3127cc611ddbc4999def61c /take1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z

보증금 ν™˜λΆˆμ— λŒ€ν•΄ μ˜€ν•΄κ°€ μžˆμœΌμ‹ κ°€μš”? 보증금 ν™˜λΆˆμ€ reward ν…Œμ΄λΈ”μ΄ μ•„λ‹ˆλΌ tx ν…Œμ΄λΈ”μ— μžˆμŠ΅λ‹ˆλ‹€. 그럼 μ°Ύμ•„λ΄…μ‹œλ‹€.

κ΄€μ‹¬μžˆλŠ” μ£Όμ†Œ:

cexplorer=# select id, view, registered_tx_id from stake_address
               where view = 'stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29' ;
  id  |                            view                             | registered_tx_id 
------+-------------------------------------------------------------+------------------
 2820 | stake1uywjy7h05jmhx9y3wzy94td6xz4txynuccgam0zfn800v8qq33z29 |          2420601

id ν•„λ“œλŠ” db-sync μΈμŠ€ν„΄μŠ€μ—μ„œ λ‹€λ₯Ό 수 μžˆμ§€λ§Œ id λŠ” 이 탐색에 μœ μš©ν•©λ‹ˆλ‹€.

μ•½κ°„ λ³΅μž‘ν•˜μ§€λ§Œ λ‹€μŒμ„ μ‚¬μš©ν•˜μ—¬ ν™˜λΆˆμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

cexplorer=# select stake_deregistration.id, stake_deregistration.addr_id, stake_deregistration.tx_id,
               tx.deposit, block.epoch_no from stake_deregistration
               inner join tx on tx.id = stake_deregistration.tx_id
               inner join block on block.id = tx.block_id
               where stake_deregistration.addr_id = 2820 ; 
 id  | addr_id |  tx_id  | deposit  | epoch_no 
-----+---------+---------+----------+----------
 730 |    2820 | 2842157 | -2000000 |      223

λ§ˆμ°¬κ°€μ§€λ‘œ 등둝은 λ‹€μŒμ„ μ‚¬μš©ν•˜λŠ” κ²ƒμ²˜λŸΌ 보일 수 μžˆμŠ΅λ‹ˆλ‹€.

cexplorer=# select stake_registration.id, stake_registration.addr_id, stake_registration.tx_id, tx.deposit,
               block.epoch_no from stake_registration inner join tx on tx.id = stake_registration.tx_id
               inner join block on block.id = tx.block_id
               where stake_registration.addr_id = 2820 ; 
  id   | addr_id |  tx_id  | deposit | epoch_no 
-------+---------+---------+---------+----------
  1649 |    2820 | 2421547 | 2000000 |      208
 86926 |    2820 | 2842177 | 2000000 |      223
(2 rows)

이 μŠ€ν…Œμ΄ν¬ μ£Όμ†Œκ°€ λ‹€μŒκ³Ό κ°™λ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

  • 에포크 208에 등둝됨
  • Epoch 223μ—μ„œ 등둝 μ·¨μ†Œλ¨
  • Epoch 223μ—μ„œ λ‹€μ‹œ λ“±λ‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

그게 λ‹€ 말이 λ˜λ‚˜μš”?

μŠ€ν…Œμ΄ν¬ λ“±λ‘μ—λŠ” μ΄μΉ˜μ— λ§žμ§€λ§Œ ν’€ 은퇴에 λŒ€ν•΄ μ΄μ•ΌκΈ°ν•œ κ²ƒμž…λ‹ˆλ‹€. 그리고 ν’€ μ†Œμœ μžμ˜ 보상 μ£Όμ†Œλ‘œ λ°˜ν™˜λ˜μ–΄μ•Ό ν•˜λŠ” 500 ADA.

λ‚˜λŠ” 그것이 보상 μ£Όμ†Œλ‘œ λŒμ•„ 가지 μ•ŠλŠ”λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 풀이 μ‚¬μš© μ€‘μ§€λœ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λ°μ΄ν„°λ² μ΄μŠ€ μ–΄λ”˜κ°€μ— λ‚˜νƒ€λ‚  κ²ƒμ΄λΌλŠ” 관계 λ˜λŠ” 사싀은 μ‹€μ œλ‘œ ν˜„μž¬ λ²„μ „μ˜ 버그가 μ•„λ‹ˆλΌ κΈ°λŠ₯에 λŒ€ν•œ λ‚˜μ˜ μš”μ²­μž…λ‹ˆλ‹€. μ‚¬μš© μ€‘μ§€λœ ν’€μ˜ 예: pool134dws3tyc7kphwl6gks26cm6l390554lns9lyatm3gkxs6dwj2z. λ‚΄κ°€ 전에 보낸 μ£Όμ†ŒλŠ” κ·Έ μ†Œμœ μž

@erikd
원μž₯ μ‚¬μ–‘μ—μ„œ :

21νŽ˜μ΄μ§€

μŠ€ν…Œμ΄ν¬ ν’€ ν‡΄μ§κΈˆ ν™˜λΆˆμ€ μΈμ¦μ„œκ°€ μ˜ˆμ•½λœ κ²½μš°κ°€ μ•„λ‹ˆλΌ λ°œν–‰λœλ‹€λŠ” 점을 κΈ°μ–΅ν•˜μ‹­μ‹œμ˜€.
μ²˜λΆ„μ΄ μ²˜λ¦¬λ˜μ§€λ§Œ μ²˜λΆ„μ΄ μ˜ˆμ •λœ 에포크 경계에 μžˆμŠ΅λ‹ˆλ‹€.

40νŽ˜μ΄μ§€

β€’ poolRefunds ν•¨μˆ˜λŠ” λΆ„λ°°λ˜μ–΄μ•Ό ν•˜λŠ” 총 ν™˜λΆˆμ•‘μ„ κ³„μ‚°ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
은퇴할 μ˜ˆμ •μΈ μŠ€ν…Œμ΄ν¬ ν’€μ˜ 경우. 이 계산은 계산이 μˆ˜ν–‰λ  λ•Œ Epoch 경계 μŠ¬λ‘―μ— ν•΄λ‹Ήν•˜λŠ” 슬둯 번호λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ°˜ν™˜
map은 ν’€ 운영자 ν•΄μ‹œν‚€λ₯Ό ν™˜λΆˆμ— λ§€ν•‘ν•˜λ©°, μ΄λŠ” ꢁ극적으둜
λ“±λ‘λœ 보상 계정.

@xdzurman μ£„μ†‘ν•©λ‹ˆλ‹€.

관계 λ˜λŠ” 그것이 λ°μ΄ν„°λ² μ΄μŠ€ μ–΄λ”˜κ°€μ— λ‚˜νƒ€λ‚  κ²ƒμ΄λΌλŠ” 사싀은 μ‹€μ œλ‘œ κΈ°λŠ₯에 λŒ€ν•œ λ‚˜μ˜ μš”μ²­μž…λ‹ˆλ‹€.

κΈ°λŠ₯ μš”μ²­μ΄ μ •ν™•νžˆ λ¬΄μ—‡μΈκ°€μš”?

@erikd ν’€ 예치금(500 ADA)을 풀이 폐기된 ν›„ λ°μ΄ν„°λ² μ΄μŠ€ μ–΄λ”˜κ°€μ— λ„£μŠ΅λ‹ˆλ‹€. ν˜„μž¬λŠ” μžμ‹ μ΄ μ†ν•œ 보상 μ£Όμ†Œμ— λͺ…μ‹œμ μœΌλ‘œ μ—°κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

https://github.com/input-output-hk/cardano-db-sync/issues/474 λ₯Ό μœ„ν•΄ 이것을

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