Анонимді операциялар
Iroha -дағы анонимді транзакциялар құпия активтер операцияларынан құрылады. Қоғамдық сомалармен ашық шоттан-шотқа аударымдарды жазудың орнына, қоршалған кітапханаға құнды көшіреді және одан кейін нөлдік білімді дәлелдемелермен мөлдір емес жазбаларды жұмсады.
Қоғамдық кітапша әлі күнге дейін құпия операция болғандығын тіркейді. Ол міндеттемелерді, күшін жоюшыларды, дәлелденуші хештарды және оқиғаларды тіркейді, бірақ ол жазба иеленушісін, алушыны немесе қорғалғаннан қорғалғанға қозғалған соманы тіркемейді. Әдеттегі транзакция конверті әлі күнге дейін тапсырушы шотты аша алады, сондықтан "аноним" дегеніміз бұл жерде желі деңгейіндегі немесе шот деңгейіндегі автоматты анонимділік емес, анонимді активтердің қозғалысы.
Құрылыс блоктары
| Тұжырымдама | Кітаптық есептік жазбалар |
|---|---|
| Қорғалған жазба | Жеке қапшықта актив, сома, меншік иесінің деректері және кездейсоқлығы бар жеке жазба. |
| Қатысуы | 32 байттан тұратын қоғамдық құндылық, ол оның өрістерін ашпай-ақ жазбаға міндетті. |
| Түсіндіруші | Iroha қосарланған шығындарды болдырмау үшін қайталанатын құнсыздаушыларды бас тартады. |
| Меркел тамыры | Бұл активтің міндеттеме ағашының жақында пайда болған тамыры. Дәлелдемелер оны жұмсалған банкноттар бар екенін көрсетуге қолданады. |
| Құжатты тіркеу | ProofAttachment құрамында дәлелді байттар, сондай-ақ тексеру кілті анықтамасы немесе желілік тексеру кілісі бар. |
| Құпия оқиға | ConfidentialEvent::Shielded, Transferred, немесе Unshielded сияқты бухгалтерлік есептік жазба оқиғасы. |
Негізгі нұсқаулар:
RegisterZkAsset: активті ZK ретінде тіркейді және трансфертті, қалқанды және қалқансыз тексеру кілттерін бекітеді.Shield: мемлекеттiк балансты берешегi және қорғалған банкнотаның мiндеттемесiн қосады.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 жұмсалса, дәлелдеме C_i-ден соңғы қоғамдық тамырға жеке Merkle жолы:
Қоршалғаннан қоршалғанға көшіру үшін дәлелдеме сондай-ақ құндылықты сақтауды талап етеді:
Қоршаусыз ақша үшін мемлекеттік сома мыналарды қамтиды:
Ұсынылған дәлелдеме мынадай түрде қорытылуы мүмкін:
мұнда public_inputs - міндеттемелер, күшін жоюшылар, тамырлар, активтер тегі, тізбек тегі және кез келген ашық қорғалмаған сома. куәлік нотаның мөлшерлерін, кездейсоқдықты, шығындар материалдарын және Меркл жолдарын қамтиды. Құрылтайлаушылар дәлелді тексеруді жүргізеді, содан кейін шығыс міндеттемелерін қоса отырып және кірісті жоққа шығарушыларды жұмсалған деп белгілеу арқылы бухгалтерлік кітаптың күйін өзгертеді.
Қоғамдық нәрселер
Анонимді транзакциялар барлық байқалатын фактілерді жеке емес етеді. Келесі деректер әлі күнге дейін ашық болуы мүмкін:
- транзакция хэші, блок биіктігі және тапсырыс беру
- тапсырушы транзакция органы, егер өтінім жеке кіріс нүктесі немесе релейлі үлгісін қолданбаса;
- пайдаланылатын активтер анықтамасы
- күшін жоюшылар және шығыс міндеттемелері
- дәлелдеу хэштегі, тексеру кілті сілтемелері және таңдаулы конверттің хэштегі
- мемлекеттік сома және
Unshieldүшін алушының шоты - анонимді кепілдіктерді сатушы, сатып алушы, мәртебесі, уақыт таңбалары және дәлелдену шешелері
Қолданбаларды жобалаңыз, сондықтан бұл қоғамдық метамәдени деректер сіз қорғауға тырысатын бизнес қарым-қатынасын аша алмайды.