1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
use anchor_lang::prelude::*;
#[derive(Clone, Debug, PartialEq, Eq, AnchorSerialize, AnchorDeserialize)]
#[repr(u8)]
pub enum TokenManagerState {
Initialized = 0,
Issued = 1,
Claimed = 2,
Invalidated = 3,
}
#[derive(Clone, Debug, PartialEq, Eq, AnchorSerialize, AnchorDeserialize)]
#[repr(u8)]
pub enum TokenManagerKind {
Managed = 1,
Unmanaged = 2,
Edition = 3,
Permissioned = 4,
Programmable = 5,
}
#[derive(Clone, Debug, PartialEq, Eq, AnchorSerialize, AnchorDeserialize)]
#[repr(u8)]
pub enum InvalidationType {
Return = 1,
Invalidate = 2,
Release = 3,
Reissue = 4,
Vest = 5,
}
pub const INVALIDATION_REWARD_LAMPORTS: u64 = 5_000_000;
pub const PERMISSIONED_REWARD_LAMPORTS: u64 = 10_000_000; pub const PERMISSIONED_REWARD_ADDRESS: &str = "crkdpVWjHWdggGgBuSyAqSmZUmAjYLzD435tcLDRLXr";
pub fn token_manager_size(num_invalidators: usize) -> usize {
(8 + 1 + 1 + 8 + 1 + 32 + 32 + 8 + 1 + 1 + 8 + 1 + 32 + 33 + 33 + 33 + num_invalidators * 32) + 8_usize
}
pub const MAX_INVALIDATORS: u8 = 5;
pub const TOKEN_MANAGER_SEED: &str = "token-manager";
#[account]
pub struct TokenManager {
pub version: u8,
pub bump: u8,
pub count: u64,
pub num_invalidators: u8,
pub issuer: Pubkey,
pub mint: Pubkey,
pub amount: u64,
pub kind: u8,
pub state: u8,
pub state_changed_at: i64,
pub invalidation_type: u8,
pub recipient_token_account: Pubkey,
pub receipt_mint: Option<Pubkey>,
pub claim_approver: Option<Pubkey>,
pub transfer_authority: Option<Pubkey>,
pub invalidators: Vec<Pubkey>,
}
pub const MINT_MANAGER_SEED: &str = "mint-manager";
pub const MINT_MANAGER_SIZE: usize = 8 + std::mem::size_of::<MintManager>() + 8;
#[account]
pub struct MintManager {
pub bump: u8,
pub initializer: Pubkey,
pub token_managers: u64,
}
pub const MINT_COUNTER_SEED: &str = "mint-counter";
pub const MINT_COUNTER_SIZE: usize = 8 + std::mem::size_of::<MintCounter>() + 8;
#[account]
pub struct MintCounter {
pub bump: u8,
pub mint: Pubkey,
pub count: u64,
}
pub const CLAIM_RECEIPT_SEED: &str = "claim-receipt";
pub const CLAIM_RECEIPT_SIZE: usize = 8 + std::mem::size_of::<ClaimReceipt>() + 8;
#[account]
pub struct ClaimReceipt {
pub mint_count: u64,
pub token_manager: Pubkey,
pub target: Pubkey,
}
pub const TRANSFER_RECEIPT_SEED: &str = "transfer-receipt";
pub const TRANSFER_RECEIPT_SIZE: usize = 8 + std::mem::size_of::<TransferReceipt>() + 8;
#[account]
pub struct TransferReceipt {
pub mint_count: u64,
pub token_manager: Pubkey,
pub target: Pubkey,
}
pub const RECEIPT_MINT_MANAGER_SEED: &str = "receipt-mint-manager";
pub const RECEIPT_MINT_MANAGER_SIZE: usize = 8 + std::mem::size_of::<ReceiptMintManager>() + 8;
#[account]
pub struct ReceiptMintManager {
pub bump: u8,
}