use soroban_sdk::{contracttype, symbol_short, Address, Symbol};
pub const CHAIN_DETAILS_KEY: Symbol = symbol_short!("chain");
pub const SYSTEM_ENABLED_KEY: &[u8] = b"system_enabled\0";
pub const DEPLOYER_ADDRESS_KEY: Symbol = symbol_short!("deployer");
pub const GATEWAY_CONTRACT_ADDRESS: Symbol = symbol_short!("gateway");
pub const ZERO_BYTES: [u8; 32] = [0u8; 32];
pub const TX_ID_FACTOR: u128 = 10u128.pow(23);
pub const PERSISTENT_STORAGE_MIN_TTL: u32 = 100_000;
pub const PERSISTENT_STORAGE_MAX_TTL: u32 = 200_000;
pub const TEMPORARY_STORAGE_MIN_TTL: u32 = 17_280;
pub const TEMPORARY_STORAGE_MAX_TTL: u32 = 34_560;
#[contracttype]
#[derive(Clone, Debug, PartialEq)]
pub struct ChainDetails {
pub next_tx_id: u128,
pub chain_id: u64,
}
#[contracttype]
#[derive(Clone, Debug, PartialEq)]
pub enum DataKey {
ChainDetails,
ChainSigners,
ChainSignersMap(Address),
ChainSignersRequired,
ViaSigners,
ViaSignersMap(Address),
ViaSignersRequired,
ProjectSigners(Address),
ProjectSignersMap(Address, Address),
ProjectSignersRequired(Address),
Relayers,
RelayersMap(Address),
RelayersRequired,
ContractRelayers(Address),
ContractRelayersMap(Address, Address),
ContractRelayersEnabled(Address),
ProcessedTransfers(u128),
FeeHandler,
ProcessFeeCalledFor(Address),
FeesOffline,
CustomSourceFee(Address),
MaxFeeAmount(Address),
FeeTokenContract(Address),
GasHandler,
MaxGasAmount(Address),
ProcessGasRefundCalledFor(Address, Address),
GasTokenContract(Address),
UnwrapToken(Address),
PosHandler,
MessageValidateResult,
GatewayContractAddress,
ChainsEndpoints(u64),
BlockTip,
}