@@ -8,6 +8,7 @@ import { chainIds, chainIdsToName } from "../../config/index.js";
88import { Erc20__factory } from "../../typechain/factories/contracts/Erc20__factory.js" ;
99import { EcoAdapter__factory } from "../../typechain/factories/eco/contracts/EcoAdapter__factory.js" ;
1010import { BaseFiller } from "../BaseFiller.js" ;
11+ import { BuildRules , RulesMap } from "../types.js" ;
1112import {
1213 retrieveOriginInfo ,
1314 retrieveTargetInfo ,
@@ -17,33 +18,11 @@ import { allowBlockLists, metadata } from "./config/index.js";
1718import type { EcoMetadata , IntentData , ParsedArgs } from "./types.js" ;
1819import { log , withdrawRewards } from "./utils.js" ;
1920
20- export type Metadata = {
21- adapters : { [ chainId : string ] : EcoMetadata [ "adapters" ] [ number ] } ;
22- protocolName : EcoMetadata [ "protocolName" ] ;
23- } ;
24-
2521export type EcoRule = EcoFiller [ "rules" ] [ number ] ;
2622
27- export class EcoFiller extends BaseFiller < Metadata , ParsedArgs , IntentData > {
28- constructor (
29- multiProvider : MultiProvider ,
30- rules ?: BaseFiller < Metadata , ParsedArgs , IntentData > [ "rules" ] ,
31- ) {
32- const { adapters, protocolName } = metadata ;
33- const ecoFillerMetadata = {
34- adapters : adapters . reduce < {
35- [ chainId : string ] : EcoMetadata [ "adapters" ] [ number ] ;
36- } > (
37- ( acc , adapter ) => ( {
38- ...acc ,
39- [ chainIds [ adapter . chainName ] ] : adapter ,
40- } ) ,
41- { } ,
42- ) ,
43- protocolName,
44- } ;
45-
46- super ( multiProvider , allowBlockLists , ecoFillerMetadata , log , rules ) ;
23+ export class EcoFiller extends BaseFiller < EcoMetadata , ParsedArgs , IntentData > {
24+ constructor ( multiProvider : MultiProvider , rules ?: BuildRules < EcoRule > ) {
25+ super ( multiProvider , allowBlockLists , metadata , log , rules ) ;
4726 }
4827
4928 protected retrieveOriginInfo ( parsedArgs : ParsedArgs , chainName : string ) {
@@ -81,10 +60,12 @@ export class EcoFiller extends BaseFiller<Metadata, ParsedArgs, IntentData> {
8160 protected async prepareIntent (
8261 parsedArgs : ParsedArgs ,
8362 ) : Promise < Result < IntentData > > {
84- const adapter =
85- this . metadata . adapters [ parsedArgs . _destinationChain . toString ( ) ] ;
63+ const chainName = this . multiProvider . getChainName (
64+ parsedArgs . _destinationChain . toString ( ) ,
65+ ) ;
66+ const adapterAddress = this . metadata . adapters [ chainName ] ;
8667
87- if ( ! adapter ) {
68+ if ( ! adapterAddress ) {
8869 return {
8970 error : "No adapter found for destination chain" ,
9071 success : false ,
@@ -94,7 +75,7 @@ export class EcoFiller extends BaseFiller<Metadata, ParsedArgs, IntentData> {
9475 try {
9576 await super . prepareIntent ( parsedArgs ) ;
9677
97- return { data : { adapter } , success : true } ;
78+ return { data : { adapterAddress } , success : true } ;
9879 } catch ( error : any ) {
9980 return {
10081 error : error . message ?? "Failed to prepare Eco Intent." ,
@@ -117,7 +98,7 @@ export class EcoFiller extends BaseFiller<Metadata, ParsedArgs, IntentData> {
11798 msg : "Approving tokens" ,
11899 protocolName : this . metadata . protocolName ,
119100 intentHash : parsedArgs . _hash ,
120- adapterAddress : data . adapter . address ,
101+ adapterAddress : data . adapterAddress ,
121102 } ) ;
122103
123104 const erc20Interface = Erc20__factory . createInterface ( ) ;
@@ -136,25 +117,21 @@ export class EcoFiller extends BaseFiller<Metadata, ParsedArgs, IntentData> {
136117 return acc ;
137118 } , { } ) ;
138119
139- const signer = this . multiProvider . getSigner ( data . adapter . chainName ) ;
120+ const destinationChainId = parsedArgs . _destinationChain . toString ( ) ;
121+ const signer = this . multiProvider . getSigner ( destinationChainId ) ;
122+
140123 await Promise . all (
141124 Object . entries ( requiredAmountsByTarget ) . map (
142125 async ( [ target , requiredAmount ] ) => {
143126 const erc20 = Erc20__factory . connect ( target , signer ) ;
144127
145- const tx = await erc20 . approve ( data . adapter . address , requiredAmount ) ;
128+ const tx = await erc20 . approve ( data . adapterAddress , requiredAmount ) ;
146129 await tx . wait ( ) ;
147130 } ,
148131 ) ,
149132 ) ;
150133
151- const _chainId = parsedArgs . _destinationChain . toString ( ) ;
152-
153- const filler = this . multiProvider . getSigner ( _chainId ) ;
154- const ecoAdapter = EcoAdapter__factory . connect (
155- data . adapter . address ,
156- filler ,
157- ) ;
134+ const ecoAdapter = EcoAdapter__factory . connect ( data . adapterAddress , signer ) ;
158135
159136 const claimantAddress =
160137 await this . multiProvider . getSignerAddress ( originChainName ) ;
@@ -190,10 +167,14 @@ export class EcoFiller extends BaseFiller<Metadata, ParsedArgs, IntentData> {
190167 } ) ;
191168 }
192169
193- settleOrder ( parsedArgs : ParsedArgs , data : IntentData ) {
170+ settleOrder (
171+ parsedArgs : ParsedArgs ,
172+ data : IntentData ,
173+ originChainName : string ,
174+ ) {
194175 return withdrawRewards (
195176 parsedArgs ,
196- data . adapter . chainName ,
177+ originChainName ,
197178 this . multiProvider ,
198179 this . metadata . protocolName ,
199180 ) ;
@@ -241,13 +222,10 @@ const enoughBalanceOnDestination: EcoRule = async (parsedArgs, context) => {
241222
242223export const create = (
243224 multiProvider : MultiProvider ,
244- rules ?: EcoFiller [ "rules" ] ,
245- keepBaseRules = true ,
225+ customRules ?: RulesMap < EcoRule > ,
246226) => {
247- const customRules = rules ?? [ ] ;
248-
249- return new EcoFiller (
250- multiProvider ,
251- keepBaseRules ? [ enoughBalanceOnDestination , ...customRules ] : customRules ,
252- ) . create ( ) ;
227+ return new EcoFiller ( multiProvider , {
228+ base : [ enoughBalanceOnDestination ] ,
229+ custom : customRules ,
230+ } ) . create ( ) ;
253231} ;
0 commit comments