From d9fca01d4a5993391dfa591f179bf2217a6a2c75 Mon Sep 17 00:00:00 2001 From: Alfredo Garcia Date: Wed, 4 Sep 2024 17:24:51 -0300 Subject: [PATCH 1/3] add a `stop` rpc method --- openapi.yaml | 85 +++++++++++++------ zebra-rpc/src/methods.rs | 24 ++++++ zebra-utils/src/bin/openapi-generator/main.rs | 1 + 3 files changed, 84 insertions(+), 26 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 10ac6bfdf61..e7793967118 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -28,7 +28,7 @@ paths: default: getinfo id: type: string - default: VuJXrxLSw8 + default: QWlDS9bxlK params: type: array items: {} @@ -61,7 +61,7 @@ paths: default: getblockchaininfo id: type: string - default: HDVqYXM9m6 + default: XSg3wvZykA params: type: array items: {} @@ -99,7 +99,7 @@ paths: default: getaddressbalance id: type: string - default: Xw5TDBKXGl + default: GEd1QJWprH params: type: array items: {} @@ -147,7 +147,7 @@ paths: default: sendrawtransaction id: type: string - default: QaJv2bXyZu + default: nhQi7D6Oru params: type: array items: {} @@ -196,7 +196,7 @@ paths: default: getblock id: type: string - default: k0DACJrgZs + default: qIEYMzgbJZ params: type: array items: {} @@ -239,7 +239,7 @@ paths: default: getbestblockhash id: type: string - default: rIFaLhZwHF + default: P9UBS8IXXU params: type: array items: {} @@ -272,7 +272,7 @@ paths: default: getbestblockheightandhash id: type: string - default: oxrhh1swvh + default: gQNhsomx7N params: type: array items: {} @@ -305,7 +305,7 @@ paths: default: getrawmempool id: type: string - default: E7oUD34jk2 + default: c2ScL31PtX params: type: array items: {} @@ -343,7 +343,7 @@ paths: default: z_gettreestate id: type: string - default: Hp22XK728i + default: JQ0mENKbdm params: type: array items: {} @@ -393,7 +393,7 @@ paths: default: z_getsubtreesbyindex id: type: string - default: Cs69hg68pl + default: bZUCv4t0f4 params: type: array items: {} @@ -432,7 +432,7 @@ paths: default: getrawtransaction id: type: string - default: iu395PEErc + default: I0FAejAi4r params: type: array items: {} @@ -480,7 +480,7 @@ paths: default: getaddresstxids id: type: string - default: z3lOKfsQdp + default: '3fMzDHOglf' params: type: array items: {} @@ -528,7 +528,7 @@ paths: default: getaddressutxos id: type: string - default: '7U4Q4dSxej' + default: LE2AR8Tr6X params: type: array items: {} @@ -554,6 +554,39 @@ paths: error: type: string default: Invalid parameters + /stop: + post: + tags: + - control + description: Stop the running zebrad process. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + method: + type: string + default: stop + id: + type: string + default: PbxxqB0ZpF + params: + type: array + items: {} + default: '[]' + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + properties: + result: + type: object + default: 'null' /getblockcount: post: tags: @@ -571,7 +604,7 @@ paths: default: getblockcount id: type: string - default: '8yw3EX7Cwi' + default: WO6BAIKSCg params: type: array items: {} @@ -609,7 +642,7 @@ paths: default: getblockhash id: type: string - default: ndDYksCl9E + default: vHpKNIQRLF params: type: array items: {} @@ -657,7 +690,7 @@ paths: default: getblocktemplate id: type: string - default: lJi2hfxty1 + default: L04jp5F2QW params: type: array items: {} @@ -695,7 +728,7 @@ paths: default: submitblock id: type: string - default: '9fEFOdTQle' + default: Izn7vhiMaA params: type: array items: {} @@ -728,7 +761,7 @@ paths: default: getmininginfo id: type: string - default: Dytpq4f3lF + default: SgyuBQbMik params: type: array items: {} @@ -761,7 +794,7 @@ paths: default: getnetworksolps id: type: string - default: yX3woRnOaN + default: FXg2iH3eaX params: type: array items: {} @@ -794,7 +827,7 @@ paths: default: getnetworkhashps id: type: string - default: AyAZMtbezv + default: '2PWjf8QqfI' params: type: array items: {} @@ -827,7 +860,7 @@ paths: default: getpeerinfo id: type: string - default: nNcrsu3ZAR + default: OE9s5wkP0w params: type: array items: {} @@ -865,7 +898,7 @@ paths: default: validateaddress id: type: string - default: LGyfO7zTjW + default: '6FS4iGA4Ht' params: type: array items: {} @@ -903,7 +936,7 @@ paths: default: z_validateaddress id: type: string - default: '2Q09a2Nh4N' + default: utp8tN61yU params: type: array items: {} @@ -941,7 +974,7 @@ paths: default: getblocksubsidy id: type: string - default: nv6lOWCRso + default: dgNZGo7lNa params: type: array items: {} @@ -984,7 +1017,7 @@ paths: default: getdifficulty id: type: string - default: '2O3A0PF1SS' + default: KEJv30D2MI params: type: array items: {} @@ -1022,7 +1055,7 @@ paths: default: z_listunifiedreceivers id: type: string - default: XYgGcDIx2X + default: lfBqvYghGm params: type: array items: {} diff --git a/zebra-rpc/src/methods.rs b/zebra-rpc/src/methods.rs index 471d542922c..fae4e99101e 100644 --- a/zebra-rpc/src/methods.rs +++ b/zebra-rpc/src/methods.rs @@ -301,6 +301,18 @@ pub trait Rpc { &self, address_strings: AddressStrings, ) -> BoxFuture>>; + + #[rpc(name = "stop")] + /// Stop the running zebrad process. + /// + /// # Notes + /// + /// Only works if the network of the running zebrad process is `Regtest`. + /// + /// zcashd reference: [`stop`](https://zcash.github.io/rpc/stop.html) + /// method: post + /// tags: control + fn stop(&self) -> Result<()>; } /// RPC method implementations. @@ -1344,6 +1356,18 @@ where } .boxed() } + + fn stop(&self) -> Result<()> { + if self.network.is_regtest() { + std::process::exit(0); + } else { + Err(Error { + code: ErrorCode::MethodNotFound, + message: "stop is only available on regtest networks".to_string(), + data: None, + }) + } + } } /// Returns the best chain tip height of `latest_chain_tip`, diff --git a/zebra-utils/src/bin/openapi-generator/main.rs b/zebra-utils/src/bin/openapi-generator/main.rs index fd0e9fe9b2b..15e5446d855 100644 --- a/zebra-utils/src/bin/openapi-generator/main.rs +++ b/zebra-utils/src/bin/openapi-generator/main.rs @@ -543,6 +543,7 @@ fn get_default_properties(method_name: &str) -> Result default_property(type_, items.clone(), GetInfo::default())?, + "stop" => default_property(type_, items.clone(), ())?, // transaction "sendrawtransaction" => { default_property(type_, items.clone(), SentTransactionHash::default())? From 30fb3c71f26629a737e9d5ba0e8be4b64bc0dc55 Mon Sep 17 00:00:00 2001 From: Alfredo Garcia Date: Thu, 5 Sep 2024 08:21:53 -0300 Subject: [PATCH 2/3] add todo comment --- zebra-rpc/src/methods.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/zebra-rpc/src/methods.rs b/zebra-rpc/src/methods.rs index fae4e99101e..16483bb8597 100644 --- a/zebra-rpc/src/methods.rs +++ b/zebra-rpc/src/methods.rs @@ -1359,6 +1359,7 @@ where fn stop(&self) -> Result<()> { if self.network.is_regtest() { + // TODO: Use a controlled shutdown. std::process::exit(0); } else { Err(Error { From 87a04052af172ac9e2516fe28dbee4cd5a3585b0 Mon Sep 17 00:00:00 2001 From: Alfredo Garcia Date: Thu, 5 Sep 2024 12:16:20 -0300 Subject: [PATCH 3/3] add a ticket number to the TODO Co-authored-by: Marek --- zebra-rpc/src/methods.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zebra-rpc/src/methods.rs b/zebra-rpc/src/methods.rs index 16483bb8597..cb894182c1f 100644 --- a/zebra-rpc/src/methods.rs +++ b/zebra-rpc/src/methods.rs @@ -1359,7 +1359,7 @@ where fn stop(&self) -> Result<()> { if self.network.is_regtest() { - // TODO: Use a controlled shutdown. + // TODO: Use graceful termination in `stop` RPC (#8850) std::process::exit(0); } else { Err(Error {