Skip to content
Open
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
1 change: 1 addition & 0 deletions Cargo.lock

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

2 changes: 1 addition & 1 deletion apps/api/src/referral/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ pub async fn redeem_rewards(
request: Authenticated<RedemptionRequest>,
client: &State<Mutex<RewardsRedemptionClient>>,
) -> Result<ApiResponse<RedemptionResult>, ApiError> {
if wallet.0.address() != &request.auth.address {
if wallet.0.address() != request.auth.address {
return Err(ApiError::BadRequest("Address mismatch".to_string()));
}
Ok(client.lock().await.redeem(&wallet.id(), &request.data.id, request.auth.device.id).await?.into())
Expand Down
13 changes: 1 addition & 12 deletions crates/chain_primitives/src/balance_diff.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,7 @@
use num_bigint::{BigInt, BigUint};
use std::collections::HashMap;

use primitives::{AssetId, TransactionSwapMetadata};

/// Address -> Vec<BalanceDiff>
pub type BalanceDiffMap = HashMap<String, Vec<BalanceDiff>>;

#[derive(Debug)]
pub struct BalanceDiff {
pub asset_id: AssetId,
pub from_value: Option<BigInt>,
pub to_value: Option<BigInt>,
pub diff: BigInt,
}
pub use primitives::{BalanceDiff, BalanceDiffMap};

pub struct SwapMapper;

Expand Down
13 changes: 11 additions & 2 deletions crates/chain_traits/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ use primitives::chart::ChartCandleStick;
use primitives::perpetual::{PerpetualData, PerpetualPositionsSummary};
use primitives::portfolio::PerpetualPortfolio;
use primitives::{
AddressStatus, Asset, AssetBalance, BroadcastOptions, Chain, ChartPeriod, DelegationBase, DelegationValidator, FeeRate, NodeSyncStatus, Transaction, TransactionFee,
TransactionInputType, TransactionLoadData, TransactionLoadInput, TransactionLoadMetadata, TransactionPreloadInput, TransactionStateRequest, TransactionUpdate, UTXO,
AddressStatus, Asset, AssetBalance, BroadcastOptions, Chain, ChartPeriod, DelegationBase, DelegationValidator, FeeRate, NodeSyncStatus, SimulationInput, SimulationResult,
Transaction, TransactionFee, TransactionInputType, TransactionLoadData, TransactionLoadInput, TransactionLoadMetadata, TransactionPreloadInput, TransactionStateRequest,
TransactionUpdate, UTXO,
};

pub trait ChainTraits:
Expand All @@ -21,6 +22,7 @@ pub trait ChainTraits:
+ ChainToken
+ ChainTransactionLoad
+ ChainAddressStatus
+ ChainSimulation
{
}

Expand Down Expand Up @@ -156,3 +158,10 @@ pub trait ChainAddressStatus: Send + Sync {
Ok(vec![])
}
}

#[async_trait]
pub trait ChainSimulation: Send + Sync {
async fn simulate_transaction(&self, _input: SimulationInput) -> Result<SimulationResult, Box<dyn Error + Send + Sync>> {
Err("Chain does not support transaction simulation".into())
}
}
5 changes: 4 additions & 1 deletion crates/gem_algorand/src/rpc/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use crate::{
use gem_client::{CONTENT_TYPE, ContentType};

#[cfg(feature = "rpc")]
use chain_traits::{ChainAccount, ChainAddressStatus, ChainPerpetual, ChainProvider, ChainStaking, ChainTraits};
use chain_traits::{ChainAccount, ChainAddressStatus, ChainPerpetual, ChainProvider, ChainSimulation, ChainStaking, ChainTraits};
#[cfg(feature = "rpc")]
use gem_client::{Client, ClientExt};
#[cfg(feature = "rpc")]
Expand Down Expand Up @@ -80,5 +80,8 @@ impl<C: Client> ChainPerpetual for AlgorandClient<C> {}
#[cfg(feature = "rpc")]
impl<C: Client> ChainAddressStatus for AlgorandClient<C> {}

#[cfg(feature = "rpc")]
impl<C: Client> ChainSimulation for AlgorandClient<C> {}

#[cfg(feature = "rpc")]
impl<C: Client> ChainTraits for AlgorandClient<C> {}
5 changes: 4 additions & 1 deletion crates/gem_aptos/src/rpc/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ impl<C: Client> AptosClient<C> {
mod chain_trait_impls {
use super::*;
use async_trait::async_trait;
use chain_traits::{ChainAccount, ChainAddressStatus, ChainPerpetual};
use chain_traits::{ChainAccount, ChainAddressStatus, ChainPerpetual, ChainSimulation};

#[async_trait]
impl<C: Client> ChainAccount for AptosClient<C> {}
Expand All @@ -231,4 +231,7 @@ mod chain_trait_impls {

#[async_trait]
impl<C: Client> ChainAddressStatus for AptosClient<C> {}

#[async_trait]
impl<C: Client> ChainSimulation for AptosClient<C> {}
}
4 changes: 3 additions & 1 deletion crates/gem_bitcoin/src/rpc/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use crate::models::account::BitcoinAccount;
use crate::models::block::{BitcoinBlock, BitcoinNodeInfo, Block, Status};
use crate::models::fee::BitcoinFeeResult;
use crate::models::transaction::{AddressDetails, BitcoinTransactionBroacastResult, BitcoinUTXO, Transaction};
use chain_traits::{ChainAddressStatus, ChainPerpetual, ChainStaking, ChainToken, ChainTraits};
use chain_traits::{ChainAddressStatus, ChainPerpetual, ChainSimulation, ChainStaking, ChainToken, ChainTraits};
use gem_client::{CONTENT_TYPE, Client, ClientExt, ContentType};
use primitives::{BitcoinChain, chain::Chain};
use std::collections::HashMap;
Expand Down Expand Up @@ -75,6 +75,8 @@ impl<C: Client> ChainAddressStatus for BitcoinClient<C> {}

impl<C: Client> ChainToken for BitcoinClient<C> {}

impl<C: Client> ChainSimulation for BitcoinClient<C> {}

impl<C: Client> ChainTraits for BitcoinClient<C> {}

impl<C: Client> chain_traits::ChainProvider for BitcoinClient<C> {
Expand Down
4 changes: 3 additions & 1 deletion crates/gem_cardano/src/rpc/client.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::error::Error;

use chain_traits::{ChainAddressStatus, ChainPerpetual, ChainProvider, ChainStaking, ChainTraits};
use chain_traits::{ChainAddressStatus, ChainPerpetual, ChainProvider, ChainSimulation, ChainStaking, ChainTraits};
use gem_client::{Client, ClientExt};
use primitives::chain::Chain;

Expand Down Expand Up @@ -129,6 +129,8 @@ impl<C: Client> ChainPerpetual for CardanoClient<C> {}

impl<C: Client> ChainAddressStatus for CardanoClient<C> {}

impl<C: Client> ChainSimulation for CardanoClient<C> {}

impl<C: Client> ChainTraits for CardanoClient<C> {}

impl<C: Client> ChainProvider for CardanoClient<C> {
Expand Down
4 changes: 3 additions & 1 deletion crates/gem_cosmos/src/rpc/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use crate::models::{
AnnualProvisionsResponse, BlockResponse, InflationResponse, OsmosisEpochProvisionsResponse, OsmosisMintParamsResponse, StakingPoolResponse, SupplyResponse,
TransactionResponse, TransactionsResponse, ValidatorsResponse,
};
use chain_traits::{ChainAccount, ChainAddressStatus, ChainPerpetual, ChainTraits};
use chain_traits::{ChainAccount, ChainAddressStatus, ChainPerpetual, ChainSimulation, ChainTraits};
use gem_client::{Client, ClientExt};
use primitives::chain_cosmos::CosmosChain;

Expand Down Expand Up @@ -158,6 +158,8 @@ impl<C: Client> ChainPerpetual for CosmosClient<C> {}

impl<C: Client> ChainAddressStatus for CosmosClient<C> {}

impl<C: Client> ChainSimulation for CosmosClient<C> {}

impl<C: Client> ChainTraits for CosmosClient<C> {}

impl<C: Client> chain_traits::ChainProvider for CosmosClient<C> {
Expand Down
3 changes: 2 additions & 1 deletion crates/gem_evm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ edition = { workspace = true }

[features]
default = []
rpc = ["gem_jsonrpc/client", "dep:async-trait", "dep:chain_traits"]
rpc = ["gem_jsonrpc/client", "dep:async-trait", "dep:chain_traits", "dep:futures"]
reqwest = ["gem_jsonrpc/reqwest", "gem_client/reqwest", "dep:reqwest"]
signer = ["dep:alloy-signer", "dep:alloy-signer-local", "dep:alloy-network", "dep:alloy-rlp", "dep:alloy-consensus"]
chain_integration_tests = ["rpc", "reqwest", "settings/testkit"]
Expand Down Expand Up @@ -43,6 +43,7 @@ reqwest = { workspace = true, features = ["json"], optional = true }
chrono = { workspace = true }
async-trait = { workspace = true, optional = true }
chain_traits = { path = "../chain_traits", optional = true }
futures = { workspace = true, optional = true }

[dev-dependencies]
primitives = { path = "../primitives", features = ["testkit"] }
Expand Down
1 change: 1 addition & 0 deletions crates/gem_evm/src/provider/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ pub mod balances_smartchain;
pub mod preload;
pub mod preload_mapper;
pub mod preload_optimism;
pub mod simulation;
pub mod staking;
pub mod staking_ethereum;
pub mod staking_mapper;
Expand Down
Loading
Loading