ืืื ืืืืืืืช Ontology Wasm ืืคืืืชื ืืช ืืขืืืช ืฉื ืืขืืจืช ืืืืื ืืืืื ืฉื dApp ืขื ืืืืืื ืขืกืงื ืืืจืื ืืืืืงืฆ'ืืื, ืืืื ืืขืฉืืจื ืืืื ืืช ืืืงืืกืืกืื ืฉื dApp.
ืขืืฉืื
ืคืืชืื ืืืื WASM ืขื Rust
ืฆืืจ ืืืื
ืืื ื ืืคืจืืืงื ืฉืืื ืืืืฆืจ:
ืืงืืืฅ Cargo.toml ืืฉืืฉ ืืืืืจืช ืืืืข ืคืจืืืงื ืืกืืกื ืืืืืข ืกืคืจืืื ืชืืื. ืืฉ ืืืืืืจ ืืช ืืงืืข [lib] ืฉื ืืงืืืฅ ื-crate-type = ["cdylib"]. ืืงืืืฅ lib.rs ืืฉืืฉ ืืืชืืืช ืงืื ืืืืืืช ืืืืื. ืื ืืกืฃ, ืขืืื ืืืืกืืฃ ืคืจืืืจื ืชืืืช ืืงืืข [ืชืืืช] ืืงืืืฅ ืืชืฆืืจื ืฉื Cargo.toml:
ืขื ืชืืืช ืื, ืืคืชืืื ืืืืืื ืืืชืงืฉืจ ืืืืฉืงืื ืืืงืืืืื ืืื ืืจืืงืฆืื ืขื ืืืืืงืฆ'ืืื ืฉื ืืื ืืืืืืื ืืืืื ืืืื ืคืจืืืจ ืืกืืืจื.
ืคืื ืงืฆืืืช ืืื ืช ืืืื
ืืื ืชืืื ืืช ืืฉ ืคืื ืงืฆืืืช ืงืื, ืืื ืืคืื ืงืฆืื ืืจืืฉืืช ืฉืื ื ืจืืืื ืืืจื ืืื, ืื ืืืืื ืืื ืคืื ืงืฆืื ืจืืฉืืช. ืืืฉืจ ืืืื Wasm ืคืืชื ืืืืฆืขืืช Rust, ืคืื ืงืฆืืืช ื-invoke ืืืืืืจืช ืืืจืืจืช ืืืื ืืฉืืฉืช ืืคืื ืงืฆืืืช ืืงืื ืืฉืืืืฉ ืืืืื. ืฉืื ืฉื ืคืื ืงืฆืื ื-Rust ืื ืืืื ืืจืืจ ืืขืช ืืืืืจ ืฉื ืงืื ืืงืืจ Rust ืืงืื ืืชืื ืฉื ืืชื ืืืฆืข ืขื ืืื ืืืื ื ืืืจืืืืืืช. ืืื ืืื ืืข ืืืงืืืคืืืืจ ืืืฆืืจ ืงืื ืืืืชืจ ืืืืงืืื ืืช ืืืื ืืืืื, ืคืื ืงืฆืืืช ื-invoke ืืืกืืคื ืืช ืืืขืจื #[no_mangle].
ืืืฆื ืคืื ืงืฆืืืช invoke ืืงืืืช ืคืจืืืจืื ืืืืฆืืข ืขืกืงื?
ืกืคืจืืืช ontio_std ืืกืคืงืช ืคืื ืงืฆืืืช runtime::input() ืืื ืืงืื ืืช ืืคืจืืืจืื ืืืืฆืืข ืขืกืงื. ืืคืชืืื ืืืืืื ืืืฉืชืืฉ ื- ZeroCopySource ืืื ืืืื ืืช ืกืืจืช ืืืชืื ืืืชืงืืืช. ืฉืื ืืืขืจื ืืจืืฉืื ืฉื ืืืชืื ืฉื ืงืจื ืืื ืฉื ืฉืืืช ื-invoke, ืืืืจืื ืคืจืืืจื ืืฉืืื.
ืืืฆื ืืืืืจืช ืชืืฆืืช ืืืฆืืข ืืืืื?
ืืคืื ืงืฆืื runtime::ret ืืืกืืคืงืช ืขื ืืื ืกืคืจืืืช ontio_std ืืืืืจื ืืช ืืชืืฆืื ืฉื ืืืฆืืข ืฉืืื.
ืคืื ืงืฆืืืช ื-invoke ืฉืืืฉืืื ื ืจืืืช ืื:
ืกืืืืจ ืืืืืื ืืกืืจืช ื ืชืื ื ืืืื
ืืชืืืื ืืคืืชืื ืฉื ืืืืื, ืืคืชืืื ืชืืื ื ืชืงืืื ืืืขืืืช ืืกืจืืืืืืฆืื ืืื-ืกืจืืืืืืฆืื, ืืืืืื ืืืฆื ืืืืกื ืกืื ื ืชืื ื struct ืืืกื ืื ืชืื ืื ืืืืฆื ืืืฆืข ืื-ืกืจืืืืืืฆืื ืฉื ืืขืจื ืืชืื ืื ืงืจื ืืืกื ืื ืชืื ืื ืืื ืืงืื ืกืื ื ืชืื ื struct.
ืกืคืจืืืช ontio_std ืืกืคืงืช ืืืฉืงื ืืคืขื ื ืืืงืืื ืขืืืจ ืืกืืจืช ื ืชืื ืื ืืกืืืจืืืืืืฆืื. ืืฉืืืช ืฉื ืืื ื ืืืืฉืืื ืื ืืช ืืืฉืงื ืืืคืขื ื ืืืืงืืื, ืื ืฉื ืืชื ืืืฆืข ืืช ืืืื ื ืืกืืืจื ืืืกืืืจืืืืืืฆืื. ื ืืจืฉืื ืืืคืขืื ืฉื ืืืืืงื Sink ืืืฉืจ ืกืืืื ืฉืื ืื ืฉื ื ืชืื ืื ืืกืืืจืื. ืืืืคืข ืฉื ืืืืืงื Sink ืืฉ ืฉืื buff ืืกืื set ืฉืืืืกื ืืช ื ืชืื ื ืกืื ืืืชืื, ืืื ืื ืชืื ืื ืืกืืืจื ืืืืืกื ืื ื-buf.
ืขืืืจ ื ืชืื ืื ืืืืจื ืงืืืข (ืืืฉื: byte, u16, u32, u64 ืืื'), ืื ืชืื ืื ืืืืจืื ืืฉืืจืืช ืืืขืจื ืืชืื ืืื ืืืืืกื ืื ื-buf; ืขืืืจ ื ืชืื ืื ืืืืจื ืื ืงืืืข, ืืืจื ืืืื ืืืืืช ืืกืืืจ ืชืืืื, ืืืืืจ ืืื Ddata (ืืืืืื, ืืกืคืจืื ืฉืืืื ืืื ืกืืื ืื ืืืืื ืื ืืืืข, ืืืื u16, u32 ืื u64 ืืื').
ืื-ืกืจืืืืืืฆืื ืืื ืืืืืง ืืืคื. ืืื ืฉืืืช ืกืจืืืืืืฆืื, ืงืืืืช ืฉืืืช ืื-ืกืจืืืืืืฆืื ืืชืืืื. ืื-ืกืจืืืืืืฆืื ืืืืืืช ืฉืืืืฉ ืืืืคืขืื ืฉื ืืืืืงื Source. ืืืืคืข ืืืืืงื ืืื ืืฉ ืฉื ื ืฉืืืช buf ื-pos. Buf ืืฉืืฉ ืืืืกืื ืื ืชืื ืื ืฉืืฉ ืืืื ืืช ืืจืฆืฃ ื-pos ืืฉืืฉ ืืืืกืื ืืืงืื ืืงืจืืื ืื ืืืื. ืืืฉืจ ืกืื ืืกืืื ืฉื ื ืชืื ืื ื ืงืจื, ืื ืืชื ืืืืข ืืช ืืืจืื, ืืชื ืืืื ืืงืจืื ืืืชื ืืฉืืจืืช, ืขืืืจ ื ืชืื ืื ืืืืจื ืื ืืืืข - ืงืจื ืงืืื ืืช ืืืืจื, ืืื ืงืจื ืืช ืืชืืื.
ืืืฉื ืืขืืืื ื ืชืื ืื ืืฉืจืฉืจืช
ืืื ืืืืืืื-wasm-cdt-rust - ืืืืืขืช ืฉืืื ืชืคืขืืืืช ืืขืืืื ืขื ื ืชืื ืื ืืฉืจืฉืจืช, ืืฉืจ ื ืืื ืืืคืชืืื ืืืืฉื ืคืขืืืืช ืืืื ืืืกืคื, ืืืืงื, ืฉืื ืื ืืฉืืืืชื ืฉื ื ืชืื ืื ืืฉืจืฉืจืช ืืืืคื ืืื:
- ืืกื ื ืชืื ืื::get(key) - ืืฉืืฉ ืืืงืฉืช ื ืชืื ืื ืืืฉืจืฉืจืช, ืืืงืฉืืช ืืคืชื ืืืืฉืื ืืืฉืง AsRef;
- ืืกื ื ืชืื ืื::put(key, value) - ืืฉืืฉ ืืืืกืื ื ืชืื ืื ืืจืฉืช. Key ืืืงืฉ ืืช ืืืืขืช ืืืฉืง AsRef, ื-value ืืืงืฉ ืืช ืืืืขืช ืืืฉืง ื-Encoder;
- ืืกื ื ืชืื ืื::delete(key) - ืืฉืืฉ ืืืกืจืช ื ืชืื ืื ืืืฉืจืฉืจืช, ืืืคืชื ืืืงืฉ ืืช ืืืืขืช ืืืฉืง AsRef.
ืืืืงืช ืืืื
ืืืฉืจ ืฉืืืืช ืืืืื ืืืืฉืืืช, ืื ื ืืงืืงืื ืืืืฉื ืื ืชืื ืื ืืฉืจืฉืจืช ืืื ื ืืงืืงืื ืืืืื ื ืืืจืืืืืืช ืืชืืืื ืืืืฆืืข ื-bytecode ืฉื ืืืืื, ืื ืฉืืืจื ืืื ืืฉ ืฆืืจื ืืคืจืืก ืืช ืืืืื ืืฉืจืฉืจืช ืืฆืืจื ืืืืงื. ืืื ืฉืืืช ืืืืืงื ืืื ืืขืืืชืืช. ืืื ืืืงื ืขื ืืคืชืืื ืืืืืง ืืืืื, ืกืคืจืืืช ontio_std ืืกืคืงืช ืืืืื ืืืืื ืืืืืงื. ืืืืื ืื ืืกืคืง ืกืืืืืฆืื ืฉื ืื ืชืื ืื ืืืขืื, ืื ืฉืืงื ืขื ืืคืชืืื ืืืฆืข ืืืืงื ืืืืื ืฉื ืืฉืืืืช ืืืืื. ื ืืชื ืืืฆืื ืืืืืืืช ืกืคืฆืืคืืืช
ืืืชืืจ ืืืืื ืืืืื
console::debug(msg) ืืฆืื ืืืืข ืขื ื ืืคืื ืืืืื ืืืื ืืืชืืจ ืืืืื ืืืืื. ืืืืข ืืืืืขื ืืชืืืกืฃ ืืงืืืฅ ืืืื ืืฆืืืช. ืชื ืื ืืืงืื ืืื ืืืืืืจ ืืช ืจืืช ืงืืืฅ ืืืืื ืืืฆื ื ืืคืื ืืืืื ืืืฉืจ ืฆืืืช ืืืืืงื ืืืงืืื ืฉื ืืื ืืืืืืื ืคืืขื.
runtime::notify(msg) ืืืฆืื ืืช ืืืืข ื ืืคืื ืืืืืื ืืืชืืื ืืืื ืฉืืืืื ืืชืืฆืข ืืืืื. ืฉืืื ืื ืชืฉืืืจ ืืช ืืืืืข ืฉืืืื ืืฉืจืฉืจืช ืื ืืชื ืืืื ืืืฆืข ืฉืืืืชื ืืืฉืจืฉืจืช ืืืืฆืขืืช ืฉืืืช getSmartCodeEvent.
ืืืืืจ ืชืืจืื ืขื ืืื ืขืืจืื Hashrate&Shares ืืืืืื ืขืืืจ OntologyRussia.
ืืืฅ ืขื
ืืื ืืชื ืืคืชื? ืืฆืืจืฃ ืืงืืืืช ืืืื ืืืืืื ืฉืื ื ื-
ืืื ืืืืืืื
ืืชืจ ืืื ืืืืืืื GitHub /ืืืืืงืช - ืืืจืง
ืื ืืืืช /ืจืืกื ืืืืืจ /reddit
ืืงืืจ: www.habr.com