Hoe skriuw ik in WebAssembly smart kontrakt op it Ontology netwurk? Diel 1: Rust

Hoe skriuw ik in WebAssembly smart kontrakt op it Ontology netwurk? Diel 1: Rust

ВСхнология Ontology Wasm сниТаСт ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ пСрСноса смарт ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² dApp со слоТной бизнСс- Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½, Ρ‚Π΅ΠΌ самым Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ обогащая dApp экосистСму.

Π’ настоящСС врСмя Ontology Wasm ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠ°ΠΊ Π½Π° языкС Rust, Ρ‚Π°ΠΊ ΠΈ Π½Π° языкС C++. Π―Π·Ρ‹ΠΊ Rust Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Wasm, Π° сгСнСрированный Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Ρ‰Π΅ большС ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π˜Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Rust для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π² сСти Ontology?

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° WASM β€” ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Rust

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°

Lading β€” это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ инструмСнт создания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ управлСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Rust, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ взаимодСйствиС ΠΊΠΎΠ΄Π° ΠΈ сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ontology Wasm- ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚, просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

Hoe skriuw ik in WebAssembly smart kontrakt op it Ontology netwurk? Diel 1: Rust

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚:

Hoe skriuw ik in WebAssembly smart kontrakt op it Ontology netwurk? Diel 1: Rust

Π€Π°ΠΉΠ» Cargo.toml ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для настройки Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ зависимой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. БСкция [lib] Π² Ρ„Π°ΠΉΠ»Π΅ обязана Π±Ρ‹Ρ‚ΡŒ установлСнной Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ crate-type = [β€œcdylib”]. Π€Π°ΠΉΠ» lib.rs ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для написания ΠΊΠΎΠ΄Π° Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°. Π’ Π΄ΠΎΠ±Π°Π²ΠΎΠΊ, Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ зависимостСй Π² Ρ€Π°Π·Π΄Π΅Π» [dependencies] Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Cargo.toml:

Hoe skriuw ik in WebAssembly smart kontrakt op it Ontology netwurk? Diel 1: Rust

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой зависимости Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΎΠΌ Ontology, ΠΈ инструмСнты Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ сСриализации.

Ѐункция Π²Π²ΠΎΠ΄Π° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°

КаТдая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π²ΠΎΠ΄Π°, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ main- функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΈΠ΄ΠΈΠΌ, Π½ΠΎ Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π½Π΅Ρ‚ main- Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Когда разрабатываСтся Wasm- ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ с использованиСм Rust, Ρ‚ΠΎ функция invoke ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ функция Π²Π²ΠΎΠ΄Π° для использования ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°. Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Rust Π±ΡƒΠ΄Π΅Ρ‚ нСясным ΠΏΡ€ΠΈ компиляции исходного ΠΊΠΎΠ΄Π° Rust Π² Π±Π°ΠΉΡ‚- ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ компилятор ΠΎΡ‚ гСнСрирования ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, функция invoke добавляСт Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ #[no_mangle].

Как функция invoke ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ?

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ontio_std прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ runtime :: input (), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для выполнСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ZeroCopySource для дСсСриализации ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ массива Π±Π°ΠΉΡ‚ΠΎΠ². Π’ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ считанный массив Π±Π°ΠΉΡ‚ΠΎΠ²β€” это имя invoke- ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π΄Π°Π»Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Как возвращаСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°?

Ѐункция runtime::ret, которая прСдоставляСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ontio_std, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

ЗакончСнная invoke- функция выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Hoe skriuw ik in WebAssembly smart kontrakt op it Ontology netwurk? Diel 1: Rust

БСриализация ΠΈ дСсСриализация Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°

Π’ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ всСгда Π½Π°Ρ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сСриализации ΠΈ дСсСриализации, Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ struct- Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠ°ΠΊ массив Π±Π°ΠΉΡ‚ΠΎΠ², считанный ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ struct- Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ontio_std прСдоставляСт интСрфСйсы Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ ΠΊΠΎΠ΄Π΅Ρ€Π° для сСриализации ΠΈ дСсСриализации Π΄Π°Π½Π½Ρ‹Ρ…. Поля структуры struct Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ интСрфСйсы Π΄Π΅ΠΊΠΎΠ΄Π΅Ρ€Π° ΠΈ ΠΊΠΎΠ΄Π΅Ρ€Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ структура ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сСриализована ΠΈ дСсСриализована. ЭкзСмпляры класса Sink Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. ЭкзСмпляр класса Sink ΠΈΠΌΠ΅Π΅Ρ‚ set- Ρ‚ΠΈΠΏ ΠΏΠΎΠ»Π΅ buf, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π±Π°ΠΉΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Π΅, Π° всС сСриализованныС Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² buf.

Для Π΄Π°Π½Π½Ρ‹Ρ… с фиксированной Π΄Π»ΠΈΠ½ΠΎΠΉ (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ: byte, u16, u32, u64 ΠΈ Ρ‚.Π΄.) Π΄Π°Π½Π½Ρ‹Π΅ нСпосрСдствСнно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² массив Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² buf; для Π΄Π°Π½Π½Ρ‹Ρ… нСфиксированной Π΄Π»ΠΈΠ½Ρ‹ сначала Π½ΡƒΠΆΠ½ΠΎ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ, Π° Π·Π°Ρ‚Π΅ΠΌ Ddata (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ†Π΅Π»Ρ‹Π΅ числа Π±Π΅Π· Π·Π½Π°ΠΊΠ° нСизвСстного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ u16, u32 ΠΈΠ»ΠΈ u64 ΠΈ Ρ‚. Π΄.).

ДСсСриализация являСтся прямой ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сСриализации Π΅ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ дСсСриализации. ДСсСриализация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования экзСмпляров класса Source. Π­Ρ‚ΠΎΡ‚ экзСмпляр класса ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° поля buf ΠΈ pos. Buf ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ дСсСриализованы, Π° pos ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ считывания. Когда считываСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΈΡ… Π΄Π»ΠΈΠ½Ρƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, для Π΄Π°Π½Π½Ρ‹Ρ… нСизвСстной Π΄Π»ΠΈΠ½Ρ‹β€” сначала считайтС Π΄Π»ΠΈΠ½Ρƒ, Π° Π·Π°Ρ‚Π΅ΠΌ считайтС содСрТимоС.

Доступ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅

Ontology-wasm-cdt-rust β€” инкапсулировал ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ†Π΅ΠΏΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ΄ΠΎΠ±Π΅Π½ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ†Π΅ΠΏΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • database::get(key) β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ†Π΅ΠΏΠΈ, Π° key Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ интСрфСйса AsRef;
  • database::put(key, value) β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² сСти. Key Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ интСрфСйса AsRef, Π° value Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ интСрфСйса Encoder;
  • database::delete(key) β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, Π° key Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ интСрфСйса AsRef.

ВСстированиС ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°

Когда Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² Ρ†Π΅ΠΏΠΈ ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°, поэтому ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ Π² Ρ†Π΅ΠΏΠΈ для тСстирования. Но Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ тСстирования ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π»Π΅Π³Ρ‡Π΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² тСстированиС ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ², Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ontio_std прСдоставляСт mock- ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для тСстирования. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ обСспСчиваСт ΡΠΈΠΌΡƒΠ»ΡΡ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ†Π΅ΠΏΠΈ, дСлая Π»Π΅Π³Ρ‡Π΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡŽΠ½ΠΈΡ‚- тСстированиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π΅. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ hjir.

ΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°

console::debug(msg) Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ msg Π±ΡƒΠ΄Π΅Ρ‚ внСсСна Π² Π»ΠΎΠ³- Ρ„Π°ΠΉΠ» Π½ΠΎΠ΄Ρ‹. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ условиСм являСтся установка уровня Π»ΠΎΠ³- Ρ„Π°ΠΉΠ»Π° Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° локальная тСст- Π½ΠΎΠ΄Π° Ontology.

runtime::notify(msg) Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²ΠΎ врСмя ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π²Π½Π΅ΡΠ΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Ρ†Π΅ΠΏΡŒ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½ ΠΈΠ· Ρ†Π΅ΠΏΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getSmartCodeEvent.

It artikel waard oerset troch de redaksje fan Hashrate&Shares spesjaal foar OntologyRussia. gΓ»le

Binne jo in Γ»ntwikkelder? Doch mei oan ΓΊs techmienskip by Untwerp. Sjoch ek ris op Developer Center op ΓΊs webside, wΓͺr't jo Γ»ntwikkeldersark, dokumintaasje en mear kinne fine.

Ontology

Boarne: www.habr.com

Add a comment