From d10b95357fb817d4770d0fd983f5b45ec089ed66 Mon Sep 17 00:00:00 2001 From: Tom Jack Date: Thu, 5 Mar 2020 10:30:44 -0600 Subject: [PATCH] Detect gas exhaustion while typechecking --- src/main/compile/of_michelson.ml | 4 ++++ vendors/ligo-utils/proto-alpha-utils/x_memory_proto_alpha.ml | 2 ++ 2 files changed, 6 insertions(+) diff --git a/src/main/compile/of_michelson.ml b/src/main/compile/of_michelson.ml index 87cfbb5a7..3602a495e 100644 --- a/src/main/compile/of_michelson.ml +++ b/src/main/compile/of_michelson.ml @@ -23,6 +23,9 @@ module Errors = struct let code = Format.asprintf "%a" Michelson.pp c in "bad contract type\n"^code in error title_type_check_msg message + let ran_out_of_gas () = + let message () = "Ran out of gas!" in + error title_type_check_msg message let unknown () = let message () = "unknown error" in @@ -47,6 +50,7 @@ let build_contract : Compiler.compiled_expression -> Michelson.michelson result | Err_parameter -> fail @@ Errors.bad_parameter contract () | Err_storage -> fail @@ Errors.bad_storage contract () | Err_contract -> fail @@ Errors.bad_contract contract () + | Err_gas -> fail @@ Errors.ran_out_of_gas () | Err_unknown -> fail @@ Errors.unknown () type check_type = Check_parameter | Check_storage diff --git a/vendors/ligo-utils/proto-alpha-utils/x_memory_proto_alpha.ml b/vendors/ligo-utils/proto-alpha-utils/x_memory_proto_alpha.ml index a8f5aa468..d5d1b3ab7 100644 --- a/vendors/ligo-utils/proto-alpha-utils/x_memory_proto_alpha.ml +++ b/vendors/ligo-utils/proto-alpha-utils/x_memory_proto_alpha.ml @@ -1107,6 +1107,7 @@ let unparse_ty_michelson ty = type typecheck_res = | Type_checked | Err_parameter | Err_storage | Err_contract + | Err_gas | Err_unknown let typecheck_contract contract = @@ -1116,6 +1117,7 @@ let typecheck_contract contract = | Ok _res -> return Type_checked | Error (Script_tc_errors.Ill_formed_type (Some "parameter", _code, _)::_) -> return Err_parameter | Error (Script_tc_errors.Ill_formed_type (Some "storage", _code, _)::_) -> return Err_storage + | Error (Script_tc_errors.Ill_typed_contract _ :: Script_tc_errors.Cannot_serialize_error :: []) -> return @@ Err_gas | Error (Script_tc_errors.Ill_typed_contract (_code, _)::_) -> return @@ Err_contract | Error _ -> return Err_unknown