self.outputs[0].1
);
}
}
}
Ok(self)
}
fn add_value(mut self) -> Result<Self> {
let estimated_fee = self.estimate_fee();
let min_value = match self.target {
Target::Postage => self.outputs.last().unwrap().0.script_pubkey().dust_value(),
Target::Value(value) | Target::ExactPostage(value) => value,
};
let total = min_value
.checked_add(estimated_fee)
.ok_or(Error::ValueOverflow)?;
if let Some(mut deficit) = total.checked_sub(self.outputs.last().unwrap().1) {
while deficit > Amount::ZERO {
let additional_fee = self.fee_rate.fee(Self::ADDITIONAL_INPUT_VBYTES);
let needed = deficit
.checked_add(additional_fee)
.ok_or(Error::ValueOverflow)?;
let (utxo, value) = self.select_cardinal_utxo(needed, false)?;
let benefit = value
.checked_sub(additional_fee)
.ok_or(Error::NotEnoughCardinalUtxos)?;
self.inputs.push(utxo);
self.outputs.last_mut().unwrap().1 += value;