Commit Graph

2165 Commits

Author SHA1 Message Date
KtorZ 9aa9070f56
Revise desugaring following feedback
- We now consistently desugar an expect in the last position as
    `Void`. Regardless of the pattern. Desugaring to a boolean value is
    deemed too confusing.

  - This commit also removes the desugaring for let-binding. It's only
    ever allowed for _expect_ which then behaves like a side effect.

  - We also now allow tests to return either `Bool` or `Void`. A test
    that returns `Void` is treated the same as a test returning `True`.
2024-08-23 16:04:40 +02:00
KtorZ fbe6f02fd1
Allow assignment as last expression
This is debatable, but I would argue that it's been sufficiently
  annoying for people and such a low-hanging fruit that we ought to do
  something about it.

  The strategy here is simple: when we find a sequence of expression
  that ends with an assignment (let or expect), we can simply desugar it
  into two expressions: the assignment followed by either `Void` or a
  boolean.

  The latter is used when the assignment pattern is itself a boolean;
  the next boolean becomes the expected value. The former, `Void`, is
  used for everything else. So said differently, any assignment
  implicitly _returns Void_, except for boolean which return the actual
  patterned bool.

  <table>
  <thead><tr><th>expression</th><th>desugar into</th></tr></thead>
  <tbody>
  <tr>
  <td>

  ```aiken
  fn expect_bool(data: Data) -> Void {
    expect _: Bool = data
  }
  ```
  </td>
  <td>

  ```aiken
  fn expect_bool(data: Data) -> Void {
    expect _: Bool = data
    Void
  }
  ```
  </td>
  </tr>
  <tr>
  <td>

  ```aiken
  fn weird_maths() -> Bool {
    expect 1 == 2
  }
  ```
  </td>
  <td>

  ```aiken
  fn weird_maths() -> Bool {
    expect True = 1 == 2
    True
  }
  ```
  </td>
  </tr>
  </tbody>
  </table>
2024-08-23 16:04:39 +02:00
KtorZ 0f905045e7
Rename mk_nil_data, mk_pair_data & mk_nil_pair_data builtins. 2024-08-23 10:39:37 +02:00
KtorZ 6e67fe837b
Keep constants and types sorted; only functions are unsorted. 2024-08-23 10:30:18 +02:00
KtorZ c3e39301e2
Re-format source code using cargo fmt. 2024-08-22 16:42:41 +02:00
KtorZ b479a289cf
Implement source linker and add URL to source code in generated docs.
Long overdue.
2024-08-22 16:37:48 +02:00
KtorZ 44e42d608d
Allow hidden modules, not generating any documentation.
This is useful when splitting module for dependencies, yet without the desire to expose internal constructors and types. This merely skips the documentation generation; but doesn't prevent the hidden module from being accessible.
2024-08-22 15:47:00 +02:00
KtorZ 7eee3ce63c
Fix CLI output colors when generating documentation. 2024-08-22 15:47:00 +02:00
KtorZ 10c829edfa
Parse and display documentation section headers.
The idea is pretty simple, we'll just look for lines starting with Markdown heading sections, and render them in the documentation. They appear both in the sidebar, and within the generated docs themselves in between functions. This, coupled with the order preservation of the declaration in a module should make the generated docs significantly more elegant to organize and present.
2024-08-22 15:47:00 +02:00
KtorZ 0ff12b9246
Better module hierarchy and style for generated docs.
This commit also reverse the order of the sections in the sidebar such
  that modules are now placed last.
2024-08-22 15:43:55 +02:00
KtorZ 8b869c0a32
Do not sort functions, types and constants in generated docs
The rationale is to let them in the order they are defined, so that
  library authors have some freedom in how they present information. On
  top of that, we'll also now parse specifi comments as section headers
  that will be inserted in the sidebar when present.
2024-08-22 15:08:46 +02:00
KtorZ 802e8272c5
Properly display constructor arguments documentation, if any. 2024-08-20 09:31:41 +02:00
KtorZ 42784965d2
Implement new costing function for {divide,quotient,mod,remainder}_integer
As well as fixing a couple of other issues thanks to conformance
  tests. Some functions like multiply_integer or verify_ed25519_signature
  have also slightly changed their costing function.
2024-08-14 02:50:05 +02:00
KtorZ 2cb87f4f8f
Add PlutusV3 conformance tests and also control budgets
There were some odd discrepancy for `integerToByteString` on the mem
  side. Either 1 or about 1000 mem units off; which I couldn't quite
  figure out. Yet, it proves useful to validate builtin at large and
  ensure we have a valid cost model for v3.
2024-08-14 02:42:04 +02:00
KtorZ f879f6d183
Fix script context translations for withdrawals and validity intervals. 2024-08-13 23:43:47 +02:00
KtorZ 5067aad0d8
Fix 'Pair' formatter inside forced unbroken components. 2024-08-13 17:05:41 +02:00
KtorZ 7501538053
Add script context translations for voting purpose. 2024-08-13 16:24:01 +02:00
KtorZ bfc93bf076
Add script context translation for new Conway certificates 2024-08-13 10:56:29 +02:00
KtorZ f244b9c496
Add support for protocol parameters (except cost models)
We can now simulate transactions with protocol parameters voting
  procedures. Cost models remain to be done, though.
2024-08-13 10:56:29 +02:00
KtorZ cfca0da4e9
Add (partial) support for simulating contract with proposal procedures
This covers every proposal procedures but protocol parameters, this
  one is yet to be done. It spans over 30+ fields, and felt like it is a
  big enough piece to tackle it on its own.
2024-08-13 10:56:29 +02:00
KtorZ 6b6bace8a5
test 'mint' purpose and script context creation.
Alongside a bunch of other stuff from the coverage list. In
  particular, the mint transaction contains:

  - reference inputs
  - multiple outputs, with assets, and type-0, type-1 and type-6
    addresses.
  - an output with a datum hash
  - an output with an inline script
  - carries an extra datum witness, preimage of the embedded hash
  - mint, with 2 policies purposely ordered wrongly, with 1 and 2
    assets purposely ordered wrong. One of the mint is actually a
    burn (i.e. negative quantity)
2024-08-13 10:56:29 +02:00
KtorZ eea8dc7d0a
Support multi-validator in script context accept test. 2024-08-13 10:56:28 +02:00
KtorZ b158469144
Improve / fix machine and uplc error reporting. 2024-08-13 10:56:28 +02:00
KtorZ f56b9bbbc7
Rename function variable in parser
Better reflect its actual semantic. The name probably slipped through a wrong copy pasting.
2024-08-13 10:56:28 +02:00
KtorZ 62b1b932f9
Write down first e2e script context test for v3. 2024-08-13 10:56:28 +02:00
KtorZ 821f7bd8c7
Fix ToPlutusData serializer for V3
This is intense, as we still want to preserve the serializer for V1 &
  V2, and I've tried as much as possible to avoid polluting the
  application layer with many enum types such as:

  ```
  pub enum TxOut {
    V1(TransactionOutput),
    V2(TransactionOutput),
    V3(TransactionOutput),
  }
  ```

  Those types make working with the script context cumbersome, and are
  only truly required to provide different serialisation strategies. So
  instead, we keep one top-level `TxInfo V1/V2/V3` type, and we ensure
  to pass serialization strategies as type wrappers.

  This way, the strategy propagates through the structure up until it's
  eliminated when it reaches the relevant types.

  All-in-all, this strikes a correct balance between maintainability and
  repetition; and it makes it possible to define _different but mostly
  identical_ encoders for the various versions.

  With it, I've been able to successfully encode a V3 script context and
  match it against one produced using the Haskell libraries. More to
  come.
2024-08-13 10:55:23 +02:00
KtorZ f848bad3f2
define UPLC machine default cost models for Plutus V3. 2024-08-13 10:55:23 +02:00
KtorZ fdf7a81288
implement a strict subset of PlutusV3 transaction info
More specifically, that is simply mimicking the script context from
  v2, minus the new governance features.
2024-08-13 10:55:23 +02:00
KtorZ c454dc72eb
Actually decode Conway transaction in 'aiken tx simulate' 2024-08-13 10:55:22 +02:00
KtorZ 508d88035b
Fix Plutus v3 validator hash calculation in blueprint. 2024-08-13 10:55:22 +02:00
KtorZ 445ffc483d
Further remove todos for v3, and reduce duplication in transaction evaluation 2024-08-13 10:55:22 +02:00
KtorZ ff4a480242
Upgrade pallas to v0.0.29, and start support for simulating transactions carrying Plutus v3 scripts. 2024-08-13 10:55:22 +02:00
Riley-Kilgore cab58e5aab One other place 2024-08-12 17:57:54 -04:00
Riley-Kilgore 213ad48de7 Fixed span calculation for backpassing (sort of) 2024-08-12 17:57:54 -04:00
Matthias Benkort eb4a43719c
Merge pull request #998 from aiken-lang/riley/misc-hover
Added more granularity to find_node for Fn
2024-08-12 02:16:38 +02:00
Riley-Kilgore 52c8ca6cee Added fix to Fn find_node 2024-08-08 17:15:28 -07:00
microproofs 72059eacee
Fix: Recursion issue where the static param optimization on recursive functions that were passed as arguments to other functions 2024-08-08 19:36:16 -04:00
KtorZ 59bc9e04ad
Box large elements in project errors. 2024-08-08 14:52:19 -04:00
KtorZ b36250d183
Provide better errors on unknown type in cyclic definitions.
Let's consider the following case:

  ```
  type Var =
    Integer

  type Vars =
    List<Var>
  ```

  This incorrectly reports an infinite cycle; due to the inability to
  properly type-check `Var` which is also a dependent var of `Vars`. Yet
  the real issue here being that `Integer` is an unknown type.

  This commit also upgrades miette to 7.2.0, so that we can also display
  a better error output when the problem is actually a cycle.
2024-08-08 14:52:14 -04:00
microproofs 6fd9b34b92 Running examples as doc tests is not gonna work 2024-08-08 00:39:44 -04:00
microproofs 53c461294b Fix example that was throwing an error 2024-08-08 00:39:44 -04:00
microproofs 31627897d7 Fix example that was throwing an error 2024-08-08 00:39:44 -04:00
microproofs 0800901135 Fix clippy 2024-08-08 00:39:44 -04:00
microproofs 51fd503317 warning fix 2024-08-08 00:39:44 -04:00
microproofs 0a1992acd2 Run acceptance tests 2024-08-08 00:39:44 -04:00
microproofs 224f31b1d7 Fixed last gen_uplc test 2024-08-08 00:39:44 -04:00
microproofs 56ff4ec678 Fixing other tests 2024-08-08 00:39:44 -04:00
microproofs 7ad5491ea9 Fix major uplc test 2024-08-08 00:39:44 -04:00
microproofs 33370b8637 Fix minor issues found when testing 2024-08-08 00:39:44 -04:00
microproofs 4249ef2509 Fix extra delay in a test 2024-08-08 00:39:44 -04:00