1
#[cfg(feature = "on-chain")]
2
use {
3
    solana_program::declare_id,
4
    solana_program::pubkey::Pubkey,
5
    solana_program::{keccak, keccak::Hash},
6
};
7

            
8
#[cfg(not(feature = "on-chain"))]
9
use {
10
    solana_sdk::declare_id,
11
    solana_sdk::pubkey::Pubkey,
12
    solana_sdk::{keccak, keccak::Hash},
13
};
14

            
15
1
declare_id!("BoNsHRcyLLNdtnoDf8hiCNZpyehMC4FDMxs6NTxFi3ew");
16

            
17
pub fn execution_address_seeds<'a>(requester: &'a Pubkey, execution_id: &'a [u8]) -> Vec<&'a [u8]> {
18
    vec!["execution".as_bytes(), requester.as_ref(), execution_id]
19
}
20

            
21
pub fn deployment_address_seeds(hash: &Hash) -> Vec<&[u8]> {
22
    vec!["deployment".as_bytes(), hash.as_ref()]
23
}
24

            
25
pub fn execution_claim_address_seeds(execution_address: &[u8]) -> Vec<&[u8]> {
26
    vec!["execution_claim".as_bytes(), execution_address]
27
}
28

            
29
pub fn execution_address(requester: &Pubkey, execution_id: &[u8]) -> (Pubkey, u8) {
30
    Pubkey::find_program_address(&execution_address_seeds(requester, execution_id), &ID)
31
}
32

            
33
pub fn input_set_address(input_set_hash: &[u8]) -> (Pubkey, u8) {
34
    Pubkey::find_program_address(&input_set_address_seeds(input_set_hash), &ID)
35
}
36

            
37
pub fn input_set_address_seeds(id: &[u8]) -> Vec<&[u8]> {
38
    vec!["input_set".as_bytes(), id]
39
}
40

            
41
#[inline]
42
pub fn img_id_hash(image_id: &str) -> Hash {
43
    keccak::hash(image_id.as_bytes())
44
}
45

            
46
pub fn deployment_address(image_id: &str) -> (Pubkey, u8) {
47
    let hsh = img_id_hash(image_id);
48
    Pubkey::find_program_address(&deployment_address_seeds(&hsh), &ID)
49
}
50

            
51
pub fn execution_claim_address(execution_id: &[u8]) -> (Pubkey, u8) {
52
    Pubkey::find_program_address(&execution_claim_address_seeds(execution_id), &ID)
53
}