@@ -158,6 +158,8 @@ export const createCosmosToEvmFungibleAssetOrder = (intent: {
158
158
baseToken : string
159
159
baseAmount : bigint
160
160
quoteAmount : bigint
161
+ sourceChainId : UniversalChainId
162
+ sourceChannelId : ChannelId
161
163
} ) =>
162
164
Effect . gen ( function * ( ) {
163
165
yield * guardAgainstZeroAmount ( intent )
@@ -176,7 +178,25 @@ export const createCosmosToEvmFungibleAssetOrder = (intent: {
176
178
)
177
179
)
178
180
179
- const quoteToken = yield * predictEvmQuoteToken ( toHex ( intent . baseToken ) )
181
+ const graphqlDenom = yield * graphqlQuoteTokenUnwrapQuery ( {
182
+ baseToken : ensureHex ( intent . baseToken ) ,
183
+ sourceChainId : intent . sourceChainId ,
184
+ sourceChannelId : intent . sourceChannelId
185
+ } )
186
+
187
+ yield * Effect . log ( "graphql quote" , graphqlDenom )
188
+ let finalQuoteToken : Hex
189
+ const unwrapping = Option . isSome ( graphqlDenom )
190
+ if ( unwrapping ) {
191
+ yield * Effect . log ( "using the graphql quote token unwrapped" , graphqlDenom . value )
192
+ finalQuoteToken = graphqlDenom . value
193
+ } else {
194
+ yield * Effect . log ( "predicting quote token on chain" )
195
+ finalQuoteToken = yield * predictEvmQuoteToken ( toHex ( intent . baseToken ) )
196
+ yield * Effect . log ( "received quote token onchain" , finalQuoteToken )
197
+ }
198
+
199
+ // const quoteToken = yield* predictEvmQuoteToken(toHex(intent.baseToken))
180
200
181
201
console . log ( "here" , intent )
182
202
return yield * S . decode ( FungibleAssetOrder ) ( {
@@ -189,8 +209,8 @@ export const createCosmosToEvmFungibleAssetOrder = (intent: {
189
209
tokenMeta . symbol ,
190
210
tokenMeta . name ,
191
211
tokenMeta . decimals ,
192
- 0n , // channel if unwrapping
193
- quoteToken ,
212
+ unwrapping ? BigInt ( intent . sourceChannelId ) : 0n , // path is source channel when unwrapping, else 0
213
+ finalQuoteToken ,
194
214
intent . quoteAmount
195
215
]
196
216
} )
@@ -205,14 +225,43 @@ export const createCosmosToCosmosFungibleAssetOrder = (intent: {
205
225
baseToken : string
206
226
baseAmount : bigint
207
227
quoteAmount : bigint
228
+ sourceChainId : UniversalChainId
229
+ sourceChannelId : ChannelId
208
230
} ) =>
209
231
Effect . gen ( function * ( ) {
210
232
yield * guardAgainstZeroAmount ( intent )
211
233
const sourceClient = ( yield * CosmWasmClientSource ) . client
212
- const tokenMeta = yield * readCw20TokenInfo ( intent . baseToken ) . pipe (
213
- Effect . provideService ( CosmWasmClientContext , { client : sourceClient } )
234
+
235
+ const tokenMeta = yield * pipe (
236
+ readCw20TokenInfo ( intent . baseToken ) ,
237
+ Effect . provideService ( CosmWasmClientContext , { client : sourceClient } ) ,
238
+ Effect . either ,
239
+ Effect . map (
240
+ Either . getOrElse ( ( ) => ( {
241
+ symbol : intent . baseToken ,
242
+ name : intent . baseToken ,
243
+ decimals : 0
244
+ } ) )
245
+ )
214
246
)
215
- const quoteToken = yield * predictCosmosQuoteToken ( toHex ( intent . baseToken ) )
247
+
248
+ const graphqlDenom = yield * graphqlQuoteTokenUnwrapQuery ( {
249
+ baseToken : ensureHex ( intent . baseToken ) ,
250
+ sourceChainId : intent . sourceChainId ,
251
+ sourceChannelId : intent . sourceChannelId
252
+ } )
253
+
254
+ yield * Effect . log ( "graphql quote" , graphqlDenom )
255
+ let finalQuoteToken : Hex
256
+ const unwrapping = Option . isSome ( graphqlDenom )
257
+ if ( unwrapping ) {
258
+ yield * Effect . log ( "using the graphql quote token unwrapped" , graphqlDenom . value )
259
+ finalQuoteToken = graphqlDenom . value
260
+ } else {
261
+ yield * Effect . log ( "predicting quote token on chain" )
262
+ finalQuoteToken = yield * predictCosmosQuoteToken ( intent . baseToken )
263
+ yield * Effect . log ( "received quote token onchain" , finalQuoteToken )
264
+ }
216
265
217
266
return yield * S . decode ( FungibleAssetOrder ) ( {
218
267
_tag : "FungibleAssetOrder" ,
@@ -224,8 +273,8 @@ export const createCosmosToCosmosFungibleAssetOrder = (intent: {
224
273
tokenMeta . symbol ,
225
274
tokenMeta . name ,
226
275
tokenMeta . decimals ,
227
- 0n , // channel if unwrapping
228
- quoteToken ,
276
+ unwrapping ? BigInt ( intent . sourceChannelId ) : 0n , // path is source channel when unwrapping, else 0
277
+ finalQuoteToken ,
229
278
intent . quoteAmount
230
279
]
231
280
} )
0 commit comments