@gearbox-protocol/sdk 12.4.0 → 12.5.0

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.
@@ -26,10 +26,20 @@ var import_base = require("../../base/index.js");
26
26
  var import_constants = require("../../constants/index.js");
27
27
  var import_mappers = require("../../utils/mappers.js");
28
28
  class AbstractAddressProviderContract extends import_base.BaseContract {
29
- #addresses = {};
30
- constructor(options, args, addresses = {}) {
29
+ #addresses;
30
+ #overrides;
31
+ constructor(options, args, addresses) {
31
32
  super(options, args);
32
- this.#addresses = addresses;
33
+ this.#addresses = addresses?.addresses ?? {};
34
+ this.#overrides = addresses?.overrides ?? {};
35
+ for (const [contract, vs] of import_mappers.TypedObjectUtils.entries(this.#overrides)) {
36
+ for (const [version, address] of import_mappers.TypedObjectUtils.entries(vs)) {
37
+ this.#addresses[contract] = {
38
+ ...this.#addresses[contract],
39
+ [version]: address
40
+ };
41
+ }
42
+ }
33
43
  }
34
44
  setInternalAddress(key, address, version) {
35
45
  const k = (0, import_viem.isHex)(key) ? (0, import_viem.hexToString)(key, { size: 32 }) : key;
@@ -38,6 +48,13 @@ class AbstractAddressProviderContract extends import_base.BaseContract {
38
48
  }
39
49
  this.#addresses[k][version] = address;
40
50
  this.logger?.debug(`Set address for ${k}@${version} to ${address}`);
51
+ const overriden = this.#overrides[k]?.[version];
52
+ if (overriden) {
53
+ this.logger?.warn(
54
+ `address for ${k}@${version} was overriden, hardcode ${overriden} instead of ${address}`
55
+ );
56
+ this.#addresses[k][version] = overriden;
57
+ }
41
58
  }
42
59
  getAddress(contract, version = import_constants.NO_VERSION) {
43
60
  if (!this.#addresses[contract]) {
@@ -37,7 +37,7 @@ var import_viem2 = require("../../utils/viem/index.js");
37
37
  var import_AbstractAddressProviderContract = __toESM(require("./AbstractAddressProviderContract.js"));
38
38
  const abi = import_v300.iAddressProviderV300Abi;
39
39
  class AddressProviderV300Contract extends import_AbstractAddressProviderContract.default {
40
- constructor(options, address, version, addresses = {}) {
40
+ constructor(options, address, version, addresses) {
41
41
  super(
42
42
  options,
43
43
  {
@@ -36,7 +36,7 @@ var import_generated = require("../../../abi/310/generated.js");
36
36
  var import_AbstractAddressProviderContract = __toESM(require("./AbstractAddressProviderContract.js"));
37
37
  const abi = import_generated.iAddressProviderV310Abi;
38
38
  class AddressProviderV310Contract extends import_AbstractAddressProviderContract.default {
39
- constructor(options, address, version = 310, addresses = {}) {
39
+ constructor(options, address, version = 310, addresses) {
40
40
  super(
41
41
  options,
42
42
  {
@@ -27,6 +27,18 @@ var import_constants = require("../../constants/index.js");
27
27
  var import_hex = require("../../utils/hex.js");
28
28
  var import_AddressProviderV300Contract = require("./AddressProviderV300Contract.js");
29
29
  var import_AddressProviderV310Contract = require("./AddressProviderV310Contract.js");
30
+ const OVERRIDE_ADDRESSES = {
31
+ // Override price feed compressor and market feed compressor
32
+ // we urgently deployed fix and it has not been added to the address provider yet
33
+ Mainnet: {
34
+ [import_constants.AP_PRICE_FEED_COMPRESSOR]: {
35
+ 311: "0x1fA2637B9fab0CD14290A7EE908DDc9688a15120"
36
+ },
37
+ [import_constants.AP_MARKET_COMPRESSOR]: {
38
+ 311: "0x0C27F242f6e9F2A9AD3261bE6e439De3B948bcA2"
39
+ }
40
+ }
41
+ };
30
42
  async function createAddressProvider(sdk, address) {
31
43
  let v;
32
44
  if ((0, import_hex.hexEq)(address, import_constants.ADDRESS_PROVIDER_V310)) {
@@ -45,11 +57,15 @@ function hydrateAddressProvider(sdk, state) {
45
57
  return newAddressProvider(sdk, addr, Number(version), state.addresses);
46
58
  }
47
59
  function newAddressProvider(sdk, address, version, addresses) {
60
+ const addrOptions = {
61
+ addresses,
62
+ overrides: OVERRIDE_ADDRESSES[sdk.networkType]
63
+ };
48
64
  if ((0, import_constants.isV300)(version)) {
49
- return new import_AddressProviderV300Contract.AddressProviderV300Contract(sdk, address, version, addresses);
65
+ return new import_AddressProviderV300Contract.AddressProviderV300Contract(sdk, address, version, addrOptions);
50
66
  }
51
67
  if ((0, import_constants.isV310)(version)) {
52
- return new import_AddressProviderV310Contract.AddressProviderV310Contract(sdk, address, version, addresses);
68
+ return new import_AddressProviderV310Contract.AddressProviderV310Contract(sdk, address, version, addrOptions);
53
69
  }
54
70
  throw new Error(`unsupported address provider version: ${version}`);
55
71
  }
@@ -3,10 +3,20 @@ import { BaseContract } from "../../base/index.js";
3
3
  import { NO_VERSION } from "../../constants/index.js";
4
4
  import { TypedObjectUtils } from "../../utils/mappers.js";
5
5
  class AbstractAddressProviderContract extends BaseContract {
6
- #addresses = {};
7
- constructor(options, args, addresses = {}) {
6
+ #addresses;
7
+ #overrides;
8
+ constructor(options, args, addresses) {
8
9
  super(options, args);
9
- this.#addresses = addresses;
10
+ this.#addresses = addresses?.addresses ?? {};
11
+ this.#overrides = addresses?.overrides ?? {};
12
+ for (const [contract, vs] of TypedObjectUtils.entries(this.#overrides)) {
13
+ for (const [version, address] of TypedObjectUtils.entries(vs)) {
14
+ this.#addresses[contract] = {
15
+ ...this.#addresses[contract],
16
+ [version]: address
17
+ };
18
+ }
19
+ }
10
20
  }
11
21
  setInternalAddress(key, address, version) {
12
22
  const k = isHex(key) ? hexToString(key, { size: 32 }) : key;
@@ -15,6 +25,13 @@ class AbstractAddressProviderContract extends BaseContract {
15
25
  }
16
26
  this.#addresses[k][version] = address;
17
27
  this.logger?.debug(`Set address for ${k}@${version} to ${address}`);
28
+ const overriden = this.#overrides[k]?.[version];
29
+ if (overriden) {
30
+ this.logger?.warn(
31
+ `address for ${k}@${version} was overriden, hardcode ${overriden} instead of ${address}`
32
+ );
33
+ this.#addresses[k][version] = overriden;
34
+ }
18
35
  }
19
36
  getAddress(contract, version = NO_VERSION) {
20
37
  if (!this.#addresses[contract]) {
@@ -4,7 +4,7 @@ import { getLogsSafe } from "../../utils/viem/index.js";
4
4
  import AbstractAddressProviderContract from "./AbstractAddressProviderContract.js";
5
5
  const abi = iAddressProviderV300Abi;
6
6
  class AddressProviderV300Contract extends AbstractAddressProviderContract {
7
- constructor(options, address, version, addresses = {}) {
7
+ constructor(options, address, version, addresses) {
8
8
  super(
9
9
  options,
10
10
  {
@@ -3,7 +3,7 @@ import { iAddressProviderV310Abi } from "../../../abi/310/generated.js";
3
3
  import AbstractAddressProviderContract from "./AbstractAddressProviderContract.js";
4
4
  const abi = iAddressProviderV310Abi;
5
5
  class AddressProviderV310Contract extends AbstractAddressProviderContract {
6
- constructor(options, address, version = 310, addresses = {}) {
6
+ constructor(options, address, version = 310, addresses) {
7
7
  super(
8
8
  options,
9
9
  {
@@ -1,12 +1,26 @@
1
1
  import { iVersionAbi } from "../../../abi/iVersion.js";
2
2
  import {
3
3
  ADDRESS_PROVIDER_V310,
4
+ AP_MARKET_COMPRESSOR,
5
+ AP_PRICE_FEED_COMPRESSOR,
4
6
  isV300,
5
7
  isV310
6
8
  } from "../../constants/index.js";
7
9
  import { hexEq } from "../../utils/hex.js";
8
10
  import { AddressProviderV300Contract } from "./AddressProviderV300Contract.js";
9
11
  import { AddressProviderV310Contract } from "./AddressProviderV310Contract.js";
12
+ const OVERRIDE_ADDRESSES = {
13
+ // Override price feed compressor and market feed compressor
14
+ // we urgently deployed fix and it has not been added to the address provider yet
15
+ Mainnet: {
16
+ [AP_PRICE_FEED_COMPRESSOR]: {
17
+ 311: "0x1fA2637B9fab0CD14290A7EE908DDc9688a15120"
18
+ },
19
+ [AP_MARKET_COMPRESSOR]: {
20
+ 311: "0x0C27F242f6e9F2A9AD3261bE6e439De3B948bcA2"
21
+ }
22
+ }
23
+ };
10
24
  async function createAddressProvider(sdk, address) {
11
25
  let v;
12
26
  if (hexEq(address, ADDRESS_PROVIDER_V310)) {
@@ -25,11 +39,15 @@ function hydrateAddressProvider(sdk, state) {
25
39
  return newAddressProvider(sdk, addr, Number(version), state.addresses);
26
40
  }
27
41
  function newAddressProvider(sdk, address, version, addresses) {
42
+ const addrOptions = {
43
+ addresses,
44
+ overrides: OVERRIDE_ADDRESSES[sdk.networkType]
45
+ };
28
46
  if (isV300(version)) {
29
- return new AddressProviderV300Contract(sdk, address, version, addresses);
47
+ return new AddressProviderV300Contract(sdk, address, version, addrOptions);
30
48
  }
31
49
  if (isV310(version)) {
32
- return new AddressProviderV310Contract(sdk, address, version, addresses);
50
+ return new AddressProviderV310Contract(sdk, address, version, addrOptions);
33
51
  }
34
52
  throw new Error(`unsupported address provider version: ${version}`);
35
53
  }
@@ -3,10 +3,10 @@ import type { BaseContractArgs } from "../../base/BaseContract.js";
3
3
  import { BaseContract, type ConstructOptions } from "../../base/index.js";
4
4
  import type { VersionRange } from "../../constants/index.js";
5
5
  import type { AddressProviderV3StateHuman } from "../../types/index.js";
6
- import type { AddressProviderState } from "./types.js";
6
+ import type { AddressProviderAddresses, AddressProviderState } from "./types.js";
7
7
  export default abstract class AbstractAddressProviderContract<abi extends Abi | readonly unknown[]> extends BaseContract<abi> {
8
8
  #private;
9
- constructor(options: ConstructOptions, args: BaseContractArgs<abi>, addresses?: Record<string, Record<number, Address>>);
9
+ constructor(options: ConstructOptions, args: BaseContractArgs<abi>, addresses?: AddressProviderAddresses);
10
10
  protected setInternalAddress(key: string, address: Address, version: number): void;
11
11
  getAddress(contract: string, version?: number): Address;
12
12
  getLatest(contract: string, range: VersionRange): [address: Address, version: number] | undefined;
@@ -1,7 +1,7 @@
1
1
  import type { Address, ContractEventName, DecodeFunctionDataReturnType, Log } from "viem";
2
2
  import type { ConstructOptions } from "../../base/Construct.js";
3
3
  import AbstractAddressProviderContract from "./AbstractAddressProviderContract.js";
4
- import type { IAddressProviderContract } from "./types.js";
4
+ import type { AddressProviderAddresses, IAddressProviderContract } from "./types.js";
5
5
  declare const abi: readonly [{
6
6
  readonly type: "function";
7
7
  readonly name: "addresses";
@@ -89,7 +89,7 @@ declare const abi: readonly [{
89
89
  }];
90
90
  type abi = typeof abi;
91
91
  export declare class AddressProviderV300Contract extends AbstractAddressProviderContract<abi> implements IAddressProviderContract {
92
- constructor(options: ConstructOptions, address: Address, version: number, addresses?: Record<string, Record<number, Address>>);
92
+ constructor(options: ConstructOptions, address: Address, version: number, addresses?: AddressProviderAddresses);
93
93
  protected stringifyFunctionParams(params: DecodeFunctionDataReturnType<abi>): string[];
94
94
  processLog(log: Log<bigint, number, false, undefined, undefined, abi, ContractEventName<abi>>): void;
95
95
  syncState(blockNumber?: bigint): Promise<void>;
@@ -1,7 +1,7 @@
1
1
  import type { Address, ContractEventName, DecodeFunctionDataReturnType, Log } from "viem";
2
2
  import type { ConstructOptions } from "../../base/Construct.js";
3
3
  import AbstractAddressProviderContract from "./AbstractAddressProviderContract.js";
4
- import type { IAddressProviderContract } from "./types.js";
4
+ import type { AddressProviderAddresses, IAddressProviderContract } from "./types.js";
5
5
  declare const abi: readonly [{
6
6
  readonly type: "function";
7
7
  readonly inputs: readonly [];
@@ -254,7 +254,7 @@ declare const abi: readonly [{
254
254
  }];
255
255
  type abi = typeof abi;
256
256
  export declare class AddressProviderV310Contract extends AbstractAddressProviderContract<abi> implements IAddressProviderContract {
257
- constructor(options: ConstructOptions, address: Address, version?: number, addresses?: Record<string, Record<number, Address>>);
257
+ constructor(options: ConstructOptions, address: Address, version?: number, addresses?: AddressProviderAddresses);
258
258
  protected stringifyFunctionParams(params: DecodeFunctionDataReturnType<abi>): string[];
259
259
  processLog(log: Log<bigint, number, false, undefined, undefined, abi, ContractEventName<abi>>): void;
260
260
  syncState(blockNumber?: bigint): Promise<void>;
@@ -2,6 +2,21 @@ import type { Address } from "viem";
2
2
  import type { BaseParams, IBaseContract } from "../../base/index.js";
3
3
  import type { VersionRange } from "../../constants/versions.js";
4
4
  import type { AddressProviderV3StateHuman } from "../../types/index.js";
5
+ export interface AddressProviderAddresses {
6
+ /**
7
+ * Initialize address provider with these addresses
8
+ * Used in hydration
9
+ */
10
+ addresses?: Record<string, Record<number, Address>>;
11
+ /**
12
+ * Override addresses for this address provider
13
+ * These addresses will precede over addresses loaded from chain
14
+ *
15
+ * This is an escape hatch.
16
+ * We used it when we need to fix price feed compressor/market compressor urgently
17
+ */
18
+ overrides?: Record<string, Record<number, Address>>;
19
+ }
5
20
  export interface AddressProviderState {
6
21
  baseParams: BaseParams;
7
22
  addresses: Record<string, Record<number, Address>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "12.4.0",
3
+ "version": "12.5.0",
4
4
  "description": "Gearbox SDK",
5
5
  "license": "MIT",
6
6
  "main": "./dist/cjs/sdk/index.js",