Alpha: update operation receipt for endorser

This commit is contained in:
Lý Kim Quyên 2018-06-23 21:33:08 +00:00 committed by Pierre Chambart
parent 04c66869c9
commit aa1450d8e6
7 changed files with 55 additions and 66 deletions

View File

@ -313,13 +313,15 @@ let rec pp_contents_and_result_list :
pp_balance_updates bus pp_balance_updates bus
| Single_and_result | Single_and_result
(Endorsement { level }, (Endorsement { level },
Endorsement_result (delegate, slots)) -> Endorsement_result { balance_updates ; delegate ; slots }) ->
Format.fprintf ppf Format.fprintf ppf
"@[<v 2>Endorsement:@,\ "@[<v 2>Endorsement:@,\
Level: %a@,\ Level: %a@,\
Balance updates:%a@,\
Delegate: %a@,\ Delegate: %a@,\
Slots: %a@]" Slots: %a@]"
Raw_level.pp level Raw_level.pp level
pp_balance_updates balance_updates
Signature.Public_key_hash.pp delegate Signature.Public_key_hash.pp delegate
(Format.pp_print_list (Format.pp_print_list
~pp_sep:Format.pp_print_space ~pp_sep:Format.pp_print_space

View File

@ -322,17 +322,6 @@ let () =
open Apply_operation_result open Apply_operation_result
(**
Transaction: source/payer A -> destination B
- payer: is the signer of the operation, the one that pays the storage fee.
This fee is not going to the baker but it will be burned.
- source: is the one who will pay for the fees: space and gas consumption.
This amount will go to the baker.
- internal: set to true in the case of transaction between smart contracts.
Where there is a new storage cost for each smart contract may occurs. The
source may not be the same A any more.
*)
let apply_manager_operation_content : let apply_manager_operation_content :
type kind. type kind.
( Alpha_context.t -> Script_ir_translator.unparsing_mode -> payer:Contract.t -> source:Contract.t -> ( Alpha_context.t -> Script_ir_translator.unparsing_mode -> payer:Contract.t -> source:Contract.t ->
@ -543,10 +532,8 @@ let apply_manager_contents
Manager_operation_result Manager_operation_result
{ balance_updates = { balance_updates =
cleanup_balance_updates cleanup_balance_updates
[ [ Contract source, Debited fee ;
Contract source, Debited fee ; Rewards (baker, level.cycle), Credited fee ] ;
Rewards (baker, level.cycle), Credited fee
] ;
operation_result ; operation_result ;
internal_operation_results }) internal_operation_results })
@ -582,7 +569,8 @@ let rec precheck_manager_contents_list
let rec apply_manager_contents_list let rec apply_manager_contents_list
: type kind. : type kind.
Alpha_context.t -> _ -> _ -> kind Kind.manager contents_list -> Alpha_context.t -> Script_ir_translator.unparsing_mode ->
public_key_hash -> kind Kind.manager contents_list ->
(context * kind Kind.manager contents_result_list) Lwt.t = (context * kind Kind.manager contents_result_list) Lwt.t =
fun ctxt mode baker contents_list -> fun ctxt mode baker contents_list ->
match contents_list with match contents_list with
@ -651,7 +639,14 @@ let apply_contents_list
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 ->
return (ctxt, Single_result (Endorsement_result (delegate, slots))) let level = Level.from_raw ctxt level in
return (ctxt, Single_result
(Endorsement_result
{ balance_updates =
[ Rewards (baker, level.cycle), Credited reward;
Rewards (delegate, level.cycle), Debited reward;
Deposits (delegate, level.cycle), Credited deposit; ] ;
delegate ; slots }))
| Single (Seed_nonce_revelation { level ; nonce }) -> | Single (Seed_nonce_revelation { level ; nonce }) ->
let level = Level.from_raw ctxt level in let level = Level.from_raw ctxt level in
Nonce.reveal ctxt level nonce >>=? fun ctxt -> Nonce.reveal ctxt level nonce >>=? fun ctxt ->
@ -660,9 +655,8 @@ let apply_contents_list
add_rewards ctxt seed_nonce_revelation_tip >>=? fun ctxt -> add_rewards ctxt seed_nonce_revelation_tip >>=? fun ctxt ->
return (ctxt, Single_result return (ctxt, Single_result
(Seed_nonce_revelation_result (Seed_nonce_revelation_result
[ [ Rewards (baker, level.cycle),
Rewards (baker, level.cycle), Credited seed_nonce_revelation_tip Credited seed_nonce_revelation_tip ]))
]))
| Single (Double_endorsement_evidence { op1 ; op2 }) -> begin | Single (Double_endorsement_evidence { op1 ; op2 }) -> begin
match op1.protocol_data.contents, op2.protocol_data.contents with match op1.protocol_data.contents, op2.protocol_data.contents with
| Single (Endorsement e1), | Single (Endorsement e1),
@ -694,15 +688,12 @@ let apply_contents_list
| Ok v -> v | Ok v -> v
| Error _ -> Tez.zero in | Error _ -> Tez.zero in
add_rewards ctxt reward >>=? fun ctxt -> add_rewards ctxt reward >>=? fun ctxt ->
return return (ctxt, Single_result
(ctxt, (Double_endorsement_evidence_result [
Single_result Rewards (baker, level.cycle), Credited reward;
(Double_endorsement_evidence_result [ Rewards (delegate1, level.cycle), Debited balance.rewards;
Rewards (baker, level.cycle), Credited reward; Deposits (delegate1, level.cycle), Debited balance.deposit;
Rewards (delegate1, level.cycle), Debited balance.rewards; Fees (delegate1, level.cycle), Debited balance.fees ]))
Deposits (delegate1, level.cycle), Debited balance.deposit;
Fees (delegate1, level.cycle), Debited balance.fees
]))
| _, _ -> fail Invalid_double_endorsement_evidence | _, _ -> fail Invalid_double_endorsement_evidence
end end
| Single (Double_baking_evidence { bh1 ; bh2 }) -> | Single (Double_baking_evidence { bh1 ; bh2 }) ->
@ -749,15 +740,12 @@ let apply_contents_list
| Ok v -> v | Ok v -> v
| Error _ -> Tez.zero in | Error _ -> Tez.zero in
add_rewards ctxt reward >>=? fun ctxt -> add_rewards ctxt reward >>=? fun ctxt ->
return return (ctxt, Single_result
(ctxt, (Double_baking_evidence_result [
Single_result Rewards (baker, level.cycle), Credited reward ;
(Double_baking_evidence_result [ Rewards (delegate, level.cycle), Debited balance.rewards ;
Rewards (baker, level.cycle), Credited reward ; Deposits (delegate, level.cycle), Debited balance.deposit ;
Rewards (delegate, level.cycle), Debited balance.rewards ; Fees (delegate, level.cycle), Debited balance.fees ; ]))
Deposits (delegate, level.cycle), Debited balance.deposit ;
Fees (delegate, level.cycle), Debited balance.fees ;
]))
| Single (Activate_account { id = pkh ; activation_code }) -> begin | Single (Activate_account { id = pkh ; activation_code }) -> begin
let blinded_pkh = let blinded_pkh =
Blinded_public_key_hash.of_ed25519_pkh activation_code pkh in Blinded_public_key_hash.of_ed25519_pkh activation_code pkh in
@ -767,11 +755,8 @@ let apply_contents_list
Commitment.delete ctxt blinded_pkh >>=? fun ctxt -> Commitment.delete ctxt blinded_pkh >>=? fun ctxt ->
let contract = Contract.implicit_contract (Signature.Ed25519 pkh) in let contract = Contract.implicit_contract (Signature.Ed25519 pkh) in
Contract.(credit ctxt contract amount) >>=? fun ctxt -> Contract.(credit ctxt contract amount) >>=? fun ctxt ->
return (ctxt, Single_result ( return (ctxt, Single_result (Activate_account_result
Activate_account_result [ Contract contract, Credited amount ]))
[
Contract contract, Credited amount
]))
end end
| Single (Proposals { source ; period ; proposals }) -> | Single (Proposals { source ; period ; proposals }) ->
Roll.delegate_pubkey ctxt source >>=? fun delegate -> Roll.delegate_pubkey ctxt source >>=? fun delegate ->

View File

@ -339,7 +339,10 @@ let internal_operation_result_encoding :
type 'kind contents_result = type 'kind contents_result =
| Endorsement_result : | Endorsement_result :
Signature.Public_key_hash.t * int list -> Kind.endorsement contents_result { balance_updates : balance_updates ;
delegate : Signature.Public_key_hash.t ;
slots: int list ;
} -> Kind.endorsement contents_result
| Seed_nonce_revelation_result : | Seed_nonce_revelation_result :
balance_updates -> Kind.seed_nonce_revelation contents_result balance_updates -> Kind.seed_nonce_revelation contents_result
| Double_endorsement_evidence_result : | Double_endorsement_evidence_result :
@ -402,7 +405,8 @@ module Encoding = struct
Case { Case {
op_case = Operation.Encoding.endorsement_case ; op_case = Operation.Encoding.endorsement_case ;
encoding = encoding =
(obj2 (obj3
(req "balance_updates" balance_updates_encoding)
(req "delegate" Signature.Public_key_hash.encoding) (req "delegate" Signature.Public_key_hash.encoding)
(req "slots" (list uint8))); (req "slots" (list uint8)));
select = select =
@ -415,9 +419,11 @@ module Encoding = struct
| _ -> None) ; | _ -> None) ;
proj = proj =
(function (function
| Endorsement_result (d, s) -> (d, s)) ; | Endorsement_result { balance_updates ; delegate ; slots }
-> (balance_updates, delegate, slots)) ;
inj = inj =
(fun (d, s) -> Endorsement_result (d, s)) (fun (balance_updates, delegate, slots) ->
Endorsement_result { balance_updates ; delegate ; slots })
} }
let seed_nonce_revelation_case = let seed_nonce_revelation_case =

View File

@ -54,7 +54,10 @@ and packed_contents_result_list =
(** Result of applying an {!Operation.contents}. Follows the same structure. *) (** Result of applying an {!Operation.contents}. Follows the same structure. *)
and 'kind contents_result = and 'kind contents_result =
| Endorsement_result : | Endorsement_result :
Signature.Public_key_hash.t * int list -> Kind.endorsement contents_result { balance_updates : balance_updates ;
delegate : Signature.Public_key_hash.t ;
slots: int list ;
} -> Kind.endorsement contents_result
| Seed_nonce_revelation_result : | Seed_nonce_revelation_result :
balance_updates -> Kind.seed_nonce_revelation contents_result balance_updates -> Kind.seed_nonce_revelation contents_result
| Double_endorsement_evidence_result : | Double_endorsement_evidence_result :

View File

@ -376,7 +376,7 @@ let punish ctxt delegate cycle =
get_frozen_rewards ctxt contract cycle >>=? fun rewards -> get_frozen_rewards ctxt contract cycle >>=? fun rewards ->
Roll_storage.Delegate.remove_amount ctxt delegate deposit >>=? fun ctxt -> Roll_storage.Delegate.remove_amount ctxt delegate deposit >>=? fun ctxt ->
Roll_storage.Delegate.remove_amount ctxt delegate fees >>=? fun ctxt -> Roll_storage.Delegate.remove_amount ctxt delegate fees >>=? fun ctxt ->
(* Rewards are not in the delegate balnace yet... *) (* Rewards are not in the delegate balance yet... *)
Storage.Contract.Frozen_deposits.remove (ctxt, contract) cycle >>= fun ctxt -> Storage.Contract.Frozen_deposits.remove (ctxt, contract) cycle >>= fun ctxt ->
Storage.Contract.Frozen_fees.remove (ctxt, contract) cycle >>= fun ctxt -> Storage.Contract.Frozen_fees.remove (ctxt, contract) cycle >>= fun ctxt ->
Storage.Contract.Frozen_rewards.remove (ctxt, contract) cycle >>= fun ctxt -> Storage.Contract.Frozen_rewards.remove (ctxt, contract) cycle >>= fun ctxt ->

View File

@ -94,7 +94,7 @@ val cycle_end:
Raw_context.t tzresult Lwt.t Raw_context.t tzresult Lwt.t
(** Burn all then frozen deposit/fees/rewards for a delegate at a given (** Burn all then frozen deposit/fees/rewards for a delegate at a given
cycle. Returns the burned amount. *) cycle. Returns the burned amounts. *)
val punish: val punish:
Raw_context.t -> Signature.Public_key_hash.t -> Cycle_repr.t -> Raw_context.t -> Signature.Public_key_hash.t -> Cycle_repr.t ->
(Raw_context.t * frozen_balance) tzresult Lwt.t (Raw_context.t * frozen_balance) tzresult Lwt.t

View File

@ -158,24 +158,17 @@ let apply_operation
| _ -> | _ ->
let { shell ; protocol_data = Operation_data protocol_data } = operation in let { shell ; protocol_data = Operation_data protocol_data } = operation in
let operation : _ Alpha_context.operation = { shell ; protocol_data } in let operation : _ Alpha_context.operation = { shell ; protocol_data } in
let predecessor = let predecessor, baker =
match mode with match mode with
| Partial_application | Partial_application
{ block_header = { shell = { predecessor ; _ } ; _ } ; _ } { block_header = { shell = { predecessor ; _ } ; _ } ; baker }
| Application | Application
{ block_header = { shell = { predecessor ; _ } ; _ } ; _ } { block_header = { shell = { predecessor ; _ } ; _ } ; baker }
| Full_construction { predecessor ; _ } -> | Full_construction { predecessor ; baker ; _ }
predecessor -> predecessor, baker
| Partial_construction { predecessor } -> | Partial_construction { predecessor }
predecessor in -> predecessor, Signature.Public_key_hash.zero
let baker = in
match mode with
| Partial_application { baker ; _ }
| Application { baker ; _ }
| Full_construction { baker ; _ } ->
baker
| Partial_construction _ ->
Signature.Public_key_hash.zero in
Apply.apply_operation ctxt Optimized predecessor baker Apply.apply_operation ctxt Optimized predecessor baker
(Alpha_context.Operation.hash operation) (Alpha_context.Operation.hash operation)
operation >>=? fun (ctxt, result) -> operation >>=? fun (ctxt, result) ->