Consensys tarafından geliştirilen, öncü kendi saklama yetkili kripto cüzdanı ve kriptoya açılan kapı.
Tüm makaleleri okuBir ETHLisbon Hackathon kazananı

MetaMask Snaps, MetaMask'ı dünyanın en genişletilebilir cüzdanı haline getirme yol haritasıdır. Geliştirici olarak, özelliklerinizi ve API'lerinizi MetaMask'a tamamen yeni yollarla sunabilirsiniz. Web3 geliştiricileri bu büyümenin özünü oluşturmaktadır ve bu seri, bugün inşa edilen yenilikçi MetaMask Snaps'leri tanıtmayı amaçlamaktadır.
Neden geliştirdiniz?
Harici sahipli hesaplar, Ethereum ekosistemindeki neredeyse her dapp veya hizmetin temelini oluşturmaktadır. Ancak hem güvenli hem de kullanımı kolay bir cüzdan uygulaması tasarlamak ve hayata geçirmek hiç de kolay değildir. Genellikle kullanıcıya tam kontrol ve yüksek güvenlik seviyeleri sağlamak için karmaşık ve pratik olmayan mekanizmalara başvurmak zorunda kalırız. Öte yandan, sade ve keyifli bir kullanıcı deneyimi ancak kullanıcılardan anahtarları üzerindeki kontrolü bırakmalarını isteyerek elde edilebilmektedir.
InvisibleKeys ile MetaMask'ın köklü kullanıcı deneyimini temel alarak, MetaMask'ın yenilikçi bir harici çok bulutlu cüzdana bağlanmasını sağlayan, kullanıcı deneyimi ile güvenlik arasında yeni bir denge önerisi geliştirdik.
Nasıl çalışır? InvisibleKeys'in çok bulutlu cüzdanı, kullanıcının özel anahtarlarını iki veya daha fazla bulut depolama hizmetinde (ör. Google Drive, Dropbox vb.) öyle bir şekilde saklar ki bu hizmetlerden biri ele geçirilse bile anahtarlar asla tehlikeye girmez. Bu çok bulutlu yaklaşım, patentli bir iş akışını (patent US20190095628) takip ederek çok yüksek güvenlik seviyeleri sağlarken çok cihazlı senkronizasyona da olanak tanır.
Buluttan bir hesap içe aktarmak için MetaMask, Google Drive'ınızdaki (veya başka bir depolama hizmetindeki) bir JSON dosyasını okur; bu dosyada genel anahtarlarınızın bir dizisi bulunur. Ardından bir işlemi imzalamak için özel anahtarınız (PK), MetaMask'ın imza taleplerini alan, işlemi imzalayan ve imzalanmış işlemi MetaMask'a geri döndüren harici bir web uygulamasında geçici olarak ve yerel düzeyde yeniden oluşturulur. Anahtarlar hiçbir zaman kalıcı olarak saklanmaz; yalnızca geçici olarak bellekte var olur. Bunun yanı sıra, tam kullanıcı kontrolünü korumak amacıyla PK'ya MetaMask eklentisi tarafından hiçbir zaman erişilmez. Cüzdan kilidi açılmış veya ele geçirilmiş olsa bile PK çalınamaz.
InvisibleKeys, her şey bulutta depolandığından kullanıcıların cüzdanlarına dünyanın her yerinden erişmesine olanak tanır; geleneksel MetaMask yaklaşımını tamamlarken MetaMask'ın kullanılabilirlik ve arayüz standartlarını da korur.
InvisibleKeys iki ana bileşenle çalışır: MetaMask cüzdanı ve harici web uygulaması.
İşlemi cüzdanın dışında imzalamayı hedeflediğimizden, kodun donanım cüzdanı bağlantısı/imzalama bölümünden yararlandık. İşlemi belirli bir donanıma göndermek yerine, imzalamanın gerçekleştirileceği web uygulamamızla bir açılır pencere açılır.
Web uygulamasında kullanıcı, bulut kimlik bilgileriyle kimlik doğrulaması yapar; özel anahtar alınır, işlem imzalanır ve anahtar bellekten silinir. Son olarak açılır pencere kapanır ve kullanıcı, imzalanmış bir işlem bekleme durumunda olan MetaMask cüzdanına geri döner.
İki bileşen, tarayıcının window web API'si aracılığıyla iletişim kurar. İkisi arasında hiçbir zaman özel bilgi paylaşılmadığından bu bağlamda yeterlidir.
Öncelikle InvisibleKeys bağlantı stratejimizi eklemek için MetaMask'ta bazı arayüz değişiklikleri yapmamız gerekti. Bu strateji, uygulamaya yeni desteklenen bir donanım cüzdanı eklendiği gibi eklendi.
Kodda yapılan değişikliklerin bir kısmı aşağıda yer almaktadır. Yeni bir cihaz ve tür ile arayüz için yeni buton eklendi.
app/scripts/metamask-controller.js
ui/pages/create-account/connect-hardware/select-hardware.js
Farklı donanım cüzdanlarını bağlamak için Keyring sınıfı, cüzdan ile cihaz arasında iletişim kuran bir arayüz işlevi görür. Hesapları içe aktarmak ve işlemleri imzalamak için gereken temel yöntemler şunlardır: adres dizisi döndüren addAccounts() ve imzalanmış işlem döndüren signTransaction().
Bu yöntemleri InvisibleKeyring üzerinde uyguladık. İlki açılır pencereyi açar ve bir adres dizisi içeren mesaj bekler. İkincisi ise açılır pencereyi, bir mesajda kodlanmış imzasız işlemle birlikte açar. Ardından kodlanmış imzalanmış bir işlem bekler; bu işlem döndürülür ve ana denetleyici tarafından gönderilir. Açılır pencerenin kapanması beklenirken MetaMask yükleme durumundadır.
Bu yöntemler, web uygulaması bağlantısı ve iletişiminden sorumlu olan farklı bir InvisibleConnect sınıfına çağrı yapar.
./InvisibleConnect.js
Uygulamanın iki sayfası vardır: biri hesapların içe aktarıldığı, diğeri ise işlemin imzalandığı sayfa.
İlk sayfada kullanıcı, metamask/public.json konumunda genel anahtarlarını içeren bir dosyanın depolandığı Google Drive'da kimlik doğrulaması yapar. Ardından içe aktar düğmesine tıklandığında dosya getirilir, anahtarlar okunur ve window web API'si aracılığıyla MetaMask cüzdanına gönderilir.
İkinci sayfada kullanıcının, bu örnek için kullandığımız hizmetler olan hem Google Drive hem de Dropbox'ta kimlik doğrulaması yapması gerekir. Bu yaklaşım, herhangi bir depolama hizmetiyle uyumludur; tek gereklilik, hizmetlerin birbirinden bağımsız ve aralarında gizli anlaşma olmayan yapılar olmasıdır. Kimlik doğrulamasının ardından farklı bilgi parçaları bu hizmetlerden alınır ve özel anahtar, söz konusu patentte açıklanan mekanizmaya göre uygulanan decrypt() yöntemi kullanılarak yeniden oluşturulur; ardından işlem imzalanır. Hemen akabinde özel anahtar bellekten silinir. Son olarak imzalanmış işlem MetaMask cüzdanına geri gönderilir.
Kodun adım adım açıklaması aşağıda yer almaktadır. Yalnızca ilgili kod bölümleri gösterilmektedir. Arayüz durumu veya API iletişimiyle ilgili her şey çıkarılmıştır.
Kendiniz ve ekibiniz hakkında biraz bilgi verir misiniz?
Portekiz'in Braga şehrinde yerleşik, dağıtık sistemler konusunda güçlü bir geçmişe sahip hevesli bir yazılım mühendisleri ekibiyiz. Blockchain ve web3 alanındaki zorlu sorunları çözmeye odaklanan bir girişim olan Invisible Lab'ı kurduk.
MetaMask Snaps ile ilk ne zaman tanıştınız ve deneyiminiz nasıldı?
MetaMask Snaps ile ilk kez SDK'nın lansmanında tanıştık. O günden bu yana teknoloji önemli ölçüde gelişti ve gelişmeye devam ediyor.
MetaMask Snaps'i diğer cüzdanlardan farklı kılan nedir?
MetaMask Snaps cüzdanı, milyonlarca kullanıcının her gün etkileşime girdiği tasarımı korurken üzerine özellikler inşa etme imkânı sunmaktadır.
MetaMask ile Snaps geliştirmek sizin ve ekibiniz için nasıl bir deneyim?
MetaMask Snaps'in ön sürümünü kullandık; bu sürüm, proje için ihtiyaç duyduğumuz her özelliği desteklemiyordu. Ancak geliştirdiğimiz her şeyin yakın gelecekte Snaps ile çok daha basit ve sorunsuz bir şekilde hayata geçirilebileceğine inanıyoruz.
MetaMask Snaps sizin için ne ifade ediyor?
Özelleştirme, yükseltilebilirlik ve MetaMask Cüzdanı üzerine inovasyon inşa etmek için sonsuz olasılıklar anlamına geliyor.
MetaMask Snaps'in Web3 alanı için sunduğu fırsatlar ve açtığı kapılar hakkında ne düşünüyorsunuz?
Gördüğümüz ve ilgi çekici bulduğumuz harika bir fırsat, ek güvenlik stratejileri geliştirmektir. Her kullanıcının deneyimine ve maruz kalmak istediği risk düzeyine göre farklı güvenlik seviyeleri oluşturmak mümkün. Bu, kullanıcıların güvenlik sorunlarına ve ne yazık ki bu alanda sık yaşanan teknoloji saldırılarına maruziyetini azaltmada önemli bir etki yaratabilir. Bu sorunların azaltılması, web3'ün kitlesel benimsenmesi için kritik öneme sahiptir.
MetaMask Snaps'i denemek isteyen geliştiricilere tavsiyeleriniz nelerdir?
Dalmaktan çekinmeyin! MetaMask Snaps ile neler başarabileceğinize şaşıracaksınız. Yeni blockchainler, özellikler veya güvenlik yaklaşımları entegre ederek harikalar yaratabilirsiniz!
MetaMask Snaps'e başlamak için:
Geliştirici belgelerine göz atın
MetaMask Flask'ı yükleyin
Twitter, GitHub tartışmaları ve Discord üzerinden bizimle bağlantıda kalın
Yakınınızdaki bir sonraki hackathon'da ekibimizi takip edin! Mutlu BUIDLing ⚒️
Sorumluluk Reddi: MetaMask Snaps, genel olarak Consensys Software dışındaki üçüncü taraflarca geliştirilmektedir. Üçüncü taraflarca geliştirilen MetaMask Snaps'lerin kullanımı tamamen kendi takdirinize ve riskinize bağlıdır; bu tür faaliyetlerden doğabilecek kayıp veya zarardan yalnızca sizin sorumlu olacağınızı kabul etmiş sayılırsınız. Consensys, üçüncü taraflarca geliştirilen MetaMask Snaps'ler için sözlü veya yazılı, açık veya zımni hiçbir garanti vermez ve bu Snaps'lerden doğan tüm sorumlulukları reddeder. Blockchain tabanlı yazılımların kullanımı çeşitli riskler barındırır ve MetaMask Snaps'i kullanarak bu riskleri tamamen üstlenmiş olursunuz.
Yapay zeka tarafından çevrildi. Hatalar içerebilir. Lütfen her zaman bilgileri doğrulayın.