z4_engine/
lib.rs

1#[macro_use]
2extern crate tracing;
3
4mod config;
5mod contracts;
6mod engine;
7mod p2p;
8mod pool;
9mod room;
10mod rpc;
11mod scan;
12
13/// Module for ws/http/p2p request with channel.
14#[cfg(feature = "request")]
15pub mod request;
16
17/// Z4 main config.
18pub use config::Config;
19
20/// Z4 main contracts.
21pub use contracts::{RoomMarket, SimpleGame, Token};
22
23/// Z4 main engine.
24pub use engine::Engine;
25
26/// Create z4 scan(sync from chain) channel.
27pub use scan::chain_channel;
28
29/// Export serde_json's json and Value.
30pub use serde_json::{json, Value};
31
32/// Export useful tdn core struct and functions.
33pub use tdn::{
34    prelude::{GroupId, Peer, PeerId, PeerKey, SendType},
35    types::rpc::rpc_response,
36};
37
38/// Export useful types
39pub use z4_types::*;
40
41use serde::{Deserialize, Serialize};
42
43/// P2P network message type
44#[derive(Serialize, Deserialize)]
45struct P2pMessage<'a> {
46    pub method: &'a str,
47    pub params: Vec<u8>,
48}
49
50/// The message type synced from chain
51pub enum ChainMessage {
52    /// create a room on the chain,
53    /// room_id, game_id, viewable, player account, player peer id, player pubkey,
54    /// salt by player, current block prevrandao
55    CreateRoom(
56        RoomId,
57        GameId,
58        bool,
59        Address,
60        PeerId,
61        [u8; 32],
62        [u8; 32],
63        [u8; 32],
64    ),
65    /// join a room on the chain,
66    /// room_id, player account, player peer id, player pubkey
67    JoinRoom(RoomId, Address, PeerId, [u8; 32]),
68    /// start a room on the chain,
69    /// room_id, game address
70    StartRoom(RoomId, Address),
71    /// accept a room on the chain,
72    /// room_id, sequencer account, sequencer websocket, params when accept
73    AcceptRoom(RoomId, PeerId, String, Vec<u8>),
74    /// game over in local,
75    /// room_id, result, proof
76    GameOverRoom(RoomId, Vec<u8>, Vec<u8>),
77    /// game over on the chain,
78    /// room_id
79    ChainOverRoom(RoomId),
80    /// need reprove in local
81    Reprove,
82}
83
84/// The message type when send to pool
85pub enum PoolMessage {
86    /// send a transaction to accept room,
87    /// room_id, params
88    AcceptRoom(RoomId, Vec<u8>),
89    /// send a transaction to over room,
90    /// room_id, result, proof
91    OverRoom(RoomId, Vec<u8>, Vec<u8>),
92    /// the transaction had been submmited
93    Submitted(RoomId),
94}