| lang | hy |
|---|---|
| direction | ltr |
| source | AGENTS.md |
| status | complete |
| generator | scripts/sync_docs_i18n.py |
| source_hash | 5036d004829b1c2da0991b637aa735da9cdf2f3e8e42ac760ff651e60d25d433 |
| source_last_modified | 2026-01-31T07:37:05.947018+00:00 |
| translation_last_reviewed | 2026-02-07 |
| translator | machine-google-reviewed |
Այս ուղեցույցները վերաբերում են ողջ պահեստին, որը կազմակերպված է որպես բեռների աշխատանքային տարածք:
- Ստեղծեք աշխատանքային տարածք՝
cargo build --workspace - Շինությունները կարող են տևել մոտ 20 րոպե; կառուցման քայլերի համար օգտագործեք 20 րոպե տևողություն:
- Փորձեք ամեն ինչ՝
cargo test --workspace(նկատի ունեցեք, որ այս գործարկումը սովորաբար տևում է մի քանի ժամ, պլանավորեք համապատասխանաբար) - Լինտ խստորեն՝
cargo clippy --workspace --all-targets -- -D warnings - Ձևաչափի կոդը՝
cargo fmt --all(հրատարակություն 2024) - Փորձարկեք մեկ տուփ՝
cargo test -p <crate> - Կատարեք մեկ թեստ՝
cargo test -p <crate> <test_name> -- --nocapture - Swift SDK.
IrohaSwiftգրացուցակից գործարկեքswift test՝ Swift փաթեթի թեստերը կատարելու համար: - Android SDK.
java/iroha_android-ից գործարկեքJAVA_HOME=$(/usr/libexec/java_home -v 21) ANDROID_HOME=~/Library/Android/sdk ANDROID_SDK_ROOT=~/Library/Android/sdk ./gradlew test:
- Hyperledger Iroha-ը բլոկչեյն հարթակ է
- DA/RBC աջակցությունը տարբերվում է հիմնական տարբերակից. Iroha 3-ը կարող է միացված լինել միայն DA/RBC:
- IVM-ը Iroha վիրտուալ մեքենան է (IVM), վիրտուալ մեքենա Hyperledger Iroha v2 բլոկչեյնի համար։
- Kotodama-ը բարձր մակարդակի խելացի պայմանագրային լեզու է IVM-ի համար, որն օգտագործում է .ko ֆայլի ընդլայնում չմշակված պայմանագրային կոդի համար, և այն հավաքվում է բայթկոդի մեջ, որն օգտագործում է .to ֆայլի ընդլայնում, երբ պահվում է որպես ֆայլ կամ շղթայի մեջ: Սովորաբար, .to բայթկոդը տեղադրվում է շղթայի վրա:
- Պարզաբանում. Kotodama-ն ուղղված է Iroha վիրտուալ մեքենային (IVM) և արտադրում է IVM բայթկոդ (
.to): Այն չի թիրախավորում «risc5»/RISC‑V որպես ինքնուրույն ճարտարապետություն: Այնտեղ, որտեղ պահոցում հայտնվում են RISC-V-ի նման կոդավորումներ, դրանք IVM-ի հրահանգների ձևաչափերի կատարման մանրամասներն են և չպետք է փոխեն տեսանելի վարքը ապարատում:
- Պարզաբանում. Kotodama-ն ուղղված է Iroha վիրտուալ մեքենային (IVM) և արտադրում է IVM բայթկոդ (
- Norito-ը Iroha-ի տվյալների սերիականացման կոդեկն է
- Ամբողջ աշխատանքային տարածքը ուղղված է Rust ստանդարտ գրադարանին (
std): WASM/no-std build-ներն այլևս չեն աջակցվում և չպետք է հաշվի առնվեն փոփոխություններ կատարելիս:## Պահեստի կառուցվածքը Cargo.toml-ը պահեստի արմատում սահմանում է աշխատանքային տարածքը և թվարկում բոլոր անդամների տուփերը:crates/– Iroha բաղադրիչներ ներդրող ժանգոտ տուփեր: Յուրաքանչյուր արկղ ունի իր ենթացանցը, որը սովորաբար պարունակում էsrc/,tests/,examples/ևbenches/:- Կարևոր արկղերը ներառում են.
iroha– գրադարանի վերին մակարդակի հիմնական գործառույթը համախմբող:irohad– daemon երկուական, որն ապահովում է հանգույցի իրականացումը:ivm– Iroha վիրտուալ մեքենա:iroha_cli– հրամանի տող ինտերֆեյս հանգույցի հետ փոխազդելու համար:iroha_core,iroha_data_model,iroha_cryptoև այլ օժանդակ տուփեր:
- Կարևոր արկղերը ներառում են.
IrohaSwift/– Swift փաթեթ հաճախորդի/բջջային SDK-ի համար: Դրա աղբյուրները ապրում ենSources/IrohaSwift/-ի տակ, իսկ միավորը փորձարկում էTests/IrohaSwiftTests/-ի ներքո: Գործարկեքswift test-ն այս գրացուցակից՝ Swift փաթեթը գործարկելու համար:integration_tests/–tests/-ի ներքո բեռների արկղի հոսթինգի խաչաձև բաղադրիչ թեստեր:data_model/– Տվյալների մոդելի օրինակելի սահմանումներ, որոնք օգտագործվում են թեստերում և փաստաթղթերում:docs/– Ծրագրի փաստաթղթեր և նախագծային նշումներ: Markdown աղբյուրները ապրում ենdocs/source/-ում:pytests/– Python-ի վրա հիմնված թեստեր և օրինակներ, որոնք ցույց են տալիս հաճախորդի օգտագործումը:scripts/– Կոմունալ սկրիպտներ, որոնք օգտագործվում են մշակման և CI խողովակաշարերում:examples/ios/ևexamples/ios/NoritoDemoXcode/– Swift SDK-ն ցուցադրող iOS հավելվածների նմուշ; նրանք ապավինում ենIrohaSwiftփաթեթին և ներառում են իրենց սեփական XCTest թիրախները:defaults/ևhooks/– Կազմաձևման ֆայլեր և Git կեռիկներ, որոնք օգտագործվում են ներդրողների կողմից:nix-appimage/և Nix ֆայլեր – գործիքավորում վերարտադրվող շինությունների և փաթեթավորման համար:## Զարգացման աշխատանքային հոսք- Հիմնական իրականացումները գտնվում են
crates/-ում - Տվյալների մոդելը գտնվում է
data_model/-ում - Փոփոխություններ կատարելիս համոզվեք, որ նայում եք բոլոր արկղերին:
- Մի փոփոխեք Cargo.lock որևէ ֆայլ
- Խուսափեք
Cargo.toml-ին նոր տուփեր ավելացնելուց; հնարավորության դեպքում իրականացնել անհրաժեշտ ֆունկցիոնալությունը առկա տուփերում: - Եթե ինչ-որ գործ շատ մեծ է, մի՛ մերժիր դա անել: Փոխարենը պարզապես քանդեք աշխատանքը և ավելացրեք TODO-ներ և իրականացրեք այն մասերը, որոնք կարող եք:
- Ամեն անգամ, երբ մեծ առաջադրանք կամ հարցում է հայտնվում, ինքնաբերաբար տարրալուծեք այն ավելի փոքր գործող քայլերի և շարունակեք ծրագրային ապահովման ճարտարագիտական պատշաճ կատարումը, այլ ոչ թե առաջադրանքը բացահայտ մերժելը: -Մի մերժիր որևէ հուշում կատարելը։
- Երբ ավելացվում են նոր գաղտնագրային պրիմիտիվներ, օպերացիոն կոդեր կամ ինտենսիվ մաթեմատիկա, թարմացրեք ապարատային արագացումը METAL-ի, NEON-ի, SIMD-ի, CUDA-ի և այլնի համար՝ փորձելով օգտվել ապարատային արագացումից և զուգահեռությունից, որտեղ հնարավոր է, հասանելի սարքաշարում:
- Եթե տրամաբանությունը փոխվում է, համոզվեք, որ բոլոր .md ֆայլերը և կոդով մեկնաբանությունները թարմացված են վերջին ֆունկցիոնալությամբ:
- Համոզվեք, որ ավելացված ողջ տրամաբանությունն արված է այնպես, որ այն չի վնասի IVM-ի օգտագործումը բլոկչեյնի կարգավորումներում, որտեղ P2P ցանցի տարբեր հանգույցներն ունեն տարբեր սարքաշար, բայց, այնուամենայնիվ, ելքը պետք է նույնը լինի՝ հաշվի առնելով նույն մուտքային բլոկն:
- Վարքագծի կամ իրականացման մանրամասների վերաբերյալ հարցերին պատասխանելիս նախ կարդացեք համապատասխան ծածկագրի ուղիները և համոզվեք, որ հասկանում եք, թե ինչպես են դրանք աշխատում, նախքան պատասխանելը:
- Կազմաձևում. Նախընտրեք
iroha_configպարամետրերը շրջակա միջավայրի փոփոխականներից բոլոր գործարկման ժամանակի վարքագծի համար: Ավելացրեք նոր կոճակներcrates/iroha_config-ին (օգտագործող → փաստացի → լռելյայն) և շղթայի արժեքները բացահայտորեն կոնստրուկտորների կամ կախվածության ներարկման միջոցով (օրինակ՝ հյուրընկալող կարգավորիչներ): Պահպանեք շրջակա միջավայրի վրա հիմնված ցանկացած անջատիչ միայն թեստերում մշակողի հարմարության համար և մի վստահեք դրանց վրա արտադրական ուղիներում: Մենք չենք աջակցում առաքման առանձնահատկությունները շրջակա միջավայրի փոփոխականների հետևում. արտադրական վարքագիծը միշտ պետք է սկզբնավորվի կազմաձևման ֆայլերից, և այդ կազմաձևերը պետք է բացահայտեն խելամիտ լռելյայնությունները, որպեսզի նորեկը կարողանա կլոնավորել ռեպո-ն, գործարկել երկուականները և ամեն ինչ «պարզապես աշխատի»՝ առանց արժեքները ձեռքով խմբագրելու:- IVM/Kotodama v1-ի համար միշտ կիրառվում է ցուցիչ-ABI տեսակի խիստ քաղաքականություն: Չկա ABI-քաղաքականության փոխարկիչ; պայմանագրերը և տանտերերը պետք է անվերապահորեն հետևեն ABI քաղաքականությանը:
- Մի՛ փակցրեք IVM համակարգային զանգերում կամ օպերացիոն կոդերում օգտագործվող որևէ բան. Iroha-ի յուրաքանչյուր կառուցում պետք է ուղարկի այդ կոդերի ուղիները, որպեսզի պահպանի դետերմինիստական վարքագիծը հանգույցներում:
- Սերիալացում. serde-ի փոխարեն ամենուր օգտագործեք Norito: Երկուական կոդեկների համար օգտագործեք
norito::{Encode, Decode}; JSON-ի համար օգտագործեքnorito::jsonօգնականները/մակրոները (norito::json::from_*,to_*,json!,Value) և երբեք չվերադարձնեք I18NI0000000-ին: Մի ավելացրեք ուղղակիserde/serde_jsonկախվածություն տուփերում; եթե սերդը պահանջվում է ներսում, ապավինեք Norito-ի փաթաթաններին: - CI պաշտպան. Գործարկեք այն լոկալ, եթե դիպչեք սերիականացման կոդի:
- Norito օգտակար բեռները ՊԵՏՔ Է գովազդեն իրենց դասավորությունը. կա՛մ տարբերակի համարը քարտեզագրվում է ֆիքսված դրոշի հավաքածուի վրա, կա՛մ Norito վերնագիրը հայտարարում է վերծանման դրոշները: Էվրիստիկայից մի գուշակեք փաթեթավորված հաջորդականության բիթերը. Ծննդոց տվյալները հետևում են նույն կանոնին.- Բլոկները ՊԵՏՔ Է պահպանվեն և բաշխվեն՝ օգտագործելով կանոնական
SignedBlockWireձևաչափը (SignedBlock::encode_wire/canonical_wire), որը նախածանցում է տարբերակի բայթը Norito վերնագրով: Բաց ծանրաբեռնվածությունը չի ապահովվում: - Ավելացրեք
TODO:մեկնաբանություն՝ բացատրելով ցանկացած ժամանակավոր կամ թերի իրականացում: - Ձևաչափեք Rust-ի բոլոր աղբյուրները
cargo fmt --all-ով (հրատարակություն 2024), նախքան կատարելը: - Ավելացնել թեստեր. ապահովել առնվազն մեկ միավորի թեստ յուրաքանչյուր նոր կամ փոփոխված ֆունկցիայի համար, որը տեղադրված է կամ
#[cfg(test)]-ի հետ կամ արկղիtests/գրացուցակում: - Գործարկեք
cargo test-ը տեղական մակարդակում, շտկեք կառուցման ցանկացած խնդիր և համոզվեք, որ այն անցնում է: Դա արեք ամբողջ պահեստի համար, այլ ոչ միայն հատուկ տուփի համար: - Ընտրովիորեն գործարկեք
cargo clippy -- -D warnings-ը` ցողունի լրացուցիչ ստուգման համար:
- Միշտ ավելացրեք տուփի մակարդակի փաստաթղթեր. սկսեք յուրաքանչյուր արկղ կամ փորձնական տուփ հակիրճ ներքին փաստաթղթով (
//! ...): - Մի օգտագործեք
#![allow(missing_docs)]կամ ապրանքի մակարդակի#[allow(missing_docs)]որևէ տեղ (ներառյալ ինտեգրման թեստերը): Բացակայող փաստաթղթերը հերքվում են աշխատանքային տարածքի գծերում և պետք է շտկվեն փաստաթղթեր գրելով: - Norito կոդեկ. տես
norito.mdռեպո արմատում՝ կանոնական on-wire դասավորության և իրականացման մանրամասների համար: Եթե Norito-ի ալգորիթմները կամ դասավորությունները փոխվեն, թարմացրեքnorito.md-ը նույն PR-ում: - Նյութերը աքքադերեն թարգմանելիս տրամադրեք սեպագիր գրված իմաստային թարգմանություն. խուսափեք հնչյունական տառադարձությունից, և երբ բացակայում են ստույգ հին տերմինները, ընտրեք բանաստեղծական աքքադերեն մոտարկումներ, որոնք պահպանում են մտադրությունը:
Նշում. Առաջին թողարկման քաղաքականություն
-
Սա առաջին թողարկումն է, և մենք ունենք մեկ ABI տարբերակ (V1): V2 դեռ չկա: Վերաբերվեք ստորև բերված էվոլյուցիայի բոլոր կետերին, որոնք առնչվում են ABI-ին որպես ապագա ուղեցույց. առայժմ թիրախը միայն
abi_version = 1է: Տվյալների մոդելը և API-ները նույնպես առաջին թողարկված են և կարող են ազատորեն փոխվել, երբ անհրաժեշտ է առաքման համար. նախընտրում են հստակությունն ու կոռեկտությունը վաղաժամ կայունությունից: -
Ընդհանուր:
- ABI-ի քաղաքականությունը անվերապահորեն կիրառվում է v1-ում (ինչպես syscall մակերեսի, այնպես էլ ցուցիչ-ABI տեսակի): Մի ավելացրեք գործարկման ժամանակի անջատիչներ:
- Փոփոխությունները պետք է պահպանեն դետերմինիզմը սարքավորումների և գործընկերների միջև: Թարմացրեք թեստերն ու փաստաթղթերը նույն PR-ում:
-
Եթե ավելացնեք/հեռացնեք/վերահամարակալեք syscals.
- Թարմացրեք
ivm::syscalls::abi_syscall_list()և պահեք այն պատվիրված: Համոզվեք, որis_syscall_allowed(policy, number)արտացոլում է նախատեսված մակերեսը: - Կիրառել կամ միտումնավոր մերժել նոր համարները հոսթներում; Անհայտ թվերը պետք է համապատասխանեն
VMError::UnknownSyscall-ին: - Թարմացրեք ոսկե թեստերը.
crates/ivm/tests/abi_syscall_list_golden.rscrates/ivm/tests/abi_hash_versions.rs(կայունություն + տարբերակի տարանջատում)
- Թարմացրեք
-
Եթե ավելացնեք ցուցիչ-ABI տեսակները.
- Ավելացրեք նոր տարբերակը
ivm::pointer_abi::PointerType-ին (նշանակեք նոր u16 ID, երբեք մի փոխեք գոյություն ունեցող ID-ները): - Թարմացրեք
ivm::pointer_abi::is_type_allowed_for_policy-ը ճիշտabi_versionքարտեզագրման համար: - Թարմացրեք
crates/ivm/tests/pointer_type_ids_golden.rs-ը և անհրաժեշտության դեպքում ավելացրեք քաղաքականության թեստեր:
- Ավելացրեք նոր տարբերակը
-
Եթե դուք ներկայացնում եք նոր ABI տարբերակ.
- Քարտեզեք
ProgramMetadata.abi_version→ivm::SyscallPolicyև թարմացրեք Kotodama կոմպիլյատորը, երբ պահանջվի, թողարկվի նոր տարբերակը: - Վերականգնեք
abi_hash-ը (ivm::syscalls::compute_abi_hash-ի միջոցով) և համոզվեք, որ մանիֆեստները տեղադրեն նոր հեշը: - Նոր տարբերակում ավելացրեք թույլատրված/չթույլատրված syscals-ի և ցուցիչների տեսակների թեստեր:
- Քարտեզեք
-
Ընդունելություն և դրսևորումներ.
- Ընդունելությունը պարտադրում է
code_hash/abi_hashհավասարությունը շղթայական դրսևորումների նկատմամբ. պահպանել այս վարքագիծը անձեռնմխելի: iroha_core/tests/-ում ավելացնելու/թարմացնելու թեստեր՝ դրական (համապատասխանողabi_hash) և բացասական (անհամապատասխանություն) դեպքեր:- Փաստաթղթեր և կարգավիճակի թարմացումներ (նույն PR).- Թարմացրեք
crates/ivm/docs/syscalls.md(ABI Evolution բաժինը) և ցանկացած syscall աղյուսակներ: - Թարմացրեք
status.md-ը ևroadmap.md-ը՝ ABI-ի փոփոխությունների և թեստային թարմացումների համառոտ ամփոփմամբ:
- Ընդունելությունը պարտադրում է
- Ստուգեք
status.md-ը ռեպո արմատից՝ արկղերում առկա կազմման/աշխատանքի ընթացիկ կարգավիճակի համար: - Ստուգեք
roadmap.mdառաջնահերթ TODO-ների և իրականացման պլանի համար: - Աշխատանքն ավարտելուց հետո թարմացրեք կարգավիճակը
status.md-ում և պահեքroadmap.md-ը կենտրոնացած չմարված առաջադրանքների վրա:
- Եթե որևէ պահանջի վերաբերյալ պարզաբանման կարիք ունեք, դադարեցրեք և կազմեք ChatGPT հուշում ձեր հարցի հետ, այնուհետև կիսվեք այն օգտագործողի հետ՝ նախքան շարունակելը:
- Պահպանեք փոփոխությունները նվազագույն և ծավալով; խուսափել անկապ խմբագրումներից նույն կարկատում:
- Նախընտրեք ներքին մոդուլները նոր կախվածություններ ավելացնելու փոխարեն; մի խմբագրեք
Cargo.lock: - Օգտագործեք առանձնահատկությունների դրոշները՝ ապարատային արագացված ուղիները պաշտպանելու համար (օրինակ՝
simd,cuda) և միշտ տրամադրեք որոշիչ հետադարձ ճանապարհ: - Ապահովել, որ ելքերը մնում են նույնական ապարատային սարքերում. խուսափել ոչ դետերմինիստական զուգահեռ կրճատումների վրա հույս դնելուց:
- Թարմացրեք փաստաթղթերը և օրինակները, երբ փոխվում են հանրային API-ները կամ վարքագիծը:
- Վավերացրեք
iroha_data_modelսերիականացման փոփոխությունները շրջադարձային թեստերով՝ Norito դասավորության երաշխիքները պահպանելու համար: - Ինտեգրման թեստերը պտտում են իրական բազմակողմանի ցանցեր; փորձնական ցանցեր կառուցելիս օգտագործեք առնվազն 4 գործընկերներ (մեկ գործընկերային կազմաձևերը ներկայացուցչական չեն և կարող են փակուղի հայտնվել Sumeragi-ում):
- Մի փորձեք անջատել DA/RBC-ն թեստերում (օրինակ՝
DevBypassDaAndRbcForZeroChain-ի միջոցով); DA-ն ուժի մեջ է, և այդ շրջանցման ուղին ներկայումս փակուղի է մտելsumeragi-ում՝ համաձայնության գործարկման ժամանակ: - QC քվորումը պետք է բավարարվի քվեարկության վավերացնողների կողմից (
min_votes_for_commit); Դիտորդների լիցքավորումը չի հաշվվում առկայության/նախօրոք քվեարկության/նախապես ստանձնելու քվորումի ստուգումների համար, այնպես որ խմբավորեք QC-ները միայն այն բանից հետո, երբ բավարար վավերացնող ձայներ կգան: - DA-ով միացված կոնսենսուսն այժմ ավելի երկար է սպասում մինչև դիտումների փոփոխությունները (քվորումի ժամկետի ավարտ =
block_time + 4 * commit_time), որպեսզի RBC/հասանելիության QC-ն ավարտվի ավելի դանդաղ հոսթորդների վրա:
- Որոնել կոդը՝
rg '<term>'և ցուցակի ֆայլեր՝fd <name>: - Ուսումնասիրեք արկղերը՝
fd --type f Cargo.toml crates | xargs -I{} dirname {}: - Արագ գտնել օրինակներ/նստարաններ՝
fd . crates -E target -t d -d 3 -g "*{examples,benches}": - Python հուշում. որոշ միջավայրեր չեն ապահովում
python; փոխարենը փորձեքpython3, երբ գործարկում եք սկրիպտներ:
- Միավորի թեստեր. օգտագործել մաքուր վերլուծության, կոդեգենների օգնականների և կոմունալ ծառայությունների համար (արագ, կոմպիլյատոր չկա):
- UI-ի թեստեր (trybuild). օգտագործել վավերացնելու համար կոմպիլյացիայի ժամանակի վարքագիծը և ածանցյալ/proc-մակրոների ախտորոշումը (հաջողության և ակնկալվող ձախողման դեպքեր
.stderr-ով): - Նախընտրեք երկուսն էլ մակրոներ ավելացնելիս/փոխելիս՝ միավորի թեստեր ներքին սարքերի համար + UI թեստեր՝ օգտատերերի առջև դրված վարքագծի և սխալի հաղորդագրությունների համար:
- Խուսափեք խուճապից; թողարկեք հստակ ախտորոշում (օրինակ՝
syn::Errorկամproc_macro_errorմիջոցով): Հաղորդագրությունները կայուն պահեք և թարմացրեք.stderrմիայն միտումնավոր փոփոխությունների համար:
Ներառեք փոփոխությունների կարճ ամփոփագիրը և Testing բաժինը, որը նկարագրում է ձեր գործած հրամանները: