المعاملات المجهولة
يتم بناء المعاملات المجهولة في Iroha من عمليات الأصول السرية. بدلاً من كتابة التحويلات بين الحسابات العامة مع الأموال العامة ، تقوم المحفظة بنقل القيمة إلى دفتر كبير محمي ومن ثم تنفق ملاحظات غير شفافة مع أدلة على عدم وجود معرفة صفر.
لا يزال دفتر الرسوم العام يسجل أن عملية سرية حدثت. إنه يسجل الالتزامات والإلغاءات والتحققات، والأحداث ، لكنه لا يسجل مالك المذكرة أو المستلم ، أو مبلغ حركة محمية إلى محمية. لا يزال غلاف المعاملات العادي قد يكشف عن الحساب المقدم، لذلك "المجهول" هنا يعني حركة الأصول المجهولة، وليس الهوية الآلية على مستوى الشبكة أو المستوى الحسابي.
كتلة بناء
| المفهوم | تمثيل الكتيبات |
|---|---|
| ملاحظة محمية | سجل محفظة خاصة تحتوي على أصول، مبلغ، بيانات المالك، والصدفة. |
| الالتزام | قيمة عامة 32 بايت تلتزم بملاحظة دون الكشف عن حقلها. |
| إبطال | قيمة عامة من 32 بايت مشتقة عندما يتم إنفاق مذكرة. Iroha يرفض الإبطال المتكرر لمنع الانفاق المزدوج . |
| جذور ميركل | جذور حديثة من شجرة الالتزام في الأصول. الأدلة تستخدمها لإظهار وجود النقود المصروفة |
| إصدار دليل | ProofAttachment يحتوي على بايتات إثبات بالإضافة إلى مرجع مفتاح التحقق أو مفتاح التأكيد الداخلي. |
| حدث سري | حدث في دفتر التسجيل مثل ConfidentialEvent::Shielded، Transferred، أو Unshielded. |
التعليمات الرئيسية هي:
RegisterZkAsset: يسجل الأصول باعتبارها قادرة على ZK، ويربط مفاتيح التحقق من النقل والحماية وعدم الحماية.Shield: يدفع الرصيد العام ويضيف الالتزام بقيمة محمية.ZkTransfer: ينفق النقود المحمية على الالتزامات الجديدة بالنقود.Unshield: ينفق النقود المحمية ويعطي إئتمانات على رصيد حساب عام.ScheduleConfidentialPolicyTransitionوCancelConfidentialPolicyTransition: تغيير سياسة السرية في الأصول من خلال الحوكمة.
يحتوي تعريف الأصول أيضًا على AssetConfidentialPolicy.
| الوضع | المعنى |
|---|---|
TransparentOnly | لا تقبل سوى الرصيد العام العادي والتحويلات. |
Convertible | يمكن للمستخدمين تحريك القيمة بين الرصيدات العامة والملاحظات المحمية. |
ShieldedOnly | يجب أن تبقى إصدار الأصول ونقلاتها في دفتر الدراسة المحمية. |
كيفية استخدامها
- تمكين الدعم السري على عقدات التحقق. يجب أن يوافق المحققون على الخلفية المؤكدة ومفاتيح التحقق النشطة ومعلم Poseidon/Pedersen IDs ونسخة القواعد السرية. ترفض العقدات الأقران أو الكتل التي لا تتناسب مع إضافة ميزات السرية.
- نشر أو تسجيل مفاتيح التحقق ومجموعات المعايير المستخدمة من قبل الدوائر. يجب على المحافظ والمشغليين الإشارة إلى مفاتيح في
VerifyingKeyId، على سبيل المثالhalo2/ipa:vk_transfer. - سجل الأصل باعتباره ZK قابلاً للاستثمار مع
RegisterZkAsset، أو قم بنقل سياسة منTransparentOnlyإلىConvertibleأوShieldedOnly. - الحماية من الأموال العامة مع
Shield. يقوم المحفظة بإنشاء الالتزام بالمذكرات والحمولة المفيدة المشفرة للمستلم قبل تقديم المعاملة. - النقل بشكل خاص مع
ZkTransfer. يقوم المحفظة ببناء دليل على أنها تمتلك ملاحظات المدخلات، وأن قيم الدخول والإخراج تتوازن، وأن كل ملاحظة نفقت مقيدة في شجرة التزام حديثة. - لا يتم إلغاء الحماية إلا عندما تسمح سياسة الأصول بذلك.
Unshieldيكشف عن المبلغ العام وحساب المستفيد ، وينفق إبطال النقود الخاصة ، ويمكن أن يخلق نتائج التغييرات الخاصة. - المراجعة من خلال قراءة الأحداث السرية، سجلات الأدلة، حالة الإبطال، وسجلات الاحتفاظ بالأمانة المجهولة عن طريق الاستفسارات المطبوعة و Torii نقاط النهاية.
CLI مثال
تستهدف الأوامر ZK CLI لتدفقات المشغل واختبارها. يجب أن تولد محفظات الإنتاج التزامات، والحمولات المفيدة المشفرة، والدليلات مع مكتبة محفظة/معتبر قبل تقديم التعليمات الناتجة.
تسجيل الأصول المختلفة ZK:
iroha app zk register-asset \
--asset <asset-definition-id> \
--allow-shield true \
--allow-unshield true \
--vk-transfer halo2/ipa:vk_transfer \
--vk-unshield halo2/ipa:vk_unshield \
--vk-shield halo2/ipa:vk_shieldقم ببناء تغطية محفوفة بالشحنة المشفرة للخطاب المحمي:
iroha app zk envelope \
--ephemeral-pubkey 0101010101010101010101010101010101010101010101010101010101010101 \
--nonce-hex 020202020202020202020202020202020202020202020202 \
--ciphertext-b64 AQIDBA== \
--print-json \
--output note-envelope.binالحماية من الأموال العامة في سجل الأصول المحمي:
iroha app zk shield \
--asset <asset-definition-id> \
--from <account-id> \
--amount 1000 \
--note-commitment ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB \
--enc-payload note-envelope.binإنقطاع الحاجز مع إصدار ثابت JSON:
cat > unshield-proof.json <<'JSON'
{
"backend": "halo2/ipa",
"proof_b64": "BASE64_PROOF_BYTES",
"vk_ref": {
"backend": "halo2/ipa",
"name": "vk_unshield"
}
}
JSON
iroha app zk unshield \
--asset <asset-definition-id> \
--to <account-id> \
--amount 1000 \
--inputs DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF \
--proof-json unshield-proof.jsonSDK مثال
تأتي البايتات الدقيقة للدليل من الخلفية المؤكدة التي تم تشكيلها. يحتاج حمولة المعاملة فقط إلى المدخلات العامة ورابط الإثبات:
use iroha_data_model::{
isi::zk::{Unshield, ZkTransfer},
prelude::{AccountId, AssetDefinitionId, InstructionBox},
proof::{ProofAttachment, ProofBox, VerifyingKeyId},
};
fn transfer_instruction(
asset: AssetDefinitionId,
input_nullifier: [u8; 32],
output_commitment: [u8; 32],
anchor_root: [u8; 32],
proof_bytes: Vec<u8>,
) -> InstructionBox {
let backend = "halo2/ipa".into();
let proof = ProofBox::new(backend, proof_bytes);
let vk = VerifyingKeyId::new("halo2/ipa", "vk_transfer");
let attachment = ProofAttachment::new_ref("halo2/ipa".into(), proof, vk);
ZkTransfer::new(
asset,
vec![input_nullifier],
vec![output_commitment],
attachment,
Some(anchor_root),
)
.into()
}
fn unshield_instruction(
asset: AssetDefinitionId,
recipient: AccountId,
amount: u128,
input_nullifier: [u8; 32],
anchor_root: [u8; 32],
proof_bytes: Vec<u8>,
) -> InstructionBox {
let backend = "halo2/ipa".into();
let proof = ProofBox::new(backend, proof_bytes);
let vk = VerifyingKeyId::new("halo2/ipa", "vk_unshield");
let attachment = ProofAttachment::new_ref("halo2/ipa".into(), proof, vk);
Unshield::new(
asset,
recipient,
amount,
vec![input_nullifier],
attachment,
Some(anchor_root),
)
.into()
}الاحتفاظ بالأصول المجهولة
تستخدم الاحتفاظ بالأصول المجهولة نفس الآلة التحويلية المحمية للقيمة المحمية. لا يزال يتم تسجيل الأطراف وحالة الاحتفال في سجل الاحتفاض، ولكن أقدام التمويل والإفراج والإلغاء والتصدي تستخدم محميات الإبطال والتزامات الخروج.
للحصول على تفاصيل عن سلوك الاحتفاظ ISI ومثلة، انظر الأصول الأصلية الاحتفاض .
دورة الحياة هي:
OpenAnonymousAssetEscrowتنفق أوراق تمويل محمية وخلق تعهد واحد في الاحتفاظ بها.AcceptAnonymousAssetEscrowتسجل المشتري.MarkAnonymousEscrowPaymentSentسجل أن المشتري أرسل الدفع خارج سلسلة.ReleaseAnonymousAssetEscrowتنفق الالتزامات الاحتفاظ بها على التزامات المشترين.CancelAnonymousAssetEscrowينفق الالتزامات الاحتفاظ بها مرة أخرى على التزامات الناتج من البائع عندما لا يتم وضع علامة على الدفع.OpenAnonymousEscrowDisputeوResolveAnonymousEscrowDisputeيتعاملون مع الاحتياطيات المتنازع عليها مع حشيشات الأدلة وتقسيم يتم التحكم فيه من قبل القرار
استخدم استفسارات الاحتفاظ بالأمانة المجهولة المدرجة في استفسارات للتفتيش على سجلات الأمانة والحالة.
الرياضيات
يصف الملاحظة أدناه تدفق الأصول السرية. تستخدم التنفيذات الدائرة النشطة والبرامج IDs من سياسة الأصول ومسجل المؤكد ، لذلك يجب على العملاء التعامل مع الالتزامات والإبطالات وبايتات الدليل كخروجيات غير شفافة من المحفظة / البيانات.
يمكن وصف المذكرة المحمية على النحو:
حيث يتم استنباط owner من المواد التي يشاهدها المستلم أو ينفقها، و rho هو ملاحظة عشوائية.
الالتزام بالذكرة هو التزام مخفي
بالنسبة لدورات النقل السرية الحالية ، تتضمن المدخلات العامة التزامات الملاحظات ، والإبطالات ، وجذر Merkle ، ومدفع الأصول ، ومدفوع سلسلة. تفرض الدوائر علاقة الالتزام بهذا الشكل:
عندما يتم إنفاق مذكرة، فإن المحفظة تحصل على إبطال:
N عامة. لا تكشف عن النقود، ولكنها مستقرة لهذا النقود والسلسلة، لذلك يمكن لـ Iroha رفض إنفاق ثاني مع نفس المصدر.
شجرة الالتزام تثبت وجود ملاحظة. إذا كانت محفظة تنفق الالتزام C_i ، فإن الدليل يتضمن مسار Merkle الخاص من C_i إلى جذور عامة حديثة:
بالنسبة لنقل محصن إلى محصن، فإن البرهان يفرض أيضاً الحفاظ على القيمة:
بالنسبة لمبلغ غير محمي، يتم تضمين المبلغ العام:
يمكن تلخيص الدليل المقدم على النحو التالي:
حيث public_inputs هي الالتزامات والإبطالات، الجذر، علامة الأصول، علامة السلسلة، وأي مبلغ غير مدفوع للجمهور. يحتوي الشاهد على مبالغ النقود، والتصوير العشوائي، ومواد الإنفاق، وطرق Merkle. يقوم المحققون بالتحقق من الدليل ومن ثم يتغيرون حالة دفتر التسجيل عن طريق إضافة الالتزامات المصدرة وتعلامف محطات الإدخال على أنها قد نفذت.
ما هو عام
لا تجعل المعاملات المجهولة كل الحقائق المرئية خصوصية. يمكن أن تكون البيانات التالية عامة:
- hash المعاملة، ارتفاع الكتل، والطلب
- سلطة المعاملات المقدمة ما لم تستخدم الطلب نقطة دخول خاصة أو نمط مستوى ثانوي.
- تعريف الأصول المستخدمة
- الإبطال والالتزامات المصدرة
- الهاشات الإثباتية، وإشارات مفتاح التحقق، والهاشات الخيارية في الغلاف
- المبلغ العام وحساب المستفيد عن
Unshield - البائع المحتفظة المجهول، والمشتري، والحالة، والخوابات الزمنية، والأدلة.
تصميم التطبيقات بحيث هذه البيانات العامة لا تكشف عن العلاقة التجارية التي تحاول حمايتها.