Analisis statis untuk verifikasi kontrak pintar soliditas, berdasarkan https://github.com/shaunzzopardi/solidity-cfg-builder dan https://github.com/gordonpace/contractractlarva.
Alat ini mencoba untuk membuktikan sifat -sifat kontrak pintar soliditas sepenuhnya, dan pada keberhasilan sebagian mengembalikan properti residu yang masih harus dibuktikan dari kontrak pintar soliditas.
Kami menggunakan representasi grafik kontrol dari kontrak pintar soliditas dalam upaya untuk membuktikan sifat-sifat kontrak pintar secara statis dengan mengaplikasikan berlebihan aliran kontrol dari kontrak pintar soliditas (berdasarkan soliditas-CFG-builder, dan status variabelnya.
Ini sebagian didasarkan pada pekerjaan yang disajikan dalam Prosiding Prepost 2017, dalam seri EPCTS, dan tersedia di ARXIV.
Setiap fungsi kontrak pintar direpresentasikan sebagai control-flow Automaton (CFA) dengan transisi yang ditandai dengan triple yang berisi: (i) suatu kondisi pada status variabel program; (ii) pernyataan yang mengubah status variabel program; dan (iii) acara properti diaktifkan setelah eksekusi pernyataan.
Setiap otomat tersebut ditambah dengan transisi abstrak (hanya ditandai oleh peristiwa properti) yang memungkinkan acara apa pun terjadi saat pada keadaan awal, panggilan, atau akhir dari program. Ini digunakan sebagai dasar analisis intraprocedural. Setiap otomat yang berlebihan-over-mengamati semua eksekusi kontrak pintar yang memanggil fungsi yang sesuai. Otomat ini disebut Automaton Automaton Astak Kontrol Abstrak (ACFA).
Algoritma propagasi pernyataan sederhana merambat pernyataan tentang keadaan variabel program (tersirat oleh kondisi dan pernyataan) melalui keadaan eksplisit CFA sampai pernyataan yang dapat mempengaruhi pernyataan yang ditemui. Ini suara.
Properti direpresentasikan sebagai Automaton Acara Dinamis (DEA) yang menggunakan transisi yang ditandai dengan tiga: (i) sebuah acara; (ii) penjaga pada status variabel properti; dan (iii) tindakan pada status variabel properti.
ACFA dengan abstraksi variabel disusun dengan DEA, menghasilkan sistem abstrak yang dipantau (AMS) dengan transisi yang ditandai dengan pasangan transisi CFA dan DEA, atau dengan salah satu posisi yang berisi simbol #. Ketika # digunakan sebagai ganti transisi CFA itu menandakan kecocokan transisi abstrak, sedangkan ketika bukan transisi DEA itu menandakan tidak ada kecocokan transisi DEA.
Kemudian, AMS dibuat untuk setiap fungsi program terhadap DEA yang diberikan.
Pemecah SMT, Z3, dipanggil secara langsung selama pembangunan AMS untuk menentukan apakah mungkin untuk transisi yang diberikan untuk mengaktifkan pada saat itu dalam menjalankan nyata. Dengan pasangan transisi CFA-DEA, kami memeriksa bahwa penjaga DEA dapat berlaku untuk abstraksi variabel dari keadaan sumber yang diperbarui dengan kondisi dan pernyataan transisi CFA. Sementara diberi pasangan CFA-# kami memeriksa bahwa abstraksi variabel dari keadaan sumber yang diperbarui dengan kondisi dan pernyataan transisi CFA tidak konsisten dengan negasi dari disjungsi transisi DEA yang mungkin diaktifkan pada titik ini (perhatikan transisi DEA yang keluar dari negara DEA yang sama dijamin memiliki mutual secara mutual.
Setiap AMS dianalisis untuk mengidentifikasi pasangan transisi CFA-DEA, mengekstraksi transisi DEA yang digunakan dengan cara ini, mengabaikan kecocokan transisi DEA dengan # placeholder. Persatuan transisi DEA ini menghasilkan sisa DEA asli. Ini kadang -kadang dapat dikurangi lebih lanjut melalui analisis sintatik DEA residual.
Selain itu, dari AMSS kami dapat mengidentifikasi ketika penjaga transisi DEA dapat dihapus (yaitu diubah menjadi benar ), yaitu kapan pun dapat digunakan dalam AMS selalu digunakan.
Jika residual yang diproduksi tidak memiliki transisi maka properti telah terbukti.
Persyaratan: Cabal V2.4.* (Misalnya Instal Platform Haskell Lengkap)
Kompilasi: Ikuti instruksi di sini
Untuk hasil yang benar selalu pastikan bahwa kode soliditas dikompilasi dengan kompiler soliditas.
Untuk menggunakan alat lulus lokasi file soliditas kontrak pintar, file properti DEA, dan lokasi yang disukai dari output ke yang dapat dieksekusi, misalnya menjalankan:
./Main "./examples/courierservice.sol" "./examples/courierservicespec.dea" "cfa.txt" "acfa.txt" "ams.txt" "residual.dea"
Proyek ini dilisensikan berdasarkan ketentuan lisensi Apache 2.0.