jam_pvm_common/
authorizer.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use jam_types::{AuthOutput, AuthParam, CoreIndex, WorkPackage};

#[macro_export]
macro_rules! declare_authorizer {
	($t: ty) => {
		#[polkavm_derive::polkavm_export]
		extern "C" fn is_authorized_ext(ptr: u32, size: u32) -> u64 {
			let (param, package, core_index): (AuthParam, WorkPackage, CoreIndex) =
				decode_buf(ptr, size);
			let result = <$t as $crate::Authorizer>::is_authorized(&param, &package, core_index);
			((&result).as_ptr() as u64) << 32 | (result.len() as u64)
		}
	};
}

pub trait Authorizer {
	fn is_authorized(param: &AuthParam, package: &WorkPackage, core_index: CoreIndex)
		-> AuthOutput;
}