1
- use std:: time:: Duration ;
1
+ use std:: { sync :: Arc , time:: Duration } ;
2
2
3
3
use anyhow:: Result ;
4
4
use ethers:: prelude:: * ;
@@ -11,32 +11,53 @@ use crate::{
11
11
use super :: env:: { get_env_vars, Environment } ;
12
12
13
13
#[ derive( Debug , Clone ) ]
14
- pub struct Context {
14
+ struct ContextRef {
15
15
pub beacon_client : BeaconClient ,
16
16
pub blobscan_client : BlobscanClient ,
17
17
pub provider : Provider < Http > ,
18
18
}
19
19
20
- pub fn create_context ( ) -> Result < Context > {
21
- let Environment {
22
- blobscan_api_endpoint,
23
- beacon_node_rpc,
24
- execution_node_rpc,
25
- secret_key,
26
- ..
27
- } = get_env_vars ( ) ;
28
- let request_timeout = Some ( Duration :: from_secs ( 8 ) ) ;
29
-
30
- Ok ( Context {
31
- blobscan_client : BlobscanClient :: try_from ( BlobscanClientConfig {
32
- base_url : blobscan_api_endpoint,
20
+ #[ derive( Debug , Clone ) ]
21
+ pub struct Context {
22
+ inner : Arc < ContextRef > ,
23
+ }
24
+
25
+ impl Context {
26
+ pub fn try_new ( ) -> Result < Self > {
27
+ let Environment {
28
+ blobscan_api_endpoint,
29
+ beacon_node_rpc,
30
+ execution_node_rpc,
33
31
secret_key,
34
- timeout : request_timeout,
35
- } ) ?,
36
- beacon_client : BeaconClient :: try_from ( BeaconClientConfig {
37
- base_url : beacon_node_rpc,
38
- timeout : request_timeout,
39
- } ) ?,
40
- provider : Provider :: < Http > :: try_from ( execution_node_rpc) ?,
41
- } )
32
+ ..
33
+ } = get_env_vars ( ) ;
34
+ let request_timeout = Some ( Duration :: from_secs ( 8 ) ) ;
35
+
36
+ Ok ( Self {
37
+ inner : Arc :: new ( ContextRef {
38
+ blobscan_client : BlobscanClient :: try_from ( BlobscanClientConfig {
39
+ base_url : blobscan_api_endpoint,
40
+ secret_key,
41
+ timeout : request_timeout,
42
+ } ) ?,
43
+ beacon_client : BeaconClient :: try_from ( BeaconClientConfig {
44
+ base_url : beacon_node_rpc,
45
+ timeout : request_timeout,
46
+ } ) ?,
47
+ provider : Provider :: < Http > :: try_from ( execution_node_rpc) ?,
48
+ } ) ,
49
+ } )
50
+ }
51
+
52
+ pub fn beacon_client ( & self ) -> & BeaconClient {
53
+ & self . inner . beacon_client
54
+ }
55
+
56
+ pub fn blobscan_client ( & self ) -> & BlobscanClient {
57
+ & self . inner . blobscan_client
58
+ }
59
+
60
+ pub fn provider ( & self ) -> & Provider < Http > {
61
+ & self . inner . provider
62
+ }
42
63
}
0 commit comments