Derinlik解析EthereumEIP-7702:EOA编程新纪元与最佳实践指南

Ethereum Pectra Yükseltmesi: EIP-7702 Derinlik Analizi ve En İyi Uygulama Rehberi

Giriş

Ethereum, Pectra yükseltmesini karşılamaya hazırlanıyor, bu önemli bir güncellemedir ve bir dizi önemli Ethereum İyileştirme Önerisi getirilecektir. Bunlar arasında, EIP-7702, Ethereum dış hesap (EOA) üzerinde devrim niteliğinde bir dönüşüm gerçekleştirmektedir. Bu öneri, EOA ile sözleşme hesapları CA arasındaki sınırları belirsizleştirmekte olup, EIP-4337'den sonra yerel hesap soyutlamasına doğru atılan önemli bir adımdır ve Ethereum ekosistemine yeni bir etkileşim modeli getirmektedir.

Pectra, test ağında dağıtımını tamamladı ve yakında ana ağa geçmesi bekleniyor. Bu makalede EIP-7702'nin uygulama mekanizması derinlemesine incelenecek, olası fırsatları ve zorlukları tartışılacak ve farklı katılımcılar için pratik bir operasyon kılavuzu sunulacaktır.

Protokol Analizi

Genel Bakış

EIP-7702, EOA'nın bir akıllı sözleşme adresi belirlemesine olanak tanıyan yeni bir işlem türünü tanıtmaktadır ve böylece ona kod atayabilir. Bu sayede EOA, akıllı sözleşmeler gibi kod çalıştırabilirken, işlem başlatma yeteneğini de korur. Bu özellik, EOA'ya programlanabilirlik ve bileşen olma yeteneği kazandırmakta, kullanıcıların EOA içinde sosyal kurtarma, yetki kontrolü, çoklu imza yönetimi, zk doğrulama, abonelik tabanlı ödeme, işlem sponsorluğu ve işlem toplu işleme gibi işlevleri gerçekleştirmesine olanak tanımaktadır. Ayrıca, EIP-7702'nin EIP-4337 ile gerçekleştirilen akıllı sözleşme cüzdanlarıyla mükemmel uyum sağladığını belirtmek gerekir; bu ikilinin sorunsuz entegrasyonu, yeni işlevlerin geliştirilmesi ve uygulanması sürecini büyük ölçüde basitleştirmektedir.

EIP-7702'nin somut uygulaması, SET_CODE_TX_TYPE (0x04) işlem türünü içeren bir işlemin getirilmesidir, veri yapısı tanımı aşağıdaki gibidir:

rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, value, data, access_list, authorization_list, signature_y_parity, signature_r, signature_s])

authorization_list alanı şu şekilde tanımlanmıştır:

authorization_list = [[chain_id, address, nonce, y_parity, r, s], ...]

Yeni işlem yapısında, authorization_list alanı dışında kalan her şey, EIP-4844 ile aynı anlama sahiptir. Bu alan bir liste türüdür ve listede birden fazla yetkilendirme girişi bulunabilir. Her yetkilendirme girişinde:

  • chain_id alanı, bu yetkilendirme delegasyonunun geçerli olduğu zinciri belirtir.
  • address alanı, vekaletin hedef adresini belirtir
  • nonce alanı, mevcut yetkilendirilmiş hesabın nonce'u ile eşleşmelidir.
  • y_parity, r, s alanları, yetkilendirilmiş hesap tarafından verilen yetkilendirme imza verileridir.

Bir işlemdeki authorization_list alanı, birden fazla farklı yetkilendirilmiş hesabı içerebilir. ( EOA ) tarafından imzalanmış yetkilendirme maddeleri, yani işlem başlatıcısı yetkilendiren kişiden farklı olabilir, böylece yetkilendiren kişiye yönelik yetkilendirme işlemleri için gaz ödemesi yapılabilir.

gerçekleştirmek

Yetkilinin yetkilendirme verilerini imzalarken, önce chain_id, address, nonce'un RLP kodlamasını yapması gerekir. Ardından kodlanmış veriyi ve MAGIC sayısını birlikte keccak256 hash işlemi ile işlemden geçirerek imzalanacak veriyi elde eder. Son olarak, yetkilinin özel anahtarını kullanarak hashlenmiş veriyi imzalar ve böylece y_parity, r, s verilerini elde eder. Burada, MAGIC (0x05) alan ayırıcı olarak kullanılır; amacı, farklı türdeki imzaların sonuçlarının çakışmasını önlemektir.

Dikkat edilmesi gereken nokta, yetkilendirenin yetkilendirdiği chain_id'nin 0 olması durumunda, yetkilendirenin EIP-7702'yi destekleyen tüm EVM uyumlu zincirlerde ( yetkisini tekrar kullanmasına izin verdiğidir, bununla birlikte nonce'un da tam olarak ) ile eşleşmesi gerekmektedir.

Yetkilendirici yetki verilerini imzaladıktan sonra, işlem başlatıcısı bunları authorization_list alanında bir araya getirerek imzalar ve RPC üzerinden işlem yayını yapar. İşlem bir blokta işlenmeden önce, Proposer önce işlemi ön kontrol yapar, burada to adresi zorunlu olarak kontrol edilir ve bu işlemin bir sözleşme oluşturma işlemi olmadığından emin olunur, yani EIP-7702 türü bir işlem gönderildiğinde, işlemin to adresi boş olamaz.

Aynı zamanda, bu tür işlemler, işlemdeki authorization_list alanının en az bir yetkilendirme öğesi içermesini zorunlu kılmaktadır. Eğer birden fazla yetkilendirme öğesi aynı yetkilendirici tarafından imzalanmışsa, o zaman yalnızca son yetkilendirme öğesi geçerli olacaktır.

Sonrasında, işlem yürütme sürecinde, düğüm önce işlem başlatıcısının nonce değerini artıracak, ardından authorization_list içindeki her yetkilendirme kalemi için applyAuthorization işlemini gerçekleştirecektir. applyAuthorization işlemi sırasında, düğüm önce yetkilendirenin nonce'unu kontrol edecek, sonra yetkilendirenin nonce'unu artıracaktır. Bu, eğer işlem başlatıcısı ve yetkilendiren aynı kullanıcı ise (EOA), yetkilendirme işlemi imzalanırken nonce değerinin 1 artırılması gerektiği anlamına gelir.

Bir düğüm, belirli bir yetkilendirme maddesini uygularken herhangi bir hata ile karşılaşırsa, bu yetkilendirme maddesi atlanacak, işlem başarısız olmayacak ve diğer yetkilendirme maddeleri uygulanmaya devam edecektir. Böylece toplu yetkilendirme senaryolarında DoS riski ortaya çıkmayacaktır.

Yetkili uygulama tamamlandığında, yetkilendiren adresin code alanı 0xef0100 || address olarak ayarlanacaktır; burada 0xef0100 sabit bir kimliktir, address ise yetkilendirilen hedef adrestir. EIP-3541'in sınırlamaları nedeniyle, kullanıcılar 0xef baytı ile başlayan sözleşme kodunu normal yollarla dağıtamazlar, bu da bu tür kimliklerin yalnızca SET_CODE_TX_TYPE (0x04) türündeki işlemlerle dağıtılabileceğini garanti eder.

Yetki tamamlandığında, yetkili kişiyi kaldırmak isteyen yetki veren kişi, yalnızca yetkilendirilmiş hedef adresini 0 adresi olarak ayarlamalıdır.

EIP-7702 ile tanıtılan yeni işlem türü, yetkilendiren (EOA)'in akıllı sözleşmeler gibi kod yürütmesine ve aynı zamanda işlem başlatma yeteneğini korumasına olanak tanır. EIP-4337 ile karşılaştırıldığında, bu kullanıcıya yerel hesap soyutlama (Native AA) deneyimine daha yakın bir deneyim sunarak kullanıcıların kullanım eşiğini büyük ölçüde düşürmektedir.

En İyi Uygulamalar

EIP-7702'nin Ethereum ekosistemine yeni bir canlılık kazandırmasına rağmen, yeni uygulama senaryoları da yeni riskler getirecektir. Aşağıda, ekosistem katılımcılarının pratik süreçte dikkat etmesi gereken noktalar bulunmaktadır:

özel anahtar depolama

EOA'nın, akıllı sözleşmelerin yerleşik sosyal kurtarma gibi yöntemleri kullanarak özel anahtar kaybından kaynaklanan fon kaybı sorununu çözebileceği doğru olsa da, EOA özel anahtarının sızdırılma riskini ortadan kaldırmaz. Şunu netleştirmek gerekir ki, yetkilendirme işleminden sonra EOA özel anahtarı, hesaba en yüksek kontrol yetkisine sahip olmaya devam eder; özel anahtarı elinde bulunduran, hesaptaki varlıkları dilediği gibi tasfiye edebilir. Kullanıcılar veya cüzdan hizmet sağlayıcıları, EOA'ya yetkilendirme işlemi tamamlandıktan sonra yerel olarak saklanan özel anahtarı tamamen silseler bile, özel anahtarın sızdırılma riskini tamamen ortadan kaldıramazlar, özellikle tedarik zinciri saldırısı riski bulunan senaryolar söz konusu olduğunda.

Kullanıcılar için, yetkilendirilmiş hesapları kullanırken, kullanıcıların her zaman özel anahtar korumasını birinci öncelik olarak görmeleri ve her zaman şunu hatırlamaları gerekir: Not your keys, not your coins.

Çok Zincirli Yeniden Oynatma

Kullanıcı, yetki devri imzalarken, yetkinin geçerli olacağı zinciri seçmek için chainId'yi kullanabilir, elbette kullanıcı aynı zamanda yetki devri için chainId'si 0 olanı seçebilir, bu da yetkinin çoklu zincirlerde yeniden geçerli olmasını sağlar ve kullanıcıların tek bir imza ile çoklu zincirlerde yetki devri yapmasına olanak tanır. Ancak dikkat edilmesi gereken bir nokta, çoklu zincirlerdeki aynı akıllı sözleşme adresinde farklı uygulama kodlarının da mevcut olabileceğidir.

Cüzdan hizmet sağlayıcıları, kullanıcıların yetkilendirme işlemi yaparken, yetkilendirmenin geçerli olduğu zincirin mevcut bağlantılı ağ ile uyumlu olup olmadığını kontrol etmeli ve kullanıcıyı chainId'si 0 olan bir yetkilendirme imzalamanın getirebileceği riskler konusunda uyarmalıdır.

Kullanıcılar ayrıca, farklı zincirlerdeki aynı sözleşme adreslerinin sözleşme kodlarının her zaman aynı olmadığını dikkate almalıdır; öncelikle yetkilendirmenin amacını anlamalıdır.

Başlatılamadı

Mevcut ana akım akıllı sözleşme cüzdanlarının çoğu proxy modelini kullanmaktadır. Cüzdan proxy'si dağıtım sırasında, DELEGateCALL çağrısı aracılığıyla sözleşmenin başlatma fonksiyonunu gerçekleştirir ve böylece cüzdanın başlatılması ile proxy cüzdanın dağıtımı arasında atomik bir işlem sağlar, bu da erkenden başlatılma sorununu önler. Ancak kullanıcı EIP-7702 ile yetki verdiğinde, yalnızca adresinin code alanını güncelleyerek, yetki verilen adresi çağırarak başlatma işlemi gerçekleştiremez. Bu durum EIP-7702'nin, sözleşme dağıtım işleminde başlatma fonksiyonunu çağırarak cüzdan başlatma işlemi yapabileceği yaygın ERC-1967 proxy sözleşmeleri gibi olmasını engellemektedir.

Geliştiriciler için, EIP-7702'yi mevcut EIP-4337 cüzdanları ile birleştirirken, cüzdanın başlatma işlemi sırasında yetki kontrolü yapmaya dikkat etmelidir. Örneğin, yetki kontrolü için ecrecover ile imza adresinin geri kazanılması, cüzdanın başlatma işleminin hızlı bir şekilde geçilme riskini önlemek için gereklidir.

( Depolama Yönetimi

Kullanıcılar EIP-7702 devretme özelliğini kullanırken, işlev ihtiyaçlarının değişmesi, cüzdan güncellemeleri gibi nedenlerle farklı bir sözleşme adresine yeniden devretmeleri gerekebilir. Ancak farklı sözleşmelerin depolama yapıları arasında farklılıklar olabilir ), örneğin farklı sözleşmelerin slot0 yuvası farklı veri türlerini temsil edebilir ###. Yeniden devretme durumunda, yeni sözleşmenin eski sözleşmenin verilerini yanlış bir şekilde yeniden kullanmasına neden olma riski vardır, bu da hesap kilitlenmesi, fon kaybı gibi olumsuz sonuçlara yol açabilir.

Kullanıcılar için, yeniden yetkilendirme durumlarını dikkatli bir şekilde ele almak önemlidir.

Geliştiriciler için, geliştirme sürecinde ERC-7201 tarafından önerilen Namespace Formula'sına uymak, değişkenleri belirli bağımsız depolama alanlarına atamak, depolama çakışması riskini azaltmak açısından önemlidir. Ayrıca, ERC-7779 (draft), EIP-7702 için yeniden delege etme standart sürecini de sağlamaktadır: ERC-7201 kullanarak depolama çakışmasını önlemek, yeniden delege etmeden önce depolama uyumluluğunu doğrulamak ve eski delege arayüzünü çağırarak depolamanın eski verilerini temizlemek gibi adımları içermektedir.

( Sahte Yükleme

Kullanıcı, vekalet verdikten sonra EOA'nın akıllı sözleşme olarak da kullanılabileceği için merkezi borsa )CEX###, akıllı sözleşme ile para yatırma işlemlerinin yaygınlaşmasıyla karşılaşabilir.

CEX, her depozito işleminin durumunu kontrol etmek için trace kullanmalı ve akıllı sözleşme sahte depozito risklerini önlemelidir.

( Hesap Dönüşümü

EIP-7702 delegasyonu uygulandıktan sonra, kullanıcıların hesap türleri EOA ve SC arasında serbestçe dönüşebilir, bu da hesapların hem işlem başlatabilmesini hem de çağrılabilmesini sağlar. Bu, hesabın kendisini çağırdığında ve dış çağrı yaptığında, msg.sender'ın da tx.origin olacağı anlamına gelir; bu da yalnızca EOA'nın projelere katılmasını öngören bazı güvenlik varsayımlarını ihlal eder.

Sözleşme geliştiricileri için, tx.origin'in her zaman EOA olduğunu varsaymak artık mümkün olmayacak. Aynı şekilde, msg.sender == tx.origin kontrolü ile reentrancy saldırılarına karşı savunma da etkisiz hale gelecek.

Geliştiriciler, geliştirme sürecinde gelecekteki katılımcıların akıllı sözleşmeler olabileceğini varsaymalıdır.

) Sözleşme Uyumluluğu

Mevcut ERC-721 ve ERC-777 tokenleri, sözleşmeye transfer sırasında Hook işlevine sahiptir, bu da alıcının tokenleri başarıyla almak için ilgili geri çağırma işlevini uygulaması gerektiği anlamına gelir.

Geliştiriciler için, kullanıcıların devrettiği hedef sözleşmelerin, ana akım tokenlerle uyumlu olabilmesi için ilgili geri çağırma işlevlerini gerçekleştirmesi gerekir.

Balık Tutma Kontrolü

EIP-7702 yetkilendirmesi uygulandıktan sonra, kullanıcı hesaplarındaki varlıklar akıllı sözleşmeler tarafından kontrol edilebilir hale gelebilir. Kullanıcı hesaplarını kötü niyetli bir sözleşmeye yetkilendirdiğinde, saldırganların fonları çalması oldukça kolaylaşır.

Cüzdan hizmet sağlayıcıları için, mümkün olan en kısa sürede EIP-7702 türündeki işlemleri desteklemek özellikle önemlidir ve kullanıcıların yetkilendirilmiş imza yaparken, kullanıcıya yetkilendirme hedef sözleşmesini vurgulayarak göstermelidir, böylece kullanıcıların phishing saldırısına maruz kalma riskini azaltabilir.

Ayrıca, hesap yetkilendirmesi ile hedef sözleşme üzerinde daha derinlemesine otomatik analiz ### açık kaynak kontrolü, yetki kontrolü vb. ### kullanıcıların bu tür risklerden kaçınmalarına daha iyi yardımcı olabilir.

Özet

Bu makale, Ethereum'un yaklaşan Pectra yükseltmesindeki EIP-7702 önerisi etrafında dönmektedir. EIP-7702, yeni bir işlem türü tanıtarak EOA'nın programlanabilirliğini ve bileşenlerini sağlar, EOA ile sözleşme hesapları arasındaki sınırları bulanıklaştırır. Şu anda, pratikte test edilmiş bir EIP-7702 uyumlu akıllı sözleşme standardı olmadığı için, farklı ekosistem katılımcıları, kullanıcılar, cüzdan sağlayıcıları, geliştiriciler, CEX gibi, birçok zorluk ve fırsatla karşı karşıya kalmaktadır. Bu makalede açıklanan en iyi uygulama içerikleri, tüm potansiyel riskleri kapsamayabilir, ancak yine de tarafların pratik uygulamalarda dikkate alması için değerlidir.

ETH-0.03%
View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Reward
  • 5
  • Repost
  • Share
Comment
0/400
No comments
  • Pin
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate App
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)