Alpha: deposit at the end of validation.
This allows to credit bond in the block.
This commit is contained in:
parent
670249f580
commit
ce79dc5383
@ -146,9 +146,11 @@ let fresh_internal_nonce = Raw_context.fresh_internal_nonce
|
|||||||
let record_internal_nonce = Raw_context.record_internal_nonce
|
let record_internal_nonce = Raw_context.record_internal_nonce
|
||||||
let internal_nonce_already_recorded = Raw_context.internal_nonce_already_recorded
|
let internal_nonce_already_recorded = Raw_context.internal_nonce_already_recorded
|
||||||
|
|
||||||
|
let add_deposit = Raw_context.add_deposit
|
||||||
let add_fees = Raw_context.add_fees
|
let add_fees = Raw_context.add_fees
|
||||||
let add_rewards = Raw_context.add_rewards
|
let add_rewards = Raw_context.add_rewards
|
||||||
|
|
||||||
|
let get_deposits = Raw_context.get_deposits
|
||||||
let get_fees = Raw_context.get_fees
|
let get_fees = Raw_context.get_fees
|
||||||
let get_rewards = Raw_context.get_rewards
|
let get_rewards = Raw_context.get_rewards
|
||||||
|
|
||||||
|
@ -1052,8 +1052,11 @@ val internal_nonce_already_recorded: context -> int -> bool
|
|||||||
|
|
||||||
val add_fees: context -> Tez.t -> context tzresult Lwt.t
|
val add_fees: context -> Tez.t -> context tzresult Lwt.t
|
||||||
val add_rewards: context -> Tez.t -> context tzresult Lwt.t
|
val add_rewards: context -> Tez.t -> context tzresult Lwt.t
|
||||||
|
val add_deposit:
|
||||||
|
context -> Signature.Public_key_hash.t -> Tez.t -> context tzresult Lwt.t
|
||||||
|
|
||||||
val get_fees: context -> Tez.t
|
val get_fees: context -> Tez.t
|
||||||
val get_rewards: context -> Tez.t
|
val get_rewards: context -> Tez.t
|
||||||
|
val get_deposits: context -> Tez.t Signature.Public_key_hash.Map.t
|
||||||
|
|
||||||
val description: context Storage_description.t
|
val description: context Storage_description.t
|
||||||
|
@ -638,7 +638,10 @@ let apply_contents_list
|
|||||||
let delegate = Signature.Public_key.hash delegate in
|
let delegate = Signature.Public_key.hash delegate in
|
||||||
let gap = List.length slots in
|
let gap = List.length slots in
|
||||||
let ctxt = Fitness.increase ~gap ctxt in
|
let ctxt = Fitness.increase ~gap ctxt in
|
||||||
Baking.freeze_endorsement_deposit ctxt delegate gap >>=? fun ctxt ->
|
Lwt.return
|
||||||
|
Tez.(Constants.endorsement_security_deposit ctxt *?
|
||||||
|
Int64.of_int gap) >>=? fun deposit ->
|
||||||
|
add_deposit ctxt delegate deposit >>=? fun ctxt ->
|
||||||
Global.get_last_block_priority ctxt >>=? fun block_priority ->
|
Global.get_last_block_priority ctxt >>=? fun block_priority ->
|
||||||
Baking.endorsement_reward ctxt ~block_priority gap >>=? fun reward ->
|
Baking.endorsement_reward ctxt ~block_priority gap >>=? fun reward ->
|
||||||
Delegate.freeze_rewards ctxt delegate reward >>=? fun ctxt ->
|
Delegate.freeze_rewards ctxt delegate reward >>=? fun ctxt ->
|
||||||
@ -798,10 +801,8 @@ let may_start_new_cycle ctxt =
|
|||||||
let begin_full_construction ctxt pred_timestamp protocol_data =
|
let begin_full_construction ctxt pred_timestamp protocol_data =
|
||||||
Baking.check_baking_rights
|
Baking.check_baking_rights
|
||||||
ctxt protocol_data pred_timestamp >>=? fun delegate_pk ->
|
ctxt protocol_data pred_timestamp >>=? fun delegate_pk ->
|
||||||
let delegate_pkh = Signature.Public_key.hash delegate_pk in
|
|
||||||
Baking.freeze_baking_deposit ctxt delegate_pkh >>=? fun (ctxt, deposit) ->
|
|
||||||
let ctxt = Fitness.increase ctxt in
|
let ctxt = Fitness.increase ctxt in
|
||||||
return (ctxt, protocol_data, delegate_pk, deposit)
|
return (ctxt, protocol_data, delegate_pk)
|
||||||
|
|
||||||
let begin_partial_construction ctxt =
|
let begin_partial_construction ctxt =
|
||||||
let ctxt = Fitness.increase ctxt in
|
let ctxt = Fitness.increase ctxt in
|
||||||
@ -822,14 +823,19 @@ let begin_application ctxt block_header pred_timestamp =
|
|||||||
Compare.Bool.(has_commitment = current_level.expected_commitment)
|
Compare.Bool.(has_commitment = current_level.expected_commitment)
|
||||||
(Invalid_commitment
|
(Invalid_commitment
|
||||||
{ expected = current_level.expected_commitment }) >>=? fun () ->
|
{ expected = current_level.expected_commitment }) >>=? fun () ->
|
||||||
let delegate_pkh = Signature.Public_key.hash delegate_pk in
|
|
||||||
Baking.freeze_baking_deposit ctxt delegate_pkh >>=? fun (ctxt, deposit) ->
|
|
||||||
let ctxt = Fitness.increase ctxt in
|
let ctxt = Fitness.increase ctxt in
|
||||||
return (ctxt, delegate_pk, deposit)
|
return (ctxt, delegate_pk)
|
||||||
|
|
||||||
let finalize_application ctxt protocol_data delegate =
|
let finalize_application ctxt protocol_data delegate =
|
||||||
let block_reward = Constants.block_reward ctxt in
|
let deposit = Constants.block_security_deposit ctxt in
|
||||||
add_rewards ctxt block_reward >>=? fun ctxt ->
|
add_deposit ctxt delegate deposit >>=? fun ctxt ->
|
||||||
|
add_rewards ctxt (Constants.block_reward ctxt) >>=? fun ctxt ->
|
||||||
|
Signature.Public_key_hash.Map.fold
|
||||||
|
(fun delegate deposit ctxt ->
|
||||||
|
ctxt >>=? fun ctxt ->
|
||||||
|
Delegate.freeze_deposit ctxt delegate deposit)
|
||||||
|
(get_deposits ctxt)
|
||||||
|
(return ctxt) >>=? fun ctxt ->
|
||||||
(* end of level (from this point nothing should fail) *)
|
(* end of level (from this point nothing should fail) *)
|
||||||
let fees = Alpha_context.get_fees ctxt in
|
let fees = Alpha_context.get_fees ctxt in
|
||||||
Delegate.freeze_fees ctxt delegate fees >>=? fun ctxt ->
|
Delegate.freeze_fees ctxt delegate fees >>=? fun ctxt ->
|
||||||
|
@ -14,8 +14,6 @@ open Misc
|
|||||||
type error += Invalid_fitness_gap of int64 * int64 (* `Permanent *)
|
type error += Invalid_fitness_gap of int64 * int64 (* `Permanent *)
|
||||||
type error += Invalid_endorsement_slot of int * int (* `Permanent *)
|
type error += Invalid_endorsement_slot of int * int (* `Permanent *)
|
||||||
type error += Timestamp_too_early of Timestamp.t * Timestamp.t (* `Permanent *)
|
type error += Timestamp_too_early of Timestamp.t * Timestamp.t (* `Permanent *)
|
||||||
type error += Cannot_freeze_baking_deposit (* `Permanent *)
|
|
||||||
type error += Cannot_freeze_endorsement_deposit (* `Permanent *)
|
|
||||||
type error += Inconsistent_endorsement of public_key_hash list (* `Permanent *)
|
type error += Inconsistent_endorsement of public_key_hash list (* `Permanent *)
|
||||||
type error += Empty_endorsement
|
type error += Empty_endorsement
|
||||||
type error += Invalid_block_signature of Block_hash.t * Signature.Public_key_hash.t (* `Permanent *)
|
type error += Invalid_block_signature of Block_hash.t * Signature.Public_key_hash.t (* `Permanent *)
|
||||||
@ -63,26 +61,6 @@ let () =
|
|||||||
(req "provided" int16))
|
(req "provided" int16))
|
||||||
(function Invalid_endorsement_slot (m, g) -> Some (m, g) | _ -> None)
|
(function Invalid_endorsement_slot (m, g) -> Some (m, g) | _ -> None)
|
||||||
(fun (m, g) -> Invalid_endorsement_slot (m, g)) ;
|
(fun (m, g) -> Invalid_endorsement_slot (m, g)) ;
|
||||||
register_error_kind
|
|
||||||
`Permanent
|
|
||||||
~id:"baking.cannot_freeze_baking_deposit"
|
|
||||||
~title:"Cannot freeze baking deposit"
|
|
||||||
~description:
|
|
||||||
"Impossible to debit the required tokens on the baker's contract"
|
|
||||||
~pp:(fun ppf () -> Format.fprintf ppf "Cannot freeze the baking deposit")
|
|
||||||
Data_encoding.unit
|
|
||||||
(function Cannot_freeze_baking_deposit -> Some () | _ -> None)
|
|
||||||
(fun () -> Cannot_freeze_baking_deposit) ;
|
|
||||||
register_error_kind
|
|
||||||
`Permanent
|
|
||||||
~id:"baking.cannot_freeze_endorsement_deposit"
|
|
||||||
~title:"Cannot freeze endorsement deposit"
|
|
||||||
~description:
|
|
||||||
"Impossible to debit the required tokens on the endorser's contract"
|
|
||||||
~pp:(fun ppf () -> Format.fprintf ppf "Cannot freeze the endorsement deposit")
|
|
||||||
Data_encoding.unit
|
|
||||||
(function Cannot_freeze_endorsement_deposit -> Some () | _ -> None)
|
|
||||||
(fun () -> Cannot_freeze_endorsement_deposit) ;
|
|
||||||
register_error_kind
|
register_error_kind
|
||||||
`Permanent
|
`Permanent
|
||||||
~id:"baking.inconsisten_endorsement"
|
~id:"baking.inconsisten_endorsement"
|
||||||
@ -163,18 +141,6 @@ let earlier_predecessor_timestamp ctxt level =
|
|||||||
Lwt.return Timestamp.(current_timestamp +? delay) >>=? fun result ->
|
Lwt.return Timestamp.(current_timestamp +? delay) >>=? fun result ->
|
||||||
return result
|
return result
|
||||||
|
|
||||||
let freeze_baking_deposit ctxt delegate =
|
|
||||||
let deposit = Constants.block_security_deposit ctxt in
|
|
||||||
Delegate.freeze_deposit ctxt delegate deposit
|
|
||||||
|> trace Cannot_freeze_baking_deposit >>=? fun ctxt ->
|
|
||||||
return (ctxt, deposit)
|
|
||||||
|
|
||||||
let freeze_endorsement_deposit ctxt delegate n =
|
|
||||||
let deposit = Constants.endorsement_security_deposit ctxt in
|
|
||||||
Lwt.return (Tez.(deposit *? Int64.of_int n)) >>=? fun deposit ->
|
|
||||||
Delegate.freeze_deposit ctxt delegate deposit
|
|
||||||
|> trace Cannot_freeze_endorsement_deposit
|
|
||||||
|
|
||||||
let check_timestamp c priority pred_timestamp =
|
let check_timestamp c priority pred_timestamp =
|
||||||
minimal_time c priority pred_timestamp >>=? fun minimal_time ->
|
minimal_time c priority pred_timestamp >>=? fun minimal_time ->
|
||||||
let timestamp = Alpha_context.Timestamp.current c in
|
let timestamp = Alpha_context.Timestamp.current c in
|
||||||
|
@ -15,8 +15,6 @@ type error += Invalid_fitness_gap of int64 * int64 (* `Permanent *)
|
|||||||
type error += Invalid_endorsement_slot of int * int (* `Permanent *)
|
type error += Invalid_endorsement_slot of int * int (* `Permanent *)
|
||||||
type error += Timestamp_too_early of Timestamp.t * Timestamp.t (* `Permanent *)
|
type error += Timestamp_too_early of Timestamp.t * Timestamp.t (* `Permanent *)
|
||||||
type error += Inconsistent_endorsement of public_key_hash list (* `Permanent *)
|
type error += Inconsistent_endorsement of public_key_hash list (* `Permanent *)
|
||||||
type error += Cannot_freeze_baking_deposit (* `Permanent *)
|
|
||||||
type error += Cannot_freeze_endorsement_deposit (* `Permanent *)
|
|
||||||
type error += Invalid_block_signature of Block_hash.t * Signature.Public_key_hash.t (* `Permanent *)
|
type error += Invalid_block_signature of Block_hash.t * Signature.Public_key_hash.t (* `Permanent *)
|
||||||
|
|
||||||
(** [minimal_time ctxt priority pred_block_time] returns the minimal
|
(** [minimal_time ctxt priority pred_block_time] returns the minimal
|
||||||
@ -26,29 +24,6 @@ type error += Invalid_block_signature of Block_hash.t * Signature.Public_key_has
|
|||||||
time cannot be computed. *)
|
time cannot be computed. *)
|
||||||
val minimal_time: context -> int -> Time.t -> Time.t tzresult Lwt.t
|
val minimal_time: context -> int -> Time.t -> Time.t tzresult Lwt.t
|
||||||
|
|
||||||
(** [freeze_baking_deposit: ctxt delegate priority]
|
|
||||||
Freeze the baking deposit (See !Constants.block_security_deposit)
|
|
||||||
from a delegate account. No deposit is frozen if the baking
|
|
||||||
priority of this block is greater than the maximum number
|
|
||||||
of paying baking in the network (meaning that n. bakers
|
|
||||||
skipped their turn).
|
|
||||||
|
|
||||||
Raise an error if the delegate account does not have enough
|
|
||||||
funds to claim baking rights. *)
|
|
||||||
val freeze_baking_deposit:
|
|
||||||
context ->
|
|
||||||
public_key_hash ->
|
|
||||||
(context * Tez.t) tzresult Lwt.t
|
|
||||||
|
|
||||||
(** [freeze_endorsement_deposit: ctxt delegate]
|
|
||||||
Freeze the endorsement deposit (See !Constants.endorsement_security_deposit)
|
|
||||||
from the delegate account.
|
|
||||||
|
|
||||||
Raise an error if the baker account does not have enough
|
|
||||||
funds to claim endorsement rights *)
|
|
||||||
val freeze_endorsement_deposit:
|
|
||||||
context -> public_key_hash -> int -> context tzresult Lwt.t
|
|
||||||
|
|
||||||
(** [check_baking_rights ctxt block pred_timestamp] verifies that:
|
(** [check_baking_rights ctxt block pred_timestamp] verifies that:
|
||||||
* the contract that owned the roll at cycle start has the block signer as delegate.
|
* the contract that owned the roll at cycle start has the block signer as delegate.
|
||||||
* the timestamp is coherent with the announced slot.
|
* the timestamp is coherent with the announced slot.
|
||||||
|
@ -70,7 +70,6 @@ type validation_state =
|
|||||||
{ mode : validation_mode ;
|
{ mode : validation_mode ;
|
||||||
ctxt : Alpha_context.t ;
|
ctxt : Alpha_context.t ;
|
||||||
op_count : int ;
|
op_count : int ;
|
||||||
deposit : Alpha_context.Tez.t ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let current_context { ctxt ; _ } =
|
let current_context { ctxt ; _ } =
|
||||||
@ -93,9 +92,9 @@ let begin_application
|
|||||||
let timestamp = block_header.shell.timestamp in
|
let timestamp = block_header.shell.timestamp in
|
||||||
Alpha_context.prepare ~level ~timestamp ~fitness ctxt >>=? fun ctxt ->
|
Alpha_context.prepare ~level ~timestamp ~fitness ctxt >>=? fun ctxt ->
|
||||||
Apply.begin_application
|
Apply.begin_application
|
||||||
ctxt block_header pred_timestamp >>=? fun (ctxt, baker, deposit) ->
|
ctxt block_header pred_timestamp >>=? fun (ctxt, baker) ->
|
||||||
let mode = Application { block_header ; baker = Signature.Public_key.hash baker } in
|
let mode = Application { block_header ; baker = Signature.Public_key.hash baker } in
|
||||||
return { mode ; ctxt ; op_count = 0 ; deposit }
|
return { mode ; ctxt ; op_count = 0 }
|
||||||
|
|
||||||
let begin_construction
|
let begin_construction
|
||||||
~predecessor_context:ctxt
|
~predecessor_context:ctxt
|
||||||
@ -114,17 +113,17 @@ let begin_construction
|
|||||||
| None ->
|
| None ->
|
||||||
Apply.begin_partial_construction ctxt >>=? fun ctxt ->
|
Apply.begin_partial_construction ctxt >>=? fun ctxt ->
|
||||||
let mode = Partial_construction { predecessor } in
|
let mode = Partial_construction { predecessor } in
|
||||||
return (mode, ctxt, Alpha_context.Tez.zero)
|
return (mode, ctxt)
|
||||||
| Some proto_header ->
|
| Some proto_header ->
|
||||||
Apply.begin_full_construction
|
Apply.begin_full_construction
|
||||||
ctxt pred_timestamp
|
ctxt pred_timestamp
|
||||||
proto_header.contents >>=? fun (ctxt, protocol_data, baker, deposit) ->
|
proto_header.contents >>=? fun (ctxt, protocol_data, baker) ->
|
||||||
let mode =
|
let mode =
|
||||||
let baker = Signature.Public_key.hash baker in
|
let baker = Signature.Public_key.hash baker in
|
||||||
Full_construction { predecessor ; baker ; protocol_data } in
|
Full_construction { predecessor ; baker ; protocol_data } in
|
||||||
return (mode, ctxt, deposit)
|
return (mode, ctxt)
|
||||||
end >>=? fun (mode, ctxt, deposit) ->
|
end >>=? fun (mode, ctxt) ->
|
||||||
return { mode ; ctxt ; op_count = 0 ; deposit }
|
return { mode ; ctxt ; op_count = 0 }
|
||||||
|
|
||||||
let apply_operation
|
let apply_operation
|
||||||
({ mode ; ctxt ; op_count ; _ } as data)
|
({ mode ; ctxt ; op_count ; _ } as data)
|
||||||
@ -144,12 +143,18 @@ let apply_operation
|
|||||||
let op_count = op_count + 1 in
|
let op_count = op_count + 1 in
|
||||||
return ({ data with ctxt ; op_count }, Operation_metadata result)
|
return ({ data with ctxt ; op_count }, Operation_metadata result)
|
||||||
|
|
||||||
let finalize_block { mode ; ctxt ; op_count ; deposit = _ } =
|
let finalize_block { mode ; ctxt ; op_count } =
|
||||||
match mode with
|
match mode with
|
||||||
| Partial_construction _ ->
|
| Partial_construction _ ->
|
||||||
let level = Alpha_context. Level.current ctxt in
|
let level = Alpha_context. Level.current ctxt in
|
||||||
Alpha_context.Vote.get_current_period_kind ctxt >>=? fun voting_period_kind ->
|
Alpha_context.Vote.get_current_period_kind ctxt >>=? fun voting_period_kind ->
|
||||||
let baker = Signature.Public_key_hash.zero in
|
let baker = Signature.Public_key_hash.zero in
|
||||||
|
Signature.Public_key_hash.Map.fold
|
||||||
|
(fun delegate deposit ctxt ->
|
||||||
|
ctxt >>=? fun ctxt ->
|
||||||
|
Alpha_context.Delegate.freeze_deposit ctxt delegate deposit)
|
||||||
|
(Alpha_context.get_deposits ctxt)
|
||||||
|
(return ctxt) >>=? fun ctxt ->
|
||||||
let ctxt = Alpha_context.finalize ctxt in
|
let ctxt = Alpha_context.finalize ctxt in
|
||||||
return (ctxt, { Alpha_context.Block_header.baker ; level ;
|
return (ctxt, { Alpha_context.Block_header.baker ; level ;
|
||||||
voting_period_kind })
|
voting_period_kind })
|
||||||
|
@ -27,7 +27,6 @@ type validation_state =
|
|||||||
{ mode : validation_mode ;
|
{ mode : validation_mode ;
|
||||||
ctxt : Alpha_context.t ;
|
ctxt : Alpha_context.t ;
|
||||||
op_count : int ;
|
op_count : int ;
|
||||||
deposit : Alpha_context.Tez.t ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type operation_data = Alpha_context.packed_protocol_data
|
type operation_data = Alpha_context.packed_protocol_data
|
||||||
|
@ -17,6 +17,7 @@ type t = {
|
|||||||
timestamp: Time.t ;
|
timestamp: Time.t ;
|
||||||
fitness: Int64.t ;
|
fitness: Int64.t ;
|
||||||
endorsements_received: Int_set.t ;
|
endorsements_received: Int_set.t ;
|
||||||
|
deposits: Tez_repr.t Signature.Public_key_hash.Map.t ;
|
||||||
fees: Tez_repr.t ;
|
fees: Tez_repr.t ;
|
||||||
rewards: Tez_repr.t ;
|
rewards: Tez_repr.t ;
|
||||||
block_gas: Z.t ;
|
block_gas: Z.t ;
|
||||||
@ -78,6 +79,16 @@ let add_rewards ctxt rewards =
|
|||||||
Lwt.return Tez_repr.(ctxt.rewards +? rewards) >>=? fun rewards ->
|
Lwt.return Tez_repr.(ctxt.rewards +? rewards) >>=? fun rewards ->
|
||||||
return { ctxt with rewards}
|
return { ctxt with rewards}
|
||||||
|
|
||||||
|
let add_deposit ctxt delegate deposit =
|
||||||
|
let previous =
|
||||||
|
try Signature.Public_key_hash.Map.find delegate ctxt.deposits
|
||||||
|
with Not_found -> Tez_repr.zero in
|
||||||
|
Lwt.return Tez_repr.(previous +? deposit) >>=? fun deposit ->
|
||||||
|
let deposits =
|
||||||
|
Signature.Public_key_hash.Map.add delegate deposit ctxt.deposits in
|
||||||
|
return { ctxt with deposits }
|
||||||
|
|
||||||
|
let get_deposits ctxt = ctxt.deposits
|
||||||
let get_rewards ctxt = ctxt.rewards
|
let get_rewards ctxt = ctxt.rewards
|
||||||
let get_fees ctxt = ctxt.fees
|
let get_fees ctxt = ctxt.fees
|
||||||
|
|
||||||
@ -386,6 +397,7 @@ let prepare ~level ~timestamp ~fitness ctxt =
|
|||||||
endorsements_received = Int_set.empty ;
|
endorsements_received = Int_set.empty ;
|
||||||
fees = Tez_repr.zero ;
|
fees = Tez_repr.zero ;
|
||||||
rewards = Tez_repr.zero ;
|
rewards = Tez_repr.zero ;
|
||||||
|
deposits = Signature.Public_key_hash.Map.empty ;
|
||||||
operation_gas = Unaccounted ;
|
operation_gas = Unaccounted ;
|
||||||
block_gas = constants.Constants_repr.hard_gas_limit_per_block ;
|
block_gas = constants.Constants_repr.hard_gas_limit_per_block ;
|
||||||
operation_storage = Unaccounted ;
|
operation_storage = Unaccounted ;
|
||||||
@ -437,6 +449,7 @@ let register_resolvers enc resolve =
|
|||||||
endorsements_received = Int_set.empty ;
|
endorsements_received = Int_set.empty ;
|
||||||
fees = Tez_repr.zero ;
|
fees = Tez_repr.zero ;
|
||||||
rewards = Tez_repr.zero ;
|
rewards = Tez_repr.zero ;
|
||||||
|
deposits = Signature.Public_key_hash.Map.empty ;
|
||||||
block_gas = Constants_repr.default.hard_gas_limit_per_block ;
|
block_gas = Constants_repr.default.hard_gas_limit_per_block ;
|
||||||
operation_gas = Unaccounted ;
|
operation_gas = Unaccounted ;
|
||||||
block_storage = Constants_repr.default.hard_storage_limit_per_block ;
|
block_storage = Constants_repr.default.hard_storage_limit_per_block ;
|
||||||
|
@ -71,9 +71,12 @@ val first_level: context -> Raw_level_repr.t
|
|||||||
|
|
||||||
val add_fees: context -> Tez_repr.t -> context tzresult Lwt.t
|
val add_fees: context -> Tez_repr.t -> context tzresult Lwt.t
|
||||||
val add_rewards: context -> Tez_repr.t -> context tzresult Lwt.t
|
val add_rewards: context -> Tez_repr.t -> context tzresult Lwt.t
|
||||||
|
val add_deposit:
|
||||||
|
context -> Signature.Public_key_hash.t -> Tez_repr.t -> context tzresult Lwt.t
|
||||||
|
|
||||||
val get_fees: context -> Tez_repr.t
|
val get_fees: context -> Tez_repr.t
|
||||||
val get_rewards: context -> Tez_repr.t
|
val get_rewards: context -> Tez_repr.t
|
||||||
|
val get_deposits: context -> Tez_repr.t Signature.Public_key_hash.Map.t
|
||||||
|
|
||||||
type error += Gas_limit_too_high (* `Permanent *)
|
type error += Gas_limit_too_high (* `Permanent *)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user