Skip to content

Commit 7597bbd

Browse files
committed
complete listunspents and refresh APIs
1 parent beafd42 commit 7597bbd

5 files changed

Lines changed: 109 additions & 17 deletions

File tree

openapi.yaml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2263,8 +2263,12 @@ components:
22632263
ListUnspentsRequest:
22642264
type: object
22652265
required:
2266+
- settled_only
22662267
- skip_sync
22672268
properties:
2269+
settled_only:
2270+
type: boolean
2271+
example: false
22682272
skip_sync:
22692273
type: boolean
22702274
example: false
@@ -2638,14 +2642,39 @@ components:
26382642
enum:
26392643
- Blind
26402644
- Witness
2645+
RefreshFilter:
2646+
type: object
2647+
required:
2648+
- status
2649+
- incoming
2650+
properties:
2651+
status:
2652+
$ref: '#/components/schemas/RefreshTransferStatus'
2653+
incoming:
2654+
type: boolean
26412655
RefreshRequest:
26422656
type: object
26432657
required:
2658+
- filter
26442659
- skip_sync
26452660
properties:
2661+
asset_id:
2662+
type: string
2663+
nullable: true
2664+
example: rgb:2dkSTbr-jFhznbPmo-TQafzswCN-av4gTsJjX-ttx6CNou5-M98k8Zd
2665+
filter:
2666+
type: array
2667+
items:
2668+
$ref: '#/components/schemas/RefreshFilter'
2669+
example: []
26462670
skip_sync:
26472671
type: boolean
26482672
example: false
2673+
RefreshTransferStatus:
2674+
type: string
2675+
enum:
2676+
- WaitingCounterparty
2677+
- WaitingConfirmations
26492678
RestoreRequest:
26502679
type: object
26512680
required:

src/ldk.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,8 +1306,8 @@ async fn handle_ldk_events(
13061306
);
13071307

13081308
tokio::task::spawn_blocking(move || {
1309-
unlocked_state.rgb_refresh(false).unwrap();
1310-
unlocked_state.rgb_refresh(true).unwrap()
1309+
unlocked_state.rgb_refresh(None, vec![], false).unwrap();
1310+
unlocked_state.rgb_refresh(None, vec![], true).unwrap()
13111311
})
13121312
.await
13131313
.unwrap();

src/rgb.rs

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use rgb_lib::{
1818
wallet::{
1919
rust_only::{check_proxy_url, ColoringInfo},
2020
AssetCFA, AssetIFA, AssetNIA, AssetUDA, Assets, Balance, BtcBalance, Metadata, Online,
21-
OperationResult, ReceiveData, Recipient, RefreshResult, RgbWalletOpsOffline,
21+
OperationResult, ReceiveData, Recipient, RefreshFilter, RefreshResult, RgbWalletOpsOffline,
2222
RgbWalletOpsOnline, SendBeginResult, SinglesigKeys, SyncOptions,
2323
Transaction as RgbLibTransaction, Transfer, TransportEndpoint, Unspent,
2424
Wallet as RgbLibWallet,
@@ -226,8 +226,13 @@ impl UnlockedAppState {
226226
self.rgb_wallet_wrapper.list_transfers(asset_id)
227227
}
228228

229-
pub(crate) fn rgb_list_unspents(&self, skip_sync: bool) -> Result<Vec<Unspent>, RgbLibError> {
230-
self.rgb_wallet_wrapper.list_unspents(skip_sync)
229+
pub(crate) fn rgb_list_unspents(
230+
&self,
231+
settled_only: bool,
232+
skip_sync: bool,
233+
) -> Result<Vec<Unspent>, RgbLibError> {
234+
self.rgb_wallet_wrapper
235+
.list_unspents(settled_only, skip_sync)
231236
}
232237

233238
pub(crate) fn rgb_post_consignment<P: AsRef<Path>>(
@@ -247,8 +252,13 @@ impl UnlockedAppState {
247252
)
248253
}
249254

250-
pub(crate) fn rgb_refresh(&self, skip_sync: bool) -> Result<RefreshResult, RgbLibError> {
251-
self.rgb_wallet_wrapper.refresh(skip_sync)
255+
pub(crate) fn rgb_refresh(
256+
&self,
257+
asset_id: Option<String>,
258+
filter: Vec<RefreshFilter>,
259+
skip_sync: bool,
260+
) -> Result<RefreshResult, RgbLibError> {
261+
self.rgb_wallet_wrapper.refresh(asset_id, filter, skip_sync)
252262
}
253263

254264
pub(crate) fn rgb_save_new_asset(
@@ -597,10 +607,14 @@ impl RgbLibWalletWrapper {
597607
self.get_rgb_wallet().list_transfers(Some(asset_id))
598608
}
599609

600-
pub(crate) fn list_unspents(&self, skip_sync: bool) -> Result<Vec<Unspent>, RgbLibError> {
610+
pub(crate) fn list_unspents(
611+
&self,
612+
settled_only: bool,
613+
skip_sync: bool,
614+
) -> Result<Vec<Unspent>, RgbLibError> {
601615
let online = if skip_sync { None } else { Some(self.online) };
602616
self.get_rgb_wallet()
603-
.list_unspents(online, false, skip_sync)
617+
.list_unspents(online, settled_only, skip_sync)
604618
}
605619

606620
pub(crate) fn post_consignment<P: AsRef<Path>>(
@@ -620,9 +634,14 @@ impl RgbLibWalletWrapper {
620634
)
621635
}
622636

623-
pub(crate) fn refresh(&self, skip_sync: bool) -> Result<RefreshResult, RgbLibError> {
637+
pub(crate) fn refresh(
638+
&self,
639+
asset_id: Option<String>,
640+
filter: Vec<RefreshFilter>,
641+
skip_sync: bool,
642+
) -> Result<RefreshResult, RgbLibError> {
624643
self.get_rgb_wallet()
625-
.refresh(self.online, None, vec![], skip_sync)
644+
.refresh(self.online, asset_id, filter, skip_sync)
626645
}
627646

628647
pub(crate) fn save_new_asset(

src/routes.rs

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ use rgb_lib::{
5454
AssetUDA as RgbLibAssetUDA, Balance as RgbLibBalance, EmbeddedMedia as RgbLibEmbeddedMedia,
5555
Invoice as RgbLibInvoice, Media as RgbLibMedia, ProofOfReserves as RgbLibProofOfReserves,
5656
Recipient as RgbLibRecipient, RecipientInfo, RecipientType as RgbLibRecipientType,
57+
RefreshFilter as RgbLibRefreshFilter, RefreshTransferStatus as RgbLibRefreshTransferStatus,
5758
SyncKeychain as RgbLibSyncKeychain, SyncOptions as RgbLibSyncOptions,
5859
SyncStrategy as RgbLibSyncStrategy, Token as RgbLibToken, TokenLight as RgbLibTokenLight,
5960
WitnessData as RgbLibWitnessData,
@@ -821,6 +822,7 @@ pub(crate) struct ListTransfersResponse {
821822

822823
#[derive(Deserialize, Serialize)]
823824
pub(crate) struct ListUnspentsRequest {
825+
pub(crate) settled_only: bool,
824826
pub(crate) skip_sync: bool,
825827
}
826828

@@ -1007,8 +1009,40 @@ impl From<RgbLibRecipientType> for RecipientType {
10071009
}
10081010
}
10091011

1012+
#[derive(Deserialize, Serialize)]
1013+
pub(crate) struct RefreshFilter {
1014+
pub(crate) status: RefreshTransferStatus,
1015+
pub(crate) incoming: bool,
1016+
}
1017+
1018+
impl From<RefreshFilter> for RgbLibRefreshFilter {
1019+
fn from(value: RefreshFilter) -> Self {
1020+
Self {
1021+
status: value.status.into(),
1022+
incoming: value.incoming,
1023+
}
1024+
}
1025+
}
1026+
1027+
#[derive(Deserialize, Serialize)]
1028+
pub(crate) enum RefreshTransferStatus {
1029+
WaitingCounterparty,
1030+
WaitingConfirmations,
1031+
}
1032+
1033+
impl From<RefreshTransferStatus> for RgbLibRefreshTransferStatus {
1034+
fn from(value: RefreshTransferStatus) -> Self {
1035+
match value {
1036+
RefreshTransferStatus::WaitingCounterparty => Self::WaitingCounterparty,
1037+
RefreshTransferStatus::WaitingConfirmations => Self::WaitingConfirmations,
1038+
}
1039+
}
1040+
}
1041+
10101042
#[derive(Deserialize, Serialize)]
10111043
pub(crate) struct RefreshRequest {
1044+
pub(crate) asset_id: Option<String>,
1045+
pub(crate) filter: Vec<RefreshFilter>,
10121046
pub(crate) skip_sync: bool,
10131047
}
10141048

@@ -2720,7 +2754,7 @@ pub(crate) async fn list_unspents(
27202754
let unlocked_state = guard.as_ref().unwrap();
27212755

27222756
let mut unspents = vec![];
2723-
for unspent in unlocked_state.rgb_list_unspents(payload.skip_sync)? {
2757+
for unspent in unlocked_state.rgb_list_unspents(payload.settled_only, payload.skip_sync)? {
27242758
unspents.push(Unspent {
27252759
utxo: Utxo {
27262760
outpoint: unspent.utxo.outpoint.to_string(),
@@ -3479,9 +3513,12 @@ pub(crate) async fn refresh_transfers(
34793513
let unlocked_state = guard.as_ref().unwrap();
34803514
let unlocked_state_copy = unlocked_state.clone();
34813515

3482-
tokio::task::spawn_blocking(move || unlocked_state_copy.rgb_refresh(payload.skip_sync))
3483-
.await
3484-
.unwrap()?;
3516+
let filter = payload.filter.into_iter().map(|f| f.into()).collect();
3517+
tokio::task::spawn_blocking(move || {
3518+
unlocked_state_copy.rgb_refresh(payload.asset_id, filter, payload.skip_sync)
3519+
})
3520+
.await
3521+
.unwrap()?;
34853522

34863523
tracing::info!("Refresh complete");
34873524
Ok(Json(EmptyResponse {}))

src/test/mod.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,7 +1036,10 @@ async fn list_transfers(node_address: SocketAddr, asset_id: &str) -> Vec<Transfe
10361036

10371037
async fn list_unspents(node_address: SocketAddr) -> Vec<Unspent> {
10381038
println!("listing unspents for node {node_address}");
1039-
let payload = ListUnspentsRequest { skip_sync: false };
1039+
let payload = ListUnspentsRequest {
1040+
settled_only: false,
1041+
skip_sync: false,
1042+
};
10401043
let res = reqwest::Client::new()
10411044
.post(format!("http://{node_address}/listunspents"))
10421045
.json(&payload)
@@ -1482,7 +1485,11 @@ async fn post_asset_media(node_address: SocketAddr, file_path: &str) -> String {
14821485

14831486
async fn refresh_transfers(node_address: SocketAddr) {
14841487
println!("refreshing transfers for node {node_address}");
1485-
let payload = RefreshRequest { skip_sync: false };
1488+
let payload = RefreshRequest {
1489+
asset_id: None,
1490+
filter: vec![],
1491+
skip_sync: false,
1492+
};
14861493
let res = reqwest::Client::new()
14871494
.post(format!("http://{node_address}/refreshtransfers"))
14881495
.json(&payload)

0 commit comments

Comments
 (0)