Merge branch 'feature/key-sig-literals' into 'dev'
[LIGO-376] support for key and signature literals See merge request ligolang/ligo!329
This commit is contained in:
commit
d66cbcc1b2
@ -71,3 +71,44 @@ const my_account: address = ("tz1KqTpEZ7Yob7QbPE4Hy4Wo8fHG8LhKxZSx": address);
|
|||||||
```
|
```
|
||||||
<!--END_DOCUSAURUS_CODE_TABS-->
|
<!--END_DOCUSAURUS_CODE_TABS-->
|
||||||
|
|
||||||
|
## Signatures
|
||||||
|
|
||||||
|
`signature` is a LIGO datatype used for Tezos signature (edsig, spsig).
|
||||||
|
|
||||||
|
Here's how you can define a signature:
|
||||||
|
|
||||||
|
<!--DOCUSAURUS_CODE_TABS-->
|
||||||
|
<!--Pascaligo-->
|
||||||
|
```pascaligo group=e
|
||||||
|
const my_signature: signature = ("edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7": signature);
|
||||||
|
```
|
||||||
|
<!--CameLIGO-->
|
||||||
|
```cameligo group=e
|
||||||
|
let my_signature: signature = ("edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7": signature)
|
||||||
|
```
|
||||||
|
<!--ReasonLIGO-->
|
||||||
|
```reasonligo group=e
|
||||||
|
let my_signature: signature = ("edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7": signature);
|
||||||
|
```
|
||||||
|
<!--END_DOCUSAURUS_CODE_TABS-->
|
||||||
|
|
||||||
|
## keys
|
||||||
|
|
||||||
|
`key` is a LIGO datatype used for Tezos public key.
|
||||||
|
|
||||||
|
Here's how you can define a key:
|
||||||
|
|
||||||
|
<!--DOCUSAURUS_CODE_TABS-->
|
||||||
|
<!--Pascaligo-->
|
||||||
|
```pascaligo group=f
|
||||||
|
const my_key: key = ("edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav": key);
|
||||||
|
```
|
||||||
|
<!--CameLIGO-->
|
||||||
|
```cameligo group=f
|
||||||
|
let my_key: key = ("edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav": key)
|
||||||
|
```
|
||||||
|
<!--ReasonLIGO-->
|
||||||
|
```reasonligo group=f
|
||||||
|
let my_key: key = ("edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav": key);
|
||||||
|
```
|
||||||
|
<!--END_DOCUSAURUS_CODE_TABS-->
|
37
src/bin/expect_tests/literals.ml
Normal file
37
src/bin/expect_tests/literals.ml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
open Cli_expect
|
||||||
|
|
||||||
|
let%expect_test _ =
|
||||||
|
run_ligo_good ["interpret" ; "(\"edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7\":signature)" ; "--syntax=pascaligo"] ;
|
||||||
|
[%expect {| signature edsigthTzJ8X7MPmNeEwybRAvdxS1pupqcM5Mk4uCuyZAe7uEk68YpuGDeViW8wSXMrCi5CwoNgqs8V2w8ayB5dMJzrYCHhD8C7 |}]
|
||||||
|
|
||||||
|
let%expect_test _ =
|
||||||
|
run_ligo_bad ["interpret" ; "(\"thisisnotasignature\":signature)" ; "--syntax=pascaligo"] ;
|
||||||
|
[%expect {|
|
||||||
|
ligo: in file "", line 0, characters 1-32. Badly formatted literal: signature thisisnotasignature {"location":"in file \"\", line 0, characters 1-32"}
|
||||||
|
|
||||||
|
|
||||||
|
If you're not sure how to fix this error, you can
|
||||||
|
do one of the following:
|
||||||
|
|
||||||
|
* Visit our documentation: https://ligolang.org/docs/intro/what-and-why/
|
||||||
|
* Ask a question on our Discord: https://discord.gg/9rhYaEt
|
||||||
|
* Open a gitlab issue: https://gitlab.com/ligolang/ligo/issues/new
|
||||||
|
* Check the changelog by running 'ligo changelog' |}]
|
||||||
|
|
||||||
|
let%expect_test _ =
|
||||||
|
run_ligo_good ["interpret" ; "(\"edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav\":key)" ; "--syntax=pascaligo"] ;
|
||||||
|
[%expect {| key edpkuBknW28nW72KG6RoHtYW7p12T6GKc7nAbwYX5m8Wd9sDVC9yav |}]
|
||||||
|
|
||||||
|
let%expect_test _ =
|
||||||
|
run_ligo_bad ["interpret" ; "(\"thisisnotapublickey\":key)" ; "--syntax=pascaligo"] ;
|
||||||
|
[%expect {|
|
||||||
|
ligo: in file "", line 0, characters 1-26. Badly formatted literal: key thisisnotapublickey {"location":"in file \"\", line 0, characters 1-26"}
|
||||||
|
|
||||||
|
|
||||||
|
If you're not sure how to fix this error, you can
|
||||||
|
do one of the following:
|
||||||
|
|
||||||
|
* Visit our documentation: https://ligolang.org/docs/intro/what-and-why/
|
||||||
|
* Ask a question on our Discord: https://discord.gg/9rhYaEt
|
||||||
|
* Open a gitlab issue: https://gitlab.com/ligolang/ligo/issues/new
|
||||||
|
* Check the changelog by running 'ligo changelog' |}]
|
@ -68,6 +68,20 @@ let peephole_expression : expression -> expression result = fun e ->
|
|||||||
Protocol.Alpha_context.Contract.of_b58check s in
|
Protocol.Alpha_context.Contract.of_b58check s in
|
||||||
return l
|
return l
|
||||||
)
|
)
|
||||||
|
| E_literal (Literal_signature s) as l -> (
|
||||||
|
let open Tezos_crypto in
|
||||||
|
let%bind (_sig:Crypto.Signature.t) =
|
||||||
|
Trace.trace_tzresult (bad_format e) @@
|
||||||
|
Signature.of_b58check s in
|
||||||
|
return l
|
||||||
|
)
|
||||||
|
| E_literal (Literal_key s) as l -> (
|
||||||
|
let open Tezos_crypto in
|
||||||
|
let%bind (_k:Crypto.Signature.public_key) =
|
||||||
|
Trace.trace_tzresult (bad_format e) @@
|
||||||
|
Signature.Public_key.of_b58check s in
|
||||||
|
return l
|
||||||
|
)
|
||||||
| E_constant (C_BIG_MAP_LITERAL as cst, lst) -> (
|
| E_constant (C_BIG_MAP_LITERAL as cst, lst) -> (
|
||||||
let%bind elt =
|
let%bind elt =
|
||||||
trace_option (bad_single_arity cst e.location) @@
|
trace_option (bad_single_arity cst e.location) @@
|
||||||
|
@ -18,6 +18,8 @@ let peephole_expression : expression -> expression result = fun e ->
|
|||||||
| E_ascription (e' , t) as e -> (
|
| E_ascription (e' , t) as e -> (
|
||||||
match (e'.expression , t.type_expression') with
|
match (e'.expression , t.type_expression') with
|
||||||
| (E_literal (Literal_string s) , T_constant (TC_key_hash)) -> return @@ E_literal (Literal_key_hash s)
|
| (E_literal (Literal_string s) , T_constant (TC_key_hash)) -> return @@ E_literal (Literal_key_hash s)
|
||||||
|
| (E_literal (Literal_string s) , T_constant (TC_signature)) -> return @@ E_literal (Literal_signature s)
|
||||||
|
| (E_literal (Literal_string s) , T_constant (TC_key)) -> return @@ E_literal (Literal_key s)
|
||||||
| (E_literal (Literal_int i) , T_constant (TC_timestamp)) -> return @@ E_literal (Literal_timestamp i)
|
| (E_literal (Literal_int i) , T_constant (TC_timestamp)) -> return @@ E_literal (Literal_timestamp i)
|
||||||
| (E_literal (Literal_string str) , T_constant (TC_timestamp)) ->
|
| (E_literal (Literal_string str) , T_constant (TC_timestamp)) ->
|
||||||
let%bind time =
|
let%bind time =
|
||||||
|
@ -127,14 +127,18 @@ let rec untranspile (v : value) (t : AST.type_value) : AST.annotated_expression
|
|||||||
get_string v in
|
get_string v in
|
||||||
return (E_literal (Literal_key_hash n))
|
return (E_literal (Literal_key_hash n))
|
||||||
)
|
)
|
||||||
| TC_chain_id -> (
|
| TC_chain_id -> (
|
||||||
let%bind n =
|
let%bind n =
|
||||||
trace_strong (wrong_mini_c_value "chain_id" v) @@
|
trace_strong (wrong_mini_c_value "chain_id" v) @@
|
||||||
get_string v in
|
get_string v in
|
||||||
return (E_literal (Literal_chain_id n))
|
return (E_literal (Literal_chain_id n))
|
||||||
)
|
)
|
||||||
| TC_signature ->
|
| TC_signature -> (
|
||||||
fail @@ bad_untranspile "signature" v
|
let%bind n =
|
||||||
|
trace_strong (wrong_mini_c_value "signature" v) @@
|
||||||
|
get_string v in
|
||||||
|
return (E_literal (Literal_signature n))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
| T_operator type_operator -> (
|
| T_operator type_operator -> (
|
||||||
match type_operator with
|
match type_operator with
|
||||||
|
@ -40,6 +40,8 @@ let rec translate_value (Ex_typed_value (ty, value)) : value result =
|
|||||||
ok @@ D_string (Signature.Public_key_hash.to_b58check n)
|
ok @@ D_string (Signature.Public_key_hash.to_b58check n)
|
||||||
| (Key_t _ ), n ->
|
| (Key_t _ ), n ->
|
||||||
ok @@ D_string (Signature.Public_key.to_b58check n)
|
ok @@ D_string (Signature.Public_key.to_b58check n)
|
||||||
|
| (Signature_t _ ), n ->
|
||||||
|
ok @@ D_string (Signature.to_b58check n)
|
||||||
| (Timestamp_t _), n ->
|
| (Timestamp_t _), n ->
|
||||||
let n =
|
let n =
|
||||||
Z.to_int @@
|
Z.to_int @@
|
||||||
|
@ -162,7 +162,7 @@ and type_constant ppf (tc:type_constant) : unit =
|
|||||||
| TC_address -> "address"
|
| TC_address -> "address"
|
||||||
| TC_key -> "key"
|
| TC_key -> "key"
|
||||||
| TC_key_hash -> "key_hash"
|
| TC_key_hash -> "key_hash"
|
||||||
| TC_signature -> "signatuer"
|
| TC_signature -> "signature"
|
||||||
| TC_timestamp -> "timestamp"
|
| TC_timestamp -> "timestamp"
|
||||||
| TC_chain_id -> "chain_id"
|
| TC_chain_id -> "chain_id"
|
||||||
in
|
in
|
||||||
|
Loading…
Reference in New Issue
Block a user