Do not burn when there is nothing to burn.

It would fail when the contract is eliminated
This commit is contained in:
Pierre Chambart 2018-06-23 03:15:07 +02:00
parent b3c670ef8f
commit 455012d4e9

View File

@ -39,8 +39,14 @@ let burn_fees_for_storage c ~payer =
let cost_per_byte = Constants_storage.cost_per_byte c in let cost_per_byte = Constants_storage.cost_per_byte c in
Lwt.return (Tez_repr.(cost_per_byte *? (Z.to_int64 storage_space_to_pay))) >>=? fun to_burn -> Lwt.return (Tez_repr.(cost_per_byte *? (Z.to_int64 storage_space_to_pay))) >>=? fun to_burn ->
(* Burning the fees... *) (* Burning the fees... *)
if Tez_repr.(to_burn = Tez_repr.zero) then
(* If the payer was was deleted by transfering all its balance, and no space was used,
burning zero would fail *)
return c
else
trace Cannot_pay_storage_fee trace Cannot_pay_storage_fee
(Contract_storage.spend_from_script c payer to_burn) >>=? fun c -> (Contract_storage.must_exist c payer >>=? fun () ->
Contract_storage.spend_from_script c payer to_burn) >>=? fun c ->
return c return c
let with_fees_for_storage c ~payer f = let with_fees_for_storage c ~payer f =