@gearbox-protocol/sdk 3.0.5 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,7 +18,8 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var migrateFaucet_exports = {};
20
20
  __export(migrateFaucet_exports, {
21
- migrateFaucet: () => migrateFaucet
21
+ migrateFaucet: () => migrateFaucet,
22
+ unsafeMigrateFaucet: () => unsafeMigrateFaucet
22
23
  });
23
24
  module.exports = __toCommonJS(migrateFaucet_exports);
24
25
  var import_viem = require("viem");
@@ -26,28 +27,40 @@ var import_v300 = require("../abi/v300.js");
26
27
  var import_v310 = require("../abi/v310.js");
27
28
  var import_sdk = require("../sdk/index.js");
28
29
  var import_createAnvilClient = require("./createAnvilClient.js");
29
- async function unsafeMigrateFaucet(sdk) {
30
+ async function unsafeMigrateFaucet(sdk, faucet) {
30
31
  const anvil = (0, import_createAnvilClient.createAnvilClient)({
31
32
  chain: sdk.provider.chain,
32
33
  transport: sdk.provider.transport
33
34
  });
34
- const [faucetAddr, owner] = await anvil.multicall({
35
- contracts: [
36
- {
37
- abi: import_v300.iAddressProviderV300Abi,
38
- address: import_sdk.ADDRESS_PROVIDER[sdk.provider.networkType],
39
- functionName: "getAddressOrRevert",
40
- args: [(0, import_viem.stringToHex)("FAUCET", { size: 32 }), 0n]
41
- },
42
- {
43
- abi: import_v310.iAddressProviderV310Abi,
44
- address: sdk.addressProvider.address,
45
- functionName: "owner",
46
- args: []
47
- }
48
- ],
49
- allowFailure: false
50
- });
35
+ let faucetAddr;
36
+ let owner;
37
+ if (faucet) {
38
+ faucetAddr = faucet;
39
+ owner = await anvil.readContract({
40
+ abi: import_v310.iAddressProviderV310Abi,
41
+ address: sdk.addressProvider.address,
42
+ functionName: "owner",
43
+ args: []
44
+ });
45
+ } else {
46
+ [faucetAddr, owner] = await anvil.multicall({
47
+ contracts: [
48
+ {
49
+ abi: import_v300.iAddressProviderV300Abi,
50
+ address: import_sdk.ADDRESS_PROVIDER[sdk.provider.networkType],
51
+ functionName: "getAddressOrRevert",
52
+ args: [(0, import_viem.stringToHex)("FAUCET", { size: 32 }), 0n]
53
+ },
54
+ {
55
+ abi: import_v310.iAddressProviderV310Abi,
56
+ address: sdk.addressProvider.address,
57
+ functionName: "owner",
58
+ args: []
59
+ }
60
+ ],
61
+ allowFailure: false
62
+ });
63
+ }
51
64
  sdk.logger?.debug(`faucet address: ${faucetAddr}, owner: ${owner}`);
52
65
  await anvil.impersonateAccount({ address: owner });
53
66
  await anvil.setBalance({
@@ -80,9 +93,9 @@ async function unsafeMigrateFaucet(sdk) {
80
93
  throw new Error("faucet migration reverted");
81
94
  }
82
95
  }
83
- async function migrateFaucet(sdk) {
96
+ async function migrateFaucet(sdk, faucet) {
84
97
  try {
85
- await unsafeMigrateFaucet(sdk);
98
+ await unsafeMigrateFaucet(sdk, faucet);
86
99
  sdk.logger?.info("faucet migrated successfully");
87
100
  } catch (e) {
88
101
  sdk.logger?.error(`faucet migration failed: ${e}`);
@@ -90,5 +103,6 @@ async function migrateFaucet(sdk) {
90
103
  }
91
104
  // Annotate the CommonJS export names for ESM import in node:
92
105
  0 && (module.exports = {
93
- migrateFaucet
106
+ migrateFaucet,
107
+ unsafeMigrateFaucet
94
108
  });
@@ -211,6 +211,17 @@ class PriceOracleBaseContract extends import_base.BaseContract {
211
211
  const scale = 10n ** BigInt(this.sdk.tokensMeta.decimals(from));
212
212
  return amount * price / scale;
213
213
  }
214
+ /**
215
+ * Tries to convert amount of USD to token, using latest known prices
216
+ * @param to
217
+ * @param amount
218
+ * @param reserve
219
+ */
220
+ convertFromUSD(to, amount, reserve = false) {
221
+ const price = reserve ? this.reservePrice(to) : this.mainPrice(to);
222
+ const scale = 10n ** BigInt(this.sdk.tokensMeta.decimals(to));
223
+ return amount * scale / price;
224
+ }
214
225
  /**
215
226
  * Loads new prices for this oracle from PriceFeedCompressor
216
227
  * Does not update price feeds, only updates prices
@@ -3,28 +3,40 @@ import { iAddressProviderV300Abi } from "../abi/v300.js";
3
3
  import { iAddressProviderV310Abi } from "../abi/v310.js";
4
4
  import { ADDRESS_PROVIDER } from "../sdk/index.js";
5
5
  import { createAnvilClient } from "./createAnvilClient.js";
6
- async function unsafeMigrateFaucet(sdk) {
6
+ async function unsafeMigrateFaucet(sdk, faucet) {
7
7
  const anvil = createAnvilClient({
8
8
  chain: sdk.provider.chain,
9
9
  transport: sdk.provider.transport
10
10
  });
11
- const [faucetAddr, owner] = await anvil.multicall({
12
- contracts: [
13
- {
14
- abi: iAddressProviderV300Abi,
15
- address: ADDRESS_PROVIDER[sdk.provider.networkType],
16
- functionName: "getAddressOrRevert",
17
- args: [stringToHex("FAUCET", { size: 32 }), 0n]
18
- },
19
- {
20
- abi: iAddressProviderV310Abi,
21
- address: sdk.addressProvider.address,
22
- functionName: "owner",
23
- args: []
24
- }
25
- ],
26
- allowFailure: false
27
- });
11
+ let faucetAddr;
12
+ let owner;
13
+ if (faucet) {
14
+ faucetAddr = faucet;
15
+ owner = await anvil.readContract({
16
+ abi: iAddressProviderV310Abi,
17
+ address: sdk.addressProvider.address,
18
+ functionName: "owner",
19
+ args: []
20
+ });
21
+ } else {
22
+ [faucetAddr, owner] = await anvil.multicall({
23
+ contracts: [
24
+ {
25
+ abi: iAddressProviderV300Abi,
26
+ address: ADDRESS_PROVIDER[sdk.provider.networkType],
27
+ functionName: "getAddressOrRevert",
28
+ args: [stringToHex("FAUCET", { size: 32 }), 0n]
29
+ },
30
+ {
31
+ abi: iAddressProviderV310Abi,
32
+ address: sdk.addressProvider.address,
33
+ functionName: "owner",
34
+ args: []
35
+ }
36
+ ],
37
+ allowFailure: false
38
+ });
39
+ }
28
40
  sdk.logger?.debug(`faucet address: ${faucetAddr}, owner: ${owner}`);
29
41
  await anvil.impersonateAccount({ address: owner });
30
42
  await anvil.setBalance({
@@ -57,14 +69,15 @@ async function unsafeMigrateFaucet(sdk) {
57
69
  throw new Error("faucet migration reverted");
58
70
  }
59
71
  }
60
- async function migrateFaucet(sdk) {
72
+ async function migrateFaucet(sdk, faucet) {
61
73
  try {
62
- await unsafeMigrateFaucet(sdk);
74
+ await unsafeMigrateFaucet(sdk, faucet);
63
75
  sdk.logger?.info("faucet migrated successfully");
64
76
  } catch (e) {
65
77
  sdk.logger?.error(`faucet migration failed: ${e}`);
66
78
  }
67
79
  }
68
80
  export {
69
- migrateFaucet
81
+ migrateFaucet,
82
+ unsafeMigrateFaucet
70
83
  };
@@ -178,6 +178,17 @@ class PriceOracleBaseContract extends BaseContract {
178
178
  const scale = 10n ** BigInt(this.sdk.tokensMeta.decimals(from));
179
179
  return amount * price / scale;
180
180
  }
181
+ /**
182
+ * Tries to convert amount of USD to token, using latest known prices
183
+ * @param to
184
+ * @param amount
185
+ * @param reserve
186
+ */
187
+ convertFromUSD(to, amount, reserve = false) {
188
+ const price = reserve ? this.reservePrice(to) : this.mainPrice(to);
189
+ const scale = 10n ** BigInt(this.sdk.tokensMeta.decimals(to));
190
+ return amount * scale / price;
191
+ }
181
192
  /**
182
193
  * Loads new prices for this oracle from PriceFeedCompressor
183
194
  * Does not update price feeds, only updates prices
@@ -1,6 +1,9 @@
1
+ import type { Address } from "viem";
1
2
  import type { GearboxSDK } from "../sdk/index.js";
3
+ export declare function unsafeMigrateFaucet(sdk: GearboxSDK, faucet?: Address): Promise<void>;
2
4
  /**
3
- * Migrates faucet from address provider v3.0 [from constants in SDK] to v3.1 [from attached SDK]
4
- * @param
5
+ * Sets new faucet address on v3.1 address provider
6
+ * @param sdk
7
+ * @param faucet - new faucet address. If not provided, will try to get one from v3.0 address provider
5
8
  */
6
- export declare function migrateFaucet(sdk: GearboxSDK): Promise<void>;
9
+ export declare function migrateFaucet(sdk: GearboxSDK, faucet?: Address): Promise<void>;
@@ -95,6 +95,13 @@ export declare class PriceOracleBaseContract<abi extends Abi | readonly unknown[
95
95
  * @param reserve
96
96
  */
97
97
  convertToUSD(from: Address, amount: bigint, reserve?: boolean): bigint;
98
+ /**
99
+ * Tries to convert amount of USD to token, using latest known prices
100
+ * @param to
101
+ * @param amount
102
+ * @param reserve
103
+ */
104
+ convertFromUSD(to: Address, amount: bigint, reserve?: boolean): bigint;
98
105
  /**
99
106
  * Loads new prices for this oracle from PriceFeedCompressor
100
107
  * Does not update price feeds, only updates prices
@@ -24,4 +24,6 @@ export interface IPriceOracleContract extends IBaseContract {
24
24
  onDemandPriceUpdates: (updates?: UpdatePriceFeedsResult) => OnDemandPriceUpdate[];
25
25
  convertToUnderlying: (token: Address, amount: bigint, reserve?: boolean) => bigint;
26
26
  convert: (from: Address, to: Address, amount: bigint, reserve?: boolean) => bigint;
27
+ convertToUSD: (from: Address, amount: bigint, reserve?: boolean) => bigint;
28
+ convertFromUSD: (to: Address, amount: bigint, reserve?: boolean) => bigint;
27
29
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "3.0.5",
3
+ "version": "3.1.1",
4
4
  "description": "Gearbox SDK",
5
5
  "license": "MIT",
6
6
  "main": "./dist/cjs/sdk/index.js",