Skip to content

Commit 2871be6

Browse files
committed
fix: migrate faucet in sdk example
1 parent d36ea01 commit 2871be6

File tree

1 file changed

+87
-3
lines changed

1 file changed

+87
-3
lines changed

src/dev/SDKExample.ts

Lines changed: 87 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,26 @@
11
import { readFile, writeFile } from "node:fs/promises";
22

33
import type { Address } from "viem";
4-
import { createPublicClient, createWalletClient, http, isAddress } from "viem";
4+
import {
5+
createPublicClient,
6+
createWalletClient,
7+
http,
8+
isAddress,
9+
stringToHex,
10+
} from "viem";
511
import { privateKeyToAccount } from "viem/accounts";
612

7-
import type { ILogger } from "../sdk";
8-
import { GearboxSDK, json_stringify, sendRawTx } from "../sdk";
13+
import type { ILogger, NetworkType } from "../sdk";
14+
import {
15+
ADDRESS_PROVIDER,
16+
chains,
17+
GearboxSDK,
18+
iAddressProviderV3_1Abi,
19+
iAddressProviderV3Abi,
20+
json_stringify,
21+
sendRawTx,
22+
} from "../sdk";
23+
import { createAnvilClient } from "./createAnvilClient";
924

1025
export interface SDKExampleOptions {
1126
addressProvider?: string;
@@ -52,6 +67,12 @@ export class SDKExample {
5267
ignoreUpdateablePrices: true,
5368
marketConfigurators: [marketConfigurator],
5469
});
70+
await this.#safeMigrateFaucet(
71+
anvilUrl,
72+
this.#sdk.provider.networkType,
73+
addressProvider,
74+
);
75+
5576
const puTx = await this.#sdk.priceFeeds.getUpdatePriceFeedsTx([
5677
marketConfigurator,
5778
]);
@@ -110,6 +131,69 @@ export class SDKExample {
110131
return result;
111132
}
112133

134+
async #safeMigrateFaucet(
135+
anvilURL: string,
136+
network: NetworkType,
137+
addressProvider: Address,
138+
): Promise<void> {
139+
try {
140+
await this.#migrateFaucet(anvilURL, network, addressProvider);
141+
this.#logger?.info("faucet migrated successfully");
142+
} catch (e) {
143+
this.#logger?.error(`faucet migration failed: ${e}`);
144+
}
145+
}
146+
147+
/**
148+
* Migrates faucet from address provider v3 to v3.1
149+
* @param anvilURL
150+
* @param network
151+
* @param addressProvider
152+
*/
153+
async #migrateFaucet(
154+
anvilURL: string,
155+
network: NetworkType,
156+
addressProvider: Address,
157+
): Promise<void> {
158+
const anvil = createAnvilClient({
159+
chain: chains[network],
160+
transport: http(anvilURL),
161+
});
162+
163+
const [faucetAddr, owner] = await anvil.multicall({
164+
contracts: [
165+
{
166+
abi: iAddressProviderV3Abi,
167+
address: ADDRESS_PROVIDER[network],
168+
functionName: "getAddressOrRevert",
169+
args: [stringToHex("FAUCET", { size: 32 }), 0n],
170+
},
171+
{
172+
abi: iAddressProviderV3_1Abi,
173+
address: addressProvider,
174+
functionName: "owner",
175+
args: [],
176+
},
177+
],
178+
allowFailure: false,
179+
});
180+
this.#logger?.debug(`faucet address: ${faucetAddr}, owner: ${owner}`);
181+
await anvil.impersonateAccount({ address: owner });
182+
const hash = await anvil.writeContract({
183+
chain: chains[network],
184+
account: owner,
185+
address: addressProvider,
186+
abi: iAddressProviderV3_1Abi,
187+
functionName: "setAddress",
188+
args: [stringToHex("FAUCET", { size: 32 }), faucetAddr, true],
189+
});
190+
const receipt = await anvil.waitForTransactionReceipt({ hash });
191+
await anvil.stopImpersonatingAccount({ address: owner });
192+
if (receipt.status === "reverted") {
193+
throw new Error("faucet migration reverted");
194+
}
195+
}
196+
113197
public get sdk(): GearboxSDK {
114198
if (!this.#sdk) {
115199
throw new Error("sdk is not attached");

0 commit comments

Comments
 (0)