Skip to main content

Config

Details about Mystiko configuration and related interfaces.

Data Structure

get

Get MystikoConfig.

use mystiko_protos::api::config::v1::GetConfigResponse;
use mystiko_lib::config::get;
use mystiko_protos::api::v1::api_response;

let response = get();
let config = match response.result {
Some(api_response::Result::Data(data)) => match GetConfigResponse::try_from(data) {
Ok(config) => config,
Err(e) => return Err(anyhow!(format!("Failed to parse config: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

MystikoConfig data structure is as follows:

PropertyTypeDescription
versionString
Mystiko version.
chain_configsHashMap<u64, ChainConfig>
Chain configs map, key is chain id.
bridge_configsHashMap<i32, BridgeConfig>
Bridge configs map, key is bridge type.
git_revisionString
Git revision.
sequencer_configClientOptions
Sequencer config.
packer_configPackerConfig
Packer config.
country_blacklistVec<String>
Country blacklist.
circuit_configsVec<CircuitConfig>
Circuit configs.

CircuitConfig

CircuitConfig data structure is as follows:

PropertyTypeDescription
nameString
Circuit name.
circuit_typeCircuitType
Circuit type.
is_defaultbool
Is default circuit.
program_fileVec<String>
Program files.
abi_fileVec<String>
ABI files.
proving_key_fileVec<String>
Proving key files.
verifying_key_fileVec<String>
Verifying key files.

find_default_circuit

Find default circuit config by circuit type.

use mystiko_protos::api::config::v1::{FindDefaultCircuitRequest, FindDefaultCircuitResponse};
use mystiko_protos::common::v1::CircuitType;
use mystiko_lib::config::find_default_circuit;
use mystiko_protos::api::v1::api_response;

let request = FindDefaultCircuitRequest::builder()
.circuit_type(CircuitType::Rollup1)
.build();
let response = find_default_circuit(request);
let config = match response.result {
Some(api_response::Result::Data(data)) => match FindDefaultCircuitResponse::try_from(data) {
Ok(config) => config,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

List of supported CircuitType:

CircuitType.ROLLUP_1;
CircuitType.ROLLUP_2;
CircuitType.ROLLUP_4;
CircuitType.ROLLUP_8;
CircuitType.ROLLUP_16;
CircuitType.ROLLUP_32;
CircuitType.ROLLUP_64;
CircuitType.ROLLUP_128;
CircuitType.ROLLUP_256;
CircuitType.ROLLUP_512;
CircuitType.ROLLUP_1024;

CircuitType.TRANSACTION1X0;
CircuitType.TRANSACTION1X1;
CircuitType.TRANSACTION1X2;
CircuitType.TRANSACTION2X0;
CircuitType.TRANSACTION2X1;
CircuitType.TRANSACTION2X2;

find_circuit

Find circuit config by circuit name.

use mystiko_protos::api::config::v1::{FindCircuitRequest, FindCircuitResponse};
use mystiko_lib::config::find_circuit;
use mystiko_protos::api::v1::api_response;

let request = FindCircuitRequest::builder()
.circuit_name("zokrates-1.0-transaction1x0")
.build();
let response = find_circuit(request);
let config = match response.result {
Some(api_response::Result::Data(data)) => match FindCircuitResponse::try_from(data) {
Ok(config) => config,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

ChainConfig

ChainConfig data structure is as follows:

PropertyTypeDescription
chain_idu64
Chain id.
nameString
Chain name.
asset_symbolString
Native asset symbol.
asset_decimalsu32
Native asset decimals.
explorer_urlString
Explorer URL.
explorer_api_urlString
Explorer API URL.
explorer_prefixString
Explorer prefix.
provider_quorum_percentageu32
Provider quorum percentage.
signer_endpointString
Signer endpoint.
event_delay_blocksu64
Event delay blocks.
event_filter_sizeu64
Event filter size.
sequencer_fetch_sizeu64
Sequencer fetch size.
main_asset_configAssetConfig
Main asset config.
provider_typeProviderType
Provider type.
transaction_typeTransactionType
Transaction type.
asset_configsHashMap<String], AssetConfig>
Asset configs map, key is asset contract address.
deposit_contract_configsHashMap<String, DepositContractConfig>
Deposit contract configs map, key is deposit contract address.
pool_contract_configsHashMap<String], PoolContractConfig>
Pool contract configs map, key is pool contract address.
recommended_amountsVec<String>
Recommended amounts.
provider_configsVec<ProviderConfig>
Provider configs.
granularitiesVec<u64>
Granularities.

find_chain

Find chain config by chain id.

use mystiko_protos::api::config::v1::{FindChainRequest, FindChainResponse};
use mystiko_lib::config::find_chain;
use mystiko_protos::api::v1::api_response;

let request = FindChainRequest::builder()
.chain_id("11155111")
.build();
let response = find_chain(request);
let config = match response.result {
Some(api_response::Result::Data(data)) => match FindChainResponse::try_from(data) {
Ok(config) => config,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

find_peer_chains

Find peer chains by chain id.

use mystiko_protos::api::config::v1::{FindPeerChainsRequest, FindPeerChainsResponse};
use mystiko_lib::config::find_peer_chains;
use mystiko_protos::api::v1::api_response;

let request = FindPeerChainsRequest::builder()
.chain_id("11155111")
.build();
let response = find_peer_chains(request);
let chains = match response.result {
Some(api_response::Result::Data(data)) => match FindPeerChainsResponse::try_from(data) {
Ok(chains) => chains,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

find_asset_symbols

Find asset symbols by chain id and peer chain id.

use mystiko_protos::api::config::v1::{FindAssetSymbolsRequest, FindAssetSymbolsResponse};
use mystiko_lib::config::find_asset_symbols;
use mystiko_protos::api::v1::api_response;

let request = FindAssetSymbolsRequest::builder()
.chain_id("11155111")
.peer_chain_id("97")
.build();
let response = find_asset_symbols(request);
let assets = match response.result {
Some(api_response::Result::Data(data)) => match FindAssetSymbolsResponse::try_from(data) {
Ok(assets) => assets,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

find_bridges

Find bridge type by chain id, peer chain id and asset symbol.

use mystiko_protos::api::config::v1::{FindBridgesRequest, FindBridgesResponse};
use mystiko_lib::config::find_bridges;
use mystiko_protos::api::v1::api_response;

let request = FindBridgesRequest::builder()
.chain_id("11155111")
.peer_chain_id("97")
.asset_symbol("MTT")
.build();
let response = find_bridges(request);
let bridges = match response.result {
Some(api_response::Result::Data(data)) => match FindBridgesResponse::try_from(data) {
Ok(bridges) => bridges,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

find_bridge

Find bridge config by bridge type.

use mystiko_protos::api::config::v1::{FindBridgeRequest, FindBridgeResponse};
use mystiko_lib::config::find_bridge;
use mystiko_protos::api::v1::api_response;

let request = FindBridgeRequest::builder()
.bridge_type(BridgeType.LOOP)
.build();
let response = find_bridge(request);
let bridge = match response.result {
Some(api_response::Result::Data(data)) => match FindBridgeResponse::try_from(data) {
Ok(bridge) => bridge,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

List of supported BridgeType:

BridgeType.LOOP;
BridgeType.POLY;
BridgeType.TBRIDGE;
BridgeType.CELER;
BridgeType.LAYER_ZERO;
BridgeType.AXELAR;
BridgeType.WORMHOLE;

BridgeConfig data structure is as follows:

PropertyTypeDescription
nameString
Bridge name.
bridge_typeBridgeType
Bridge type.
explorer_urlString
Explorer URL.
explorer_prefixString
Explorer prefix.
api_urlString
API URL.
api_prefixString
API prefix.

DepositContractConfig

DepositContractConfig data structure is as follows:

PropertyTypeDescription
versionu32
Deposit Contract Version.
nameString
Contract name.
addressString
Contract address.
start_blocku64
Start block.
disabledbool
Is disabled.
min_amountString
Minimum amount.
max_amountString
Maximum amount.
pool_contract_configPoolContractConfig
Pool contract config.
bridge_typeBridgeType
Bridge type.
contract_typeContractType
Contract type.
min_bridge_feeString
Minimum bridge fee.
min_executor_feeString
Minimum executor fee.
service_feeu32
Service fee.
service_fee_divideru32
Service fee divider.
bridge_fee_asset_configAssetConfig
Bridge fee asset config.
executor_fee_asset_configAssetConfig
Executor fee asset config.
peer_chain_idu64
Peer chain id.
peer_contract_addressString
Peer contract address.

find_deposit_contract

Find deposit contract config by chain id, peer chain id, asset symbol and bridge type.

use mystiko_protos::api::config::v1::{FindDepositContractRequest, FindDepositContractResponse};
use mystiko_lib::config::find_deposit_contract;
use mystiko_protos::api::v1::api_response;

let request = FindDepositContractRequest::builder()
.chain_id("11155111")
.peer_chain_id("97")
.asset_symbol("MTT")
.bridge_type(BridgeType.Tbridge)
.build();
let response = find_deposit_contract(request);
let deposit = match response.result {
Some(api_response::Result::Data(data)) => match FindDepositContractResponse::try_from(data) {
Ok(deposit) => deposit,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

find_deposit_contract_by_address

Find deposit contract config by chain id and deposit contract address.

use mystiko_protos::api::config::v1::{FindDepositContractByAddressRequest, FindDepositContractByAddressResponse};
use mystiko_lib::config::find_deposit_contract_by_address;
use mystiko_protos::api::v1::api_response;

let request = FindDepositContractByAddressRequest::builder()
.chain_id("11155111")
.address("0x643DD956aC516808538BF979b8440AbcebC3bcdA")
.build();
let response = find_deposit_contract_by_address(request);
let deposit = match response.result {
Some(api_response::Result::Data(data)) => match FindDepositContractResponse::try_from(data) {
Ok(deposit) => deposit,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

PoolContractConfig

PoolContractConfig data structure is as follows:

PropertyTypeDescription
versionu32
Pool Contract Version.
nameString
Contract name.
addressString
Contract address.
start_blocku64
Start block.
pool_nameString
Pool name.
min_rollup_feeString
Minimum rollup fee.
contract_typeContractType
Contract type.
bridge_typeBridgeType
Bridge type.
asset_configAssetConfig
Asset config.
circuit_configsVec<CircuitConfig>
Circuit configs.
circuitsVec<String>
Circuits.

find_pool_contract

Find pool contract by chain id, asset symbol, bridge type and version.

use mystiko_protos::api::config::v1::{FindPoolContractRequest, FindPoolContractResponse};
use mystiko_lib::config::find_pool_contract;
use mystiko_protos::api::v1::api_response;

let request = FindPoolContractRequest::builder()
.chain_id("11155111")
.asset_symbol("MTT")
.bridge_type(BridgeType.Tbridge)
.version(6_u32)
.build();
let response = find_pool_contract(request);
let pool = match response.result {
Some(api_response::Result::Data(data)) => match FindPoolContractResponse::try_from(data) {
Ok(pool) => pool,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

find_pool_contracts

Find pool contracts by chain id, asset symbol and bridge type.

use mystiko_protos::api::config::v1::{FindPoolContractsRequest, FindPoolContractsResponse};
use mystiko_lib::config::find_pool_contracts;
use mystiko_protos::api::v1::api_response;

let request = FindPoolContractsRequest::builder()
.chain_id("11155111")
.asset_symbol("MTT")
.bridge_type(BridgeType.Tbridge)
.build();
let response = find_pool_contracts(request);
let pools = match response.result {
Some(api_response::Result::Data(data)) => match FindPoolContractsResponse::try_from(data) {
Ok(pools) => pools,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

find_pool_contract_by_address

Find pool contract config by chain id and pool contract address.

use mystiko_protos::api::config::v1::{FindPoolContractByAddressRequest, FindPoolContractByAddressResponse};
use mystiko_lib::config::find_pool_contract_by_address;
use mystiko_protos::api::v1::api_response;

let request = FindPoolContractByAddressRequest::builder()
.chain_id("11155111")
.address("0xAE77941b3bd4d2293E13A9a69E64A0ACFf5bBC55")
.build();
let response = find_pool_contract_by_address(request);
let pool = match response.result {
Some(api_response::Result::Data(data)) => match FindPoolContractByAddressResponse::try_from(data) {
Ok(pool) => pool,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

find_contract_by_address

Find contract config by chain id and contract address.

use mystiko_protos::api::config::v1::{FindContractByAddressRequest, FindContractByAddressResponse};
use mystiko_lib::config::find_contract_by_address;
use mystiko_protos::api::v1::api_response;

let request = FindContractByAddressRequest::builder()
.chain_id("11155111")
.address("0xAE77941b3bd4d2293E13A9a69E64A0ACFf5bBC55")
.build();
let response = find_contract_by_address(request);
let contract = match response.result {
Some(api_response::Result::Data(data)) => match FindContractByAddressResponse::try_from(data) {
Ok(contract) => contract,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};

ContractConfig data structure is as follows:

PropertyTypeDescription
versionu32
Contract version.
nameString
Contract name.
addressString
Contract address.
start_blocku64
Start block.
disabledbool
Is disabled.
min_rollup_feeString
Minimum rollup fee.
asset_configAssetConfig
Asset config.
bridge_typeBridgeType
Bridge type.
contract_typeContractType
Contract type.

List of supported ContractType:

ContractType.DEPOSIT;
ContractType.POOL;

get_transaction_url

Get transaction url by chain id and transaction hash.

use mystiko_protos::api::config::v1::{GetTransactionUrlRequest, GetTransactionUrlResponse};
use mystiko_lib::config::get_transaction_url;
use mystiko_protos::api::v1::api_response;

let request = GetTransactionUrlRequest::builder()
.chain_id("11155111")
.tx_hash("0x1803ef0489ec2bda0abb7f564fa795959c0d1f4db7651236e34f879b317c074a")
.build();
let response = get_transaction_url(request);
let tx = match response.result {
Some(api_response::Result::Data(data)) => match GetTransactionUrlResponse::try_from(data) {
Ok(tx) => tx,
Err(e) => return Err(anyhow!(format!("Failed to parse response: {}", e))),
},
Some(api_response::Result::ErrorMessage(error)) => {
return Err(anyhow!(format!("API error: {}", error)));
}
None => {
return Err(anyhow!("No result found in response"));
}
};