العقود الآجلة
وصول إلى مئات العقود الدائمة
TradFi
الذهب
منصّة واحدة للأصول التقليدية العالمية
الخیارات المتاحة
Hot
تداول خيارات الفانيلا على الطريقة الأوروبية
الحساب الموحد
زيادة كفاءة رأس المال إلى أقصى حد
التداول التجريبي
مقدمة حول تداول العقود الآجلة
استعد لتداول العقود الآجلة
أحداث مستقبلية
"انضم إلى الفعاليات لكسب المكافآت "
التداول التجريبي
استخدم الأموال الافتراضية لتجربة التداول بدون مخاطر
إطلاق
CandyDrop
اجمع الحلوى لتحصل على توزيعات مجانية.
منصة الإطلاق
-التخزين السريع، واربح رموزًا مميزة جديدة محتملة!
HODLer Airdrop
احتفظ بـ GT واحصل على توزيعات مجانية ضخمة مجانًا
منصة الإطلاق
كن من الأوائل في الانضمام إلى مشروع التوكن الكبير القادم
نقاط Alpha
تداول الأصول على السلسلة واكسب التوزيعات المجانية
نقاط العقود الآجلة
اكسب نقاط العقود الآجلة وطالب بمكافآت التوزيع المجاني
التعافي الاجتماعي الشامل: كيف تدرك zk-SNARKs الفصل بين منطق معاملات المحفظة وأصولها؟
المؤلف الأصلي: @Toni Wahrstätter
تاريخ الإصدار: 12 سبتمبر 2023
ترجمة: معهد أبحاث ديبوكس
مقدمة
يوصي Vitalik باستخدام zk-SNARKs لفصل حسابات منطق التداول عن الحسابات التي تحتفظ بالأصول. يؤدي ذلك إلى تحسين الخصوصية وتجربة المستخدم والاسترداد الاجتماعي بنقرة واحدة. يقدم الباحث في إيثريوم، توني واهرستاتر، تحليلاً مفصلاً لهذا النموذج الأولي للمحفظة، يغطي سير العمل والمزايا.
يمكن أن تشكل إدارة حسابات متعددة تحديًا لعدة أسباب، بما في ذلك التعافي الاجتماعي والخصوصية واللغة الثانية ومشكلات تجربة المستخدم بشكل عام. إن استخدام عنوان خفي يجعل الأمور أكثر تعقيدًا لأن كل تفاعل يتطلب حسابًا جديدًا. يوصي Vitalik باستخدام zk-SNARKs لفصل حسابات منطق التداول عن الحسابات التي تحتفظ بالأصول. يؤدي ذلك إلى تحسين الخصوصية وتجربة المستخدم والاسترداد الاجتماعي بنقرة واحدة.
باختصار ما نحاول تحقيقه هو:
** التعافي الاجتماعي الشامل دون المساس بالخصوصية. **
1. الطريقة التقليدية
يبدو التنفيذ البسيط ولكن المساس بالخصوصية كما يلي:
والعيب هو أن هذا يربط بشكل علني بين الحسابات المنطقية وحسابات الأصول، مما يعرض الخصوصية للخطر.
2. استخدم ZK-SNARK
باستخدام zk-SNARKs، يمكن للمستخدمين إثبات أنهم مصرح لهم بالإنفاق دون الكشف عن العلاقة بين حساب الاحتفاظ المنطقي وحساب الاحتفاظ بالأصول.
سير العمل هو كما يلي:
1.1 تحتوي شجرة Merkle بشكل أساسي على قيم الفتحة0 والفتحة1 لكل عقد موجود مرتبة حسب التاريخ أو الاسم.
1.2 يمكن لكل مستخدم إنشاء شجرة Merkle محليًا بناءً على أحدث حالة.
يقوم المستخدم بإنشاء دليل zk لإثبات أنه يعرف السر في حساب الحجز المنطقي. والدليل بالتفصيل لاحقا.
يرسل المستخدم إثبات zk إلى حساب الاحتفاظ بالأصول.
شهادة التحقق من حساب الأصول، والتي تؤكد ما يلي:
4.1 يعرف المستخدمون أين يوجد المنطق.
4.2 يعرف المستخدم قيمة سرية تم تجزئتها وتعيينها للقيمة المخزنة في حساب الحجز المنطقي.
4.3 يمكن للمستخدمين إعادة بناء حالة الحساب، جذر شجرة Merkle الذي تم الحفاظ عليه في السلسلة الأساسية (على سبيل المثال، المترجمة مسبقًا)
4.4 استخدم الأرقام العشوائية الصحيحة (المستخدمة لتبديل المفاتيح في حسابات الاحتفاظ المنطقية).
بشكل أساسي، يمكن للمستخدم أن يقول: “لدي إذن يمكن إثباته من حساب الحجز المنطقي لتنفيذ هذا الإجراء، وأعرف موقع هذا الحساب المنطقي.”
ميزة
بالإضافة إلى ذلك، من خلال إضافة عقد (مجمع) آخر بين المنطق وعقد الاحتفاظ بالأصول، يمكن تقديم أدلة متعددة لحسابات الاحتفاظ بالأصول المختلفة في معاملة واحدة، مما يسمح بمعاملة الحساب تقريبًا مثل UTXO. سيتمكن المجمعون من الحصول على شهادات zk متعددة وإرسالها إلى حسابات الأصول الخاصة بهم للتحقق منها. وبطبيعة الحال، يمكن لمثل هذا المجمع إنشاء روابط - بما في ذلك الخصوصية - بين حسابات الأصول الفردية.
تفاصيل تقنية
يتضمن إعداد zk-SNARK عناصر خاصة:
1. حساب عقد منطقي
قد يبدو النموذج الأولي لحساب الحجز المنطقي كما يلي:
صلابة براغما >=0.7.0 <0.9.0؛
العقد LogicHoldingAccount قابل للامتلاك { uint256 public Slot0 = 0x1234; // سر مجزأ uint256 public nonce = 0; // تتبع التغييرات الرئيسية في عنوان المالك العام؛
وظيفة updateOwner(uint256 newValue) public OnlyOwner { nonce += 1; Slot0 = newValue;
يتتبع هذا العقد منطق الإنفاق الحالي للمالك (الفتحة 0) ويسمح بالتحديثات عبر وظيفة updateOwner.
2. حساب الاحتفاظ بالحساب
صلابة براغما >=0.7.0 <0.9.0؛
Contract AssetHoldingAccount { uint256 public logicHoldingAccountHash = 1234…;
// حجم الحقل العددي، وحجم الحقل الأساسي، وبيانات مفتاح التحقق، وما إلى ذلك. // …
وظيفة التحقق من (uint [2] بيانات الاتصال _pA, uint [2] [2] بيانات الاتصال _pB, uint [2] بيانات الاتصال _pC, uint [2] calldata _pubSignals) إرجاع العرض العام (bool val) { // كود تجميع Snarkjs للتحقق من الإثبات… // … }
// _pubSignals [0] - جذر العقد-slot0||nonce Merkle Tree // _pubSignals [1] - وظيفة عنوان صاحب المنطق Hased ute (العنوان المستحق لـ، مبلغ uint256، uint [2] بيانات الاتصال _pA, uint [2] [2] بيانات الاتصال _pB, uint [2] بيانات الاتصال _pC, uint [2] calldata _pubSignals) public { ContractRootPrecompile.getRoot(block.number) uint256 المحددLogicHolder = _pubSignals [1] ; require(specifiedLogicHolder == logicHoldingAccountHash, “غير مسموح به”);
bool validProof = VereProof(_pA, _pB, _pC, _pubSignals) == true; إذا (validProof) { (نجاح منطقي،) = to.call{value:amount}(“”); تتطلب(النجاح); } }
تلقي () الخارجية المستحقة {
تقوم حسابات الأصول بتخزين الأصول مثل ETH وتسمح للمستخدمين بتقديم دليل على عمليات السحب. من خلال التحقق من تطابق LogicHolder المحدد مع logicHoldingAccountHash، يمكن للمالك التأكد من أن عقد الاحتفاظ بالأصل يقبل فقط البراهين من عقد الاحتفاظ المنطقي المعتمد، بدلاً من أي عقد تعسفي.
يضمن السر المقدم كإشارة خاصة عند إنشاء الدليل أن مالك الحساب الذي يحتوي على منطق الإنفاق فقط هو الذي يمكنه الوصول إلى الأموال من حساب الاحتفاظ بالأصول.
3. الدائرة
تم تطوير الدائرة التالية باستخدام circom، ويمكن العثور على الكود الكامل هنا.
براغما سيركوم 2.0.2؛
include “./modules/merkleTree.circom”;include “./modules/commitmentHasher.circom”;
القالب الرئيسي (المستويات) {جذر إدخال الإشارة؛ منطق إدخال الإشارةHoldingAddressHash; منطق إدخال الإشارةHoldingAddress; سر إدخال الإشارة؛ إدخال الإشارة نونس؛ عناصر مسار إدخال الإشارة [levels] ; مسار إدخال الإشارة [levels] ; مكون SecretHasher = SecretHasher(); SecretHasher.secret <== Secret; تجزئة المكون = CommitmentHasher(); hasher.logicHoldingAddress <== logicHoldingAddress; hasher.secret <== SecretHasher.hashedSecret; hasher.nonce <== nonce; hasher.logicHoldingAddressHash === logicHoldingAddressHash; شجرة المكونات = MerkleTreeChecker(levels); Tree.leaf <== hasher.commitment; Tree.root <== root; for ( i = 0; i <levels; i++) { Tree.pathElements [i] <== pathElements [i] ; Tree.pathIndices [i] <== pathIndices [i] ;
المكون الرئيسي {public [root,logicHoldingAddressHash]} = Main(N);
تحتوي الدائرة على إجمالي 7 إشارات، اثنتان منها عامة، وهي جذر شجرة Merkle وعنوان التجزئة لحساب الاحتفاظ المنطقي (الذي يجب تجزئته قبل تشفيره في عقد الاحتفاظ بالأصول لمنع المراقبين من تجميع الحساب) class) بناءً على نفس منطق حساب المالك).
ختاماً
في عالم حيث يجب على المستخدمين إدارة حسابات متعددة، أصبحت الحاجة إلى وظيفة التعافي الاجتماعي الشاملة ذات أهمية متزايدة. يمكن استخدام Zk-SNARK في المحافظ التي تنفذ فصل المنطق/الأصول، مما يسمح للمستخدمين باستخدام “منطق” الحساب “أ” للإنفاق من الحساب “ب” دون إنشاء رابط بين الاثنين. كخطوة أولى، يمكن استخدام إثباتات SNARK في الإجراءات الأقل خطورة من نفقات الأصول. على سبيل المثال، قد تكون نقطة البداية الجيدة هي السماح للمستخدمين ببدء “طلبات السحب”. إذا لم يقم مالك عقد المنطق باعتراض، فيمكن للمستخدم إنهاء الطلب بعد فترة من الوقت.
بهذه الطريقة، لا يزال بإمكان مالك عقد الملكية المنطقي التدخل، ولو بطريقة تنتهك الخصوصية، في حالة حدوث شيء غير متوقع.