feat(txbuilder): expose independent output builder (#522)

This commit is contained in:
Santiago Carmuega 2024-10-17 13:36:33 -03:00 committed by GitHub
parent 21af5b7505
commit 05f8b2bd07
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -49,7 +49,7 @@ impl BuildBabbage for StagingTransaction {
.outputs .outputs
.unwrap_or_default() .unwrap_or_default()
.iter() .iter()
.map(babbage_output) .map(Output::build_babbage_raw)
.collect::<Result<Vec<_>, _>>()?; .collect::<Result<Vec<_>, _>>()?;
let mint: Option<KeyValuePairs<Hash<28>, KeyValuePairs<_, _>>> = self.mint.map(|massets| { let mint: Option<KeyValuePairs<Hash<28>, KeyValuePairs<_, _>>> = self.mint.map(|massets| {
@ -100,7 +100,7 @@ impl BuildBabbage for StagingTransaction {
let collateral_return = self let collateral_return = self
.collateral_output .collateral_output
.as_ref() .as_ref()
.map(babbage_output) .map(Output::build_babbage_raw)
.transpose()?; .transpose()?;
let reference_inputs = self let reference_inputs = self
@ -261,10 +261,11 @@ impl BuildBabbage for StagingTransaction {
// } // }
} }
fn babbage_output( impl Output {
output: &Output, pub fn build_babbage_raw(
&self,
) -> Result<PseudoTransactionOutput<PostAlonzoTransactionOutput>, TxBuilderError> { ) -> Result<PseudoTransactionOutput<PostAlonzoTransactionOutput>, TxBuilderError> {
let value = if let Some(ref assets) = output.assets { let value = if let Some(ref assets) = self.assets {
let txb_assets = assets let txb_assets = assets
.deref() .deref()
.iter() .iter()
@ -281,12 +282,12 @@ fn babbage_output(
.collect::<Vec<_>>() .collect::<Vec<_>>()
.into(); .into();
Value::Multiasset(output.lovelace, txb_assets) Value::Multiasset(self.lovelace, txb_assets)
} else { } else {
Value::Coin(output.lovelace) Value::Coin(self.lovelace)
}; };
let datum_option = if let Some(ref d) = output.datum { let datum_option = if let Some(ref d) = self.datum {
match d.kind { match d.kind {
DatumKind::Hash => { DatumKind::Hash => {
let dh: [u8; 32] = d let dh: [u8; 32] = d
@ -306,7 +307,7 @@ fn babbage_output(
None None
}; };
let script_ref = if let Some(ref s) = output.script { let script_ref = if let Some(ref s) = self.script {
let script = match s.kind { let script = match s.kind {
ScriptKind::Native => PallasScript::NativeScript( ScriptKind::Native => PallasScript::NativeScript(
NativeScript::decode_fragment(s.bytes.as_ref()) NativeScript::decode_fragment(s.bytes.as_ref())
@ -327,10 +328,11 @@ fn babbage_output(
Ok(PseudoTransactionOutput::PostAlonzo( Ok(PseudoTransactionOutput::PostAlonzo(
PostAlonzoTransactionOutput { PostAlonzoTransactionOutput {
address: output.address.to_vec().into(), address: self.address.to_vec().into(),
value, value,
datum_option, datum_option,
script_ref, script_ref,
}, },
)) ))
} }
}