Vitalik, ticaret mantığı hesaplarını varlıkların bulunduğu hesaplardan ayırmak için zk-SNARK'ların kullanılmasını önerir. Bu, gizliliği, kullanıcı deneyimini ve tek tıklamayla sosyal kurtarmayı geliştirir. Ethereum araştırmacısı Toni Wahrstätter, bu cüzdan prototipinin iş akışını ve avantajlarını kapsayan ayrıntılı bir analizini sunuyor.
Bu konudaki harika tartışmalar için ve her bir sözleşmeyi ayrıştırıp patricia ağacında zk kanıtlarına olan ihtiyacı ortadan kaldırarak prototip oluşturmayı basitleştiren seyrek bir Merkle ağacına yerleştirecek bu aracı geliştirdiği için Matt'e çok teşekkür ederiz. Ayrıca harika katkılarından dolayı Vitalik'e teşekkürler.
Birden fazla hesabı yönetmek, sosyal kurtarma, gizlilik, L2 ve genel kullanıcı deneyimi sorunları gibi çeşitli nedenlerden dolayı zor olabilir. Gizli bir adres kullanmak işleri daha da karmaşık hale getirir çünkü her etkileşim yeni bir hesap gerektirir. Vitalik, ticaret mantığı hesaplarını varlıkların bulunduğu hesaplardan ayırmak için zk-SNARK'ların kullanılmasını önerir. Bu, gizliliği, kullanıcı deneyimini ve tek tıklamayla sosyal kurtarmayı geliştirir.
Aşağıdakiler için öncelikle Vitalik'in "Üç Dönüşüm" gönderisine göz atmanızı tavsiye ederim.
Özetle, başarmaya çalıştığımız şey şudur:
**Gizlilikten ödün vermeden tek noktadan sosyal kurtarma. **
1. Geleneksel yöntem
Basit ama gizlilikten ödün veren bir uygulama şuna benzer:
Kullanıcı, varlık tutma hesabına bir imza ve bazı niyet/komut sağlar.
Varlık tutma hesabı, imzayı mantıksal tutma hesabına iletir.
Mantıksal tutma hesabı, genel anahtarı imzadan türetir ve onu, saklanan genel anahtarla karşılaştırır.
Doğrulama başarılı olursa mantıksal hesap, varlık tutma hesabına operasyona devam etmesi konusunda bildirimde bulunacaktır.
Varlık tutma hesabı kullanıcının emirlerini yerine getirir.
Dezavantajı ise bunun mantıksal hesapları ve varlık tutma hesaplarını halka açık bir şekilde birbirine bağlaması ve dolayısıyla mahremiyetten ödün verilmesidir.
2. ZK-SNARK'ı kullanın
Kullanıcılar zk-SNARK'ları kullanarak, mantıksal tutma hesabı ile varlık tutma hesabı arasındaki bağlantıyı açığa çıkarmadan harcama yapmaya yetkili olduklarını kanıtlayabilirler.
İş akışı aşağıdaki gibidir:
Kullanıcı yerel olarak bir Merkle ağacı oluşturur ve sözleşmesini içeren yaprakları tanımlar.
1.1. Bir Merkle ağacı temel olarak mevcut her sözleşmenin slot0 ve slot1 değerlerini tarihe veya isme göre sıralanmış olarak içerir.
1.2. Her kullanıcı, en son duruma göre yerel olarak bir Merkle ağacı oluşturabilir.
Kullanıcı mantıksal tutma hesabındaki sırrı bildiğini kanıtlamak için bir zk kanıtı oluşturur. Kanıt daha sonra ayrıntılı olarak açıklanacaktır.
Kullanıcı varlık tutma hesabına zk-proof gönderir.
4.2 Kullanıcı, mantıksal tutma hesabında saklanan değerle karma hale getirilen ve eşleştirilen gizli bir değeri bilir.
4.3 Kullanıcılar, kanonik zincirde tutulan Merkle ağaç kökü hesap durumunu yeniden oluşturabilir (örn. önceden derlenmiş)
4.4 Doğru rastgele sayıları kullanın (mantıksal saklama hesaplarındaki anahtarları değiştirmek için kullanılır).
Temel olarak bir kullanıcı, "Bu eylemi gerçekleştirmek için mantıksal tutma hesabından kanıtlanabilir izne sahibim ve bu mantıksal hesabın konumunu biliyorum" diyebilir.
avantaj
Kullanıcı deneyimi: Bir özel anahtar veya bir çoklu imza kurulumu, farklı L2'lerde olsalar bile birden fazla hesabı kontrol edebilir.
Geri Yükleme: Hesaplar, tek bir sözleşme güncellemesiyle daha kolay bir şekilde geri yüklenebilir.
Gizlilik: Hesaplar arasında herkese açık bağlantı yoktur.
Uyumluluk: Bu, Hesap Soyutlama (AA) cüzdanlarının ve diğer özelliklerin yaygınlaşmasına yardımcı olur.
Ek olarak, mantık ile varlık tutma sözleşmesi arasına başka bir (toplayıcı) sözleşme eklenerek, tek bir işlemde farklı varlık tutma hesaplarının birden fazla kanıtı sağlanarak, hesabın neredeyse bir UTXO gibi ele alınmasına olanak sağlanır. Toplayıcılar birden fazla zk sertifikası alabilecek ve bunları doğrulama için ilgili varlık tutma hesaplarına gönderebilecek. Elbette böyle bir toplayıcı, bireysel varlık tutma hesapları arasında gizlilik de dahil olmak üzere bağlantılar oluşturabilir.
SNARK'ları kullanmak (ve dolayısıyla güvenliğine güvenmek) ile SNARK'ları hiç kullanmamak (ve dolayısıyla iyi gizlilik özelliklerini kaçırmak) arasında mutlaka ya biri ya da ikisi arasında bir seçim olmadığını belirtmekte fayda var. Bir uzlaşma, mantıksal tutma sözleşmesinde bir zaman penceresi açmak için bir SNARK kanıtı kullanmak ve ardından kısa bir gecikme olabilir; bundan sonra mantıksal tutma sözleşmesinin sahibi, harcamak için bir SNARK kanıtı istemek yerine slot0 değerini değiştirebilir ve böylece tüketim mantığını değiştirin. Sözleşmenin mevcut sahibi, kimlik bilgisi güncellemelerini önlemek için zaman penceresi açılmadan önce bir gecikme kullanabilir.
teknik detaylar
zk-SNARK ayarı özel öğeler içerir:
Doğrulama için kullanılan anahtar.
Mantıksal tutma hesabı adresi, varlık tutma hesabının gösterdiği adrestir.
Belirli durum değerlerini tanımlamak için Merkle dalı.
Eski anahtarları geçersiz kılarken anahtar döndürmeye izin veren bir tek seferlik. Sözleşme adreslerini ve sırları tutan düz metin mantığı gibi özel öğeler kamuya açıklanmaz, ancak mantık tutma hesapları ile varlık tutma hesaplarını özel olarak bağlamak için kullanılır. Tüm devletin kanıtlarını üreterek, merkezi bir otoritenin kanıt sunmak için Merkle ağacı oluşturmasına gerek kalmaz.
1. Mantıksal tutma hesabı
Mantıksal bir tutma hesabının prototipi şöyle görünebilir:
Pragma sağlamlığı >=0,7,0 <0,9,0;
sözleşme Mantık Tutma Hesabı Sahiplenilebilir { uint256 public slot0 = 0x1234; // karma gizli uint256 genel nonce = 0; // genel sahibin adresindeki önemli değişiklikleri takip edin;
function updateOwner(uint256 newValue) public onlyOwner { nonce += 1; slot0 = yeniDeğer;
slot0: başlangıçta hash değerini tutan genel değişken. Karma ön görüntüyü yalnızca sahibi biliyor.
nonce: Sahip bilgisi güncellemelerinin sayısını izleyen bir sayaç. Bu, eski anahtarların geçersiz hale gelmesini sağlar.
updateOwner(uint256 newValue): Değeri güncelleyen ve rastgele bir sayı ekleyen işlev.
Bu sözleşme, sahibinin mevcut harcama mantığını (slot0) izler ve updateOwner işlevi aracılığıyla güncellemelere izin verir.
2. Hesap tutma hesabı
Pragma sağlamlığı >=0,7,0 <0,9,0;
sözleşme AssetHoldingAccount { uint256 genel mantıkHoldingAccountHash = 1234...;
// Skaler alan boyutu, Temel alan boyutu, Doğrulama Anahtarı verileri vb. // ...
Varlık tutma hesapları, ETH gibi varlıkları saklar ve kullanıcıların para çekme kanıtlarını göndermesine olanak tanır. Belirtilen LogicHolder'ın LogicHoldingAccountHash ile eşleştiğini doğrulayarak, sahip, varlık tutma sözleşmesinin herhangi bir keyfi sözleşme yerine yalnızca yetkili mantıksal tutma sözleşmesindeki kanıtları kabul etmesini sağlayabilir.
Kanıt oluşturulurken özel sinyal olarak sağlanan sır, varlık tutma hesabındaki fonlara yalnızca harcama mantığını içeren hesap sahibinin erişebilmesini sağlar.
3. Devre
Aşağıdaki devre circcom kullanılarak geliştirildi, kodun tamamı burada bulunabilir.
pragma circom 2.0.2;
include "./modules/merkleTree.circom";include "./modules/commitmentHasher.circom";
şablon Ana(seviyeler) { sinyal girişi kökü; sinyal giriş mantığıHoldingAddressHash; sinyal giriş mantığıHoldingAddress; sinyal girişi sırrı; sinyal girişi bir kez; sinyal giriş yoluElemanları [levels] ; sinyal giriş yolu Endeksleri [levels] ; bileşen secretHasher = SecretHasher(); secretHasher.secret <== gizli; bileşen karma = CommitmentHasher(); hasher.logicHoldingAdresi <== mantıksalHoldingAdresi; hasher.secret <== secretHasher.hashedSecret; hasher.bir kez <== bir kez; hasher.logicHoldingAddressHash === LogicHoldingAddressHash; bileşen ağacı = MerkleTreeChecker(seviyeler); ağaç.leaf <== hasher.taahhüt; ağaç.root <== kök; for ( i = 0; i < düzeyler; i++) { ağaç.yolElemanları [i] <== yolElemanları [i] ; Tree.pathIndices [i] <== yol Endeksleri [i] ;
bileşen main {public [root,logicHoldingAddressHash]} = Main(N);
Devrede, Merkle ağaç kökü ve mantıksal tutma hesabının karma adresi olmak üzere 2'si halka açık toplam 7 sinyal bulunur (gözlemcilerin hesabı toplamasını önlemek için varlık tutma sözleşmesine kodlanmadan önce karma yapılması gerekir). sınıf) sahibi hesapla aynı mantığa dayalıdır).
Sonuç olarak
Kullanıcıların birden fazla hesabı yönetmek zorunda olduğu bir dünyada, tek noktadan sosyal kurtarma işlevine duyulan ihtiyaç giderek daha önemli hale geliyor. Zk-SNARK, mantık/varlık ayrımını uygulayan cüzdanlarda kullanılabilir ve kullanıcıların, ikisi arasında bir bağlantı oluşturmadan Hesap A'nın "mantığını" kullanarak Hesap B'den harcama yapmalarına olanak tanır. İlk adım olarak SNARK kanıtları, varlık harcamalarından daha az riskli eylemler için kullanılabilir. Örneğin, kullanıcıların "para çekme isteklerini" başlatmasına izin vermek iyi bir başlangıç noktası olabilir. Mantık tutma sözleşmesinin sahibinin itiraz etmemesi halinde kullanıcı, talebini bir süre sonra sonuçlandırabilir.
Bu şekilde, mantıksal tutma sözleşmesinin sahibi, beklenmeyen bir durum olması durumunda gizliliği ihlal edecek şekilde de olsa müdahale edebilir.
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.
zk-SNARKs, cüzdan işlem mantığı ile varlıkların ayrımını nasıl gerçekleştiriyor?
Yazar: @Toni Wahrstätter Çeviri: DeBox Enstitüsü
Önsöz
Vitalik, ticaret mantığı hesaplarını varlıkların bulunduğu hesaplardan ayırmak için zk-SNARK'ların kullanılmasını önerir. Bu, gizliliği, kullanıcı deneyimini ve tek tıklamayla sosyal kurtarmayı geliştirir. Ethereum araştırmacısı Toni Wahrstätter, bu cüzdan prototipinin iş akışını ve avantajlarını kapsayan ayrıntılı bir analizini sunuyor.
Birden fazla hesabı yönetmek, sosyal kurtarma, gizlilik, L2 ve genel kullanıcı deneyimi sorunları gibi çeşitli nedenlerden dolayı zor olabilir. Gizli bir adres kullanmak işleri daha da karmaşık hale getirir çünkü her etkileşim yeni bir hesap gerektirir. Vitalik, ticaret mantığı hesaplarını varlıkların bulunduğu hesaplardan ayırmak için zk-SNARK'ların kullanılmasını önerir. Bu, gizliliği, kullanıcı deneyimini ve tek tıklamayla sosyal kurtarmayı geliştirir.
Özetle, başarmaya çalıştığımız şey şudur:
**Gizlilikten ödün vermeden tek noktadan sosyal kurtarma. **
1. Geleneksel yöntem
Basit ama gizlilikten ödün veren bir uygulama şuna benzer:
Dezavantajı ise bunun mantıksal hesapları ve varlık tutma hesaplarını halka açık bir şekilde birbirine bağlaması ve dolayısıyla mahremiyetten ödün verilmesidir.
2. ZK-SNARK'ı kullanın
Kullanıcılar zk-SNARK'ları kullanarak, mantıksal tutma hesabı ile varlık tutma hesabı arasındaki bağlantıyı açığa çıkarmadan harcama yapmaya yetkili olduklarını kanıtlayabilirler.
İş akışı aşağıdaki gibidir:
1.1. Bir Merkle ağacı temel olarak mevcut her sözleşmenin slot0 ve slot1 değerlerini tarihe veya isme göre sıralanmış olarak içerir.
1.2. Her kullanıcı, en son duruma göre yerel olarak bir Merkle ağacı oluşturabilir.
Kullanıcı mantıksal tutma hesabındaki sırrı bildiğini kanıtlamak için bir zk kanıtı oluşturur. Kanıt daha sonra ayrıntılı olarak açıklanacaktır.
Kullanıcı varlık tutma hesabına zk-proof gönderir.
Aşağıdakileri doğrulayan varlık tutma hesabı doğrulama sertifikası:
4.1 Kullanıcılar mantığın nerede olduğunu bilir.
4.2 Kullanıcı, mantıksal tutma hesabında saklanan değerle karma hale getirilen ve eşleştirilen gizli bir değeri bilir.
4.3 Kullanıcılar, kanonik zincirde tutulan Merkle ağaç kökü hesap durumunu yeniden oluşturabilir (örn. önceden derlenmiş)
4.4 Doğru rastgele sayıları kullanın (mantıksal saklama hesaplarındaki anahtarları değiştirmek için kullanılır).
Temel olarak bir kullanıcı, "Bu eylemi gerçekleştirmek için mantıksal tutma hesabından kanıtlanabilir izne sahibim ve bu mantıksal hesabın konumunu biliyorum" diyebilir.
avantaj
Ek olarak, mantık ile varlık tutma sözleşmesi arasına başka bir (toplayıcı) sözleşme eklenerek, tek bir işlemde farklı varlık tutma hesaplarının birden fazla kanıtı sağlanarak, hesabın neredeyse bir UTXO gibi ele alınmasına olanak sağlanır. Toplayıcılar birden fazla zk sertifikası alabilecek ve bunları doğrulama için ilgili varlık tutma hesaplarına gönderebilecek. Elbette böyle bir toplayıcı, bireysel varlık tutma hesapları arasında gizlilik de dahil olmak üzere bağlantılar oluşturabilir.
teknik detaylar
zk-SNARK ayarı özel öğeler içerir:
1. Mantıksal tutma hesabı
Mantıksal bir tutma hesabının prototipi şöyle görünebilir:
Pragma sağlamlığı >=0,7,0 <0,9,0;
sözleşme Mantık Tutma Hesabı Sahiplenilebilir { uint256 public slot0 = 0x1234; // karma gizli uint256 genel nonce = 0; // genel sahibin adresindeki önemli değişiklikleri takip edin;
function updateOwner(uint256 newValue) public onlyOwner { nonce += 1; slot0 = yeniDeğer;
Bu sözleşme, sahibinin mevcut harcama mantığını (slot0) izler ve updateOwner işlevi aracılığıyla güncellemelere izin verir.
2. Hesap tutma hesabı
Pragma sağlamlığı >=0,7,0 <0,9,0;
sözleşme AssetHoldingAccount { uint256 genel mantıkHoldingAccountHash = 1234...;
// Skaler alan boyutu, Temel alan boyutu, Doğrulama Anahtarı verileri vb. // ...
fonksiyon doğrulamaProof( uint [2] çağrı verileri _pA, uint [2] [2] çağrı verileri _pB, uint [2] çağrı verileri _pC, uint [2] calldata _pubSignals) genel görünüm döndürür (bool val) { // Kanıt doğrulaması için Snarkjs derleme kodu... // ... }
// _pubSinyaller [0] - sözleşme-slot0||nonce Merkle ağacının kökü // _pubSignals [1] - hased mantıksal tutucu adresi işlevi ute( ödenecek adres, uint256 miktarı, uint [2] çağrı verileri _pA, uint [2] [2] çağrı verileri _pB, uint [2] çağrı verileri _pC, uint [2] calldata _pubSignals) public { ContractRootPrecompile.getRoot(block.number) uint256 belirtilenLogicHolder = _pubSignals [1] ; require(specifiedLogicHolder == LogicHoldingAccountHash, "İzin verilmiyor");
bool validProof = validProof(_pA, _pB, _pC, _pubSignals) == true; if (validProof) { (bool başarı,) = to.call{value:amount}(""); gerektirir(başarı); } }
alma() harici borç {
Varlık tutma hesapları, ETH gibi varlıkları saklar ve kullanıcıların para çekme kanıtlarını göndermesine olanak tanır. Belirtilen LogicHolder'ın LogicHoldingAccountHash ile eşleştiğini doğrulayarak, sahip, varlık tutma sözleşmesinin herhangi bir keyfi sözleşme yerine yalnızca yetkili mantıksal tutma sözleşmesindeki kanıtları kabul etmesini sağlayabilir.
Kanıt oluşturulurken özel sinyal olarak sağlanan sır, varlık tutma hesabındaki fonlara yalnızca harcama mantığını içeren hesap sahibinin erişebilmesini sağlar.
3. Devre
Aşağıdaki devre circcom kullanılarak geliştirildi, kodun tamamı burada bulunabilir.
pragma circom 2.0.2;
include "./modules/merkleTree.circom";include "./modules/commitmentHasher.circom";
şablon Ana(seviyeler) { sinyal girişi kökü; sinyal giriş mantığıHoldingAddressHash; sinyal giriş mantığıHoldingAddress; sinyal girişi sırrı; sinyal girişi bir kez; sinyal giriş yoluElemanları [levels] ; sinyal giriş yolu Endeksleri [levels] ; bileşen secretHasher = SecretHasher(); secretHasher.secret <== gizli; bileşen karma = CommitmentHasher(); hasher.logicHoldingAdresi <== mantıksalHoldingAdresi; hasher.secret <== secretHasher.hashedSecret; hasher.bir kez <== bir kez; hasher.logicHoldingAddressHash === LogicHoldingAddressHash; bileşen ağacı = MerkleTreeChecker(seviyeler); ağaç.leaf <== hasher.taahhüt; ağaç.root <== kök; for ( i = 0; i < düzeyler; i++) { ağaç.yolElemanları [i] <== yolElemanları [i] ; Tree.pathIndices [i] <== yol Endeksleri [i] ;
bileşen main {public [root,logicHoldingAddressHash]} = Main(N);
Devrede, Merkle ağaç kökü ve mantıksal tutma hesabının karma adresi olmak üzere 2'si halka açık toplam 7 sinyal bulunur (gözlemcilerin hesabı toplamasını önlemek için varlık tutma sözleşmesine kodlanmadan önce karma yapılması gerekir). sınıf) sahibi hesapla aynı mantığa dayalıdır).
Sonuç olarak
Kullanıcıların birden fazla hesabı yönetmek zorunda olduğu bir dünyada, tek noktadan sosyal kurtarma işlevine duyulan ihtiyaç giderek daha önemli hale geliyor. Zk-SNARK, mantık/varlık ayrımını uygulayan cüzdanlarda kullanılabilir ve kullanıcıların, ikisi arasında bir bağlantı oluşturmadan Hesap A'nın "mantığını" kullanarak Hesap B'den harcama yapmalarına olanak tanır. İlk adım olarak SNARK kanıtları, varlık harcamalarından daha az riskli eylemler için kullanılabilir. Örneğin, kullanıcıların "para çekme isteklerini" başlatmasına izin vermek iyi bir başlangıç noktası olabilir. Mantık tutma sözleşmesinin sahibinin itiraz etmemesi halinde kullanıcı, talebini bir süre sonra sonuçlandırabilir.
Bu şekilde, mantıksal tutma sözleşmesinin sahibi, beklenmeyen bir durum olması durumunda gizliliği ihlal edecek şekilde de olsa müdahale edebilir.