Skip to content

Commit 80f7d86

Browse files
committed
dex: implement EventSwap domain type
1 parent cb8f590 commit 80f7d86

File tree

2 files changed

+70
-12
lines changed

2 files changed

+70
-12
lines changed

crates/core/component/dex/src/component/action_handler/swap.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use async_trait::async_trait;
55
use cnidarium::StateWrite;
66
use cnidarium_component::ActionHandler;
77
use penumbra_proof_params::SWAP_PROOF_VERIFICATION_KEY;
8-
use penumbra_proto::StateWriteProto;
8+
use penumbra_proto::{DomainType as _, StateWriteProto};
99
use penumbra_sct::component::source::SourceContext;
1010

1111
use crate::{
@@ -66,7 +66,7 @@ impl ActionHandler for Swap {
6666
);
6767
state.add_recently_accessed_asset(swap.body.trading_pair.asset_2(), fixed_candidates);
6868

69-
state.record_proto(event::swap(self));
69+
state.record_proto(event::EventSwap::from(self).to_proto());
7070

7171
Ok(())
7272
}

crates/core/component/dex/src/event.rs

Lines changed: 68 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,81 @@ use crate::{
55
BatchSwapOutputData, CandlestickData, DirectedTradingPair, SwapExecution, TradingPair,
66
};
77
use anyhow::{anyhow, Context};
8-
use penumbra_sct::Nullifier;
9-
use penumbra_tct::StateCommitment;
10-
use prost::Name;
11-
128
use penumbra_asset::asset;
139
use penumbra_num::Amount;
1410
use penumbra_proto::{penumbra::core::component::dex::v1 as pb, DomainType};
11+
use penumbra_sct::Nullifier;
12+
use penumbra_tct::StateCommitment;
13+
use prost::Name as _;
1514

16-
pub fn swap(swap: &Swap) -> pb::EventSwap {
17-
pb::EventSwap {
18-
trading_pair: Some(swap.body.trading_pair.into()),
19-
delta_1_i: Some(swap.body.delta_1_i.into()),
20-
delta_2_i: Some(swap.body.delta_2_i.into()),
21-
swap_commitment: Some(swap.body.payload.commitment.into()),
15+
#[derive(Clone, Debug)]
16+
pub struct EventSwap {
17+
pub trading_pair: TradingPair,
18+
pub delta_1_i: Amount,
19+
pub delta_2_i: Amount,
20+
pub swap_commitment: StateCommitment,
21+
}
22+
23+
impl From<Swap> for EventSwap {
24+
fn from(value: Swap) -> Self {
25+
Self::from(&value)
2226
}
2327
}
2428

29+
impl From<&Swap> for EventSwap {
30+
fn from(value: &Swap) -> Self {
31+
Self {
32+
trading_pair: value.body.trading_pair,
33+
delta_1_i: value.body.delta_1_i,
34+
delta_2_i: value.body.delta_2_i,
35+
swap_commitment: value.body.payload.commitment,
36+
}
37+
}
38+
}
39+
40+
impl TryFrom<pb::EventSwap> for EventSwap {
41+
type Error = anyhow::Error;
42+
43+
fn try_from(value: pb::EventSwap) -> Result<Self, Self::Error> {
44+
fn inner(value: pb::EventSwap) -> anyhow::Result<EventSwap> {
45+
Ok(EventSwap {
46+
trading_pair: value
47+
.trading_pair
48+
.ok_or(anyhow!("missing `trading_pair`"))?
49+
.try_into()?,
50+
delta_1_i: value
51+
.delta_1_i
52+
.ok_or(anyhow!("missing `delta_1_i`"))?
53+
.try_into()?,
54+
delta_2_i: value
55+
.delta_2_i
56+
.ok_or(anyhow!("missing `delta_2_i`"))?
57+
.try_into()?,
58+
swap_commitment: value
59+
.swap_commitment
60+
.ok_or(anyhow!("missing `swap_commitment`"))?
61+
.try_into()?,
62+
})
63+
}
64+
inner(value).context(format!("parsing {}", pb::EventSwap::NAME))
65+
}
66+
}
67+
68+
impl From<EventSwap> for pb::EventSwap {
69+
fn from(value: EventSwap) -> Self {
70+
Self {
71+
trading_pair: Some(value.trading_pair.into()),
72+
delta_1_i: Some(value.delta_1_i.into()),
73+
delta_2_i: Some(value.delta_2_i.into()),
74+
swap_commitment: Some(value.swap_commitment.into()),
75+
}
76+
}
77+
}
78+
79+
impl DomainType for EventSwap {
80+
type Proto = pb::EventSwap;
81+
}
82+
2583
#[derive(Clone, Debug)]
2684
pub struct EventSwapClaim {
2785
pub trading_pair: TradingPair,

0 commit comments

Comments
 (0)