Aelf Teknik Konuşmalar — AEDPoS Sözleşme Uygulama Yorumlaması — Bölüm 2



Konsensüs Verileri Oluşturma - Konsensüs Ekstra Verilerini Alma (GetConsensusExtraData) & Konsensüs İşlemleri Oluşturma (GenerateConsensusTransactions)

Düğüm, Konsensüs Komutunu elde ettikten sonra yerel konsensüs zamanlayıcısını ArrangedMiningTime bilgilerine göre güncelleyecektir. Geri sayımdan sonra bloklar oluşturulur. Bloktaki konsensüs bilgileri iki yerde bulunur. Biri, Blok Başlığındaki fazladan veriler (biri konsensüs verisi olan ikili dizilerin bir listesi), diğeri ise hash (karma) değeri Blok Başlığına kaydedilen bir sistem işlemi olarak konsensüs işlemidir ve işlem ile ilgili veriler Blok Gövdesine kaydedilir.

Blok başlığındaki bilgiler GetConsensusExtraData çağrılarak oluşturulur ve konsensüs işlemi GenerateConsensusTransactions çağrılarak oluşturulur.

AEDPoS her iki uygulama için kaçınılmaz olarak aşağıdaki yöntemleri kullanır:





İlk olarak, deserileştirmenin girdi bilgilerinin Aelf ConsensusTriggerInformation aracılığıyla başlatılması gerekir. İkinci olarak, Konsensüs Davranışına göre farklı konsensüs verileri güncellenebilir.
Şimdi ilgili NextRound yöntemine bakalım:



Bu turda güncellenen konsensüs verilerine dayanarak bir sonraki bilgi turunu oluşturun ve daha sonra birkaç bloğun üretim bilgilerini güncelleyin.

GetConsensusExtraData, sadece bu yöntemin return değerini kullanır. GenerateConsensusTransactions bir Konsensüs işlemi oluşturmak için return değerini yeniden işlemek zorundadır (GetConsensusBlockExtraData'nın bool tipi parametresi, bir işlem oluştururken daha ayrıntılı bilgileri doldurmak için kullanılır):



Konsensüs bilgilerinin doğrulanması – ValidateConsensusBeforeExecution (Yürütmeden Önce Konsensüs Doğrulaması) & ValidateConsensusAfterExecution (Yürütmeden Sonra Konsensüs Doğrulaması)

Blok doğrulaması, halen mevcut bloğun üretim motivasyonuna dayanmaktadır - Konsensüs Davranışı. ValidateConsensusBeforeExecution'da farklı IHeaderInformationValidationProvider (Başlık Bilgisi Doğrulama Sağlayıcısı)'ın farklı Konsensüs Davranışlarına göre eklenmesi gerekir.

IHeaderInformationValidationProvider şu anda aşağıdaki türlere sahiptir:

• Sürekli Blok Doğrulama Sağlayıcısı - ContinuousBlocksValidationProvider (Düğümlerin sürekli olarak çok fazla blok üretmesini önler)
• Lib Bilgi Doğrulama Sağlayıcısı - LibInformationValidationProvider (Geri döndürülemez blok bilgilerinin doğru olduğunu doğrular)
• Madencilik İzni Doğrulama Sağlayıcısı -MiningPermissionValidationProvider (Düğümün engelleme iznine sahip olup olmadığını doğrular)
• Bir Sonraki Tur Madencilik Sırası Doğrulama Sağlayıcısı - NextRoundMiningOrderValidationProvider (Bir sonraki turda blok üretim sırasının doğru olduğunu doğrular)
• Tur Sonlandırma Doğrulama Sağlayıcısı - RoundTerminateValidationProvider (Bir sonraki temel bilgi turunun doğru olup olmadığını kontrol eder)
• Zaman Aralığı Doğrulama Sağlayıcısı - TimeSlotValidationProvider (Bloğun doğru zaman diliminden üretilip üretilmediğini doğrular)
• Güncelleme Değeri Doğrulama Sağlayıcısı - UpdateValueValidationProvider (Her bir düğüm tarafından güncellenen konsensüs bilgilerinin yasal olup olmadığını doğrular)







ValidateConsensusAfterExecution uygulamasının yalnızca konsensüs işleminden sonra gerçekte güncellenen konsensüs bilgilerinin (önemli bölüm) Blok Başlığı Ekstra Verilerindeki konsensüs bilgileri ile tutarlı olup olmadığını kontrol etmesi gerekir:



Blok başlığındaki konsensüs bilgileri ek bilgiler basitleştirildiğinden (Gizli Paylaşım ile ilgili bilgileri içermemesi gibi), ValidateConsensusAfterExecution'ın basitleştirilmiş içeriği uygun şekilde tamamlaması gerekir. Son olarak, StateDB'deki mevcut bilgi turunun tamamlanan bilgilerle tamamen tutarlı olup olmadığını doğrudan doğrulamak. Doğrulama, daha önemli konsensüs verileriyle de ilgilidir ve diğer gereksiz veriler için bazı uyarlamalar yapar. Bu nedenle GetHash (Karma Al)'te RecoverFromUpdateValue (Güncelleme Değerinden Kurtarma), RecoverFromTinyBlock (Minik Bloktan Kurtarma) ve GetCheckableRound (Kontrol Edilebilir Tur Alınması) çağrılır.

KAYNAK: https://medium.com/aelfblockchain/aelf-tech-talks-aedpos-contract-implementation-interpretation-pt-1-2ac13f08e84d