ืื™ืš ื›ื•ืชื‘ื™ื ื—ื•ื–ื” ื—ื›ื ืฉืœ WebAssembly ื‘ืจืฉืช ืื•ื ื˜ื•ืœื•ื’ื™ื”? ื—ืœืง 1: ื—ืœื•ื“ื”

ืื™ืš ื›ื•ืชื‘ื™ื ื—ื•ื–ื” ื—ื›ื ืฉืœ WebAssembly ื‘ืจืฉืช ืื•ื ื˜ื•ืœื•ื’ื™ื”? ื—ืœืง 1: ื—ืœื•ื“ื”

ื˜ื›ื ื•ืœื•ื’ื™ื™ืช Ontology Wasm ืžืคื—ื™ืชื” ืืช ื”ืขืœื•ืช ืฉืœ ื”ืขื‘ืจืช ื—ื•ื–ื™ื ื—ื›ืžื™ื ืฉืœ dApp ืขื ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ ืžื•ืจื›ื‘ ืœื‘ืœื•ืงืฆ'ื™ื™ืŸ, ื•ื‘ื›ืš ืžืขืฉื™ืจื” ืžืื•ื“ ืืช ื”ืืงื•ืกื™ืกื˜ื ืฉืœ dApp.

ืขื›ืฉื™ื• ืื•ื ื˜ื•ืœื•ื’ื™ื” Wasm ืชื•ืžืš ื‘ื• ื–ืžื ื™ืช ื‘ืคื™ืชื•ื— Rust ื•-C++. ืฉืคืช Rust ืชื•ืžื›ืช ื‘ืฆื•ืจื” ื˜ื•ื‘ื” ื™ื•ืชืจ ื‘- Wasm, ื•ืงื•ื“ ื”ื‘ื™ื˜ื™ื ืฉื ื•ืฆืจ ืคืฉื•ื˜ ื™ื•ืชืจ, ืžื” ืฉื™ื›ื•ืœ ืœื”ื•ื–ื™ืœ ืขื•ื“ ื™ื•ืชืจ ืืช ื”ืขืœื•ืช ืฉืœ ืฉื™ื—ื•ืช ื—ื•ื–ื”. ื›ืš, ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘-Rust ื›ื“ื™ ืœืคืชื— ื—ื•ื–ื” ื‘ืจืฉืช ืื•ื ื˜ื•ืœื•ื’ื™ื”?

ืคื™ืชื•ื— ื—ื•ื–ื” WASM ืขื Rust

ืฆื•ืจ ื—ื•ื–ื”

ืžื˜ืขืŸ ื”ื•ื ื›ืœื™ ื˜ื•ื‘ ืœื™ืฆื™ืจืช ืคืจื•ื™ืงื˜ื™ื ื•ื ื™ื”ื•ืœ ื—ื‘ื™ืœื•ืช ืœืคื™ืชื•ื— Rust, ืฉืขื•ื–ืจ ืœืžืคืชื—ื™ื ืœืืจื’ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ืงื•ื“ ื•ืกืคืจื™ื•ืช ืฆื“ ืฉืœื™ืฉื™. ื›ื“ื™ ืœื™ืฆื•ืจ ื—ื•ื–ื” Ontology Wasm ื—ื“ืฉ, ืคืฉื•ื˜ ื”ืคืขืœ ืืช ื”ืคืงื•ื“ื” ื”ื‘ืื”:

ืื™ืš ื›ื•ืชื‘ื™ื ื—ื•ื–ื” ื—ื›ื ืฉืœ WebAssembly ื‘ืจืฉืช ืื•ื ื˜ื•ืœื•ื’ื™ื”? ื—ืœืง 1: ื—ืœื•ื“ื”

ืžื‘ื ื” ื”ืคืจื•ื™ืงื˜ ืฉื”ื•ื ืžื™ื™ืฆืจ:

ืื™ืš ื›ื•ืชื‘ื™ื ื—ื•ื–ื” ื—ื›ื ืฉืœ WebAssembly ื‘ืจืฉืช ืื•ื ื˜ื•ืœื•ื’ื™ื”? ื—ืœืง 1: ื—ืœื•ื“ื”

ื”ืงื•ื‘ืฅ Cargo.toml ืžืฉืžืฉ ืœื”ื’ื“ืจืช ืžื™ื“ืข ืคืจื•ื™ืงื˜ ื‘ืกื™ืกื™ ื•ืžื™ื“ืข ืกืคืจื™ื™ื” ืชืœื•ื™. ื™ืฉ ืœื”ื’ื“ื™ืจ ืืช ื”ืงื˜ืข [lib] ืฉืœ ื”ืงื•ื‘ืฅ ืœ-crate-type = ["cdylib"]. ื”ืงื•ื‘ืฅ lib.rs ืžืฉืžืฉ ืœื›ืชื™ื‘ืช ืงื•ื“ ืœื•ื’ื™ื™ืช ื”ื—ื•ื–ื”. ื‘ื ื•ืกืฃ, ืขืœื™ืš ืœื”ื•ืกื™ืฃ ืคืจืžื˜ืจื™ ืชืœื•ืช ืœืงื˜ืข [ืชืœื•ืช] ื‘ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ Cargo.toml:

ืื™ืš ื›ื•ืชื‘ื™ื ื—ื•ื–ื” ื—ื›ื ืฉืœ WebAssembly ื‘ืจืฉืช ืื•ื ื˜ื•ืœื•ื’ื™ื”? ื—ืœืง 1: ื—ืœื•ื“ื”

ืขื ืชืœื•ืช ื–ื•, ืžืคืชื—ื™ื ื™ื›ื•ืœื™ื ืœื”ืชืงืฉืจ ืœืžืžืฉืงื™ื ื”ืžืงื™ื™ืžื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ื‘ืœื•ืงืฆ'ื™ื™ืŸ ืฉืœ ืื•ื ื˜ื•ืœื•ื’ื™ื” ื•ื›ืœื™ื ื›ื’ื•ืŸ ืคืจืžื˜ืจ ื”ืกื™ื“ืจื”.

ืคื•ื ืงืฆื™ื™ืช ื”ื–ื ืช ื—ื•ื–ื”

ืœื›ืœ ืชื•ื›ื ื™ืช ื™ืฉ ืคื•ื ืงืฆื™ื™ืช ืงืœื˜, ื›ืžื• ื”ืคื•ื ืงืฆื™ื” ื”ืจืืฉื™ืช ืฉืื ื• ืจื•ืื™ื ื‘ื“ืจืš ื›ืœืœ, ืืš ืœื—ื•ื–ื” ืื™ืŸ ืคื•ื ืงืฆื™ื” ืจืืฉื™ืช. ื›ืืฉืจ ื—ื•ื–ื” Wasm ืคื•ืชื— ื‘ืืžืฆืขื•ืช Rust, ืคื•ื ืงืฆื™ื™ืช ื”-invoke ื”ืžื•ื’ื“ืจืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืžืฉืžืฉืช ื›ืคื•ื ืงืฆื™ื™ืช ื”ืงืœื˜ ืœืฉื™ืžื•ืฉ ื‘ื—ื•ื–ื”. ืฉืžื” ืฉืœ ืคื•ื ืงืฆื™ื” ื‘-Rust ืœื ื™ื”ื™ื” ื‘ืจื•ืจ ื‘ืขืช ื”ื™ื“ื•ืจ ืฉืœ ืงื•ื“ ืžืงื•ืจ Rust ืœืงื•ื“ ื‘ืชื™ื ืฉื ื™ืชืŸ ืœื‘ืฆืข ืขืœ ื™ื“ื™ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช. ื›ื“ื™ ืœืžื ื•ืข ืžื”ืงื•ืžืคื™ื™ืœืจ ืœื™ืฆื•ืจ ืงื•ื“ ืžื™ื•ืชืจ ื•ืœื”ืงื˜ื™ืŸ ืืช ื’ื•ื“ืœ ื”ื—ื•ื–ื”, ืคื•ื ืงืฆื™ื™ืช ื”-invoke ืžื•ืกื™ืคื” ืืช ื”ื”ืขืจื” #[no_mangle].

ื›ื™ืฆื“ ืคื•ื ืงืฆื™ื™ืช invoke ืžืงื‘ืœืช ืคืจืžื˜ืจื™ื ืœื‘ื™ืฆื•ืข ืขืกืงื”?

ืกืคืจื™ื™ืช ontio_std ืžืกืคืงืช ืคื•ื ืงืฆื™ื™ืช runtime::input() ื›ื“ื™ ืœืงื‘ืœ ืืช ื”ืคืจืžื˜ืจื™ื ืœื‘ื™ืฆื•ืข ืขืกืงื”. ืžืคืชื—ื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘- ZeroCopySource ื›ื“ื™ ืœื‘ื˜ืœ ืืช ืกื“ืจืช ื”ื‘ืชื™ื ื”ืžืชืงื‘ืœืช. ืฉื‘ื• ื”ืžืขืจืš ื”ืจืืฉื•ืŸ ืฉืœ ื”ื‘ืชื™ื ืฉื ืงืจื ื”ื•ื ืฉื ืฉื™ื˜ืช ื”-invoke, ื•ืื—ืจื™ื• ืคืจืžื˜ืจื™ ื”ืฉื™ื˜ื”.

ื›ื™ืฆื“ ืžื•ื—ื–ืจืช ืชื•ืฆืืช ื‘ื™ืฆื•ืข ื”ื—ื•ื–ื”?

ื”ืคื•ื ืงืฆื™ื” runtime::ret ื”ืžืกื•ืคืงืช ืขืœ ื™ื“ื™ ืกืคืจื™ื™ืช ontio_std ืžื—ื–ื™ืจื” ืืช ื”ืชื•ืฆืื” ืฉืœ ื‘ื™ืฆื•ืข ืฉื™ื˜ื”.

ืคื•ื ืงืฆื™ื™ืช ื”-invoke ืฉื”ื•ืฉืœืžื” ื ืจืื™ืช ื›ืš:

ืื™ืš ื›ื•ืชื‘ื™ื ื—ื•ื–ื” ื—ื›ื ืฉืœ WebAssembly ื‘ืจืฉืช ืื•ื ื˜ื•ืœื•ื’ื™ื”? ื—ืœืง 1: ื—ืœื•ื“ื”

ืกื™ื“ื•ืจ ื•ื‘ื™ื˜ื•ืœ ื”ืกื“ืจืช ื ืชื•ื ื™ ื—ื•ื–ื”

ื‘ืชื”ืœื™ืš ื”ืคื™ืชื•ื— ืฉืœ ื—ื•ื–ื™ื, ืžืคืชื—ื™ื ืชืžื™ื“ ื ืชืงืœื™ื ื‘ื‘ืขื™ื•ืช ื‘ืกืจื™ืืœื™ื–ืฆื™ื” ื•ื“ื”-ืกืจื™ืืœื™ื–ืฆื™ื”, ื‘ืžื™ื•ื—ื“ ื›ื™ืฆื“ ืœืื—ืกืŸ ืกื•ื’ ื ืชื•ื ื™ 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. ืœื—ืฅ ืขืœ

ื”ืื ืืชื” ืžืคืชื—? ื”ืฆื˜ืจืฃ ืœืงื”ื™ืœืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืฉืœื ื• ื‘- ืžื—ืœื•ืงืช. ื›ืžื• ื›ืŸ, ืชืกืชื›ืœ ืขืœ ืžืจื›ื– ืžืคืชื—ื™ื ื‘ืืชืจ ื”ืื™ื ื˜ืจื ื˜ ืฉืœื ื•, ืฉื ืชื•ื›ืœ ืœืžืฆื•ื ื›ืœื™ื ืœืžืคืชื—ื™ื, ืชื™ืขื•ื“ ื•ืขื•ื“.

ืื•ื ื˜ื•ืœื•ื’ื™ื”

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”