Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/daemon/src/pusher/pusher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ impl Pusher {
let message = format!("Closed perpetual position for {value} at {to_address}");
Ok(Message { title, message: Some(message) })
}
TransactionType::AssetActivation | TransactionType::PerpetualModifyPosition => todo!(),
TransactionType::AssetActivation | TransactionType::PerpetualModifyPosition | TransactionType::EarnDeposit | TransactionType::EarnWithdraw => todo!(),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using todo!() in a daemon service is risky as it will cause a panic if an EarnDeposit or EarnWithdraw transaction is encountered. It's better to handle these types gracefully, for example by returning a generic message or a specific error, to ensure service stability.

TransactionType::StakeFreeze => Ok(Message {
title: localizer.notification_freeze_title(self.get_value(amount, asset.symbol.clone()).as_str()),
message: None,
Expand Down
3 changes: 2 additions & 1 deletion crates/gem_aptos/src/provider/staking_mapper.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use chrono::{DateTime, Utc};
use num_bigint::BigUint;
use primitives::{Chain, DelegationBase, DelegationState, DelegationValidator};
use primitives::{Chain, DelegationBase, DelegationState, DelegationValidator, EarnProviderType};

use crate::models::{DelegationPoolStake, StakingConfig, ValidatorInfo, ValidatorSet};

Expand All @@ -21,6 +21,7 @@ pub fn map_validator(validator: &ValidatorInfo, apy: f64, commission: f64, is_ac
is_active,
commission,
apr: apy,
provider_type: EarnProviderType::Stake,
}
}

Expand Down
2 changes: 1 addition & 1 deletion crates/gem_aptos/src/rpc/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ impl<C: Client> AptosClient<C> {
}
}
TransactionInputType::Swap(_, _, _) | TransactionInputType::Stake(_, _) | TransactionInputType::TokenApprove(_, _) | TransactionInputType::Generic(_, _, _) => Ok(1500),
TransactionInputType::Perpetual(_, _) => unimplemented!(),
TransactionInputType::Perpetual(_, _) | TransactionInputType::Earn(_, _, _) => unimplemented!(),
}
}

Expand Down
18 changes: 12 additions & 6 deletions crates/gem_cosmos/src/provider/preload_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ fn get_fee(chain: CosmosChain, input_type: &TransactionInputType) -> BigInt {
| TransactionInputType::Account(_, _)
| TransactionInputType::TokenApprove(_, _)
| TransactionInputType::Generic(_, _, _)
| TransactionInputType::Perpetual(_, _) => BigInt::from(3_000u64),
| TransactionInputType::Perpetual(_, _)
| TransactionInputType::Earn(_, _, _) => BigInt::from(3_000u64),
TransactionInputType::Swap(_, _, _) => BigInt::from(3_000u64),
TransactionInputType::Stake(_, _) => BigInt::from(25_000u64),
},
Expand All @@ -22,7 +23,8 @@ fn get_fee(chain: CosmosChain, input_type: &TransactionInputType) -> BigInt {
| TransactionInputType::Account(_, _)
| TransactionInputType::TokenApprove(_, _)
| TransactionInputType::Generic(_, _, _)
| TransactionInputType::Perpetual(_, _) => BigInt::from(10_000u64),
| TransactionInputType::Perpetual(_, _)
| TransactionInputType::Earn(_, _, _) => BigInt::from(10_000u64),
TransactionInputType::Swap(_, _, _) => BigInt::from(10_000u64),
TransactionInputType::Stake(_, _) => BigInt::from(100_000u64),
},
Expand All @@ -33,7 +35,8 @@ fn get_fee(chain: CosmosChain, input_type: &TransactionInputType) -> BigInt {
| TransactionInputType::Account(_, _)
| TransactionInputType::TokenApprove(_, _)
| TransactionInputType::Generic(_, _, _)
| TransactionInputType::Perpetual(_, _) => BigInt::from(3_000u64),
| TransactionInputType::Perpetual(_, _)
| TransactionInputType::Earn(_, _, _) => BigInt::from(3_000u64),
TransactionInputType::Swap(_, _, _) => BigInt::from(3_000u64),
TransactionInputType::Stake(_, _) => BigInt::from(10_000u64),
},
Expand All @@ -44,7 +47,8 @@ fn get_fee(chain: CosmosChain, input_type: &TransactionInputType) -> BigInt {
| TransactionInputType::Account(_, _)
| TransactionInputType::TokenApprove(_, _)
| TransactionInputType::Generic(_, _, _)
| TransactionInputType::Perpetual(_, _) => BigInt::from(100_000u64),
| TransactionInputType::Perpetual(_, _)
| TransactionInputType::Earn(_, _, _) => BigInt::from(100_000u64),
TransactionInputType::Swap(_, _, _) => BigInt::from(100_000u64),
TransactionInputType::Stake(_, _) => BigInt::from(200_000u64),
},
Expand All @@ -55,7 +59,8 @@ fn get_fee(chain: CosmosChain, input_type: &TransactionInputType) -> BigInt {
| TransactionInputType::Account(_, _)
| TransactionInputType::TokenApprove(_, _)
| TransactionInputType::Generic(_, _, _)
| TransactionInputType::Perpetual(_, _) => BigInt::from(100_000_000_000_000u64),
| TransactionInputType::Perpetual(_, _)
| TransactionInputType::Earn(_, _, _) => BigInt::from(100_000_000_000_000u64),
TransactionInputType::Swap(_, _, _) => BigInt::from(100_000_000_000_000u64),
TransactionInputType::Stake(_, _) => BigInt::from(1_000_000_000_000_000u64),
},
Expand All @@ -71,7 +76,8 @@ fn get_gas_limit(input_type: &TransactionInputType, _chain: CosmosChain) -> u64
| TransactionInputType::Account(_, _)
| TransactionInputType::TokenApprove(_, _)
| TransactionInputType::Generic(_, _, _)
| TransactionInputType::Perpetual(_, _) => 200_000,
| TransactionInputType::Perpetual(_, _)
| TransactionInputType::Earn(_, _, _) => 200_000,
TransactionInputType::Swap(_, _, _) => 200_000,
TransactionInputType::Stake(_, operation) => match operation {
StakeType::Stake(_) | StakeType::Unstake(_) => 1_000_000,
Expand Down
3 changes: 2 additions & 1 deletion crates/gem_cosmos/src/provider/staking_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use crate::models::{OsmosisDistributionProportions, OsmosisMintParams};

use number_formatter::BigNumberFormatter;
use primitives::chain_cosmos::CosmosChain;
use primitives::{DelegationBase, DelegationState, DelegationValidator};
use primitives::{DelegationBase, DelegationState, DelegationValidator, EarnProviderType};
use std::collections::HashMap;

const BOND_STATUS_BONDED: &str = "BOND_STATUS_BONDED";
Expand Down Expand Up @@ -68,6 +68,7 @@ pub fn map_staking_validators(validators: Vec<Validator>, chain: CosmosChain, ap
is_active,
commission: commission_rate * 100.0,
apr: validator_apr,
provider_type: EarnProviderType::Stake,
}
})
.collect()
Expand Down
23 changes: 22 additions & 1 deletion crates/gem_evm/src/provider/preload_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,13 @@ pub fn get_transaction_params(chain: EVMChain, input: &TransactionLoadInput) ->
}
_ => Err("Unsupported chain for staking".into()),
},
TransactionInputType::Earn(_, _, earn_data) => {
if let Some(approval) = &earn_data.approval {
Ok(TransactionParams::new(approval.token.clone(), encode_erc20_approve(&approval.spender)?, BigInt::from(0)))
} else {
Ok(TransactionParams::new(earn_data.contract_address.clone(), hex::decode(&earn_data.call_data)?, value))
}
}
_ => Err("Unsupported transfer type".into()),
}
}
Expand Down Expand Up @@ -183,6 +190,14 @@ pub fn get_extra_fee_gas_limit(input: &TransactionLoadInput) -> Result<BigInt, B
Ok(BigInt::from(0))
}
}
TransactionInputType::Earn(_, _, earn_data) => {
if earn_data.approval.is_some() {
if let Some(gas_limit) = &earn_data.gas_limit {
return Ok(BigInt::from_str_radix(gas_limit, 10)?);
}
}
Ok(BigInt::from(0))
}
_ => Ok(BigInt::from(0)),
}
}
Expand Down Expand Up @@ -284,7 +299,7 @@ mod tests {
use super::*;
use crate::everstake::{EVERSTAKE_POOL_ADDRESS, IAccounting};
use num_bigint::BigUint;
use primitives::{Delegation, DelegationBase, DelegationState, DelegationValidator, RedelegateData};
use primitives::{Delegation, DelegationBase, DelegationState, DelegationValidator, EarnProviderType, RedelegateData};

fn everstake_validator() -> DelegationValidator {
DelegationValidator {
Expand All @@ -294,6 +309,7 @@ mod tests {
is_active: true,
commission: 10.0,
apr: 4.2,
provider_type: EarnProviderType::Stake,
}
}

Expand Down Expand Up @@ -428,6 +444,7 @@ mod tests {
is_active: true,
commission: 5.0,
apr: 10.0,
provider_type: EarnProviderType::Stake,
};

let stake_type = StakeType::Stake(validator);
Expand Down Expand Up @@ -464,6 +481,7 @@ mod tests {
is_active: true,
commission: 5.0,
apr: 10.0,
provider_type: EarnProviderType::Stake,
},
price: None,
};
Expand Down Expand Up @@ -501,6 +519,7 @@ mod tests {
is_active: true,
commission: 5.0,
apr: 10.0,
provider_type: EarnProviderType::Stake,
},
price: None,
};
Expand All @@ -512,6 +531,7 @@ mod tests {
is_active: true,
commission: 3.0,
apr: 12.0,
provider_type: EarnProviderType::Stake,
};

let redelegate_data = RedelegateData { delegation, to_validator };
Expand Down Expand Up @@ -549,6 +569,7 @@ mod tests {
is_active: true,
commission: 5.0,
apr: 10.0,
provider_type: EarnProviderType::Stake,
},
price: None,
};
Expand Down
3 changes: 2 additions & 1 deletion crates/gem_evm/src/provider/staking_ethereum.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use gem_client::Client;
use num_bigint::BigUint;
use num_traits::Zero;
use primitives::{AssetBalance, AssetId, Balance, Chain, DelegationBase, DelegationState, DelegationValidator};
use primitives::{AssetBalance, AssetId, Balance, Chain, DelegationBase, DelegationState, DelegationValidator, EarnProviderType};
use std::error::Error;

use crate::everstake::{EVERSTAKE_POOL_ADDRESS, get_everstake_account_state, map_balance_to_delegation, map_withdraw_request_to_delegations};
Expand Down Expand Up @@ -32,6 +32,7 @@ impl<C: Client + Clone> EthereumClient<C> {
is_active: true,
commission: 0.1,
apr: apy,
provider_type: EarnProviderType::Stake,
}])
}

Expand Down
3 changes: 2 additions & 1 deletion crates/gem_evm/src/provider/staking_monad.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use chrono::{DateTime, Utc};
use gem_client::Client;
use num_bigint::BigUint;
use num_traits::{ToPrimitive, Zero};
use primitives::{AssetBalance, AssetId, Chain, DelegationBase, DelegationState, DelegationValidator};
use primitives::{AssetBalance, AssetId, Chain, DelegationBase, DelegationState, DelegationValidator, EarnProviderType};

use crate::monad::{
IMonadStakingLens, MONAD_SCALE, MonadLensBalance, MonadLensDelegation, MonadLensValidatorInfo, STAKING_LENS_CONTRACT, decode_get_lens_apys, decode_get_lens_balance,
Expand Down Expand Up @@ -124,6 +124,7 @@ impl<C: Client + Clone> EthereumClient<C> {
is_active: validator.is_active,
commission: Self::lens_commission_rate(&validator.commission),
apr: if validator.apy_bps > 0 { validator.apy_bps as f64 / 100.0 } else { network_apy },
provider_type: EarnProviderType::Stake,
}
}

Expand Down
3 changes: 2 additions & 1 deletion crates/gem_evm/src/provider/staking_smartchain.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use gem_bsc::stake_hub::{
};
use gem_client::Client;
use num_bigint::BigUint;
use primitives::{AssetId, Chain, DelegationBase, DelegationState, DelegationValidator};
use primitives::{AssetId, Chain, DelegationBase, DelegationState, DelegationValidator, EarnProviderType};
use std::{error::Error, str::FromStr};

#[cfg(feature = "rpc")]
Expand Down Expand Up @@ -37,6 +37,7 @@ impl<C: Client + Clone> EthereumClient<C> {
is_active: !v.jailed,
commission: v.commission as f64 / 10000.0,
apr: v.apy as f64 / 100.0,
provider_type: EarnProviderType::Stake,
})
.collect())
}
Expand Down
3 changes: 2 additions & 1 deletion crates/gem_hypercore/src/provider/staking_mapper.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::models::balance::{DelegationBalance, Validator};
use num_bigint::BigUint;
use number_formatter::BigNumberFormatter;
use primitives::{Asset, Chain, DelegationBase, DelegationState, DelegationValidator};
use primitives::{Asset, Chain, DelegationBase, DelegationState, DelegationValidator, EarnProviderType};
use std::str::FromStr;

pub fn map_staking_validators(validators: Vec<Validator>, chain: Chain, apy: Option<f64>) -> Vec<DelegationValidator> {
Expand All @@ -15,6 +15,7 @@ pub fn map_staking_validators(validators: Vec<Validator>, chain: Chain, apy: Opt
is_active: x.is_active,
commission: x.commission,
apr: calculated_apy,
provider_type: EarnProviderType::Stake,
})
.collect()
}
Expand Down
4 changes: 3 additions & 1 deletion crates/gem_hypercore/src/signer/core_signer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ mod tests {
use crate::core::actions::Grouping;
use num_bigint::{BigInt, BigUint};
use primitives::{
Asset, Chain, Delegation, DelegationBase, DelegationState, DelegationValidator, GasPriceType, StakeType, TransactionInputType, TransactionLoadInput,
Asset, Chain, Delegation, DelegationBase, DelegationState, DelegationValidator, EarnProviderType, GasPriceType, StakeType, TransactionInputType, TransactionLoadInput,
TransactionLoadMetadata,
};

Expand All @@ -443,6 +443,7 @@ mod tests {
is_active: true,
commission: 0.0,
apr: 0.0,
provider_type: EarnProviderType::Stake,
};
let input = TransactionLoadInput {
input_type: TransactionInputType::Stake(asset.clone(), StakeType::Stake(validator)),
Expand Down Expand Up @@ -497,6 +498,7 @@ mod tests {
is_active: true,
commission: 0.0,
apr: 0.0,
provider_type: EarnProviderType::Stake,
},
price: None,
};
Expand Down
6 changes: 4 additions & 2 deletions crates/gem_solana/src/provider/preload_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ fn get_gas_limit(input_type: &TransactionInputType) -> BigInt {
| TransactionInputType::Account(_, _)
| TransactionInputType::TokenApprove(_, _)
| TransactionInputType::Generic(_, _, _)
| TransactionInputType::Perpetual(_, _) => BigInt::from(100_000),
| TransactionInputType::Perpetual(_, _)
| TransactionInputType::Earn(_, _, _) => BigInt::from(100_000),
TransactionInputType::Swap(_, _, _) => BigInt::from(420_000),
TransactionInputType::Stake(_, _) => BigInt::from(100_000),
}
Expand All @@ -54,7 +55,8 @@ fn get_multiple_of(input_type: &TransactionInputType) -> i64 {
| TransactionInputType::Account(asset, _)
| TransactionInputType::TokenApprove(asset, _)
| TransactionInputType::Generic(asset, _, _)
| TransactionInputType::Perpetual(asset, _) => match &asset.id.token_subtype() {
| TransactionInputType::Perpetual(asset, _)
| TransactionInputType::Earn(asset, _, _) => match &asset.id.token_subtype() {
AssetSubtype::NATIVE => 25_000,
AssetSubtype::TOKEN => 50_000,
},
Expand Down
3 changes: 2 additions & 1 deletion crates/gem_solana/src/provider/staking_mapper.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::models::{EpochInfo, TokenAccountInfo, VoteAccount};
use chrono::Utc;
use num_bigint::BigUint;
use primitives::{AssetId, Chain, DelegationBase, DelegationState, DelegationValidator};
use primitives::{AssetId, Chain, DelegationBase, DelegationState, DelegationValidator, EarnProviderType};

pub fn map_staking_validators(vote_accounts: Vec<VoteAccount>, chain: Chain, network_apy: f64) -> Vec<DelegationValidator> {
vote_accounts
Expand All @@ -18,6 +18,7 @@ pub fn map_staking_validators(vote_accounts: Vec<VoteAccount>, chain: Chain, net
is_active,
commission: validator.commission as f64,
apr: validator_apr,
provider_type: EarnProviderType::Stake,
}
})
.collect()
Expand Down
3 changes: 2 additions & 1 deletion crates/gem_sui/src/provider/preload_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ fn get_gas_limit(input_type: &TransactionInputType) -> u64 {
| TransactionInputType::Deposit(_)
| TransactionInputType::TokenApprove(_, _)
| TransactionInputType::Generic(_, _, _)
| TransactionInputType::Perpetual(_, _) => GAS_BUDGET,
| TransactionInputType::Perpetual(_, _)
| TransactionInputType::Earn(_, _, _) => GAS_BUDGET,
TransactionInputType::Swap(_, _, _) => 50_000_000,
TransactionInputType::Stake(_, _) => GAS_BUDGET,
}
Expand Down
3 changes: 2 additions & 1 deletion crates/gem_sui/src/provider/staking_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::models::RpcSuiSystemState;
use crate::models::staking::{SuiStakeDelegation, SuiSystemState, SuiValidators};
use chrono::{DateTime, Utc};
use num_bigint::BigUint;
use primitives::{Chain, DelegationBase, DelegationState, DelegationValidator, StakeValidator};
use primitives::{Chain, DelegationBase, DelegationState, DelegationValidator, EarnProviderType, StakeValidator};

pub fn map_validators(validators: SuiValidators, default_apy: f64) -> Vec<DelegationValidator> {
validators
Expand All @@ -15,6 +15,7 @@ pub fn map_validators(validators: SuiValidators, default_apy: f64) -> Vec<Delega
is_active: true,
commission: 0.0,
apr: default_apy,
provider_type: EarnProviderType::Stake,
})
.collect()
}
Expand Down
1 change: 1 addition & 0 deletions crates/gem_tron/src/provider/balances_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ fn new_stake_balance(
pending_unconfirmed: BigUint::from(0u32),
rewards,
reserved: BigUint::from(0u32),
earn: BigUint::from(0u32),
withdrawable: BigUint::from(0u32),
metadata: Some(metadata),
}
Expand Down
2 changes: 2 additions & 0 deletions crates/gem_tron/src/provider/preload_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ mod tests {
use super::*;
use crate::models::account::TronFrozen;
use primitives::Chain;
use primitives::EarnProviderType;
use primitives::delegation::DelegationValidator;

fn chain_parameter(key: &str, value: i64) -> ChainParameter {
Expand Down Expand Up @@ -277,6 +278,7 @@ mod tests {
is_active: true,
commission: 0.0,
apr: 0.0,
provider_type: EarnProviderType::Stake,
});

let with_bandwidth = account_usage(DEFAULT_BANDWIDTH_BYTES, 0, 0);
Expand Down
Loading