Skip to content
This repository has been archived by the owner on Jan 11, 2024. It is now read-only.

Refactor top down #258

Merged
merged 10 commits into from
Jul 25, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
fix top down validators
  • Loading branch information
cryptoAtwill committed Jul 25, 2023
commit 37c20f1e78a529c7d64369e1dae7256baaf00b85
7 changes: 5 additions & 2 deletions src/manager/evm/manager.rs
Original file line number Diff line number Diff line change
@@ -330,9 +330,12 @@ impl SubnetManager for EthSubnetManager {
async fn get_validator_set(
&self,
subnet_id: &SubnetID,
gateway: Address,
gateway: Option<Address>,
) -> Result<QueryValidatorSetResponse> {
self.ensure_same_gateway(&gateway)?;
// we do optionally check as gateway addr is already part of the struct
if let Some(addr) = gateway {
self.ensure_same_gateway(&addr)?;
}

// get genesis epoch from gateway
let evm_subnet_id = gateway::SubnetID::try_from(subnet_id)?;
18 changes: 16 additions & 2 deletions src/manager/fevm.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
use std::str::FromStr;
// Copyright 2022-2023 Protocol Labs
// SPDX-License-Identifier: MIT
use crate::checkpoint::{
@@ -7,7 +8,7 @@ use crate::checkpoint::{
use crate::jsonrpc::JsonRpcClientImpl;
use crate::lotus::client::LotusJsonRPCClient;
use crate::manager::evm::subnet_contract;
use crate::manager::{EthManager, EthSubnetManager};
use crate::manager::{EthManager, EthSubnetManager, SubnetManager};
use anyhow::anyhow;
use async_trait::async_trait;
use fil_actors_runtime::cbor;
@@ -154,7 +155,20 @@ impl CheckpointQuery<TopDownCheckpoint> for FevmSubnetManager {
}

async fn validators(&self, subnet_id: &SubnetID) -> anyhow::Result<Vec<Address>> {
self.evm_subnet_manager.validators(subnet_id).await
let r = self
.evm_subnet_manager
.get_validator_set(subnet_id, None)
.await?;
if let Some(validators) = r.validator_set.validators {
let v = validators
.into_iter()
.map(|v| Address::from_str(&v.worker_addr.unwrap()))
.collect::<Result<Vec<_>, _>>()?;
log::debug!("top down validators: {v:?}");
Ok(v)
} else {
Ok(vec![])
}
}
}

4 changes: 3 additions & 1 deletion src/manager/fvm/mod.rs
Original file line number Diff line number Diff line change
@@ -372,8 +372,10 @@ impl<T: JsonRpcClient + Send + Sync> SubnetManager for LotusSubnetManager<T> {
async fn get_validator_set(
&self,
subnet_id: &SubnetID,
gateway: Address,
gateway: Option<Address>,
) -> Result<QueryValidatorSetResponse> {
let gateway = gateway.ok_or_else(|| anyhow!("gateway address needed"))?;

let chain_head = self.lotus_client.chain_head().await?;
let cid_map = chain_head.cids.first().unwrap().clone();
let tip_set = Cid::try_from(cid_map)?;
2 changes: 1 addition & 1 deletion src/manager/subnet.rs
Original file line number Diff line number Diff line change
@@ -125,6 +125,6 @@ pub trait SubnetManager: Send + Sync {
async fn get_validator_set(
&self,
subnet_id: &SubnetID,
gateway: Address,
gateway: Option<Address>,
) -> Result<QueryValidatorSetResponse>;
}
2 changes: 1 addition & 1 deletion src/server/handlers/validator.rs
Original file line number Diff line number Diff line change
@@ -48,7 +48,7 @@ impl JsonRPCRequestHandler for QueryValidatorSetHandler {
check_subnet(subnet_config)?;

conn.manager()
.get_validator_set(&subnet_id, subnet_config.gateway_addr())
.get_validator_set(&subnet_id, Some(subnet_config.gateway_addr()))
.await
}
}