Անանուն գործարքներ
Iroha -ի անանուն գործարքները կառուցվում են գաղտնի ակտիվների գործողություններից: Փոխանակ հանրային գումարներով հանրային հաշիվից հաշվին փոխանցումներ գրելու, դրամապանակը արժեքը տեղափոխում է պաշտպանված գլխավոր գրասենյակ եւ այնուհետեւ ծախսում է ոչ թափանցիկ նոտաներ զրոյական գիտելիքի ապացույցներով:
Հանրային գրքում դեռեւս գրանցվում է, որ գաղտնի գործողություն է տեղի ունեցել: Այն արձանագրում է պարտավորությունները, չեղարկիչները, ապացուցման հաշերը եւ իրադարձությունները, բայց չի արձանագրել նամակի սեփականատերը, ստացողը կամ ծավալը պաշտպանվածից պաշտպանված տեղափոխության համար: Սովորական գործարքի փաթեթը դեռ կարող է բացահայտել ներկայացնող հաշիվը, այնպես որ "անուն" նշանակում է անանուն ակտիվների տեղաշարժը, այլ ոչ թե ցանցային մակարդակի կամ հաշվի մակարդակի ավտոմատ անանունությունը:
Շինարարական բլոկներ
| Գլխավոր | Ledger- ի ներկայացումը |
|---|---|
| Պաշտպանված նոտա | Անձնական դրամապանակի արձանագրություն, որը պարունակում է ակտիվ, գումար, սեփականատերերի տվյալներ եւ պատահականություն: |
| Հանձնառություն | 32-բայտային հանրային արժեք, որը պարտավորվում է ծանոթագրության վրա՝ առանց դրա դաշտերը բացահայտելու: |
| Փոխարկիչ | 32-բայթային հանրային արժեք, որը ստացվում է նոտայի ծախսման ժամանակ: Iroha մերժում է կրկնակի ծախսերը կանխելու համար կրկնակի չեղարկման միջոցները: |
| Merkle արմատը | Աշունի պարտավորության ծառի վերջերս արմատը, ապացույցները օգտագործում են այն ցույց տալու համար, որ ծախսված գրքերը գոյություն ունեն: |
| Ապացույցի հավելվածը | 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 ուղիները: Վալիդատորները ստուգում են ապացույցը եւ այնուհետեւ փոխում են գլխավոր գրքի վիճակը՝ ավելացնելով արտադրանքի պարտավորությունները եւ նշելով մուտքային չեղարկիչները որպես ծախսված։
Ի՞նչ է հանրային
Անանուն գործարքները չեն դարձնում յուրաքանչյուր դիտարկելի փաստ գաղտնի: Հետեւյալ տվյալները դեռեւս կարող են հանրային լինել.
- գործարքի хэշը, բլոկի բարձրությունը եւ կարգավորումը
- փոխանցման ներկայացնող մարմինը, բացառությամբ այն դեպքերի, երբ դիմումը օգտագործում է մասնավոր մուտքի կետ կամ հետապնդումային ձեւաչափ:
- օգտագործվող ակտիվի սահմանումը
- չեղարկիչներ եւ արտադրանքային պարտավորություններ
- ապացուցման հիշեր, ստուգող բանալիների հղումներ եւ ընտրանքային փաթեթային հիշեր
Unshieldհանրային գումարը եւ ստացողի հաշիվը- անանուն վարկային վաճառող, գնորդ, կարգավիճակ, ժամադրություն եւ ապացույցներ
Ստեղծեք ծրագրեր, որպեսզի այս հանրային մետադատաները չբացահայտեն այն գործարար հարաբերությունները, որոնք փորձում եք պաշտպանել: