Alpha: fix gas consumption for manager operations
This commit is contained in:
parent
ee722a237a
commit
fa4b33aa47
@ -132,7 +132,7 @@ init_contract_from_file () {
|
||||
}
|
||||
|
||||
bake () {
|
||||
$client bake for bootstrap1 --max-priority 512 --minimal-timestamp --minimal-fees 0 --minimal-fees-per-byte 0 --minimal-fees-per-gas-unit 0
|
||||
$client bake for bootstrap1 --max-priority 512 --minimal-timestamp --minimal-fees 0 --minimal-picotez-per-byte 0 --minimal-picotez-per-gas-unit 0
|
||||
}
|
||||
|
||||
bake_after () {
|
||||
|
@ -84,7 +84,7 @@ let reveal cctxt
|
||||
let contents =
|
||||
Single
|
||||
(Manager_operation { source ; fee ; counter ;
|
||||
gas_limit = Z.zero ; storage_limit = Z.zero ;
|
||||
gas_limit = Z.of_int 10_000 ; storage_limit = Z.zero ;
|
||||
operation = Reveal src_pk }) in
|
||||
Injection.inject_operation cctxt ~chain ~block ?confirmations
|
||||
?dry_run
|
||||
@ -129,7 +129,7 @@ let originate_account
|
||||
originate
|
||||
cctxt ~chain ~block ?confirmations
|
||||
?dry_run
|
||||
?branch ~source ~gas_limit:Z.zero ~src_pk ~src_sk ~fee origination
|
||||
?branch ~source ~gas_limit:(Z.of_int 10_000) ~src_pk ~src_sk ~fee origination
|
||||
|
||||
let delegate_contract cctxt
|
||||
~chain ~block ?branch ?confirmations
|
||||
@ -140,7 +140,7 @@ let delegate_contract cctxt
|
||||
Injection.inject_manager_operation
|
||||
cctxt ~chain ~block ?confirmations
|
||||
?dry_run
|
||||
?branch ~source ~fee ~gas_limit:Z.zero ~storage_limit:Z.zero
|
||||
?branch ~source ~fee ~gas_limit:(Z.of_int 10_000) ~storage_limit:Z.zero
|
||||
~src_pk ~src_sk operation >>=? fun res ->
|
||||
return res
|
||||
|
||||
|
@ -117,8 +117,8 @@ let estimated_gas_single
|
||||
match result with
|
||||
| Applied (Transaction_result { consumed_gas }) -> Ok consumed_gas
|
||||
| Applied (Origination_result { consumed_gas }) -> Ok consumed_gas
|
||||
| Applied Reveal_result -> Ok Z.zero
|
||||
| Applied Delegation_result -> Ok Z.zero
|
||||
| Applied (Reveal_result { consumed_gas }) -> Ok consumed_gas
|
||||
| Applied (Delegation_result { consumed_gas }) -> Ok consumed_gas
|
||||
| Skipped _ -> assert false
|
||||
| Backtracked (_, None) -> Ok Z.zero (* there must be another error for this to happen *)
|
||||
| Backtracked (_, Some errs) -> Alpha_environment.wrap_error (Error errs)
|
||||
@ -154,8 +154,8 @@ let estimated_storage_single
|
||||
Ok paid_storage_size_diff
|
||||
| Applied (Origination_result { paid_storage_size_diff }) ->
|
||||
Ok (Z.add paid_storage_size_diff origination_size)
|
||||
| Applied Reveal_result -> Ok Z.zero
|
||||
| Applied Delegation_result -> Ok Z.zero
|
||||
| Applied (Reveal_result _)-> Ok Z.zero
|
||||
| Applied (Delegation_result _) -> Ok Z.zero
|
||||
| Skipped _ -> assert false
|
||||
| Backtracked (_, None) -> Ok Z.zero (* there must be another error for this to happen *)
|
||||
| Backtracked (_, Some errs) -> Alpha_environment.wrap_error (Error errs)
|
||||
@ -188,8 +188,8 @@ let originated_contracts_single
|
||||
match result with
|
||||
| Applied (Transaction_result { originated_contracts }) -> Ok originated_contracts
|
||||
| Applied (Origination_result { originated_contracts }) -> Ok originated_contracts
|
||||
| Applied Reveal_result -> Ok []
|
||||
| Applied Delegation_result -> Ok []
|
||||
| Applied (Reveal_result _) -> Ok []
|
||||
| Applied (Delegation_result _) -> Ok []
|
||||
| Skipped _ -> assert false
|
||||
| Backtracked (_, None) -> Ok [] (* there must be another error for this to happen *)
|
||||
| Backtracked (_, Some errs) -> Alpha_environment.wrap_error (Error errs)
|
||||
@ -478,7 +478,7 @@ let inject_manager_operation
|
||||
let contents =
|
||||
Cons
|
||||
(Manager_operation { source ; fee = Tez.zero ; counter ;
|
||||
gas_limit = Z.zero ; storage_limit = Z.zero ;
|
||||
gas_limit = Z.of_int 10_000 ; storage_limit = Z.zero ;
|
||||
operation = Reveal src_pk },
|
||||
Single (Manager_operation { source ; fee ; counter = Z.succ counter ;
|
||||
gas_limit ; storage_limit ; operation })) in
|
||||
|
@ -235,17 +235,23 @@ let pp_manager_operation_contents_and_result ppf
|
||||
| Failed (_, _errs) ->
|
||||
Format.fprintf ppf
|
||||
"This operation FAILED."
|
||||
| Applied Reveal_result ->
|
||||
| Applied (Reveal_result { consumed_gas }) ->
|
||||
Format.fprintf ppf
|
||||
"This revelation was successfully applied"
|
||||
| Backtracked (Reveal_result, _) ->
|
||||
"This revelation was successfully applied" ;
|
||||
Format.fprintf ppf
|
||||
"@,Consumed gas: %s"
|
||||
(Z.to_string consumed_gas)
|
||||
| Backtracked (Reveal_result _, _) ->
|
||||
Format.fprintf ppf
|
||||
"@[<v 0>This revelation was BACKTRACKED, \
|
||||
its expected effects were NOT applied.@]" ;
|
||||
| Applied Delegation_result ->
|
||||
| Applied (Delegation_result { consumed_gas })->
|
||||
Format.fprintf ppf
|
||||
"This delegation was successfully applied"
|
||||
| Backtracked (Delegation_result, _) ->
|
||||
"This delegation was successfully applied" ;
|
||||
Format.fprintf ppf
|
||||
"@,Consumed gas: %s"
|
||||
(Z.to_string consumed_gas)
|
||||
| Backtracked (Delegation_result _, _) ->
|
||||
Format.fprintf ppf
|
||||
"@[<v 0>This delegation was BACKTRACKED, \
|
||||
its expected effects were NOT applied.@]" ;
|
||||
|
@ -367,10 +367,11 @@ let apply_manager_operation_content :
|
||||
let set_delegate =
|
||||
(* Ignore the delegatable flag for smart contracts. *)
|
||||
if internal then Delegate.set_from_script else Delegate.set in
|
||||
Lwt.return (Gas.consume ctxt Michelson_v1_gas.Cost_of.manager_operation) >>=? fun ctxt ->
|
||||
match operation with
|
||||
| Reveal _ ->
|
||||
return (* No-op: action already performed by `precheck_manager_contents`. *)
|
||||
(ctxt, (Reveal_result : kind successful_manager_operation_result), [])
|
||||
(ctxt, (Reveal_result { consumed_gas = Gas.consumed ~since:before_operation ~until:ctxt } : kind successful_manager_operation_result), [])
|
||||
| Transaction { amount ; parameters ; destination } -> begin
|
||||
spend ctxt source amount >>=? fun ctxt ->
|
||||
begin match Contract.is_implicit destination with
|
||||
@ -501,7 +502,7 @@ let apply_manager_operation_content :
|
||||
return (ctxt, result, [])
|
||||
| Delegation delegate ->
|
||||
set_delegate ctxt source delegate >>=? fun ctxt ->
|
||||
return (ctxt, Delegation_result, [])
|
||||
return (ctxt, Delegation_result { consumed_gas = Gas.consumed ~since:before_operation ~until:ctxt }, [])
|
||||
|
||||
let apply_internal_manager_operations ctxt mode ~payer ops =
|
||||
let rec apply ctxt applied worklist =
|
||||
@ -612,7 +613,7 @@ let skipped_operation_result
|
||||
= function operation ->
|
||||
match operation with
|
||||
| Reveal _ ->
|
||||
Applied ( Reveal_result : kind successful_manager_operation_result )
|
||||
Applied ( Reveal_result { consumed_gas = Z.zero } : kind successful_manager_operation_result )
|
||||
| _ -> Skipped (manager_kind operation)
|
||||
|
||||
let rec mark_skipped
|
||||
@ -727,7 +728,7 @@ let mark_backtracked results =
|
||||
: type kind. kind manager_operation_result -> kind manager_operation_result
|
||||
= function
|
||||
| Failed _ | Skipped _ | Backtracked _ as result -> result
|
||||
| Applied Reveal_result as result -> result
|
||||
| Applied (Reveal_result _) as result -> result
|
||||
| Applied result -> Backtracked (result, None) in
|
||||
mark_contents_list results
|
||||
|
||||
|
@ -42,7 +42,9 @@ let error_encoding =
|
||||
~binary:Error_monad.error_encoding
|
||||
|
||||
type _ successful_manager_operation_result =
|
||||
| Reveal_result : Kind.reveal successful_manager_operation_result
|
||||
| Reveal_result :
|
||||
{ consumed_gas : Z.t
|
||||
} -> Kind.reveal successful_manager_operation_result
|
||||
| Transaction_result :
|
||||
{ storage : Script.expr option ;
|
||||
big_map_diff : Contract.big_map_diff option ;
|
||||
@ -60,7 +62,9 @@ type _ successful_manager_operation_result =
|
||||
storage_size : Z.t ;
|
||||
paid_storage_size_diff : Z.t ;
|
||||
} -> Kind.origination successful_manager_operation_result
|
||||
| Delegation_result : Kind.delegation successful_manager_operation_result
|
||||
| Delegation_result :
|
||||
{ consumed_gas : Z.t
|
||||
} -> Kind.delegation successful_manager_operation_result
|
||||
|
||||
type packed_successful_manager_operation_result =
|
||||
| Successful_manager_result :
|
||||
@ -146,7 +150,8 @@ module Manager_result = struct
|
||||
let reveal_case =
|
||||
make
|
||||
~op_case: Operation.Encoding.Manager_operations.reveal_case
|
||||
~encoding: Data_encoding.empty
|
||||
~encoding: Data_encoding.(obj1 (dft "consumed_gas" z Z.zero))
|
||||
|
||||
~iselect:
|
||||
(function
|
||||
| Internal_operation_result
|
||||
@ -155,11 +160,11 @@ module Manager_result = struct
|
||||
| _ -> None)
|
||||
~select:
|
||||
(function
|
||||
| Successful_manager_result (Reveal_result as op) -> Some op
|
||||
| Successful_manager_result (Reveal_result _ as op) -> Some op
|
||||
| _ -> None)
|
||||
~kind: Kind.Reveal_manager_kind
|
||||
~proj: (function Reveal_result -> ())
|
||||
~inj: (fun () -> Reveal_result)
|
||||
~proj: (function Reveal_result { consumed_gas } -> consumed_gas)
|
||||
~inj: (fun consumed_gas -> Reveal_result { consumed_gas })
|
||||
|
||||
let transaction_case =
|
||||
make
|
||||
@ -248,7 +253,7 @@ module Manager_result = struct
|
||||
let delegation_case =
|
||||
make
|
||||
~op_case: Operation.Encoding.Manager_operations.delegation_case
|
||||
~encoding: Data_encoding.empty
|
||||
~encoding: Data_encoding.(obj1 (dft "consumed_gas" z Z.zero))
|
||||
~iselect:
|
||||
(function
|
||||
| Internal_operation_result
|
||||
@ -257,11 +262,11 @@ module Manager_result = struct
|
||||
| _ -> None)
|
||||
~select:
|
||||
(function
|
||||
| Successful_manager_result (Delegation_result as op) -> Some op
|
||||
| Successful_manager_result (Delegation_result _ as op) -> Some op
|
||||
| _ -> None)
|
||||
~kind: Kind.Delegation_manager_kind
|
||||
~proj: (function Delegation_result -> ())
|
||||
~inj: (fun () -> Delegation_result)
|
||||
~proj: (function Delegation_result { consumed_gas } -> consumed_gas)
|
||||
~inj: (fun consumed_gas -> Delegation_result { consumed_gas })
|
||||
|
||||
end
|
||||
|
||||
@ -770,11 +775,11 @@ let kind_equal
|
||||
| Manager_operation
|
||||
{ operation = Reveal _ ; _ },
|
||||
Manager_operation_result
|
||||
{ operation_result = Applied Reveal_result ; _ } -> Some Eq
|
||||
{ operation_result = Applied (Reveal_result _); _ } -> Some Eq
|
||||
| Manager_operation
|
||||
{ operation = Reveal _ ; _ },
|
||||
Manager_operation_result
|
||||
{ operation_result = Backtracked (Reveal_result, _) ; _ } -> Some Eq
|
||||
{ operation_result = Backtracked (Reveal_result _, _) ; _ } -> Some Eq
|
||||
| Manager_operation
|
||||
{ operation = Reveal _ ; _ },
|
||||
Manager_operation_result
|
||||
@ -827,11 +832,11 @@ let kind_equal
|
||||
| Manager_operation
|
||||
{ operation = Delegation _ ; _ },
|
||||
Manager_operation_result
|
||||
{ operation_result = Applied Delegation_result ; _ } -> Some Eq
|
||||
{ operation_result = Applied (Delegation_result _) ; _ } -> Some Eq
|
||||
| Manager_operation
|
||||
{ operation = Delegation _ ; _ },
|
||||
Manager_operation_result
|
||||
{ operation_result = Backtracked (Delegation_result, _) ; _ } -> Some Eq
|
||||
{ operation_result = Backtracked (Delegation_result _, _) ; _ } -> Some Eq
|
||||
| Manager_operation
|
||||
{ operation = Delegation _ ; _ },
|
||||
Manager_operation_result
|
||||
|
@ -86,7 +86,9 @@ and 'kind manager_operation_result =
|
||||
(** Result of applying a {!manager_operation_content}, either internal
|
||||
or external. *)
|
||||
and _ successful_manager_operation_result =
|
||||
| Reveal_result : Kind.reveal successful_manager_operation_result
|
||||
| Reveal_result :
|
||||
{ consumed_gas : Z.t
|
||||
} -> Kind.reveal successful_manager_operation_result
|
||||
| Transaction_result :
|
||||
{ storage : Script.expr option ;
|
||||
big_map_diff : Contract.big_map_diff option ;
|
||||
@ -104,7 +106,9 @@ and _ successful_manager_operation_result =
|
||||
storage_size : Z.t ;
|
||||
paid_storage_size_diff : Z.t ;
|
||||
} -> Kind.origination successful_manager_operation_result
|
||||
| Delegation_result : Kind.delegation successful_manager_operation_result
|
||||
| Delegation_result :
|
||||
{ consumed_gas : Z.t
|
||||
} -> Kind.delegation successful_manager_operation_result
|
||||
|
||||
and packed_successful_manager_operation_result =
|
||||
| Successful_manager_result :
|
||||
|
@ -235,6 +235,8 @@ module Cost_of = struct
|
||||
let compare_timestamp t1 t2 = compare_zint (Script_timestamp.to_zint t1) (Script_timestamp.to_zint t2)
|
||||
let compare_address _ _ = step_cost 20
|
||||
|
||||
let manager_operation = step_cost 10_000
|
||||
|
||||
module Typechecking = struct
|
||||
let cycle = step_cost 1
|
||||
let bool = free
|
||||
|
@ -111,6 +111,8 @@ module Cost_of : sig
|
||||
val compare_timestamp : Script_timestamp.t -> Script_timestamp.t -> Gas.cost
|
||||
val compare_address : Contract.t -> Contract.t -> Gas.cost
|
||||
|
||||
val manager_operation : Gas.cost
|
||||
|
||||
module Typechecking : sig
|
||||
val cycle : Gas.cost
|
||||
val unit : Gas.cost
|
||||
|
@ -98,7 +98,7 @@ let combine_operations
|
||||
fee = Tez.zero ;
|
||||
counter ;
|
||||
operation = Reveal public_key ;
|
||||
gas_limit = Z.of_int 20 ;
|
||||
gas_limit = Z.of_int 10000 ;
|
||||
storage_limit = Z.zero ;
|
||||
} in
|
||||
return (Some (Contents reveal_op), Z.succ counter)
|
||||
@ -153,7 +153,7 @@ let manager_operation
|
||||
fee = Tez.zero ;
|
||||
counter ;
|
||||
operation = Reveal public_key ;
|
||||
gas_limit = Z.of_int 20 ;
|
||||
gas_limit = Z.of_int 10000 ;
|
||||
storage_limit = Z.zero ;
|
||||
} in
|
||||
let op =
|
||||
@ -181,7 +181,7 @@ let revelation ctxt public_key =
|
||||
fee = Tez.zero ;
|
||||
counter ;
|
||||
operation = Reveal public_key ;
|
||||
gas_limit = Z.of_int 20 ;
|
||||
gas_limit = Z.of_int 10000 ;
|
||||
storage_limit = Z.zero ;
|
||||
})) in
|
||||
return @@ sign account.sk ctxt sop
|
||||
|
Loading…
Reference in New Issue
Block a user