Skip to content

Commit a79fb38

Browse files
committed
refactor: split redeem / replace methods
Signed-off-by: Gregory Hill <gregorydhill@outlook.com>
1 parent 51c28e8 commit a79fb38

File tree

7 files changed

+95
-75
lines changed

7 files changed

+95
-75
lines changed

runtime/src/rpc.rs

Lines changed: 64 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -939,9 +939,11 @@ pub trait ReplacePallet {
939939
/// Get all replace requests made by the given vault
940940
async fn get_old_vault_replace_requests(
941941
&self,
942-
maybe_account_id: Option<AccountId>,
942+
account_id: AccountId,
943943
) -> Result<Vec<(H256, InterBtcReplaceRequest)>, Error>;
944944

945+
async fn get_all_replace_requests(&self) -> Result<Vec<(H256, InterBtcReplaceRequest)>, Error>;
946+
945947
/// Get the time difference in number of blocks between when a replace
946948
/// request is created and required completion time by a vault
947949
async fn get_replace_period(&self) -> Result<u32, Error>;
@@ -1035,35 +1037,36 @@ impl ReplacePallet for InterBtcParachain {
10351037
/// Get all replace requests made by the given vault
10361038
async fn get_old_vault_replace_requests(
10371039
&self,
1038-
maybe_account_id: Option<AccountId>,
1040+
account_id: AccountId,
10391041
) -> Result<Vec<(H256, InterBtcReplaceRequest)>, Error> {
10401042
let head = self.get_finalized_block_hash().await?;
1041-
if let Some(account_id) = maybe_account_id {
1042-
let result: Vec<H256> = self
1043-
.api
1044-
.rpc()
1045-
.request("replace_getOldVaultReplaceRequests", rpc_params![account_id, head])
1046-
.await?;
1047-
join_all(
1048-
result
1049-
.into_iter()
1050-
.map(|key| async move { self.get_replace_request(key).await.map(|value| (key, value)) }),
1051-
)
1052-
.await
1053-
.into_iter()
1054-
.collect()
1055-
} else {
1056-
let key_addr = metadata::storage().replace().replace_requests_root();
1057-
let mut iter = self.api.storage().iter(key_addr, DEFAULT_PAGE_SIZE, head).await?;
1058-
let mut replace_requests = Vec::new();
1059-
while let Some((replace_id, request)) = iter.next().await? {
1060-
let key_hash = replace_id.0.as_slice();
1061-
// last bytes are the raw key
1062-
let key = &key_hash[key_hash.len() - 32..];
1063-
replace_requests.push((H256::from_slice(key), request));
1064-
}
1065-
Ok(replace_requests)
1043+
let result: Vec<H256> = self
1044+
.api
1045+
.rpc()
1046+
.request("replace_getOldVaultReplaceRequests", rpc_params![account_id, head])
1047+
.await?;
1048+
join_all(
1049+
result
1050+
.into_iter()
1051+
.map(|key| async move { self.get_replace_request(key).await.map(|value| (key, value)) }),
1052+
)
1053+
.await
1054+
.into_iter()
1055+
.collect()
1056+
}
1057+
1058+
async fn get_all_replace_requests(&self) -> Result<Vec<(H256, InterBtcReplaceRequest)>, Error> {
1059+
let head = self.get_finalized_block_hash().await?;
1060+
let key_addr = metadata::storage().replace().replace_requests_root();
1061+
let mut iter = self.api.storage().iter(key_addr, DEFAULT_PAGE_SIZE, head).await?;
1062+
let mut replace_requests = Vec::new();
1063+
while let Some((replace_id, request)) = iter.next().await? {
1064+
let key_hash = replace_id.0.as_slice();
1065+
// last bytes are the raw key
1066+
let key = &key_hash[key_hash.len() - 32..];
1067+
replace_requests.push((H256::from_slice(key), request));
10661068
}
1069+
Ok(replace_requests)
10671070
}
10681071

10691072
async fn get_replace_period(&self) -> Result<u32, Error> {
@@ -1353,13 +1356,15 @@ pub trait RedeemPallet {
13531356

13541357
async fn get_redeem_request(&self, redeem_id: H256) -> Result<InterBtcRedeemRequest, Error>;
13551358

1356-
/// Get all redeem requests, if the account is specified
1357-
/// only return those for that Vault
1358-
async fn get_redeem_requests(
1359+
/// Get all redeem requests for a vault
1360+
async fn get_vault_redeem_requests(
13591361
&self,
1360-
maybe_account_id: Option<AccountId>,
1362+
account_id: AccountId,
13611363
) -> Result<Vec<(H256, InterBtcRedeemRequest)>, Error>;
13621364

1365+
/// Get all redeem requests
1366+
async fn get_all_redeem_requests(&self) -> Result<Vec<(H256, InterBtcRedeemRequest)>, Error>;
1367+
13631368
async fn get_redeem_period(&self) -> Result<BlockNumber, Error>;
13641369
}
13651370

@@ -1400,37 +1405,38 @@ impl RedeemPallet for InterBtcParachain {
14001405
.await
14011406
}
14021407

1403-
async fn get_redeem_requests(
1408+
async fn get_vault_redeem_requests(
14041409
&self,
1405-
maybe_account_id: Option<AccountId>,
1410+
account_id: AccountId,
14061411
) -> Result<Vec<(H256, InterBtcRedeemRequest)>, Error> {
14071412
let head = self.get_finalized_block_hash().await?;
1408-
if let Some(account_id) = maybe_account_id {
1409-
let result: Vec<H256> = self
1410-
.api
1411-
.rpc()
1412-
.request("redeem_getVaultRedeemRequests", rpc_params![account_id, head])
1413-
.await?;
1414-
join_all(
1415-
result
1416-
.into_iter()
1417-
.map(|key| async move { self.get_redeem_request(key).await.map(|value| (key, value)) }),
1418-
)
1419-
.await
1420-
.into_iter()
1421-
.collect()
1422-
} else {
1423-
let key_addr = metadata::storage().redeem().redeem_requests_root();
1424-
let mut iter = self.api.storage().iter(key_addr, DEFAULT_PAGE_SIZE, head).await?;
1425-
let mut redeem_requests = Vec::new();
1426-
while let Some((redeem_id, request)) = iter.next().await? {
1427-
let key_hash = redeem_id.0.as_slice();
1428-
// last bytes are the raw key
1429-
let key = &key_hash[key_hash.len() - 32..];
1430-
redeem_requests.push((H256::from_slice(key), request));
1431-
}
1432-
Ok(redeem_requests)
1413+
let result: Vec<H256> = self
1414+
.api
1415+
.rpc()
1416+
.request("redeem_getVaultRedeemRequests", rpc_params![account_id, head])
1417+
.await?;
1418+
join_all(
1419+
result
1420+
.into_iter()
1421+
.map(|key| async move { self.get_redeem_request(key).await.map(|value| (key, value)) }),
1422+
)
1423+
.await
1424+
.into_iter()
1425+
.collect()
1426+
}
1427+
1428+
async fn get_all_redeem_requests(&self) -> Result<Vec<(H256, InterBtcRedeemRequest)>, Error> {
1429+
let head = self.get_finalized_block_hash().await?;
1430+
let key_addr = metadata::storage().redeem().redeem_requests_root();
1431+
let mut iter = self.api.storage().iter(key_addr, DEFAULT_PAGE_SIZE, head).await?;
1432+
let mut redeem_requests = Vec::new();
1433+
while let Some((redeem_id, request)) = iter.next().await? {
1434+
let key_hash = redeem_id.0.as_slice();
1435+
// last bytes are the raw key
1436+
let key = &key_hash[key_hash.len() - 32..];
1437+
redeem_requests.push((H256::from_slice(key), request));
14331438
}
1439+
Ok(redeem_requests)
14341440
}
14351441

14361442
async fn get_redeem_period(&self) -> Result<BlockNumber, Error> {

vault/src/cancellation.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,8 @@ mod tests {
358358
async fn execute_replace(&self, replace_id: H256, merkle_proof: &[u8], raw_tx: &[u8]) -> Result<(), RuntimeError>;
359359
async fn cancel_replace(&self, replace_id: H256) -> Result<(), RuntimeError>;
360360
async fn get_new_vault_replace_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
361-
async fn get_old_vault_replace_requests(&self, maybe_account_id: Option<AccountId>) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
361+
async fn get_old_vault_replace_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
362+
async fn get_all_replace_requests(&self) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
362363
async fn get_replace_period(&self) -> Result<u32, RuntimeError>;
363364
async fn get_replace_request(&self, replace_id: H256) -> Result<InterBtcReplaceRequest, RuntimeError>;
364365
async fn get_replace_dust_amount(&self) -> Result<u128, RuntimeError>;

vault/src/execution.rs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -471,16 +471,23 @@ pub async fn execute_open_requests(
471471
num_confirmations: u32,
472472
payment_margin: Duration,
473473
auto_rbf: bool,
474-
no_execute_all: bool,
474+
execute_all: bool,
475475
) -> Result<(), ServiceError<Error>> {
476476
let parachain_rpc = &parachain_rpc;
477477
let vault_id = parachain_rpc.get_account_id().clone();
478478

479479
// get all redeem and replace requests
480-
let (redeem_requests, replace_requests) = try_join!(
481-
parachain_rpc.get_redeem_requests(no_execute_all.then_some(vault_id.clone())),
482-
parachain_rpc.get_old_vault_replace_requests(no_execute_all.then_some(vault_id.clone())),
483-
)?;
480+
let (redeem_requests, replace_requests) = if execute_all {
481+
try_join!(
482+
parachain_rpc.get_all_redeem_requests(),
483+
parachain_rpc.get_all_replace_requests(),
484+
)?
485+
} else {
486+
try_join!(
487+
parachain_rpc.get_vault_redeem_requests(vault_id.clone()),
488+
parachain_rpc.get_old_vault_replace_requests(vault_id.clone()),
489+
)?
490+
};
484491

485492
let open_redeems = redeem_requests
486493
.into_iter()
@@ -723,7 +730,8 @@ mod tests {
723730
async fn execute_redeem(&self, redeem_id: H256, merkle_proof: &[u8], raw_tx: &[u8]) -> Result<(), RuntimeError>;
724731
async fn cancel_redeem(&self, redeem_id: H256, reimburse: bool) -> Result<(), RuntimeError>;
725732
async fn get_redeem_request(&self, redeem_id: H256) -> Result<InterBtcRedeemRequest, RuntimeError>;
726-
async fn get_redeem_requests(&self, maybe_account_id: Option<AccountId>) -> Result<Vec<(H256, InterBtcRedeemRequest)>, RuntimeError>;
733+
async fn get_vault_redeem_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcRedeemRequest)>, RuntimeError>;
734+
async fn get_all_redeem_requests(&self) -> Result<Vec<(H256, InterBtcRedeemRequest)>, RuntimeError>;
727735
async fn get_redeem_period(&self) -> Result<BlockNumber, RuntimeError>;
728736
}
729737

@@ -735,7 +743,8 @@ mod tests {
735743
async fn execute_replace(&self, replace_id: H256, merkle_proof: &[u8], raw_tx: &[u8]) -> Result<(), RuntimeError>;
736744
async fn cancel_replace(&self, replace_id: H256) -> Result<(), RuntimeError>;
737745
async fn get_new_vault_replace_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
738-
async fn get_old_vault_replace_requests(&self, maybe_account_id: Option<AccountId>) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
746+
async fn get_old_vault_replace_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
747+
async fn get_all_replace_requests(&self) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
739748
async fn get_replace_period(&self) -> Result<u32, RuntimeError>;
740749
async fn get_replace_request(&self, replace_id: H256) -> Result<InterBtcReplaceRequest, RuntimeError>;
741750
async fn get_replace_dust_amount(&self) -> Result<u128, RuntimeError>;

vault/src/metrics.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,8 @@ impl PerCurrencyMetrics {
220220
let vault_id = &vault.vault_id;
221221
// update fee surplus
222222
if let Ok((redeem_requests, replace_requests)) = try_join!(
223-
parachain_rpc.get_redeem_requests(Some(vault_id.account_id.clone())),
224-
parachain_rpc.get_old_vault_replace_requests(Some(vault_id.account_id.clone()))
223+
parachain_rpc.get_vault_redeem_requests(vault_id.account_id.clone()),
224+
parachain_rpc.get_old_vault_replace_requests(vault_id.account_id.clone())
225225
) {
226226
let redeems = redeem_requests
227227
.iter()
@@ -608,7 +608,7 @@ pub async fn poll_metrics<P: CollateralBalancesPallet + RedeemPallet + IssuePall
608608
publish_native_currency_balance(parachain_rpc).await?;
609609
publish_issue_count(parachain_rpc, vault_id_manager).await;
610610
if let Ok(redeems) = parachain_rpc
611-
.get_redeem_requests(Some(parachain_rpc.get_account_id().clone()))
611+
.get_vault_redeem_requests(parachain_rpc.get_account_id().clone())
612612
.await
613613
{
614614
publish_redeem_count(vault_id_manager, &redeems).await;
@@ -720,7 +720,8 @@ mod tests {
720720
async fn execute_redeem(&self, redeem_id: H256, merkle_proof: &[u8], raw_tx: &[u8]) -> Result<(), RuntimeError>;
721721
async fn cancel_redeem(&self, redeem_id: H256, reimburse: bool) -> Result<(), RuntimeError>;
722722
async fn get_redeem_request(&self, redeem_id: H256) -> Result<InterBtcRedeemRequest, RuntimeError>;
723-
async fn get_redeem_requests(&self, maybe_account_id: Option<AccountId>) -> Result<Vec<(H256, InterBtcRedeemRequest)>, RuntimeError>;
723+
async fn get_vault_redeem_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcRedeemRequest)>, RuntimeError>;
724+
async fn get_all_redeem_requests(&self) -> Result<Vec<(H256, InterBtcRedeemRequest)>, RuntimeError>;
724725
async fn get_redeem_period(&self) -> Result<BlockNumber, RuntimeError>;
725726
}
726727

@@ -759,7 +760,8 @@ mod tests {
759760
async fn execute_replace(&self, replace_id: H256, merkle_proof: &[u8], raw_tx: &[u8]) -> Result<(), RuntimeError>;
760761
async fn cancel_replace(&self, replace_id: H256) -> Result<(), RuntimeError>;
761762
async fn get_new_vault_replace_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
762-
async fn get_old_vault_replace_requests(&self, maybe_account_id: Option<AccountId>) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
763+
async fn get_old_vault_replace_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
764+
async fn get_all_replace_requests(&self) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
763765
async fn get_replace_period(&self) -> Result<u32, RuntimeError>;
764766
async fn get_replace_request(&self, replace_id: H256) -> Result<InterBtcReplaceRequest, RuntimeError>;
765767
async fn get_replace_dust_amount(&self) -> Result<u128, RuntimeError>;

vault/src/replace.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,8 @@ mod tests {
331331
async fn execute_replace(&self, replace_id: H256, merkle_proof: &[u8], raw_tx: &[u8]) -> Result<(), RuntimeError>;
332332
async fn cancel_replace(&self, replace_id: H256) -> Result<(), RuntimeError>;
333333
async fn get_new_vault_replace_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
334-
async fn get_old_vault_replace_requests(&self, maybe_account_id: Option<AccountId>) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
334+
async fn get_old_vault_replace_requests(&self, account_id: AccountId) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
335+
async fn get_all_replace_requests(&self) -> Result<Vec<(H256, InterBtcReplaceRequest)>, RuntimeError>;
335336
async fn get_replace_period(&self) -> Result<u32, RuntimeError>;
336337
async fn get_replace_request(&self, replace_id: H256) -> Result<InterBtcReplaceRequest, RuntimeError>;
337338
async fn get_replace_dust_amount(&self) -> Result<u128, RuntimeError>;

vault/src/system.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ pub struct VaultServiceConfig {
6969
#[clap(long)]
7070
pub no_issue_execution: bool,
7171

72-
/// Don't try to execute **all** redeem and replace requests,
72+
/// Try to execute **all** redeem and replace requests,
7373
/// the Vault will still submit proofs for their own
7474
#[clap(long)]
75-
pub no_execute_all: bool,
75+
pub execute_all: bool,
7676

7777
/// Don't run the RPC API.
7878
#[clap(long)]
@@ -637,7 +637,7 @@ impl VaultService {
637637
num_confirmations,
638638
self.config.payment_margin_minutes,
639639
self.config.auto_rbf,
640-
self.config.no_execute_all,
640+
self.config.execute_all,
641641
);
642642

643643
let shutdown_clone = self.shutdown.clone();

vault/tests/vault_integration_tests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,7 @@ async fn test_execute_open_requests_succeeds() {
840840
0,
841841
Duration::from_secs(0),
842842
true,
843+
false,
843844
)
844845
.map(Result::unwrap),
845846
assert_redeem_event(TIMEOUT, user_provider.clone(), redeem_ids[0]),

0 commit comments

Comments
 (0)