
Kalıcı nonce: Solana'da iki cihazla imzalama
SSP, 2/2 bir cüzdandır. Her işlem iki imza gerektirir: biri bilgisayarınızdaki tarayıcı uzantısı olan Wallet'tan, diğeri telefonunuzdaki SSP Key'den. Bu tasarımın tüm amacı budur — bir cihazınızı çalan bir hırsız yine de fonlarınızı taşıyamaz. Ama bu, çok insani bir sorun getirir. Bilgisayar bir işlemi saniyenin küçük bir kısmında oluşturup imzalar. Telefon ise iki üç dakika sonrasına kadar birlikte imzalamayabilir, çünkü bir insanın telefonu eline alması, isteği görmesi ve onayla'ya dokunması gerekir.
Solana'da bu boşluk bir sorundur. Bu makale nedenini ve SSP'nin bunu kırılgan hiçbir şey saklamadan nasıl çözdüğünü anlatır.
Süresi dolan blockhash
Her normal Solana işlemi, yakın zamanlı blockhash adı verilen bir veri taşır. Bu, zincirdeki yakın bir bloğun parmak iziidir ve aynı anda iki iş yapar. İşlemin yakın zamanda oluşturulduğunu kanıtlar ve aynı imzalı işlemin sonsuza dek tekrar oynatılmasını engeller.
İşin püf noktası yakın zamanlı sözcüğündedir. Bir blockhash yalnızca yaklaşık 150 blok boyunca geçerlidir. Solana'da bloklar hızlı gelir, bu yüzden 150 blok yalnızca yaklaşık 60 ila 90 saniyedir. Bu pencere geçtikten sonra ağ işlemi doğrudan reddeder — imzalarda bir sorun olduğu için değil, blockhash bayatladığı için.
Şimdi SSP'nin imzalama akışını bu saate karşı koyun. Wallet işlemi oluşturur, taze bir blockhash sabitler ve imzalar. Ardından kullanıcıya telefonundan bir bildirim gider. 90 saniye içinde yanıt verirse sorun yok. Bir toplantıdaysa, telefon başka bir odadaysa veya işlemi dikkatlice okumak istiyorsa, blockhash sessizce ölür. Wallet'ın imzası kriptografik olarak hâlâ geçerlidir, ama bağlı olduğu işlem artık değersizdir. Her şeyin sıfırdan yeniden oluşturulup yeniden imzalanması gerekir.
İmzalayıp tek nefeste yayınlayan tek imzacılı bir cüzdan için 90 saniyelik pencere cömerttir. İki imzanın arasında bir insanın durduğu 2/2 bir cüzdan için ise bu, kullanıcının sürekli kaybettiği bir yarıştır.
Kalıcı nonce nedir
Solana'nın buna yerleşik bir yanıtı var ve bu, SSP'den önce gelir: kalıcı nonce. Fikir, süresi dolan blockhash'i süresi dolmayan bir değerle değiştirmektir.
Bir kalıcı nonce, zincirde kendi küçük hesabında yaşar — bir nonce hesabı. Bu hesap sisteme aittir, yalnızca 80 bayt veri tutar ve bu verilerden biri nonce değerinin kendisidir: bir blockhash için uzun ömürlü bir vekil. Bir işlem, yakın zamanlı bir blockhash yerine nonce hesabının değerini kullanacak şekilde oluşturulabilir. Bu değer yaşlanmadığı için işlem, gerektiği kadar uzun süre geçerli kalır — dakikalar, saatler, günler.
Yine de hiçbir şey bedava değildir ve bir nonce, tekrara karşı bir korumaya ihtiyaç duyar. Bu koruma bir kuraldır: kalıcı nonce kullanan her işlem, ilk talimatı olarak belirli bir talimatı, nonceAdvance, taşımak zorundadır. İşlem nihayet zincire indiğinde, nonceAdvance mevcut nonce değerini tüketir ve hesabı yeni bir değere döndürür. Nonce tek kullanımlıktır. Pazartesi imzaladığınız işlem çarşambaya kadar bekleyebilir, ama bir kez yürütüldüğünde tam olarak o nonce bir daha asla başka bir işlemi yetkilendiremez. Solana'nın mekanizmaya dair kendi açıklamasını okumak isterseniz, kalıcı işlem nonce'ları belgeleri birincil kaynaktır.
Yani bir kalıcı nonce, tekrar riski satın almadan zaman satın alır. Bu, iki cihazlı bir cüzdanın ihtiyaç duyduğu özelliğin ta kendisidir.
SSP'nin farkı: asla saklamak zorunda olmadığınız bir nonce hesabı
Bir kalıcı nonce hesabı yine de bir hesaptır ve Solana'da her hesabın bir adresi vardır. Saf yaklaşım, rastgele bir adreste bir nonce hesabı oluşturmak, ardından o adresi sonsuza dek özenle hatırlamaktır — onu cüzdanın yerel deposuna yazmak, yedeklemek, bir cihaz sıfırlamasından sağ çıkmasını ummak. Bu, kaybedilecek kırılgan bir şey daha demektir.
SSP onu saklamayı reddeder. Bunun yerine, SSP'nin Solana multisig programı provision_nonce adlı bir talimat içerir ve nonce hesabını türetilmiş bir adreste oluşturur. Adres deterministik bir tariften gelir: multisig hesabının kendisinden, sabit metin etiketi "nonce"'dan ve Solana'nın Sistem Programı'ndan hesaplanır. Aynı multisig girer, aynı nonce adresi çıkar — her seferinde.
Bu, serinin geri kalanının zaten ortaya koyduğu şey nedeniyle önemlidir. SSP'nin Solana multisig'i, multisig adresini üye kümesinden türetir ve kasa adresini multisig'ten türetir. (Bu türetmeler size yeniyse, kendi kendini başlatan Solana multisig makalesi her birinin üzerinden geçer.) Nonce hesabı artık aynı aileye katılır: o da saf bir türetmedir. Herhangi bir SSP cihazı — bilgisayarınız, telefonunuz, yeni yeniden kurulmuş bir cüzdan — nonce hesabının adresini sıfırdan yeniden hesaplayabilir. Kaybedilecek gizli bir adres yoktur, çünkü hiç saklanmış bir adres yoktur.
Tasarımdan birkaç pratik not çıkar. provision_nonce izinsizdir (permissionless): herkes nonce hesabını var etmek için küçük kirayı (yaklaşık 0,00144 SOL) ödeyebilir ve ödeyen kişi onun ilk yetkilisi olur — pratikte SSP relay'inin paymaster'ı. Bu yetki daha sonra, hesabın adresi asla değişmeden yeniden atanabilir, dolayısıyla bugün türettiğiniz adres, arkasındaki operasyonel anahtar değişse bile doğru kalır. Nonce hesabının konumu, onu finanse eden kim olursa olsun ona değil, multisig'inize sabitlenmiştir.
Sakin imzalama akışı
Parçaları bir araya getirin, yarış ortadan kalkar. Wallet, yakın zamanlı bir blockhash yerine türetilmiş nonce hesabını kullanan bir işlem oluşturur, nonceAdvance'i ilk talimat olarak yerleştirir ve imzalar. Telefona bir push bildirimi gider. Kullanıcı hazır olduğunda onaylar — ona karşı ilerleyen bir saat yoktur. SSP Key ikinci imzayı ekler ve tamamen imzalanmış işlem yayınlanır. Kalıcı bir nonce üzerine inşa edildiği için hâlâ geçerlidir ve nonceAdvance nonce'u döndürerek işlemin tekrar oynatılamamasını sağlar.
Adı anılmaya değer bir kısıt daha var. Solana, tek bir işlemi 1232 bayt ile sınırlar. Bir multisig işlemi, üye listesini ve harcama talimatlarını bu sınırın içine sığdırmak zorundadır; SSP'nin Solana'nın kompakt sürümlenmiş işlem biçimini kullanmasının ve verileri olabildiğince sıkı geçirmesinin nedeni budur. Kalıcı nonce boyut bütçesini değiştirmez; yalnızca zaman bütçesini değiştirir.
Her şeyi türet, hiçbir şeyi saklama
Bu, Solana Multisig, SSP Tarzıyla serisinin tamamından geçen ipliktir. Multisig adresi, fonlarınızı tutan kasa ve şimdi iki cihaza anlaşmaları için zaman tanıyan nonce hesabı — hiçbiri SSP'nin kaydedip koruması gereken bir değer değildir. Her biri, cüzdanın zaten bildiği girdilerden talep üzerine yeniden hesaplanır. Yedeklenecek daha az şey, sızabilecek daha az şey ve bir cihaz sıfırlamasında ters gidebilecek daha az şey vardır. Bu fikre dayanan multisig tasarımları, SSP'nin tek imzacılı multisig yaklaşımı gibi, genellikle bozulacak en az hareketli parçaya sahip olanlardır.
Serinin geri kalanıyla aynı dürüstlük ruhuyla bir kapanış notu: SSP'nin Solana multisig programı şu anda yalnızca devnet'te dağıtılmıştır ve herhangi bir mainnet sürümünden önce harici bir güvenlik denetimi beklemektedir. Burada anlatılan tasarım — provision_nonce ve onun türetilmiş nonce hesabı dahil — gerçektir ve açık kaynaklı programda okunabilir, ama henüz üretim altyapısı değildir. SSP'nin iki cihazlı modelinin kendisi size yeniyse, 2/2 multisig nedir giriş makalesi başlamak için doğru yerdir.
Kalıcı nonce, Solana'nın küçük ve eski bir tesisat parçasıdır. SSP'nin katkısı, onun adresini hiç hatırlamak zorunda olmadığınız bir şey daha hâline getirmektir.


