Alpha: update operation receipt for endorser
This commit is contained in:
parent
04c66869c9
commit
aa1450d8e6
@ -313,13 +313,15 @@ let rec pp_contents_and_result_list :
|
||||
pp_balance_updates bus
|
||||
| Single_and_result
|
||||
(Endorsement { level },
|
||||
Endorsement_result (delegate, slots)) ->
|
||||
Endorsement_result { balance_updates ; delegate ; slots }) ->
|
||||
Format.fprintf ppf
|
||||
"@[<v 2>Endorsement:@,\
|
||||
Level: %a@,\
|
||||
Balance updates:%a@,\
|
||||
Delegate: %a@,\
|
||||
Slots: %a@]"
|
||||
Raw_level.pp level
|
||||
pp_balance_updates balance_updates
|
||||
Signature.Public_key_hash.pp delegate
|
||||
(Format.pp_print_list
|
||||
~pp_sep:Format.pp_print_space
|
||||
|
@ -322,17 +322,6 @@ let () =
|
||||
|
||||
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 :
|
||||
type kind.
|
||||
( 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
|
||||
{ balance_updates =
|
||||
cleanup_balance_updates
|
||||
[
|
||||
Contract source, Debited fee ;
|
||||
Rewards (baker, level.cycle), Credited fee
|
||||
] ;
|
||||
[ Contract source, Debited fee ;
|
||||
Rewards (baker, level.cycle), Credited fee ] ;
|
||||
operation_result ;
|
||||
internal_operation_results })
|
||||
|
||||
@ -582,7 +569,8 @@ let rec precheck_manager_contents_list
|
||||
|
||||
let rec apply_manager_contents_list
|
||||
: 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 =
|
||||
fun ctxt mode baker contents_list ->
|
||||
match contents_list with
|
||||
@ -651,7 +639,14 @@ let apply_contents_list
|
||||
Global.get_last_block_priority ctxt >>=? fun block_priority ->
|
||||
Baking.endorsement_reward ctxt ~block_priority gap >>=? fun reward ->
|
||||
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 }) ->
|
||||
let level = Level.from_raw ctxt level in
|
||||
Nonce.reveal ctxt level nonce >>=? fun ctxt ->
|
||||
@ -660,9 +655,8 @@ let apply_contents_list
|
||||
add_rewards ctxt seed_nonce_revelation_tip >>=? fun ctxt ->
|
||||
return (ctxt, Single_result
|
||||
(Seed_nonce_revelation_result
|
||||
[
|
||||
Rewards (baker, level.cycle), Credited seed_nonce_revelation_tip
|
||||
]))
|
||||
[ Rewards (baker, level.cycle),
|
||||
Credited seed_nonce_revelation_tip ]))
|
||||
| Single (Double_endorsement_evidence { op1 ; op2 }) -> begin
|
||||
match op1.protocol_data.contents, op2.protocol_data.contents with
|
||||
| Single (Endorsement e1),
|
||||
@ -694,15 +688,12 @@ let apply_contents_list
|
||||
| Ok v -> v
|
||||
| Error _ -> Tez.zero in
|
||||
add_rewards ctxt reward >>=? fun ctxt ->
|
||||
return
|
||||
(ctxt,
|
||||
Single_result
|
||||
return (ctxt, Single_result
|
||||
(Double_endorsement_evidence_result [
|
||||
Rewards (baker, level.cycle), Credited reward;
|
||||
Rewards (delegate1, level.cycle), Debited balance.rewards;
|
||||
Deposits (delegate1, level.cycle), Debited balance.deposit;
|
||||
Fees (delegate1, level.cycle), Debited balance.fees
|
||||
]))
|
||||
Fees (delegate1, level.cycle), Debited balance.fees ]))
|
||||
| _, _ -> fail Invalid_double_endorsement_evidence
|
||||
end
|
||||
| Single (Double_baking_evidence { bh1 ; bh2 }) ->
|
||||
@ -749,15 +740,12 @@ let apply_contents_list
|
||||
| Ok v -> v
|
||||
| Error _ -> Tez.zero in
|
||||
add_rewards ctxt reward >>=? fun ctxt ->
|
||||
return
|
||||
(ctxt,
|
||||
Single_result
|
||||
return (ctxt, Single_result
|
||||
(Double_baking_evidence_result [
|
||||
Rewards (baker, level.cycle), Credited reward ;
|
||||
Rewards (delegate, level.cycle), Debited balance.rewards ;
|
||||
Deposits (delegate, level.cycle), Debited balance.deposit ;
|
||||
Fees (delegate, level.cycle), Debited balance.fees ;
|
||||
]))
|
||||
Fees (delegate, level.cycle), Debited balance.fees ; ]))
|
||||
| Single (Activate_account { id = pkh ; activation_code }) -> begin
|
||||
let blinded_pkh =
|
||||
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 ->
|
||||
let contract = Contract.implicit_contract (Signature.Ed25519 pkh) in
|
||||
Contract.(credit ctxt contract amount) >>=? fun ctxt ->
|
||||
return (ctxt, Single_result (
|
||||
Activate_account_result
|
||||
[
|
||||
Contract contract, Credited amount
|
||||
]))
|
||||
return (ctxt, Single_result (Activate_account_result
|
||||
[ Contract contract, Credited amount ]))
|
||||
end
|
||||
| Single (Proposals { source ; period ; proposals }) ->
|
||||
Roll.delegate_pubkey ctxt source >>=? fun delegate ->
|
||||
|
@ -339,7 +339,10 @@ let internal_operation_result_encoding :
|
||||
|
||||
type 'kind contents_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 :
|
||||
balance_updates -> Kind.seed_nonce_revelation contents_result
|
||||
| Double_endorsement_evidence_result :
|
||||
@ -402,7 +405,8 @@ module Encoding = struct
|
||||
Case {
|
||||
op_case = Operation.Encoding.endorsement_case ;
|
||||
encoding =
|
||||
(obj2
|
||||
(obj3
|
||||
(req "balance_updates" balance_updates_encoding)
|
||||
(req "delegate" Signature.Public_key_hash.encoding)
|
||||
(req "slots" (list uint8)));
|
||||
select =
|
||||
@ -415,9 +419,11 @@ module Encoding = struct
|
||||
| _ -> None) ;
|
||||
proj =
|
||||
(function
|
||||
| Endorsement_result (d, s) -> (d, s)) ;
|
||||
| Endorsement_result { balance_updates ; delegate ; slots }
|
||||
-> (balance_updates, delegate, slots)) ;
|
||||
inj =
|
||||
(fun (d, s) -> Endorsement_result (d, s))
|
||||
(fun (balance_updates, delegate, slots) ->
|
||||
Endorsement_result { balance_updates ; delegate ; slots })
|
||||
}
|
||||
|
||||
let seed_nonce_revelation_case =
|
||||
|
@ -54,7 +54,10 @@ and packed_contents_result_list =
|
||||
(** Result of applying an {!Operation.contents}. Follows the same structure. *)
|
||||
and 'kind contents_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 :
|
||||
balance_updates -> Kind.seed_nonce_revelation contents_result
|
||||
| Double_endorsement_evidence_result :
|
||||
|
@ -376,7 +376,7 @@ let punish ctxt delegate cycle =
|
||||
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 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_fees.remove (ctxt, contract) cycle >>= fun ctxt ->
|
||||
Storage.Contract.Frozen_rewards.remove (ctxt, contract) cycle >>= fun ctxt ->
|
||||
|
@ -94,7 +94,7 @@ val cycle_end:
|
||||
Raw_context.t tzresult Lwt.t
|
||||
|
||||
(** 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:
|
||||
Raw_context.t -> Signature.Public_key_hash.t -> Cycle_repr.t ->
|
||||
(Raw_context.t * frozen_balance) tzresult Lwt.t
|
||||
|
@ -158,24 +158,17 @@ let apply_operation
|
||||
| _ ->
|
||||
let { shell ; protocol_data = Operation_data protocol_data } = operation in
|
||||
let operation : _ Alpha_context.operation = { shell ; protocol_data } in
|
||||
let predecessor =
|
||||
let predecessor, baker =
|
||||
match mode with
|
||||
| Partial_application
|
||||
{ block_header = { shell = { predecessor ; _ } ; _ } ; _ }
|
||||
{ block_header = { shell = { predecessor ; _ } ; _ } ; baker }
|
||||
| Application
|
||||
{ block_header = { shell = { predecessor ; _ } ; _ } ; _ }
|
||||
| Full_construction { predecessor ; _ } ->
|
||||
predecessor
|
||||
| Partial_construction { predecessor } ->
|
||||
predecessor in
|
||||
let baker =
|
||||
match mode with
|
||||
| Partial_application { baker ; _ }
|
||||
| Application { baker ; _ }
|
||||
| Full_construction { baker ; _ } ->
|
||||
baker
|
||||
| Partial_construction _ ->
|
||||
Signature.Public_key_hash.zero in
|
||||
{ block_header = { shell = { predecessor ; _ } ; _ } ; baker }
|
||||
| Full_construction { predecessor ; baker ; _ }
|
||||
-> predecessor, baker
|
||||
| Partial_construction { predecessor }
|
||||
-> predecessor, Signature.Public_key_hash.zero
|
||||
in
|
||||
Apply.apply_operation ctxt Optimized predecessor baker
|
||||
(Alpha_context.Operation.hash operation)
|
||||
operation >>=? fun (ctxt, result) ->
|
||||
|
Loading…
Reference in New Issue
Block a user