# Pallet Specifications Below are the expected calls for a substrate pallet to integrate Band Protocol's data feed. ```rust #[pallet::call] impl<T: Config> Pallet<T> { pub fn relay(origin: OriginFor<T>, symbols: Vec<String>, rates: Vec<u64>, resolve_time: u64, request_id: u64): // Relays a list of symbols and their associated rates along with the resolve time and request id on BandChain. // This function should contain two guards: // - One that checks the latest resolve time for a particular symbol to assure that old rates are not allowed to be relayed // - is_relayer() guard // The function should just ignore symbols and rates of which the resolve_time is lower than the already saved values and continue to // update the other rates. pub fn force_relay(origin: OriginFor<T>, symbols: Vec<String>, rates: Vec<u64>, resolve_time: u64, request_id: u64): // Optional Emergency function. Implementation is recommend. // Should contain is_relayer() guard // Similar to relay() but without the resolve time guard. pub fn add_relayer(origin:OriginFor<T>, account_id: Vec<T::AccountId>): // add accounts as authorized relayer, should implement is_owner() guard and only allow owners to use this function. pub fn remove_relayer(origin:OriginFor<T>, account_id: Vec<T::AccountId>): // remove accounts from authorized relayer, should implement is_owner() guard and only allow owners to use this function. ``` While not mandatory, to prevent overlapping tickers from different asset categories i.e. stocks, cryptocurrencies and forexes, a new pallet should be instantiated for each asset category. Our CosmWasm implementation which is in Rust can be found [here](https://github.com/bandprotocol/band-std-reference-contracts-cosmwasm/blob/main/contracts/std-reference-basic/src/contract.rs) if a reference is needed. The implementation for this pallet should be relatively similar.