Commit Graph

405 Commits

Author SHA1 Message Date
rvcas 3e6f688e2d feat: refactor some methods and modules
* move uplc::ast::builder to uplc::builder
* rename aiken_lang::uplc to aiken_lang::gen_uplc
* move aiken_lang::air and aiken_lang::builder to aiken_lang::gen_uplc
  as submodules

Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-27 20:00:32 -04:00
Kasey White bb820ebdd8 fix: trace and scope issues
fix scope issues involving fieldsexpose and other destructureing pattern
fix trace to extract string from term.
2023-03-21 12:38:13 -04:00
Kasey White 6e5b24a937 refactor the rest of the term builders to use more concise code 2023-03-21 00:50:13 -04:00
Kasey White 50db958d06 update codegen to use more streamlined uplc building methods 2023-03-21 00:50:13 -04:00
Kasey White ef3862ade8 refactor: uplc code gen uses shorthand methods 2023-03-21 00:50:13 -04:00
rvcas c3870e340e
feat(codegen): support multi-validators
* rename force_wrap to force
* add a bunch of builder methods to Term<Name>
* refactor one tiny location to show off builder methods
* split generate into `generate` and `generate_test`
* create wrap_as_multi_validator function

Co-authored-by: Kasey White <kwhitemsg@gmail.com>
2023-03-17 18:40:44 -04:00
rvcas 5e3a902c75 fix: add back some extra info on display 2023-03-17 09:35:10 -04:00
rvcas f8545854fc
feat: json output for uplc eval 2023-03-08 10:19:36 +01:00
rvcas bd7b8792bf
feat: introduce EvalResult type 2023-03-08 10:19:36 +01:00
rvcas 4f1d14f2a0
feat: introduce miette into uplc 2023-03-08 10:19:35 +01:00
KtorZ cb11b21c9f
Update dependencies
In particular, tempfile >= 3.4.0 to remove the vulnerability on remove_dir_all
2023-03-08 10:17:22 +01:00
rvcas 8f765bfd52
fix: some breaking changes from pallas v0.18 2023-03-06 13:17:14 -05:00
rvcas 1902a2d56c
chore: update all deps 2023-03-06 13:13:59 -05:00
rvcas 1f8535e76e
chore: update some deps 2023-03-06 11:09:44 -05:00
rvcas 0066cc61cc
Release 0.0.29
aiken@0.0.29
aiken-lang@0.0.29
aiken-lsp@0.0.29
aiken-project@0.0.29
uplc@0.0.29

Generated by cargo-workspaces
2023-02-23 19:04:18 -05:00
KtorZ fbf65de1dc
Update default cost models for Aiken
Closes #396
2023-02-22 17:03:48 +01:00
KtorZ 00e9dabe82
Add missing Plutus builtins to Aiken's lang. 2023-02-22 12:53:03 +01:00
Kasey f3cdc05875
fix: the refactor on discharge value env (#393) 2023-02-18 20:49:29 -05:00
KtorZ 014c7a3d73
Fix error display in tx simulate. 2023-02-15 09:42:46 +01:00
KtorZ 428b5f2b37
Align output of `tx simulate` with other Aiken's commands.
And also return a structured output as JSON, so it's more easily used
  by other tools.

  ```
       Parsing script context
    Simulating 78ec148ea647cf9969446891af31939c5d57b275a2455706782c6183ef0b62f1
      Redeemer Spend → 0

  {"mem":151993,"cpu":58180696}
  ```
2023-02-14 16:50:55 +01:00
KtorZ 34596b3084
Fix collecting withdrawal scripts in eval_phase_one
The current implementation assumed that ALL withdrawals present in a
  transaction had to be locked by a script and failed otherwise. But a
  transaction can actually be composed of both. So instead of failing,
  we should rather just ignore withdrawals that can't be referenced by
  redeemers.
2023-02-14 15:58:34 +01:00
Kasey White e92d9af3c2 fix: changed how list_access_to_uplc handles discards fixing unit test 55
Also fix incorrect error message in runtime in machine
2023-02-11 04:30:18 -05:00
Kasey White 0269409fa1 case where removing a lam with 0 occurrences is not safe
Since a function call can have arbitrary other calls that lead to error and that is difficult to detect.
2023-02-10 19:24:47 -05:00
rvcas c1d67e95e1
feat: fix errors and add tests for BigInt changes 2023-02-09 15:01:30 -05:00
KtorZ bd4aeb779c
Implement integer_log2 on BigInt
Comparing it with the Haskell's implementation.
2023-02-09 18:14:00 +01:00
KtorZ e76d26eb3c
Fixup: follow compiler. 2023-02-09 16:09:49 +01:00
rvcas cfbe5fd3cc
feat: use BigInt in constant integer 2023-02-09 09:46:42 -05:00
rvcas ec58279424
test(machine): integer overflow 2023-02-09 09:44:06 -05:00
Kasey White 986a6009f7 fix: Various fixes for FieldsExpose, ListAccessor, TupleAccessor 2023-02-09 00:09:23 -05:00
alessandrokonrad 221f1afbfe
Changed imports 2023-02-08 16:28:59 +01:00
alessandrokonrad 74b3507777
Added tag/constructor conversion tests 2023-02-08 16:26:58 +01:00
Ales 242eaa8b67
Merge pull request #347 from spacebudz/constr
Fix constructor tag range
2023-02-08 14:52:50 +01:00
alessandrokonrad ce648b7483 Fixed schnorr and limiting it to 32 bytes messages for now 2023-02-08 08:04:24 -05:00
alessandrokonrad 3012a0b41d
Fix constructor tag range 2023-02-08 13:14:26 +01:00
alessandrokonrad 7c9443d87f
Changed to prehash function 2023-02-07 22:53:30 +01:00
rvcas 08e8347317 chore: rename feature flag to native-secp256k1 2023-02-07 00:25:22 -05:00
rvcas 67a2674d27 feat: allow verify functions to build for wasm 2023-02-07 00:25:22 -05:00
Kasey White f1b24a5f6d fix: the following issues
fix conversion from inner opaque type for when and assignment
This fixes Clause being used in cases where ListClause or TupleClause should be used
Reset defined and zero arg functions between each code gen
Fixes for optimizations when encountering shadowed variables
2023-02-05 20:35:39 -05:00
Kasey White c32a9d7b6f commit working changes so far 2023-02-05 20:35:39 -05:00
rvcas 31cd19f198 feat: use secp256k1 to implement verify for ecdsa and schnorr 2023-02-04 22:07:56 -05:00
rvcas cde3e31723 feat: fill in todo for verify ecdsa and schnorr costing 2023-02-04 22:07:56 -05:00
rvcas 09d8d683b6 fix: switch to error from secp256k1 2023-02-04 22:07:56 -05:00
rvcas fb69a2c8a9 fix: switch to rust bindings for bitcoin-secp256k1 2023-02-04 22:07:56 -05:00
rvcas c2ff9389c5 feat(runtime): implement verifyEcdsaSecp256k1Signature 2023-02-04 22:07:56 -05:00
rvcas d224fe5356 feat(runtime): set force count and arg typechecking for the elliptic curve builtins 2023-02-04 22:07:56 -05:00
rvcas fb37521857 feat: make a transparent machine error for signature::Error 2023-02-04 22:07:56 -05:00
rvcas 7bffb994fc feat: add k256 for elliptic curve algos 2023-02-04 22:07:56 -05:00
Niels Mündler 700e9cab5b Add missing carets when dumping builtin list 2023-02-02 17:32:03 -05:00
rvcas c9d0ce0392 chore: fmt 2023-02-01 23:49:33 -05:00
Kasey White 1843b7e73b clippy fix and remove some prints 2023-02-01 23:49:33 -05:00
Kasey White 9dc2bac2c3 fix:minor optimization fixes
Unique only comparison for equals led to strange results
Fixed by interning in a different spot
2023-02-01 23:49:33 -05:00
Kasey White fdf89b7326 implement optimizations
-Force usage on builtins
-Inline vars used once
-Lambdas that use a var as an arg
-Lambdas that use a const as an arg
2023-02-01 23:49:33 -05:00
Kasey White 3123ad9079 change eval_builtin_app to return Rc so that ifthenelse and chooselist are faster 2023-02-01 18:53:11 -05:00
Kasey White 456b08a205 minor performance improvements
Changed a couple cases where the inner Rc object was cloned to use the Rc object instead
2023-02-01 18:53:11 -05:00
rvcas a365649360 chore: clippy autofix 2023-02-01 18:53:11 -05:00
rvcas 9c4e921e79 feat: more Rc in machine 2023-02-01 18:53:11 -05:00
rvcas c8efe60843 feat: use Rc for more things, fib_iter runs almost 3 seconds faster now 2023-02-01 18:53:11 -05:00
rvcas eda3194cf0 feat: trying Rc for Name 2023-02-01 18:53:11 -05:00
Kasey White b5d9a9bb52 Change discharge_value and discharge_value_env to use a stack machine 2023-02-01 18:53:11 -05:00
rvcas 790e8ba680 fix: start trying to get rid of recursion for discharge value 2023-02-01 18:53:11 -05:00
KtorZ cab59c188a
Define serde's Serialize/Deserialize for Program<DeBrujin>
This will be useful to re-use this behavior in other structure that contains a Program<DeBruijn> without having to manually serialize or deserialize the entire structure.
2023-01-31 15:39:40 +01:00
Kasey White afd040fda5 feat: Finish up assert feature
Better error reporing on NonFunctionalApplication Error
Refactor redundant code
Add handling of whens with one clause.
2023-01-29 05:21:55 -05:00
Kasey White fc88028034 some refactoring and adding assert on lists 2023-01-27 05:02:19 -05:00
rvcas d649b34ec3
Release 0.0.28
aiken@0.0.28
aiken-lang@0.0.28
aiken-lsp@0.0.28
aiken-project@0.0.28
uplc@0.0.28

Generated by cargo-workspaces
2023-01-06 13:41:00 -05:00
rvcas c89802eaed chore: bump pallas version 2023-01-06 13:39:18 -05:00
alessandrokonrad 3aba9baba5 Fixed reward account creation in ScriptContext 2023-01-05 10:31:32 -05:00
Kasey White b0ea187151 better data deserialization errors and test hint
now runs even being in a sequence
2022-12-30 14:01:11 -05:00
rvcas ee678f2978
Release 0.0.27
aiken@0.0.27
aiken-lang@0.0.27
aiken-lsp@0.0.27
aiken-project@0.0.27
flat-rs@0.0.27
uplc@0.0.27

Generated by cargo-workspaces
2022-12-30 00:57:49 -05:00
Kasey White a08c615da4 checkpoint 2022-12-27 19:35:08 -05:00
Kasey White b7d506a8db nested lists now work 2022-12-27 19:35:08 -05:00
Kasey White 6126ee4cb4 checkpoint 2022-12-27 19:35:08 -05:00
alessandrokonrad b97570bc00 Fixed clippy issue 2022-12-27 17:08:05 -05:00
alessandrokonrad c6b5380c27 Fixed ex unit budget limit per redeemer 2022-12-27 17:08:05 -05:00
rvcas 42204d2d71 chore: make folder names match crate name 2022-12-21 18:11:07 -05:00
rvcas b3266fb837 chore: clippy warnings 2022-12-20 16:32:31 -05:00
KtorZ 529b3e87ff Rename builtin as 'verify_ed25519_signature'
It's best to keep builtin as-close-as possible to their standard name
  because they're hard to document. We can then leverage the prelude and
  the standard lib for convenient names.
2022-12-19 00:41:27 -05:00
Kasey White e6c59dca2c cleanup if then else a bit 2022-12-19 00:41:27 -05:00
rvcas 841babae5c chore: clean some links up so they point to the new repo 2022-12-17 11:19:02 -05:00
jmhrpr 775e90d782 chore: remove unnecessary Option wrapper on type 2022-12-15 18:22:31 -05:00
jmhrpr 325a7b7b45 fix: correct V1 to_plutus_data() for txout with no datum hash 2022-12-15 18:22:31 -05:00
rvcas 141a9aef30
feat: impl Sub for ExBudget 2022-12-08 19:24:20 -05:00
rvcas f250d3df84
feat: eval should take initial budget 2022-12-08 19:24:20 -05:00
Kasey White 2f7131e9b8 feat: add tuples and streamline conversion of types to and from data 2022-12-07 08:40:23 -05:00
Kasey White 29a30aa61f feat: finished when constr is for IR and code gen 2022-12-05 14:18:44 -05:00
rvcas 86ea41adc3 feat: start when expressions 2022-12-05 14:18:44 -05:00
Kasey White 8b24a66b7e add field access and list patterns are finished
Co-authored-by: rvcas <x@rvcas.dev>
2022-12-05 14:18:44 -05:00
KtorZ 375499930a Add UPLC support for 'ProtoList' & 'ProtoPair' constants
Supersedes #35.

  The syntax for these elements isn't "set in stone"; in the sense that it is unspecified in [input-output-hk/plutus](https://github.com/input-output-hk/plutus). There's no visible plan from IOG to extend the Haskell parser to support this syntax, though there are samples of imagined syntax in the code. Thus, we can lead the way and simply choose a suitable syntax and let the Haskell implementation align to it later.

  This syntax is thus inspired from input-output-hk/plutus' samples, with only a small change: we use `<` and `>` for encapsulating type declaration instead of `(`, `)`. There are already enough parentheses in the UPLC syntax, adding more reduces visibility.

  Doing this, I've also added a lot more test cases for the UPLC parser. There could be more, but this is a good start.

  Here are some example programs (taken from test cases) utilizing this syntax:

  ```
  (program 0.0.0 (con list<bytestring> [#00, #01]))
  ```

  ```
  (program 0.0.0
      (con pair
        <integer, integer>
        [14, 42]
      )
  )
  ```

  ```
  (program 0.0.0
      (con pair<string, list<integer>> ["foo", [14, 42]])
  )
  ```

  _(Note that this was mainly done as an exercise to get more familiar with Rust and parts of Aiken.)_
2022-12-03 10:16:16 -05:00
eyelash 6066e3176c move `to_string()` outside of the match 2022-11-28 17:30:45 -05:00
rvcas d5087dbcc7 fix: it's more consistent to have snakecase builtins 2022-11-24 18:36:22 -05:00
rvcas f089eff97d
Release 0.0.25
aiken@0.0.25
aiken-lang@0.0.25
aiken-lsp@0.0.25
aiken-project@0.0.25
uplc@0.0.25

Generated by cargo-workspaces
2022-11-14 18:04:19 -05:00
rvcas 01e91b9fe5 chore: deal with clippy warnings 2022-11-10 01:27:18 -05:00
Kasey White 6c6aefd1c4 get basic when conditions to work 2022-11-08 22:21:07 -05:00
Kasey White 3cafb2bcbe checkpoint commit 2022-11-08 22:21:07 -05:00
rvcas d8f3ada13e chore: add default for Interner 2022-11-08 22:21:07 -05:00
Kasey White ffa78e4c30 work out some initial direction for code gen 2022-11-08 22:21:07 -05:00
rvcas 3df275043a
Release 0.0.24
aiken@0.0.24
aiken-lang@0.0.24
aiken-project@0.0.24
uplc@0.0.24

Generated by cargo-workspaces
2022-11-04 13:56:15 -04:00
alessandrokonrad af7ca87ffc Fixed more clippy issues 2022-11-04 18:21:22 +01:00
alessandrokonrad 9a2c6753cd Fixed clippy issues 2022-11-04 18:13:46 +01:00
alessandrokonrad d1141f306a Sorted all relevant structures in ScriptContext 2022-11-04 17:58:23 +01:00
rvcas c4db8c951f
Release 0.0.23
aiken@0.0.23
aiken-lang@0.0.23
aiken-project@0.0.23
uplc@0.0.23

Generated by cargo-workspaces
2022-11-03 20:27:03 -04:00
Kasey White 887f5eeee9 sorts inputs for sc 2022-11-03 05:04:21 -04:00
rvcas 1b6e5d262f
Release 0.0.22
aiken@0.0.22
aiken-lang@0.0.22
aiken-project@0.0.22
uplc@0.0.22

Generated by cargo-workspaces
2022-10-31 13:32:54 -04:00
Turner 9bbcdfd0b3 Revert versions, fix changelog 2022-10-28 11:50:19 -07:00
Turner aabcacbe87 Expose Pallas stuff, bump version, update changelog 2022-10-27 20:40:37 -07:00
rvcas 819256df99 feat: wrap up adding uplc builtins for now 2022-10-25 18:52:27 -04:00
rvcas 15c774b7d0
Release 0.0.21
aiken@0.0.21
flat-rs@0.0.21
uplc@0.0.21

Generated by cargo-workspaces
2022-10-23 17:58:21 -04:00
Kasey White c89690aa77 Create unknown constructor error for decode 2022-10-23 17:54:21 -04:00
Kasey White 360a5b6017 preceding bytes output changes if you error before position 5 2022-10-23 17:54:21 -04:00
Kasey White 15cfb22c8f more detailed parse errors when decoding with flat 2022-10-23 17:54:21 -04:00
alessandrokonrad 4ef654b660 fixed clippy issue 2022-10-22 18:01:36 -04:00
alessandrokonrad c6de827721 added apply_params_to_script function 2022-10-22 18:01:36 -04:00
alessandrokonrad e6f3c40429 changed i64 -> i128 2022-10-19 17:04:43 -04:00
rvcas ce875a3c47
Release 0.0.20
aiken@0.0.20
aiken-lang@0.0.20
flat-rs@0.0.20
uplc@0.0.20

Generated by cargo-workspaces
2022-10-17 17:22:50 -04:00
alessandrokonrad a83c731eb1 fixed err description 2022-10-17 08:35:45 -04:00
alessandrokonrad ad542a68e8 removed unnecessary return statement 2022-10-17 08:35:45 -04:00
alessandrokonrad 0856f6ccf2 added checked operators to some DefaultFunction 2022-10-17 08:35:45 -04:00
alessandrokonrad cfc1f92646 leave as i128 2022-10-17 08:35:45 -04:00
alessandrokonrad a14dae5863 changed slot_length to u32 2022-10-17 08:35:45 -04:00
alessandrokonrad 28b9fed8e5 added i128 integer support 2022-10-17 08:35:45 -04:00
rvcas 8e3b32fe2c
Release 0.0.18
aiken@0.0.18
uplc@0.0.18

Generated by cargo-workspaces
2022-09-27 09:15:41 -04:00
rvcas 037297880c
Release 0.0.17
aiken@0.0.17
uplc@0.0.17

Generated by cargo-workspaces
2022-09-27 09:15:26 -04:00
rvcas 8f9481079c
Release 0.0.16
aiken@0.0.16
uplc@0.0.16

Generated by cargo-workspaces
2022-09-27 09:14:11 -04:00
alessandrokonrad f3b9d33f32 added deserialisation error to machine 2022-09-27 09:13:00 -04:00
rvcas ae2866f784
Release 0.0.15
aiken@0.0.15
uplc@0.0.15

Generated by cargo-workspaces
2022-09-26 16:34:26 -04:00
alessandrokonrad 3256bfbc32 Wrapped errors in redeemer error 2022-09-26 16:33:52 -04:00
rvcas e817b39e4c
Release 0.0.14
aiken@0.0.14
uplc@0.0.14

Generated by cargo-workspaces
2022-09-26 09:59:28 -04:00
alessandrokonrad 5ec991d83a fixed error handling in eval raw 2022-09-26 03:24:31 -04:00
rvcas 25790287b7
Release 0.0.13
aiken@0.0.13
uplc@0.0.13

Generated by cargo-workspaces
2022-09-24 20:35:36 -04:00
rvcas 08596588a7
feat: output total budget spent from cli 2022-09-24 20:23:51 -04:00
rvcas 4166e27fd7
chore: v1 comments 2022-09-24 19:52:40 -04:00
rvcas 8620332b75
feat: move input from json to helper method 2022-09-24 19:40:07 -04:00
Kasey White 3cb24a1d00 update test mem and cpu assertions for eval tx tests 2022-09-24 18:19:18 -04:00
alessandrokonrad aa111f0a65 fixed slot 2022-09-25 00:01:01 +02:00
alessandrokonrad 35d09c642b fixed time conversion 2022-09-24 23:59:58 +02:00
alessandrokonrad fb0af3cfcf fixed bugs 2022-09-24 17:47:07 -04:00
alessandrokonrad 3eb4fb7523 fixed bugs 2022-09-24 23:09:55 +02:00
Kasey White ca2d8f0a1f ada policy is now empty and mintValue includes 0 ada 2022-09-24 15:47:51 -04:00
alessandrokonrad 99a27f6a3d new tests 2022-09-24 00:43:46 +02:00
Kasey White 3bb5826b91 change how mint gets converted to plutus data 2022-09-23 18:34:24 -04:00
Kasey White c45643bb01 empty bytestring should return 0 not 1 2022-09-23 04:09:28 -04:00
Kasey White 9b6d4e20c7 check exunits for eval tests 2022-09-22 03:13:30 -04:00
rvcas 2572ed6bbd
fix: remove BadTerm 2022-09-19 16:40:08 -04:00
alessandrokonrad 169fa05572 added ex units from haskell plc 2022-09-19 22:32:56 +02:00
alessandrokonrad 3e10fcbfbb changed example 4 to check 'False' 2022-09-19 22:15:31 +02:00
rvcas caa88dab12
fix: valid condition for a script 2022-09-19 16:00:25 -04:00
Kasey White 6ccd0aa2fb adding better debug for wrong term tag in uplc 2022-09-19 14:59:55 -04:00
alessandrokonrad 21d71e94b3 added more tests 2022-09-19 18:19:56 +02:00
alessandrokonrad f12540d8e2 fixed missing script test 2022-09-19 17:17:15 +02:00
rvcas 0ba8787b97
chore: clippy 2022-09-19 11:11:52 -04:00
rvcas f10e3836ad
feat: new error for bad term 2022-09-19 11:04:21 -04:00