| lang | kk |
|---|---|
| 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 жұмыс кеңістігі ретінде ұйымдастырылған бүкіл репозиторийге қолданылады.
- Жұмыс кеңістігін құру:
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: Swift бумасының сынақтарын орындау үшін
IrohaSwiftкаталогынанswift testіске қосыңыз. - 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 2 қосымшада DA/RBC қосулы болуы мүмкін; Iroha 3 тек DA/RBC қосулы болуы мүмкін.
- IVM — Iroha виртуалды машинасы (IVM), Hyperledger Iroha v2 блокчейніне арналған виртуалды машина
- Kotodama - IVM үшін жоғары деңгейлі смарт келісімшарт тілі, ол шикі келісімшарт коды үшін .ko файл кеңейтімін пайдаланады және файл немесе тізбек ретінде сақталған кезде .to файл кеңейтімін пайдаланатын байт кодына құрастырылады. Әдетте, .to bytecode желіде орналастырылады.
- Түсіндіру: Kotodama Iroha виртуалды машинасына (IVM) бағытталған және IVM байт кодын (
.to) шығарады. Ол дербес архитектура ретінде “risc5”/RISC‑V-ге бағытталмайды. Репозиторийде RISC‑V тәрізді кодтаулар пайда болған жағдайда, олар IVM нұсқау пішімдерінің орындалу мәліметтері болып табылады және аппараттық құралда байқалатын әрекетті өзгертпеуі керек.
- Түсіндіру: Kotodama Iroha виртуалды машинасына (IVM) бағытталған және IVM байт кодын (
- Norito — Iroha үшін деректерді сериялау кодек
- Бүкіл жұмыс кеңістігі Rust стандартты кітапханасына (
std) бағытталған. WASM/no-std құрастыруларына енді қолдау көрсетілмейді және өзгертулер енгізу кезінде ескерілмеуі керек.## Репозитарий құрылымы - Репозитарий түбіріндегі
Cargo.tomlжұмыс кеңістігін анықтайды және барлық мүше жәшіктердің тізімін береді. crates/– Iroha құрамдастарын жүзеге асыратын тот жәшіктері. Әрбір жәшіктің әдеттеsrc/,tests/,examples/жәнеbenches/қамтитын жеке ішкі каталогы бар.- Маңызды жәшіктерге мыналар жатады:
iroha– негізгі функционалдылықты біріктіретін жоғары деңгейлі кітапхана.irohad– түйіннің орындалуын қамтамасыз ететін екілік демон.ivm– Iroha виртуалды машинасы.iroha_cli– түйінмен әрекеттесу үшін пәрмен жолы интерфейсі.iroha_core,iroha_data_model,iroha_cryptoжәне басқа қосалқы жәшіктер.
- Маңызды жәшіктерге мыналар жатады:
IrohaSwift/– клиент/мобильді SDK үшін Swift пакеті. Оның көздеріSources/IrohaSwift/астында және оның бірлік сынақтарыTests/IrohaSwiftTests/астында өмір сүреді. Swift жиынтығын орындау үшін осы каталогтанswift testіске қосыңыз.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 құрастыру түйіндер арасында детерминирленген әрекетті сақтау үшін осы код жолдарын жіберуі керек.
- Серияландыру: серде орнына барлық жерде Norito пайдаланыңыз. Екілік кодектер үшін
norito::{Encode, Decode}пайдаланыңыз; JSON үшінnorito::jsonкөмекшілерін/макростарын (norito::json::from_*,to_*,json!,Value) пайдаланыңыз және ешқашан I18NI0000008X қолданбасына оралмаңыз. Жәшіктерге тікелейserde/serde_jsonтәуелділіктерін қоспаңыз; егер серде ішкі талап етілсе, Norito орауыштарына сеніңіз. - CI қорғанысы:
scripts/check_no_scale.shSCALE (parity-scale-codec) тек Norito эталондық белгішесінде пайда болуын қамтамасыз етеді. Серияландыру кодын түртсеңіз, оны жергілікті түрде іске қосыңыз. - Norito пайдалы жүктемелері олардың орналасуын жарнамалауы МІНДЕТТІ: нұсқа нөмірі бекітілген жалаулар жинағына сәйкестендіріледі немесе Norito тақырыбы декодтау жалаушаларын жариялайды. Эвристикадан жинақталған реттілік биттерін болжамаңыз; генезис деректері бірдей ережеге бағынады.- Блоктар Norito тақырыбымен нұсқа байтын префикс беретін канондық
SignedBlockWire(SignedBlock::encode_wire/canonical_wire) пішімі арқылы сақталуы және таратылуы МІНДЕТ. Жалаң пайдалы жүктемелерге қолдау көрсетілмейді. - Кез келген уақытша немесе аяқталмаған енгізуді түсіндіретін
TODO:түсініктемесін қосыңыз. - Жасалмас бұрын барлық Rust көздерін
cargo fmt --all(2024 шығарылым) арқылы пішімдеңіз. - Сынақтарды қосу: әрбір жаңа немесе өзгертілген функция үшін
#[cfg(test)]жолында немесеtests/жәшігі каталогында орналастырылған кем дегенде бір бірлік сынағы болуын қамтамасыз етіңіз. - Жергілікті
cargo testіске қосыңыз, құрастыру мәселелерін түзетіңіз және оның өтуіне көз жеткізіңіз. Мұны белгілі бір жәшік үшін емес, бүкіл репозиторий үшін жасаңыз. - Қосымша талшықтарды тексеру үшін
cargo clippy -- -D warningsіске қосыңыз.
- Әрқашан жәшік деңгейіндегі құжаттаманы қосыңыз: әрбір қорапты немесе сынақ жәшігін қысқаша ішкі құжат түсіндірмесімен бастаңыз (
//! ...). #![allow(missing_docs)]немесе#[allow(missing_docs)]элемент деңгейін еш жерде пайдаланбаңыз (соның ішінде интеграция сынақтары). Жетіспейтін құжаттама жұмыс кеңістігінің линттерінде қабылданбайды және құжаттарды жазу арқылы түзетілуі керек.- Norito кодек: канондық сымды орналасу және іске асыру мәліметтері үшін репо түбіріндегі
norito.mdқараңыз. Norito алгоритмдері немесе орналасулары өзгерсе,norito.mdбірдей PR-да жаңартыңыз. - Материалды аккад тіліне аударған кезде сына жазуымен жазылған мағыналық берілуін қамтамасыз ету; фонетикалық транслитерациядан аулақ болыңыз және дәл ежелгі терминдер жетіспесе, ниетті сақтайтын поэтикалық аккадтық жуықтауларды таңдаңыз.
Ескертпе: Бірінші шығару саясаты
-
Бұл бірінші шығарылым және бізде жалғыз ABI нұсқасы бар (V1). Әлі V2 жоқ. Төмендегі ABI-қа қатысты барлық эволюция элементтерін болашақ нұсқау ретінде қарастырыңыз; әзірше тек
abi_version = 1мақсатты. Деректер үлгісі мен API интерфейстері де бірінші шығарылым болып табылады және жөнелту үшін қажет болған жағдайда еркін өзгеруі мүмкін; мерзімінен бұрын тұрақтылықтан айқындық пен дұрыстықты артық көреді. -
Жалпы:
- ABI саясаты v1 (жүйенің беті де, көрсеткіш-ABI түрлері де) шартсыз орындалады. Орындау уақытының қосқыштарын қоспаңыз.
- Өзгерістер аппараттық құралдар мен әріптестер арасында детерминизмді сақтауы керек. Сынақтар мен құжаттарды бір PR-да жаңартыңыз.
-
Жүйе қоңырауларын қоссаңыз/өшірсеңіз/қайта нөмірлесеңіз:
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 идентификаторын тағайындаңыз; бұрыннан бар идентификаторларды ешқашан өзгертпеңіз).- Дұрыс
abi_versionсалыстыру үшінivm::pointer_abi::is_type_allowed_for_policyжаңартыңыз. crates/ivm/tests/pointer_type_ids_golden.rsжаңартыңыз және қажет болса, саясат сынақтарын қосыңыз.
-
Егер сіз жаңа ABI нұсқасын енгізсеңіз:
ProgramMetadata.abi_version→ivm::SyscallPolicyкартасын салыңыз және сұралған кезде жаңа нұсқаны шығару үшін Kotodama компиляторын жаңартыңыз.abi_hash(ivm::syscalls::compute_abi_hashарқылы) қалпына келтіріңіз және манифесттердің жаңа хэшті ендіруін қамтамасыз етіңіз.- Жаңа нұсқаға рұқсат етілген/рұқсат етілмеген жүйелік қоңыраулар мен көрсеткіш түрлеріне арналған сынақтарды қосыңыз.
-
Рұқсат және манифесттер:
- Қабылдау тізбектегі манифесттерге қарсы
code_hash/abi_hashтеңдігін қамтамасыз етеді; бұл мінез-құлықты сақтаңыз. iroha_core/tests/жүйесінде қосу/жаңарту сынақтары: оң (сәйкесabi_hash) және теріс (сәйкес емес) жағдайлар.- Құжаттар және күй жаңартулары (сол PR):crates/ivm/docs/syscalls.md(ABI Evolution бөлімі) және кез келген жүйені шақыру кестелерін жаңартыңыз.status.mdжәнеroadmap.mdмәліметтерін ABI өзгерістері мен сынақ жаңартуларының қысқаша мазмұнымен жаңартыңыз.
- Қабылдау тізбектегі манифесттерге қарсы
- жәшіктер бойынша ағымдағы компиляция/орындалу уақыты күйі үшін репо түбірінде
status.mdтексеріңіз. roadmap.mdбасымдылық берілген TODO және іске асыру жоспарын тексеріңіз.- Жұмысты аяқтағаннан кейін
status.mdкүйін жаңартыңыз жәнеroadmap.mdназарын орындалмаған тапсырмаларға бағыттаңыз.
- Егер сізге қандай да бір талап бойынша түсініктеме қажет болса, тоқтатыңыз және сұрағыңызға ChatGPT сұрауын жасаңыз, одан кейін жалғастырмас бұрын оны пайдаланушымен бөлісіңіз.
- Өзгерістерді минималды және ауқымды етіп сақтаңыз; бір патчтағы байланысты емес өңдеулерді болдырмаңыз.
- Жаңа тәуелділіктерді қосудан гөрі ішкі модульдерге артықшылық беру;
Cargo.lockөңдемеңіз. - Аппараттық жеделдетілген жолдарды (мысалы,
simd,cuda) қорғау үшін мүмкіндік жалаушаларын пайдаланыңыз және әрқашан детерминирленген қалпына келтіру жолын қамтамасыз етіңіз. - Аппараттық құралдар бойынша шығыстардың бірдей болуын қамтамасыз ету; детерминирленген емес параллель қысқартуларға сүйенуден аулақ болыңыз.
- Қоғамдық API интерфейстері немесе мінез-құлық өзгерген кезде құжаттама мен мысалдарды жаңартыңыз.
- Norito орналасу кепілдіктерін сақтау үшін
iroha_data_modelішіндегі сериализация өзгерістерін айналу сынақтарымен растаңыз. - Интеграциялық сынақтар нақты көп деңгейлі желілерді айналдырады; сынақ желілерін құру кезінде кемінде 4 теңді пайдаланыңыз (бір деңгейлі конфигурациялар репрезентативті емес және Sumeragi ішінде тығырыққа тірелуі мүмкін).
- Сынақтарда DA/RBC өшіруге әрекет жасамаңыз (мысалы,
DevBypassDaAndRbcForZeroChainарқылы); DA күшіне енеді және консенсусты іске қосу кезінде сол айналып өту жолыsumeragiішінде қазір тығырыққа тіреледі. - QC кворумын дауыс берушілер қанағаттандыруы керек (
min_votes_for_commit); бақылаушының толтыруы қол жетімділікті/алдын ала дауыс беруді/алдын ала кворумды тексеруге есептелмейді, сондықтан жеткілікті валидатор дауыстары келгеннен кейін ғана QC жиынтықтаңыз. - Баяу хосттарда RBC/қолжетімділік QC аяқталуына мүмкіндік беру үшін DA-қосылған консенсус енді көрініс өзгерістеріне дейін ұзағырақ күтеді (кворум күту уақыты =
block_time + 4 * commit_time).
- Іздеу коды:
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): компиляция уақытының тәртібін және туынды/процесс-макростардың диагностикасын тексеру үшін пайдаланыңыз (
.stderrкөмегімен сәтті және күтілетін сәтсіздік жағдайлары). - Макростарды қосу/өзгерту кезінде екеуіне де артықшылық беріңіз: ішкі құрылғыларға арналған бірлік сынақтары + пайдаланушы әрекеті мен қате туралы хабарларға арналған UI сынақтары.
- дүрбелеңді болдырмау; анық диагностиканы шығарады (мысалы,
syn::Errorнемесеproc_macro_errorарқылы). Хабарламаларды тұрақты етіп сақтаңыз және.stderrнұсқасын тек әдейі өзгертулер үшін жаңартыңыз.
Өзгерістердің қысқаша мазмұнын және орындалған пәрмендерді сипаттайтын Testing бөлімін қосыңыз.