Commit Graph

2389 Commits

Author SHA1 Message Date
KtorZ
823492c27b Adjust v3 script context end-to-end tests to work with new syntax. 2024-08-25 16:20:04 +02:00
KtorZ
972e9bd763 Define ScriptPurpose & ScriptContext types in prelude, fix codegen new v3 wrapper. 2024-08-25 16:20:04 +02:00
rvcas
90d75d4a13 fix: redeemer could be missing 2024-08-25 16:20:04 +02:00
rvcas
00b8a39236 fix: private type leaks 2024-08-25 16:20:04 +02:00
rvcas
79840248c0 fix: more parse errors in some tests 2024-08-25 16:20:04 +02:00
rvcas
f94e40daf4 fix: more test and issues with scoping/names 2024-08-25 16:20:03 +02:00
rvcas
cf3180996a fix: map fallback name if present to else 2024-08-25 16:20:03 +02:00
rvcas
00907c2bcc fix: format snapshot tests 2024-08-25 16:20:03 +02:00
rvcas
7f26db401c feat: handler implicit some and none 2024-08-25 16:20:03 +02:00
rvcas
6b8be61b6e test: new snapshots for parsing v3 validators 2024-08-25 16:20:03 +02:00
rvcas
0d8d80e5a7 feat: transform TypedValidator in a function of handlers 2024-08-25 16:20:03 +02:00
rvcas
466a4f0b39 feat: adjust blueprint stuff to be aware of handlers 2024-08-25 16:20:02 +02:00
rvcas
471bbe2175 feat: append validator name to handlers 2024-08-25 16:20:02 +02:00
rvcas
b984f0455a feat: return a vec instead of Option 2024-08-25 16:20:02 +02:00
rvcas
4287fa3f4a feat: new formatting for validators v3 2024-08-25 16:20:02 +02:00
rvcas
9e866a5ec1 fix: make sure that fallback gets it's own scope with params 2024-08-25 16:20:02 +02:00
rvcas
1d9034573b feat: impl infer for new validators 2024-08-25 16:20:02 +02:00
rvcas
fff90f7df5 feat: fix inference comp issues 2024-08-25 16:20:02 +02:00
rvcas
0de5cbc74e feat: implement new validator parsing 2024-08-25 16:20:01 +02:00
jmhrpr
c98e32d3e9 optional costmodel in eval p2 raw 2024-08-24 18:28:08 +02:00
KtorZ
8dfaa1bf90 Fix parsing of v3 cost model
Closes #1002.
2024-08-24 18:26:37 +02:00
KtorZ
a71d7c260c Fix doc_test examples for 'common_prefix' 2024-08-23 16:17:54 +02:00
KtorZ
c92b260260 Fix gen_uplc tests following: 0f905045 2024-08-23 16:17:27 +02:00
KtorZ
c3b287507e Fix link_tree test following 0ff12b92 2024-08-23 16:10:07 +02:00
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