150 Commits

Author SHA1 Message Date
raftedproc
c6f157a6e3
feat(air-parser): VM-347 After next validator fold check (#774) 2023-12-28 20:48:16 +03:00
Ivan Boldyrev
f1c7b43a1e
feat(data)!: values are binary blobs (#775)
* Store deserialize values as raw JSON values

Values are parsed on-demand.
---------

Co-authored-by: Mike Voronov <michail.vms@gmail.com>
2023-12-26 18:42:40 +07:00
Mike Voronov
0a8827bb3c
chore: use resolver 2 and 2021 edition (#769) 2023-12-18 18:48:46 +03:00
Ivan Boldyrev
771d42dec4
feat(data)!: flexible serialization formats (#757)
New crate air_interpreter_sede introduces a flexible serialization and deserialization infrastructure.

Low level API: the Format trait and related. It includes simple and universal mechanisms for serializing any possible (e.g. implementing the Serde traits) value.

High level API: Representation trait and related. It allows declaring representation types that can serialize and deserialize only certain types (for example, InterpreterDataRepr can serialize only the InterpreterData, but deserialize InterpreterData and Versions` types), producing newtype values as serialization results.

The serialized representation of CallResults now contains byte arrays, not strings, because the new infrastructure serializes to byte arrays only.

Also, the basic support for multicodecs is added.
2023-12-15 21:23:09 +07:00
renovate[bot]
05fda3ee16
fix(deps): update rust crate marine-rs-sdk to 0.10.2 (#733)
---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ivan Boldyrev <ivan@fluence.one>
2023-12-12 23:24:11 +07:00
Ivan Boldyrev
524c30243b
feat(interpreter-cid,interpreter-data)!: Support for multiple hash types in CID verification (#722)
It will allow to change CID hash functions without breaking compatibility or use multiple CID hash functions.
2023-11-23 01:12:42 +07:00
raftedproc
1b7de5e659
chore(testing-framework): a new behavior to print service call parameters/result out to console (#723) 2023-11-08 14:10:05 +03:00
Ivan Boldyrev
15ce40a1cd
feat(interpreter-data)!: allow only deterministic signature algorithms (#734)
Some public signature algorithms require a RNG, but it is not
available in certain environments like smartcontracts.
2023-11-02 21:43:35 +07:00
Ivan Boldyrev
776d81a1db
feat(interpreter-cid)!: use Blake3 for CIDs (#729)
Change to more efficient cryptography hash implementation.
2023-10-23 20:16:15 +07:00
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