Yeniden Oynatılmış Bir İşlemi Durduran Sayaç: Katı Eşitlik ve Hiçbir Şeye Mal Olmayan Bir Başarısızlık
Sayaç ne için
İmzalı bir işlem yeniden kullanılabilir bir nesnedir. Onu gören herkes aynı talimat üzerinde geçerli bir imza tutar ve imzaya dair hiçbir şey onların ikinci kez göndermesini engellemez.
İkinci göndermeyi başarısız kılan şey sayaçtır. Her hesap bir sayaç taşır, her işlem beklediği değeri adlandırır ve zincir ikisini karşılaştırır.
Kural eşitliktir ve bu kulağa geldiğinden güçlüdür
Yürütücü, hesabın sayacını işlemin sayacıyla karşılaştırır ve eşit olmalarını ister.
"Son kullanılandan büyük" değil. Eşit.
Dolayısıyla tek bir hesaptan gelen işlemler katı biçimde sıralıdır. İleri atlayamazsınız. Hesabın mevcut değerinin iki ötesini adlandıran bir işlem gönderin, boşluğun kapanmasını beklemez: anında başarısız olur.
Birden fazla işlem gönderen bir şey inşa ediyorsanız, etrafında tasarım yapılacak özellik budur ve gözden kaçması kolaydır, çünkü "nonce" sözcüğü yalnızca yeni olması gereken bir sayı çağrıştırır.
Ve uyuşmazlık bir ret değil bir başarısızlıktır
Kontrol başarısız bir makbuz üretir. İşlem işlenir, yanlış bulunur ve başarısız olmuş olarak kaydedilir.
Sıra önemlidir ve tek bir fonksiyonda okunabilir: karşılaştırma, ücret düşülmeden önce ve sayaç artırılmadan önce geri döner.
Dolayısıyla yeniden oynatılmış bir işlem, oynatana hiçbir şeye mal olmaz ve hesabın sayacını hiç kıpırdatmaz. Bu, yeniden oynatılan hesap için doğru davranıştır, çünkü bir yabancı, imzaladığınız bir şeyi yeniden yayımlayarak bakiyenizi yakamaz ya da sayacınızı senkronizasyondan çıkaramaz.
Açmadığımız katman
Yanlış sayaçlı bir işlemin bir bloğa hiç ulaşıp ulaşmadığı çözülmedi.
Okuduğumuz şey: gönderme yöntemi işlemi çözüyor ve sayaçları kendisi karşılaştırmadan arka uca veriyor, ve mempool paketinin sayaçlara tek göndermesi test düzeneklerinde; o paketin belgelenmiş derdi ise işlem geçerliliği değil erişilebilirlik.
Okumadığımız şey, arka ucun kendi kabul yoludur, ki gönderme yöntemi onun reddetmesine izin veriyor. Yani "yeniden oynatma göndermesi bedavadır", açtığımız katmanlar hakkında bir iddiadır ve düğümün iç yapısını bilen biri onu dakikalar içinde kapatabilir.
Bunu, destekleyemeyeceğimiz bir istenmeyen yük vektörü iddiasına yuvarlamaktansa görünür bırakmayı tercih ederiz.
Uygulamanın doğru yaptıkları
Hata iki sayıyı da adlandırıyor. Bir uyuşmazlık, beklenen değeri ve alınan değeri bildirir; ki bu, ayıklanabilir bir başarısızlıkla bir muamma arasındaki farktır.
Kontrol, herhangi bir durum değişikliğinden önce çalışır, dolayısıyla reddedilmiş bir işlem hesabı kısmen değişmiş bırakamaz.
Ve sayaç genel değil hesap başınadır, dolayısıyla bir hesabın etkinliği hiçbir zaman bir başkasının bekleyen işini geçersizleştirmez.
Kendiniz neyi kontrol edebilirsiniz
Bir hesabın sayacını, kendi hesabınız olmadan isteyin:
solidus_getNoncebir adresle
Sonra bir blok okuyun ve taşıdığı işlemlere bakın:
solidus_getBlockbir yükseklikle
Kıpırdamış bir sayaç, bir hesabın işlem gönderdiğini söyler. Onların başarılı olduğunu söylemez, çünkü başarısızlık yolu atmak yerine kaydeder, ki bu sayfanın konusu tam olarak o ayrımdır.
Okumaya devam edin
- Solidus'ta Kesinlik Nasıl İşler (HotStuff BFT)
- Doğrulayıcı Komitesi: Şartname Yirmi Bir Diyor, Sicil Beş Diyor ve Dördü Gerçekten Öneriyor
- Ağ İstatistik Panosunu Okumak: Kilometre Taşları Artık Tutuyor, İki Kutucuk ise Var Olmamalı
- Solidus'ta Gaz Ücreti Var mı? Hayır, ve Yalnızca Ücret Çizelgesini Okumak Size Yanlış Cevabı Verir

