Commit Graph

3224 Commits

Author SHA1 Message Date
KtorZ 6d0fe560e2
Provide UPLC machine error as trace context on test failure 2024-08-31 00:01:54 +02:00
KtorZ fed464278d
Allow field access on 'else'. 2024-08-31 00:01:46 +02:00
KtorZ 7aefa85de1
Handle importing validator handler into test module. 2024-08-30 22:43:10 +02:00
KtorZ 5dfa3e7cca
Add label annotation where missing in type-checker errors. 2024-08-30 18:41:25 +02:00
KtorZ 5414fd8f04
Fill-in CHANGELOG for zero-arg / super-const. 2024-08-30 18:41:06 +02:00
KtorZ 75c059bf65
Fix module constant usage warnings. 2024-08-30 18:24:35 +02:00
KtorZ 55d381fbfc
Merge branch 'supercharge-constants' 2024-08-30 15:45:04 +02:00
KtorZ e3e889f875
Update benchmarks. 2024-08-30 15:45:00 +02:00
KtorZ a06383d333
Use const instead of zero-arg functions in few code-gen tests. 2024-08-30 14:47:22 +02:00
KtorZ ef89691331
Ensure code-gen's Program version/semantic matches Plutus version 2024-08-30 14:45:02 +02:00
microproofs 4a8bec4caa
Fixing gen uplc tests 2024-08-29 16:30:31 +02:00
microproofs e772ff1787
Missed some zero parameter check 2024-08-29 16:30:30 +02:00
KtorZ 6c2e3272da
Re-implement and extend docs formatter for constants 2024-08-29 16:25:35 +02:00
KtorZ 71f90ad49f
Fix constant definition parser.
Wouldn't allow a proper sequence of results. Now it does.
2024-08-29 16:25:12 +02:00
KtorZ a909e9eb0a
Add acceptance_tests/109 to illustrate new config/constants capabilities. 2024-08-29 16:25:12 +02:00
KtorZ 38e8c6264d
Do not trigger warnings for exported configurations. 2024-08-29 16:25:12 +02:00
KtorZ 9063549f2e
Re-use expr formatter for constants. 2024-08-29 16:25:12 +02:00
microproofs f35afe8d65
Implement SimpleExpr logic for configuration parsing
We can now use boolean, lists & all in configuration.
2024-08-29 16:25:10 +02:00
microproofs f674f9ee97
hoist functions to super constants too 2024-08-29 16:24:14 +02:00
KtorZ cd0a9440e8
Allow any expression as constants
This is only a start. It compiles, but with a few TODOs left open. In particular, it doesn't currently handle constants depending on other constants or functions; nor does it hoist constants.
2024-08-29 16:24:12 +02:00
KtorZ 79cf0b8d97
Fix test_framework tests trying to implement function on foreign type. 2024-08-29 13:49:09 +02:00
KtorZ c21466831c
Bump versions to 1.1.0, in anticipation. 2024-08-29 09:12:37 +02:00
KtorZ e31c6de04e
Adjust module organization to facilitate resurrection of the playground.
The playground doesn't / cannot depend on aiken-project because that becomes a gigantic pain. So instead, we try to keep essential stuff inside aiken-lang when possible.
2024-08-29 09:12:37 +02:00
KtorZ 8bccbd9e00
Update acceptance tests and script context tests to latest stdlib. 2024-08-28 17:41:32 +02:00
KtorZ 745f14ccb2
Adjust doc to support blockquote alerts. 2024-08-28 15:28:49 +02:00
rvcas 6bbc6a8f2f
chore: fix the issue in gift card 2024-08-27 19:12:44 -04:00
rvcas d337e601cb
chore: add a test for by name with params 2024-08-27 18:10:46 -04:00
Matthias Benkort 9943c2cc7a
Merge pull request #977 from aiken-lang/rvcas/validators_v3
Implement PlutusV3 Validators
2024-08-27 20:31:25 +02:00
KtorZ b78aee2acc
Use pallas==0.30.1 2024-08-27 20:17:56 +02:00
KtorZ efeda9a998
Prevent non-default fallback on exhaustive validator
Technically, we always need a fallback just because the way the UPLC
  is going to work. The last case in the handler pattern matching is
  always going to be else ...

  We could optimize that away and when the validator is exhaustive, make
  the last handler the fallback. Yet, it's really a micro optimization
  that saves us one extra if/else. So the sake of getting things
  working, we always assume that there's a fallback but, with the extra
  condition that when the validator is exhaustive (i.e. there's a
  handler covering all purposes), the fallback HAS TO BE the default
  fallback (i.e. (_) => fail).

  This allows us to gracefully format it out, and also raise an error in
  case where there's an extraneous custom fallback.
2024-08-27 20:16:45 +02:00
KtorZ 48535636ed
Fix remaining acceptance tests to be V3-compatible 2024-08-27 19:19:25 +02:00
KtorZ d615b4f889
Fix incongruous panic when annotation is missing from Datum.
It's fine for the argument to not be annotated; in which case we
  simply default back to an `Option<Data>`.
2024-08-27 18:55:18 +02:00
KtorZ 4003343444
Fix default annotation for spend's optional datum and mint argument.
When there's no type annotation in a validator handler signature, we
  provide default annotation to help the type-checker. However, for
  spend's datum and mint policy_id, those annotations mustn't be `Data`,
  but rather Option<Data> and Bytearray.

  Without that, when no annotation are provided, the compiler infer
  invalid types and fails with incongruous errors.
2024-08-27 18:42:10 +02:00
KtorZ 0510ca58f7
Implement record access syntax for validator handlers.
This is a little trick which detects record access and replace them
  with a simple var. The var itself is the validator handler name,
  though since it contains dots, it cannot be referred to by users
  explicitly. Yet fundamentally, it is semantically equivalent to just
  calling the function by its name.

  Note that this commit also removes the weird backdoor for allowing
  importing validators in modules starting with `tests`. Allowing
  validators handler to be used in importable module requires more work
  and is arguably useful; so we will wait until someone complain and
  reconsider the proper way to do it.
2024-08-27 17:16:15 +02:00
KtorZ ee8f608c0b
Omit validator return annotation when formatting
Unless it is NOT bool as it deviates from the default and while wrong, we want to preserve it to provide a good error.
2024-08-27 14:53:07 +02:00
KtorZ d74e36d0bc
Introduce 'Never' type as a safe alternative to always None options
Unfortunately, as documented in:

  https://github.com/IntersectMBO/cardano-ledger/issues/4571

  Some Option fields in the script context certificates are going to
  remain set to None, at least until the next Hard fork. There's a risk
  that people permanently lock their funds if they expect deposits on
  registration credentials to ever be `Some`.

  So, we introduce a special type that emulate an `Option` that can only
  ever be `None`. We call it `Never` and it is the first type of this
  kind (i.e. with constructors indexes not starting at 0).
2024-08-27 14:40:39 +02:00
rvcas ff25fbd970
chore: acceptance tests v3 syntax 2024-08-26 15:56:49 -04:00
rvcas b57f840cad
chore: use correct arguments in gift card validators 2024-08-26 15:45:37 -04:00
rvcas c87f459ce7
chore: convert gift card tutorial to v3 2024-08-26 15:41:01 -04:00
KtorZ 3521a8c921
Start adjusting acceptance tests to the new Plutus V3 syntax. 2024-08-25 17:12:36 +02:00
KtorZ af9a785d65
Provide default annotation to validators (incl. fallback)
Without that, we may encounter weird error messages when writing
  validators without an explicit `else`. Since we automatically fill it
  with a `fail`; without annotation, it unifies to a generic parameter.

  The existing check that would look for the body being an error term is
  ill-advised as it doesn't work as soon as one adds tracing, or make
  the validator a parameterized validator. Plus, it may simply trigger
  the wrong behavior as one can now annotate a validator with _whatever_
  and get pass the type-checker by plucking a `fail` keyword as body.
2024-08-25 17:12:11 +02:00
KtorZ 1198d7a5ae
Adjust hello world example to new Plutus V3 syntax. 2024-08-25 16:29:24 +02:00
KtorZ 0c9ea196be
Format uplc crate 2024-08-25 16:20:45 +02:00
KtorZ e9edd20c21
Fix gen_uplc tests revolving around validators.
Fucking hell.

  I got rid of the 'opaque_value_in_datum' test since it is no longer
  relevant (we now forbid the presence of opaque types in the ABI).
2024-08-25 16:20:09 +02:00
KtorZ 52a39629b7
Add UPLC test for always_true mint validator.
Mainly to have a trivial example with just the validator boilerplate code.
2024-08-25 16:20:08 +02:00
KtorZ 8c2fdf9ad4
Use dot to separate purpose from validator name in blueprint
The rationale is two folds:

  1. It's more consistent with how we already separate the validator
  name from its module.

  2. Because `_` may be present in Aiken's validator's name, it is hard
     to read and I am afraid it could potentially conflict later on. So
     it's better to use a separator that cannot appear in validator
     names.
2024-08-25 16:20:08 +02:00
KtorZ ed55f03aa2
Fix remaining blueprint test.
Probably an oversight when we reworked them.
2024-08-25 16:20:08 +02:00
KtorZ 442010d056
Fix generation of fallback validator
This must only happen in case all other validator succeed; otherwise
  we might generate invalid validators.
2024-08-25 16:20:08 +02:00
rvcas 73522296aa
chore: accept updated snapshot 2024-08-25 16:20:08 +02:00
rvcas ff1464b462
feat: annotated data for option datum 2024-08-25 16:20:08 +02:00