From 25160335291d9bd2f90a63e448c47906cd587fb9 Mon Sep 17 00:00:00 2001 From: Eugen Zalinescu Date: Thu, 3 Apr 2025 15:10:06 +0200 Subject: [PATCH 1/4] Proto: add RPC to get the total baking power --- src/proto_alpha/lib_plugin/RPC.ml | 13 ++++++++++++- src/proto_alpha/lib_protocol/alpha_context.mli | 2 ++ src/proto_alpha/lib_protocol/delegate_sampler.ml | 5 +++++ src/proto_alpha/lib_protocol/delegate_sampler.mli | 2 ++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/proto_alpha/lib_plugin/RPC.ml b/src/proto_alpha/lib_plugin/RPC.ml index a7322084585a..3a46a5d55e4e 100644 --- a/src/proto_alpha/lib_plugin/RPC.ml +++ b/src/proto_alpha/lib_plugin/RPC.ml @@ -4118,6 +4118,13 @@ module S = struct ~query:RPC_query.empty ~output:int32 RPC_path.(path / "consecutive_round_zero") + + let total_baking_power = + RPC_service.get_service + ~description:"Returns the total baking power for the current cycle" + ~query:RPC_query.empty + ~output:Data_encoding.int64 + RPC_path.(path / "total_baking_power") end type Environment.Error_monad.error += Negative_level_offset @@ -4175,7 +4182,11 @@ let register () = Registration.register0 ~chunked:false S.consecutive_round_zero - (fun ctxt () () -> Consecutive_round_zero.get ctxt) + (fun ctxt () () -> Consecutive_round_zero.get ctxt) ; + Registration.register0 ~chunked:false S.total_baking_power (fun ctxt () () -> + Stake_distribution.For_RPC.total_baking_power + ctxt + (Level.current ctxt).cycle) let current_level ctxt ?(offset = 0l) block = RPC_context.make_call0 S.current_level ctxt block {offset} () diff --git a/src/proto_alpha/lib_protocol/alpha_context.mli b/src/proto_alpha/lib_protocol/alpha_context.mli index 23c066b2adff..cc9d5f7e476a 100644 --- a/src/proto_alpha/lib_protocol/alpha_context.mli +++ b/src/proto_alpha/lib_protocol/alpha_context.mli @@ -5159,6 +5159,8 @@ module Stake_distribution : sig module For_RPC : sig val delegate_current_baking_power : context -> Signature.public_key_hash -> int64 tzresult Lwt.t + + val total_baking_power : context -> Cycle.t -> int64 tzresult Lwt.t end module Internal_for_tests : sig diff --git a/src/proto_alpha/lib_protocol/delegate_sampler.ml b/src/proto_alpha/lib_protocol/delegate_sampler.ml index c1bbd6fe150b..32e4fa07c4eb 100644 --- a/src/proto_alpha/lib_protocol/delegate_sampler.ml +++ b/src/proto_alpha/lib_protocol/delegate_sampler.ml @@ -271,4 +271,9 @@ module For_RPC = struct Delegate_staking_parameters.of_delegate ctxt delegate in Lwt.return @@ Stake_context.baking_weight ctxt staking_parameters stake + + let total_baking_power ctxt cycle = + let open Lwt_result_syntax in + let+ total_active_stake = Stake_storage.get_total_active_stake ctxt cycle in + Stake_repr.staking_weight total_active_stake end diff --git a/src/proto_alpha/lib_protocol/delegate_sampler.mli b/src/proto_alpha/lib_protocol/delegate_sampler.mli index e69a05b55769..1afecee5c0eb 100644 --- a/src/proto_alpha/lib_protocol/delegate_sampler.mli +++ b/src/proto_alpha/lib_protocol/delegate_sampler.mli @@ -87,4 +87,6 @@ module For_RPC : sig stake. *) val delegate_current_baking_power : Raw_context.t -> Signature.public_key_hash -> int64 tzresult Lwt.t + + val total_baking_power : Raw_context.t -> Cycle_repr.t -> int64 tzresult Lwt.t end -- GitLab From 3aefc931927c51f6cf9e4677410b9bdd71990b78 Mon Sep 17 00:00:00 2001 From: Eugen Zalinescu Date: Wed, 9 Apr 2025 20:43:32 +0200 Subject: [PATCH 2/4] Tezt/Tezos: support helpers/total_baking_power RPC --- tezt/lib_tezos/RPC.ml | 7 +++++++ tezt/lib_tezos/RPC.mli | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/tezt/lib_tezos/RPC.ml b/tezt/lib_tezos/RPC.ml index e41353c59a95..c467331107b9 100644 --- a/tezt/lib_tezos/RPC.ml +++ b/tezt/lib_tezos/RPC.ml @@ -889,6 +889,13 @@ let get_chain_block_helper_levels_in_current_cycle ?(chain = "main") ["chains"; chain; "blocks"; block; "helpers"; "levels_in_current_cycle"] Fun.id +let get_chain_block_helper_total_baking_power ?(chain = "main") + ?(block = "head") () = + make + GET + ["chains"; chain; "blocks"; block; "helpers"; "total_baking_power"] + Fun.id + let post_bls_aggregate_signatures sigs = let data = `A (List.map (fun sig_ -> `String sig_) sigs) in make ~data:(Data data) POST ["bls"; "aggregate_signatures"] JSON.as_string diff --git a/tezt/lib_tezos/RPC.mli b/tezt/lib_tezos/RPC.mli index 868776128560..5327c954b6a0 100644 --- a/tezt/lib_tezos/RPC.mli +++ b/tezt/lib_tezos/RPC.mli @@ -804,6 +804,13 @@ val get_chain_block_helper_validators : val get_chain_block_helper_levels_in_current_cycle : ?chain:string -> ?block:string -> unit -> JSON.t t +(** RPC: [GET /chains//blocks//helpers/total_baking_power] + + [chain] defaults to ["main"]. + [block] defaults to ["head"]. *) +val get_chain_block_helper_total_baking_power : + ?chain:string -> ?block:string -> unit -> JSON.t t + (** RPC: [POST /bls/aggregate_signatures] *) val post_bls_aggregate_signatures : string list -> string t -- GitLab From 0f28405ab81a06591074e4ab64d300c5968b9f82 Mon Sep 17 00:00:00 2001 From: Eugen Zalinescu Date: Wed, 9 Apr 2025 20:44:04 +0200 Subject: [PATCH 3/4] Tezt/Tests: add regression test for helpers/total_baking_power RPC --- tezt/tests/RPC_test.ml | 11 ++++++++++- ...de client) RPC regression tests- misc_protocol.out | 3 +++ ...ode light) RPC regression tests- misc_protocol.out | 3 +++ ...ode proxy) RPC regression tests- misc_protocol.out | 3 +++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/tezt/tests/RPC_test.ml b/tezt/tests/RPC_test.ml index 1bbc6abd2dd1..320a41d920da 100644 --- a/tezt/tests/RPC_test.ml +++ b/tezt/tests/RPC_test.ml @@ -697,7 +697,7 @@ let test_votes _test_mode_tag _protocol ?endpoint client = unit (* Test the various other RPCs. *) -let test_misc_protocol _test_mode_tag _protocol ?endpoint client = +let test_misc_protocol _test_mode_tag protocol ?endpoint client = let* _ = Client.RPC.call ?endpoint ~hooks client @@ RPC.get_chain_block_context_constants () @@ -737,6 +737,15 @@ let test_misc_protocol _test_mode_tag _protocol ?endpoint client = Client.RPC.call ?endpoint ~hooks client @@ RPC.get_chain_block_helper_levels_in_current_cycle () in + let* () = + if Protocol.(number protocol >= 023) then + let* _ = + Client.RPC.call ?endpoint ~hooks client + @@ RPC.get_chain_block_helper_total_baking_power () + in + unit + else unit + in unit let mempool_hooks = diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out index ed0d9f193cf1..2ce8eb239bde 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode client) RPC regression tests- misc_protocol.out @@ -142,3 +142,6 @@ ./octez-client rpc get /chains/main/blocks/head/helpers/levels_in_current_cycle { "first": 1, "last": 8 } + +./octez-client rpc get /chains/main/blocks/head/helpers/total_baking_power +"20000000000000" diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out index 157e7a80f45f..8fbf7b8219ed 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode light) RPC regression tests- misc_protocol.out @@ -142,3 +142,6 @@ ./octez-client --mode light rpc get /chains/main/blocks/head/helpers/levels_in_current_cycle { "first": 1, "last": 8 } + +./octez-client --mode light rpc get /chains/main/blocks/head/helpers/total_baking_power +"20000000000000" diff --git a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out index e86b498a64d8..6f309d10e18c 100644 --- a/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out +++ b/tezt/tests/expected/RPC_test.ml/Alpha- (mode proxy) RPC regression tests- misc_protocol.out @@ -142,3 +142,6 @@ ./octez-client --mode proxy rpc get /chains/main/blocks/head/helpers/levels_in_current_cycle { "first": 1, "last": 8 } + +./octez-client --mode proxy rpc get /chains/main/blocks/head/helpers/total_baking_power +"20000000000000" -- GitLab From 5e4e14ccd28a00a8126efce1c1d3d37374497f91 Mon Sep 17 00:00:00 2001 From: Eugen Zalinescu Date: Thu, 10 Apr 2025 05:34:23 +0200 Subject: [PATCH 4/4] CHANGES: add entry --- CHANGES.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGES.rst b/CHANGES.rst index 02ad0ee57954..2523d32a16cf 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -234,6 +234,10 @@ DAL node Protocol ~~~~~~~~ +- Add a new RPC ``GET + /chains//blocks//helpers/total_baking_power`` to retrieve the + total baking power for the current cycle. (MR :gl:`!17553`) + Miscellaneous ------------- -- GitLab