Skip to content

Commit 50eff65

Browse files
committed
fix: validator can not start up
1 parent 3ce04a3 commit 50eff65

File tree

3 files changed

+60
-33
lines changed

3 files changed

+60
-33
lines changed

core/src/types/transactor_params.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ pub struct AttachGameParams {
1616

1717
#[derive(Debug, Clone, PartialEq, Eq, BorshDeserialize, BorshSerialize)]
1818
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19+
#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
1920
pub struct CheckpointParams {
2021
pub settle_version: u64,
2122
}

transactor/src/component/connection.rs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,21 @@ use jsonrpsee::{
2020
rpc_params,
2121
ws_client::{WsClient, WsClientBuilder},
2222
};
23-
use race_core::error::{Error, Result};
2423
use race_core::types::{BroadcastFrame, SubscribeEventParams};
24+
use race_core::{
25+
checkpoint::CheckpointOffChain,
26+
error::{Error, Result},
27+
types::CheckpointParams,
28+
};
2529
use race_core::{
2630
connection::ConnectionT,
2731
encryptor::EncryptorT,
2832
types::{AttachGameParams, ExitGameParams, SubmitEventParams},
2933
};
3034

31-
use crate::{frame::EventFrame, utils::current_timestamp};
3235
use crate::utils::base64_decode;
3336
use crate::{component::common::Attachable, utils::base64_encode};
37+
use crate::{frame::EventFrame, utils::current_timestamp};
3438

3539
/// A connection to local event bus, for transactor loopback.
3640
#[allow(dead_code)]
@@ -187,7 +191,7 @@ impl RemoteConnection {
187191
}
188192
Err(e) => {
189193
warn!("Error in request[{}]: {:?}", method, e);
190-
},
194+
}
191195
}
192196

193197
if retries < self.max_retries {
@@ -199,6 +203,22 @@ impl RemoteConnection {
199203
}
200204
}
201205

206+
pub async fn get_checkpoint_off_chain(
207+
&self,
208+
game_addr: &str,
209+
params: CheckpointParams,
210+
) -> Result<Option<CheckpointOffChain>> {
211+
let req = self.make_request_no_sig(game_addr, &params)?;
212+
213+
match self.request::<Option<Vec<u8>>>("get_checkpoint", req).await {
214+
Ok(Some(res)) => {
215+
let checkpoint_off_chain = CheckpointOffChain::try_from_slice(&res)?;
216+
Ok(Some(checkpoint_off_chain))
217+
}
218+
_ => Ok(None),
219+
}
220+
}
221+
202222
pub async fn subscribe_events(
203223
&self,
204224
game_addr: &str,

transactor/src/handle/validator.rs

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ use crate::component::{
55
Voter, WrappedClient, WrappedHandler,
66
};
77
use crate::frame::{EventFrame, SignalFrame};
8-
use race_core::error::{Error, Result};
98
use race_core::context::GameContext;
9+
use race_core::error::{Error, Result};
1010
use race_core::storage::StorageT;
1111
use race_core::transport::TransportT;
12-
use race_core::types::{ClientMode, GameMode, GetCheckpointParams, ServerAccount};
12+
use race_core::types::{CheckpointParams, ClientMode, GameMode, ServerAccount};
1313
use race_encryptor::Encryptor;
1414
use race_env::TransactorConfig;
1515
use tokio::sync::mpsc;
@@ -29,43 +29,57 @@ impl ValidatorHandle {
2929
server_account: &ServerAccount,
3030
encryptor: Arc<Encryptor>,
3131
transport: Arc<dyn TransportT + Send + Sync>,
32-
storage: Arc<dyn StorageT + Send + Sync>,
32+
_storage: Arc<dyn StorageT + Send + Sync>,
3333
signal_tx: mpsc::Sender<SignalFrame>,
3434
_config: &TransactorConfig,
3535
) -> Result<Self> {
36-
info!(
37-
"Start game handle for {} with Validator mode",
38-
game_addr,
39-
);
36+
info!("Start game handle for {} with Validator mode", game_addr,);
4037
let Some(game_account) = transport.get_game_account(game_addr).await? else {
4138
return Err(Error::GameAccountNotFound);
4239
};
4340

44-
let checkpoint_off_chain = storage
45-
.get_checkpoint(GetCheckpointParams {
46-
game_addr: game_addr.to_owned(),
41+
let transactor_addr = game_account
42+
.transactor_addr
43+
.as_ref()
44+
.ok_or(Error::GameNotServed)?;
45+
let transactor_account = transport
46+
.get_server_account(transactor_addr)
47+
.await?
48+
.ok_or(Error::CantFindTransactor)?;
49+
50+
let connection = Arc::new(
51+
RemoteConnection::try_new(
52+
&server_account.addr,
53+
&transactor_account.endpoint,
54+
encryptor.clone(),
55+
)
56+
.await?,
57+
);
58+
59+
let checkpoint_off_chain = connection.get_checkpoint_off_chain(
60+
game_addr,
61+
CheckpointParams {
4762
settle_version: game_account.settle_version,
48-
})
49-
.await?;
63+
},
64+
).await?;
65+
66+
// let checkpoint_off_chain = storage
67+
// .get_checkpoint(GetCheckpointParams {
68+
// game_addr: game_addr.to_owned(),
69+
// settle_version: game_account.settle_version,
70+
// })
71+
// .await?;
5072

5173
let game_context = GameContext::try_new(&game_account, checkpoint_off_chain)?;
5274
let checkpoint = game_context.checkpoint().clone();
5375

54-
let Some(bundle_account) = transport.get_game_bundle(&game_account.bundle_addr).await? else {
76+
let Some(bundle_account) = transport.get_game_bundle(&game_account.bundle_addr).await?
77+
else {
5578
return Err(Error::GameBundleNotFound);
5679
};
5780

5881
let handler = WrappedHandler::load_by_bundle(&bundle_account, encryptor.clone()).await?;
5982

60-
let transactor_addr = game_account
61-
.transactor_addr
62-
.as_ref()
63-
.ok_or(Error::GameNotServed)?;
64-
let transactor_account = transport
65-
.get_server_account(transactor_addr)
66-
.await?
67-
.ok_or(Error::CantFindTransactor)?;
68-
6983
info!("Creating components");
7084
let event_bus = EventBus::new(game_account.addr.clone());
7185

@@ -76,14 +90,6 @@ impl ValidatorHandle {
7690
EventLoop::init(handler, game_context, ClientMode::Validator, GameMode::Main);
7791
let mut event_loop_handle = event_loop.start(&game_account.addr, event_loop_ctx);
7892

79-
let connection = Arc::new(
80-
RemoteConnection::try_new(
81-
&server_account.addr,
82-
&transactor_account.endpoint,
83-
encryptor.clone(),
84-
)
85-
.await?,
86-
);
8793
let (subscriber, subscriber_context) =
8894
Subscriber::init(&game_account, server_account, connection.clone());
8995
let mut subscriber_handle = subscriber.start(&game_account.addr, subscriber_context);

0 commit comments

Comments
 (0)