Add implicit_account to operators

This commit is contained in:
John David Pressman 2019-11-29 02:40:34 -08:00 committed by Gabriel Alfour
parent f1c9c11ae4
commit 694c3aea97
4 changed files with 20 additions and 0 deletions

View File

@ -73,6 +73,7 @@ module Simplify = struct
("unit" , "UNIT") ; ("unit" , "UNIT") ;
("source" , "SOURCE") ; ("source" , "SOURCE") ;
("sender" , "SENDER") ; ("sender" , "SENDER") ;
("implicit_account", "IMPLICIT_ACCOUNT") ;
("failwith" , "FAILWITH") ; ("failwith" , "FAILWITH") ;
("bitwise_or" , "OR") ; ("bitwise_or" , "OR") ;
("bitwise_and" , "AND") ; ("bitwise_and" , "AND") ;
@ -136,6 +137,7 @@ module Simplify = struct
("gas", "STEPS_TO_QUOTA") ; ("gas", "STEPS_TO_QUOTA") ;
("Current.sender" , "SENDER") ; ("Current.sender" , "SENDER") ;
("sender", "SENDER") ; ("sender", "SENDER") ;
("Current.implicit_account", "IMPLICIT_ACCOUNT") ;
("Current.source" , "SOURCE") ; ("Current.source" , "SOURCE") ;
("source", "SOURCE") ; ("source", "SOURCE") ;
("Current.failwith", "FAILWITH") ; ("Current.failwith", "FAILWITH") ;
@ -466,6 +468,10 @@ module Typer = struct
let%bind () = assert_t_contract contract in let%bind () = assert_t_contract contract in
ok @@ t_address () 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 now = constant "NOW" @@ t_timestamp ()
let transaction = typer_3 "CALL" @@ fun param amount contract -> let transaction = typer_3 "CALL" @@ fun param amount contract ->
@ -794,6 +800,7 @@ module Typer = struct
now ; now ;
slice ; slice ;
address ; address ;
implicit_account ;
assertion ; assertion ;
list_cons ; list_cons ;
] ]
@ -865,6 +872,7 @@ module Compiler = struct
("BALANCE" , simple_constant @@ prim I_BALANCE) ; ("BALANCE" , simple_constant @@ prim I_BALANCE) ;
("AMOUNT" , simple_constant @@ prim I_AMOUNT) ; ("AMOUNT" , simple_constant @@ prim I_AMOUNT) ;
("ADDRESS" , simple_unary @@ prim I_ADDRESS) ; ("ADDRESS" , simple_unary @@ prim I_ADDRESS) ;
("IMPLICIT_CONTRACT", simple_unary @@ prim I_IMPLICIT_ACCOUNT) ;
("NOW" , simple_constant @@ prim I_NOW) ; ("NOW" , simple_constant @@ prim I_NOW) ;
("CALL" , simple_ternary @@ prim I_TRANSFER_TOKENS) ; ("CALL" , simple_ternary @@ prim I_TRANSFER_TOKENS) ;
("SOURCE" , simple_constant @@ prim I_SOURCE) ; ("SOURCE" , simple_constant @@ prim I_SOURCE) ;

View File

@ -0,0 +1 @@
function main (const kh: key_hash) : contract(unit) is implicit_account(kh)

View File

@ -0,0 +1 @@
let main (kh: key_hash) : unit contract = Current.implicit_account kh

View File

@ -1233,6 +1233,14 @@ let balance_constant_mligo () : unit result =
let expected = e_tuple [e_list []; e_mutez 4000000000000] in let expected = e_tuple [e_list []; e_mutez 4000000000000] in
expect_eq program "main" input expected 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 is_nat () : unit result =
let%bind program = type_file "./contracts/isnat.ligo" in let%bind program = type_file "./contracts/isnat.ligo" in
let%bind () = let%bind () =
@ -1398,6 +1406,8 @@ let main = test_suite "Integration (End to End)" [
test "let multiple (mligo)" mligo_let_multiple ; test "let multiple (mligo)" mligo_let_multiple ;
test "balance constant" balance_constant ; test "balance constant" balance_constant ;
test "balance constant (mligo)" balance_constant_mligo ; 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_nat" is_nat ;
test "is_not (mligo)" is_nat_mligo ; test "is_not (mligo)" is_nat_mligo ;
test "simple_access (ligo)" simple_access_ligo; test "simple_access (ligo)" simple_access_ligo;