truthlinked_core/
constants.rs1pub const ONE_TRTH: u128 = 1_000_000_000;
8
9pub const ONE_TLKD: u128 = ONE_TRTH;
11
12pub const TX_SIGN_CONTEXT: &[u8] = b"truthlinked-transaction-v1";
13pub const GENERIC_SIGN_CONTEXT: &[u8] = b"truthlinked-generic-v1";
14
15pub const GAS_TRANSFER: u64 = 1_000;
16
17pub const STORAGE_RENT_LIFETIME_FEE: u128 = ONE_TRTH;
18pub const TX_BYTE_FEE: u64 = 1;
19pub const MEMPOOL_MAX_BYTES: usize = 64 * 1024 * 1024;
20
21pub const MAX_CALLDATA_SIZE: usize = 262_144;
22pub const MAX_RETURN_DATA_SIZE: usize = MAX_CALLDATA_SIZE;
23pub const MAX_CALL_CHAIN_CALLS: usize = 64;
24pub const MAX_CALL_CHAIN_TOTAL_CALLDATA: usize = MAX_CALLDATA_SIZE;
25pub const MAX_BATCH_TRANSFER_RECIPIENTS: usize = 64;
26pub const NONCE_LOOKAHEAD: u64 = 64;
27
28pub const MIN_URL_PROPOSAL_BOND: u128 = ONE_TRTH;
29pub const MIN_RAW_URL_PROPOSAL_BOND: u128 = 5 * ONE_TRTH;
30pub const MAX_SCHEMA_KEYS: u64 = 64;
31pub const MAX_SCHEMA_KEY_BYTES: u64 = 64;
32pub const MAX_SCHEMA_VOTING_PERIOD_BLOCKS: u64 = 1_000_000;
33
34pub const MAX_AIRDROP_AMOUNT: u128 = 15_000 * ONE_TRTH;
35
36pub const BATCH_INTERVAL_MS: u64 = 200;
38pub const MAX_BATCH_SIZE: usize = 30000;
39pub const COMMITTEE_SIZE: usize = 20;
40pub const EPOCH_DURATION_MS: u64 = 60000;
41pub const FINALIZATION_LAG: u64 = 2;
42pub const FINALIZATION_TIMEOUT_SECS: u64 = 10;
43pub const SYNC_THRESHOLD: u64 = 8;
44pub const MAX_BATCH_RANGE: u64 = 1000;
45pub const SYNC_PEER_TTL_SECS: u64 = 30;
46pub const SYNC_SNAPSHOT_THRESHOLD: u64 = 1_000;
47
48pub const MIN_VALIDATOR_STAKE: u64 = 10_000_000_000;
50pub const MAX_VALIDATOR_STAKE: u64 = 1_000_000_000_000_000_000;
51pub const UNBONDING_TICKS: u64 = 181_440_000;
52pub const JAIL_DURATION_BLOCKS: u64 = 100;
53pub const MAX_UNBONDING_ENTRIES: usize = 100;
54pub const SLASH_PERCENTAGE: u64 = 5;
55pub const ORACLE_LIE_SLASH_PERCENTAGE: u64 = 30;
56pub const ORACLE_SILENCE_SLASH_PERCENTAGE: u64 = 2;
57pub const DOWNTIME_SLASH_PERCENTAGE: u64 = 1;
58pub const CENSORSHIP_SLASH_PERCENTAGE: u64 = 1;
59
60pub const STREAMING_OPTIMAL_BATCH_SIZE: usize = 10_000;
62pub const STREAMING_MAX_WAIT_MS: u64 = 300;
63pub const STREAMING_MAX_SYNC_BUFFER_SIZE: usize = 100;
64pub const STREAMING_MAX_BATCH_CACHE: usize = 256;
65pub const STREAMING_MAX_PENDING_HEADERS: usize = 256;
66pub const STREAMING_MAX_SEEN_TXS: usize = 1_000_000;
67pub const STREAMING_PENDING_BATCH_TIMEOUT_MS: u64 = 5_000;
68
69pub const INGRESS_MAX_CONNECTIONS: usize = 1024;
71pub const INGRESS_MAX_MESSAGE_BYTES: usize = 1024 * 1024;
72pub const INGRESS_MAX_MESSAGES_PER_SECOND: u32 = 200;
73pub const ACK_MAX_CONNECTIONS: usize = 512;
74pub const ACK_MAX_MESSAGE_BYTES: usize = 256 * 1024;
75pub const ACK_MAX_MESSAGES_PER_SECOND: u32 = 200;
76pub const ACK_MAX_PENDING_BATCHES: usize = 4096;
77pub const ACK_MAX_BATCH_AGE_SECS: u64 = 300;
78pub const DISCOVERY_MAX_PEERS: usize = 2048;
79pub const DISCOVERY_PEER_TTL_SECS: u64 = 600;
80pub const ATTESTATION_PIPELINE_MAX_PENDING: usize = 4096;
81pub const CHUNK_SIZE: usize = 4096;
82pub const HANDSHAKE_TIMEOUT_SECS: u64 = 10;
83
84pub const DEFAULT_GAS_LIMIT: u64 = 1_000_000;
86pub const MAX_GAS_PER_TX: u64 = 10_000_000;
87pub const MAX_GAS_PER_BATCH: u64 = 100_000_000;
88pub const MAX_CALL_DEPTH: u32 = 30;
89pub const MAX_LOG_DATA_SIZE: usize = 65_536;
90pub const MAX_LOGS_PER_TX: usize = 100;
91pub const MAX_LOG_TOPICS: usize = 8;
92pub const MAX_CELL_BYTECODE_SIZE: usize = 1_000_000;
93pub const MAX_CELL_STORAGE_BYTES: u64 = 10_000_000;
94
95pub const GAS_PRICE: u64 = 1;
97pub const GAS_CLAIM: u64 = 2_000;
98pub const GAS_ROTATE_KEY: u64 = 1_000;
99pub const GAS_REGISTER_VALIDATOR: u64 = 10_000;
100pub const GAS_STAKE: u64 = 5_000;
101pub const GAS_UNSTAKE: u64 = 5_000;
102pub const GAS_WITHDRAW: u64 = 5_000;
103pub const GAS_UNJAIL: u64 = 10_000;
104pub const GAS_MINT_NFT: u64 = 50_000;
105pub const GAS_TRANSFER_NFT: u64 = 10_000;
106pub const GAS_BURN_NFT: u64 = 5_000;
107pub const GAS_APPROVE_NFT: u64 = 5_000;
108pub const GAS_DEPLOY_CELL: u64 = 1_000_000;
109pub const GAS_DEPLOY_TOKEN: u64 = 500_000;
110pub const GAS_UPGRADE_CELL: u64 = 500_000;
111pub const GAS_TOKEN_TRANSFER: u64 = 5_000;
112pub const GAS_TOKEN_MINT: u64 = 10_000;
113pub const GAS_TOKEN_BURN: u64 = 5_000;
114pub const GAS_ORACLE_READ: u64 = 1_000;
115pub const GAS_ORACLE_QUEUE: u64 = 5_000;
116pub const TREASURY_DISTRIBUTION_INTERVAL_BLOCKS: u64 = 1_296_000;
117pub const GAS_DISTRIBUTION_INTERVAL: u64 = TREASURY_DISTRIBUTION_INTERVAL_BLOCKS;
118
119pub const STORAGE_RENT_GRACE_PERIOD_BLOCKS: u64 = 2_592_000;
120pub const MIN_TX_FEE: u64 = 100;
121pub const AIRDROP_COOLDOWN_SECS: u64 = 259_200;
122
123pub const NAME_REGISTRATION_FEE: u128 = 10_000_000_000;
124pub const NAME_RENEWAL_FEE: u128 = 1_000_000_000;
125pub const NAME_EXPIRATION_BLOCKS: u64 = 12_960_000;
126pub const NAME_VOTING_PERIOD: u64 = 432_000;
127pub const NAME_APPROVAL_THRESHOLD: u64 = 67;
128pub const TOKEN_AUTHORITY_APPROVAL_THRESHOLD: u64 = 67;
129
130pub const CU_PER_TRTH: u64 = 1_000_000;
131pub const MAX_CU_PER_TRTH: u64 = 1_000_000_000;
132
133pub const fn mcp_key(prefix: &[u8]) -> [u8; 32] {
135 let mut out = [0u8; 32];
136 let mut i = 0usize;
137 while i < prefix.len() && i < 32 {
138 out[i] = prefix[i];
139 i += 1;
140 }
141 out
142}
143
144pub const MCP_REGISTRY_TOOL_COUNT_KEY: [u8; 32] = mcp_key(b"mcp:tool_count");
145pub const MCP_REGISTRY_RESOURCE_COUNT_KEY: [u8; 32] = mcp_key(b"mcp:resource_count");
146pub const MCP_REGISTRY_PROMPT_COUNT_KEY: [u8; 32] = mcp_key(b"mcp:prompt_count");
147pub const MCP_REGISTRY_VERSION_KEY: [u8; 32] = mcp_key(b"mcp:registry_ver");
148
149pub const MCP_TOOL_NAME_KEY: [u8; 32] = mcp_key(b"tool:name");
150pub const MCP_TOOL_DESC_HASH_KEY: [u8; 32] = mcp_key(b"tool:desc_hash");
151pub const MCP_TOOL_SCHEMA_HASH_KEY: [u8; 32] = mcp_key(b"tool:schema");
152pub const MCP_TOOL_CATEGORY_KEY: [u8; 32] = mcp_key(b"tool:category");
153pub const MCP_TOOL_CALL_COUNT_KEY: [u8; 32] = mcp_key(b"tool:calls");
154pub const MCP_TOOL_OWNER_KEY: [u8; 32] = mcp_key(b"tool:owner");
155pub const MCP_TOOL_ENABLED_KEY: [u8; 32] = mcp_key(b"tool:enabled");
156
157pub const MCP_RESOURCE_NAME_KEY: [u8; 32] = mcp_key(b"res:name");
158pub const MCP_RESOURCE_URI_SCHEME_KEY: [u8; 32] = mcp_key(b"res:uri_scheme");
159pub const MCP_RESOURCE_MIME_TYPE_KEY: [u8; 32] = mcp_key(b"res:mime");
160pub const MCP_RESOURCE_CONTENT_HASH_KEY: [u8; 32] = mcp_key(b"res:content");
161pub const MCP_RESOURCE_UPDATED_AT_KEY: [u8; 32] = mcp_key(b"res:updated");
162pub const MCP_RESOURCE_READ_COUNT_KEY: [u8; 32] = mcp_key(b"res:reads");
163
164pub const MCP_PROMPT_NAME_KEY: [u8; 32] = mcp_key(b"prompt:name");
165pub const MCP_PROMPT_TEMPLATE_HASH_KEY: [u8; 32] = mcp_key(b"prompt:template");
166pub const MCP_PROMPT_ARG_COUNT_KEY: [u8; 32] = mcp_key(b"prompt:argc");
167pub const MCP_PROMPT_USE_COUNT_KEY: [u8; 32] = mcp_key(b"prompt:uses");
168pub const MCP_PROMPT_APPROVED_AT_KEY: [u8; 32] = mcp_key(b"prompt:approved");
169
170pub const MCP_POLICY_OWNER_KEY: [u8; 32] = mcp_key(b"pol:owner");
171pub const MCP_POLICY_STATUS_KEY: [u8; 32] = mcp_key(b"pol:status");
172pub const MCP_POLICY_ALLOW_READS_KEY: [u8; 32] = mcp_key(b"pol:reads");
173pub const MCP_POLICY_ALLOW_WRITES_KEY: [u8; 32] = mcp_key(b"pol:writes");
174pub const MCP_POLICY_ALLOW_ADMIN_KEY: [u8; 32] = mcp_key(b"pol:admin");
175pub const MCP_POLICY_RATE_LIMIT_KEY: [u8; 32] = mcp_key(b"pol:rate");
176pub const MCP_POLICY_SPEND_PER_TX_KEY: [u8; 32] = mcp_key(b"pol:spend_tx");
177pub const MCP_POLICY_SPEND_EPOCH_KEY: [u8; 32] = mcp_key(b"pol:spend_ep");
178pub const MCP_POLICY_EPOCH_USED_KEY: [u8; 32] = mcp_key(b"pol:ep_used");
179pub const MCP_POLICY_EPOCH_RESET_TS_KEY: [u8; 32] = mcp_key(b"pol:ep_reset");
180pub const MCP_POLICY_ACTIONS_MIN_KEY: [u8; 32] = mcp_key(b"pol:acts_min");
181pub const MCP_POLICY_MIN_WINDOW_TS_KEY: [u8; 32] = mcp_key(b"pol:min_ts");
182pub const MCP_POLICY_TOTAL_ACTIONS_KEY: [u8; 32] = mcp_key(b"pol:total");
183pub const MCP_POLICY_HITL_THRESHOLD_KEY: [u8; 32] = mcp_key(b"pol:hitl");
184pub const MCP_POLICY_SUSPEND_REASON_KEY: [u8; 32] = mcp_key(b"pol:sus_reason");
185
186pub const MCP_AGENT_REGISTRY_COUNT_KEY: [u8; 32] = mcp_key(b"areg:count");
187
188pub const ORACLE_COMMIT_QUORUM_PERCENT: u64 = 51;
189pub const ORACLE_REVEAL_QUORUM_PERCENT: u64 = 67;
190pub const ORACLE_REQUEST_TIMEOUT_BLOCKS: u64 = 120;
191pub const CACHE_EXPIRY_BLOCKS: u64 = 7_200;
192pub const MAX_RESPONSE_BYTES: usize = 1_000_000;
193pub const MAX_HTTP_BODY_BYTES: usize = 128 * 1024;
194pub const MAX_HTTP_URL_BYTES: usize = 2_048;
195pub const MAX_HTTP_METHOD_BYTES: usize = 16;
196pub const HTTP_TIMEOUT_MS: u64 = 5_000;
197pub const MALICIOUS_SLASH_BPS: u64 = 7_000;
198pub const MAX_URL_VOTING_PERIOD_BLOCKS: u64 = 100_000;
199pub const MAX_TOKEN_AUTHORITY_VOTING_PERIOD_BLOCKS: u64 = 100_000;
200pub const PRIVATE_MAX_DEPTH: u32 = 2;
201pub const PUBLIC_MAX_DEPTH: u32 = 30;
202
203pub const HTTP_ORACLE_RC_OK: i32 = 0;
204pub const HTTP_ORACLE_RC_MEM_ERR: i32 = -1;
205pub const HTTP_ORACLE_RC_ENCODING_ERR: i32 = -2;
206pub const HTTP_ORACLE_RC_URL_NOT_APPROVED: i32 = -3;
207pub const HTTP_ORACLE_RC_PENDING: i32 = -5;
208pub const HTTP_ORACLE_RC_EXPIRED: i32 = -6;
209pub const HTTP_ORACLE_RC_RESPONSE_TOO_LARGE: i32 = -7;
210pub const HTTP_ORACLE_RC_DEPTH_LIMIT_EXCEEDED: i32 = -8;
211pub const HTTP_ORACLE_RC_INVALID_METHOD: i32 = -9;