Skip to main content

Deposit

Mystiko Deposit Related APIs.

Data Structure

quote

Retrieve quote information for a deposit.

use mystiko_protos::api::handler::v1::{QuoteRequest, QuoteResponse};
use mystiko_protos::core::handler::v1::QuoteDepositOptions;
use mystiko_lib::deposit::quote;
use mystiko_protos::api::v1::api_response;

let options = QuoteDepositOptions::builder()
.chain_id(11155111_u64)
.asset_symbol("MTT".to_string())
.bridge_type(BridgeType::Loop as i32)
.build();
let request = QuoteRequest::builder().options(options).build();
let response = quote(request);
let depositQuote = match response.result {
Some(api_response::Result::Data(data)) => match QuoteResponse::try_from(data) {
Ok(depositQuote) => depositQuote,
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"));
}
};

QuoteDepositOptions:

ParameterRequiredDescription
chain_idtrue
The chain ID of the asset.
asset_symboltrue
Asset symbol.
query_timeout_msfalse
Query timeout in milliseconds.
dst_chain_idfalse
Destination chain id.
bridge_typefalse
Bridge type.

DepositQuote data structure is as follows:

PropertyTypeDescription
asset_symbolString
Asset symbol.
asset_decimalsu32
Asset decimals.
min_amountf64
Minimum amount.
min_decimal_amountString
Minimum decimal amount.
max_amountf64
Maximum amount.
max_decimal_amountString
Maximum decimal amount.
min_rollup_fee_amountf64
Minimum rollup fee amount.
min_rollup_fee_decimal_amountString
Minimum rollup fee decimal amount.
rollup_fee_asset_symbolString
Rollup fee asset symbol.
rollup_fee_asset_decimalsu32
Rollup fee asset decimals.
min_bridge_fee_amountOption<f64>
Minimum bridge fee amount.
min_bridge_fee_decimal_amountOption<String>
Minimum bridge fee decimal amount.
bridge_fee_asset_symbolOption<String>
Bridge fee asset symbol.
bridge_fee_asset_decimalsOption<u32>
Bridge fee asset decimals.
min_executor_fee_amountOption<f64>
Minimum executor fee amount.
min_executor_fee_decimal_amountOption<String>
Minimum executor fee decimal amount.
executor_fee_asset_symbolOption<String>
Executor fee asset symbol.
executor_fee_asset_decimalsOption<u32>
Executor fee asset decimals.
recommended_amountsVec<f64>
Recommended amounts.
recommended_decimal_amountsVec<String>
Recommended decimal amounts.

summary

Retrieve summary information for a deposit.

use mystiko_protos::api::handler::v1::{SummaryRequest, SummaryResponse};
use mystiko_protos::core::handler::v1::CreateDepositOptions;
use mystiko_lib::deposit::summary;
use mystiko_protos::api::v1::api_response;

let options = CreateDepositOptions::builder()
.chain_id(11155111_u64)
.asset_symbol("MTT".to_string())
.bridge_type(BridgeType::Loop as i32)
.shielded_address("shielded address".to_string())
.amount(10_f64)
.rollup_fee_amount(0.01_f64)
.deposit_quote(deposit_quote)
.build();
let request = SummaryRequest::builder().options(options).build();
let response = summary(request);
let depositSummary = match response.result {
Some(api_response::Result::Data(data)) => match SummaryResponse::try_from(data) {
Ok(depositSummary) => depositSummary,
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"));
}
};

CreateDepositOptions:

ParameterRequiredDescription
chain_idtrue
Chain id.
asset_symboltrue
Asset symbol.
amounttrue
Amount.
shielded_addresstrue
Shielded address.
dst_chain_idfalse
Destination chain id.
rollup_fee_amountfalse
Rollup fee amount.
bridge_fee_amountfalse
Bridge fee amount.
executor_fee_amountfalse
Executor fee amount.
query_timeout_msfalse
Query timeout in milliseconds.
deposit_quotefalse
Deposit quote.
bridge_typefalse
Bridge type.

DepositSummary data structure is as follows:

PropertyTypeDescription
chain_idu64
Chain id.
asset_symbolString
Asset symbol.
asset_decimalsu32
Asset decimals.
amountf64
Amount.
decimal_amountString
Decimal amount.
shielded_addressString
Shielded address.
rollup_fee_amountf64
Rollup fee amount.
rollup_fee_decimal_amountString
Rollup fee decimal amount.
rollup_fee_asset_symbolString
Rollup fee asset symbol.
rollup_fee_asset_decimalsu32
Rollup fee asset decimals.
dst_chain_idOption<u64>
Destination chain id.
bridge_fee_amountOption<f64>
Bridge fee amount.
bridge_fee_decimal_amountOption<String>
Bridge fee decimal amount.
bridge_fee_asset_symbolOption<String>
Bridge fee asset symbol.
bridge_fee_asset_decimalsOption<u32>
Bridge fee asset decimals.
executor_fee_amountOption<u32>
Executor fee amount.
executor_fee_decimal_amountOption<String>
Executor fee decimal amount.
executor_fee_asset_symbolOption<String>
Executor fee asset symbol.
executor_fee_asset_decimalsOption<u32>
Executor fee asset decimals.
bridge_typeOption<BridgeType>
Bridge type.
total_amountsHashMap<String, u32>
Total amounts.
total_decimal_amountsHashMap<String, String>
Total decimal amounts.

create

Create a Deposit request.

use mystiko_protos::api::handler::v1::{CreateDepositRequest, CreateDepositResponse};
use mystiko_protos::core::handler::v1::CreateDepositOptions;
use mystiko_lib::deposit::create;
use mystiko_protos::api::v1::api_response;

let options = CreateDepositOptions::builder()
.chain_id(97_u64)
.asset_symbol("BNB".to_string())
.bridge_type(BridgeType::Loop as i32)
.shielded_address(account.shielded_address.clone())
.amount(10_f64)
.rollup_fee_amount(0.01_f64)
.deposit_quote(deposit_quote)
.build();
let request = CreateDepositRequest::builder().options(options).build();
let response = create(request);
let deposit = match response.result {
Some(api_response::Result::Data(data)) => match CreateDepositResponse::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"));
}
};

Deposit data structure is as follows:

PropertyTypeDescription
idString
Id.
created_atu64
Created at.
updated_atu64
Updated at.
chain_idu64
Chain id.
contract_addressString
Contract address.
pool_addressString
Pool address.
dst_chain_idu64
Destination chain id.
dst_chain_contract_addressString
Destination chain contract address.
dst_pool_addressString
Destination pool address.
commitment_hashString
Commitment hash.
hash_kString
Hash K.
random_sString
Random S.
encrypted_noteString
Encrypted note.
asset_symbolString
Asset symbol.
asset_decimalsu32
Asset decimals.
amountu32
Amount.
decimal_amountString
Decimal amount.
rollup_fee_amountu32
Rollup fee amount.
rollup_fee_decimal_amountString
Rollup fee decimal amount.
shielded_addressString
Shielded address.
wallet_idString
Wallet id.
asset_addressOption<String>
Asset address.
bridge_fee_amountOption<f64>
Bridge fee amount.
bridge_fee_decimal_amountOption<String>
Bridge fee decimal amount.
executor_fee_amountOption<f64>
Executor fee amount.
executor_fee_decimal_amountOption<String>
Executor fee decimal amount.
bridge_fee_asset_addressOption<String>
Bridge fee asset address.
bridge_fee_asset_symbolOption<String>
Bridge fee asset symbol.
bridge_fee_asset_decimalsOption<u32>
Bridge fee asset decimals.
executor_fee_asset_addressOption<String>
Executor fee asset address.
executor_fee_asset_symbolOption<String>
Executor fee asset symbol.
executor_fee_asset_decimalsOption<u32>
Executor fee asset decimals.
queued_transaction_hashOption<String>
Queued transaction hash.
included_transaction_hashOption<String>
Included transaction hash.
src_chain_transaction_hashOption<String>
Source chain transaction hash.
asset_approve_transaction_hashVec<String>
Asset approve transaction hash.
error_messageOption<String>
Error message.
bridge_typeBridgeType
Bridge type.
statusDepositStatus
Deposit status.

send

Send a deposit transaction using a private key.

use mystiko_protos::api::handler::v1::{SendRequest, SendResponse};
use mystiko_protos::core::handler::v1::SendDepositOptions;
use mystiko_lib::deposit::send;
use mystiko_protos::api::v1::api_response;

let options = SendDepositOptions::builder()
.deposit_id("deposit id".to_string())
.build();
let request = SendRequest::builder().options(options).build();
let response = send(request);
let deposit = match response.result {
Some(api_response::Result::Data(data)) => match SendResponse::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"));
}
};

SendDepositOptions:

ParameterRequiredDescription
deposit_idtrue
Deposit id.
private_keyfalse
Private key.
signer_providerfalse
Signer provider.
query_timeout_msfalse
Query timeout in milliseconds.
asset_approve_confirmationsfalse
Asset approve confirmations.
deposit_confirmationsfalse
Deposit confirmations.
tx_send_timeout_msfalse
Transaction send timeout in milliseconds.
tx_wait_timeout_msfalse
Transaction wait timeout in milliseconds.
tx_wait_interval_msfalse
Transaction wait interval in milliseconds.
asset_approve_txfalse
Asset approve transaction.
deposit_txfalse
Deposit transaction.
screening_messagefalse
Screening message.

send_with_grpc

Send a deposit transaction by signing through the given gRPC interface.

use mystiko_protos::api::handler::v1::{SendWithGrpcRequest, SendResponse};
use mystiko_protos::core::handler::v1::SendDepositOptions;
use mystiko_protos::service::v1::ClientOptions;
use mystiko_lib::deposit::send_with_grpc;
use mystiko_protos::api::v1::api_response;

let send_options = SendDepositOptions::builder()
.deposit_id("deposit id".to_string())
.build();
let client_options = ClientOptions::builder().build();
let request = SendWithGrpcRequest::builder().send_options(send_options).client_options(client_options).build();
let response = send_with_grpc(request);
let deposit = match response.result {
Some(api_response::Result::Data(data)) => match SendResponse::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"));
}
};

ClientOptions:

ParameterRequiredDescription
hosttrue
Host.
porttrue
Port.
is_sslfalse
Is SSL.
ssl_certfalse
SSL cert.
ssl_cert_pathfalse
SSL cert path.
ssl_server_namefalse
SSL server name.

find

Query deposit data using Filter.

use mystiko_protos::storage::v1::{QueryFilter, SubFilter};
use mystiko_protos::api::handler::v1::{FindDepositRequest, FindDepositResponse};
use mystiko_lib::deposit::find;
use mystiko_protos::api::v1::api_response;

let filter = QueryFilter::from(SubFilter::equal(DocumentColumn::Id, "deposit id".to_string()))
let request = FindDepositRequest::builder().filter(filter).build();
let response = find(request);
let deposits = match response.result {
Some(api_response::Result::Data(data)) => match FindDepositResponse::try_from(data) {
Ok(deposits) => deposits,
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_all

Query all Deposit data.

use mystiko_protos::api::handler::v1::FindDepositResponse;
use mystiko_lib::deposit::find_all;
use mystiko_protos::api::v1::api_response;

let response = find_all();
let deposits = match response.result {
Some(api_response::Result::Data(data)) => match FindDepositResponse::try_from(data) {
Ok(deposits) => deposits,
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_one

Find a single Deposit record using Filter.

use mystiko_protos::storage::v1::{QueryFilter, SubFilter};
use mystiko_protos::api::handler::v1::{FindDepositRequest, FindOneDepositResponse};
use mystiko_lib::deposit::find_one;
use mystiko_protos::api::v1::api_response;

let filter = QueryFilter::from(SubFilter::equal(DocumentColumn::Id, "deposit id".to_string()))
let request = FindDepositRequest::builder().filter(filter).build();
let response = find_one(request);
let deposit = match response.result {
Some(api_response::Result::Data(data)) => match FindOneDepositResponse::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_by_id

Find a single Deposit record by its ID.

use mystiko_protos::api::handler::v1::FindOneDepositResponse;
use mystiko_lib::deposit::find_by_id;
use mystiko_protos::api::v1::api_response;

let response = find_by_id("deposit id".to_string());
let deposit = match response.result {
Some(api_response::Result::Data(data)) => match FindOneDepositResponse::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"));
}
};

count

Query the count of data that matches the QueryFilter criteria.

use mystiko_protos::storage::v1::{QueryFilter, SubFilter};
use mystiko_protos::api::handler::v1::CountDepositResponse;
use mystiko_lib::deposit::count;
use mystiko_protos::api::v1::api_response;

let filter = QueryFilter::from(SubFilter::equal(DocumentColumn::Id, "deposit id".to_string()))
let request = FindDepositRequest::builder().filter(filter).build();
let response = count(request);
let total = match response.result {
Some(api_response::Result::Data(data)) => match CountDepositResponse::try_from(data) {
Ok(total) => total,
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"));
}
};

count_all

Query the total count of all Deposit data.

use mystiko_protos::api::handler::v1::CountDepositResponse;
use mystiko_lib::deposit::count_all;
use mystiko_protos::api::v1::api_response;

let response = count_all();
let total = match response.result {
Some(api_response::Result::Data(data)) => match CountDepositResponse::try_from(data) {
Ok(total) => total,
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"));
}
};

update

Update a Deposit record.

use mystiko_protos::api::handler::v1::{FindOneDepositResponse, UpdateDepositRequest, UpdateDepositResponse};
use mystiko_lib::deposit::find_by_id;
use mystiko_lib::deposit::update;
use mystiko_protos::api::v1::api_response;

let response = find_by_id("deposit id".to_string());
let mut deposit = match response.result {
Some(api_response::Result::Data(data)) => match FindOneDepositResponse::try_from(data) {
Ok(d) => d.deposit.unwrap(),
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"));
}
};
deposit.amount = 2000;
let request = UpdateDepositRequest::builder().deposit(deposit).build();
let response = update(request);
let deposit = match response.result {
Some(api_response::Result::Data(data)) => match UpdateDepositResponse::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"));
}
};

update_batch

Batch update Deposit records.

use mystiko_protos::api::handler::v1::{FindOneDepositResponse, UpdateDepositBatchRequest, UpdateDepositBatchResponse};
use mystiko_lib::deposit::find_by_id;
use mystiko_lib::deposit::update_batch;
use mystiko_protos::api::v1::api_response;

let response = find_by_id("deposit id".to_string());
let mut deposit = match response.result {
Some(api_response::Result::Data(data)) => match FindOneDepositResponse::try_from(data) {
Ok(d) => d.deposit.unwrap(),
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"));
}
};
deposit.amount = 2000;
let request = UpdateDepositBatchRequest::builder().deposits(vec![deposit]).build();
let response = update_batch(request);
let deposits = match response.result {
Some(api_response::Result::Data(data)) => match UpdateDepositBatchResponse::try_from(data) {
Ok(deposits) => deposits,
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"));
}
};

update_by_filter

Update Deposit records based on the conditions specified in the Filter.

use mystiko_protos::storage::v1::{QueryFilter, SubFilter, ColumnValuePair};
use mystiko_protos::storage::v1::UpdateDepositByFilterRequest;
use mystiko_lib::deposit::update_by_filter;

let filter = QueryFilter::from(SubFilter::equal(DocumentColumn::Id, "deposit id".to_string()));
let values = vec![ColumnValuePair::builder().column("amount").value(2000_f64).build()];
let request = UpdateDepositByFilterRequest::builder().column_values(values).filter(filter).build();
let response = update_by_filter(request);
assert!(response.code.unwrap().success);

update_all

Update all Deposit records.

use mystiko_protos::storage::v1::ColumnValuePair;
use mystiko_protos::storage::v1::UpdateAllDepositRequest;
use mystiko_lib::deposit::update_all;

let values = vec![ColumnValuePair::builder().column("amount").value(2000_f64).build()];
let request = UpdateAllDepositRequest::builder().column_values(values).build();
let response = update_all(request);
assert!(response.code.unwrap().success);

delete

Delete a Deposit record.

use mystiko_protos::storage::v1::DeleteDepositRequest;
use mystiko_lib::deposit::delete;

let request = DeleteDepositRequest::builder().deposit(deposit).build();
let response = delete(request);
assert!(response.code.unwrap().success);

delete_batch

Batch delete Deposit records.

use mystiko_protos::storage::v1::DeleteDepositBatchRequest;
use mystiko_lib::deposit::delete_batch;

let request = DeleteDepositBatchRequest::builder().deposits(vec![deposit]).build();
let response = delete_batch(request);
assert!(response.code.unwrap().success);

delete_by_filter

Delete Deposit records based on the conditions specified in the Filter.

use mystiko_protos::storage::v1::{QueryFilter, SubFilter};
use mystiko_protos::storage::v1::DeleteDepositByFilterRequest;
use mystiko_lib::deposit::delete_by_filter;

let filter = QueryFilter::from(SubFilter::equal(DocumentColumn::Id, "deposit id".to_string()));
let request = DeleteDepositByFilterRequest::builder().filter(filter).build();
let response = delete_by_filter(request);
assert!(response.code.unwrap().success);

delete_all

Delete all Deposit records.

use mystiko_lib::deposit::delete_all;

let response = delete_all();
assert!(response.code.unwrap().success);