141 Commits

Author SHA1 Message Date
Ivan Boldyrev
c2108e0fa0
feat(execution-engine,test-utils,interpreter-data,interpreter-cid)!: Rc into CID (#718)
* Hide `Rc` inside `CID` type, making it cheap to clone.
* Introduce `CidRef` type that abstracts on `CID`'s inner type.

This change makes code cleaner, makes memory more optimal (single allocation vs two allocations) and makes it easier to change CID's internal representation from string to binary.
2023-10-16 20:35:42 +07:00
Ivan Boldyrev
8a07613027
feat(aquavm-air)!: signature checking (#607) 2023-10-13 22:19:02 +03:00
raftedproc
ea80f117a0
fix(execution-engine)!: map with a lens now returns an appropriate tetraplet [fixes VM-331] (#706) 2023-10-13 21:14:14 +03:00
raftedproc
98870c2ff9
feat(execution-engine)!: fail :error: now bubbles the original error up [fixes VM-342] (#714) 2023-10-13 20:37:27 +03:00
raftedproc
f4caa538e4
fix(execution-engine)!: canon map lens access now returns a correct number of kvpairs in a canon stream (#708) 2023-09-28 11:47:15 +03:00
raftedproc
3a9beed3c5
fix(execution-engine)!: this adds a join behavior for key and value pair used by ap inserting into a map [fixes VM-337] (#701) 2023-09-21 19:56:22 +03:00
raftedproc
45035ccff5
feat(execution-engine)!: this patch prohibits error code = 0 (#702) 2023-09-21 17:33:57 +03:00
renovate[bot]
b713e447fc
fix(deps): update rust crate marine-rs-sdk to 0.10.0 (#640)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Valery Antopol <valery.antopol@gmail.com>
Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
2023-09-19 17:04:40 +07:00
Ivan Boldyrev
bd80a127ea
feat(parser,execution-engine): allow :error: in fail (#696)
The `(fail :error:)` was previously rejected by parser.  Now it is
executed, but is of limited use.
2023-09-19 14:21:30 +07:00
Ivan Boldyrev
d41f7646d9
chore: Rust channel update dedicated to Software Engineer Day (#699) 2023-09-14 18:55:06 +07:00
Ivan Boldyrev
4e72abe9a7
feat(execution-engine): join behavior for canon (#697)
Implement join behavior for `canon`'s first argument `peer_id`.  It
simplifies generating code in Aqua compiler when `peer_id` is defined
by a variable defined in a `par` branch.

Co-authored-by: Mike Voronov <michail.vms@gmail.com>
2023-09-13 21:20:51 +07:00
raftedproc
b4cbf8f621
feat(execution-engine)!: canon stream map support [fixes VM-301] (#648)
* feat(execution-engine)!: canon stream map support [fixes VM-301]
	Canon stream map is a CRDT-like map structure that contains a
	canonicalized stream map and allows indexed access to its
	contents. ATM CSM supports both strings and int64 keys.
2023-09-07 11:30:24 +03:00
raftedproc
20afb79e3f
feat(execution-engine): a new :error: runtime attribute according with FLIP-11 [fixes VM-329] (#683)
* feat(execution-engine): a new :error: runtime attribute according with FLIP-11 [fixes VM-329]
2023-09-04 22:57:51 +03:00
Ivan Boldyrev
2b636e808a
feat(execution-engine,interpreter-data)!: insert state for canon join (#682)
If `canon` is to be executed on another peer and the particle is to be
sent here, current peer inserts canon request-sent-by state to avoid
repeated requests, similar to `call` instruction.
2023-08-29 18:18:42 +02:00
raftedproc
f943dd00cd
feat(execution-engine)!: this introduces a hardcoded limit for a number of values in a stream [fixes VM-324] (#677)
feat(execution-engine)!: this introduces a hardcoded limit for a number of values in a stream [fixes VM-324]
2023-08-23 12:33:00 +03:00
Valery Antopol
4b4e3bde83
feat: updating marine-rs-sdk minor version (#667)
* 1st polyplets update: minor marine-rs-sdk-main bump

* renovate manifest update

* update marine-rs-sdk

* update marine runtime

* bump minor versions
2023-08-09 22:11:45 +03:00
Mike Voronov
75bb33056c
chore: fix code formatting (#653)
formatting
2023-08-03 22:45:21 +03:00
Mike Voronov
791ada3b93
chore(tests): fix publish_version_check test (#651)
fix publish_version_check
2023-08-03 22:28:56 +03:00
Mike Voronov
1493ae3450
chore(tests): fix version checking tests (#650)
fix version checking tests
2023-08-03 21:58:42 +03:00
Mike Voronov
eca52b7191
feat(execution-engine)!: refactor streams [fixes VM-255] (#621)
Refactored stream and stream generation a lot, it introduces the following changes:
- no generation in data anymore, AquaVM relies on generation inside data to stay valid and places value accordingly to it
- stream is internally divided into previous, current, and new values, before, it was one array for all of them
- recursive streams cursors are refactored and rely on new generation values instead
- the Generation enum was refactored and now contains the source of the generation
2023-08-03 21:07:57 +03:00
Mike Voronov
e41953b495
chore(tests): test case for #644 (#645) 2023-08-01 18:35:44 +03:00
Mike Voronov
f5c19da057
chore(tests): test case for #642 (#643) 2023-08-01 18:24:22 +03:00
Mike Voronov
6fd0385058
chore(execution-engine): refactor unseen canon stream creation (#636) 2023-07-20 23:11:55 +03:00
raftedproc
33a9d9f32f
feat(execution-engine)!: add error-code invariant check for match/mismatch (#622) 2023-07-16 17:53:01 +03:00
raftedproc
d195152320
feat(execution-engine)!: unfefined %last_error% now returns an empty … (#628)
feat(execution-engine)!: %last_eror%.$.message and $.error_code now return an empty string and 0 correspondingly [fixes VM-313]
2023-07-14 21:46:28 +03:00
Mike Voronov
d5a3f768af
chore: remove fstrings dep (#627)
* remove fstrings dep

---------

Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
2023-07-14 20:02:19 +07:00
Ivan Boldyrev
75f5516c58
feat(aquavm-air)!: ap join behavior (#631)
* feat(aquavm-air)!: `ap` join behavior

Previously, `ap` of an undefined (first) variable was a catchable error.
Now `ap` has join behavior for its first argument.

It should simplify compiling Aqua to AIR.

Closes #632
2023-07-14 17:48:23 +07:00
raftedproc
fcb4c9dab4
feat(execution-engine)!: stream map to scalar conversion using canon instruction [fixes VM-294] (#610)
feat(execution-engine): Stream Map to Scalar conversion using canon instruction [fixes VM-294]
2023-06-28 13:59:16 +03:00
raftedproc
56a03364b1
chore(execution-engine): additional StreamMap positive tests [fixes VM-295] (#608)
chore(execution-engine): Additional StreamMap positive tests [fixes VM-295]
2023-06-28 12:24:58 +03:00
Mike Voronov
be8c97c35c
chore(tests): add tests for topology hops (#616) 2023-06-27 21:09:10 +03:00
Ivan Boldyrev
c332cca6b7
chore(testing-framework)!: restore WASM test executor (#609)
* chore(testing-framework)!: fix WASM test runner

Native mode was used before because some package used native runner
for its tests.

This PR allows to explicitly select test runner for tests.  Many testing-framework
types are now parametrized with a runner type with almost compatible defaults.

* chore(testing-framework): Add `ReleaseWasmAirRunner`
* chore(testing-framework)!: Rename `AirScriptExecutor::simple` to `AirScriptExecutor::from_annotated`.
2023-06-23 19:28:28 +07:00
fluencebot
c6627fe437
chore: release master (#553)
* chore: release master

* chore: Bump air-interpreter version to 0.40.0

* feat(aquavm-air): Set minimal supported version to 0.40.0

---------

Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
2023-06-23 04:45:40 +07:00
Ivan Boldyrev
8ce8af3823
feat(avm-server,air-interpreter,aquavm-air)!: secret key and particle ID arguments (#593)
* feat(avm-server)!: keypair and particle ID arguments

Add `&fluence_keypair::KeyPair` argument to `AVM::call` and
`AVMRunner::call`.  This value is further forwarded in a deconstructed
form to WASM Air interpreter, but is not used there yet. Also,
`AVMRunner::call` gets `particle_id: String` argument.

feat(air-interpreter)!: `invoke` methods have three new arguments:
`key_format: u8`, `secret_key_bytes: Vec<u8>` and `paritcle_id: String`.

feat(aquavm-air): `air::execute_air` has two three arguments:
`key_format: u8`, `secret_key_bytes: Vec<u8>` and `paritcle_id: String`.

feat(aquavm-air-cli)!: add `--random-key`/`--ed25519-key file` options to AIR CLI.

* feat(avm-server)!: Add `RunnerError::KeypairError`

* chore(bench): Add signature performance benchmarks

These benchmarks contain valid signature, so they should work with
verification out of the box.

---------

Co-authored-by: Artsiom Shamsutdzinau <shamsartem@gmail.com>
Co-authored-by: folex <0xdxdy@gmail.com>
2023-06-23 03:12:37 +07:00
raftedproc
9d7d34a452
feat(execution-engine): Stream Map initial support [fixes VM-283,VM-284] (#592)
feat(execution-engine): StreamMap initial support for ap and new instructions [fixes VM-283,VM-284]
2023-06-04 21:14:59 +03:00
Ivan Boldyrev
f8b734abde
feat(aquavm-air,air-interpreter-signature,air-interpreter-data)!: Peer signatures (#598)
A peer signs the multiset of call results and canon results it has produced.

New field signatures, a map from peer public key to signature, is added to the interpreter data.

Signatures verification is yet to be done.
2023-05-15 22:21:57 +07:00
Ivan Boldyrev
1d98afeb34
feat(interpreter-data): Introduce source information for canon data (#577)
* `ValueAggregate` refactoring

0. Service results, canon results and literals are constructed as
   separate types that are further wrapped with `ValueAggregate`.
1. `ValueAggregate` is enum that contains all the provenance info.
2. Construction methods get provenance information as well.

* Rename CID state field

Prepare to adding a canon CID field: rename `canon_tracker`/`canon_store`
to `canon_element_tracker`/`canon_element_store`.

* Add canon result store/tracker

* Rename some structs that have CIDs inside

Reflect explicitly that they contain CIDs inside:

`CanonResultAggregate` -> `CanonResultCidAggregate`
`ServiceResultAggregate` -> `ServiceResultCidAggregate`

---------

Co-authored-by: Mike Voronov <michail.vms@gmail.com>
2023-05-08 19:42:41 +07:00
raftedproc
b480e018b4
chore(trace-handler): sub/-trace len dedicated alias to replace usize [fixes VM-282] (#569)
feat(trace-handler): sub/-trace len dedicated alias to replace usize [fixes VM-282]
2023-05-02 16:32:18 +03:00
Ivan Boldyrev
88fd1f3095
fix(execution-engine): Fold-over-scalar values' wrong lambda (#578)
* fix(air): Fold-over-scalar values had wrong lambda

Previously, iterator values in fold over scalar inherited tetraplet from
the scalar.  But for security guarantees, they should have `.[N]` lambda
added, where N is an element index.

When fold iterates over canon or stream, elements keep their original
tetraplet;  tests for that is added.
2023-04-19 18:22:46 +07:00
Orchimada
d62fa6fe60
feat(air): introduce explicit types for generation numbers (#530)
---------

Co-authored-by: vms <michail.vms@gmail.com>
Co-authored-by: Anatolios Laskaris <github_me@nahsi.dev>
2023-04-10 12:07:50 +01:00
renovate[bot]
648f297a2b
fix(deps): update rust crate marine-rs-sdk to 0.7.1 (#568)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-04-09 16:27:37 +01:00
raftedproc
658daf1d3f
feat(trace-handler): TracePos becomes a wrapper for u32 alias [fixes VM-267] (#544) 2023-04-05 11:50:15 +03:00
Ivan Boldyrev
d5028942e4
feat(interpreter-data)!: New data format for calls (#501)
BREAKING CHANGE:
1. Call values in the trace have CID references to structures that have call arguments' hash and CID references to values and tetraplets.
2. If call value is unused, it is serialized with `Unused` variant, and CID references are not stored.

Previous data scheme was (Scalar as an example, other cases are similar):

```
Scalar(CID<JValue>) ---<value_store>----> JValue
```

New data scheme is much more sophisticated:

```
Scalar(CID<ServiceResultAggregate>) ---+
                                       |
  +----<service_result_store>----------+
  |
  +-------> ServiceResultAggregate:
               value_cid ------------<value_store>----> JValue
               tetraplet_cid --------<tetraplet_store>----> SecurityTetraplet
               argument_hash: String
```
`Stream` variant is similar, however, `Unused` is different: it has value CID only, but the value is not stored into the `value_store`:

```
Unused(Rc<CID<JValue>>) ---> X
```

Co-authored-by: Mike Voronov <michail.vms@gmail.com>
2023-03-21 19:12:04 +07:00
raftedproc
631abd4ec4
chore(execution-engine): this commit adds a set of trace-related negative tests for UncatchableError [fixes VM-263] (#532)
chore(execution-engine): this commit adds a set of trace-related
negative tests for UncatchableError [fixes VM-263]
2023-03-21 00:31:36 +03:00
raftedproc
f1975becb3
chore(execution-engine): a set of trace-unrelated negative tests for UncatableError [fixes VM-263] (#519) 2023-03-16 19:06:26 +03:00
Valery Antopol
126d5507c8
feat(avm)!: integrate Marine 0.26.0 (#461) 2023-03-15 17:11:53 +03:00
Ivan Boldyrev
79ac153f1d
feat(tools): merge some tools into the air CLI tool (#509)
* feat(tools): merge some tools into the `air` CLI tool

`air-beautify` and `air-trace` are merged into a single `air` tool.  Its
crate name is `fluence-air-cli` as otherwise it confilicts with `air`
interpreter crate.  The tool has subcommands `beautify`, `run`
and `stats`.

* Add one-letter aliases to `air` CLI subcommands

+ `air beautify` => `air b`
+ `air run` => `air r`
+ `air stats` => `air s`

---------

Co-authored-by: Mike Voronov <michail.vms@gmail.com>
2023-03-15 16:59:30 +07:00
raftedproc
790d3c2119
chore(execution-engine): unused ApResultNotCorrespondToInstr cleanup (#513)
Remove `UncatchableError::ApResultNotCorrespondToInstr`

This transformation is valid only if `MergerApResult` has only two
variants mentioned in previos version.

Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
2023-03-14 23:23:12 +03:00
raftedproc
4f1a617bf5
chore(execution-engine): VM execution step negative tests [fixes VM-262] (#511) 2023-03-13 16:34:37 +03:00
raftedproc
cb9c426a35
chore(execution-engine): Some stream-related LambdaError are unjoinab… (#503)
chore(execution-engine): Some stream-related LambdaError are unjoinable b/c: canon stream replaces normal stream, when canon stream  is used, it is materialized and its size is known
2023-03-10 12:46:20 +03:00
raftedproc
56d3ab254e
chore(execution-engine) This commit adds a dedicated triplet resolution error for call (#500) 2023-03-07 20:26:25 +03:00