Saya meluangkan waktu untuk membaca panduan upgrade Newton Protocol dan saya terus kembali ke satu detail implementasi. Variabel penyimpanan baru selalu ditambahkan ke tata letak penyimpanan yang sudah ada, bukan disisipkan ke dalamnya.

Itu terdengar hampir sepele.

Saya rasa itu bukan begitu.

Saya pernah melihat kontrak yang bisa diupgrade rusak karena seseorang meremehkan tata letak penyimpanan. Upgrade proxy berhasil, pengujian terlihat baik, lalu berminggu-minggu kemudian seseorang menemukan bahwa sebuah variabel telah ditimpa karena urutan penyimpanan berubah. Ini berantakan. Kontraknya tidak selalu langsung gagal. Kadang-kadang kontrak hanya mulai berperilaku berbeda, yang jauh lebih sulit didiagnosis.

Protokol Newton menghindari jebakan itu dengan memperlakukan tata letak storage sebagai sesuatu yang harus dipertahankan, bukan diatur ulang. Saya suka pendekatan itu karena menghormati betapa rapuhnya proxy yang dapat diupgrade

Detail lain yang menonjol adalah bendera newtonPolicyClientInitialized. Tujuannya sederhana: inisialisasi pasca-upgrade hanya bisa terjadi sekali. Protokol Newton juga merekomendasikan untuk menguji upgrade pada sebuah fork dan menggunakan timelock atau multisig saat mengeksekusi transaksi inisialisasi. Itu tidak terasa seperti saran basa-basi bagi saya. Itu terasa seperti pengakuan bahwa upgrade belum selesai ketika implementasi baru dideploy

Inisialisasi adalah bagian dari upgrade

Sampai langkah itu selesai, logika otorisasi mungkin sudah ada di dalam kontrak, tetapi klien policy masih belum terhubung ke TaskManager yang benar atau ditetapkan ke pemilik klien-policy yang dimaksud. Jika salah satu nilainya keliru, lapisan otorisasi bisa gagal meskipun deployment itu sendiri tampak berhasil

Itulah sebabnya saya pikir bendera inisialisasi satu kali itu penting

Ini mencegah seseorang menjalankan inisialisasi lagi, tetapi tidak melindungi dari kesalahan pada eksekusi pertama. Jika konfigurasi awal mengandung kekeliruan, mengunci semuanya di balik bendera satu kali tidak serta-merta memperbaikinya. Itu hanya membuat eksekusi pertama menjadi salah satu momen paling sensitif dalam seluruh deployment

Saya juga memperhatikan bahwa Protokol Newton tidak membekukan setiap konfigurasi secara permanen setelah inisialisasi. Pemilik klien policy masih bisa memperbarui pengaturan kebijakan, mengubah alamat kontrak policy, dan mentransfer kepemilikan nanti. Saya sebenarnya lebih menyukainya dibanding berpura-pura sistem tidak pernah perlu berevolusi. Perubahan infrastruktur. Perubahan tata kelola. Perubahan kebutuhan. Tantangannya adalah memastikan izin tersebut tetap terkontrol dengan baik dari waktu ke waktu. Kompatibilitas storage menciptakan kategori risiko yang berbeda sama sekali

Satu hal yang saya hargai tentang Protokol Newton adalah ia memungkinkan tim untuk memperkenalkan penegakan policy tanpa membangun ulang aplikasi mereka dari nol. Itu pilihan desain yang praktis. Namun upgrade proxy tetap harus mempertahankan kompatibilitas storage secara sempurna. Masukkan satu variabel di posisi yang salah dan lapisan otorisasi mungkin terlihat benar-benar sehat, sementara status aplikasi yang tidak terkait diam-diam menjadi rusak di bawahnya

Saya sudah melihat cukup banyak sistem yang bisa diupgrade untuk tahu bahwa itu bukan kekhawatiran hipotetis

Detail lain yang menurut saya tidak boleh diabaikan adalah alur eksekusi. Menambahkan fungsi protected baru di Newton tidak otomatis mengamankan fungsi lama yang melakukan tindakan yang sama. Setiap jalur yang seharusnya menerapkan otorisasi tetap harus memanggil validateAttestation atau validateAttestationDirect sebelum logika bisnis protected dijalankan. Jika Anda melewatkan satu jalur eksekusi, Anda akan menciptakan jaminan keamanan yang tidak konsisten tanpa disadari.

Itu mungkin yang paling menarik yang saya temukan tentang Protokol Newton

Arsitekturnya memisahkan NewtonPolicyClient

dari logika bisnis aplikasi, bukan memaksa developer untuk mendesain ulang semuanya di sekitar framework baru. Saya umumnya lebih menyukai pendekatan modular seperti itu karena sistem besar jarang ditulis ulang dari nol. Sistem itu berevolusi satu upgrade pada satu waktu

Namun pada saat yang sama, saya terus bertanya-tanya apakah risikonya benar-benar hilang

Atau apakah itu sekadar memindahkan

Protokol Newton membuat otorisasi lebih mudah diintegrasikan ke dalam kontrak yang dapat diupgrade yang sudah ada. Saya pikir itu berharga. Namun ini juga berarti bahwa upgrade proxy, migrasi storage, dan pemanggilan inisialisasi pertama benar-benar menjadi titik di mana hampir seluruh risiko operasional terkonsentrasi

Saya tidak melihat itu sebagai kelemahan dari desainnya

Saya melihatnya sebagai pengingat bahwa arsitektur yang baik tidak menghilangkan keputusan-keputusan sulit. Biasanya arsitektur itu membuat keputusan tersebut lebih mudah untuk dikenali

Setiap upgrade mengubah kode, tetapi tidak setiap upgrade memperkuat keamanan. Bagi saya, Protokol Newton menunjukkan bahwa detail implementasi yang paling kecil sering kali berdampak paling besar dalam membangun smart contract yang tahan banting

@NewtonProtocol $NEWT

#Newt