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.
Swix Jedi ve Adrian ile Revoke Snap
ETHWarsaw Hackathon'unda Revoke Snap'i geliştiren Web3 geliştiricisi Swix Jedi ve Adrian ile sohbet ediyoruz.
Snap Deposu: https://github.com/SwixJedi/revokesnap
Neden geliştirdiniz?
Harici aktörler tarafından token kullanımının güvenliğini sağlamak amacıyla ERC20 token standartları bir izin mekanizması uygular; bu mekanizmada token sahibinin, bir aktörün (örneğin DEX akıllı sözleşmesi) belirlenen bir limite kadar tokenlarını kullanabilmesi için onay vermesi gerekir.
Biraz hantal olan DeFi kullanıcı deneyimini iyileştirmek amacıyla DeFi protokollerinin büyük çoğunluğu, kullanıcıların sözleşmelerle her etkileşime girmek istediklerinde token onaylamak ve gereksiz gas ücretleri ödemek zorunda kalmaması için onaylarda maksimum 256 birim değeri kullanır.
Özellikle aktif DeFi kullanıcıları için söz konusu protokolleri kullandıktan sonra geriye kalan onayların oluşması kolayca mümkündür; bu durum potansiyel bir güvenlik tehdidi oluşturur.
Kullanıcıların geriye kalan izinlerle başa çıkmasına yardımcı olan mevcut çözümler bulunmakla birlikte, bunların yalnızca bir kısmı doğrudan kullanıcı arayüzünden onay iptali sunmaktadır. Her onayın ayrı ayrı ele alınması ve manuel olarak onaylanması gerektiğinden süreç oldukça zaman alıcıdır. Bu yaklaşım güvenli olmakla birlikte sürekli ve yoğun manuel kullanıcı etkileşimi gerektirmektedir.
Bu durum bizi, MetaMask Snaps'in yeteneklerinden yararlanarak işleri daha iyi hale getirebileceğimiz, henüz ele alınmamış bir alana yöneltti.
Teknik uygulamayı bize anlatabilir misiniz?
MetaMask Snaps'in aşağıdaki avantajlarından yararlanmaya karar verdik:
MetaMask'taki tüm hesaplara erişim
Kullanıcıdan tek bir onay alarak karmaşık işlemler gerçekleştirebilme
Bu soruna bir çözüm önerisi sunmak için; gelecekte şunları mümkün kılması gereken bir yapı tasarladık:
Tüm mevcut ve gelecekteki hesaplara erişim için kullanıcıya yalnızca tek bir istem sunmak (donanım cüzdanları hariç)
Ayrı onaylar ve hesap değiştirme ihtiyacı olmaksızın tüm mevcut hesaplardaki onayları toplu olarak iptal etmek
Tüm kullanıcı hesaplarını (donanım cüzdanlarındakiler dahil) yeni onaylar için aktif olarak izlemek ve tespit edildiğinde kullanıcıya bildirim göstermek.
Revoke Snap, web arayüzü üzerinden yüklendiğinde MetaMask gerekli izinler için kullanıcıdan onay ister.
Tüm izinler bir snap.manifest.json dosyasında belirtilmiştir:
"initialPermissions": {
"snap_confirm": {},
"snap_getBip44Entropy_60": {},
"snap_notify": {},
"endowment:long-running": {}
},
Burada dikkat çeken iki izin şunlardır:
1. "Ethereum" hesaplarınızı ve varlıklarınızı kontrol edin. Bu, snap'imizin işlev görebilmesi için kullanıcının MetaMask'taki ana anahtarına (gizli anahtar) ihtiyaç duyduğu anlamına gelir; bu sayede kullanıcı adına hesap oluşturabilir ve işlemleri imzalayabiliriz.
2. Süresiz çalıştırma. Revoke Snap, arka planda sürekli çalışmak üzere tasarlanmış bir uygulama olmasa da blok zincirinde işlemlerin tamamlanması zaman almaktadır. MetaMask Snaps'in yerleşik 60 saniyelik bir sonlandırma mekanizması bulunmaktadır; bu süre işlemleri tamamlamak için yeterli olmayabilir. Bu izin, RevokeSnap'in söz konusu güvenlik önlemini aşmasına olanak tanır.
Gerekli izinler alındıktan sonra RevokeSnap, kullanıcının özel anahtarından bir dizi hesap oluşturur:
export async function getSigners(provider: ethers.providers.Provider, amount: number): Promise<Wallet[]> {
let wallets: Wallet[] = [];
for (let i=0; i<amount; i++) {
wallets.push(await getSigner(provider, i));
}
return wallets;
}
export function getAddresses(wallets: Wallet[]): string[] {
let addresses: string[] = [];
for (let i=0; i<wallets.length; i++) {
addresses.push(wallets[i].address);
}
return addresses;
}
export async function getSigner(provider: ethers.providers.Provider, index: number): Promise<Wallet> {
const ethereumNode = (await wallet.request({
method: 'snap_getBip44Entropy_60',
})) as unknown as BIP44CoinTypeNode;
const deriveEthereumAccount = await getBIP44AddressKeyDeriver(ethereumNode);
const mainAccountKey = (await deriveEthereumAccount(index)).privateKey;
return new Wallet(mainAccountKey, provider);
}
Ardından geriye kalan onayları kontrol eder ve arama tamamlandığında tespit edilen tüm onayları iptal etmek için bir düğme sunar.
"Tümünü İptal Et" düğmesine tıklandığında Snap, geriye kalan onaylara karşılık gelen bir dizi işlem başlatarak bunları tek tek sıfırlar. Snap, oluşturulan cüzdanların özel anahtarlarına zaten sahip olduğundan bu işlem, başlangıçtaki onayın ötesinde kullanıcıdan herhangi bir ek onay gerektirmez.
Bunu hayata geçirseydiniz sonraki adımlar ne olurdu?
Hackathon süresince en optimum çözümleri oluşturmak için yalnızca sınırlı bir zaman olduğundan, iyileştirmeye açık olan bir dizi işlevsel uygulama kullandık.
Başlangıç olarak, snap'te oluşturulan hesap sayısı şu anda bir fonksiyon parametresi olarak iletilmekte ve sabit kodlanmış şekilde 3 olarak belirlenmiştir. Daha iyi bir seçenek, snap'in harici bir API (veya özel bir arka uç) kullanarak seçilen zincir(ler) için her hesaptaki bir sonraki işlem nonce'unu doğrulaması ve yalnızca nonce sayısı 0'dan büyük olan adresleri dikkate alması olabilir.
Ayrıca onaylar için işlevselliği sergilemek amacıyla bilinen token ve aktör adreslerinin kısa bir listesini kullandık; ancak ideal olarak onay kontrolü daha kapsamlı biçimde yapılmalıdır. Bu, örneğin tüm onay işlemlerini bulmak ve bunları web sitesinde görüntülemek üzere ayrıştırmak için bir RPC sağlayıcı API'si (örneğin Infura) kullanılarak gerçekleştirilebilir.
Kendiniz ve ekibiniz hakkında biraz bilgi verir misiniz?
Ben Jedi, Swix'te Baş Geliştirici olarak çalışıyorum. 2017'den beri kripto dünyasındayım; 2019'dan itibaren ise bu alanda derinleştim ve ağırlıklı olarak Akıllı Sözleşme tarafında DeFi protokolleriyle çalışmaya başladım. Swix'te şu anda gayrimenkul getirilerini zincir üzerine taşıma ve yeni kullanıcıları kripto alanına kazandırma üzerine çalışıyorum.
Ben Adrian, küçük girişimlerde ve büyük şirketlerde yazılım geliştirici ve mimar olarak çalıştım. Blok zinciri, özellikle Ethereum ekosistemi, uzun yıllardır temel ilgi alanım olmuştur.
Revoke Snap'in geliştirilmesi sürecinde işleri böldük: Jedi, MetaMask Snaps'in nasıl çalıştığını anlamaya ve Snap'imiz içinde gereken Akıllı Sözleşme etkileşimleri için gerekli temelleri oluşturmaya odaklanırken Adrian web arayüzü ve işlemlerin paketlenmesiyle ilgilendi.
MetaMask Snaps ile ilk ne zaman tanıştınız ve deneyiminiz nasıldı?
MetaMask Snaps ile ilk kez ETHWarsaw'ın sunumunda tanıştık; sunum oldukça teknikti ve protokolün arka planda nasıl çalıştığına dair daha derinlemesine bilgiler içeriyordu. Bu durum bizi konuyu daha fazla araştırmaya yöneltti ve işte buradayız.
MetaMask Snaps'i diğer cüzdanlardan farklı kılan nedir?
Fikrin kendisi aslında. MetaMask Snaps, gözetim dışı tarayıcı cüzdan uzantıları alanında kabul görmüş standart anlayışın dışına çıkıyor; bu anlayışa göre web3 uygulamalarıyla etkileşimde her işlemin kullanıcı tarafından ayrı ayrı onaylanması gerekiyor. Ayrıca cüzdanların işlevselliği, arkasındaki ekibin uygulamaya karar verdiği özelliklerle sınırlı kalıyor.
MetaMask Snaps'in masaya getirdiği şey ise keyfi blok zinciri etkileşimleri için yerel cüzdan entegrasyonlarının tabandan yukarıya doğru oluşturulmasını sağlayan bir platform; bu durum mobil uygulama mağazalarıyla büyük benzerlik taşıyor.
MetaMask Snaps ile Web3 alanı için ne gibi fırsatlar görüyorsunuz? MetaMask Snaps sizin için ne ifade ediyor?
MetaMask Snaps'in kripto alanına sağlayacağı en büyük katkılardan biri, kripto ve DeFi protokollerindeki kullanıcı deneyiminin iyileştirilmesidir. Bunun işlem paketlemeyi mümkün kılmak, bir dApp içinde gerçekleştirilen tüm işlemler için tek tıkla onay vermek, kredi kartından kriptoya satın alımlar gerçekleştirilirken doğrudan sözleşme etkileşimlerine izin vermek ya da daha da yaratıcı başka çözümler şeklinde olup olmayacağını yalnızca zaman gösterecek.
Özellikle yeni kripto kullanıcıları için blok zinciri etkileşimlerinin karmaşıklığını ve hantallığını soyutlamanın oyunun kurallarını değiştirebileceğine kuvvetle inanıyoruz.
MetaMask ile MetaMask Snaps geliştirmek sizin ve ekibiniz için nasıl bir deneyim?
Revoke Snap'i geliştirirken büyük bir motivasyon kaynağı, MetaMask Snaps'in hâlâ geliştirilme aşamasında olması ve dolayısıyla şu an yaptığımız denemelerin MetaMask'ın, MetaMask Snaps'in ve bunun aracılığıyla bir ölçüde kripto alanının gideceği yön üzerinde somut bir etki yaratabilecek olmasıydı. Web3'ün geleceğine kendi tuğlamızı ekleyebilmek güzel bir deneyimdi.
MetaMask Snaps'i denemek isteyen geliştiricilere tavsiyeleriniz neler?
MetaMask Snaps'i denemek isteyen tüm geliştiricilere şunu söylerim: Deneyin. MetaMask Snaps, mevcut GitHub şablon deposu sayesinde başlamak için oldukça basittir ve MetaMask ekibi de son derece yardımseverdir. Konseptin kendisi büyük bir potansiyele sahip olup henüz bu alanda yapılmış çok fazla şey yok; dolayısıyla değer katmak oldukça kolay.
MetaMask Snaps ile Geliştirme
MetaMask Snaps'e başlamak için:
Geliştirici belgelerine göz atın
MetaMask Flask'ı yükleyin
Bir MetaMask Snaps rehberine bakın
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 kaynaklanabilecek herhangi bir kayıp veya zarardan yalnızca siz sorumlu olacaksı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 üçüncü taraflarca geliştirilen MetaMask Snaps'ler için tüm sorumluluğu reddeder. Blok zinciri ile ilgili yazılımların kullanımı risk taşımaktadır ve MetaMask Snaps'i kullanırken bu riskleri tamamen üstlenmiş olursunuz.