mirror of
https://github.com/jwinterm/grin-wallet.git
synced 2026-10-17 07:11:36 +02:00
fix contract setup retries
This commit is contained in:
@@ -684,9 +684,25 @@ fn contract_srs_tx_impl(test_dir: &'static str) -> Result<(), libwallet::Error>
|
|||||||
};
|
};
|
||||||
let signed = {
|
let signed = {
|
||||||
wallet_inst!(recv_wallet, w);
|
wallet_inst!(recv_wallet, w);
|
||||||
|
let mut retry_args = receiver_args.clone();
|
||||||
|
retry_args.net_change = None;
|
||||||
|
let err = libwallet::contract::setup(w, recv_mask, &incoming, &retry_args).unwrap_err();
|
||||||
|
assert!(matches!(err, libwallet::Error::GenericError(ref msg)
|
||||||
|
if msg == "Contract requires a net change (--send or --receive)"));
|
||||||
let first = libwallet::contract::setup(w, recv_mask, &incoming, &receiver_args)?;
|
let first = libwallet::contract::setup(w, recv_mask, &incoming, &receiver_args)?;
|
||||||
let retried = libwallet::contract::setup(w, recv_mask, &incoming, &receiver_args)?;
|
let retried = libwallet::contract::setup(w, recv_mask, &incoming, &receiver_args)?;
|
||||||
assert_eq!(retried.fee_fields, first.fee_fields);
|
assert_eq!(retried.fee_fields, first.fee_fields);
|
||||||
|
let retried = libwallet::contract::setup(w, recv_mask, &incoming, &retry_args)?;
|
||||||
|
assert_eq!(retried.fee_fields, first.fee_fields);
|
||||||
|
assert_eq!(retried.participant_data.len(), first.participant_data.len());
|
||||||
|
for (retried, first) in retried.participant_data.iter().zip(&first.participant_data) {
|
||||||
|
assert_eq!(retried.public_blind_excess, first.public_blind_excess);
|
||||||
|
assert_eq!(retried.public_nonce, first.public_nonce);
|
||||||
|
}
|
||||||
|
retry_args.net_change = Some(2_000_000_000);
|
||||||
|
let err = libwallet::contract::setup(w, recv_mask, &incoming, &retry_args).unwrap_err();
|
||||||
|
assert!(matches!(err, libwallet::Error::GenericError(ref msg)
|
||||||
|
if msg == "Expected net change mismatch! Context.net_change: 1000000000, setup_args.net_change: 2000000000"));
|
||||||
libwallet::contract::sign(w, recv_mask, &incoming, &receiver_args)?
|
libwallet::contract::sign(w, recv_mask, &incoming, &receiver_args)?
|
||||||
};
|
};
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -86,12 +86,17 @@ where
|
|||||||
Some(context) => context,
|
Some(context) => context,
|
||||||
None => contract::context::get_or_create(w, keychain_mask, &mut sl, setup_args)?,
|
None => contract::context::get_or_create(w, keychain_mask, &mut sl, setup_args)?,
|
||||||
};
|
};
|
||||||
|
let mut setup_args = setup_args.clone();
|
||||||
|
setup_args.net_change = Some(contract::utils::get_net_change(
|
||||||
|
Some(&context),
|
||||||
|
setup_args.net_change,
|
||||||
|
)?);
|
||||||
contract::utils::verify_ttl(context.contract_ttl_cutoff_height, &sl)?;
|
contract::utils::verify_ttl(context.contract_ttl_cutoff_height, &sl)?;
|
||||||
let context_args = context
|
let context_args = context
|
||||||
.setup_args
|
.setup_args
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.ok_or_else(|| Error::GenericError("Context carries no contract setup args".to_string()))?;
|
.ok_or_else(|| Error::GenericError("Context carries no contract setup args".to_string()))?;
|
||||||
contract::utils::verify_setup_args_consistency(context_args, setup_args)?;
|
contract::utils::verify_setup_args_consistency(context_args, &setup_args)?;
|
||||||
|
|
||||||
// Add keys and payment proof to slate (both are idempotent operations)
|
// Add keys and payment proof to slate (both are idempotent operations)
|
||||||
let keychain = w.keychain(keychain_mask)?;
|
let keychain = w.keychain(keychain_mask)?;
|
||||||
|
|||||||
Reference in New Issue
Block a user