MetaMask Snaps, MetaMask'ı dünyanın en genişletilebilir cüzdanı haline getirmenin yol haritasıdır. Geliştirici olarak, özelliklerinizi ve API'larınızı 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.
Composooor Snap
Snap Deposu: https://github.com/kairos-loan/composooor/tree/main/packages/snap
Neden geliştirdiniz?
Akıllı sözleşme tabanlı finansal protokoller ve diğer blokzincir uygulamaları geliştirme deneyimimiz sırasında tekrar eden bir örüntü fark ettik. Giderek daha fazla uygulama, blokzincirlerin teknik sınırlamaları nedeniyle sözleşme mantığında doğrulanan zincir dışı kaynakları (hesaplama veya veri depolama gibi) kullanmaktadır. Buna örnek olarak emir defterleri, airdrop'ların merkle ağaçları, sıralı listeler, token özellikleri vb. verilebilir.
Her durumda, değerli bilgiler zincir dışında depolanmakta/hesaplanmakta; ancak zincir üstü etkileşimlerde kullanılabilmekte ve büyük etkiler yaratmaktadır. Bunu mümkün kılmak için sözleşmeler, geçerliliği kontrol etmek amacıyla hash'ler veya imzalar gibi çeşitli kriptografik teknikler kullanmaktadır. Dapp'ler ise sözleşme için gerekli bilgileri sağlayabilecek özel mantığa sahip frontend'lere/API'lara ihtiyaç duymaktadır. Ne yazık ki bu örüntü birleştirilebilirliği (composability) zedelemektedir; örneğin AWS üzerinde sunulan özel bir emir defterine dayanan bir DeFi uygulaması, başka bir akıllı sözleşme tarafından kolayca entegre edilememektedir.
Bu sınırlamalardan bıkarak tüm uygulamaların her şeyle kolayca entegre edilebilmesini sağlayacak bir standart ve altyapı geliştirmeye karar verdik. Entegrasyonları yeniden kolaylaştırmanın ekosisteme pek çok yeni fırsat kapısı açacağına güçlü bir şekilde inanıyoruz.
Teknik uygulamayı bize anlatabilir misiniz?
Giriş
Composooor MetaMask snap'i, bir web istemcisi, bir veya birden fazla zincir dışı rastgele kaynak ve composooor standardını uygulayan rastgele sayıda akıllı sözleşme arasındaki iletişimi standartlaştırmak ve yönetmek için kullanılmaktadır. Tüm standart kaynaklar, çoğu durumda composooor'un süper güçlerini tek satırda kullanmayı sağlayan bir npm paketi aracılığıyla kolayca erişilebilir durumdadır.
Adım adım
Bir işlem hazırlanırken MetaMask snap cüzdanımız, istenen zincir üstü sözleşmede bir gas tahmini çağrısı yapacaktır.
Sözleşmenin çalışması için zincir dışında yapılmış bazı verilere veya hesaplamalara ihtiyaç duyulması halinde, bu eksik verilerin nasıl bulunacağına dair özellikleri içeren standartlaştırılmış bir hata ile geri dönecektir. Standartlaştırılmış hata şu şekilde görünmektedir:
error MissingOffchainDataError(
address registryAddress,
string url,
bytes abiArgs
);
Bu hata, sözleşmelerin zincir dışı kaynaklara erişmek için genişletmesi gereken ComposooorRegister tarafından sunulmaktadır.
MetaMask snap cüzdanı bu hatayı çözümleyerek eksik verileri merkeziyetsiz bir protokolden, bir API'dan veya bu kaynaklardan aldığı kodu çalıştırarak üretebilir. ETHDenver hackathon'u için en basit seçenek olan API çağrısını uyguladık.
const responseData = await fetch(error.url + `?args=${error.abiArgs}`);Cüzdan, bu sefer istenen metodu çağırmadan önce alınan verileri ilgili sözleşmenin standartlaştırılmış kayıt defterinde depolamak için bir talimat ekleyerek gas'ı yeniden tahmin edecektir.
const callToRegisterData: Call = {
callee: error.registryAddress,
functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
İşlem yürütülürken, aynı veya başka bir sözleşme çalışmak için başka bir zincir dışı kaynağa ihtiyaç duyabilir. Bu durumda cüzdan, artık zincir dışı kaynağa gerek kalmayana kadar işlem hazırlama adımlarını döngüye alır. Bu, zengin zincir dışı kaynaklara erişen protokoller arasında sonsuz birleştirilebilirliği mümkün kılar.
Gas tahmini başarılı olduğunda, kullanıcıya gerekli tüm kaynaklar dahil edilerek başarıyla yürütülecek hazırlanmış işlemin imzası sunulur.
Composooor destekli bir uygulamayı entegre etmek / kendinizinkini oluşturmak nasıl görünür.
ETHDenver'da composooor'un olağan hibrit uygulama örüntüsünün kod karmaşıklığını en az %80-90 oranında azalttığını gösterdik.
Akıllı sözleşme tarafı
"@composooor/ComposooorRegister.sol" ile içe aktarın. Örnek kullanım:
contract Example is ComposooorRegister {
function action() public {
bytes memory data = consumeParameter("http://api.api/number", abi.encode(arguments));
(uint256 offchainNumber) = abi.decode(data, (uint256));
(...)
}
}
ComposooorRegister, Solidity ile geliştirilmiştir.
Frontend tarafı
Composooor snap, en yüksek getiriyi frontend tarafında sağlar: genellikle 200+ satırlık entegrasyonları… 0'a indirir! Snap mantığı her şeyi halleder.
Demo
React-wagmi dapp biçiminde tam entegre bir demo hazırladık. Bu dapp, bir NFT'yi yalnızca küçük bir ön ödemeyle satın almayı ve geri kalanını finanse etmek için daha sonra geri ödenecek bir kredi almayı mümkün kılmaktadır. Zincir üstünde, işleme dahil olan 8'den az olmayan sözleşme bulunmaktadır. Sürecin ortasında NFT pazaryeri, NFT satıcısının zincir dışı imzasını talep etmektedir. Composooor snap, işlemin karmaşıklığına rağmen hatayı alabilmekte, çözümleyebilmekte ve bilgiyi zincir üstüne (bir API'dan alındıktan sonra) sağlayabilmektedir. Composooor bu uygulamayı hayata geçirmeyi çok daha basit hale getirdi.
Bunu uygulasaydınız sonraki adımlar ne olurdu?
Geliştiricilerin önemli ölçüde zaman kazanmasını sağlayan ve yeni blokzincir kullanım senaryolarını mümkün kılan böyle bir yeniliğin bir parçası olan benimsenmedir. Arka planda Composooor snap kullanan ve ilgili snap ile çalışan birden fazla kullanıcıya yönelik uygulama uygular ve dağıtırdık. Bu uygulamalar ilgi görürse, basitleştirilmiş geliştirici deneyimiyle beslenen bir benimseme döngüsü başlatmak için diğer uygulamalarla birleştirmek üzere ortaklıklar kurardık. Bu süreçte snap ve standart, özgün vizyona uyan daha genel ve standartlaştırılmış bir ürüne dönüşürdü: blokzincirleri, merkeziyetsizleşme ve kullanım senaryoları açısından agnostik bir şekilde rastgele kaynaklara eş zamanlı olarak bağlamak.
Kendiniz ve ekibiniz hakkında biraz bilgi verebilir misiniz?
Daha sermaye verimli bir yaklaşımla NFT'leri teminat olarak kullanmak için bir borç verme protokolü geliştiren bir ekibiz. Emir defteri gibi zincir dışı bileşenler kullanan bir mimariyle gitmeye karar verdik. Bu tercih sermaye verimliliğini ve kullanıcı deneyimini iyileştirmeye olanak tanısa da diğer protokollerle birlikte çalışabilirliği sınırlayabilir. Bu nedenle diğer protokollerle kolay entegrasyona olanak tanıyan Composooor snap'i geliştirdik. Bu kütüphanenin diğer ekipler tarafından kullanılmasını, yeni olanaklar açmasını ve işlerini kolaylaştırmasını umuyoruz.
MetaMask Snaps ile Web3 alanı için ne gibi fırsatlar görüyorsunuz?
Cüzdanlar, web3'ün kaçınılmaz ana dayanaklarından/yapı taşlarından biridir ve MetaMask, çoğu kullanıcı için fiilen varsayılan cüzdandır. Geliştiricilerin bunu rastgele yeni kullanım senaryoları için kullanabilmesini sağlamak bana çok kritik görünüyor. Asıl mesele şu: cüzdanların parçası olması gereken tüm yenilikleri hayal edemez veya bunlara hazırlanamayız; dolayısıyla onlara bir miktar erişim vermek, Bitcoin'den Ethereum'a geçiş gibidir: teknolojinizin üzerinde rastgele kullanım senaryolarını mümkün kılmak, öngörülemeyen ve katlanarak büyüyen bir potansiyel sunar. Bu soruyu yanıtlamak zor ama beni en çok heyecanlandıran şey, cüzdanın yalnızca mesaj imzalamanın ötesine geçmesini sağlayan ve kullanıcı için bağlam açısından zengin bir şekilde etkileşimleri optimize eden uygulamalardır.
MetaMask Snaps'i denemek isteyen geliştiricilerle paylaşmak istediğiniz tavsiyeler var mı?
Sağlanan şablondan yararlanın ve gerekli her kullanıcı onayını doğru şekilde talep etmeye dikkat edin; mümkün olduğunca az onay kullanın.
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 kılavuzuna 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 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 kaynaklanabilecek herhangi bir 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ı hiçbir açık ya da zımni garanti vermemekte ve üçüncü taraflarca geliştirilen Snaps'ler için tüm sorumluluğu reddetmektedir. Blokzincir ile ilgili yazılımların kullanımı risk taşımakta olup MetaMask Snaps'i kullandığınızda bu riskleri tamamen üstlenmiş olursunuz.