diff --git a/src/passes/operators/operators.ml b/src/passes/operators/operators.ml index 7316d6650..b6f2a0d89 100644 --- a/src/passes/operators/operators.ml +++ b/src/passes/operators/operators.ml @@ -73,6 +73,7 @@ module Simplify = struct ("unit" , "UNIT") ; ("source" , "SOURCE") ; ("sender" , "SENDER") ; + ("implicit_account", "IMPLICIT_ACCOUNT") ; ("failwith" , "FAILWITH") ; ("bitwise_or" , "OR") ; ("bitwise_and" , "AND") ; @@ -136,6 +137,7 @@ module Simplify = struct ("gas", "STEPS_TO_QUOTA") ; ("Current.sender" , "SENDER") ; ("sender", "SENDER") ; + ("Current.implicit_account", "IMPLICIT_ACCOUNT") ; ("Current.source" , "SOURCE") ; ("source", "SOURCE") ; ("Current.failwith", "FAILWITH") ; @@ -466,6 +468,10 @@ module Typer = struct let%bind () = assert_t_contract contract in ok @@ t_address () + let implicit_account = typer_1 "IMPLICIT_ACCOUNT" @@ fun key_hash -> + let%bind () = assert_t_key_hash key_hash in + ok @@ t_contract (t_unit () ) () + let now = constant "NOW" @@ t_timestamp () let transaction = typer_3 "CALL" @@ fun param amount contract -> @@ -794,6 +800,7 @@ module Typer = struct now ; slice ; address ; + implicit_account ; assertion ; list_cons ; ] @@ -865,6 +872,7 @@ module Compiler = struct ("BALANCE" , simple_constant @@ prim I_BALANCE) ; ("AMOUNT" , simple_constant @@ prim I_AMOUNT) ; ("ADDRESS" , simple_unary @@ prim I_ADDRESS) ; + ("IMPLICIT_CONTRACT", simple_unary @@ prim I_IMPLICIT_ACCOUNT) ; ("NOW" , simple_constant @@ prim I_NOW) ; ("CALL" , simple_ternary @@ prim I_TRANSFER_TOKENS) ; ("SOURCE" , simple_constant @@ prim I_SOURCE) ; diff --git a/src/test/contracts/implicit_account.ligo b/src/test/contracts/implicit_account.ligo new file mode 100644 index 000000000..8883a778d --- /dev/null +++ b/src/test/contracts/implicit_account.ligo @@ -0,0 +1 @@ +function main (const kh: key_hash) : contract(unit) is implicit_account(kh) diff --git a/src/test/contracts/implicit_account.mligo b/src/test/contracts/implicit_account.mligo new file mode 100644 index 000000000..bf3c89dcc --- /dev/null +++ b/src/test/contracts/implicit_account.mligo @@ -0,0 +1 @@ +let main (kh: key_hash) : unit contract = Current.implicit_account kh diff --git a/src/test/integration_tests.ml b/src/test/integration_tests.ml index ecddfda4f..53ed9c98c 100644 --- a/src/test/integration_tests.ml +++ b/src/test/integration_tests.ml @@ -1233,6 +1233,14 @@ let balance_constant_mligo () : unit result = let expected = e_tuple [e_list []; e_mutez 4000000000000] in expect_eq program "main" input expected +let implicit_account () : unit result = + let%bind _ = type_file "./contracts/implicit_account.ligo" in + ok () + +let implicit_account_mligo () : unit result = + let%bind _ = mtype_file "./contracts/implicit_account.mligo" in + ok () + let is_nat () : unit result = let%bind program = type_file "./contracts/isnat.ligo" in let%bind () = @@ -1398,6 +1406,8 @@ let main = test_suite "Integration (End to End)" [ test "let multiple (mligo)" mligo_let_multiple ; test "balance constant" balance_constant ; test "balance constant (mligo)" balance_constant_mligo ; + test "implicit account" implicit_account ; + test "implicit account (mligo)" implicit_account_mligo ; test "is_nat" is_nat ; test "is_not (mligo)" is_nat_mligo ; test "simple_access (ligo)" simple_access_ligo;