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