1
1
use std:: convert:: TryFrom ;
2
+ use std:: marker:: PhantomData ;
3
+ use std:: ops:: Deref ;
2
4
use std:: time:: Duration ;
3
5
4
6
use apollo_proto_rust:: osmosis:: gamm:: v1beta1:: {
@@ -12,8 +14,9 @@ use apollo_proto_rust::osmosis::superfluid::{
12
14
} ;
13
15
use apollo_proto_rust:: utils:: encode;
14
16
use apollo_proto_rust:: OsmosisTypeURLs ;
15
-
16
- use cosmwasm_std:: { Addr , Coin , CosmosMsg , Decimal , Deps , Response , StdError , StdResult , Uint128 } ;
17
+ use cosmwasm_std:: {
18
+ Addr , Coin , CosmosMsg , Decimal , Deps , QuerierWrapper , Response , StdError , StdResult , Uint128 ,
19
+ } ;
17
20
use cw_asset:: { Asset , AssetInfoBase , AssetList } ;
18
21
use cw_storage_plus:: Item ;
19
22
use cw_token:: osmosis:: OsmosisDenom ;
@@ -58,16 +61,15 @@ fn assert_native_coin(asset: &Asset) -> Result<Coin, CwDexError> {
58
61
}
59
62
}
60
63
61
- impl Pool < OsmosisQuery > for OsmosisPool {
62
- fn provide_liquidity (
63
- & self ,
64
- deps : Deps < OsmosisQuery > ,
65
- assets : AssetList ,
66
- ) -> Result < CosmosMsg , CwDexError > {
64
+ impl Pool for OsmosisPool {
65
+ fn provide_liquidity ( & self , deps : Deps , assets : AssetList ) -> Result < Response , CwDexError > {
67
66
let assets = assert_only_native_coins ( assets) ?;
68
67
let sender = VAULT_ADDR . load ( deps. storage ) ?. to_string ( ) ;
69
68
70
- let shares_out = osmosis_calculate_join_pool_shares ( deps, self . pool_id , assets. to_vec ( ) ) ?;
69
+ let querier = QuerierWrapper :: < OsmosisQuery > :: new ( deps. querier . deref ( ) ) ;
70
+
71
+ let shares_out =
72
+ osmosis_calculate_join_pool_shares ( querier, self . pool_id , assets. to_vec ( ) ) ?;
71
73
72
74
let join_msg = CosmosMsg :: Stargate {
73
75
type_url : OsmosisTypeURLs :: JoinPool . to_string ( ) ,
@@ -82,19 +84,17 @@ impl Pool<OsmosisQuery> for OsmosisPool {
82
84
} ) ,
83
85
} ;
84
86
85
- Ok ( join_msg)
87
+ Ok ( Response :: new ( ) . add_message ( join_msg) )
86
88
}
87
89
88
- fn withdraw_liquidity (
89
- & self ,
90
- deps : Deps < OsmosisQuery > ,
91
- asset : Asset ,
92
- ) -> Result < CosmosMsg , CwDexError > {
90
+ fn withdraw_liquidity ( & self , deps : Deps , asset : Asset ) -> Result < Response , CwDexError > {
93
91
let lp_token = assert_native_coin ( & asset) ?;
94
92
let sender = VAULT_ADDR . load ( deps. storage ) ?. to_string ( ) ;
95
93
94
+ let querier = QuerierWrapper :: < OsmosisQuery > :: new ( deps. querier . deref ( ) ) ;
95
+
96
96
let token_out_mins = osmosis_calculate_exit_pool_amounts (
97
- deps ,
97
+ querier ,
98
98
self . pool_id ,
99
99
lp_token. amount ,
100
100
self . exit_fee ,
@@ -110,10 +110,10 @@ impl Pool<OsmosisQuery> for OsmosisPool {
110
110
} ) ,
111
111
} ;
112
112
113
- Ok ( exit_msg)
113
+ Ok ( Response :: new ( ) . add_message ( exit_msg) )
114
114
}
115
115
116
- fn swap ( & self , deps : Deps , offer : Asset , ask : Asset ) -> Result < CosmosMsg , CwDexError > {
116
+ fn swap ( & self , deps : Deps , offer : Asset , ask : Asset ) -> Result < Response , CwDexError > {
117
117
let offer = assert_native_coin ( & offer) ?;
118
118
let ask = assert_native_coin ( & ask) ?;
119
119
let sender = VAULT_ADDR . load ( deps. storage ) ?. to_string ( ) ;
@@ -131,7 +131,7 @@ impl Pool<OsmosisQuery> for OsmosisPool {
131
131
} ) ,
132
132
} ;
133
133
134
- Ok ( swap_msg)
134
+ Ok ( Response :: new ( ) . add_message ( swap_msg) )
135
135
}
136
136
137
137
fn get_pool_assets ( & self ) -> Result < AssetList , CwDexError > {
@@ -151,11 +151,12 @@ impl Pool<OsmosisQuery> for OsmosisPool {
151
151
152
152
fn simulate_provide_liquidity (
153
153
& self ,
154
- deps : Deps < OsmosisQuery > ,
154
+ deps : Deps ,
155
155
assets : AssetList ,
156
156
) -> Result < Asset , CwDexError > {
157
+ let querier = QuerierWrapper :: < OsmosisQuery > :: new ( deps. querier . deref ( ) ) ;
157
158
Ok ( osmosis_calculate_join_pool_shares (
158
- deps ,
159
+ querier ,
159
160
self . pool_id ,
160
161
assert_only_native_coins ( assets) ?,
161
162
) ?
@@ -164,10 +165,11 @@ impl Pool<OsmosisQuery> for OsmosisPool {
164
165
165
166
fn simulate_withdraw_liquidity (
166
167
& self ,
167
- deps : Deps < OsmosisQuery > ,
168
+ deps : Deps ,
168
169
asset : Asset ,
169
170
) -> Result < AssetList , CwDexError > {
170
- Ok ( osmosis_calculate_exit_pool_amounts ( deps, self . pool_id , asset. amount , self . exit_fee ) ?
171
+ let querier = QuerierWrapper :: < OsmosisQuery > :: new ( deps. querier . deref ( ) ) ;
172
+ Ok ( osmosis_calculate_exit_pool_amounts ( querier, self . pool_id , asset. amount , self . exit_fee ) ?
171
173
. into ( ) )
172
174
}
173
175
}
0 commit comments