use cosmwasm_std::{
to_binary, Ibc3ChannelOpenResponse, IbcChannelOpenMsg, IbcChannelOpenResponse, IbcOrder,
};
use error::HandshakeError;
pub const POLYTONE_VERSION: &str = "polytone-1";
pub fn note_version() -> String {
format!("{POLYTONE_VERSION}-note")
}
pub fn voice_version() -> String {
format!("{POLYTONE_VERSION}-voice")
}
fn open(
msg: &IbcChannelOpenMsg,
extensions: &[&str],
version: String,
counterparty_version: String,
) -> Result<IbcChannelOpenResponse, HandshakeError> {
match msg {
IbcChannelOpenMsg::OpenInit { channel } => {
if channel.version != POLYTONE_VERSION {
Err(HandshakeError::ProtocolMismatch {
actual: channel.version.clone(),
expected: POLYTONE_VERSION.to_string(),
})
} else if channel.order != IbcOrder::Unordered {
Err(HandshakeError::ExpectUnordered)
} else {
Ok(Some(Ibc3ChannelOpenResponse { version }))
}
}
IbcChannelOpenMsg::OpenTry {
channel,
counterparty_version: cv,
} => {
if *cv != counterparty_version {
Err(HandshakeError::WrongCounterparty)
} else if channel.order != IbcOrder::Unordered {
Err(HandshakeError::ExpectUnordered)
} else {
Ok(Some(Ibc3ChannelOpenResponse {
version: to_binary(extensions).unwrap().to_base64(),
}))
}
}
}
}
pub mod error;
pub mod note;
pub mod voice;
#[cfg(test)]
mod tests;