Skip to content

Commit c2615aa

Browse files
fix(eco): use originChain for intent settlement
also, slightly changed adapter metadata structure to simplify the implementation Co-Authored-By: Lisandro Corbalan <lmcorbalan@gmail.com>
1 parent b055ddd commit c2615aa

File tree

4 files changed

+32
-31
lines changed

4 files changed

+32
-31
lines changed

typescript/solver/solvers/BaseFiller.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export abstract class BaseFiller<
8181
try {
8282
await this.fill(parsedArgs, data, originChainName, blockNumber);
8383

84-
await this.settleOrder(parsedArgs, data);
84+
await this.settleOrder(parsedArgs, data, originChainName);
8585
} catch (error) {
8686
this.log.error({
8787
msg: `Failed processing intent`,
@@ -145,7 +145,11 @@ export abstract class BaseFiller<
145145
blockNumber: number,
146146
): Promise<void>;
147147

148-
protected async settleOrder(parsedArgs: TParsedArgs, data: TIntentData) {
148+
protected async settleOrder(
149+
parsedArgs: TParsedArgs,
150+
data: TIntentData,
151+
originChainName: string,
152+
) {
149153
return;
150154
}
151155

typescript/solver/solvers/eco/config/metadata.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@ const metadata: EcoMetadata = {
88
chainName: "optimismsepolia",
99
},
1010
],
11-
adapters: [
12-
{
13-
address: "0x218FB5210d4eE248f046F3EC8B5Dd1c7Bc0756e5",
14-
chainName: "basesepolia",
15-
},
16-
],
11+
adapters: {
12+
basesepolia: "0x218FB5210d4eE248f046F3EC8B5Dd1c7Bc0756e5",
13+
},
1714
};
1815

1916
EcoMetadataSchema.parse(metadata);

typescript/solver/solvers/eco/filler.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,12 @@ export class EcoFiller extends BaseFiller<EcoMetadata, ParsedArgs, IntentData> {
6060
protected async prepareIntent(
6161
parsedArgs: ParsedArgs,
6262
): Promise<Result<IntentData>> {
63-
const adapter =
64-
this.metadata.adapters[parsedArgs._destinationChain.toString()];
63+
const chainName = this.multiProvider.getChainName(
64+
parsedArgs._destinationChain.toString(),
65+
);
66+
const adapterAddress = this.metadata.adapters[chainName];
6567

66-
if (!adapter) {
68+
if (!adapterAddress) {
6769
return {
6870
error: "No adapter found for destination chain",
6971
success: false,
@@ -73,7 +75,7 @@ export class EcoFiller extends BaseFiller<EcoMetadata, ParsedArgs, IntentData> {
7375
try {
7476
await super.prepareIntent(parsedArgs);
7577

76-
return { data: { adapter }, success: true };
78+
return { data: { adapterAddress }, success: true };
7779
} catch (error: any) {
7880
return {
7981
error: error.message ?? "Failed to prepare Eco Intent.",
@@ -96,7 +98,7 @@ export class EcoFiller extends BaseFiller<EcoMetadata, ParsedArgs, IntentData> {
9698
msg: "Approving tokens",
9799
protocolName: this.metadata.protocolName,
98100
intentHash: parsedArgs._hash,
99-
adapterAddress: data.adapter.address,
101+
adapterAddress: data.adapterAddress,
100102
});
101103

102104
const erc20Interface = Erc20__factory.createInterface();
@@ -115,25 +117,21 @@ export class EcoFiller extends BaseFiller<EcoMetadata, ParsedArgs, IntentData> {
115117
return acc;
116118
}, {});
117119

118-
const signer = this.multiProvider.getSigner(data.adapter.chainName);
120+
const destinationChainId = parsedArgs._destinationChain.toString();
121+
const signer = this.multiProvider.getSigner(destinationChainId);
122+
119123
await Promise.all(
120124
Object.entries(requiredAmountsByTarget).map(
121125
async ([target, requiredAmount]) => {
122126
const erc20 = Erc20__factory.connect(target, signer);
123127

124-
const tx = await erc20.approve(data.adapter.address, requiredAmount);
128+
const tx = await erc20.approve(data.adapterAddress, requiredAmount);
125129
await tx.wait();
126130
},
127131
),
128132
);
129133

130-
const _chainId = parsedArgs._destinationChain.toString();
131-
132-
const filler = this.multiProvider.getSigner(_chainId);
133-
const ecoAdapter = EcoAdapter__factory.connect(
134-
data.adapter.address,
135-
filler,
136-
);
134+
const ecoAdapter = EcoAdapter__factory.connect(data.adapterAddress, signer);
137135

138136
const claimantAddress =
139137
await this.multiProvider.getSignerAddress(originChainName);
@@ -169,10 +167,14 @@ export class EcoFiller extends BaseFiller<EcoMetadata, ParsedArgs, IntentData> {
169167
});
170168
}
171169

172-
settleOrder(parsedArgs: ParsedArgs, data: IntentData) {
170+
settleOrder(
171+
parsedArgs: ParsedArgs,
172+
data: IntentData,
173+
originChainName: string,
174+
) {
173175
return withdrawRewards(
174176
parsedArgs,
175-
data.adapter.chainName,
177+
originChainName,
176178
this.multiProvider,
177179
this.metadata.protocolName,
178180
);

typescript/solver/solvers/eco/types.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,11 @@ export const EcoMetadataSchema = BaseMetadataSchema.extend({
1818
processedIds: z.array(z.string()).optional(),
1919
}),
2020
),
21-
adapters: z.array(
22-
z.object({
23-
address: addressSchema,
24-
chainName: z.string().refine((name) => chainNames.includes(name), {
25-
message: "Invalid chainName",
26-
}),
21+
adapters: z.record(
22+
z.string().refine((name) => chainNames.includes(name), {
23+
message: "Invalid chainName",
2724
}),
25+
addressSchema,
2826
),
2927
customRules: z
3028
.object({
@@ -41,7 +39,7 @@ export const EcoMetadataSchema = BaseMetadataSchema.extend({
4139

4240
export type EcoMetadata = z.infer<typeof EcoMetadataSchema>;
4341

44-
export type IntentData = { adapter: EcoMetadata["adapters"][number] };
42+
export type IntentData = { adapterAddress: z.infer<typeof addressSchema> };
4543

4644
export type ParsedArgs = IntentCreatedEventObject & {
4745
orderId: string;

0 commit comments

Comments
 (0)