@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 @@
|
|
|
1
|
+
export * from "./CreditAccountsService";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
import { NOT_DEPLOYED } from "../constants";
|
|
4
|
+
import { AddressMap } from "../utils";
|
|
5
|
+
import type { IAddressLabeller } from "./IAddressLabeller";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Helper class to be used during transition from v3 to v3.1
|
|
9
|
+
*/
|
|
10
|
+
export class AddressLabeller implements IAddressLabeller {
|
|
11
|
+
#labels = new AddressMap<string>(undefined, "addressLabeller");
|
|
12
|
+
|
|
13
|
+
public set(
|
|
14
|
+
address: Address,
|
|
15
|
+
label: string | ((oldLabel?: string) => string),
|
|
16
|
+
): void {
|
|
17
|
+
if (address === NOT_DEPLOYED) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (typeof label === "string") {
|
|
21
|
+
this.#labels.upsert(address, label);
|
|
22
|
+
} else {
|
|
23
|
+
this.#labels.upsert(address, label(this.#labels.get(address)));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public get(address: Address): string {
|
|
28
|
+
const label = this.#labels.get(address);
|
|
29
|
+
return label ? `${address} [${label}]` : address;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public get all(): Record<Address, string> {
|
|
33
|
+
return this.#labels.asRecord();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
Abi,
|
|
3
|
+
AbiFunction,
|
|
4
|
+
Address,
|
|
5
|
+
Client,
|
|
6
|
+
ContractEventName,
|
|
7
|
+
ContractFunctionName,
|
|
8
|
+
DecodeFunctionDataReturnType,
|
|
9
|
+
EncodeFunctionDataParameters,
|
|
10
|
+
GetContractReturnType,
|
|
11
|
+
Hex,
|
|
12
|
+
Log,
|
|
13
|
+
} from "viem";
|
|
14
|
+
import { decodeFunctionData, getContract, isHex } from "viem";
|
|
15
|
+
|
|
16
|
+
import { errorAbis } from "../../abi/errors";
|
|
17
|
+
import { iVersionAbi } from "../../abi/iVersion";
|
|
18
|
+
import { ADDRESS_0X0 } from "../constants";
|
|
19
|
+
import type { GearboxSDK } from "../GearboxSDK";
|
|
20
|
+
import type { BaseContractStateHuman, ILogger, RawTx } from "../types";
|
|
21
|
+
import {
|
|
22
|
+
bytes32ToString,
|
|
23
|
+
childLogger,
|
|
24
|
+
createRawTx,
|
|
25
|
+
json_stringify,
|
|
26
|
+
} from "../utils";
|
|
27
|
+
import type { IAddressLabeller } from "./IAddressLabeller";
|
|
28
|
+
import { SDKConstruct } from "./SDKConstruct";
|
|
29
|
+
|
|
30
|
+
export interface BaseContractOptions<abi extends Abi | readonly unknown[]> {
|
|
31
|
+
abi: abi;
|
|
32
|
+
addr: Address;
|
|
33
|
+
name?: string;
|
|
34
|
+
version?: number | bigint;
|
|
35
|
+
contractType?: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface IBaseContract {
|
|
39
|
+
address: Address;
|
|
40
|
+
contractType: string;
|
|
41
|
+
version: number;
|
|
42
|
+
name: string;
|
|
43
|
+
dirty: boolean;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export abstract class BaseContract<abi extends Abi | readonly unknown[]>
|
|
47
|
+
extends SDKConstruct
|
|
48
|
+
implements IBaseContract
|
|
49
|
+
{
|
|
50
|
+
public readonly contract: GetContractReturnType<
|
|
51
|
+
abi,
|
|
52
|
+
{ public: Client },
|
|
53
|
+
Address
|
|
54
|
+
>;
|
|
55
|
+
public readonly abi: abi;
|
|
56
|
+
public readonly logger?: ILogger;
|
|
57
|
+
public readonly contractType: string;
|
|
58
|
+
public version: number;
|
|
59
|
+
|
|
60
|
+
#name: string;
|
|
61
|
+
#address: Address;
|
|
62
|
+
|
|
63
|
+
constructor(sdk: GearboxSDK, args: BaseContractOptions<abi>) {
|
|
64
|
+
super(sdk);
|
|
65
|
+
this.abi = args.abi;
|
|
66
|
+
this.#address = args.addr;
|
|
67
|
+
|
|
68
|
+
this.contract = getContract({
|
|
69
|
+
address: this.address,
|
|
70
|
+
// add exceptions for better error decoding
|
|
71
|
+
abi: [...this.abi, ...errorAbis],
|
|
72
|
+
client: {
|
|
73
|
+
public: sdk.provider.publicClient,
|
|
74
|
+
},
|
|
75
|
+
}) as any;
|
|
76
|
+
this.version = Number(args.version || 0);
|
|
77
|
+
this.contractType = args.contractType ?? "";
|
|
78
|
+
if (isHex(this.contractType)) {
|
|
79
|
+
this.contractType = bytes32ToString(this.contractType);
|
|
80
|
+
}
|
|
81
|
+
this.name = this.#name = args.name || this.contractType || this.#address;
|
|
82
|
+
this.logger = childLogger(this.name, sdk.logger);
|
|
83
|
+
|
|
84
|
+
// register contract by address: this is used for system-wide call parsing
|
|
85
|
+
sdk.contracts.upsert(this.address, this);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public get address(): Address {
|
|
89
|
+
return this.#address;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public set address(address: Address) {
|
|
93
|
+
if (this.#address !== ADDRESS_0X0) {
|
|
94
|
+
throw new Error(`Address can't be changed, currently: ${this.#address}`);
|
|
95
|
+
}
|
|
96
|
+
this.#address = address;
|
|
97
|
+
this.addressLabels.set(address, this.#name);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public test_setAddress(address: Address) {
|
|
101
|
+
this.#address = address;
|
|
102
|
+
this.addressLabels.set(address, this.#name);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public get name(): string {
|
|
106
|
+
return this.#name;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
public set name(name: string) {
|
|
110
|
+
this.#name = name;
|
|
111
|
+
if (this.#address !== ADDRESS_0X0) {
|
|
112
|
+
this.addressLabels.set(this.#address, name);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// TODO: unused
|
|
117
|
+
public stateHuman(_ = true): BaseContractStateHuman {
|
|
118
|
+
return {
|
|
119
|
+
address: this.sdk.provider.addressLabels.get(this.address),
|
|
120
|
+
version: this.version,
|
|
121
|
+
contractType: this.contractType,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Updates (or not) contract's internal state from event
|
|
127
|
+
* @param _log
|
|
128
|
+
*/
|
|
129
|
+
public processLog(
|
|
130
|
+
_log: Log<
|
|
131
|
+
bigint,
|
|
132
|
+
number,
|
|
133
|
+
false,
|
|
134
|
+
undefined,
|
|
135
|
+
undefined,
|
|
136
|
+
abi,
|
|
137
|
+
ContractEventName<abi>
|
|
138
|
+
>,
|
|
139
|
+
): void {}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Converts contract calldata to some human-friendly string
|
|
143
|
+
* @param calldata
|
|
144
|
+
* @returns
|
|
145
|
+
*/
|
|
146
|
+
public parseFunctionData(calldata: Hex): string {
|
|
147
|
+
const decoded = decodeFunctionData({
|
|
148
|
+
abi: this.abi,
|
|
149
|
+
data: calldata,
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
const abiItem = (this.abi as Array<AbiFunction>).find(
|
|
153
|
+
abiItem =>
|
|
154
|
+
abiItem!.name === decoded.functionName && abiItem!.type === "function",
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
if (!abiItem) {
|
|
158
|
+
return `Unknown function: ${decoded.functionName}`;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
let paramsHuman: Array<string>;
|
|
162
|
+
let humanParams = this.parseFunctionParams(decoded);
|
|
163
|
+
if (humanParams) {
|
|
164
|
+
paramsHuman = humanParams.map((value, i) => {
|
|
165
|
+
return `${abiItem.inputs[i].name}: ${value}`;
|
|
166
|
+
});
|
|
167
|
+
} else if (Array.isArray(decoded.args)) {
|
|
168
|
+
paramsHuman = decoded.args.map((value, i) => {
|
|
169
|
+
return `${abiItem.inputs[i].name}: ${abiItem.inputs[i].type === "address" ? this.addressLabels.get(value) : abiItem.inputs[i].type.startsWith("tuple") ? json_stringify(value) : value}`;
|
|
170
|
+
});
|
|
171
|
+
} else {
|
|
172
|
+
paramsHuman = Object.entries(decoded.args || {}).map(
|
|
173
|
+
([key, value]) => `${key}: ${value}`,
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return `${this.name}.${decoded.functionName}({${paramsHuman.join(", ")}})`;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Return args and function name from calldata
|
|
182
|
+
* @param calldata
|
|
183
|
+
* @returns
|
|
184
|
+
*/
|
|
185
|
+
public parseFunctionDataToObject(calldata: Hex) {
|
|
186
|
+
const decoded = decodeFunctionData({
|
|
187
|
+
abi: this.abi,
|
|
188
|
+
data: calldata,
|
|
189
|
+
});
|
|
190
|
+
return decoded;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
public parseFunctionParams(
|
|
194
|
+
_params: DecodeFunctionDataReturnType<abi>,
|
|
195
|
+
): Array<string> | undefined {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
public async getVersion(): Promise<number> {
|
|
200
|
+
this.version = Number(
|
|
201
|
+
await this.sdk.provider.publicClient.readContract({
|
|
202
|
+
abi: iVersionAbi,
|
|
203
|
+
functionName: "version",
|
|
204
|
+
address: this.address,
|
|
205
|
+
}),
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
return this.version;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
public createRawTx<
|
|
212
|
+
functionName extends ContractFunctionName<abi> | undefined = undefined,
|
|
213
|
+
>(
|
|
214
|
+
parameters: Omit<EncodeFunctionDataParameters<abi, functionName>, "abi"> & {
|
|
215
|
+
description?: string;
|
|
216
|
+
},
|
|
217
|
+
): RawTx {
|
|
218
|
+
const { description: argsDescription } = parameters;
|
|
219
|
+
|
|
220
|
+
const tx = createRawTx<abi, functionName>(
|
|
221
|
+
this.address,
|
|
222
|
+
{
|
|
223
|
+
...parameters,
|
|
224
|
+
abi: this.abi,
|
|
225
|
+
} as EncodeFunctionDataParameters<abi, functionName>,
|
|
226
|
+
argsDescription,
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
tx.description = argsDescription || this.parseFunctionData(tx.callData); // `${this.name}.${parameters.functionName}(${argsDescription || (args && args.length > 0) ? args!.join(", ") : ""})`;
|
|
230
|
+
|
|
231
|
+
return tx;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
protected get addressLabels(): IAddressLabeller {
|
|
235
|
+
return this.sdk.provider.addressLabels;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Helper interface to ease v3.1 refactoring and migration from static methods
|
|
5
|
+
*/
|
|
6
|
+
export interface IAddressLabeller {
|
|
7
|
+
set: (
|
|
8
|
+
address: Address,
|
|
9
|
+
label: string | ((oldLabel?: string) => string),
|
|
10
|
+
) => void;
|
|
11
|
+
get: (address: Address) => string;
|
|
12
|
+
all: Record<Address, string>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { GearboxSDK } from "../GearboxSDK";
|
|
2
|
+
import type { BaseContractOptions } from "./BaseContract";
|
|
3
|
+
import { BaseContract } from "./BaseContract";
|
|
4
|
+
|
|
5
|
+
const abi = [] as unknown[];
|
|
6
|
+
type abi = typeof abi;
|
|
7
|
+
|
|
8
|
+
export class PlaceholderContract extends BaseContract<abi> {
|
|
9
|
+
constructor(sdk: GearboxSDK, args: Omit<BaseContractOptions<abi>, "abi">) {
|
|
10
|
+
super(sdk, { ...args, abi });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
import type { Provider } from "../chain";
|
|
4
|
+
import type { GearboxSDK } from "../GearboxSDK";
|
|
5
|
+
|
|
6
|
+
export class SDKConstruct {
|
|
7
|
+
public readonly sdk: GearboxSDK;
|
|
8
|
+
/**
|
|
9
|
+
* Indicates that contract state needs to be updated
|
|
10
|
+
*/
|
|
11
|
+
#dirty = false;
|
|
12
|
+
|
|
13
|
+
constructor(sdk: GearboxSDK) {
|
|
14
|
+
this.sdk = sdk;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public get provider(): Provider {
|
|
18
|
+
return this.sdk.provider;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Indicates that contract state needs to be updated
|
|
23
|
+
*/
|
|
24
|
+
public get dirty(): boolean {
|
|
25
|
+
return this.#dirty;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
protected set dirty(value: boolean) {
|
|
29
|
+
this.#dirty = value;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
protected labelAddress(address: Address): string {
|
|
33
|
+
return this.provider.addressLabels.get(address);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
import type { Asset } from "../router";
|
|
4
|
+
import { AddressMap, formatBN } from "../utils";
|
|
5
|
+
import type { TokenMetaData } from "./types";
|
|
6
|
+
|
|
7
|
+
export class TokensMeta extends AddressMap<TokenMetaData> {
|
|
8
|
+
public symbol(token: Address): string {
|
|
9
|
+
return this.mustGet(token).symbol;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public decimals(token: Address): number {
|
|
13
|
+
return this.mustGet(token).decimals;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public formatBN(asset: Asset, precision?: number): string;
|
|
17
|
+
public formatBN(
|
|
18
|
+
token: Address,
|
|
19
|
+
amount: number | bigint | string | undefined,
|
|
20
|
+
precision?: number,
|
|
21
|
+
): string;
|
|
22
|
+
public formatBN(
|
|
23
|
+
arg0: Asset | Address,
|
|
24
|
+
arg1: number | bigint | string | undefined,
|
|
25
|
+
arg2?: number,
|
|
26
|
+
): string {
|
|
27
|
+
const token = typeof arg0 === "object" ? arg0.token : arg0;
|
|
28
|
+
const amount = typeof arg0 === "object" ? arg0.balance : arg1;
|
|
29
|
+
const precision =
|
|
30
|
+
typeof arg0 === "object" ? (arg1 as number | undefined) : arg2;
|
|
31
|
+
return formatBN(amount, this.decimals(token), precision);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public findBySymbol(symbol: string): TokenMetaData | undefined {
|
|
35
|
+
return this.values().find(v => v.symbol === symbol);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public mustFindBySymbol(symbol: string): TokenMetaData {
|
|
39
|
+
const meta = this.findBySymbol(symbol);
|
|
40
|
+
if (!meta) {
|
|
41
|
+
throw new Error(`cannot find token meta for symbol '${symbol}'`);
|
|
42
|
+
}
|
|
43
|
+
return meta;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AbiParametersToPrimitiveTypes,
|
|
3
|
+
ExtractAbiFunction,
|
|
4
|
+
} from "abitype";
|
|
5
|
+
import type { Address, Hex } from "viem";
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
iCreditAccountCompressorAbi,
|
|
9
|
+
iGaugeCompressorAbi,
|
|
10
|
+
iMarketCompressorAbi,
|
|
11
|
+
iPeripheryCompressorAbi,
|
|
12
|
+
iRewardsCompressorAbi,
|
|
13
|
+
} from "../../abi/compressors";
|
|
14
|
+
|
|
15
|
+
export type Unarray<A> = A extends readonly unknown[] ? Unarray<A[number]> : A;
|
|
16
|
+
|
|
17
|
+
export interface BaseParams {
|
|
18
|
+
addr: Address;
|
|
19
|
+
version: bigint;
|
|
20
|
+
contractType: Hex;
|
|
21
|
+
serializedParams: Hex;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface BaseState {
|
|
25
|
+
baseParams: BaseParams;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type MarketFilter = AbiParametersToPrimitiveTypes<
|
|
29
|
+
ExtractAbiFunction<typeof iMarketCompressorAbi, "getMarkets">["inputs"]
|
|
30
|
+
>[0];
|
|
31
|
+
|
|
32
|
+
export type CreditAccountData = Unarray<
|
|
33
|
+
AbiParametersToPrimitiveTypes<
|
|
34
|
+
ExtractAbiFunction<
|
|
35
|
+
typeof iCreditAccountCompressorAbi,
|
|
36
|
+
"getCreditAccountData"
|
|
37
|
+
>["outputs"]
|
|
38
|
+
>
|
|
39
|
+
>;
|
|
40
|
+
|
|
41
|
+
export type RewardInfo = Unarray<
|
|
42
|
+
AbiParametersToPrimitiveTypes<
|
|
43
|
+
ExtractAbiFunction<typeof iRewardsCompressorAbi, "getRewards">["outputs"]
|
|
44
|
+
>
|
|
45
|
+
>;
|
|
46
|
+
|
|
47
|
+
export type MarketData = Unarray<
|
|
48
|
+
AbiParametersToPrimitiveTypes<
|
|
49
|
+
ExtractAbiFunction<typeof iMarketCompressorAbi, "getMarkets">["outputs"]
|
|
50
|
+
>
|
|
51
|
+
>;
|
|
52
|
+
|
|
53
|
+
export type ZapperData = Unarray<
|
|
54
|
+
AbiParametersToPrimitiveTypes<
|
|
55
|
+
ExtractAbiFunction<typeof iPeripheryCompressorAbi, "getZappers">["outputs"]
|
|
56
|
+
>
|
|
57
|
+
>;
|
|
58
|
+
|
|
59
|
+
export type GaugeData = Unarray<
|
|
60
|
+
AbiParametersToPrimitiveTypes<
|
|
61
|
+
ExtractAbiFunction<typeof iGaugeCompressorAbi, "getGauge">["outputs"]
|
|
62
|
+
>
|
|
63
|
+
>;
|
|
64
|
+
|
|
65
|
+
export type ConnectedBotData = Unarray<
|
|
66
|
+
AbiParametersToPrimitiveTypes<
|
|
67
|
+
ExtractAbiFunction<
|
|
68
|
+
typeof iPeripheryCompressorAbi,
|
|
69
|
+
"getConnectedBots"
|
|
70
|
+
>["outputs"]
|
|
71
|
+
>
|
|
72
|
+
>;
|
|
73
|
+
|
|
74
|
+
export type BotData = Unarray<
|
|
75
|
+
AbiParametersToPrimitiveTypes<
|
|
76
|
+
ExtractAbiFunction<typeof iPeripheryCompressorAbi, "getBots">["outputs"]
|
|
77
|
+
>
|
|
78
|
+
>;
|
|
79
|
+
|
|
80
|
+
export type CreditManagerData = Unarray<MarketData["creditManagers"]>;
|
|
81
|
+
|
|
82
|
+
export type CreditManagerState = CreditManagerData["creditManager"];
|
|
83
|
+
export type CreditFacadeState = CreditManagerData["creditFacade"];
|
|
84
|
+
export type CreditConfiguratorState = CreditManagerData["creditConfigurator"];
|
|
85
|
+
export type AdapterData = Unarray<CreditManagerData["adapters"]>;
|
|
86
|
+
export type TokenMetaData = Unarray<MarketData["tokens"]>;
|
|
87
|
+
export type PoolData = MarketData["pool"];
|
|
88
|
+
export type PoolQuotaKeeperData = MarketData["poolQuotaKeeper"];
|
|
89
|
+
export type QuotaState = Unarray<PoolQuotaKeeperData["quotas"]>;
|
|
90
|
+
export type RateKeeperData = MarketData["rateKeeper"];
|
|
91
|
+
export type PriceOracleData = MarketData["priceOracleData"];
|
|
92
|
+
export type PriceFeedMapEntry = Unarray<PriceOracleData["priceFeedMapping"]>;
|
|
93
|
+
export type PriceFeedTreeNode = Unarray<PriceOracleData["priceFeedStructure"]>;
|
|
94
|
+
export type CreditManagerDebtParams = Unarray<
|
|
95
|
+
PoolData["creditManagerDebtParams"]
|
|
96
|
+
>;
|
|
97
|
+
|
|
98
|
+
export enum VotingContractStatus {
|
|
99
|
+
NOT_ALLOWED = 0,
|
|
100
|
+
ALLOWED = 1,
|
|
101
|
+
UNVOTE_ONLY = 2,
|
|
102
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type Address, parseAbi } from "viem";
|
|
2
|
+
|
|
3
|
+
import { SDKConstruct } from "../base";
|
|
4
|
+
import type { BotBaseType, BotDataPayload, BotDetailedType } from "./utils";
|
|
5
|
+
|
|
6
|
+
export type BotAddresses = Partial<Record<BotDetailedType, Address>>;
|
|
7
|
+
|
|
8
|
+
const iPartialLiquidationBotV3Abi = parseAbi([
|
|
9
|
+
"function minHealthFactor() external view returns (uint16)",
|
|
10
|
+
"function maxHealthFactor() external view returns (uint16)",
|
|
11
|
+
"function premiumScaleFactor() external view returns (uint16)",
|
|
12
|
+
"function feeScaleFactor() external view returns (uint16)",
|
|
13
|
+
]);
|
|
14
|
+
|
|
15
|
+
export class BotsService extends SDKConstruct {
|
|
16
|
+
/**
|
|
17
|
+
* Returns bots data payload
|
|
18
|
+
* @param addresses
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
public async getBotsData(addresses: BotAddresses) {
|
|
22
|
+
const addressesList = Object.entries(addresses) as Array<
|
|
23
|
+
[BotDetailedType, Address]
|
|
24
|
+
>;
|
|
25
|
+
|
|
26
|
+
const BOT_INFO_LENGTH = 4;
|
|
27
|
+
const infoResp = (await this.provider.publicClient.multicall({
|
|
28
|
+
allowFailure: false,
|
|
29
|
+
contracts: addressesList
|
|
30
|
+
.map(([, address]) => [
|
|
31
|
+
{
|
|
32
|
+
address,
|
|
33
|
+
abi: iPartialLiquidationBotV3Abi,
|
|
34
|
+
functionName: "minHealthFactor",
|
|
35
|
+
args: [],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
address,
|
|
39
|
+
abi: iPartialLiquidationBotV3Abi,
|
|
40
|
+
functionName: "maxHealthFactor",
|
|
41
|
+
args: [],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
address,
|
|
45
|
+
abi: iPartialLiquidationBotV3Abi,
|
|
46
|
+
functionName: "premiumScaleFactor",
|
|
47
|
+
args: [],
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
address,
|
|
51
|
+
abi: iPartialLiquidationBotV3Abi,
|
|
52
|
+
functionName: "feeScaleFactor",
|
|
53
|
+
args: [],
|
|
54
|
+
},
|
|
55
|
+
])
|
|
56
|
+
.flat(1),
|
|
57
|
+
})) as Array<number>;
|
|
58
|
+
|
|
59
|
+
const currentType: BotBaseType = "liquidationProtection";
|
|
60
|
+
const bots = addressesList.reduce<
|
|
61
|
+
Record<BotBaseType, Array<BotDataPayload>>
|
|
62
|
+
>(
|
|
63
|
+
(acc, [type, address], index) => {
|
|
64
|
+
const from = index * BOT_INFO_LENGTH;
|
|
65
|
+
const to = (index + 1) * BOT_INFO_LENGTH;
|
|
66
|
+
|
|
67
|
+
const [
|
|
68
|
+
minHealthFactor,
|
|
69
|
+
maxHealthFactor,
|
|
70
|
+
premiumScaleFactor,
|
|
71
|
+
feeScaleFactor,
|
|
72
|
+
] = infoResp.slice(from, to);
|
|
73
|
+
|
|
74
|
+
acc[currentType].push({
|
|
75
|
+
address,
|
|
76
|
+
baseType: currentType,
|
|
77
|
+
detailedType: type,
|
|
78
|
+
|
|
79
|
+
minHealthFactor,
|
|
80
|
+
maxHealthFactor,
|
|
81
|
+
premiumScaleFactor,
|
|
82
|
+
feeScaleFactor,
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
return acc;
|
|
86
|
+
},
|
|
87
|
+
{ liquidationProtection: [] },
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
return bots;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
|
|
3
|
+
export type BotBaseType = "liquidationProtection";
|
|
4
|
+
export type LiquidationBotType =
|
|
5
|
+
| "deleverageBotPegged"
|
|
6
|
+
| "deleverageBotLV"
|
|
7
|
+
| "deleverageBotHV";
|
|
8
|
+
|
|
9
|
+
export type BotDetailedType = LiquidationBotType;
|
|
10
|
+
|
|
11
|
+
export interface BotDataPayload {
|
|
12
|
+
baseType: BotBaseType;
|
|
13
|
+
detailedType: BotDetailedType;
|
|
14
|
+
address: Address;
|
|
15
|
+
minHealthFactor: number;
|
|
16
|
+
maxHealthFactor: number;
|
|
17
|
+
premiumScaleFactor: number;
|
|
18
|
+
feeScaleFactor: number;
|
|
19
|
+
}
|