@gearbox-protocol/sdk 3.0.0-vfourabi.1 → 3.0.0-vfourabi.3
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.
- package/.eslintignore +3 -0
- package/.github/workflows/lint_pr.yml +18 -0
- package/.github/workflows/pr.yml +39 -0
- package/.github/workflows/release.yml +47 -0
- package/.gitignore +19 -0
- package/.husky/commit-msg +1 -0
- package/.husky/pre-commit +1 -0
- package/.nvmrc +1 -0
- package/.releaserc.json +34 -0
- package/.vscode/extensions.json +7 -0
- package/.vscode/settings.json +16 -0
- package/.yarn/install-state.gz +0 -0
- package/.yarnrc.yml +1 -0
- package/ContributionAgreement +72 -0
- package/dist/cjs/abi/iZapper.cjs +85 -0
- package/dist/cjs/abi/iZapper.d.ts +123 -0
- package/dist/cjs/sdk/index.cjs +19830 -19764
- package/dist/cjs/sdk/index.d.ts +3746 -3061
- package/dist/esm/abi/iZapper.d.mts +123 -0
- package/dist/esm/abi/iZapper.mjs +83 -0
- package/dist/esm/sdk/index.d.mts +3746 -3061
- package/dist/esm/sdk/index.mjs +19807 -19765
- package/jest.config.js +7 -0
- package/package.json +32 -2
- package/scripts/example.ts +30 -0
- package/src/abi/compressors.ts +3962 -0
- package/src/abi/errors.ts +196 -0
- package/src/abi/iERC20.ts +122 -0
- package/src/abi/iPausable.ts +35 -0
- package/src/abi/iPriceFeedStore.ts +227 -0
- package/src/abi/iUpdatablePriceFeed.ts +16 -0
- package/src/abi/iVersion.ts +28 -0
- package/src/abi/iZapper.ts +84 -0
- package/src/abi/routerV300.ts +378 -0
- package/src/abi/v300.ts +4151 -0
- package/src/abi/v310.ts +5179 -0
- package/src/adapters/AbstractAdapter.ts +28 -0
- package/src/adapters/BalancerV2VaultAdapterContract.ts +19 -0
- package/src/adapters/BalancerV3RouterAdapterContract.ts +19 -0
- package/src/adapters/CamelotV3AdapterContract.ts +20 -0
- package/src/adapters/ConvexV1BaseRewardPoolAdapterContract.ts +20 -0
- package/src/adapters/ConvexV1BoosterAdapterContract.ts +20 -0
- package/src/adapters/Curve2AssetsAdapterContract.ts +20 -0
- package/src/adapters/Curve3AssetsAdapterContract.ts +20 -0
- package/src/adapters/Curve4AssetsAdapterContract.ts +20 -0
- package/src/adapters/CurveV1AdapterStETHContract.ts +20 -0
- package/src/adapters/CurveV1StableNGAdapterContract.ts +20 -0
- package/src/adapters/DaiUsdsAdapterContract.ts +21 -0
- package/src/adapters/ERC4626AdapterContract.ts +20 -0
- package/src/adapters/MellowERC4626VaultAdapterContract.ts +20 -0
- package/src/adapters/MellowVaultAdapterContract.ts +20 -0
- package/src/adapters/PendleRouterAdapterContract.ts +21 -0
- package/src/adapters/StakingRewardsAdapterContract.ts +21 -0
- package/src/adapters/UniswapV2AdapterContract.ts +20 -0
- package/src/adapters/UniswapV3AdapterContract.ts +170 -0
- package/src/adapters/VelodromeV2AdapterContract.ts +20 -0
- package/src/adapters/WstETHV1AdapterContract.ts +20 -0
- package/src/adapters/YearnV2AdapterContract.ts +20 -0
- package/src/adapters/abi/adapters.ts +4325 -0
- package/src/adapters/abi/iBalancerV3RouterAdapter.ts +126 -0
- package/src/adapters/abi/index.ts +2 -0
- package/src/adapters/index.ts +2 -0
- package/src/adapters/plugin.ts +90 -0
- package/src/adapters/types.ts +62 -0
- package/src/dev/AccountOpener.ts +611 -0
- package/src/dev/PriceFeedStore.ts +95 -0
- package/src/dev/SDKExample.ts +167 -0
- package/src/dev/abi.ts +14 -0
- package/src/dev/calcLiquidatableLTs.ts +77 -0
- package/src/dev/createAnvilClient.ts +155 -0
- package/src/dev/index.ts +7 -0
- package/src/dev/setLTZero.ts +127 -0
- package/src/dev/setLTs.ts +68 -0
- package/src/sdk/GearboxSDK.ts +488 -0
- package/src/sdk/abi/index.ts +1 -0
- package/src/sdk/abi/oracles.ts +4614 -0
- package/src/sdk/accounts/CreditAccountsService.ts +1123 -0
- package/src/sdk/accounts/index.ts +1 -0
- package/src/sdk/base/AddressLabeller.ts +35 -0
- package/src/sdk/base/BaseContract.ts +237 -0
- package/src/sdk/base/IAddressLabeller.ts +13 -0
- package/src/sdk/base/PlaceholderContract.ts +12 -0
- package/src/sdk/base/SDKConstruct.ts +35 -0
- package/src/sdk/base/TokensMeta.ts +45 -0
- package/src/sdk/base/index.ts +6 -0
- package/src/sdk/base/types.ts +102 -0
- package/src/sdk/bots/BotsService.ts +92 -0
- package/src/sdk/bots/index.ts +2 -0
- package/src/sdk/bots/utils.ts +19 -0
- package/src/sdk/chain/Provider.ts +99 -0
- package/src/sdk/chain/chains.ts +41 -0
- package/src/sdk/chain/detectChain.ts +21 -0
- package/src/sdk/chain/index.ts +3 -0
- package/src/sdk/constants/address-provider.ts +47 -0
- package/src/sdk/constants/addresses.ts +82 -0
- package/src/sdk/constants/bot-permissions.ts +36 -0
- package/src/sdk/constants/index.ts +6 -0
- package/src/sdk/constants/math.ts +23 -0
- package/src/sdk/constants/networks.ts +38 -0
- package/src/sdk/constants/periphery.ts +7 -0
- package/src/sdk/core/BotListV3Contract.ts +103 -0
- package/src/sdk/core/GearStakingV3Contract.ts +84 -0
- package/src/sdk/core/address-provider/AbstractAddressProviderContract.ts +101 -0
- package/src/sdk/core/address-provider/AddressProviderV3Contract.ts +105 -0
- package/src/sdk/core/address-provider/AddressProviderV3_1Contract.ts +92 -0
- package/src/sdk/core/address-provider/getAddressProvider.ts +45 -0
- package/src/sdk/core/address-provider/index.ts +4 -0
- package/src/sdk/core/address-provider/types.ts +17 -0
- package/src/sdk/core/index.ts +3 -0
- package/src/sdk/gauges/GaugeStakingService.ts +100 -0
- package/src/sdk/gauges/index.ts +2 -0
- package/src/sdk/gauges/utils.ts +25 -0
- package/src/sdk/index.ts +17 -0
- package/src/sdk/market/MarketConfiguratorContract.ts +78 -0
- package/src/sdk/market/MarketRegister.ts +330 -0
- package/src/sdk/market/MarketSuite.ts +83 -0
- package/src/sdk/market/adapters/PlaceholderAdapterContracts.ts +18 -0
- package/src/sdk/market/adapters/factory.ts +34 -0
- package/src/sdk/market/adapters/index.ts +3 -0
- package/src/sdk/market/adapters/types.ts +7 -0
- package/src/sdk/market/credit/CreditConfiguratorV300Contract.ts +164 -0
- package/src/sdk/market/credit/CreditConfiguratorV310Contract.ts +139 -0
- package/src/sdk/market/credit/CreditFacadeV300Contract.ts +206 -0
- package/src/sdk/market/credit/CreditFacadeV310Contract.ts +190 -0
- package/src/sdk/market/credit/CreditManagerV300Contract.ts +122 -0
- package/src/sdk/market/credit/CreditManagerV310Contract.ts +122 -0
- package/src/sdk/market/credit/CreditSuite.ts +65 -0
- package/src/sdk/market/credit/createCreditConfigurator.ts +18 -0
- package/src/sdk/market/credit/createCreditFacade.ts +18 -0
- package/src/sdk/market/credit/createCreditManager.ts +18 -0
- package/src/sdk/market/credit/index.ts +8 -0
- package/src/sdk/market/credit/types.ts +42 -0
- package/src/sdk/market/index.ts +7 -0
- package/src/sdk/market/oracle/PriceOracleBaseContract.ts +376 -0
- package/src/sdk/market/oracle/PriceOracleV300Contract.ts +71 -0
- package/src/sdk/market/oracle/PriceOracleV310Contract.ts +43 -0
- package/src/sdk/market/oracle/createPriceOracle.ts +22 -0
- package/src/sdk/market/oracle/index.ts +4 -0
- package/src/sdk/market/oracle/types.ts +48 -0
- package/src/sdk/market/pool/GaugeContract.ts +120 -0
- package/src/sdk/market/pool/LinearInterestRateModelContract.ts +75 -0
- package/src/sdk/market/pool/PoolQuotaKeeperV300Contract.ts +89 -0
- package/src/sdk/market/pool/PoolQuotaKeeperV310Contract.ts +89 -0
- package/src/sdk/market/pool/PoolSuite.ts +76 -0
- package/src/sdk/market/pool/PoolV300Contract.ts +144 -0
- package/src/sdk/market/pool/PoolV310Contract.ts +144 -0
- package/src/sdk/market/pool/TumblerContract.ts +73 -0
- package/src/sdk/market/pool/createInterestRateModel.ts +33 -0
- package/src/sdk/market/pool/createPool.ts +19 -0
- package/src/sdk/market/pool/createPoolQuotaKeeper.ts +20 -0
- package/src/sdk/market/pool/createRateKeeper.ts +25 -0
- package/src/sdk/market/pool/index.ts +6 -0
- package/src/sdk/market/pool/types.ts +28 -0
- package/src/sdk/market/pricefeeds/AbstractLPPriceFeed.ts +71 -0
- package/src/sdk/market/pricefeeds/AbstractPriceFeed.ts +137 -0
- package/src/sdk/market/pricefeeds/BalancerStablePriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/BalancerWeightedPriceFeed.ts +70 -0
- package/src/sdk/market/pricefeeds/BoundedPriceFeed.ts +34 -0
- package/src/sdk/market/pricefeeds/ChainlinkPriceFeed.ts +16 -0
- package/src/sdk/market/pricefeeds/CompositePriceFeed.ts +25 -0
- package/src/sdk/market/pricefeeds/CurveCryptoPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/CurveStablePriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/CurveUSDPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/Erc4626PriceFeed.ts +36 -0
- package/src/sdk/market/pricefeeds/MellowLRTPriceFeed.ts +26 -0
- package/src/sdk/market/pricefeeds/PendleTWAPPTPriceFeed.ts +44 -0
- package/src/sdk/market/pricefeeds/PriceFeedRef.ts +34 -0
- package/src/sdk/market/pricefeeds/PriceFeedsRegister.ts +293 -0
- package/src/sdk/market/pricefeeds/RedstonePriceFeed.ts +65 -0
- package/src/sdk/market/pricefeeds/RedstoneUpdater.ts +304 -0
- package/src/sdk/market/pricefeeds/WstETHPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/YearnPriceFeed.ts +24 -0
- package/src/sdk/market/pricefeeds/ZeroPriceFeed.ts +17 -0
- package/src/sdk/market/pricefeeds/index.ts +20 -0
- package/src/sdk/market/pricefeeds/types.ts +82 -0
- package/src/sdk/market/pricefeeds/utils.ts +24 -0
- package/src/sdk/plugins/index.ts +10 -0
- package/src/sdk/router/PathOptionFactory.ts +147 -0
- package/src/sdk/router/RouterV3Contract.ts +558 -0
- package/src/sdk/router/index.ts +2 -0
- package/src/sdk/router/types.ts +48 -0
- package/src/sdk/sdk-gov-legacy/contracts/adapters.ts +39 -0
- package/src/sdk/sdk-gov-legacy/contracts/contracts.ts +647 -0
- package/src/sdk/sdk-gov-legacy/contracts/index.ts +2 -0
- package/src/sdk/sdk-gov-legacy/core/constants.ts +11 -0
- package/src/sdk/sdk-gov-legacy/index.ts +4 -0
- package/src/sdk/sdk-gov-legacy/oracles/PriceFeedType.ts +24 -0
- package/src/sdk/sdk-gov-legacy/oracles/index.ts +1 -0
- package/src/sdk/sdk-gov-legacy/tokens/aave.ts +101 -0
- package/src/sdk/sdk-gov-legacy/tokens/aura.ts +284 -0
- package/src/sdk/sdk-gov-legacy/tokens/balancer.ts +421 -0
- package/src/sdk/sdk-gov-legacy/tokens/compound.ts +79 -0
- package/src/sdk/sdk-gov-legacy/tokens/convex.ts +561 -0
- package/src/sdk/sdk-gov-legacy/tokens/curveLP.ts +480 -0
- package/src/sdk/sdk-gov-legacy/tokens/decimals.ts +301 -0
- package/src/sdk/sdk-gov-legacy/tokens/erc4626.ts +75 -0
- package/src/sdk/sdk-gov-legacy/tokens/gear.ts +273 -0
- package/src/sdk/sdk-gov-legacy/tokens/index.ts +18 -0
- package/src/sdk/sdk-gov-legacy/tokens/normal.ts +613 -0
- package/src/sdk/sdk-gov-legacy/tokens/quoted.ts +10 -0
- package/src/sdk/sdk-gov-legacy/tokens/stakingRewards.ts +41 -0
- package/src/sdk/sdk-gov-legacy/tokens/token.ts +2354 -0
- package/src/sdk/sdk-gov-legacy/tokens/tokenData.ts +44 -0
- package/src/sdk/sdk-gov-legacy/tokens/tokenType.ts +33 -0
- package/src/sdk/sdk-gov-legacy/tokens/wrapped.ts +28 -0
- package/src/sdk/sdk-gov-legacy/tokens/yearn.ts +122 -0
- package/src/sdk/sdk-gov-legacy/tokens/zircuit.ts +44 -0
- package/src/sdk/sdk-legacy/apy/index.ts +149 -0
- package/src/sdk/sdk-legacy/core/assets.ts +200 -0
- package/src/sdk/sdk-legacy/core/creditAccount.spec.ts +1966 -0
- package/src/sdk/sdk-legacy/core/creditAccount.ts +816 -0
- package/src/sdk/sdk-legacy/core/creditManager.ts +316 -0
- package/src/sdk/sdk-legacy/core/creditSession.ts +352 -0
- package/src/sdk/sdk-legacy/core/endpoint.ts +131 -0
- package/src/sdk/sdk-legacy/core/eventOrTx.ts +101 -0
- package/src/sdk/sdk-legacy/core/pool.ts +439 -0
- package/src/sdk/sdk-legacy/core/strategy.ts +82 -0
- package/src/sdk/sdk-legacy/core/transactions.ts +865 -0
- package/src/sdk/sdk-legacy/gearboxRewards/api.ts +704 -0
- package/src/sdk/sdk-legacy/gearboxRewards/apy.ts +267 -0
- package/src/sdk/sdk-legacy/gearboxRewards/extraAPY.ts +165 -0
- package/src/sdk/sdk-legacy/gearboxRewards/index.ts +3 -0
- package/src/sdk/sdk-legacy/gearboxRewards/merklAPI.ts +151 -0
- package/src/sdk/sdk-legacy/index.ts +21 -0
- package/src/sdk/sdk-legacy/pathfinder/core.ts +18 -0
- package/src/sdk/sdk-legacy/pathfinder/index.ts +1 -0
- package/src/sdk/sdk-legacy/payload/creditAccount.ts +48 -0
- package/src/sdk/sdk-legacy/payload/creditManager.ts +133 -0
- package/src/sdk/sdk-legacy/payload/creditSession.ts +143 -0
- package/src/sdk/sdk-legacy/payload/graphPayload.ts +10 -0
- package/src/sdk/sdk-legacy/payload/pool.ts +198 -0
- package/src/sdk/sdk-legacy/payload/token.ts +13 -0
- package/src/sdk/sdk-legacy/tokens/tokenData.ts +57 -0
- package/src/sdk/sdk-legacy/types/IAirdropDistributor.ts +103 -0
- package/src/sdk/sdk-legacy/types/IBaseRewardPool.ts +249 -0
- package/src/sdk/sdk-legacy/types/IDataCompressorV3.ts +957 -0
- package/src/sdk/sdk-legacy/types/IDegenDistributor.ts +70 -0
- package/src/sdk/sdk-legacy/types/IERC20Permit.ts +35 -0
- package/src/sdk/sdk-legacy/types/IERC20ZapperDeposits.ts +99 -0
- package/src/sdk/sdk-legacy/types/IETHZapperDeposits.ts +27 -0
- package/src/sdk/sdk-legacy/types/IFarmingPool.ts +229 -0
- package/src/sdk/sdk-legacy/types/IInterestRateModel.ts +23 -0
- package/src/sdk/sdk-legacy/types/IMulticall3.ts +242 -0
- package/src/sdk/sdk-legacy/types/IOffchainOracle.ts +31 -0
- package/src/sdk/sdk-legacy/types/index.ts +11 -0
- package/src/sdk/sdk-legacy/utils/formatter.ts +46 -0
- package/src/sdk/sdk-legacy/utils/index.ts +3 -0
- package/src/sdk/sdk-legacy/utils/math.ts +6 -0
- package/src/sdk/sdk-legacy/utils/price.ts +27 -0
- package/src/sdk/types/index.ts +5 -0
- package/src/sdk/types/logger.ts +13 -0
- package/src/sdk/types/state-human.ts +224 -0
- package/src/sdk/types/state.ts +8 -0
- package/src/sdk/types/transactions.ts +22 -0
- package/src/sdk/types/tvl.ts +4 -0
- package/src/sdk/utils/AddressMap.ts +111 -0
- package/src/sdk/utils/bytes32ToString.ts +6 -0
- package/src/sdk/utils/childLogger.ts +8 -0
- package/src/sdk/utils/createRawTx.ts +86 -0
- package/src/sdk/utils/etherscan.ts +42 -0
- package/src/sdk/utils/filterDust.ts +20 -0
- package/src/sdk/utils/formatter.ts +124 -0
- package/src/sdk/utils/index.ts +10 -0
- package/src/sdk/utils/internal/Hooks.ts +51 -0
- package/src/sdk/utils/internal/index.ts +1 -0
- package/src/sdk/utils/json.ts +27 -0
- package/src/sdk/utils/mappers.ts +38 -0
- package/src/sdk/utils/retry.ts +24 -0
- package/src/sdk/utils/viem/detectNetwork.ts +27 -0
- package/src/sdk/utils/viem/index.ts +3 -0
- package/src/sdk/utils/viem/sendRawTx.ts +36 -0
- package/src/sdk/utils/viem/simulateMulticall.ts +262 -0
- package/tsconfig.build.json +4 -0
- package/tsconfig.json +16 -0
- package/tsup.config.ts +77 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { Abi, RequiredBy, UnionOmit } from "viem";
|
|
2
|
+
|
|
3
|
+
import { ilpPriceFeedAbi } from "../../abi";
|
|
4
|
+
import type { PriceFeedTreeNode } from "../../base";
|
|
5
|
+
import { BaseContract } from "../../base";
|
|
6
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
7
|
+
import type { PriceFeedStateHuman } from "../../types";
|
|
8
|
+
import { PriceFeedRef } from "./PriceFeedRef";
|
|
9
|
+
import type { IPriceFeedContract, PriceFeedContractType } from "./types";
|
|
10
|
+
|
|
11
|
+
export type PartialPriceFeedTreeNode = RequiredBy<
|
|
12
|
+
Partial<PriceFeedTreeNode>,
|
|
13
|
+
"baseParams"
|
|
14
|
+
>;
|
|
15
|
+
|
|
16
|
+
export type PriceFeedConstructorArgs<abi extends Abi | readonly unknown[]> =
|
|
17
|
+
PartialPriceFeedTreeNode & {
|
|
18
|
+
abi: abi;
|
|
19
|
+
name: string;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export abstract class AbstractPriceFeedContract<
|
|
23
|
+
const abi extends Abi | readonly unknown[],
|
|
24
|
+
>
|
|
25
|
+
extends BaseContract<abi>
|
|
26
|
+
implements IPriceFeedContract
|
|
27
|
+
{
|
|
28
|
+
/**
|
|
29
|
+
* True if the contract deployed at this address implements IUpdatablePriceFeed interface
|
|
30
|
+
*/
|
|
31
|
+
#updatable?: boolean;
|
|
32
|
+
#decimals?: number;
|
|
33
|
+
#underlyingPriceFeeds?: readonly PriceFeedRef[];
|
|
34
|
+
#skipCheck?: boolean;
|
|
35
|
+
|
|
36
|
+
public hasLowerBoundCap = false;
|
|
37
|
+
public readonly description?: string;
|
|
38
|
+
|
|
39
|
+
constructor(sdk: GearboxSDK, args: PriceFeedConstructorArgs<abi>) {
|
|
40
|
+
super(sdk, {
|
|
41
|
+
abi: args.abi,
|
|
42
|
+
addr: args.baseParams.addr,
|
|
43
|
+
name: args.name + (args.description ? ` ${args.description}` : ""),
|
|
44
|
+
contractType: args.baseParams.contractType,
|
|
45
|
+
version: args.baseParams.version,
|
|
46
|
+
});
|
|
47
|
+
this.description = args.description;
|
|
48
|
+
this.#decimals = args.decimals;
|
|
49
|
+
this.#updatable = args.updatable;
|
|
50
|
+
this.#skipCheck = args.skipCheck;
|
|
51
|
+
|
|
52
|
+
if (args.underlyingFeeds && args.underlyingStalenessPeriods) {
|
|
53
|
+
this.#underlyingPriceFeeds = args.underlyingFeeds.map(
|
|
54
|
+
(address, i) =>
|
|
55
|
+
new PriceFeedRef(
|
|
56
|
+
this.sdk,
|
|
57
|
+
address,
|
|
58
|
+
args.underlyingStalenessPeriods![i],
|
|
59
|
+
),
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public get loaded(): boolean {
|
|
65
|
+
return this.#decimals !== undefined;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public get decimals(): number {
|
|
69
|
+
if (this.#decimals === undefined) {
|
|
70
|
+
throw new Error("price feed has been initialized with BaseParams only");
|
|
71
|
+
}
|
|
72
|
+
return this.#decimals;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public get updatable(): boolean {
|
|
76
|
+
if (this.#updatable === undefined) {
|
|
77
|
+
throw new Error("price feed has been initialized with BaseParams only");
|
|
78
|
+
}
|
|
79
|
+
return this.#updatable;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public get skipCheck(): boolean {
|
|
83
|
+
if (this.#skipCheck === undefined) {
|
|
84
|
+
throw new Error("price feed has been initialized with BaseParams only");
|
|
85
|
+
}
|
|
86
|
+
return this.#skipCheck;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public get underlyingPriceFeeds(): readonly PriceFeedRef[] {
|
|
90
|
+
if (!this.#underlyingPriceFeeds) {
|
|
91
|
+
throw new Error("price feed has been initialized with BaseParams only");
|
|
92
|
+
}
|
|
93
|
+
return this.#underlyingPriceFeeds;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
public get priceFeedType(): PriceFeedContractType {
|
|
97
|
+
return this.contractType as PriceFeedContractType;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public override stateHuman(
|
|
101
|
+
raw = true,
|
|
102
|
+
): UnionOmit<PriceFeedStateHuman, "stalenessPeriod"> {
|
|
103
|
+
return {
|
|
104
|
+
...super.stateHuman(raw),
|
|
105
|
+
description: this.description,
|
|
106
|
+
contractType: this.priceFeedType,
|
|
107
|
+
skipCheck: this.skipCheck,
|
|
108
|
+
pricefeeds: this.underlyingPriceFeeds.map(f => f.stateHuman(raw)),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async currentLowerBound(): Promise<bigint> {
|
|
113
|
+
return await this.sdk.provider.publicClient.readContract({
|
|
114
|
+
abi: ilpPriceFeedAbi,
|
|
115
|
+
address: this.address,
|
|
116
|
+
functionName: "lowerBound",
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
async answer(overrides?: { blockNumber?: bigint }): Promise<bigint> {
|
|
121
|
+
const lastRoundData = await this.sdk.provider.publicClient.readContract({
|
|
122
|
+
abi: ilpPriceFeedAbi,
|
|
123
|
+
address: this.address,
|
|
124
|
+
functionName: "latestRoundData",
|
|
125
|
+
...overrides,
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
return lastRoundData[1];
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
public updatableDependencies(): IPriceFeedContract[] {
|
|
132
|
+
const underlying = this.underlyingPriceFeeds.flatMap(f =>
|
|
133
|
+
f.priceFeed.updatableDependencies(),
|
|
134
|
+
);
|
|
135
|
+
return this.updatable ? [this, ...underlying] : underlying;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { bptStablePriceFeedAbi, iBalancerStablePoolAbi } from "../../abi";
|
|
2
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
3
|
+
import { AbstractLPPriceFeedContract } from "./AbstractLPPriceFeed";
|
|
4
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
5
|
+
|
|
6
|
+
type abi = typeof bptStablePriceFeedAbi;
|
|
7
|
+
|
|
8
|
+
export class BalancerStablePriceFeedContract extends AbstractLPPriceFeedContract<abi> {
|
|
9
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
10
|
+
super(sdk, {
|
|
11
|
+
...args,
|
|
12
|
+
name: "BalancerStablePriceFeed",
|
|
13
|
+
abi: bptStablePriceFeedAbi,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public override async getValue(): Promise<bigint> {
|
|
18
|
+
return await this.sdk.provider.publicClient.readContract({
|
|
19
|
+
abi: iBalancerStablePoolAbi,
|
|
20
|
+
address: this.lpContract,
|
|
21
|
+
functionName: "getRate",
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { Address, Hex, UnionOmit } from "viem";
|
|
2
|
+
import { decodeAbiParameters, hexToBytes } from "viem";
|
|
3
|
+
|
|
4
|
+
import { bptWeightedPriceFeedAbi, iBalancerWeightedPoolAbi } from "../../abi";
|
|
5
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
6
|
+
import type { BalancerWeightedPriceFeedStateHuman } from "../../types/state-human";
|
|
7
|
+
import { AbstractLPPriceFeedContract } from "./AbstractLPPriceFeed";
|
|
8
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
9
|
+
|
|
10
|
+
type abi = typeof bptWeightedPriceFeedAbi;
|
|
11
|
+
|
|
12
|
+
export class BalancerWeightedPriceFeedContract extends AbstractLPPriceFeedContract<abi> {
|
|
13
|
+
public readonly vault: Address;
|
|
14
|
+
public readonly poolId: Hex;
|
|
15
|
+
public readonly weights: readonly [
|
|
16
|
+
bigint,
|
|
17
|
+
bigint,
|
|
18
|
+
bigint,
|
|
19
|
+
bigint,
|
|
20
|
+
bigint,
|
|
21
|
+
bigint,
|
|
22
|
+
bigint,
|
|
23
|
+
bigint,
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
27
|
+
const decoded = decodeAbiParameters(
|
|
28
|
+
[
|
|
29
|
+
{ type: "bytes", name: "superParams" },
|
|
30
|
+
{ type: "address", name: "vault" },
|
|
31
|
+
{ type: "bytes32", name: "poolId" },
|
|
32
|
+
{ type: "uint256[8]", name: "weights" },
|
|
33
|
+
],
|
|
34
|
+
hexToBytes(args.baseParams.serializedParams),
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
super(sdk, {
|
|
38
|
+
...args,
|
|
39
|
+
baseParams: {
|
|
40
|
+
...args.baseParams,
|
|
41
|
+
serializedParams: decoded[0],
|
|
42
|
+
},
|
|
43
|
+
name: "BalancerWeighedPriceFeed",
|
|
44
|
+
abi: bptWeightedPriceFeedAbi,
|
|
45
|
+
});
|
|
46
|
+
this.vault = decoded[1];
|
|
47
|
+
this.poolId = decoded[2];
|
|
48
|
+
this.weights = decoded[3];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public override async getValue(): Promise<bigint> {
|
|
52
|
+
return await this.sdk.provider.publicClient.readContract({
|
|
53
|
+
abi: iBalancerWeightedPoolAbi,
|
|
54
|
+
address: this.lpContract,
|
|
55
|
+
functionName: "getRate",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public override stateHuman(
|
|
60
|
+
raw?: boolean,
|
|
61
|
+
): UnionOmit<BalancerWeightedPriceFeedStateHuman, "stalenessPeriod"> {
|
|
62
|
+
return {
|
|
63
|
+
...super.stateHuman(raw),
|
|
64
|
+
contractType: "PRICE_FEED::BALANCER_WEIGHTED",
|
|
65
|
+
vault: this.vault,
|
|
66
|
+
poolId: this.poolId,
|
|
67
|
+
weights: [...this.weights],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { decodeAbiParameters } from "viem";
|
|
2
|
+
|
|
3
|
+
import { boundedPriceFeedAbi } from "../../abi";
|
|
4
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
5
|
+
import type { BoundedOracleStateHuman } from "../../types";
|
|
6
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
7
|
+
import { AbstractPriceFeedContract } from "./AbstractPriceFeed";
|
|
8
|
+
|
|
9
|
+
type abi = typeof boundedPriceFeedAbi;
|
|
10
|
+
|
|
11
|
+
export class BoundedPriceFeedContract extends AbstractPriceFeedContract<abi> {
|
|
12
|
+
public readonly upperBound: bigint;
|
|
13
|
+
|
|
14
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
15
|
+
super(sdk, { ...args, name: "BoundedPriceFeed", abi: boundedPriceFeedAbi });
|
|
16
|
+
const decoder = decodeAbiParameters(
|
|
17
|
+
[
|
|
18
|
+
{ type: "int256" }, // upperBound
|
|
19
|
+
],
|
|
20
|
+
args.baseParams.serializedParams,
|
|
21
|
+
);
|
|
22
|
+
this.upperBound = decoder[0];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public override stateHuman(
|
|
26
|
+
raw = true,
|
|
27
|
+
): Omit<BoundedOracleStateHuman, "stalenessPeriod"> {
|
|
28
|
+
return {
|
|
29
|
+
...super.stateHuman(raw),
|
|
30
|
+
contractType: "PRICE_FEED::BOUNDED",
|
|
31
|
+
upperBound: this.upperBound,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { chainlinkReadableAggregatorAbi } from "../../abi";
|
|
2
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
3
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
4
|
+
import { AbstractPriceFeedContract } from "./AbstractPriceFeed";
|
|
5
|
+
|
|
6
|
+
type abi = typeof chainlinkReadableAggregatorAbi;
|
|
7
|
+
|
|
8
|
+
export class ChainlinkPriceFeedContract extends AbstractPriceFeedContract<abi> {
|
|
9
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
10
|
+
super(sdk, {
|
|
11
|
+
...args,
|
|
12
|
+
name: "ChainlinkPriceFeed",
|
|
13
|
+
abi: chainlinkReadableAggregatorAbi,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { compositePriceFeedAbi } from "../../abi";
|
|
2
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
3
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
4
|
+
import { AbstractPriceFeedContract } from "./AbstractPriceFeed";
|
|
5
|
+
import type { PriceFeedRef } from "./PriceFeedRef";
|
|
6
|
+
|
|
7
|
+
type abi = typeof compositePriceFeedAbi;
|
|
8
|
+
|
|
9
|
+
export class CompositePriceFeedContract extends AbstractPriceFeedContract<abi> {
|
|
10
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
11
|
+
super(sdk, {
|
|
12
|
+
...args,
|
|
13
|
+
name: "CompositePriceFeed",
|
|
14
|
+
abi: compositePriceFeedAbi,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public get targetToBasePriceFeed(): PriceFeedRef {
|
|
19
|
+
return this.underlyingPriceFeeds[0];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public get baseToUsdPriceFeed(): PriceFeedRef {
|
|
23
|
+
return this.underlyingPriceFeeds[1];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { curveCryptoLpPriceFeedAbi, iCurvePoolAbi } from "../../abi";
|
|
2
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
3
|
+
import { AbstractLPPriceFeedContract } from "./AbstractLPPriceFeed";
|
|
4
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
5
|
+
|
|
6
|
+
type abi = typeof curveCryptoLpPriceFeedAbi;
|
|
7
|
+
|
|
8
|
+
export class CurveCryptoPriceFeedContract extends AbstractLPPriceFeedContract<abi> {
|
|
9
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
10
|
+
super(sdk, {
|
|
11
|
+
...args,
|
|
12
|
+
name: "CurveCryptoPriceFeed",
|
|
13
|
+
abi: curveCryptoLpPriceFeedAbi,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public override async getValue(): Promise<bigint> {
|
|
18
|
+
return await this.sdk.provider.publicClient.readContract({
|
|
19
|
+
abi: iCurvePoolAbi,
|
|
20
|
+
address: this.lpContract,
|
|
21
|
+
functionName: "get_virtual_price",
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { curveStableLpPriceFeedAbi, iCurvePoolAbi } from "../../abi";
|
|
2
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
3
|
+
import { AbstractLPPriceFeedContract } from "./AbstractLPPriceFeed";
|
|
4
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
5
|
+
|
|
6
|
+
type abi = typeof curveStableLpPriceFeedAbi;
|
|
7
|
+
|
|
8
|
+
export class CurveStablePriceFeedContract extends AbstractLPPriceFeedContract<abi> {
|
|
9
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
10
|
+
super(sdk, {
|
|
11
|
+
...args,
|
|
12
|
+
name: "CurveStablePriceFeed",
|
|
13
|
+
abi: curveStableLpPriceFeedAbi,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public override async getValue(): Promise<bigint> {
|
|
18
|
+
return await this.sdk.provider.publicClient.readContract({
|
|
19
|
+
abi: iCurvePoolAbi,
|
|
20
|
+
address: this.lpContract,
|
|
21
|
+
functionName: "get_virtual_price",
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { curveUsdPriceFeedAbi, iCurvePoolAbi } from "../../abi";
|
|
2
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
3
|
+
import { AbstractLPPriceFeedContract } from "./AbstractLPPriceFeed";
|
|
4
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
5
|
+
|
|
6
|
+
type abi = typeof curveUsdPriceFeedAbi;
|
|
7
|
+
|
|
8
|
+
export class CurveUSDPriceFeedContract extends AbstractLPPriceFeedContract<abi> {
|
|
9
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
10
|
+
super(sdk, {
|
|
11
|
+
...args,
|
|
12
|
+
name: "CurveUSDPriceFeed",
|
|
13
|
+
abi: curveUsdPriceFeedAbi,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public override async getValue(): Promise<bigint> {
|
|
18
|
+
return await this.sdk.provider.publicClient.readContract({
|
|
19
|
+
abi: iCurvePoolAbi,
|
|
20
|
+
address: this.lpContract,
|
|
21
|
+
functionName: "get_virtual_price",
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { erc4626Abi } from "viem";
|
|
2
|
+
|
|
3
|
+
import { ierc20Abi } from "../../../abi/iERC20";
|
|
4
|
+
import { erc4626PriceFeedAbi } from "../../abi";
|
|
5
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
6
|
+
import { AbstractLPPriceFeedContract } from "./AbstractLPPriceFeed";
|
|
7
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
8
|
+
|
|
9
|
+
type abi = typeof erc4626PriceFeedAbi;
|
|
10
|
+
|
|
11
|
+
export class Erc4626PriceFeedContract extends AbstractLPPriceFeedContract<abi> {
|
|
12
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
13
|
+
super(sdk, {
|
|
14
|
+
...args,
|
|
15
|
+
name: "ERC4626PriceFeed",
|
|
16
|
+
abi: erc4626PriceFeedAbi,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public override async getValue(): Promise<bigint> {
|
|
21
|
+
const decimals = await this.sdk.provider.publicClient.readContract({
|
|
22
|
+
abi: ierc20Abi,
|
|
23
|
+
address: this.lpContract,
|
|
24
|
+
functionName: "decimals",
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const price = await this.sdk.provider.publicClient.readContract({
|
|
28
|
+
abi: erc4626Abi,
|
|
29
|
+
address: this.lpContract,
|
|
30
|
+
functionName: "convertToAssets",
|
|
31
|
+
args: [10n ** BigInt(decimals)],
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
return price;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { iMellowVaultAbi, mellowLrtPriceFeedAbi } from "../../abi";
|
|
2
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
3
|
+
import { AbstractLPPriceFeedContract } from "./AbstractLPPriceFeed";
|
|
4
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
5
|
+
|
|
6
|
+
type abi = typeof mellowLrtPriceFeedAbi;
|
|
7
|
+
|
|
8
|
+
export class MellowLRTPriceFeedContract extends AbstractLPPriceFeedContract<abi> {
|
|
9
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
10
|
+
super(sdk, {
|
|
11
|
+
...args,
|
|
12
|
+
name: "MellowLRTPriceFeed",
|
|
13
|
+
abi: mellowLrtPriceFeedAbi,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public override async getValue(): Promise<bigint> {
|
|
18
|
+
const stack = await this.sdk.provider.publicClient.readContract({
|
|
19
|
+
abi: iMellowVaultAbi,
|
|
20
|
+
address: this.lpContract,
|
|
21
|
+
functionName: "calculateStack",
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
return (stack.totalValue * BigInt(1e18)) / stack.totalSupply;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
import { decodeAbiParameters } from "viem";
|
|
3
|
+
|
|
4
|
+
import { pendleTWAPPTPriceFeedAbi } from "../../abi";
|
|
5
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
6
|
+
import type { PartialPriceFeedTreeNode } from "./AbstractPriceFeed";
|
|
7
|
+
import { AbstractPriceFeedContract } from "./AbstractPriceFeed";
|
|
8
|
+
|
|
9
|
+
const abi = pendleTWAPPTPriceFeedAbi;
|
|
10
|
+
type abi = typeof abi;
|
|
11
|
+
|
|
12
|
+
export class PendleTWAPPTPriceFeed extends AbstractPriceFeedContract<abi> {
|
|
13
|
+
public readonly market: Address;
|
|
14
|
+
public readonly sy: Address;
|
|
15
|
+
public readonly yt: Address;
|
|
16
|
+
public readonly expiry: bigint;
|
|
17
|
+
public readonly twapWindow: number;
|
|
18
|
+
public readonly priceToSy: boolean;
|
|
19
|
+
|
|
20
|
+
constructor(sdk: GearboxSDK, args: PartialPriceFeedTreeNode) {
|
|
21
|
+
super(sdk, {
|
|
22
|
+
...args,
|
|
23
|
+
name: "PendleTWAPPTPriceFeed",
|
|
24
|
+
abi,
|
|
25
|
+
});
|
|
26
|
+
const decoded = decodeAbiParameters(
|
|
27
|
+
[
|
|
28
|
+
{ type: "address", name: "market" },
|
|
29
|
+
{ type: "address", name: "sy" },
|
|
30
|
+
{ type: "address", name: "yt" },
|
|
31
|
+
{ type: "uint256", name: "expiry" },
|
|
32
|
+
{ type: "uint32", name: "twapWindow" },
|
|
33
|
+
{ type: "bool", name: "priceToSy" },
|
|
34
|
+
],
|
|
35
|
+
args.baseParams.serializedParams,
|
|
36
|
+
);
|
|
37
|
+
this.market = decoded[0];
|
|
38
|
+
this.sy = decoded[1];
|
|
39
|
+
this.yt = decoded[2];
|
|
40
|
+
this.expiry = decoded[3];
|
|
41
|
+
this.twapWindow = decoded[4];
|
|
42
|
+
this.priceToSy = decoded[5];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
import { SDKConstruct } from "../../base";
|
|
4
|
+
import type { GearboxSDK } from "../../GearboxSDK";
|
|
5
|
+
import type { PriceFeedStateHuman } from "../../types";
|
|
6
|
+
import { formatDuration } from "../../utils";
|
|
7
|
+
import type { IPriceFeedContract } from "./types";
|
|
8
|
+
|
|
9
|
+
export class PriceFeedRef extends SDKConstruct {
|
|
10
|
+
public readonly address: Address;
|
|
11
|
+
public readonly stalenessPeriod: number;
|
|
12
|
+
|
|
13
|
+
#priceFeed?: IPriceFeedContract;
|
|
14
|
+
|
|
15
|
+
constructor(sdk: GearboxSDK, address: Address, stalenessPeriod: number) {
|
|
16
|
+
super(sdk);
|
|
17
|
+
this.address = address;
|
|
18
|
+
this.stalenessPeriod = stalenessPeriod;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public get priceFeed(): IPriceFeedContract {
|
|
22
|
+
if (!this.#priceFeed) {
|
|
23
|
+
this.#priceFeed = this.sdk.priceFeeds.mustGet(this.address);
|
|
24
|
+
}
|
|
25
|
+
return this.#priceFeed;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public stateHuman(raw = true): PriceFeedStateHuman {
|
|
29
|
+
return {
|
|
30
|
+
...this.priceFeed.stateHuman(raw),
|
|
31
|
+
stalenessPeriod: formatDuration(this.stalenessPeriod),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|