Skip to content

Commit

Permalink
Merge pull request #129 from rainlanguage/2024-01-23-gui-handle-deposit
Browse files Browse the repository at this point in the history
2024 01 23 gui handle deposit
  • Loading branch information
thedavidmeister authored Jan 25, 2024
2 parents 3f33dd5 + ed02b36 commit 45cc0b4
Show file tree
Hide file tree
Showing 20 changed files with 395 additions and 67 deletions.
22 changes: 10 additions & 12 deletions crates/cli/src/commands/vault/deposit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,16 @@ impl Execute for Deposit {

println!("----- Transaction (1/2): Approve ERC20 token spend -----");
deposit_args
.execute(
tx_args,
|status| {
display_write_transaction_status(status);
},
|status| {
display_write_transaction_status(status);
},
|| {
println!("----- Transaction (2/2): Deposit tokens into Orderbook -----");
},
)
.execute_approve(tx_args.clone(), |status| {
display_write_transaction_status(status);
})
.await?;

println!("----- Transaction (2/2): Deposit tokens into Orderbook -----");
deposit_args
.execute_deposit(tx_args, |status| {
display_write_transaction_status(status);
})
.await?;
Ok(())
}
Expand Down
27 changes: 4 additions & 23 deletions crates/common/src/deposit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ use alloy_ethers_typecast::transaction::WriteTransaction;
use alloy_ethers_typecast::{ethers_address_to_alloy, transaction::WriteTransactionStatus};
use alloy_primitives::{hex::FromHexError, Address, U256};
use rain_orderbook_bindings::{IOrderBookV3::depositCall, IERC20::approveCall};
use serde::{Deserialize, Serialize};
use std::convert::TryInto;

#[derive(Clone)]
#[derive(Clone, Serialize, Deserialize)]
pub struct DepositArgs {
pub token: String,
pub vault_id: U256,
Expand All @@ -33,28 +34,8 @@ impl DepositArgs {
}
}

pub async fn execute<
A: Fn(WriteTransactionStatus<approveCall>),
D: Fn(WriteTransactionStatus<depositCall>),
S: Fn(),
>(
&self,
transaction_args: TransactionArgs,
approve_transaction_status_changed: A,
deposit_transaction_status_changed: D,
approve_transaction_success: S,
) -> Result<(), WritableTransactionExecuteError> {
self.execute_approve(transaction_args.clone(), approve_transaction_status_changed)
.await?;
(approve_transaction_success)();
self.execute_deposit(transaction_args, deposit_transaction_status_changed)
.await?;

Ok(())
}

/// Execute ERC20 approve call
async fn execute_approve<S: Fn(WriteTransactionStatus<approveCall>)>(
pub async fn execute_approve<S: Fn(WriteTransactionStatus<approveCall>)>(
&self,
transaction_args: TransactionArgs,
transaction_status_changed: S,
Expand All @@ -81,7 +62,7 @@ impl DepositArgs {
}

/// Execute OrderbookV3 deposit call
async fn execute_deposit<S: Fn(WriteTransactionStatus<depositCall>)>(
pub async fn execute_deposit<S: Fn(WriteTransactionStatus<depositCall>)>(
&self,
transaction_args: TransactionArgs,
transaction_status_changed: S,
Expand Down
3 changes: 2 additions & 1 deletion crates/common/src/transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use alloy_ethers_typecast::{
};
use alloy_primitives::{hex::FromHexError, Address, U256};
use alloy_sol_types::SolCall;
use serde::{Deserialize, Serialize};
use thiserror::Error;

#[derive(Error, Debug)]
Expand All @@ -25,7 +26,7 @@ pub enum TransactionArgsError {
LedgerClient(#[from] LedgerClientError),
}

#[derive(Clone)]
#[derive(Clone, Serialize, Deserialize)]
pub struct TransactionArgs {
pub orderbook_address: String,
pub derivation_index: Option<usize>,
Expand Down
6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
typeshare crates/subgraph/src/types/order.rs --lang=typescript --output-file=tauri-app/src/lib/typeshare/order.ts;
typeshare crates/subgraph/src/types/orders.rs --lang=typescript --output-file=tauri-app/src/lib/typeshare/orders.ts;
typeshare tauri-app/src-tauri/src/toast.rs --lang=typescript --output-file=tauri-app/src/lib/typeshare/toast.ts;
typeshare tauri-app/src-tauri/src/transaction_status.rs --lang=typescript --output-file=tauri-app/src/lib/typeshare/transactionStatus.ts;
'';
additionalBuildInputs = [
pkgs.typeshare
Expand Down
32 changes: 18 additions & 14 deletions tauri-app/src-tauri/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions tauri-app/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ rain_orderbook_common = { path = "../../crates/common" }
rain_orderbook_subgraph_queries = { path = "../../crates/subgraph" }
alloy-ethers-typecast = { git = "https://github.com/rainlanguage/alloy-ethers-typecast", rev = "47b2d9f073ff891254af6ece6f0efc140566d3d5" }
alloy-primitives = "0.5.4"
alloy-sol-types = "0.5.4"
typeshare = "1.0.1"
chrono = { version = "0.4.32", features = ["serde"] }
uuid = { version = "1.7.0", features = ["serde"] }

[features]
# this feature is used for production builds or when `devPath` points to the filesystem
Expand Down
56 changes: 53 additions & 3 deletions tauri-app/src-tauri/src/commands/vault.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
use rain_orderbook_common::subgraph::SubgraphArgs;
use rain_orderbook_subgraph_queries::types::vault::TokenVault as VaultDetail;
use rain_orderbook_subgraph_queries::types::vaults::TokenVault as VaultsListItem;
use crate::transaction_status::{SeriesPosition, TransactionStatusNoticeRwLock};
use rain_orderbook_common::{
deposit::DepositArgs, subgraph::SubgraphArgs, transaction::TransactionArgs,
};
use rain_orderbook_subgraph_queries::types::{
vault::TokenVault as VaultDetail, vaults::TokenVault as VaultsListItem,
};
use tauri::AppHandle;

#[tauri::command]
pub async fn vaults_list(subgraph_args: SubgraphArgs) -> Result<Vec<VaultsListItem>, String> {
Expand All @@ -23,3 +28,48 @@ pub async fn vault_detail(id: String, subgraph_args: SubgraphArgs) -> Result<Vau
.await
.map_err(|e| e.to_string())
}

#[tauri::command]
pub async fn vault_deposit(
app_handle: AppHandle,
deposit_args: DepositArgs,
transaction_args: TransactionArgs,
) -> Result<(), String> {
let tx_status_notice = TransactionStatusNoticeRwLock::new(
"Approve ERC20 token transfer".into(),
Some(SeriesPosition {
position: 1,
total: 2,
}),
);
deposit_args
.execute_approve(transaction_args.clone(), |status| {
tx_status_notice.update_status_and_emit(app_handle.clone(), status);
})
.await
.map_err(|e| {
let text = format!("{}", e);
tx_status_notice.set_failed_status_and_emit(app_handle.clone(), text.clone());
text
})?;

let tx_status_notice = TransactionStatusNoticeRwLock::new(
"Deposit tokens into Orderbook".into(),
Some(SeriesPosition {
position: 2,
total: 2,
}),
);
deposit_args
.execute_deposit(transaction_args.clone(), |status| {
tx_status_notice.update_status_and_emit(app_handle.clone(), status);
})
.await
.map_err(|e| {
let text = format!("{}", e);
tx_status_notice.set_failed_status_and_emit(app_handle.clone(), text.clone());
text
})?;

Ok(())
}
6 changes: 5 additions & 1 deletion tauri-app/src-tauri/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]

pub mod toast;
pub mod transaction_status;

mod commands;
use commands::chain::get_chainid;
use commands::vault::{vault_detail, vaults_list};
use commands::vault::{vault_deposit, vault_detail, vaults_list};
use commands::wallet::get_address_from_ledger;

fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![
vaults_list,
vault_detail,
vault_deposit,
get_address_from_ledger,
get_chainid
])
Expand Down
Loading

0 comments on commit 45cc0b4

Please sign in to comment.