Skip to content

Commit 1aee631

Browse files
committed
fix
1 parent 9e24339 commit 1aee631

File tree

3 files changed

+30
-18
lines changed

3 files changed

+30
-18
lines changed

toolkit/smart-contracts/offchain/src/reserve/handover.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ use ogmios_client::{
4141
transactions::Transactions,
4242
types::OgmiosUtxo,
4343
};
44-
use partner_chains_plutus_data::{bridge::TokenTransferMetadatumV1, reserve::ReserveRedeemer};
44+
use partner_chains_plutus_data::{
45+
VersionedMetadatum, bridge::TokenTransferMetadatum, reserve::ReserveRedeemer,
46+
};
4547
use sidechain_domain::UtxoId;
4648

4749
/// Spends current UTXO at validator address to illiquid supply validator and burn reserve auth policy token, preventing further operations.
@@ -93,7 +95,7 @@ fn build_tx(
9395

9496
let reserve_auth_policy_spend_cost = costs.get_one_spend();
9597

96-
tx_builder.add_metadatum(&0u64.into(), &TokenTransferMetadatumV1::ReserveTransfer.try_into()?);
98+
tx_builder.add_metadatum(&0u64.into(), &TokenTransferMetadatum::reserve_v1().encode()?);
9799

98100
// mint goveranance token
99101
tx_builder.add_mint_one_script_token_using_reference_script(

toolkit/smart-contracts/offchain/src/reserve/release.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ use ogmios_client::{
3939
query_ledger_state::*, query_network::QueryNetwork, transactions::Transactions,
4040
types::OgmiosUtxo,
4141
};
42-
use partner_chains_plutus_data::{bridge::TokenTransferMetadatumV1, reserve::ReserveRedeemer};
42+
use partner_chains_plutus_data::{
43+
VersionedMetadatum, bridge::TokenTransferMetadatum, reserve::ReserveRedeemer,
44+
};
4345
use sidechain_domain::{McTxHash, UtxoId};
4446
use std::num::NonZero;
4547

@@ -129,7 +131,7 @@ fn reserve_release_tx(
129131
let left_in_reserve = reserve_balance.checked_sub(amount_to_transfer)
130132
.ok_or_else(||anyhow!("Not enough funds in the reserve to transfer {amount_to_transfer} tokens (reserve balance: {reserve_balance})"))?;
131133

132-
tx_builder.add_metadatum(&0u64.into(), &TokenTransferMetadatumV1::ReserveTransfer.try_into()?);
134+
tx_builder.add_metadatum(&0u64.into(), &TokenTransferMetadatum::reserve_v1().encode()?);
133135

134136
// Additional reference scripts
135137
tx_builder.add_script_reference_input(

toolkit/smart-contracts/plutus-data/src/bridge.rs

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,22 @@ pub enum TokenTransferMetadatum {
1111
V1(TokenTransferMetadatumV1),
1212
}
1313

14+
impl TokenTransferMetadatum {
15+
/// Creates v1 reserve transfer metadatum
16+
pub fn reserve_v1() -> Self {
17+
Self::V1(TokenTransferMetadatumV1::ReserveTransfer)
18+
}
19+
20+
/// Creates v1 user transfer metadatum
21+
pub fn user_v1(receiver: ByteString) -> Self {
22+
Self::V1(TokenTransferMetadatumV1::UserTransfer { receiver })
23+
}
24+
}
25+
1426
impl VersionedMetadatum for TokenTransferMetadatum {
1527
fn decode_version(version: i32, payload: TransactionMetadatum) -> Result<Self, JsError> {
1628
match version {
17-
1 => Ok(Self::V1(payload.try_into()?)),
29+
1 => Ok(Self::V1(TokenTransferMetadatumV1::decode_payload(payload)?)),
1830
_ => Err(JsError::from_str(&format!(
1931
"Unsupported TokenTransferMetadatum version {version}"
2032
))),
@@ -29,7 +41,7 @@ impl VersionedMetadatum for TokenTransferMetadatum {
2941

3042
fn encode_payload(&self) -> Result<TransactionMetadatum, JsError> {
3143
match self {
32-
Self::V1(v1) => v1.clone().try_into(),
44+
Self::V1(v1) => v1.encode_payload(),
3345
}
3446
}
3547
}
@@ -46,10 +58,8 @@ pub enum TokenTransferMetadatumV1 {
4658
ReserveTransfer,
4759
}
4860

49-
impl TryFrom<TransactionMetadatum> for TokenTransferMetadatumV1 {
50-
type Error = JsError;
51-
52-
fn try_from(value: TransactionMetadatum) -> Result<Self, Self::Error> {
61+
impl TokenTransferMetadatumV1 {
62+
fn decode_payload(value: TransactionMetadatum) -> Result<Self, JsError> {
5363
if let Ok("reserve") = value.as_text().as_deref() {
5464
return Ok(Self::ReserveTransfer);
5565
}
@@ -58,22 +68,20 @@ impl TryFrom<TransactionMetadatum> for TokenTransferMetadatumV1 {
5868
receiver: ByteString(value.as_map()?.get_str("receiver")?.as_bytes()?),
5969
})
6070
}
61-
}
62-
63-
impl TryFrom<TokenTransferMetadatumV1> for TransactionMetadatum {
64-
type Error = JsError;
6571

66-
fn try_from(value: TokenTransferMetadatumV1) -> Result<Self, Self::Error> {
67-
match value {
72+
fn encode_payload(&self) -> Result<TransactionMetadatum, JsError> {
73+
match self {
74+
TokenTransferMetadatumV1::ReserveTransfer => {
75+
Ok(TransactionMetadatum::new_text("reserve".to_string())?)
76+
},
6877
TokenTransferMetadatumV1::UserTransfer { receiver } => {
6978
let receiver_label = TransactionMetadatum::new_text("receiver".to_string())?;
7079
let receiver_bytes = TransactionMetadatum::new_bytes(receiver.to_vec())?;
7180

7281
let mut map = MetadataMap::new();
7382
map.insert(&receiver_label, &receiver_bytes);
74-
Ok(Self::new_map(&map))
83+
Ok(TransactionMetadatum::new_map(&map))
7584
},
76-
TokenTransferMetadatumV1::ReserveTransfer => Ok(Self::new_text("reserve".to_string())?),
7785
}
7886
}
7987
}

0 commit comments

Comments
 (0)