sidechain_domain/
cross_chain_app.rs1use crate::SidechainPublicKey;
4use parity_scale_codec::MaxEncodedLen;
5use sp_core::crypto::AccountId32;
6use sp_runtime::app_crypto::{app_crypto, ecdsa};
7use sp_runtime::traits::IdentifyAccount;
8use sp_runtime::{KeyTypeId, MultiSigner};
9use sp_std::vec::Vec;
10
11pub const KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"crch");
13
14app_crypto!(ecdsa, KEY_TYPE_ID);
15
16impl MaxEncodedLen for Signature {
17 fn max_encoded_len() -> usize {
18 ecdsa::Signature::max_encoded_len()
19 }
20}
21
22impl From<Signature> for Vec<u8> {
23 fn from(value: Signature) -> Self {
24 value.into_inner().0.to_vec()
25 }
26}
27
28impl From<Public> for AccountId32 {
29 fn from(value: Public) -> Self {
30 MultiSigner::from(ecdsa::Public::from(value)).into_account()
31 }
32}
33
34impl From<Public> for Vec<u8> {
35 fn from(value: Public) -> Self {
36 value.into_inner().0.to_vec()
37 }
38}
39
40impl TryFrom<SidechainPublicKey> for Public {
41 type Error = SidechainPublicKey;
42 fn try_from(pubkey: SidechainPublicKey) -> Result<Self, Self::Error> {
43 Public::try_from(pubkey.0.as_slice()).map_err(|_| pubkey)
44 }
45}