@@ -24,10 +24,20 @@ import {
24
24
calculateAllowanceTarget ,
25
25
failed ,
26
26
} from "@balmy/sdk/dist/services/quotes/quote-sources/utils"
27
- import { type Address as ViemAddress , formatUnits , parseUnits } from "viem"
27
+ import type { Hex } from "@berachain-foundation/berancer-sdk"
28
+ import {
29
+ type Address as ViemAddress ,
30
+ encodeFunctionData ,
31
+ formatUnits ,
32
+ parseAbi ,
33
+ parseUnits ,
34
+ } from "viem"
28
35
29
- const CHAINS : Record < ChainId , string > = {
30
- [ 60808 ] : "bob" ,
36
+ const CHAINS : Record < ChainId , Record < string , string > > = {
37
+ [ 60808 ] : {
38
+ key : "bob" ,
39
+ permit2Adapter : "0xcBF002A9eB906F35eA35aD0634CC5f3d85a10426" ,
40
+ } ,
31
41
}
32
42
33
43
const OKU_METADATA : QuoteSourceMetadata < OkuSupport > = {
@@ -68,7 +78,7 @@ export class CustomOkuQuoteSource extends AlwaysValidConfigAndContextSource<
68
78
getMetadata ( ) {
69
79
return {
70
80
...OKU_METADATA ,
71
- // name: `${OKU_METADATA.name} ${this.marketName}`,
81
+ name : `${ OKU_METADATA . name } ${ this . marketName } ` ,
72
82
supports : {
73
83
...OKU_METADATA . supports ,
74
84
chains : this . chains || OKU_METADATA . supports . chains ,
@@ -106,9 +116,11 @@ export class CustomOkuQuoteSource extends AlwaysValidConfigAndContextSource<
106
116
external . gasPrice . request ( ) ,
107
117
external . tokenData . request ( ) ,
108
118
] )
119
+
109
120
const body = {
110
- chain : CHAINS [ chainId ] ,
111
- account : takeFrom ,
121
+ chain : CHAINS [ chainId ] . key ,
122
+ account :
123
+ this . market === "usor" ? CHAINS [ chainId ] . permit2Adapter : takeFrom ,
112
124
gasPrice : Number ( eip1159ToLegacy ( gasPrice ) ) ,
113
125
isExactIn : order . type === "sell" ,
114
126
inTokenAddress : mapToken ( sellToken ) ,
@@ -174,6 +186,28 @@ export class CustomOkuQuoteSource extends AlwaysValidConfigAndContextSource<
174
186
async buildTx ( {
175
187
request,
176
188
} : BuildTxParams < OkuConfig , OkuData > ) : Promise < SourceQuoteTransaction > {
189
+ if ( this . market === "usor" ) {
190
+ const adapterAbi = parseAbi ( [
191
+ "function swap(address target, address token, uint256 amount, uint256 sweepAmountMin, bytes calldata data)" ,
192
+ ] )
193
+ const calldata = encodeFunctionData ( {
194
+ abi : adapterAbi ,
195
+ functionName : "swap" ,
196
+ args : [
197
+ request . customData . tx . to as Hex ,
198
+ request . sellToken as Hex ,
199
+ request . maxSellAmount ,
200
+ 5n ,
201
+ request . customData . tx . calldata as Hex ,
202
+ ] ,
203
+ } )
204
+ return {
205
+ to : CHAINS [ request . chainId ] . permit2Adapter ,
206
+ calldata,
207
+ value : request . customData . tx . value ,
208
+ }
209
+ }
210
+
177
211
return request . customData . tx
178
212
}
179
213
}
0 commit comments