Aelf Teknik Konuşmalar - AEDPoS Sözleşme Uygulama Yorumlaması - Bölüm 1
Aelf konsensüs sözleşme standardında, beş arayüzü üç gruba ayrılabilir:
• Herhangi bir düğüm için konsensüs komutu, herhangi bir zamanda sözleşmeden istenebilir;
• Programlayıcı geri sayımının sona ermesinden sonra etkin blok süresini alan düğüm, sözleşmeden konsensüs verilerini alır ve bu verilere dayanarak bloğu üretir.
• Bir düğüm yerel blok zincirine bir blok eklediğinde, konsensüs verileri üzerinde bir dizi doğrulama için blok bilgisini konsensüs sözleşmesine gönderir.
Konsensüs Komutu Alınması (Get Consensus Command)Bu yöntemin genel mantığı aşağıdaki gibidir:
Bu uygulamada, kod blok zincirinin çalışmaya başlaması için zaman damgasını aldıktan sonra, get consensus komutu iki adıma ayrılır:
1. Round bilgisine ve zincirin bir ana zincir mi yoksa bir yan zincir mi olduğuna göre, genel anahtarın bir sonraki blokta ne tür blok üretmesi gerektiğini belirleyecektir. Bu burada Konsensüs Davranışı olarak tanımlanmaktadır.
2. Geçerli bir Konsensüs Davranışı alabiliyorsanız, Konsensüs Komutunu daha fazla toplayabilir ve sonuç olarak döndürebilirsiniz.
Konsensüs Davranışı Alınması
Aelf yan zinciri ve ana zincir arasındaki fark, yan zincirlerde üretim düğümleri seçimi (yani Konsensüs Davranışı) gibi işlemlerin olmamasıdır. Birleştirilmiş Madencilik tasarım modunda yan zincir, ana zincirin üretim düğümlerini paylaşır. Bu nedenle, üretim düğümü seçimleri ve diğer işlerle ilgili sözleşmelerin yalnızca ana zincirde dağıtılması gerekir.
Konsensüs Davranışı Sağlayıcı Tabanı, ana zincir ve yan zincirler için Konsensüs Davranışının uygulama mantığını paylaşır.
İlk olarak, AEDPoS konsensüs tasarım mekanizmasını ve blok üretim sekanslarını kısaca tanıtacağız. AEDPoS blok üretim döngüsünün Raunt temelli iken DPOS konsensüsü altında, blokların bir dizi seçilmiş proxy düğüm tarafından üretildiği iyi bilinmektedir. Her turda her bir üretim düğümüne rastgele bir Zaman Slotu atanır. Sadece tahsis edilen zaman diliminde üretim bloğu yasal kabul edilebilir. Üretim düğümlerinin tahsis sırası, bir önceki turda üretilen rastgele sayılarla belirlenir. Son turun rastgele sayısını doğrulamak için üretim düğümünün son turda rastgele bir sayının karma değerini yayınlaması ve ardından rastgele sayının karma değerinin son turda yayınlanan karma değerine eşit olup olmadığını doğrulamak için geçerli turda son turun rastgele sayısını yayınlaması gerekir. Bu doğrulama mekanizması, AEDPoS Konsensüs Taahhüt Planının rasgele sayısını doğrulamak için de kullanılır. Her turun son üretim düğümü Zaman Slotundan sonra bir sonraki bilgi turunu başlatmak için kullanılan ek bloklar üretmek için ek bir Zaman Slotu vardır.
Bu nedenle, Konsensüs Davranışı elde etmede üretim düğümü için uygulama mantığı nispeten açıktır:
1. Düğüm bu turda bir blok üretmediyse:
2. Geçerli zaman ayrılan Zaman Aralığını geçtiyse, önce Konsensüs Davranışını belirlemek zorunda değilsiniz, sadece “Nothing” döndürün.
3. Geçerli zaman ayrılan Zaman Aralığına ulaşmadıysa, UpdateValue adlı Konsensüs Davranışı'nı döndürün. Aslında Konsensüs Davranışı, konsensüs verilerini güncellemek için kullanılır.
4. Düğüm bu turda zaten bloklar ürettiyse, küçük bloklar üretip üretemeyeceğini değerlendirin (her Zaman Aralığı art arda 8 blok üretebilir):
5. Eğer mümkünse Konsensus Davranışı, TinyBlock'u yürütür;
6. Değilse, geçerli raundu sonlandırmak için geçerli düğüme bir Zaman Aralığı atayın:
7. Geçerli düğüm bu geçerli tur için önceden belirlenmiş Ek Blok Üretim Düğümü olursa, o düğüme rauntta son zaman aralığının arkasında bir zaman aralığı atanır.
8. Geçerli düğüm belirtilen Ekstra Blok Üretim Düğümü değilse, geçerli turun son zaman aralığından sonra ilgili turdaki zaman aralığı geçerli turdaki sırasına göre atanacaktır. Belirtilen ekstra blok üreticisi çatallanma veya bağlantı kesilmesi nedeniyle bloktan zamanında çıkamazsa, mevcut düğüm turu geçerli düğümle bitirme şansına sahiptir.
Zaman aralığını kaçırıp kaçırmadığınızı belirleme yöntemi Turdadır:
Yan zincir için rayı sonlandırmak istiyorsanız, doğrudan NextRound'a geri döndürün:
Bir üretim düğümü için geçiş süresi 7 gün olarak tasarlanmıştır, bu nedenle zamana göre bir sonraki kampanya turuna girilip girilmeyeceğine karar vermek gerekir. Şu anda Konsensus Davranışı, NextTerm'i yürütmektedir:
Bunlar arasında NeedToChangeTerm karar kuralı şudur: Düğümlerin en son blok zaman damgasının üçte ikisinden fazlası son zaman damgasından 7 günden fazla ise, doğru (true) döndürür.
Konsensüs Komutunun BirleştirilmesiKonsensüs Davranışı aldıktan sonra, Konsensüs Komutunu aşağıdakilere dayanarak birleştirebilirsiniz:
Konsensüs Komutunun birleştirmeden önce bir yargıya varmalıyız: son üç turda bloklar üreten sadece bir tane üretim düğümü varsa, bu ağda veya tüm zincirde yanlış bir şey olması gerektiği anlamına gelir. Bloklar derhal askıya alınır ve senkronize ağdaki diğer blokların Konsensüs Hizmetini tekrar tetiklemesi için beklememiz gerekir.
Ardından, gelen Konsensüs Davranışına göre ilgili politikayı seçebilirsiniz:
• FirstRoundCommandStrategy (İlk tur için Özel İşleme Stratejisi)
• NormalBlockCommandStrategy (UpdateValue öğesine karşılık gelir)
• TerminateRoundCommandStrategy (NextRound ve NextTerm'e karşılık gelir)
• TinyBlockCommandStrategy (TinyBlock'a karşılık gelir)
Uygulama mantığını görmek için NormalBlockCommandStrategy (UpdateValue'ya karşılık gelen) stratejisini kullanıyoruz:
Bu strateji, tahmini blok süresini elde ederek bir Konsensüs Komutu örneğini birleştirir ve yürütür. Strateji uygulama mantığının geri kalanı aşağı yukarı aynıdır.
KAYNAK:
https://medium.com/aelfblockchain/aelf-tech-talks-aedpos-contract-implementation-interpretation-pt-1-35f109529db2