Skip to content

Commit

Permalink
Merge pull request fedimint#5851 from joschisan/lnv2_extensible_outcome
Browse files Browse the repository at this point in the history
Lnv2 extensible outcome
  • Loading branch information
elsirion authored Aug 15, 2024
2 parents 1d84569 + de5530c commit d4a043e
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 17 deletions.
14 changes: 8 additions & 6 deletions gateway/ln-gateway/src/gateway_module_v2/receive_sm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ use fedimint_core::task::sleep;
use fedimint_core::{NumPeersExt, OutPoint, PeerId, TransactionId};
use fedimint_lnv2_client::LightningClientStateMachines;
use fedimint_lnv2_common::contracts::IncomingContract;
use fedimint_lnv2_common::{LightningInput, LightningInputV0, LightningOutputOutcome};
use fedimint_lnv2_common::{
LightningInput, LightningInputV0, LightningOutputOutcome, LightningOutputOutcomeV0,
};
use tpe::{aggregate_decryption_shares, AggregatePublicKey, DecryptionKeyShare, PublicKeyShare};
use tracing::{error, trace};

Expand Down Expand Up @@ -157,18 +159,18 @@ impl ReceiveStateMachine {
let verify_decryption_share = move |peer, outcome: SerdeOutputOutcome| {
let outcome = deserialize_outcome::<LightningOutputOutcome>(&outcome, &module_decoder)?;

match outcome {
LightningOutputOutcome::Incoming(share) => {
match outcome.ensure_v0_ref()? {
LightningOutputOutcomeV0::Incoming(share) => {
if !decryption_contract.verify_decryption_share(
tpe_pks.get(&peer).ok_or(anyhow!("Unknown peer pk"))?,
&share,
share,
) {
bail!("Invalid decryption share");
}

Ok(share)
Ok(*share)
}
LightningOutputOutcome::Outgoing => {
LightningOutputOutcomeV0::Outgoing => {
bail!("Unexpected outcome variant");
}
}
Expand Down
12 changes: 9 additions & 3 deletions modules/fedimint-lnv2-common/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,21 @@ impl std::fmt::Display for LightningOutputV0 {
}
}

extensible_associated_module_type!(
LightningOutputOutcome,
LightningOutputOutcomeV0,
UnknownLightningOutputOutcomeVariantError
);

#[derive(Debug, Clone, Eq, PartialEq, Hash, Deserialize, Serialize, Encodable, Decodable)]
pub enum LightningOutputOutcome {
pub enum LightningOutputOutcomeV0 {
Outgoing,
Incoming(DecryptionKeyShare),
}

impl std::fmt::Display for LightningOutputOutcome {
impl std::fmt::Display for LightningOutputOutcomeV0 {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "LightningOutputOutcome")
write!(f, "LightningOutputOutcomeV0")
}
}

Expand Down
4 changes: 1 addition & 3 deletions modules/fedimint-lnv2-server/src/db.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
use fedimint_core::encoding::{Decodable, Encodable};
use fedimint_core::{impl_db_lookup, impl_db_record, OutPoint, PeerId};
use fedimint_lnv2_common::contracts::{IncomingContract, OutgoingContract};
use fedimint_lnv2_common::{ContractId, GatewayEndpoint};
use fedimint_lnv2_common::{ContractId, GatewayEndpoint, LightningOutputOutcome};
use serde::{Deserialize, Serialize};
use strum_macros::EnumIter;

use crate::LightningOutputOutcome;

#[repr(u8)]
#[derive(Clone, EnumIter, Debug)]
pub enum DbKeyPrefix {
Expand Down
13 changes: 8 additions & 5 deletions modules/fedimint-lnv2-server/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ use fedimint_lnv2_common::endpoint_constants::{
use fedimint_lnv2_common::{
ContractId, GatewayEndpoint, LightningCommonInit, LightningConsensusItem, LightningInput,
LightningInputError, LightningInputV0, LightningModuleTypes, LightningOutput,
LightningOutputError, LightningOutputOutcome, LightningOutputV0, OutgoingWitness,
MODULE_CONSENSUS_VERSION,
LightningOutputError, LightningOutputOutcome, LightningOutputOutcomeV0, LightningOutputV0,
OutgoingWitness, MODULE_CONSENSUS_VERSION,
};
use fedimint_server::config::distributedgen::{evaluate_polynomial_g1, PeerHandleOps};
use fedimint_server::net::api::check_auth;
Expand Down Expand Up @@ -465,7 +465,7 @@ impl ServerModule for Lightning {
return Err(LightningOutputError::ContractAlreadyExists);
}

LightningOutputOutcome::Outgoing
LightningOutputOutcomeV0::Outgoing
}
LightningOutputV0::Incoming(contract) => {
if !contract.verify() {
Expand All @@ -486,12 +486,15 @@ impl ServerModule for Lightning {

let dk_share = contract.create_decryption_key_share(&self.cfg.private.sk);

LightningOutputOutcome::Incoming(dk_share)
LightningOutputOutcomeV0::Incoming(dk_share)
}
};

if dbtx
.insert_entry(&OutputOutcomeKey(out_point), &outcome)
.insert_entry(
&OutputOutcomeKey(out_point),
&LightningOutputOutcome::V0(outcome),
)
.await
.is_some()
{
Expand Down

0 comments on commit d4a043e

Please sign in to comment.