Cardano-db-sync: مثال على رصيد الحساب

تم إنشاؤها على ٢٥ مارس ٢٠٢١  ·  10تعليقات  ·  مصدر: input-output-hk/cardano-db-sync

قد أتأخر قليلاً عن الحفلة ، لكن هل تمانع في مشاركة كيف يمكن للمرء تتبع رصيد الحساب ، على سبيل المثال؟

حساب outputs + reward + reserve + treasury - inputs - withdrawal لن يفي بالغرض ولا يبدو أن هناك طريقة لطيفة وسهلة للتغلب على هذا.

يمكن أن يكون المرشح الجيد هو stake1uyluup0rh6r2cc7kcw8nudqz990ezf5ltagxmw3u8deukvqwq7etq (حساب المكافآت لتجمع متقاعد بالفعل). يعرض المستكشفون المختلفون هذا بطريقة مختلفة ، لكنني أعتقد أنه غير ممكن حاليًا بدون أي نوع من الحلول البديلة / الحوسبة المرهقة الإضافية. تصبح الأمور أكثر ضبابية عند أخذ الحالات الحرجة في الاعتبار. مع وضع كل ذلك في الاعتبار ، ألن يكون من المفيد تتبع معلومات reap (بالإضافة إلى deposit ) إلى جانب الحساب والعصر في dbsync؟

_تم نشره في الأصل بواسطة @ 1000101 في https://github.com/input-output-hk/cardano-db-sync/issues/474#issuecomment -804793203_

التعليق الأكثر فائدة

أنا أتفق مع هذا. هناك أيضًا العديد من حالات الحافة التي سيتعين على كل "مستخدم" لـ cardano-db-sync التعامل معها. يتم الخلط بين كل من Adalite و Yoroi عندما يرون حسابًا كان في السابق حساب مكافأة لمجموعة متقاعدين:
image
image

أيضًا ، AFAIK فقط cardanoscan يتعامل مع المكافآت المتبقية بشكل صحيح ، ولا يستخدم db-sync.

يجب أن تكون هناك علاقة سهلة يتم تحديثها بنفس طريقة إضافة المكافآت تلقائيًا. لنأخذ مجموعة ذات عمليات إلغاء تسجيل متعددة كمثال ، نظرًا لأن هذا أمر شائع بالفعل ومن الصعب التعامل مع رصيد المكافأة لحساب مالكها.

هناك 9 شهادات تقاعد لها
image

و 15 شهادة تسجيل
image

هناك العديد من قضايا الحافة والقواعد الغامضة لإلغاء التقاعد من قبل شهادات جديدة .

erikd ، إذا كنت تصر على اتصال كافٍ بين إيداع 500 tx وحالات التقاعد ، فكيف تكتب استعلامًا فقط عن الإيداعات المرتجعة لأحد حسابات مالكها - e127e9e94eaa9287680e877832700a1724255e9688609497e09a6c440f؟ إذا لم يكن الأمر كذلك ، فهل يمكننا إضافة هذا صراحة إلى db-sync؟ لنفترض ، كجدول جديد ، باسم pool_refunds ، مع addr_id ، المبلغ (حاليًا يجب أن يكون مضاعفًا لـ 500) و epoch_no - بحيث يتم التعامل مع هذا بشكل صحيح ، وفي مكان واحد.

ال 10 كومينتر

شكرا لفتح هذه القضية نيابة عني! فقط للتوضيح أكثر قليلاً - لا يتعلق الأمر بالحساب في حد ذاته فحسب ، بل يتعلق بشكل أساسي بتتبع reap في مكان ما في db بحيث يمكن استخدامه بسهولة في حساب رصيد الحساب (والذي يتم استخدامه في كل مكان ، على سبيل المثال pool live حجم الحصة ، والتعهد الحي للمجمع ، وما إلى ذلك).

@ 1000101 ما هو "ريب"؟ لا يوجد جدول أو عمود في db-sync يسمى "reap".

رصيد الحساب ليس تافها.

تحتوي العناوين في Shelley والعصور اللاحقة على مكونين ؛ اعتماد الدفع وبيانات اعتماد التخزين. عنوان الرهان (على سبيل المثال stake1uyluup0rh6r2cc7kcw8nudqz990ezf5ltagxmw3u8deukvqwq7etq ) مشتق من العنوان الأحدث. ومع ذلك ، من الممكن إنشاء عنوان صالح لا يحتوي على أي بيانات اعتماد Staking.

لذلك في حين أنه من الممكن الحصول على رصيد الحساب لعنوان حصة معين ، لا توجد طريقة للحصول على رصيد حساب المحفظة ما لم يتضمن كل عنوان في تلك المحفظة نفس بيانات اعتماد Staking.

@ 1000101 ما هو "ريب"؟ لا يوجد جدول أو عمود في db-sync يسمى "reap".

أوه ، أنا آسف لعدم توضيح هذا بما فيه الكفاية. ما قصدته موصوف في https://github.com/input-output-hk/cardano-db-sync/issues/474 - أي ما أقوله هو بالضبط أنه لا يوجد عمود لهذا ولكن سيكون رائعًا إذا كان هناك.

لا توجد حاليًا طريقة لحساب رصيد الحساب بسهولة ، عندما يتم استخدام هذا الحساب في تسجيل المجمع (كحساب مكافأة) وبعد ذلك تم إيقاف المجمع ، وبالتالي استعادة إيداع المجمع. يتم تتبع "الدفع" الخاص بإيداع المجمع في dbsync ، ولكن لا يتم تتبع "استرداد" عند توقف المجمع.

أنا أتفق مع هذا. هناك أيضًا العديد من حالات الحافة التي سيتعين على كل "مستخدم" لـ cardano-db-sync التعامل معها. يتم الخلط بين كل من Adalite و Yoroi عندما يرون حسابًا كان في السابق حساب مكافأة لمجموعة متقاعدين:
image
image

أيضًا ، AFAIK فقط cardanoscan يتعامل مع المكافآت المتبقية بشكل صحيح ، ولا يستخدم db-sync.

يجب أن تكون هناك علاقة سهلة يتم تحديثها بنفس طريقة إضافة المكافآت تلقائيًا. لنأخذ مجموعة ذات عمليات إلغاء تسجيل متعددة كمثال ، نظرًا لأن هذا أمر شائع بالفعل ومن الصعب التعامل مع رصيد المكافأة لحساب مالكها.

هناك 9 شهادات تقاعد لها
image

و 15 شهادة تسجيل
image

هناك العديد من قضايا الحافة والقواعد الغامضة لإلغاء التقاعد من قبل شهادات جديدة .

erikd ، إذا كنت تصر على اتصال كافٍ بين إيداع 500 tx وحالات التقاعد ، فكيف تكتب استعلامًا فقط عن الإيداعات المرتجعة لأحد حسابات مالكها - e127e9e94eaa9287680e877832700a1724255e9688609497e09a6c440f؟ إذا لم يكن الأمر كذلك ، فهل يمكننا إضافة هذا صراحة إلى db-sync؟ لنفترض ، كجدول جديد ، باسم pool_refunds ، مع addr_id ، المبلغ (حاليًا يجب أن يكون مضاعفًا لـ 500) و epoch_no - بحيث يتم التعامل مع هذا بشكل صحيح ، وفي مكان واحد.

حاليًا يقوم db-sync باستخراج البيانات من حالة دفتر الأستاذ وإدراجها في قاعدة البيانات. يتجاهل بعض المعلومات ، لكنه لا يقوم بأي تجميعات. ما يتم إدراجه في قاعدة البيانات هو مجرد انعكاس لما توفره حالة دفتر الأستاذ.

لنلقِ نظرة على pool_hash.id ذو الصلة:

> select id, hash_raw from pool_hash
    where hash_raw = '\x9c8e59ea7004a51f953642653d70a94d066359b9dd6e6416a5430ff3' ;
  id  |                          hash_raw                          
------+------------------------------------------------------------
 5022 | \x9c8e59ea7004a51f953642653d70a94d066359b9dd6e6416a5430ff3
(1 row)

تم تسجيل التجمع (صلات إضافية لترتيبها من block_no تصاعديًا) على النحو التالي:

> select pool_update.id, hash_id, cert_index, active_epoch_no, block.block_no, block.epoch_no
    from pool_update
      inner join tx on tx.id = pool_update.registered_tx_id
      inner join block on tx.block_id = block.id
    where pool_update.hash_id = 5022
    order by block.block_no asc; 
  id  | hash_id | cert_index | active_epoch_no | block_no | epoch_no 
------+---------+------------+-----------------+----------+----------
 5022 |    5022 |          0 |             220 |  4717004 |      218
 5023 |    5022 |          0 |             220 |  4717035 |      218
 5024 |    5022 |          0 |             220 |  4717057 |      218
 5029 |    5022 |          0 |             220 |  4717140 |      218
 5030 |    5022 |          0 |             220 |  4717146 |      218
 5031 |    5022 |          0 |             220 |  4717169 |      218
 5032 |    5022 |          0 |             220 |  4717189 |      218
 5033 |    5022 |          0 |             220 |  4717216 |      218
 5034 |    5022 |          0 |             220 |  4717234 |      218
 5035 |    5022 |          0 |             220 |  4717241 |      218
 5037 |    5022 |          0 |             220 |  4717296 |      218
 5038 |    5022 |          0 |             220 |  4717425 |      218
 5061 |    5022 |          0 |             220 |  4721000 |      218
 5080 |    5022 |          0 |             221 |  4725394 |      219
 5081 |    5022 |          0 |             221 |  4725435 |      219
(15 rows)

وتم إلغاء تسجيلها في:

> select pool_retire.id, hash_id, cert_index, retiring_epoch, block.block_no, block.epoch_no
    from pool_retire
      inner join tx on tx.id = pool_retire.announced_tx_id
      inner join block on tx.block_id = block.id
    where hash_id = 5022
    order by block.block_no asc ; 
 id  | hash_id | cert_index | retiring_epoch | block_no | epoch_no 
-----+---------+------------+----------------+----------+----------
 180 |    5022 |          0 |            219 |  4717395 |      218
 181 |    5022 |          0 |            219 |  4717397 |      218
 182 |    5022 |          0 |            219 |  4717401 |      218
 183 |    5022 |          0 |            219 |  4717403 |      218
 184 |    5022 |          0 |            219 |  4717405 |      218
 185 |    5022 |          0 |            219 |  4717417 |      218
 186 |    5022 |          0 |            219 |  4717430 |      218
 187 |    5022 |          0 |            220 |  4725366 |      219
 188 |    5022 |          0 |            220 |  4725717 |      219
(9 rows)

إزالة التحديثات وإلغاء التسجيل:

action   | block_no
---------+------------
register | 4717004
update   | 4717035
update   | 4717057
update   | 4717140
update   | 4717146
update   | 4717169
update   | 4717189
update   | 4717216
update   | 4717234
update   | 4717241
update   | 4717296
retire   | 4717395
retire   | 4717397
retire   | 4717401
retire   | 4717403
retire   | 4717405
retire   | 4717417
update   | 4717425
retire   | 4717430
update   | 4721000
retire   | 4725366
update   | 4725394
update   | 4725435
retire   | 4725717

يتبع ....

هذا بالتأكيد يسبب الكثير من الألم في الرقبة. التحدث مع الأشخاص الذين لديهم مواصفات دفتر الأستاذ لمحاولة التوصل إلى حل.

تحدث إلى الأشخاص ledger-specs الذين اقترحوا طريقة سريعة وقذرة للتلاعب بها في الوقت الحالي أثناء انتظار حل أفضل.

ستكون الفكرة أن يكون لديك شيء مثل جدول pool_registration_refund يحتوي على عنوان الرهان والمبلغ.

سيكون ذلك رائعًا!

تحدث إلى الأشخاص ledger-specs الذين اقترحوا طريقة سريعة وقذرة للتلاعب بها في الوقت الحالي أثناء انتظار حل أفضل.

ستكون الفكرة أن يكون لديك شيء مثل جدول pool_registration_refund يحتوي على عنوان الرهان والمبلغ.

مدهش! أعني ، لدينا حل بديل في الوقت الحالي ، لذا لن نحقق التوازن السلبي xdzurman الذي تمت مشاركته ، ولكن هناك حوالي 100 سطر من غير جميلة: tm : SQL والتي يجب حسابها لكل حساب. هذا من شأنه أن يساعد بالتأكيد طن. شكرا ميل !!!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات