idn_contracts/ext/
chain_ext.rs1use ink::env::Environment;
18
19#[ink::chain_extension(extension = 42)]
20pub trait RandExtension {
21 type ErrorCode = RandomReadErr;
22 #[ink(function = 1101)]
24 fn fetch_random(subject: [u8; 32]) -> [u8; 32];
25}
26
27#[derive(Debug, Copy, Clone, PartialEq, Eq)]
28#[ink::scale_derive(Encode, Decode, TypeInfo)]
29pub enum RandomReadErr {
30 FailGetRandomSource,
31}
32
33impl ink::env::chain_extension::FromStatusCode for RandomReadErr {
34 fn from_status_code(status_code: u32) -> Result<(), Self> {
35 match status_code {
36 0 => Ok(()),
37 1 => Err(Self::FailGetRandomSource),
38 _ => panic!("encountered unknown status code"),
39 }
40 }
41}
42
43#[derive(Debug, Clone, PartialEq, Eq)]
44#[ink::scale_derive(TypeInfo)]
45pub enum IDNEnvironment {}
46
47impl Environment for IDNEnvironment {
48 const MAX_EVENT_TOPICS: usize = <ink::env::DefaultEnvironment as Environment>::MAX_EVENT_TOPICS;
49
50 type AccountId = <ink::env::DefaultEnvironment as Environment>::AccountId;
51 type Balance = <ink::env::DefaultEnvironment as Environment>::Balance;
52 type Hash = <ink::env::DefaultEnvironment as Environment>::Hash;
53 type BlockNumber = <ink::env::DefaultEnvironment as Environment>::BlockNumber;
54 type Timestamp = <ink::env::DefaultEnvironment as Environment>::Timestamp;
55
56 type ChainExtension = RandExtension;
57}