Skip to content

Commit e8420bc

Browse files
authored
feat: Plat-6303 store solana submitted transactions to db and run status check logic (#398)
* chore: initial * feat: add repos logic and config processing logic * chore: fixes * chore: imprve env sync_nonce and add service info log * chore: lint * chore: add notifications crud endpoints * chore: add notification request validations * chore: initial work for notificaitons crud * chore: fix openapi generation * chore: improvements * chore: improvements * chore: improvements * chore: impr * chore: intial signers crud impl * chore: improvements * chore: refactor * chore: impr * refactor + remove vault cloud due to deprecation of service * chore: impr * chore: fix clippy * chore: fixes * chore: add noboost comments * chore: typo * chore: stellar * chore: noboost * feat: plat-6845 implement relayer models * chore: improvements * chore: improvements * chore: impr * chore: implement merge patch logic for relayer * chore: improvements * chore: improvements * chore: impr * chore: clippy * chore: cleanup * chore: add controller tests * chore: more contrller tests * chore: resolve bug * chore: tests * chore: more tests * chore: fixes * chore: impr * chore: add nosemgrep rule * feat: securely store secrets in storage * chore: allow starting service with empty config * chore: improvements * chore: clippy * chore: pr suggestions * chore: impr * chore: improvements * chore: format * chore: improvements * feat: plat-6864 impre response schema and revert some model name changes to avoid sdk breaking changes * chore: PR suggestion * chore: imprive lcov ingore rules * chore: fix regex * chore: attempt * chore: attempt * feat: implement solana status check logic * chore: impr * chore: remove network
1 parent 801e2f7 commit e8420bc

29 files changed

Lines changed: 1454 additions & 210 deletions

src/domain/relayer/solana/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub async fn create_solana_relayer<
4747
RelayerError::NetworkConfiguration(format!("Network {} not found", relayer.network))
4848
})?;
4949

50-
let network = SolanaNetwork::try_from(network_repo)?;
50+
let network = SolanaNetwork::try_from(network_repo.clone())?;
5151
let provider = Arc::new(get_network_provider(
5252
&network,
5353
relayer.custom_rpc_urls.clone(),
@@ -56,10 +56,12 @@ pub async fn create_solana_relayer<
5656
let jupiter_service = Arc::new(JupiterService::new_from_network(relayer.network.as_str()));
5757
let rpc_methods = SolanaRpcMethodsImpl::new(
5858
relayer.clone(),
59+
network_repo.clone(),
5960
provider.clone(),
6061
signer_service.clone(),
6162
jupiter_service.clone(),
6263
job_producer.clone(),
64+
transaction_repository.clone(),
6365
);
6466
let rpc_handler = Arc::new(SolanaRpcHandler::new(rpc_methods));
6567
let dex_service = create_network_dex_generic(

src/domain/relayer/solana/rpc/handler.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,18 @@
99
//! invokes the respective methods of the underlying implementation.
1010
use super::{SolanaRpcError, SolanaRpcMethods};
1111
use crate::{
12-
models::{JsonRpcRequest, JsonRpcResponse},
13-
models::{NetworkRpcRequest, NetworkRpcResult, SolanaRpcRequest, SolanaRpcResult},
12+
domain::SolanaRpcMethodsImpl,
13+
models::{
14+
JsonRpcRequest, JsonRpcResponse, NetworkRpcRequest, NetworkRpcResult, SolanaRpcRequest,
15+
SolanaRpcResult,
16+
},
1417
};
1518
use eyre::Result;
1619
use log::info;
20+
use std::sync::Arc;
21+
22+
pub type SolanaRpcHandlerType<SP, S, JS, J, TR> =
23+
Arc<SolanaRpcHandler<SolanaRpcMethodsImpl<SP, S, JS, J, TR>>>;
1724

1825
pub struct SolanaRpcHandler<T> {
1926
rpc_methods: T,
@@ -272,6 +279,7 @@ mod tests {
272279
Ok(SignAndSendTransactionResult {
273280
transaction: EncodedSerializedTransaction::new(mock_transaction.clone()),
274281
signature: mock_signature.to_string(),
282+
id: "123".to_string(),
275283
})
276284
})
277285
.times(1);

src/domain/relayer/solana/rpc/methods/fee_estimate.rs

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ use crate::{
3232
jobs::JobProducerTrait,
3333
models::{
3434
FeeEstimateRequestParams, FeeEstimateResult, RelayerRepoModel, SolanaFeePaymentStrategy,
35+
TransactionRepoModel,
3536
},
37+
repositories::{Repository, TransactionRepository},
3638
services::{JupiterServiceTrait, SolanaProviderTrait, SolanaSignTrait},
3739
};
3840

@@ -41,12 +43,13 @@ use super::{
4143
SolanaTransactionValidator,
4244
};
4345

44-
impl<P, S, J, JP> SolanaRpcMethodsImpl<P, S, J, JP>
46+
impl<P, S, J, JP, TR> SolanaRpcMethodsImpl<P, S, J, JP, TR>
4547
where
4648
P: SolanaProviderTrait + Send + Sync,
4749
S: SolanaSignTrait + Send + Sync,
4850
J: JupiterServiceTrait + Send + Sync,
4951
JP: JobProducerTrait + Send + Sync,
52+
TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
5053
{
5154
/// Estimates the fee for an arbitrary transaction using a specified fee token.
5255
///
@@ -217,6 +220,7 @@ mod tests {
217220
RelayerNetworkPolicy, RelayerSolanaPolicy, SolanaAllowedTokensPolicy,
218221
SolanaAllowedTokensSwapConfig,
219222
},
223+
repositories::MockTransactionRepository,
220224
services::{
221225
MockSolanaProviderTrait, QuoteResponse, RoutePlan, SolanaProviderError, SwapInfo,
222226
},
@@ -229,8 +233,15 @@ mod tests {
229233

230234
#[tokio::test]
231235
async fn test_fee_estimate_with_allowed_token_relayer_fee_strategy() {
232-
let (mut relayer, signer, mut provider, mut jupiter_service, encoded_tx, job_producer) =
233-
setup_test_context();
236+
let (
237+
mut relayer,
238+
signer,
239+
mut provider,
240+
mut jupiter_service,
241+
encoded_tx,
242+
job_producer,
243+
network,
244+
) = setup_test_context();
234245

235246
// Set up policy with allowed token
236247
relayer.policies = RelayerNetworkPolicy::Solana(RelayerSolanaPolicy {
@@ -298,10 +309,12 @@ mod tests {
298309

299310
let rpc = SolanaRpcMethodsImpl::new_mock(
300311
relayer,
312+
network,
301313
Arc::new(provider),
302314
Arc::new(signer),
303315
Arc::new(jupiter_service),
304316
Arc::new(job_producer),
317+
Arc::new(MockTransactionRepository::new()),
305318
);
306319

307320
let params = FeeEstimateRequestParams {
@@ -461,10 +474,12 @@ mod tests {
461474

462475
let rpc = SolanaRpcMethodsImpl::new_mock(
463476
ctx.relayer,
477+
ctx.network,
464478
Arc::new(ctx.provider),
465479
Arc::new(ctx.signer),
466480
Arc::new(ctx.jupiter_service),
467481
Arc::new(ctx.job_producer),
482+
Arc::new(ctx.transaction_repository),
468483
);
469484

470485
let token_test = &ctx.token;
@@ -487,8 +502,15 @@ mod tests {
487502

488503
#[tokio::test]
489504
async fn test_fee_estimate_usdt_to_sol_conversion() {
490-
let (mut relayer, signer, _provider, mut jupiter_service, encoded_tx, job_producer) =
491-
setup_test_context();
505+
let (
506+
mut relayer,
507+
signer,
508+
_provider,
509+
mut jupiter_service,
510+
encoded_tx,
511+
job_producer,
512+
network,
513+
) = setup_test_context();
492514

493515
relayer.policies = RelayerNetworkPolicy::Solana(RelayerSolanaPolicy {
494516
fee_payment_strategy: Some(SolanaFeePaymentStrategy::Relayer),
@@ -556,10 +578,12 @@ mod tests {
556578

557579
let rpc = SolanaRpcMethodsImpl::new_mock(
558580
relayer,
581+
network,
559582
Arc::new(provider),
560583
Arc::new(signer),
561584
Arc::new(jupiter_service),
562585
Arc::new(job_producer),
586+
Arc::new(MockTransactionRepository::new()),
563587
);
564588

565589
let params = FeeEstimateRequestParams {
@@ -578,8 +602,15 @@ mod tests {
578602

579603
#[tokio::test]
580604
async fn test_fee_estimate_uni_to_sol_dynamic_price() {
581-
let (mut relayer, signer, mut provider, mut jupiter_service, encoded_tx, job_producer) =
582-
setup_test_context();
605+
let (
606+
mut relayer,
607+
signer,
608+
mut provider,
609+
mut jupiter_service,
610+
encoded_tx,
611+
job_producer,
612+
network,
613+
) = setup_test_context();
583614

584615
// Set up policy with UNI token (decimals = 8)
585616
relayer.policies = RelayerNetworkPolicy::Solana(RelayerSolanaPolicy {
@@ -646,10 +677,12 @@ mod tests {
646677

647678
let rpc = SolanaRpcMethodsImpl::new_mock(
648679
relayer,
680+
network,
649681
Arc::new(provider),
650682
Arc::new(signer),
651683
Arc::new(jupiter_service),
652684
Arc::new(job_producer),
685+
Arc::new(MockTransactionRepository::new()),
653686
);
654687

655688
let params = FeeEstimateRequestParams {
@@ -669,7 +702,7 @@ mod tests {
669702

670703
#[tokio::test]
671704
async fn test_fee_estimate_wrapped_sol() {
672-
let (mut relayer, signer, mut provider, jupiter_service, encoded_tx, job_producer) =
705+
let (mut relayer, signer, mut provider, jupiter_service, encoded_tx, job_producer, network) =
673706
setup_test_context();
674707

675708
// Set up policy with WSOL token
@@ -699,10 +732,12 @@ mod tests {
699732

700733
let rpc = SolanaRpcMethodsImpl::new_mock(
701734
relayer,
735+
network,
702736
Arc::new(provider),
703737
Arc::new(signer),
704738
Arc::new(jupiter_service),
705739
Arc::new(job_producer),
740+
Arc::new(MockTransactionRepository::new()),
706741
);
707742

708743
let params = FeeEstimateRequestParams {

src/domain/relayer/solana/rpc/methods/get_features_enabled.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,20 @@
1515
//! (e.g., "gasless").
1616
use crate::{
1717
jobs::JobProducerTrait,
18-
models::{GetFeaturesEnabledRequestParams, GetFeaturesEnabledResult},
18+
models::{GetFeaturesEnabledRequestParams, GetFeaturesEnabledResult, TransactionRepoModel},
19+
repositories::{Repository, TransactionRepository},
1920
services::{JupiterServiceTrait, SolanaProviderTrait, SolanaSignTrait},
2021
};
2122

2223
use super::*;
2324

24-
impl<P, S, J, JP> SolanaRpcMethodsImpl<P, S, J, JP>
25+
impl<P, S, J, JP, TR> SolanaRpcMethodsImpl<P, S, J, JP, TR>
2526
where
2627
P: SolanaProviderTrait + Send + Sync,
2728
S: SolanaSignTrait + Send + Sync,
2829
J: JupiterServiceTrait + Send + Sync,
2930
JP: JobProducerTrait + Send + Sync,
31+
TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
3032
{
3133
pub(crate) async fn get_features_enabled_impl(
3234
&self,
@@ -45,14 +47,17 @@ mod tests {
4547

4648
#[tokio::test]
4749
async fn test_get_features_enabled() {
48-
let (relayer, signer, provider, jupiter_service, _, job_producer) = setup_test_context();
50+
let (relayer, signer, provider, jupiter_service, _, job_producer, network) =
51+
setup_test_context();
4952

5053
let rpc = SolanaRpcMethodsImpl::new_mock(
5154
relayer,
55+
network,
5256
Arc::new(provider),
5357
Arc::new(signer),
5458
Arc::new(jupiter_service),
5559
Arc::new(job_producer),
60+
Arc::new(MockTransactionRepository::new()),
5661
);
5762

5863
let result = rpc

src/domain/relayer/solana/rpc/methods/get_supported_tokens.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,23 @@ use log::info;
1414
use crate::{
1515
constants::DEFAULT_CONVERSION_SLIPPAGE_PERCENTAGE,
1616
jobs::JobProducerTrait,
17-
models::{GetSupportedTokensItem, GetSupportedTokensRequestParams, GetSupportedTokensResult},
17+
models::{
18+
GetSupportedTokensItem, GetSupportedTokensRequestParams, GetSupportedTokensResult,
19+
TransactionRepoModel,
20+
},
21+
repositories::{Repository, TransactionRepository},
1822
services::{JupiterServiceTrait, SolanaProviderTrait, SolanaSignTrait},
1923
};
2024

2125
use super::*;
2226

23-
impl<P, S, J, JP> SolanaRpcMethodsImpl<P, S, J, JP>
27+
impl<P, S, J, JP, TR> SolanaRpcMethodsImpl<P, S, J, JP, TR>
2428
where
2529
P: SolanaProviderTrait + Send + Sync,
2630
S: SolanaSignTrait + Send + Sync,
2731
J: JupiterServiceTrait + Send + Sync,
2832
JP: JobProducerTrait + Send + Sync,
33+
TR: TransactionRepository + Repository<TransactionRepoModel, String> + Send + Sync + 'static,
2934
{
3035
pub(crate) async fn get_supported_tokens_impl(
3136
&self,
@@ -77,11 +82,12 @@ mod tests {
7782
GetSupportedTokensRequestParams, RelayerNetworkPolicy, RelayerSolanaPolicy,
7883
SolanaAllowedTokensPolicy, SolanaAllowedTokensSwapConfig,
7984
},
85+
repositories::MockTransactionRepository,
8086
};
8187

8288
#[tokio::test]
8389
async fn test_get_supported_tokens() {
84-
let (mut relayer, signer, provider, jupiter_service, _, job_producer) =
90+
let (mut relayer, signer, provider, jupiter_service, _, job_producer, network) =
8591
setup_test_context();
8692

8793
// Update relayer policy with some tokens
@@ -111,10 +117,12 @@ mod tests {
111117

112118
let rpc = SolanaRpcMethodsImpl::new_mock(
113119
relayer,
120+
network,
114121
Arc::new(provider),
115122
Arc::new(signer),
116123
Arc::new(jupiter_service),
117124
Arc::new(job_producer),
125+
Arc::new(MockTransactionRepository::new()),
118126
);
119127

120128
let result = rpc

0 commit comments

Comments
 (0)