feat(rpc): Add a `stop` rpc method (#8839)

* add a `stop` rpc method

* add todo comment

* add a ticket number to the TODO

Co-authored-by: Marek <mail@marek.onl>

---------

Co-authored-by: Marek <mail@marek.onl>
Co-authored-by: Pili Guerra <mpguerra@users.noreply.github.com>
This commit is contained in:
Alfredo Garcia 2024-09-09 10:02:35 -03:00 committed by GitHub
parent 1511997829
commit 554a37d20a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 85 additions and 26 deletions

View File

@ -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: {}

View File

@ -301,6 +301,18 @@ pub trait Rpc {
&self,
address_strings: AddressStrings,
) -> BoxFuture<Result<Vec<GetAddressUtxos>>>;
#[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,19 @@ where
}
.boxed()
}
fn stop(&self) -> Result<()> {
if self.network.is_regtest() {
// TODO: Use graceful termination in `stop` RPC (#8850)
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`,

View File

@ -543,6 +543,7 @@ fn get_default_properties(method_name: &str) -> Result<IndexMap<String, Property
)?,
// control
"getinfo" => default_property(type_, items.clone(), GetInfo::default())?,
"stop" => default_property(type_, items.clone(), ())?,
// transaction
"sendrawtransaction" => {
default_property(type_, items.clone(), SentTransactionHash::default())?