İçeriğe geç

Blackbelt Snap: Dolandırıcılara Karşı Gerçek Zamanlı Savunma

Bir ETHBogota Hackathon Snap'i

9 dk okuma
Blackbelt Snap: Dolandırıcılara Karşı Gerçek Zamanlı Savunma

MetaMask Snaps, MetaMask'ı dünyanın en genişletilebilir cüzdanı haline getirme yol haritasıdır. 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.

Blackbelt Snap

Snap Deposu: https://github.com/s-a-malik/blackbelt

Neden geliştirdiniz?

Blok zincirlerindeki etkileşimleri son kullanıcılar için daha güvenli hale getirmek istedik. Özellikle dolandırıcılık ve açıklardan etkilenmekten korkan yeni ve teknik bilgisi olmayan kullanıcılar için. Bu nedenle, akıllı sözleşme etkileşimleri için gerçek zamanlı risk değerlendirmesi sunmanın bir yolunu düşündük.

Teknik uygulamayı bize anlatabilir misiniz?

Teknik yapı

Blackbelt üç unsurdan oluşmaktadır: sunucumuz, MetaMask snap ve web sitesi ön yüzümüz. Sunucu, verileri alır ve akıllı sözleşme risk puanlarını hesaplar. MetaMask snap ve web sitemiz, sunucuyu çağırarak https isteği içinde belirli sözleşme adresini iletir. Projemizin tam uygulaması burada bulunabilir.

Sunucu

Sunucumuz, güvenlik puanlarını ve meta verileri json formatında döndüren bir flask arka ucundan oluşmaktadır. /security_score rotasına bir GET isteği başlatıldığında, security_score() fonksiyonu çağrılır. Önce sözleşme adresi, kullanıcı adresi, zincir kimliği ve çağıran kaynak gibi tüm sağlanan parametreler çözümlenir, ardından kısmen zincir üstü verileri alıp birden fazla değişken için (örn. sözleşme yaşı) güvenlik puanları hesaplayan compute_security_score(contract_address, chain) fonksiyonuna aktarılır. MetaMask Snaps içinde veri alımını hızlandırmak için, sunucu MetaMask Snaps aracılığıyla çağrıldığında mevcut olması durumunda önbelleğe alınmış sonuçlar sunulmaktadır (bkz. is_snaps değişkeni).

def security_score():
    """
    Returns the security score and the metadata used to compute it for a given contract address.
    Saves result to ipfs and local storage.
    Params:
    - user_address: the address of the user to check
    - contract_address (str): eth address of the contract
    - chain_id (int): chain to check the contract on
    Returns:
    - score (int): The security score (0-100)
    - contract_info (dict):        
    """
    user_address = request.args.get('user_address', type=str)
    contract_address = request.args.get('contract_address', type=str)
    chain_id = request.args.get('chain', default=1, type=int)
    is_snaps = request.args.get('is_snaps', default=False, type=str)

    #Check if chached results should be provided
    is_snaps = True if is_snaps == "true" else False
    if is_snaps and contract_address in contract_to_score:
        #Retrieve from cache and return
        return contract_to_score[contract_address][0]
    else:
        chain = "mainnet" if chain_id == 1 else "goerli"

        #Calculate new security score
        output = compute_security_score(contract_address, chain)
        if output["status"] != "ok":
            return output

        #Add to the server cache
        contract_to_score[contract_address].append(output)
        user_to_transactions[user_address].append(output)

    return output
Kopyala

compute_security_score fonksiyonu (logic.py dosyasında), Coinbase Cloud API'ları, etherscan API'ları ve bildirilen kötü amaçlı adreslerin topluluk tarafından derlenen sunucu taraflı veritabanımızdan elde edilen zincir üstü verilere dayalı bir sezgisel risk puanı hesaplar. Puanı hesaplamak için kullanılan faktör türlerine ilişkin birkaç örnek aşağıdaki kod parçacığında gösterilmektedir. Örneğin, sözleşmenin etherscan'de doğrulanmış ve denetlenmiş olarak işaretlenip işaretlenmediğini ve sözleşmenin ne kadar eski olduğunu kontrol ediyoruz.

# in the compute_security_score function:
# ...
verified = is_verified(contract_address, chain)
audited = is_audited(contract_address, chain)
transactions, users, deployed_date_unix = numberOfTransactionsAndUsersAndAge(contract_address)
min_age_of_contract_in_days = (time.time() - deployed_date_unix) / 86400
num_times_reported = blacklist_dict[contract_address]
# ...
Kopyala

Gelecekte, kötü amaçlı sözleşmelerin tespit edilmesine yardımcı olabilecek daha fazla bilgi kaynağını (otomatik doğrulama araçları ve mevcut kara liste veritabanları gibi) entegre etmeyi ve risk puanının daha nüanslı hesaplanmasını, örneğin makine öğrenimi yöntemlerini kullanmayı planlıyoruz.

Snap

Snap için, bir işlem gerçekleştiğinde tetiklenen işlem içgörüleri API'sini kullanıyoruz. Snap dört adımdan oluşmaktadır. Birincisi, işlem yapısından işlemin temel ayrıntıları alınır. İkincisi, işlem ayrıntıları sunucumuza gönderilir ve güvenlik puanı ile meta veriler alınır. Üçüncüsü, istek durumu kontrol edilir ve hatalar ele alınır. Dördüncüsü, güvenlik puanı ve meta veriler MetaMask Snaps içinde json nesnesi olarak döndürülür.


export const onTransaction: OnTransactionHandler = async ({
  transaction,
  chainId,
}) => {

  // Get tx data
  const user_address = transaction.from;
  const contract_address =  transaction.to;
  const chain_id =  chainId.split(":")[1];

  // Call api for risk assessment
  const url = 'https://blackbelt.xyz/security_score?contract_address='+contract_address+'&user_address='+user_address+'&chain='+chain_id+'&is_snaps=true';
  let x = await fetch(url);
  let data = await x.json();

  // Cases for returning insights
  if (data.status == "ok"){
    const individual_scores = stringify_json('individual_scores', data)
    const individual_details = stringify_json('contract_info', data)
    return {
      insights: {"Risk Assessment": data.risk_level, "Security Score": data.security_score, "Recommendation": data.recommendation, "Details": individual_details, "Individual Scores": individual_scores, "Assessment Timestamp": data.risk_assessment_timestamp, "IPFS Storage Hash": data.ipfs_hash},
    };
  } else if(data.status =='error, not a contract address'){
    return {
      insights: {"No Score Available": "No interaction with a smart contract detected.", "Assessment Timestamp": data.risk_assessment_timestamp},
    };
  } else if(data.status =='error, unsupported chain'){
    return {
      insights: {"Chain Not Supported": "We are currently supporting Ethereum and Goerli only. We are working on adding more networks."},
    };
  } else {
    return {
      insights: {"Unknown Error": "An unknown error occured. Please contact the team and try again later."},
    };
  }
};
Kopyala

Web sitesi

Web sitesi React ile yazılmıştır ve özelliğimizi MetaMask'a eklemeden önce hızlıca test etmek için kullanılmaktadır. Kullanıcılar, bir sözleşme adresi girerek "Şimdi Değerlendir" düğmesine basarak özelliğimizi deneyebilir. Uygulamamızı beğenen kullanıcılar, sağ üst köşedeki "MetaMask Snap Ekle" seçeneğine tıklayarak MetaMask'larına ekleyebilir.

Bunu hayata geçirseydiydiniz sonraki adımlar ne olurdu?

Sonraki adımlar, riskli sözleşmeleri daha güvenilir biçimde tespit etmek için arka ucumuzu ve analitik kapasitemizi geliştirmek olurdu. Şu anda değerlendirmemiz, DAU sayısı veya işlem sayısı gibi sezgisel yöntemlere dayanmaktadır (ne kadar yüksekse o kadar iyi), ancak risk puanını daha doğru hesaplamak için makine öğrenimi gibi daha gelişmiş teknikler dahil etmek istiyoruz. Analitiği geliştirdikten sonra, kullanıcı deneyimini mümkün olduğunca sorunsuz kılmak için tüm risk değerlendirme sürecini hızlandırmaya odaklanacağız; bu, önbellekleme veya daha hızlı veri alım prosedürleriyle sağlanabilir.

Kendiniz ve ekibiniz hakkında biraz bilgi verebilir misiniz?

Üç Oxford doktora öğrencisi ve bir Oxford mezunundan oluşan bir ekibiz. Oxford Blockchain Society ile bağlantılıyız ve ETHBogota hackathon'unda bir araya gelerek ekibimizi oluşturduk.

Lucas Schneider: Lucas, Oxford Üniversitesi'nde Bilgisayar Bilimi alanında DPhil adayı olup CRISPR sistemlerinde gen düzenleme sonuçlarını tahmin etmek için hesaplamalı ve makine öğrenimi modelleri üzerine çalışmaktadır. DPhil'e başlamadan önce Lucas, Londra'daki Barclays Yatırım Bankası'nda Menkul Kıymetleştirilmiş Ürünler Yapılandırma Grubu'nda Analist olarak çalışmış; birden fazla egzotik yapılandırılmış kredi işlemine ve sorunlu krediler ile ticari gayrimenkul portföylerinin finansmanına dahil olmuştur. Londra Ekonomi ve Siyaset Bilimi Okulu'ndan Finans alanında Yüksek Lisans ve Friedrich-Alexander Üniversitesi Erlangen-Nürnberg'den nicel yöntemlere odaklanan Ekonomi alanında Lisans derecesine sahiptir.

Shreshth Malik: Shreshth, Oxford Üniversitesi'nde Makine Öğrenimi alanında DPhil adayı olup derin öğrenme yöntemlerini daha sağlam ve güvenilir hale getirerek gerçek dünya uygulamalarında daha güvenilir sonuçlar elde etmeye odaklanmaktadır. Aynı zamanda çeşitli yapay zeka girişimlerinde ve Londra merkezli bir erken aşama risk sermayesi fonunda çalışmıştır. Makine Öğrenimi (UCL) ve Fiziksel Doğa Bilimleri (Cambridge Üniversitesi) alanlarında Yüksek Lisans derecelerine sahiptir.

Paweł Narkiewicz: Paweł, seri girişimci, bilim insanı ve teknoloji tutkunu biridir. 18 yaşında Stanford ve Harvard'ın en yetenekli matematikçileriyle birlikte sayı teorisi alanında ilk araştırma makalesini yayımladı. Bir yıl sonra Polonya'da teknoloji becerilerinin gelişimini hızlandırmak amacıyla başarılı bir eğitim teknolojisi girişimi kurdu. İşletme, 3 ay içinde kendi kendini finanse eden bir girişime dönüştü. Aynı dönemde Paweł, bir medikal teknoloji girişimine işletmeci ortak ve makine öğrenimi mühendisi olarak katılarak girişimin teknolojisinin temel özelliklerinden birinin geliştirilmesine öncülük etti. Oxford, Stanford ve Harvard'ın önde gelen araştırmacılarıyla doğrudan iş birliği yaptı. Girişim, ön tohum turunda 770.000 $ ve tohum turunda 3,2 milyon £ finansman aldı. Oxford'dan Matematik ve Bilgisayar Bilimi alanında Lisans derecesine sahiptir.

Jessica Pointing: Jessica, Oxford Üniversitesi'nde kuantum bilişim alanında uzmanlaşarak Fizik doktorasını sürdürmekte olup daha önce Knight-Hennessy Bursu ile Stanford Üniversitesi'nde Bilgisayar Bilimi doktora öğrencisiydi. Lisans eğitimini MIT'de başladıktan sonra Harvard Üniversitesi'nde John Harvard Bursu ile Fizik ve Bilgisayar Bilimi alanında yüksek onur derecesiyle tamamladı. Jessica, Forbes 30 Under 30 Bilim listesine seçildi ve Dünya Ekonomik Forumu'nun Kuantum Uygulamaları Küresel Gelecek Konseyi'nde konsey üyesi olarak görevlendirildi. TEDx konuşmacısı olarak seçildi ve IBM'in Think konferansı ile Oracle Code One konferansı dahil olmak üzere uluslararası teknoloji konferanslarında açılış konuşmaları yaptı. NASA Ames Araştırma Merkezi'nde KBR bünyesinde kuantum araştırmacısı, Google'da yazılım mühendisi, McKinsey and Company'de yönetim danışmanı, Goldman Sachs'ta yatırım bankacısı ve Morgan Stanley'de stratejist olarak staj yaptı. Jessica, Stanford Kuantum Bilişim Derneği'ni ve Harvard College Kuantum Bilişim Derneği'ni kurdu. Bir ekiple IBM'in ilk kuantum bilişim hackathon'unu kazanarak IBM Q Kuantum Bilişim Ödülü'nü aldı. Aynı zamanda Creative Destruction Lab kuantum bilişim hackathon'unda da ödül kazandı. ETHAmsterdam Ethereum hackathon'una katılan Jessica'nın ekibi büyük finalist ödülünü ve sponsor ödüllerini kazandı. McKinsey Kadın Etki Ödülü'ne layık görüldü ve Google Anita Borg Bursu'na seçildi. Ayrıca Microsoft, Palantir, Adobe Research, Morgan Stanley, Goldman Sachs, Neo, Kadın Mühendisler Derneği Bursu ve Jeofizikçiler Derneği burslarını da kazandı.

MetaMask Snaps ile ilk ne zaman tanıştınız ve deneyiminiz nasıldı?

MetaMask Snaps ile ilk kez ETHBogota'da tanıştık. Blackbelt'i hayata geçirmek için en kullanıcı dostu yolu sunan mükemmel bir özellikti. Genel olarak MetaMask Snaps deneyimi oldukça keyifliydi; MetaMask Snaps'in kullanımı oldukça kolay. MetaMask Snaps'in yeniliği göz önünde bulundurulduğunda, hackathon sürecinde zaman zaman baş ağrıtacak küçük aksaklıklar yaşandı; ancak bunlar gerçekten ciddi sorunlar değildi.

MetaMask Snaps'i diğer cüzdanlardan farklı kılan nedir?

MetaMask Snaps, cüzdan uzantılarının geliştirilmesini açık kaynaklı hale getirmenin ve farklı ihtiyaçlara sahip son kullanıcılar için çeşitli ve bireysel çözümler sunmanın harika bir yoludur. Bildiğimiz kadarıyla MetaMask, özel eklentileri destekleyen şu ana kadarki tek cüzdan sağlayıcısıdır.

MetaMask ile Snaps geliştirmek sizin ve ekibiniz için nasıl bir deneyim?

MetaMask Snaps ile geliştirme yapmak oldukça kolaydı. MetaMask Snaps'in işleyişini daha iyi anlamak için örnek projelerden biriyle başladık, ardından örnek kodun üzerine inşa ettik. MetaMask Snaps ile geliştirme yapmak eğlenceliydi; ancak zaman zaman bazı hatalar, özellikle hackathon sürecindeki sıkı son teslim tarihi göz önünde bulundurulduğunda, bizi gerçekten zorladı.

MetaMask Snaps sizin için ne ifade ediyor?

MetaMask Snaps, cüzdanlarımızda her zaman sahip olmayı dilediğimiz özelliktir. Bir geliştirici için geniş bir yenilik fırsatları yelpazesinin kapılarını açmaktadır.

MetaMask Snaps ile Web3 alanında ne gibi fırsatlar görüyorsunuz?

MetaMask Snaps, tüm Web3 ekosisteminde daha fazla özelleştirme imkânı sunacak ve böylece kullanıcıların istedikleri özelliklere karar verebildiği için genel kullanıcı deneyimini de iyileştirecektir.

MetaMask Snaps'i denemek isteyen geliştiricilere vermek istediğiniz tavsiyeler var mı?

MetaMask Snaps ile oynamaya başlayın. MetaMask Snaps'in nasıl çalıştığını anlamak ve üzerine inşa etmek için örnek projelerden biriyle başlamak en kolay yoldur. Bilinmeyen sorunlar ortaya çıkarsa, MetaMask Snaps geliştiricilerinden yardım almak için sorunu her zaman MetaMask Snaps git deposuna iletebilirsiniz.

MetaMask Snaps ile Geliştirme

MetaMask Snaps'e başlamak için:

  1. Geliştirici belgelerine göz atın

  2. MetaMask Flask'ı yükleyin

  3. Bir MetaMask Snaps kılavuzuna göz atın

  4. 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 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 MetaMask Snaps'ler için tüm sorumluluğu reddetmektedir. Blok zinciri ile ilgili yazılımların kullanımı risk taşımakta olup MetaMask Snaps'i kullandığınızda bu riskleri tamamen üstlenmiş olursunuz.

Yapay zeka tarafından çevrildi. Hatalar içerebilir. Lütfen her zaman bilgileri doğrulayın.

Çeviriyi değerlendir

Bu makalenin yazarı:

  • MetaMask

    MetaMask, eski adıyla Consensys Software Inc, dünyada yaklaşık 190 ülkede kullanıcılara ulaşarak insanlara hem kripto hem de geleneksel varlıklar genelinde paralarını tutma, harcama, biriktirme ve büyütme imkânı sunan, dünyanın en büyük self-custodial finansal platformudur. Şirket, ödemeleri, tasarrufları, yatırımları ve dijital varlıkları tek ve kesintisiz bir deneyimde bir araya getiren tüketici platformunu inşa etmektedir. Dünyanın en yaygın kullanılan self-custodial cüzdanından büyüyen MetaMask, kullanıcılara para ve varlıkları üzerinde doğrudan kontrol imkânı tanımaktadır. MetaMask, 2016'dan bu yana Ethereum'un büyümesinde temel bir rol üstlenmiştir. Bugün MetaMask, blokzincir ekonomisinin merkezinde yer alarak Açık Para için işletim sistemini inşa etmekte ve insanları finansal yaşamları üzerinde tam anlamıyla söz sahibi kılmaktadır.

    Tüm makaleleri oku