diff --git a/Cargo.toml b/Cargo.toml index a2143df..582361b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,15 +41,15 @@ base64 = "0.13" hex = "0.4" sha2 = "0.10" argon2 = "0.3" -blake3 = "1.2" +blake3 = "1.3" bincode = "1.3" aes-gcm = "0.9" sysinfo = "0.21" serde = { version = "1", features = ["derive"] } tokio = { version = "1", features = ["full"] } web3 = { version = "0.17", default-features = false, features = ["http-tls", "signing"] } -tdn = { version = "0.6", default-features = false, features = ["full"] } -tdn_did = { version = "0.6" } +tdn = { version = "0.7", default-features = false, features = ["full"] } +tdn_did = { version = "0.7" } tdn_storage = { git = "https://github.com/cympletech/tdn", branch="main" } chat_types = { version = "0.1", path = "./types/chat" } group_types = { version = "0.1", path = "./types/group" } @@ -62,3 +62,10 @@ openssl = { version = "0.10", features = ["vendored"] } # Add for cross-compile. [target.'cfg(target_os="android")'.dependencies] jni = { version = "0.19", default-features = false } + + +# DEBUG patch. +[patch.crates-io] +tdn = { git = "https://github.com/cympletech/tdn" } +tdn_types = { git = "https://github.com/cympletech/tdn" } +tdn_did = { git = "https://github.com/cympletech/tdn" } diff --git a/types/README.md b/types/README.md index 2001082..df998c4 100644 --- a/types/README.md +++ b/types/README.md @@ -2,6 +2,14 @@ ESSE bulit-in app open types. +### Default GROUP_ID +- 0 - Own distributed devices. +- 1 - Chat. +- 2 - Group Chat. +- 3 - DAO. +- 4 - Domain. +- 5 - Cloud. + ### Open Apps - Group Chat - Domain diff --git a/types/chat/Cargo.toml b/types/chat/Cargo.toml index bbd1e6f..bc0ffe6 100644 --- a/types/chat/Cargo.toml +++ b/types/chat/Cargo.toml @@ -11,4 +11,4 @@ license = "MIT/Apache-2.0" [dependencies] serde = { version = "1", features = ["derive"] } -tdn_types = { version = "0.6", default-features = false } \ No newline at end of file +tdn_types = { version = "0.7", default-features = false } \ No newline at end of file diff --git a/types/chat/src/lib.rs b/types/chat/src/lib.rs index 06939b0..4e72e3e 100644 --- a/types/chat/src/lib.rs +++ b/types/chat/src/lib.rs @@ -1,14 +1,18 @@ use serde::{Deserialize, Serialize}; -use tdn_types::{group::GroupId, primitive::PeerId}; +use tdn_types::{group::GroupId, primitives::PeerId}; + +/// Chat service default TDN GROUP ID. +#[rustfmt::skip] +pub const CHAT_ID: GroupId = 1; /// message type use in network. #[derive(Serialize, Deserialize, Clone)] pub enum NetworkMessage { - String(String), // content - Image(Vec), // image bytes. - File(String, Vec), // filename, file bytes. - Contact(String, GroupId, PeerId, Vec), // name, gid, addr, avatar bytes. - Record(Vec, u32), // record audio bytes. + String(String), // content + Image(Vec), // image bytes. + File(String, Vec), // filename, file bytes. + Contact(PeerId, String, Vec), // PeerId, name, avatar bytes. + Record(Vec, u32), // record audio bytes. Emoji, Phone, Video, diff --git a/types/cloud/Cargo.toml b/types/cloud/Cargo.toml index e94f071..403599c 100644 --- a/types/cloud/Cargo.toml +++ b/types/cloud/Cargo.toml @@ -11,5 +11,5 @@ license = "MIT/Apache-2.0" [dependencies] serde = { version = "1", features = ["derive"] } -tdn_types = { version = "0.6", default-features = false } -tdn_did = { version = "0.6", default-features = false } +tdn_types = { version = "0.7", default-features = false } +tdn_did = { version = "0.7", default-features = false } diff --git a/types/cloud/src/lib.rs b/types/cloud/src/lib.rs index 7c03db5..5f4e037 100644 --- a/types/cloud/src/lib.rs +++ b/types/cloud/src/lib.rs @@ -3,13 +3,7 @@ use tdn_did::Proof; use tdn_types::group::GroupId; /// Personal data cloud service default TDN GROUP ID. -#[rustfmt::skip] -pub const CLOUD_ID: GroupId = GroupId([ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 5, -]); +pub const CLOUD_ID: GroupId = 5; /// ESSE service to peer layer Event. #[derive(Serialize, Deserialize)] diff --git a/types/dao/Cargo.toml b/types/dao/Cargo.toml index 869e847..e3ff05a 100644 --- a/types/dao/Cargo.toml +++ b/types/dao/Cargo.toml @@ -12,5 +12,5 @@ license = "MIT/Apache-2.0" [dependencies] chat_types = { path = "../chat", version = "0.1" } serde = { version = "1", features = ["derive"] } -tdn_types = { version = "0.6", default-features = false } -tdn_did = { version = "0.6", default-features = false } +tdn_types = { version = "0.7", default-features = false } +tdn_did = { version = "0.7", default-features = false } diff --git a/types/dao/src/lib.rs b/types/dao/src/lib.rs index efb0758..970fd3b 100644 --- a/types/dao/src/lib.rs +++ b/types/dao/src/lib.rs @@ -1,17 +1,14 @@ use serde::{Deserialize, Serialize}; use tdn_did::Proof; -use tdn_types::{group::GroupId, primitive::PeerId}; +use tdn_types::{group::GroupId, primitives::PeerId}; use chat_types::NetworkMessage; /// Dao app(service) default TDN GROUP ID. -#[rustfmt::skip] -pub const DAO_ID: GroupId = GroupId([ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, -]); +pub const DAO_ID: GroupId = 3; + +/// Dao ID type. +pub type DaoId = u64; /// Group chat types. include: Encrypted, Private, Open. #[derive(Serialize, Deserialize, Clone, Copy, Debug, Eq, PartialEq)] @@ -54,10 +51,10 @@ pub enum DaoInfo { /// params: owner, owner_name, owner_avatar, Group ID, group_type, is_must_agree_by_manager, /// group_name, group_bio, group_avatar. Common( - GroupId, + PeerId, String, Vec, - GroupId, + DaoId, GroupType, bool, String, @@ -67,10 +64,10 @@ pub enum DaoInfo { /// params: owner, owner_name, owner_avatar, Group ID, is_must_agree_by_manager, key_hash, /// group_name(bytes), group_bio(bytes), group_avatar(bytes). Encrypted( - GroupId, + PeerId, String, Vec, - GroupId, + DaoId, bool, Vec, Vec, @@ -82,12 +79,12 @@ pub enum DaoInfo { /// Dao chat connect data structure. /// params: Group ID, join_proof. #[derive(Serialize, Deserialize)] -pub struct LayerConnect(pub GroupId, pub ConnectProof); +pub struct LayerConnect(pub DaoId, pub ConnectProof); /// Dao chat connect success result data structure. /// params: Group ID, group current height. #[derive(Serialize, Deserialize)] -pub struct LayerResult(pub GroupId, pub i64); +pub struct LayerResult(pub DaoId, pub i64); /// Dao chat connect proof. #[derive(Serialize, Deserialize)] @@ -108,7 +105,7 @@ pub enum JoinProof { Open(String, Vec), /// when is invate, it will take group_manager's proof for invate. /// params: invite_by_account, invite_proof, member name, member avatar. - Invite(GroupId, Proof, String, Vec), + Invite(PeerId, Proof, String, Vec), /// zero-knowledge-proof. not has account id. /// verify(proof, key_hash, current_peer_addr). Zkp(Proof), // TODO MOCK-PROOF @@ -142,11 +139,11 @@ impl CheckType { #[derive(Serialize, Deserialize)] pub enum LayerEvent { /// offline. as BaseLayerEvent. - Offline(GroupId), + Offline(DaoId), /// suspend. as BaseLayerEvent. - Suspend(GroupId), + Suspend(DaoId), /// actived. as BaseLayerEvent. - Actived(GroupId), + Actived(DaoId), /// check if account has permission to create group, and supported group types. Check, /// result check. @@ -157,36 +154,36 @@ pub enum LayerEvent { Create(DaoInfo, Proof), /// result create group success. /// params: Group ID, is_ok. - CreateResult(GroupId, bool), + CreateResult(DaoId, bool), /// join group request. Group ID, Join Proof and info, request db id. - Request(GroupId, JoinProof), + Request(DaoId, JoinProof), /// request need manager to handle. - RequestHandle(GroupId, GroupId, PeerId, JoinProof, i64, i64), + RequestHandle(DaoId, PeerId, JoinProof, i64, i64), /// manager handle request result. Group ID, request db id, is ok. - RequestResult(GroupId, i64, bool), + RequestResult(DaoId, i64, bool), /// agree join request. - Agree(GroupId, DaoInfo), + Agree(DaoId, DaoInfo), /// reject join request. Group ID, if lost efficacy. - Reject(GroupId, bool), - /// online group member. Group ID, member id, member address. - MemberOnline(GroupId, GroupId, PeerId), + Reject(DaoId, bool), + /// online group member. Group ID, member id. + MemberOnline(DaoId, PeerId), /// offline group member. Group ID, member id. - MemberOffline(GroupId, GroupId), + MemberOffline(DaoId, PeerId), /// sync online members. - MemberOnlineSync(GroupId), + MemberOnlineSync(DaoId), /// sync online members result. - MemberOnlineSyncResult(GroupId, Vec<(GroupId, PeerId)>), + MemberOnlineSyncResult(DaoId, Vec), /// sync group event. Group ID, height, event. - Sync(GroupId, i64, Event), + Sync(DaoId, i64, Event), /// packed sync event request. Group ID, from. - SyncReq(GroupId, i64), + SyncReq(DaoId, i64), /// packed sync event. Group ID, current height, from height, to height, packed events. - Packed(GroupId, i64, i64, i64, Vec), + Packed(DaoId, i64, i64, i64, Vec), } impl LayerEvent { /// get event's group id. - pub fn gcd(&self) -> Option<&GroupId> { + pub fn gcd(&self) -> Option<&DaoId> { match self { Self::Offline(gcd) => Some(gcd), Self::Suspend(gcd) => Some(gcd), @@ -238,14 +235,14 @@ pub enum PackedEvent { GroupManagerAdd, GroupManagerDel, GroupClose, - /// params: member id, member address, member name, member avatar. - MemberInfo(GroupId, PeerId, String, Vec), - /// params: member id, member address, member name, member avatar, member join time. - MemberJoin(GroupId, PeerId, String, Vec, i64), + /// params: member id, member name, member avatar. + MemberInfo(PeerId, String, Vec), + /// params: member id, member name, member avatar, member join time. + MemberJoin(PeerId, String, Vec, i64), /// params: member id, - MemberLeave(GroupId), + MemberLeave(PeerId), /// params: member id, message, message time. - MessageCreate(GroupId, NetworkMessage, i64), + MessageCreate(PeerId, NetworkMessage, i64), /// had in before. None, } @@ -258,12 +255,12 @@ pub enum Event { GroupManagerAdd, GroupManagerDel, GroupClose, - /// params: member id, member address, member name, member avatar. - MemberInfo(GroupId, PeerId, String, Vec), - /// params: member id, member address, member name, member avatar, member join time. - MemberJoin(GroupId, PeerId, String, Vec, i64), + /// params: member id, member name, member avatar. + MemberInfo(PeerId, String, Vec), + /// params: member id, member name, member avatar, member join time. + MemberJoin(PeerId, String, Vec, i64), /// params: member id, - MemberLeave(GroupId), + MemberLeave(PeerId), /// params: member id, message, height. - MessageCreate(GroupId, NetworkMessage, i64), + MessageCreate(PeerId, NetworkMessage, i64), } diff --git a/types/data/Cargo.toml b/types/data/Cargo.toml index 7477206..5d4fe1b 100644 --- a/types/data/Cargo.toml +++ b/types/data/Cargo.toml @@ -14,5 +14,5 @@ default = ["tdn"] tdn = ["tdn_did", "tdn_types"] [dependencies] -tdn_did = { version = "0.6", default-features = false, optional = true } -tdn_types = { version = "0.6", default-features = false, optional = true } +tdn_did = { version = "0.7", default-features = false, optional = true } +tdn_types = { version = "0.7", default-features = false, optional = true } diff --git a/types/data/src/lib.rs b/types/data/src/lib.rs index fffd072..4c99b75 100644 --- a/types/data/src/lib.rs +++ b/types/data/src/lib.rs @@ -101,5 +101,5 @@ impl Data { } } -#[cfg(feature = "tdn")] -pub mod tdn; +//#[cfg(feature = "tdn")] +//pub mod tdn; diff --git a/types/data/src/tdn.rs b/types/data/src/tdn.rs index 699a48d..158e0da 100644 --- a/types/data/src/tdn.rs +++ b/types/data/src/tdn.rs @@ -1,5 +1,5 @@ use tdn_did::{Proof, PROOF_LENGTH}; -use tdn_types::group::{GroupId, GROUP_LENGTH}; +use tdn_types::group::{GroupId, GROUP_BYTES_LENGTH}; use crate::{Data, OwnerId}; diff --git a/types/domain/Cargo.toml b/types/domain/Cargo.toml index ba723fc..d5548a4 100644 --- a/types/domain/Cargo.toml +++ b/types/domain/Cargo.toml @@ -11,5 +11,5 @@ license = "MIT/Apache-2.0" [dependencies] serde = { version = "1", features = ["derive"] } -tdn_types = { version = "0.6", default-features = false } -tdn_did = { version = "0.6", default-features = false } +tdn_types = { version = "0.7", default-features = false } +tdn_did = { version = "0.7", default-features = false } diff --git a/types/domain/src/lib.rs b/types/domain/src/lib.rs index ce6f9e9..473770b 100644 --- a/types/domain/src/lib.rs +++ b/types/domain/src/lib.rs @@ -1,17 +1,11 @@ use serde::{Deserialize, Serialize}; use tdn_did::Proof; -use tdn_types::{group::GroupId, primitive::PeerId}; +use tdn_types::{group::GroupId, primitives::PeerId}; // Same ID can has many name !. /// Group chat app(service) default TDN GROUP ID. -#[rustfmt::skip] -pub const DOMAIN_ID: GroupId = GroupId([ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, -]); +pub const DOMAIN_ID: GroupId = 4; /// ESSE domain service layer Event. #[derive(Serialize, Deserialize)] @@ -31,8 +25,8 @@ pub enum ServerEvent { /// params: name, is_ok. Result(String, bool), /// a identity info. - /// params: user_name, user_ID, user_address, user_bio, user_avatar. - Info(String, GroupId, PeerId, String, Vec), + /// params: user_id, user_name, user_bio, user_avatar. + Info(PeerId, String, String, Vec), /// not found a user by name. None(String), /// current name is active. @@ -42,8 +36,8 @@ pub enum ServerEvent { /// params: name. Deleted(String), /// response the make friend. - /// params: remote_ID, name, is_ok. - Response(GroupId, String, bool), + /// params: remote_id, name, is_ok. + Response(PeerId, String, bool), } /// ESSE domain peer to service layer Event. diff --git a/types/group/Cargo.toml b/types/group/Cargo.toml index 8afc51a..a93cbe0 100644 --- a/types/group/Cargo.toml +++ b/types/group/Cargo.toml @@ -12,5 +12,5 @@ license = "MIT/Apache-2.0" [dependencies] chat_types = { path = "../chat", version = "0.1" } serde = { version = "1", features = ["derive"] } -tdn_types = { version = "0.6", default-features = false } -tdn_did = { version = "0.6", default-features = false } +tdn_types = { version = "0.7", default-features = false } +tdn_did = { version = "0.7", default-features = false } diff --git a/types/group/src/lib.rs b/types/group/src/lib.rs index 451f5c2..bd6250e 100644 --- a/types/group/src/lib.rs +++ b/types/group/src/lib.rs @@ -1,72 +1,69 @@ use serde::{Deserialize, Serialize}; use tdn_did::Proof; -use tdn_types::{group::GroupId, primitive::PeerId}; +use tdn_types::{group::GroupId, primitives::PeerId}; use chat_types::NetworkMessage; /// Group chat app(service) default TDN GROUP ID. -#[rustfmt::skip] -pub const GROUP_CHAT_ID: GroupId = GroupId([ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, -]); +pub const GROUP_CHAT_ID: GroupId = 2; + +/// Group chat Group ID. +pub type GroupChatId = u64; /// Group chat connect data structure. -/// params: Group ID, join_proof. +/// params: Group Chat ID, join_proof. #[derive(Serialize, Deserialize)] -pub struct LayerConnect(pub GroupId, pub Proof); +pub struct LayerConnect(pub GroupChatId, pub Proof); /// Group chat connect success result data structure. /// params: Group ID, group name, group current height. #[derive(Serialize, Deserialize)] -pub struct LayerResult(pub GroupId, pub String, pub i64); +pub struct LayerResult(pub GroupChatId, pub String, pub i64); /// ESSE Group chat app's layer Event. #[derive(Serialize, Deserialize)] pub enum LayerEvent { /// offline. as BaseLayerEvent. - Offline(GroupId), + Offline(GroupChatId), /// suspend. as BaseLayerEvent. - Suspend(GroupId), + Suspend(GroupChatId), /// actived. as BaseLayerEvent. - Actived(GroupId), - /// online group member. Group ID, member id, member address. - MemberOnline(GroupId, GroupId, PeerId), + Actived(GroupChatId), + /// online group member. Group ID, member id. + MemberOnline(GroupChatId, PeerId), /// offline group member. Group ID, member id. - MemberOffline(GroupId, GroupId), + MemberOffline(GroupChatId, PeerId), /// sync online members. - MemberOnlineSync(GroupId), + MemberOnlineSync(GroupChatId), /// sync online members result. - MemberOnlineSyncResult(GroupId, Vec<(GroupId, PeerId)>), + MemberOnlineSyncResult(GroupChatId, Vec), /// Change the group name. - GroupName(GroupId, String), + GroupName(GroupChatId, String), /// close the group chat. - GroupClose(GroupId), + GroupClose(GroupChatId), /// sync group event. Group ID, height, event. - Sync(GroupId, i64, Event), + Sync(GroupChatId, i64, Event), /// peer sync event request. Group ID, from. - SyncReq(GroupId, i64), + SyncReq(GroupChatId, i64), /// sync members status. /// Group ID, current height, from height, to height, /// add members(height, member id, addr, name, avatar), /// leaved members(height, member id), /// add messages(height, member id, message, time). SyncRes( - GroupId, + GroupChatId, i64, i64, i64, - Vec<(i64, GroupId, PeerId, String, Vec)>, - Vec<(i64, GroupId)>, - Vec<(i64, GroupId, NetworkMessage, i64)>, + Vec<(i64, PeerId, String, Vec)>, + Vec<(i64, PeerId)>, + Vec<(i64, PeerId, NetworkMessage, i64)>, ), } impl LayerEvent { /// get event's group id. - pub fn gcd(&self) -> &GroupId { + pub fn gcd(&self) -> &GroupChatId { match self { Self::Offline(gcd) => gcd, Self::Suspend(gcd) => gcd, @@ -87,10 +84,10 @@ impl LayerEvent { /// Group chat event. #[derive(Serialize, Deserialize, Clone)] pub enum Event { - /// params: member id, member address, member name, member avatar. - MemberJoin(GroupId, PeerId, String, Vec), + /// params: member id, member name, member avatar. + MemberJoin(PeerId, String, Vec), /// params: member id, - MemberLeave(GroupId), + MemberLeave(PeerId), /// params: member id, message, message time. - MessageCreate(GroupId, NetworkMessage, i64), + MessageCreate(PeerId, NetworkMessage, i64), } diff --git a/types/primitives/Cargo.toml b/types/primitives/Cargo.toml index ba8b186..0010f38 100644 --- a/types/primitives/Cargo.toml +++ b/types/primitives/Cargo.toml @@ -10,5 +10,4 @@ keywords = ["distributed", "p2p", "did", "ESSE"] license = "MIT/Apache-2.0" [dependencies] -blake3 = "1.3" -tdn_types = { version = "0.6", default-features = false } \ No newline at end of file +tdn_types = { version = "0.7", default-features = false } \ No newline at end of file diff --git a/types/primitives/src/lib.rs b/types/primitives/src/lib.rs index 1b77202..0209250 100644 --- a/types/primitives/src/lib.rs +++ b/types/primitives/src/lib.rs @@ -75,7 +75,18 @@ pub mod bs32 { } } -pub fn id(peer: &tdn_types::primitive::PeerId) -> String { - let hash = blake3::hash(&peer.0); - bs32::encode(&hash.as_bytes()[0..30]) +use tdn_types::primitives::{new_io_error, PeerId, PEER_ID_LENGTH}; + +pub fn id_to_string(peer: &PeerId) -> String { + bs32::encode(&peer.0) +} + +pub fn id_from_string(s: &str) -> std::io::Result { + let data = bs32::decode(s).ok_or(new_io_error("id from string is failure."))?; + if data.len() != PEER_ID_LENGTH { + return Err(new_io_error("id from string is failure.")); + } + let mut bytes = [0u8; PEER_ID_LENGTH]; + bytes.copy_from_slice(&data); + Ok(PeerId(bytes)) }