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. Bir geliştirici olarak, özelliklerinizi ve API'larınızı tamamen yeni yollarla MetaMask'a entegre edebilirsiniz. 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.
Snap Repo: https://github.com/Tbaut/template-snap-monorepo
Neden geliştirdiniz?
Ethereum'da işlem imzalama söz konusu olduğunda, görmezden gelinemeyen gerçek şudur: Kullanıcıların büyük çoğunluğunun ne imzaladıkları hakkında neredeyse hiçbir fikri yoktur. Yöntemleri ve argümanları çözümlemek iyi bir ilk adımdır; ancak kullanıcılar kötü amaçlı bir sözleşmeyle etkileşime girerse, görünen bilgiler yanıltıcı olabilir. Buna karşı bir denge oluşturmak için, kod renkleri 🟥 🟧 🟩 kullanarak nicel verileri çok basit bir şekilde göstermeyi düşündüm. Fikir, birden fazla kaynaktan kolayca doğrulanabilen verilere dayalı bir güven skoru göstermektir. 4 kriter ile başlamayı seçtim:
Akıllı sözleşmeyle genel olarak kaç kullanıcının etkileşime girdiği.
Mevcut hesabın bu sözleşmeyle ne sıklıkta etkileşime girdiği.
Bu sözleşmenin ne kadar eski olduğu.
Bu sözleşme kodunun doğrulanıp doğrulanmadığı.
Teknik uygulamayı bize anlatabilir misiniz?
Snap oldukça basittir ve genişletmesi kolaydır. İşte üzerinden geçeceğimiz tam kod.
MetaMask'ta insights sekmesine tıklandığında onTransaction fonksiyonu çağrılır. İçinde, dikkate almaya karar verdiğimiz kriterleri bize sağlayan her fonksiyonu çağırırız.
Bu fonksiyonlar genellikle bir API çağırır ve sonuçları işler. Anlamak için bunlardan birine daha yakından bakalım.
Bir sözleşmenin aldığı toplam işlem miktarına göre skor veren fonksiyona daha yakından bakalım. Burada Etherscan API'sini kullanıyoruz, ancak aynı verileri doğrulamak için başka herhangi bir API de işe yarayabilir.
Artık kriterlerimizin her biri için bir TrustResult'a sahip olduğumuza göre, ağırlık uygulamanın zamanı geldi. Gerçekten de, kriterlerimizin güven skorlarının hepsinin aynı ağırlığa sahip olması gerekmez. Örneğin, sözleşmeyle geçmişteki işlem miktarının bir maliyeti vardır. Bir dolandırıcı bunu manipüle etmek isteseydi, gas için bir miktar ETH harcaması gerekirdi. Sonuç olarak, bu kriter manipüle edilmesi daha maliyetli kabul edildiğinden daha önemlidir ve ona 3 ağırlık verdim.
Benzer şekilde, sözleşmenin yaşı bir saldırgan tarafından atlatılamaz; saldırgan yüksek bir güven skoru elde etmek isteseydi sözleşmeyi deploy etmek ve ardından saldırısını başlatmadan önce beklemek zorunda kalırdı. Buna 2 ağırlık verdim.
Diğer kriterler daha zayıf kabul edilir ve 1 ağırlığa sahiptir.
Son olarak, artık bir akıllı sözleşmenin güven skoruna sahibiz ve bunu basit bir şekilde göstermemiz gerekiyor. MetaMask insights API'si yalnızca anahtar-değer çiftleri göstermeye izin vermektedir. Anahtarlar kalın yazıyla, değerler ise normal yazı ağırlığıyla gösterilir. Emoji kullanarak, kullanıcıları bunaltmayan ancak toplanan tüm bilgileri gösteren bir arayüz oluşturabileceğimi düşündüm.
Güven skorunu emojilere dönüştüren fonksiyon:
Ve onTransaction fonksiyonunun, anahtar-değer çiftlerini düzgün bir şekilde göstermek için bazı geçici çözümler içeren return kısmı:
Son olarak, 2 tür sözleşmeyi çağırmak için çok basit bir arayüz oluşturdum: biri çok iyi bilinen ve kullanılan bir Uniswap sözleşmesi, diğeri ise Remix'te varsayılan olarak sunulan çok yakın zamanda deploy edilmiş bir depolama sözleşmesi. Bu snap'i kullanarak Uniswap router sözleşmesiyle etkileşime girseydiniz şunu görürdünüz:
Bunu uygulasaydınız sonraki adımlar ne olurdu?
Bu, kullanıcılara güven verebilecek veya onları phishing saldırılarından koruyabilecek bilgilerin yalnızca yüzeyini çizmektedir. Açık olan ilk adım, verilerimiz için daha fazla kaynak kullanmak olacaktır. Sözleşme doğrulaması zaten Sourcify ve Etherscan kullanmaktadır, ancak her kriter için birden fazla kaynak kullanmak daha iyi olacaktır.
Ardından, dolandırıcıların skorları kolayca manipüle edememesi için daha gelişmiş algoritmalar uygulamalıyız. Örneğin, bir sözleşmeyle işlem yapan benzersiz hesap sayısını saymalıyız. Geçmişte onunla etkileşime giren hesaplar üzerinde de bazı analizler yapabiliriz; böylece hepsinin tek bir kaynaktan gelip gelmediğinden emin olabiliriz. Dezavantajı, tüm bu analizlerin birden fazla doğruluk kaynağı kullanılarak yapılmasının daha zor olmasıdır.
Entegre edilebilecek akıllı sözleşme dolandırıcılık tespiti üzerine yapılmış ilginç araştırmalar da mevcuttur. Daha fazla bilgi için.
Sonuç olarak, bu hack için aldığım ezici miktardaki olumlu tepkiler, kullanıcıların daha fazla bilgi talep ettiğini göstermektedir ve bunun kolay anlaşılır olmasının kilit bir rol oynadığına inanıyorum.
Kendinizden biraz bahseder misiniz?
ChainSafe'de yazılım mühendisiyim ve geçmişte Parity'de çalıştım. İyi UX'e odaklanarak ürünler geliştirmeyi seviyorum. Web3, benim için harika bir oyun alanıdır; çünkü her şey çok karmaşıktır ve bunu mümkün olduğunca fazla kişiye anlaşılır kılmaya çalışmak büyük bir meydan okumadır. Bu alanda neredeyse 5 yıldır bulunuyorum ve birçok hackathon'a katılmış olmama rağmen, genellikle hacker olmak yerine gönüllü, mentor veya jüri üyesi olarak yer alıyorum. Bunun temel nedeni, mükemmeliyetçi olmam ve genellikle hızlı ve özensiz çözümlerden hoşlanmamamdır :).
MetaMask Snaps ile ilk ne zaman tanıştınız ve deneyiminiz nasıldı?
İlginç bir şekilde, ChainSafe'deki meslektaşlarım ilk snap'lerden birini, Filecoin için olanı geliştirdi. Muhtemelen o zamanlar koda bir göz atmıştım, ancak daha fazla derinleşmemiştim.
Hackathon sırasında, insights API'si aslında geliştiricilere henüz açık değildi. Lizbon'da MetaMask ekibiyle konuşuyordum; MetaMask'a bir kullanıcı arayüzü ekleyebileceğimi beklemiyordum. Bana bunun yakında yayınlanacağını ve şimdi üzerine inşa edebileceğimi söylediler. Aslında bu yalnızca özel bir build ile mevcut olup dokümantasyon henüz yayınlanmamıştı.
MetaMask Snaps'i diğer cüzdanlardan farklı kılan nedir?
Bir sekmeye özel kod ekleme yeteneğine sahip olmak ve aynı zamanda bu kodun güvenli bir şekilde çalıştırılmasını sağlamak, çok geniş bir yelpazede geliştirmelerin önünü açmaktadır. Bundan ne çıkacağını merakla bekliyorum.
MetaMask ile Snaps geliştirmek sizin için nasıl bir deneyim?
Template monorepo, başlamayı son derece kolaylaştırdı. Tüm kodumu tek bir repoda yazabilmem, hem test dapp'ini hem de snap'i otomatik yenileme ile tek bir komutla başlatabilmem harika bir geliştirici deneyimiydi.
Snaps sizin için ne ifade ediyor?
Bir uzantının uzantısıdır. Hiçbir ürün tüm kullanıcılara uymaz. Bu birleştirilebilir katmanı eklemek, herhangi bir özellik talep eden herkesin onu kendisinin geliştirmesi için harika bir fırsattır.
MetaMask Snaps ile Web3 alanı için ne gibi fırsatlar görüyorsunuz?
Özellikle ihtiyaçlara bağlı olarak sonsuz özelleştirilebilirliğin kilidini açan insights hakkında konuşacağım. Gelecekte çok daha fazla güvenlik odaklı insights geliştirileceğine eminim.
MetaMask Snaps'i denemek isteyen geliştiricilere tavsiyeleriniz nelerdir?
Monorepo'yu klonlayın ve çok hızlı bir başlangıcın keyfini çıkarın.
MetaMask Snaps'e başlamak için:
Geliştirici dokümanlarına göz atın
MetaMask Flask'ı yükleyin
Bir MetaMask Snaps rehberine göz atın
Twitter, GitHub discussions 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 genellikle 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 kaynaklanan herhangi bir kayıp veya zarardan yalnızca siz sorumlu olacaksınız. Consensys, üçüncü taraflarca geliştirilen MetaMask Snaps için sözlü veya yazılı, açık veya zımni hiçbir garanti vermez ve üçüncü taraflarca geliştirilen Snaps için tüm sorumluluğu reddeder. Blockchain ile ilgili yazılımların kullanımı riskler barındırır ve MetaMask Snaps kullanırken bu riskleri tamamen üstlenmiş olursunuz.
Yapay zeka tarafından çevrildi. Hatalar içerebilir. Lütfen her zaman bilgileri doğrulayın.