ანონიმური ოპერაციები
ანონიმური ტრანზაქციები Iroha აშენდება კონფიდენციალური აქტივების ოპერაციებიდან. საჯარო თანხებით საჯარო ანგარიშზე გადარიცხვების დაწერის ნაცვლად, ქაღალდი გადაიტანს ღირებულებას დაცულ ლიტერატურაში და შემდეგ ხარჯავს არაგამჭვირვალე ჩანაწერებს ნული ცოდნის მტკიცებულებებით.
საჯარო ბუღალტრში დღემდე ფიქსირდება, რომ მოხდა კონფიდენციალური ოპერაცია. ის აღნიშნავს ვალდებულებებს, გაუქმებებს, მტკიცებულების ჰეშებსა და მოვლენებს, მაგრამ არ აღნიშნავს ჩანაწერის მფლობელს, მიმღებელს ან თანხას დაცულიდან დაცულიდან გადაადგილებისათვის. ტრანზაქციის ჩვეულებრივ კონვერტზე შეიძლება კვლავ გაჟღერდეს წარდგენილი ანგარიში, ამიტომ "ანონიმური" აქ ნიშნავს ანონიმურ აქტივების მოძრაობას და არა ავტომატურ ქსელის დონეზე ან ანგარიშის დონეზე анонимურობას.
სამშენებლო ბლოკები
| კონცეფცია | ლიდერების წარმოდგენა |
|---|---|
| ფარდული შენიშვნა | კერძო საფულე ჩანაწერი, რომელიც შეიცავს აქტივს, თანხას, მფლობელის მონაცემებს და შემთხვევითობას. |
| ვალდებულება | 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 მაგალითი
ზუსტი მტკიცებულების ბაიტები მოდის კონფიგურირებული მტკიცებულება backend. ტრანზაქციის სასარგებლო ტვირთი მხოლოდ საჭიროებს საჯარო შეყვანები და მტკიცებულება attachment:
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 არის შენიშვნა შემთხვევითობა.
ნოტის ვალდებულება არის დამალული ვალდებულება:
მიმდინარე კონფიდენციალური გადაცემის ცირკულეტებისათვის, საჯარო შეყვანები მოიცავს ნოტის ვალდებულებებს, ანულიფერებს, მერკლ რძეს, აქტივის თარგს და ჯაჭვური თარგს. ცირკული ამ ფორმის ვალდებულებათა ურთიერთობას აამოქმედებს.
როდესაც ბარათი იხარჯება, საფულე იღებს ნულიფიკატორს:
N არის საჯარო. ის არ ასახავს ბარათს, მაგრამ ის სტაბილურია ამ ბარათისა და ჯაჭვისთვის, ასე რომ Iroha შეუძლია უარყოს მეორე ხარჯვა იმავე ნულიფიკატორით.
ვალდებულების ხე ადასტურებს ნოტის არსებობას. თუ კაპიკი ხარჯავს ვალდებულებას C_i, მტკიცებულება მოიცავს კერძო Merkle გზა C_i ახლახანს საჯარო ფესვამდე:
დაფარულიდან დაფარულზე გადაცემის შემთხვევაში, მტკიცებულება ასევე აძლევს ღირებულების შენარჩუნებას:
საჯარო თანხა განისაზღვრება უშუალოდ:
წარმოდგენილი მტკიცებულება შეიძლება შეჯამდეს შემდეგნაირად:
სადაც public_inputs არის ვალდებულებები, ანულიფიკატორები, ფესვი, აქტივების ნიშანი, ჯაჭვის ნიშანი და ნებისმიერი საჯარო არალეგირებული თანხა. მოწმე შეიცავს ნოტების თანხებს, შემთხვევითობას, ვალიდატორები ადასტურებენ დამტკიცებას და შემდეგ მუტირებენ ლიდერის მდგომარეობას გამომუშავების ვალდებულებების დამატებით და შესვლის ანულიფიტორების გათვალისწინებით, როგორც გამოყოფილი.
რა არის საჯარო
ანონიმური ტრანზაქციები არ განაპირობებს ყველა შესამჩნეველ ფაქტზე კონფიდენციალურობას. შემდეგი მონაცემები მაინც შეიძლება იყოს საჯარო:
- ტრანზაქციის ჰეში, ბლოკების სიმაღლე და შეკვეთები
- გზავნილის წარმომადგენელი ტრანზაქციის ორგანო, თუკი განაცხადი არ იყენებს კერძო შესასვლელ პუნქტს ან გადამდებარე სტრუქტურას
- გამოყენებული აქტივების განსაზღვრა
- ანულიფიკატორები და გამოდის ვალდებულებები
- დამტკიცების ჰეშები, საკვანძო რეფერენციები და ვარიანტიანი კონვერტის ჰეშები.
- საჯარო თანხა და მიმღებ ანგარიში
Unshield - ანონიმური მიმყიდველი, მყიდველი, სტატუსი, დროის შტამპები და მტკიცებულებების ჰეშები
შექმენით აპლიკაციები ისე, რომ ეს საჯარო მეტა მონაცემები არ გამოავლინოს ბიზნესი ურთიერთობა თქვენ ცდილობთ დაიცვას.