* Use CID values for tetraplets and `canon` vectors.
* Rename `cid_store` to `value_store`
It is consistent with the new `tetraplet_store` and `canon_store`
fields.
* Make canon data more typeful
The `CanonResult` doesn't take a JSON value anymore that is further
deserialized elsewhere, but is a struct that has all data deserialized.
* Typeful `CID` type
The `CID` type has a phantom type paramter defining its value's type.
* Group cid stores and trackers
Group cid stores into `CidInfo` struct, and trackers into `ExecutionCidState` struct.
* chore(deps): update rust crate cid to 0.10.0
* One has to update `cid` together with `multihash`
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
This PR intended to reduce stream usage scope in order to make AquaVM truly deterministic.
Refs: #297.
Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
Co-authored-by: Anatoly Laskaris <github_me@nahsi.dev>
The current peer ID is passed as a new field of `TestRunParameters` named
`current_peer_id: String`, instead of creating an AVM with peer ID.
This is a breaking API change of `avm-interface` and `avm-server`.
Validator checks that stream used in `canon` is populated by a value in a supplied script. This PR removes this check, because it's useful for code generation.
At the moment `Ap` state contains vector of generations, although the ap instruction itself allow to specify only one stream. It was done to support several streams in a result position in a future. But the current realization allows to handle empty vector that was implemented to support states for scalars and it turned out (for more info see #326) that states for scalars aren't actually needed.
Closes#355.
This PR refactors call merger of `TraceHandler`. Previously it requires `CallOutputValue` to determine a type of call output value (stream or scalar). And internally it checked correspondence between data result and call output type and return a error if they are not equal. Although execution engine component also had a match over these values and does nothing if they are not matched since `TraceHandler` did this job. This PR eliminate such behaviour and improve isolation of AquaVM modules.
feat(execution-engine): change behaviour of fold over streams
Change behaviour of fold over streams to make it more similar to pi-calculus channels/names (for more info see #333).
Closes#333.
BREAKING CHANGE:
The new stream behaviour is not compatible with old one, such as
```
(fold $stream iterator
(seq
(call ...)
(next iterator)))
```
will never end after this change (for more info again see #333).
* Get rid of unsafe code unless really necessary
* Add lint levels where appropriate
Some crates (air-beautifier, air-testing-framework) have lot of
rust_2018_idioms violations, that will be resolved later.
* Refactor `avm-server` interface mod to new crate (#294)
The new crate name is `avm-interface`.
It allows to build fully native air-trace, including pure WASM build.
* Make fully native air-trace build
Unless `wasm` feature is enabled (default), fully native build is
produced. You may build WASM air-trace binary with
`cargo build --target wasm32-wasi --no-default-features --release -p air-trace`
* Fix tracing output on native air-trace build
Wrong option was used.