Skip to content

Commit 5ad2a80

Browse files
authored
use boxed error for native token IDP error (#153)
1 parent 7fb7e2a commit 5ad2a80

File tree

5 files changed

+14
-38
lines changed

5 files changed

+14
-38
lines changed

mainchain-follower/db-sync-follower/src/native_token/mod.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ pub struct NativeTokenManagementDataSourceImpl {
2525

2626
observed_async_trait!(
2727
impl NativeTokenManagementDataSource for NativeTokenManagementDataSourceImpl {
28-
type Error = DataSourceError;
29-
3028
// after_block is always less or equal to_block
3129
// to_block is always a stable block
3230
async fn get_total_native_token_transfer(
@@ -36,7 +34,7 @@ impl NativeTokenManagementDataSource for NativeTokenManagementDataSourceImpl {
3634
policy_id: PolicyId,
3735
asset_name: AssetName,
3836
address: MainchainAddress,
39-
) -> std::result::Result<NativeTokenAmount, Self::Error> {
37+
) -> std::result::Result<NativeTokenAmount, Box<dyn std::error::Error + Send + Sync>> {
4038
if let Some(after_block) = after_block {
4139
if after_block == to_block {
4240
Ok(NativeTokenAmount(0))

mainchain-follower/mock/src/native_token.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use async_trait::async_trait;
2-
use main_chain_follower_api::*;
32
use sidechain_domain::*;
43
use sp_native_token_management::NativeTokenManagementDataSource;
54

@@ -19,16 +18,14 @@ impl Default for NativeTokenDataSourceMock {
1918

2019
#[async_trait]
2120
impl NativeTokenManagementDataSource for NativeTokenDataSourceMock {
22-
type Error = DataSourceError;
23-
2421
async fn get_total_native_token_transfer(
2522
&self,
2623
_after_block: Option<McBlockHash>,
2724
_to_block: McBlockHash,
2825
_native_token_policy_id: PolicyId,
2926
_native_token_asset_name: AssetName,
3027
_illiquid_supply_address: MainchainAddress,
31-
) -> Result<NativeTokenAmount> {
28+
) -> Result<NativeTokenAmount, Box<dyn std::error::Error + Send + Sync>> {
3229
Ok(NativeTokenAmount(1000))
3330
}
3431
}

node/src/main_chain_follower.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use db_sync_follower::native_token::NativeTokenManagementDataSourceImpl;
22
use db_sync_follower::{
33
block::BlockDataSourceImpl, candidates::CandidatesDataSourceImpl, metrics::McFollowerMetrics,
44
};
5-
use main_chain_follower_api::{BlockDataSource, CandidateDataSource, DataSourceError};
5+
use main_chain_follower_api::{BlockDataSource, CandidateDataSource};
66
use main_chain_follower_mock::{
77
block::BlockDataSourceMock, candidate::MockCandidateDataSource,
88
native_token::NativeTokenDataSourceMock,
@@ -16,8 +16,7 @@ use std::sync::Arc;
1616
pub struct DataSources {
1717
pub block: Arc<dyn BlockDataSource + Send + Sync>,
1818
pub candidate: Arc<dyn CandidateDataSource + Send + Sync>,
19-
pub native_token:
20-
Arc<dyn NativeTokenManagementDataSource<Error = DataSourceError> + Send + Sync>,
19+
pub native_token: Arc<dyn NativeTokenManagementDataSource + Send + Sync>,
2120
}
2221

2322
pub(crate) async fn create_cached_main_chain_follower_data_sources(

primitives/native-token-management/src/lib.rs

+8-19
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,6 @@ mod inherent_provider {
101101

102102
#[async_trait::async_trait]
103103
pub trait NativeTokenManagementDataSource {
104-
type Error;
105-
106104
/// Retrieves total of native token transfers into the illiquid supply in the range (after_block, to_block]
107105
async fn get_total_native_token_transfer(
108106
&self,
@@ -111,7 +109,7 @@ mod inherent_provider {
111109
native_token_policy_id: PolicyId,
112110
native_token_asset_name: AssetName,
113111
illiquid_supply_address: MainchainAddress,
114-
) -> Result<NativeTokenAmount, Self::Error>;
112+
) -> Result<NativeTokenAmount, Box<dyn std::error::Error + Send + Sync>>;
115113
}
116114

117115
pub struct NativeTokenManagementInherentDataProvider {
@@ -140,7 +138,7 @@ mod inherent_provider {
140138
pub async fn new_for_runtime_version<Block, C, E>(
141139
version_check: fn(RuntimeVersion) -> bool,
142140
client: Arc<C>,
143-
data_source: &(dyn NativeTokenManagementDataSource<Error = E> + Send + Sync),
141+
data_source: &(dyn NativeTokenManagementDataSource + Send + Sync),
144142
mc_hash: McBlockHash,
145143
parent_hash: <Block as BlockT>::Hash,
146144
) -> Result<Self, IDPCreationError>
@@ -149,7 +147,6 @@ mod inherent_provider {
149147
C: HeaderBackend<Block>,
150148
C: ProvideRuntimeApi<Block> + Send + Sync,
151149
C::Api: NativeTokenManagementApi<Block>,
152-
E: std::error::Error + Send + Sync + 'static,
153150
{
154151
let version = client.runtime_api().version(parent_hash)?;
155152

@@ -160,9 +157,9 @@ mod inherent_provider {
160157
}
161158
}
162159

163-
pub async fn new<Block, C, E>(
160+
pub async fn new<Block, C>(
164161
client: Arc<C>,
165-
data_source: &(dyn NativeTokenManagementDataSource<Error = E> + Send + Sync),
162+
data_source: &(dyn NativeTokenManagementDataSource + Send + Sync),
166163
mc_hash: McBlockHash,
167164
parent_hash: <Block as BlockT>::Hash,
168165
) -> Result<Self, IDPCreationError>
@@ -171,7 +168,6 @@ mod inherent_provider {
171168
C: HeaderBackend<Block>,
172169
C: ProvideRuntimeApi<Block> + Send + Sync,
173170
C::Api: NativeTokenManagementApi<Block>,
174-
E: std::error::Error + Send + Sync + 'static,
175171
{
176172
let api = client.runtime_api();
177173
let Some(scripts) = api.get_main_chain_scripts(parent_hash)? else {
@@ -192,7 +188,7 @@ mod inherent_provider {
192188
scripts.illiquid_supply_validator_address,
193189
)
194190
.await
195-
.map_err(|err| IDPCreationError::DataSourceError(Box::new(err)))?;
191+
.map_err(IDPCreationError::DataSourceError)?;
196192

197193
let token_amount = if token_amount.0 > 0 { Some(token_amount) } else { None };
198194

@@ -232,32 +228,25 @@ mod inherent_provider {
232228
pub mod mock {
233229
use crate::NativeTokenManagementDataSource;
234230
use async_trait::async_trait;
235-
use core::marker::PhantomData;
236231
use derive_new::new;
237232
use sidechain_domain::*;
238233
use std::collections::HashMap;
239234

240235
#[derive(new, Default)]
241-
pub struct MockNativeTokenDataSource<Err> {
236+
pub struct MockNativeTokenDataSource {
242237
transfers: HashMap<(Option<McBlockHash>, McBlockHash), NativeTokenAmount>,
243-
_marker: PhantomData<Err>,
244238
}
245239

246240
#[async_trait]
247-
impl<Err> NativeTokenManagementDataSource for MockNativeTokenDataSource<Err>
248-
where
249-
Err: std::error::Error + Send + Sync,
250-
{
251-
type Error = Err;
252-
241+
impl NativeTokenManagementDataSource for MockNativeTokenDataSource {
253242
async fn get_total_native_token_transfer(
254243
&self,
255244
after_block: Option<McBlockHash>,
256245
to_block: McBlockHash,
257246
_native_token_policy_id: PolicyId,
258247
_native_token_asset_name: AssetName,
259248
_illiquid_supply_address: MainchainAddress,
260-
) -> Result<NativeTokenAmount, Self::Error> {
249+
) -> Result<NativeTokenAmount, Box<dyn std::error::Error + Send + Sync>> {
261250
Ok(self.transfers.get(&(after_block, to_block)).cloned().unwrap_or_default())
262251
}
263252
}

primitives/native-token-management/src/tests/mod.rs

+2-9
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,6 @@ mod inherent_provider {
1515
use sp_runtime::testing::DigestItem;
1616
use std::sync::Arc;
1717

18-
#[derive(thiserror::Error, sp_runtime::RuntimeDebug)]
19-
pub enum TestErr {
20-
#[allow(unused)]
21-
#[error("Test error")]
22-
Err,
23-
}
24-
2518
#[tokio::test]
2619
async fn correctly_fetches_total_transfer_between_two_hashes() {
2720
let parent_number = 1; // not genesis
@@ -82,7 +75,7 @@ mod inherent_provider {
8275
let parent_hash = Hash::from([2; 32]);
8376
let parent_mc_hash = Some(McBlockHash([3; 32]));
8477

85-
let data_source = MockNativeTokenDataSource::<TestErr>::new([].into());
78+
let data_source = MockNativeTokenDataSource::new([].into());
8679
let main_chain_scripts = Some(MainChainScripts::default());
8780
let client = create_client(parent_hash, parent_mc_hash, parent_number, main_chain_scripts);
8881

@@ -150,7 +143,7 @@ mod inherent_provider {
150143
parent_mc_hash: Option<McBlockHash>,
151144
mc_hash: McBlockHash,
152145
total_transfered: u128,
153-
) -> MockNativeTokenDataSource<TestErr> {
146+
) -> MockNativeTokenDataSource {
154147
let total_transfered = NativeTokenAmount(total_transfered);
155148
MockNativeTokenDataSource::new([((parent_mc_hash, mc_hash), total_transfered)].into())
156149
}

0 commit comments

Comments
 (0)