From 94186aec55cd31dfbf7baa837bfa4a7a8cdc93d0 Mon Sep 17 00:00:00 2001 From: Diane Gallois-Wong Date: Thu, 18 Jul 2024 13:25:52 +0200 Subject: [PATCH 1/8] Plugin: rename RPC total_delegated_stake to external_staked --- .../lib_plugin/delegate_services.ml | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/proto_alpha/lib_plugin/delegate_services.ml b/src/proto_alpha/lib_plugin/delegate_services.ml index b974ca126bf0..f19a203a5f4a 100644 --- a/src/proto_alpha/lib_plugin/delegate_services.ml +++ b/src/proto_alpha/lib_plugin/delegate_services.ml @@ -216,6 +216,16 @@ module S = struct ~query:RPC_query.empty ~output:Tez.encoding RPC_path.(path / "staking_balance") + + let total_delegated_stake = + RPC_service.get_service + ~description: + "Returns the sum (in mutez) of all tokens staked by the delegators \ + of a given delegate. This excludes the delegate's own staked \ + tokens." + ~query:RPC_query.empty + ~output:Tez.encoding + RPC_path.(path / "total_delegated_stake") end let total_staked = @@ -281,14 +291,14 @@ module S = struct ~output:(list Contract.encoding) RPC_path.(path / "delegated_contracts") - let total_delegated_stake = + let external_staked = RPC_service.get_service ~description: - "Returns the sum (in mutez) of all tokens staked by the delegators of \ - a given delegate. This excludes the delegate's own staked tokens." + "The sum (in mutez) of all tokens currently staked by the baker's \ + external delegators. This excludes the baker's own staked tokens." ~query:RPC_query.empty ~output:Tez.encoding - RPC_path.(path / "total_delegated_stake") + RPC_path.(path / "external_staked") let staking_denominator = RPC_service.get_service @@ -450,6 +460,14 @@ let f_total_delegated ctxt pkh () () = let* () = check_delegate_registered ctxt pkh in total_delegated ctxt pkh +let external_staked ctxt pkh = + Staking_pseudotokens.For_RPC.get_frozen_deposits_staked_tez ctxt ~delegate:pkh + +let f_external_staked ctxt pkh () () = + let open Lwt_result_syntax in + let* () = check_delegate_registered ctxt pkh in + external_staked ctxt pkh + let register () = let open Lwt_result_syntax in register0 ~chunked:true S.list_delegate (fun ctxt q () -> @@ -529,11 +547,8 @@ let register () = let* () = check_delegate_registered ctxt pkh in let*! contracts = Delegate.delegated_contracts ctxt pkh in return contracts) ; - register1 ~chunked:false S.total_delegated_stake (fun ctxt pkh () () -> - let* () = check_delegate_registered ctxt pkh in - Staking_pseudotokens.For_RPC.get_frozen_deposits_staked_tez - ctxt - ~delegate:pkh) ; + register1 ~chunked:false S.Deprecated.total_delegated_stake f_external_staked ; + register1 ~chunked:false S.external_staked f_external_staked ; register1 ~chunked:false S.staking_denominator (fun ctxt pkh () () -> let* () = check_delegate_registered ctxt pkh in Staking_pseudotokens.For_RPC.get_frozen_deposits_pseudotokens @@ -620,7 +635,7 @@ let delegated_contracts ctxt block pkh = RPC_context.make_call1 S.delegated_contracts ctxt block pkh () () let total_delegated_stake ctxt block pkh = - RPC_context.make_call1 S.total_delegated_stake ctxt block pkh () () + RPC_context.make_call1 S.external_staked ctxt block pkh () () let staking_denominator ctxt block pkh = RPC_context.make_call1 S.staking_denominator ctxt block pkh () () -- GitLab From 559ff9a854e28c50e03969648189a3e9d37edf59 Mon Sep 17 00:00:00 2001 From: Julien Tesson Date: Thu, 18 Jul 2024 20:07:44 +0200 Subject: [PATCH 2/8] Beta/Plugin: rename RPC total_delegated_stake to external_staked Porting to proto beta f076d0e7559e70857ede6481cfb0b060b557da4d - Plugin: rename RPC total_delegated_stake to external_staked --- .../lib_plugin/delegate_services.ml | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/proto_beta/lib_plugin/delegate_services.ml b/src/proto_beta/lib_plugin/delegate_services.ml index b974ca126bf0..f19a203a5f4a 100644 --- a/src/proto_beta/lib_plugin/delegate_services.ml +++ b/src/proto_beta/lib_plugin/delegate_services.ml @@ -216,6 +216,16 @@ module S = struct ~query:RPC_query.empty ~output:Tez.encoding RPC_path.(path / "staking_balance") + + let total_delegated_stake = + RPC_service.get_service + ~description: + "Returns the sum (in mutez) of all tokens staked by the delegators \ + of a given delegate. This excludes the delegate's own staked \ + tokens." + ~query:RPC_query.empty + ~output:Tez.encoding + RPC_path.(path / "total_delegated_stake") end let total_staked = @@ -281,14 +291,14 @@ module S = struct ~output:(list Contract.encoding) RPC_path.(path / "delegated_contracts") - let total_delegated_stake = + let external_staked = RPC_service.get_service ~description: - "Returns the sum (in mutez) of all tokens staked by the delegators of \ - a given delegate. This excludes the delegate's own staked tokens." + "The sum (in mutez) of all tokens currently staked by the baker's \ + external delegators. This excludes the baker's own staked tokens." ~query:RPC_query.empty ~output:Tez.encoding - RPC_path.(path / "total_delegated_stake") + RPC_path.(path / "external_staked") let staking_denominator = RPC_service.get_service @@ -450,6 +460,14 @@ let f_total_delegated ctxt pkh () () = let* () = check_delegate_registered ctxt pkh in total_delegated ctxt pkh +let external_staked ctxt pkh = + Staking_pseudotokens.For_RPC.get_frozen_deposits_staked_tez ctxt ~delegate:pkh + +let f_external_staked ctxt pkh () () = + let open Lwt_result_syntax in + let* () = check_delegate_registered ctxt pkh in + external_staked ctxt pkh + let register () = let open Lwt_result_syntax in register0 ~chunked:true S.list_delegate (fun ctxt q () -> @@ -529,11 +547,8 @@ let register () = let* () = check_delegate_registered ctxt pkh in let*! contracts = Delegate.delegated_contracts ctxt pkh in return contracts) ; - register1 ~chunked:false S.total_delegated_stake (fun ctxt pkh () () -> - let* () = check_delegate_registered ctxt pkh in - Staking_pseudotokens.For_RPC.get_frozen_deposits_staked_tez - ctxt - ~delegate:pkh) ; + register1 ~chunked:false S.Deprecated.total_delegated_stake f_external_staked ; + register1 ~chunked:false S.external_staked f_external_staked ; register1 ~chunked:false S.staking_denominator (fun ctxt pkh () () -> let* () = check_delegate_registered ctxt pkh in Staking_pseudotokens.For_RPC.get_frozen_deposits_pseudotokens @@ -620,7 +635,7 @@ let delegated_contracts ctxt block pkh = RPC_context.make_call1 S.delegated_contracts ctxt block pkh () () let total_delegated_stake ctxt block pkh = - RPC_context.make_call1 S.total_delegated_stake ctxt block pkh () () + RPC_context.make_call1 S.external_staked ctxt block pkh () () let staking_denominator ctxt block pkh = RPC_context.make_call1 S.staking_denominator ctxt block pkh () () -- GitLab From 59f255c1a8d1ae95cca48ec60bd4d43db4f097e9 Mon Sep 17 00:00:00 2001 From: Diane Gallois-Wong Date: Thu, 18 Jul 2024 14:21:48 +0200 Subject: [PATCH 3/8] Plugin: move delegated_balance implem and rename it --- src/proto_alpha/lib_plugin/RPC.ml | 55 ++----------------- .../lib_plugin/delegate_services.ml | 48 ++++++++++++++++ .../lib_plugin/delegate_services.mli | 7 +++ 3 files changed, 59 insertions(+), 51 deletions(-) diff --git a/src/proto_alpha/lib_plugin/RPC.ml b/src/proto_alpha/lib_plugin/RPC.ml index fd5c43f8fdb4..4cb564a49d2a 100644 --- a/src/proto_alpha/lib_plugin/RPC.ml +++ b/src/proto_alpha/lib_plugin/RPC.ml @@ -4122,55 +4122,6 @@ module Delegates = struct RPC_path.(path / "min_delegated_in_current_cycle") end - let unstake_requests ctxt pkh = - let open Lwt_result_syntax in - let* result = Unstake_requests.prepare_finalize_unstake ctxt pkh in - match result with - | None -> return_none - | Some {finalizable; unfinalizable} -> - let* unfinalizable = - Unstake_requests.For_RPC - .apply_slash_to_unstaked_unfinalizable_stored_requests - ctxt - unfinalizable - in - return_some Unstake_requests.{finalizable; unfinalizable} - - let delegated_balance ctxt pkh = - let open Lwt_result_syntax in - let* full_balance = Delegate.For_RPC.full_balance ctxt pkh in - let* unstake_requests = unstake_requests ctxt (Implicit pkh) in - let* unstake_requests_to_other_delegates = - match unstake_requests with - | None -> return Tez.zero - | Some {finalizable; unfinalizable} -> - let* finalizable_sum = - List.fold_left_es - (fun acc (delegate, _, (amount : Tez.t)) -> - if Signature.Public_key_hash.(delegate <> pkh) then - Lwt.return Tez.(acc +? amount) - else return acc) - Tez.zero - finalizable - in - let* unfinalizable_sum = - if Signature.Public_key_hash.(unfinalizable.delegate <> pkh) then - List.fold_left_es - (fun acc (_, (amount : Tez.t)) -> - Lwt.return Tez.(acc +? amount)) - Tez.zero - unfinalizable.requests - else return Tez.zero - in - Lwt.return Tez.(finalizable_sum +? unfinalizable_sum) - in - let* staking_balance = Delegate.For_RPC.staking_balance ctxt pkh in - let*? self_staking_balance = - Tez.(full_balance -? unstake_requests_to_other_delegates) - in - let*? sum = Tez.(staking_balance -? self_staking_balance) in - return sum - let info ctxt pkh = let open Lwt_result_syntax in let* () = check_delegate_registered ctxt pkh in @@ -4180,7 +4131,9 @@ module Delegates = struct let* staking_balance = Delegate.For_RPC.staking_balance ctxt pkh in let* frozen_deposits_limit = Delegate.frozen_deposits_limit ctxt pkh in let*! delegated_contracts = Delegate.delegated_contracts ctxt pkh in - let* delegated_balance = delegated_balance ctxt pkh in + let* delegated_balance = + Delegate_services.external_staked_and_delegated ctxt pkh + in let* min_delegated_in_current_cycle = Delegate.For_RPC.min_delegated_in_current_cycle ctxt pkh in @@ -4233,7 +4186,7 @@ module Delegates = struct S.delegated_balance (fun ctxt pkh () () -> let* () = check_delegate_registered ctxt pkh in - delegated_balance ctxt pkh) ; + Delegate_services.external_staked_and_delegated ctxt pkh) ; Registration.register1 ~chunked:false S.min_delegated_in_current_cycle diff --git a/src/proto_alpha/lib_plugin/delegate_services.ml b/src/proto_alpha/lib_plugin/delegate_services.ml index f19a203a5f4a..6678e6176b0d 100644 --- a/src/proto_alpha/lib_plugin/delegate_services.ml +++ b/src/proto_alpha/lib_plugin/delegate_services.ml @@ -468,6 +468,54 @@ let f_external_staked ctxt pkh () () = let* () = check_delegate_registered ctxt pkh in external_staked ctxt pkh +let unstake_requests ctxt pkh = + let open Lwt_result_syntax in + let* result = Unstake_requests.prepare_finalize_unstake ctxt pkh in + match result with + | None -> return_none + | Some {finalizable; unfinalizable} -> + let* unfinalizable = + Unstake_requests.For_RPC + .apply_slash_to_unstaked_unfinalizable_stored_requests + ctxt + unfinalizable + in + return_some Unstake_requests.{finalizable; unfinalizable} + +let external_staked_and_delegated ctxt pkh = + let open Lwt_result_syntax in + let* full_balance = Delegate.For_RPC.full_balance ctxt pkh in + let* unstake_requests = unstake_requests ctxt (Implicit pkh) in + let* unstake_requests_to_other_delegates = + match unstake_requests with + | None -> return Tez.zero + | Some {finalizable; unfinalizable} -> + let* finalizable_sum = + List.fold_left_es + (fun acc (delegate, _, (amount : Tez.t)) -> + if Signature.Public_key_hash.(delegate <> pkh) then + Lwt.return Tez.(acc +? amount) + else return acc) + Tez.zero + finalizable + in + let* unfinalizable_sum = + if Signature.Public_key_hash.(unfinalizable.delegate <> pkh) then + List.fold_left_es + (fun acc (_, (amount : Tez.t)) -> Lwt.return Tez.(acc +? amount)) + Tez.zero + unfinalizable.requests + else return Tez.zero + in + Lwt.return Tez.(finalizable_sum +? unfinalizable_sum) + in + let* staking_balance = Delegate.For_RPC.staking_balance ctxt pkh in + let*? self_staking_balance = + Tez.(full_balance -? unstake_requests_to_other_delegates) + in + let*? sum = Tez.(staking_balance -? self_staking_balance) in + return sum + let register () = let open Lwt_result_syntax in register0 ~chunked:true S.list_delegate (fun ctxt q () -> diff --git a/src/proto_alpha/lib_plugin/delegate_services.mli b/src/proto_alpha/lib_plugin/delegate_services.mli index 08b9b39054a6..dbd102e32076 100644 --- a/src/proto_alpha/lib_plugin/delegate_services.mli +++ b/src/proto_alpha/lib_plugin/delegate_services.mli @@ -172,3 +172,10 @@ val estimated_shared_pending_slashed_amount : 'a #RPC_context.simple -> 'a -> public_key_hash -> Tez.t shell_tzresult Lwt.t val register : unit -> unit + +(** For RPC.ml *) + +(* TODO: https://gitlab.com/tezos/tezos/-/issues/7369 *) + +val external_staked_and_delegated : + t -> public_key_hash -> Tez.t Environment.Error_monad.tzresult Lwt.t -- GitLab From ae9ca941be9161bc7371328303e75946dc72d350 Mon Sep 17 00:00:00 2001 From: Julien Tesson Date: Thu, 18 Jul 2024 20:07:50 +0200 Subject: [PATCH 4/8] Beta/Plugin: move delegated_balance implem and rename it Porting to proto beta 9e4a33bc8899354c76b41efb50c0942cbd9980a1 - Plugin: move delegated_balance implem and rename it --- src/proto_beta/lib_plugin/RPC.ml | 55 ++----------------- .../lib_plugin/delegate_services.ml | 48 ++++++++++++++++ .../lib_plugin/delegate_services.mli | 7 +++ 3 files changed, 59 insertions(+), 51 deletions(-) diff --git a/src/proto_beta/lib_plugin/RPC.ml b/src/proto_beta/lib_plugin/RPC.ml index fd5c43f8fdb4..4cb564a49d2a 100644 --- a/src/proto_beta/lib_plugin/RPC.ml +++ b/src/proto_beta/lib_plugin/RPC.ml @@ -4122,55 +4122,6 @@ module Delegates = struct RPC_path.(path / "min_delegated_in_current_cycle") end - let unstake_requests ctxt pkh = - let open Lwt_result_syntax in - let* result = Unstake_requests.prepare_finalize_unstake ctxt pkh in - match result with - | None -> return_none - | Some {finalizable; unfinalizable} -> - let* unfinalizable = - Unstake_requests.For_RPC - .apply_slash_to_unstaked_unfinalizable_stored_requests - ctxt - unfinalizable - in - return_some Unstake_requests.{finalizable; unfinalizable} - - let delegated_balance ctxt pkh = - let open Lwt_result_syntax in - let* full_balance = Delegate.For_RPC.full_balance ctxt pkh in - let* unstake_requests = unstake_requests ctxt (Implicit pkh) in - let* unstake_requests_to_other_delegates = - match unstake_requests with - | None -> return Tez.zero - | Some {finalizable; unfinalizable} -> - let* finalizable_sum = - List.fold_left_es - (fun acc (delegate, _, (amount : Tez.t)) -> - if Signature.Public_key_hash.(delegate <> pkh) then - Lwt.return Tez.(acc +? amount) - else return acc) - Tez.zero - finalizable - in - let* unfinalizable_sum = - if Signature.Public_key_hash.(unfinalizable.delegate <> pkh) then - List.fold_left_es - (fun acc (_, (amount : Tez.t)) -> - Lwt.return Tez.(acc +? amount)) - Tez.zero - unfinalizable.requests - else return Tez.zero - in - Lwt.return Tez.(finalizable_sum +? unfinalizable_sum) - in - let* staking_balance = Delegate.For_RPC.staking_balance ctxt pkh in - let*? self_staking_balance = - Tez.(full_balance -? unstake_requests_to_other_delegates) - in - let*? sum = Tez.(staking_balance -? self_staking_balance) in - return sum - let info ctxt pkh = let open Lwt_result_syntax in let* () = check_delegate_registered ctxt pkh in @@ -4180,7 +4131,9 @@ module Delegates = struct let* staking_balance = Delegate.For_RPC.staking_balance ctxt pkh in let* frozen_deposits_limit = Delegate.frozen_deposits_limit ctxt pkh in let*! delegated_contracts = Delegate.delegated_contracts ctxt pkh in - let* delegated_balance = delegated_balance ctxt pkh in + let* delegated_balance = + Delegate_services.external_staked_and_delegated ctxt pkh + in let* min_delegated_in_current_cycle = Delegate.For_RPC.min_delegated_in_current_cycle ctxt pkh in @@ -4233,7 +4186,7 @@ module Delegates = struct S.delegated_balance (fun ctxt pkh () () -> let* () = check_delegate_registered ctxt pkh in - delegated_balance ctxt pkh) ; + Delegate_services.external_staked_and_delegated ctxt pkh) ; Registration.register1 ~chunked:false S.min_delegated_in_current_cycle diff --git a/src/proto_beta/lib_plugin/delegate_services.ml b/src/proto_beta/lib_plugin/delegate_services.ml index f19a203a5f4a..6678e6176b0d 100644 --- a/src/proto_beta/lib_plugin/delegate_services.ml +++ b/src/proto_beta/lib_plugin/delegate_services.ml @@ -468,6 +468,54 @@ let f_external_staked ctxt pkh () () = let* () = check_delegate_registered ctxt pkh in external_staked ctxt pkh +let unstake_requests ctxt pkh = + let open Lwt_result_syntax in + let* result = Unstake_requests.prepare_finalize_unstake ctxt pkh in + match result with + | None -> return_none + | Some {finalizable; unfinalizable} -> + let* unfinalizable = + Unstake_requests.For_RPC + .apply_slash_to_unstaked_unfinalizable_stored_requests + ctxt + unfinalizable + in + return_some Unstake_requests.{finalizable; unfinalizable} + +let external_staked_and_delegated ctxt pkh = + let open Lwt_result_syntax in + let* full_balance = Delegate.For_RPC.full_balance ctxt pkh in + let* unstake_requests = unstake_requests ctxt (Implicit pkh) in + let* unstake_requests_to_other_delegates = + match unstake_requests with + | None -> return Tez.zero + | Some {finalizable; unfinalizable} -> + let* finalizable_sum = + List.fold_left_es + (fun acc (delegate, _, (amount : Tez.t)) -> + if Signature.Public_key_hash.(delegate <> pkh) then + Lwt.return Tez.(acc +? amount) + else return acc) + Tez.zero + finalizable + in + let* unfinalizable_sum = + if Signature.Public_key_hash.(unfinalizable.delegate <> pkh) then + List.fold_left_es + (fun acc (_, (amount : Tez.t)) -> Lwt.return Tez.(acc +? amount)) + Tez.zero + unfinalizable.requests + else return Tez.zero + in + Lwt.return Tez.(finalizable_sum +? unfinalizable_sum) + in + let* staking_balance = Delegate.For_RPC.staking_balance ctxt pkh in + let*? self_staking_balance = + Tez.(full_balance -? unstake_requests_to_other_delegates) + in + let*? sum = Tez.(staking_balance -? self_staking_balance) in + return sum + let register () = let open Lwt_result_syntax in register0 ~chunked:true S.list_delegate (fun ctxt q () -> diff --git a/src/proto_beta/lib_plugin/delegate_services.mli b/src/proto_beta/lib_plugin/delegate_services.mli index 08b9b39054a6..dbd102e32076 100644 --- a/src/proto_beta/lib_plugin/delegate_services.mli +++ b/src/proto_beta/lib_plugin/delegate_services.mli @@ -172,3 +172,10 @@ val estimated_shared_pending_slashed_amount : 'a #RPC_context.simple -> 'a -> public_key_hash -> Tez.t shell_tzresult Lwt.t val register : unit -> unit + +(** For RPC.ml *) + +(* TODO: https://gitlab.com/tezos/tezos/-/issues/7369 *) + +val external_staked_and_delegated : + t -> public_key_hash -> Tez.t Environment.Error_monad.tzresult Lwt.t -- GitLab From 4b8510f57bf79b3568404a8070be239fe9dcc82a Mon Sep 17 00:00:00 2001 From: Diane Gallois-Wong Date: Thu, 18 Jul 2024 14:51:22 +0200 Subject: [PATCH 5/8] Plugin: add new RPC external_delegated --- .../lib_plugin/delegate_services.ml | 59 +++++++++++++++---- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/src/proto_alpha/lib_plugin/delegate_services.ml b/src/proto_alpha/lib_plugin/delegate_services.ml index 6678e6176b0d..cf8eb2ad7099 100644 --- a/src/proto_alpha/lib_plugin/delegate_services.ml +++ b/src/proto_alpha/lib_plugin/delegate_services.ml @@ -300,6 +300,24 @@ module S = struct ~output:Tez.encoding RPC_path.(path / "external_staked") + let external_delegated = + RPC_service.get_service + ~description: + "The sum (in mutez) of non-staked tokens that currently count as \ + delegated to the baker, excluding those owned by the baker iself. \ + Does not take limits such as overstaking or overdelegation into \ + account. This includes the spendable balances and frozen bonds of all \ + the baker's external delegators. It also includes unstake requests of \ + contracts other than the baker, on the condition that the contract \ + was delegating to the baker at the time of the unstake operation. So \ + this includes most but not all unstake requests from current \ + delegators, and might include some unstake requests from old \ + delegators. Limits such as overstaking and overdelegation have not \ + been applied yet." + ~query:RPC_query.empty + ~output:Tez.encoding + RPC_path.(path / "external_delegated") + let staking_denominator = RPC_service.get_service ~description: @@ -470,11 +488,15 @@ let f_external_staked ctxt pkh () () = let unstake_requests ctxt pkh = let open Lwt_result_syntax in - let* result = Unstake_requests.prepare_finalize_unstake ctxt pkh in + let* result = + (* This function applies slashing to finalizable requests. *) + Unstake_requests.prepare_finalize_unstake ctxt pkh + in match result with | None -> return_none | Some {finalizable; unfinalizable} -> let* unfinalizable = + (* Apply slashing to unfinalizable requests too. *) Unstake_requests.For_RPC .apply_slash_to_unstaked_unfinalizable_stored_requests ctxt @@ -484,10 +506,10 @@ let unstake_requests ctxt pkh = let external_staked_and_delegated ctxt pkh = let open Lwt_result_syntax in - let* full_balance = Delegate.For_RPC.full_balance ctxt pkh in - let* unstake_requests = unstake_requests ctxt (Implicit pkh) in - let* unstake_requests_to_other_delegates = - match unstake_requests with + let* own_full_balance = Delegate.For_RPC.full_balance ctxt pkh in + let* own_unstake_requests = unstake_requests ctxt (Implicit pkh) in + let* own_unstaked_from_other_delegates = + match own_unstake_requests with | None -> return Tez.zero | Some {finalizable; unfinalizable} -> let* finalizable_sum = @@ -509,12 +531,28 @@ let external_staked_and_delegated ctxt pkh = in Lwt.return Tez.(finalizable_sum +? unfinalizable_sum) in - let* staking_balance = Delegate.For_RPC.staking_balance ctxt pkh in - let*? self_staking_balance = - Tez.(full_balance -? unstake_requests_to_other_delegates) + let* total_staked_and_delegated = total_staked_and_delegated ctxt pkh in + let*? own_staked_and_delegated = + Tez.(own_full_balance -? own_unstaked_from_other_delegates) + in + let*? external_staked_and_delegated = + Tez.(total_staked_and_delegated -? own_staked_and_delegated) + in + return external_staked_and_delegated + +let external_delegated ctxt pkh : Tez.t Environment.Error_monad.tzresult Lwt.t = + let open Lwt_result_syntax in + let* external_staked_and_delegated = external_staked_and_delegated ctxt pkh in + let* external_staked = external_staked ctxt pkh in + let*? external_delegated = + Tez.(external_staked_and_delegated -? external_staked) in - let*? sum = Tez.(staking_balance -? self_staking_balance) in - return sum + return external_delegated + +let f_external_delegated ctxt pkh () () = + let open Lwt_result_syntax in + let* () = check_delegate_registered ctxt pkh in + external_delegated ctxt pkh let register () = let open Lwt_result_syntax in @@ -597,6 +635,7 @@ let register () = return contracts) ; register1 ~chunked:false S.Deprecated.total_delegated_stake f_external_staked ; register1 ~chunked:false S.external_staked f_external_staked ; + register1 ~chunked:false S.external_delegated f_external_delegated ; register1 ~chunked:false S.staking_denominator (fun ctxt pkh () () -> let* () = check_delegate_registered ctxt pkh in Staking_pseudotokens.For_RPC.get_frozen_deposits_pseudotokens -- GitLab From ab7cc1cedaa400eb13ec1a42b4df58cfbfda2030 Mon Sep 17 00:00:00 2001 From: Julien Tesson Date: Thu, 18 Jul 2024 20:07:57 +0200 Subject: [PATCH 6/8] Beta/Plugin: add new RPC external_delegated Porting to proto beta 86b12ba4a65382e58c01555e693acad13846ef5a - Plugin: add new RPC external_delegated --- .../lib_plugin/delegate_services.ml | 59 +++++++++++++++---- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/src/proto_beta/lib_plugin/delegate_services.ml b/src/proto_beta/lib_plugin/delegate_services.ml index 6678e6176b0d..cf8eb2ad7099 100644 --- a/src/proto_beta/lib_plugin/delegate_services.ml +++ b/src/proto_beta/lib_plugin/delegate_services.ml @@ -300,6 +300,24 @@ module S = struct ~output:Tez.encoding RPC_path.(path / "external_staked") + let external_delegated = + RPC_service.get_service + ~description: + "The sum (in mutez) of non-staked tokens that currently count as \ + delegated to the baker, excluding those owned by the baker iself. \ + Does not take limits such as overstaking or overdelegation into \ + account. This includes the spendable balances and frozen bonds of all \ + the baker's external delegators. It also includes unstake requests of \ + contracts other than the baker, on the condition that the contract \ + was delegating to the baker at the time of the unstake operation. So \ + this includes most but not all unstake requests from current \ + delegators, and might include some unstake requests from old \ + delegators. Limits such as overstaking and overdelegation have not \ + been applied yet." + ~query:RPC_query.empty + ~output:Tez.encoding + RPC_path.(path / "external_delegated") + let staking_denominator = RPC_service.get_service ~description: @@ -470,11 +488,15 @@ let f_external_staked ctxt pkh () () = let unstake_requests ctxt pkh = let open Lwt_result_syntax in - let* result = Unstake_requests.prepare_finalize_unstake ctxt pkh in + let* result = + (* This function applies slashing to finalizable requests. *) + Unstake_requests.prepare_finalize_unstake ctxt pkh + in match result with | None -> return_none | Some {finalizable; unfinalizable} -> let* unfinalizable = + (* Apply slashing to unfinalizable requests too. *) Unstake_requests.For_RPC .apply_slash_to_unstaked_unfinalizable_stored_requests ctxt @@ -484,10 +506,10 @@ let unstake_requests ctxt pkh = let external_staked_and_delegated ctxt pkh = let open Lwt_result_syntax in - let* full_balance = Delegate.For_RPC.full_balance ctxt pkh in - let* unstake_requests = unstake_requests ctxt (Implicit pkh) in - let* unstake_requests_to_other_delegates = - match unstake_requests with + let* own_full_balance = Delegate.For_RPC.full_balance ctxt pkh in + let* own_unstake_requests = unstake_requests ctxt (Implicit pkh) in + let* own_unstaked_from_other_delegates = + match own_unstake_requests with | None -> return Tez.zero | Some {finalizable; unfinalizable} -> let* finalizable_sum = @@ -509,12 +531,28 @@ let external_staked_and_delegated ctxt pkh = in Lwt.return Tez.(finalizable_sum +? unfinalizable_sum) in - let* staking_balance = Delegate.For_RPC.staking_balance ctxt pkh in - let*? self_staking_balance = - Tez.(full_balance -? unstake_requests_to_other_delegates) + let* total_staked_and_delegated = total_staked_and_delegated ctxt pkh in + let*? own_staked_and_delegated = + Tez.(own_full_balance -? own_unstaked_from_other_delegates) + in + let*? external_staked_and_delegated = + Tez.(total_staked_and_delegated -? own_staked_and_delegated) + in + return external_staked_and_delegated + +let external_delegated ctxt pkh : Tez.t Environment.Error_monad.tzresult Lwt.t = + let open Lwt_result_syntax in + let* external_staked_and_delegated = external_staked_and_delegated ctxt pkh in + let* external_staked = external_staked ctxt pkh in + let*? external_delegated = + Tez.(external_staked_and_delegated -? external_staked) in - let*? sum = Tez.(staking_balance -? self_staking_balance) in - return sum + return external_delegated + +let f_external_delegated ctxt pkh () () = + let open Lwt_result_syntax in + let* () = check_delegate_registered ctxt pkh in + external_delegated ctxt pkh let register () = let open Lwt_result_syntax in @@ -597,6 +635,7 @@ let register () = return contracts) ; register1 ~chunked:false S.Deprecated.total_delegated_stake f_external_staked ; register1 ~chunked:false S.external_staked f_external_staked ; + register1 ~chunked:false S.external_delegated f_external_delegated ; register1 ~chunked:false S.staking_denominator (fun ctxt pkh () () -> let* () = check_delegate_registered ctxt pkh in Staking_pseudotokens.For_RPC.get_frozen_deposits_pseudotokens -- GitLab From b34d7542ec2831f3e381bd32a205acd640818c64 Mon Sep 17 00:00:00 2001 From: Diane Gallois-Wong Date: Thu, 18 Jul 2024 15:11:42 +0200 Subject: [PATCH 7/8] Plugin: deprecate RPC delegated_balance --- src/proto_alpha/lib_plugin/RPC.ml | 19 ------------------- .../lib_plugin/delegate_services.ml | 12 ++++++++++++ 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/src/proto_alpha/lib_plugin/RPC.ml b/src/proto_alpha/lib_plugin/RPC.ml index 4cb564a49d2a..3de62cf9d190 100644 --- a/src/proto_alpha/lib_plugin/RPC.ml +++ b/src/proto_alpha/lib_plugin/RPC.ml @@ -4092,16 +4092,6 @@ module Delegates = struct ~output:info_encoding path - let delegated_balance = - RPC_service.get_service - ~description: - "Returns the sum (in mutez) of all balances of all the contracts \ - that delegate to a given delegate. This excludes the delegate's own \ - balance, its frozen deposits and its frozen bonds." - ~query:RPC_query.empty - ~output:Tez.encoding - RPC_path.(path / "delegated_balance") - let min_delegated_in_current_cycle = RPC_service.get_service ~description: @@ -4181,12 +4171,6 @@ module Delegates = struct let open Lwt_result_syntax in Registration.register1 ~chunked:false S.info (fun ctxt pkh () () -> info ctxt pkh) ; - Registration.register1 - ~chunked:false - S.delegated_balance - (fun ctxt pkh () () -> - let* () = check_delegate_registered ctxt pkh in - Delegate_services.external_staked_and_delegated ctxt pkh) ; Registration.register1 ~chunked:false S.min_delegated_in_current_cycle @@ -4194,9 +4178,6 @@ module Delegates = struct let* () = check_delegate_registered ctxt pkh in Delegate.For_RPC.min_delegated_in_current_cycle ctxt pkh) - let delegated_balance ctxt block pkh = - RPC_context.make_call1 S.delegated_balance ctxt block pkh () () - let info ctxt block pkh = RPC_context.make_call1 S.info ctxt block pkh () () let min_delegated_in_current_cycle_encoding ctxt block pkh = diff --git a/src/proto_alpha/lib_plugin/delegate_services.ml b/src/proto_alpha/lib_plugin/delegate_services.ml index cf8eb2ad7099..c3856607687e 100644 --- a/src/proto_alpha/lib_plugin/delegate_services.ml +++ b/src/proto_alpha/lib_plugin/delegate_services.ml @@ -226,6 +226,15 @@ module S = struct ~query:RPC_query.empty ~output:Tez.encoding RPC_path.(path / "total_delegated_stake") + + let delegated_balance = + RPC_service.get_service + ~description: + "DEPRECATED; to get this value, you can call RPCs external_staked \ + and external_delegated, and add their outputs together." + ~query:RPC_query.empty + ~output:Tez.encoding + RPC_path.(path / "delegated_balance") end let total_staked = @@ -636,6 +645,9 @@ let register () = register1 ~chunked:false S.Deprecated.total_delegated_stake f_external_staked ; register1 ~chunked:false S.external_staked f_external_staked ; register1 ~chunked:false S.external_delegated f_external_delegated ; + register1 ~chunked:false S.Deprecated.delegated_balance (fun ctxt pkh () () -> + let* () = check_delegate_registered ctxt pkh in + external_staked_and_delegated ctxt pkh) ; register1 ~chunked:false S.staking_denominator (fun ctxt pkh () () -> let* () = check_delegate_registered ctxt pkh in Staking_pseudotokens.For_RPC.get_frozen_deposits_pseudotokens -- GitLab From f010a5c18e77dc342cdd6a05908e27450bd838dc Mon Sep 17 00:00:00 2001 From: Julien Tesson Date: Thu, 18 Jul 2024 20:08:06 +0200 Subject: [PATCH 8/8] Beta/Plugin: deprecate RPC delegated_balance Porting to proto beta a79c90d39c12bb46143fa0e8ee754983f45e188a - Plugin: deprecate RPC delegated_balance --- src/proto_beta/lib_plugin/RPC.ml | 19 ------------------- .../lib_plugin/delegate_services.ml | 12 ++++++++++++ 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/src/proto_beta/lib_plugin/RPC.ml b/src/proto_beta/lib_plugin/RPC.ml index 4cb564a49d2a..3de62cf9d190 100644 --- a/src/proto_beta/lib_plugin/RPC.ml +++ b/src/proto_beta/lib_plugin/RPC.ml @@ -4092,16 +4092,6 @@ module Delegates = struct ~output:info_encoding path - let delegated_balance = - RPC_service.get_service - ~description: - "Returns the sum (in mutez) of all balances of all the contracts \ - that delegate to a given delegate. This excludes the delegate's own \ - balance, its frozen deposits and its frozen bonds." - ~query:RPC_query.empty - ~output:Tez.encoding - RPC_path.(path / "delegated_balance") - let min_delegated_in_current_cycle = RPC_service.get_service ~description: @@ -4181,12 +4171,6 @@ module Delegates = struct let open Lwt_result_syntax in Registration.register1 ~chunked:false S.info (fun ctxt pkh () () -> info ctxt pkh) ; - Registration.register1 - ~chunked:false - S.delegated_balance - (fun ctxt pkh () () -> - let* () = check_delegate_registered ctxt pkh in - Delegate_services.external_staked_and_delegated ctxt pkh) ; Registration.register1 ~chunked:false S.min_delegated_in_current_cycle @@ -4194,9 +4178,6 @@ module Delegates = struct let* () = check_delegate_registered ctxt pkh in Delegate.For_RPC.min_delegated_in_current_cycle ctxt pkh) - let delegated_balance ctxt block pkh = - RPC_context.make_call1 S.delegated_balance ctxt block pkh () () - let info ctxt block pkh = RPC_context.make_call1 S.info ctxt block pkh () () let min_delegated_in_current_cycle_encoding ctxt block pkh = diff --git a/src/proto_beta/lib_plugin/delegate_services.ml b/src/proto_beta/lib_plugin/delegate_services.ml index cf8eb2ad7099..c3856607687e 100644 --- a/src/proto_beta/lib_plugin/delegate_services.ml +++ b/src/proto_beta/lib_plugin/delegate_services.ml @@ -226,6 +226,15 @@ module S = struct ~query:RPC_query.empty ~output:Tez.encoding RPC_path.(path / "total_delegated_stake") + + let delegated_balance = + RPC_service.get_service + ~description: + "DEPRECATED; to get this value, you can call RPCs external_staked \ + and external_delegated, and add their outputs together." + ~query:RPC_query.empty + ~output:Tez.encoding + RPC_path.(path / "delegated_balance") end let total_staked = @@ -636,6 +645,9 @@ let register () = register1 ~chunked:false S.Deprecated.total_delegated_stake f_external_staked ; register1 ~chunked:false S.external_staked f_external_staked ; register1 ~chunked:false S.external_delegated f_external_delegated ; + register1 ~chunked:false S.Deprecated.delegated_balance (fun ctxt pkh () () -> + let* () = check_delegate_registered ctxt pkh in + external_staked_and_delegated ctxt pkh) ; register1 ~chunked:false S.staking_denominator (fun ctxt pkh () () -> let* () = check_delegate_registered ctxt pkh in Staking_pseudotokens.For_RPC.get_frozen_deposits_pseudotokens -- GitLab