$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Çalışma girdileri
Bu çalışmada, doğrulama girdisi olarak iki Solidity akıllı sözleşmesi kullanıldı. İlki, yeniden giriş vaka çalışması olarak kullanılan Simple DAO tarzı bir sözleşmeydi. İkincisi, çift harcamaya karşı sözleşme düzeyindeki kısıtlamaları test etmek için inceltilmiş bir defter/devlet geçiş sözleşmesiydi. Orijinal Solidity kaynak kodu, bu protokolte tanımlanan soyutlama ve doğrulama süreçlerine giriş olarak hizmet etti. Bu tür sözleşmeler için kullanılan genel dönüşüm süreci, doğrulama sırasında Solidity kaynak kodunun FSM, Event-B ve SMV modellerine kademeli dönüşümünü gösteren Şekil 1'de gösterilmiştir.
Sınır modelleme
Biçimsel modelleme, fonksiyon giriş ve çıkış davranışı, iç uygulama ve sözleşme düzeyindeki durum geçişleri dahil olmak üzere akıllı sözleşmelerin kontrol akışı mantığına odaklanır. Fonksiyon görünürlüğü (kamu, dış, iç ve özel) yeniden girişim analiziyle ilgili çağrı-yığını davranışıyla birlikte temsil edildi. Soyut geçiş türleri (çağrı, gönderme, aktarma) eterleri aktarma işlemleri olarak kabul edildi.
Sözleşme düzeyindeki değişmezlikler, işlem benzersizliğini sağlamak ve soyutlama sınırı içinde çift harcamayı önlemek için tanımlanmıştır. Doğrulama seçimi ve blok bütünlüğü gereksinimlerini temsil etmek için, protokol-mantık soyutlama katmanı, hem Proof of Work hem de Proof of Stake'in protokol düzeyindeki durum geçişleri açısından tanımlanmıştır.
Soyutlama sınırı, teslim edilecek mesajların zamanlanması ve birçok zıplamanın neden olduğu gecikmeler, çatal çözümlemesi, ağ düşmanlarının Bizans stratejileri kullanması, Ethereum Sanal Makinesi semantiği ve ağ düğümleri tarafından kontrol edilen gaz anlamanlamı, istisnaların yayılması, asenkron yürütmeler, karmaşık geri dönüş davranışları ve ağ düzeyinde kesinlik gibi ağ katmanı unsurlarını içermiyordu. Dolayısıyla, çift harcama belirleme sonuçları yalnızca sözleşme düzeyindeki değişmezliklere uygulanır ve kesinlik konusunda ağ düzeyinde bir anlaşma oluşturmaz.
Araçlar ve yapılandırma
Rodin platformu, PP, ML, SMT ve Atelier-B ispatlarını otomatik ve etkileşimli olarak boşaltmalarını sağlayan Event-B (sürüm 3.7.0) modelini modelleme, iyileştirme, ispat yükümlülükleri oluşturmak ve boşaltmak için kullanıldı. nuXmv sürüm 2.0.0, oluşturulan SMV modellerinde tam CTL keşif modunda CTL model kontrolü yapmak için çalıştırıldı.
Tüm doğrulama yürütmeleri, Ubuntu 22.04 LTS, OpenJDK 11 ve Python 3.10.12 kullanılarak kontrollü bir hesaplama ortamında gerçekleştirildi. Web3 (7.6.0), NetworkX (3.4.2), Matplotlib (3.8.0), Graphviz (0.20.3), NumPy (1.26.4) ve Pandas (2.2.2) simülasyon ve görselleştirme öğelerini uygulamak için kullanıldı. Bu tasarım, aynı uygulama koşulları altında yürütüldüğünde resmi doğrulama ve simülasyon sonuçlarının yeniden üretilebileceğini garanti altına aldı.
Dönüşüm iş akışı
Bu doğrulama süreci dört aşamadan oluşuyordu. Katlık sözleşmeleri ilk olarak Sonlu Durum Makinesi (FSM-SC) temsiline çevrilmiştir. FSM-SC modeli daha sonra Olay-B'de kodlandı, açıkça belirtilmiş invariantlar ve iyileştirme dereceleriyle kullanıldı. FSM-SC soyutlaması, nuXmv dilinde bir SMV modeline çevrildi. Doğrulama sonuçları, ispat yükümlülüğünün ifşa edilmesi ve CTL model kontrolü istatistikleri olarak raporlandı ve karşı örnekler vaka olarak sunuldu.
FSM yapısı
Her sözleşme, Sonlu Durum Makinesi olarak soyutlanmıştır ve şu şekilde tanımlanmıştır:

Burada:
S = durumlar kümesi
S₀ = başlangıç durumu
T = geçiş ilişkisi
V = görünürlük eşlemesi
G = koruma yüklemleri
A = eylemler/durum güncellemeleri.
Algoritma 1: Katığından FSM inşası
Giriş: Katlık kaynak kodu
Çıkış: FSM-SC
1) Solidity sözleşmesi özet sözdizimi ağacını ayrıştırın.
2) Yapıcı tanımından başlangıç durumu S₀ oluşturun.
3) Her Solidity fonksiyonu f için, ayrı bir kontrol durumu oluşturun S_f ve V(f) görünürlüğünü {public, external, internal, private} ∈ kaydeder.
4) F fonksiyonundaki her ifade için, durum-değişken güncellemelerinden koruma predikatları ve durum-değişken güncellemelerinden eylemler çıkararak bir geçiş t türetin.
5) T'ye geçiş t'yi ekleyin.
6) Ether transfer işlemleri (call, send, transfer), iç ve dış çağrılar, delegatecall, selfdestruct, tx.origin kullanımı, koşullu dallar ve loop yapıları için açık geçiş tipleri oluşturun.
7) Döndürme FSM-SC = (S, S₀, T, V, G, A).
Ve her Solidity fonksiyonu farklı bir FSM kontrol durumu ile ilişkilendirilir. Güvenlik açığı anlaması için, örneğin dış çağrıların ardından denge güncellemeleriyle yapılan bu tür akışlar, açıklığa ilişkin yürütme akışları, açıkça sıralı geçişlere soyutlanmıştır. Şekil 2, SimpleDAO tarzı sözleşme için örnek bir FSM-SC diyagramını tanımlar; bu giriş durumlarının, dış çağrı geçişlerinin ve durum güncelleme dizilerinin bu yapı aşamasında nasıl soyutlandığını gösterir.
FSM'nin Olay-B'ye kodlanması
FSM geçişi, Olay-B yapıları olarak temsil edildi. Tüm geçişler, belirli korumalar ve eylemler dahil olmak üzere Olay-B olaylarına karşılık gelir.
Algoritma 2: FSM'den Olay-B'ye kodlama
Giriş: FSM-SC
Çıktı: Event-B makinesi ve bağlam
1) Sözleşme bağlamında STATE_SET ve FONKSIYONU tanımlayın.
2) FSM kontrol durumu ve sözleşme düzeyindeki durumu temsil eden değişkenleri belirtmek.
3) Her FSM kontrol durumu s ∈ S'yi current_state ∈ STATE_SET kullanarak temsil edin.
4) Her geçiş için (s → s′, g, a) bir Olay-B olayı oluşturun E_t:
5) BURADA current_state = s ∧ g
6) O ZAMAN current_state := s′ ∥ uygulanır(a)
7) V(f)'den türetilmiş korumalar kullanarak görünürlük kısıtlamalarını kodlayın.
8) Güvenlik ve tutarlılık özelliklerini yakalamak için inv1–inv9 invariantları tanımlayın.
9) S₀ ve varsayılan değerleri atayarak INITIALIZATION tanımlayın.
Durumlar kümesi, mevcut durum, fonksiyon görünürlüğü, çağrı yığını, işlem zaman damgası, Ether transfer durumu, devre çağrı bayrağı, kendini imha bayrağı ve doğrulama koşu, Event-B modelinde yakalanan bazı değişkenlerdir. İnvariantlar (inv1-inv9) ve başlatma eylemleri (act1-act6) biçimsel spesifikasyonun eylemleriyle eşleşir. Şekil 3 ayrıca, özellikle yeniden entransiyle ilgili geçişler olmak üzere güvenlik açılarıyla ilgili anahtar olayların Olay-B kodlamasında nasıl korunduğuna dair grafiksel bir gösterim sunar. Bu şekil, Şekil 2'de gösterilen FSM-SC modelinin yapısal desenlerinin doğrulanabilir Olay-B olaylarına nasıl eşlendiğini açıklar.
Geliştirme stratejisi
İki seviyede iyileştirme uygulandı. Yüksek seviyeli sözleşme kontrol akışı ve çekirdek invariantlar soyut düzeyde temsil edildi. Geliştirilmiş seviye, çağrı yığını kısıtlamaları, görünürlük kısıtlamaları ve yeniden girişi önleme koşulları gibi sözleşmeye özgü kısıtlamalar ekledi.
Algoritma 3: Geliştirme ve ispat-yükümlülüğü boşaltma
Giriş: Soyut makine ve rafine makine
Çıktı: Ispat yükümlülükleri ve istatistikleri
1) Rodin'deki soyut makine için ispat yükümlülükleri oluşturmak.
2) Etkinleştirilmiş otomatik prover'ları çalıştırın ve boşaltma sonuçlarını kaydedin.
3) Rafiner makine için iyileştirme kanıtı borçları oluşturun.
4) Otomatik kanıtlayıcıları iyileştirme yükümlülüklerine uygulayın.
5) Kalan yükümlülükleri gerektiğinde etkileşimli olarak yerine getirmek.
6) İhracat kanıtı istatistikleri ve durum raporları.
Kanıt raporlama, değişmez sayısını, iyileştirme seviyelerini, oluşturulan ispat yükümlülüklerini, otomatik boşaltma oranını, etkileşimli boşaltma oranını ve nihai boşaltma oranını içeriyordu.
CTL özellik spesifikasyonu ve model kontrolü
FSM-SC soyutlaması, nuXmv'de dallanma zamanı zamansal doğrulama için SMV modeline çevrilmiştir.
Algoritma 4: FSM'den SMV'ye ve CTL Kontrolü
Çıktı: PASS/FAIL doğrulama sonucu ve karşı örnek izleri (varsa)
1. FSM kontrol durumlarını sayılmış bir SMV değişken durumu olarak kaydedin.
2. FSM geçişlerini korumalı next(state) atamalarına dönüştürün.
3. Dış çağrılar ve denge güncellemeleri gibi zafiyetle ilgili durumlar için bayraklar tutun.
4. CTL özelliklerini nuXmv'de kodlayın ve model kontrolü yapın.
5. Bir özellik başarısız olursa, FSM geçiş dizilerini temsil eden karşı örnek izleri oluşturulur.
CTL kontrolü, yeniden giriş emri gerekliliklerini, transfer operasyonlarından sonra eyalet güncellemelerinin tamamlanmasını, kritik bölümlere kısıtlamadan tekrar girişin sınırlandırılmasını ve çıkmazdan kaçınmayı içeriyordu.
Güvenlik özellikleri doğrulandı
Yeniden girişi engelleyen Simple DAO tarzı sözleşme, harici çağrılar ile durum güncellemeleri arasında invariantlar ve CTL kısıtlamaları aracılığıyla güvenli sipariş sağlanarak doğrulandı. İzin verildiğinde, bu korumalar erişim kontrol kısıtlamalarını kontrol ederek yetkisiz geçişlerin invariantlarla sınırlandırıldığından emin oldular. Azaltılmış defter modeli, işlem benzersizliği ve defter tutarlılığının sözleşme içindeki önleme düzeyinde invariantlarını doğruladı.
Raporlanan çıktılar
Sonuçlar bölümü, FSM yapısal metrikleri, Olay-B model metrikleri ve yükümlülük kanıtı ile CTL doğrulaması için istatistikler hakkında raporlar sunar. Resmi ispat sonuçları ile CTL model kontrolü sonuçları, invariantlar tarafından doğruluk garantisi kanıtı ile zamansal doğrulama ile zaman doğrulamasının kanıtını ayırt etmek için ayrı verilir.