slatepack: return concrete error on sync workflow instead of none, optimize sending requirement detection

This commit is contained in:
ardocrat
2026-06-23 00:37:00 +03:00
parent 4587eb918d
commit f92a2d6b43
6 changed files with 215 additions and 190 deletions
+83 -55
View File
@@ -431,18 +431,37 @@ where
if let Some(b) = args.bridge.clone() {
c.bridge.bridge_line = Some(b);
}
if let Some(s) = args.skip_tor {
c.skip_send_attempt = Some(s);
}
Some(c)
}
None => None,
};
let res = try_slatepack_sync_workflow(&slate, &args.dest, tor_config, None, false, test_mode);
let output_sp = || -> Result<(), Error> {
Ok(output_slatepack(
owner_api,
keychain_mask,
&slate,
args.dest.as_str(),
args.outfile,
true,
false,
args.slatepack_qr,
)?)
};
let can_send = if let Some(tc) = tor_config.as_ref() {
tc.skip_send(args.skip_tor)
} else {
false
};
if test_mode || !can_send {
return output_sp();
}
let res = try_slatepack_sync_workflow(&slate, &args.dest, tor_config, None, false);
match res {
Ok(Some(s)) => {
Ok(s) => {
controller::owner_single_use(None, keychain_mask, Some(owner_api), |api, m| {
api.tx_lock_outputs(m, &s)?;
let ret_slate = api.finalize_tx(m, &s)?;
@@ -459,19 +478,10 @@ where
}
})?;
}
Ok(None) => {
output_slatepack(
owner_api,
keychain_mask,
&slate,
args.dest.as_str(),
args.outfile,
true,
false,
args.slatepack_qr,
)?;
Err(e) => {
error!("Error sending slate sync: {}", e);
output_sp()?;
}
Err(e) => return Err(e.into()),
}
Ok(())
}
@@ -668,9 +678,6 @@ where
if let Some(b) = args.bridge {
c.bridge.bridge_line = Some(b);
}
if let Some(s) = args.skip_tor {
c.skip_send_attempt = Some(s);
}
Some(c)
}
None => None,
@@ -686,33 +693,45 @@ where
None => String::from(""),
};
let res = try_slatepack_sync_workflow(&slate, &dest, tor_config, None, true, test_mode);
let output_sp = || -> Result<(), Error> {
Ok(output_slatepack(
owner_api,
keychain_mask,
&slate,
&dest,
args.outfile,
false,
false,
args.slatepack_qr,
)?)
};
let can_send = if let Some(tc) = tor_config.as_ref() {
tc.skip_send(args.skip_tor)
} else {
false
};
if test_mode || !can_send {
return output_sp();
}
let res = try_slatepack_sync_workflow(&slate, &dest, tor_config, None, true);
match res {
Ok(Some(_)) => {
Ok(_) => {
println!();
println!(
"Transaction received and sent back to sender at {} for finalization.",
dest
);
println!();
Ok(())
}
Ok(None) => {
output_slatepack(
owner_api,
keychain_mask,
&slate,
&dest,
args.outfile,
false,
false,
args.slatepack_qr,
)?;
Ok(())
Err(e) => {
error!("Error sending slate sync: {}", e);
output_sp()?;
}
Err(e) => Err(e.into()),
}
Ok(())
}
pub fn unpack<L, C, K>(
@@ -1012,41 +1031,50 @@ where
if let Some(b) = args.bridge {
c.bridge.bridge_line = Some(b);
}
if let Some(skip_tor) = args.skip_tor {
c.skip_send_attempt = Some(skip_tor);
}
Some(c)
}
None => None,
};
let res = try_slatepack_sync_workflow(&slate, &dest, tor_config, None, true, test_mode);
let output_sp = || -> Result<(), Error> {
Ok(output_slatepack(
owner_api,
keychain_mask,
&slate,
&dest,
args.outfile,
true,
false,
args.slatepack_qr,
)?)
};
let can_send = if let Some(tc) = tor_config.as_ref() {
tc.skip_send(args.skip_tor)
} else {
false
};
if test_mode || !can_send {
return output_sp();
}
let res = try_slatepack_sync_workflow(&slate, &dest, tor_config, None, true);
match res {
Ok(Some(_)) => {
Ok(_) => {
println!();
println!(
"Transaction paid and sent back to initiator at {} for finalization.",
dest
);
println!();
Ok(())
}
Ok(None) => {
output_slatepack(
owner_api,
keychain_mask,
&slate,
&dest,
args.outfile,
true,
false,
args.slatepack_qr,
)?;
Ok(())
Err(e) => {
error!("Error sending slate sync: {}", e);
output_sp()?;
}
Err(e) => Err(e.into()),
}
Ok(())
}
/// Info command args