@liq /核心
SDK基础-类型,枚举,EIP-712助手,链配置和Liq永久交换的合约地址。
概述
@liq/core 是所有Liq SDK包共享的零框架基础层。它提供了规范的EIP-712域和订单类型定义、包含每个支持网络的合约地址的链配置、订单/职位/账户的共享TypeScript类型和枚举,以及品牌数字原语(Price, Qty, Usd, Margin)在整个系统中使用。唯一的运行时依赖项是 zod.
主要出口
链配置
getChainConfig(chainId)——返回ChainConfig(contracts, rpcUrl, subgraphUrl)用于给定链IDgetContractAddress(chainId, contract)-单个合同地址的快捷方式ChainConfig-接口PerpsMarketProxy,SynthetixCoreProxy,PerpsAccountProxy,SpotMarketProxy,OracleManagerProxy,TrustedMulticallForwarder,USDC,sUSDC
支持连锁店: MegaETH Testnet (chainId 6343)
Контур生产передеплоен (0.67.0)
Prod-контур пересобран нуля 2026-10-09 (snx-omnibus-megaeth-production:3-dev): все адресав
liqChains[6343].production ,новыевключая PerpsMarketProxy ——это verifyingContract eip - 712。
Подписи ордеров под старым PerpsMarketProxy (0x330E5A38…) на новом контуре невалидны, окна
совместимостинет:клиентобязанобновитьсядо0.67.0вместесшлюзом。Id тоже другие: susdcMarketId
= 1 (было 3), perpsCoreMarketId = 3 (было 2);в collaterals 生产появился USDm
(getCollateral(chain, 'USDm')), как *分期。Старый контур продолжает отвечать на цепи теми же
рынками,поэтомуустаревшийадресвыглядитживымиломаетсятолькона«账户不拥有»или
несовпадении домена eip-712。
eip - 712
EIP712_ORDER_TYPES用于订单签名的类型数据模式EIP712_DOMAIN_NAME/EIP712_DOMAIN_VERSION- - - - - -"PerpExchange"/"1"buildEip712Domain(chainId, verifyingContract)-构建EIP-712域对象buildLimitOrderMessage(params)-建立一个签名限价订单有效载荷buildMarketOrderMessage(params)-建立一个已签署的市场订单有效载荷buildConditionalOrderMessage(params)-构建一个签名的TP/SL/停止订单负载ORDER_TYPE_INDEX-数字索引映射OrderType枚举值
类型(src/types/)
OrderType枚举,MARKET,LIMIT,STOP_MARKET,STOP_LIMIT,TAKE_PROFIT_MARKET,TAKE_PROFIT_LIMIT- 订单、位置、帐户、填充、市场和API类型跨SDK包共享
标记原语(src/primitives.ts)
Price,Qty,Usd,Margin,Bps——品牌bigint类型(18位小数)- 每个品牌:建设者,
.parse(str),.fmt(val),.zod模式,.mul()算术
价格(src/prices/)
REDSTONE_FEEDS- RedStone在MegaETH测试网的推送地址(chainId6343),按符号键RedStoneFeedSymbol-进料符号类型;的钥匙REDSTONE_FEEDSREDSTONE_DECIMALS-每个红石饲料的小数(8)isRedStoneFeedSymbol(value)-供料符号的类型保护redstoneFeedAddress(feedId)-输入地址Market.feedId符号,或undefined当未知
Скобки позиции - positionBrackets(position, conditional) (src/positions/)
С 0.65.0 принимает позицию ({ marketId, size }), не рынок。Скобка - условный减少-只ордер этого рынка
TRIGGER_PENDING настороне,закрывающейпозицию(удлинной——出售,укороткой-购买)。Нет позиции - нет скобок。
У каждой скобки size (подписанный размер, модулем effectiveSize = min(size, |position.size|) - столько она
закроет:движокурезаетreduce-onlyдопозиции,ипослечастичногозакрытияпоказыватьнадо effectiveSize.
reduceOnlyLegs(position, orders) (src/positions/reduce-only-legs.ts, [0.666.0] - шире positionBrackets:все
reduce-onlyордерапозицииназакрывающейстороне(TP / SLв TRIGGER_PENDING,отдыхающие LIMIT / STOP_LIMIT /
TAKE_PROFIT_LIMIT в PENDING / PARTIALLY_FILLED), каждого effectiveSize = min(остаток, |position.size|);
остаток- remainingSize, если его нет, то |sizeDelta|. Дубльпоid -первоевхождени,есвежийсписокпередают
первым。Резервсматченных,нонерассчитанныхордеровнеучитывается。
GatewayOrder.reduceOnly ——с0.65.0втипе。Список ордеров шлюз отдавал r колонкой r раньше;одиночный orders.get(id) - только шлюза 0.65.0。
describeOrderOutcome называет снятие скобки вместе r позицией: position_closed, position_flipped,
no_position,иотменуreduce-onlyлимитки,подкоторуюнеосталосьпозиции: reduce_only.
Маржа ордера * аккаунта (* 0.67.0)
validateOrder (src/order/validate.ts) судит доступность по требованию протокола。 Ломающееизменение: из
OrderVerdictInput ушли available и marginCost,пришли requiredMargin и free (Margin | undefined)。
requiredMargin ——поле requiredMargin предпросмотра маржи ордера (getOrderMarginPreview в @liq/onchain,
useOrderMarginPreview в @liq/react), free - - - - - - free шлюза(client.accounts.getMargin, useAccountMargin)。
Предупреждение exceeds-available-margin - когда оба известны requiredMargin > free;равенство не предупреждает。
Неизвестное- undefined, пока чтение не пришло; Margin(0n) вместо него не подставлять: 0n иотрицательный free
- известные значения, они предупреждают。Это предупреждение, не блок: requiredMargin не включает убыток филла
,хужемаркакоторыйворотапротоколасписываютсдоступноймаржи,такчто requiredMargin <= free необходимо, но не
достаточно;решаетшлюз。
const verdict = validateOrder({
markPrice,
sizeQty,
minSize,
leverage,
maxLeverage,
requiredMargin: preview?.requiredMargin,
free: margin === undefined ? undefined : Margin(margin.free),
});
marginUsage({ requiredInitialMargin, available }) (src/margin/usage.ts) - доля начального требования доступной
марже填料: getRequiredMargins(accountId)[0] (награда за ликвидацию уже внутри) на ончейн getAvailableMargin
(уже за вычетом долга)。Нулевое требование - 0n;положительноепри available <= 0n - - - - - - undefined (подводой)。
marginCost (src/order/math.ts) - - -калькуляторразмерадляслайдераплеча(名义/杠杆),анемаржа;
маржа ордера - requiredMargin предпросмотра。 draftLiquidationPrice - - - - - - @deprecated: * * кросс-позициями не
сходится;оценка- estimatedLiquidationPrice предпросмотраили accountMargin(...).liquidationPriceFor.
安装
pnpm add @liq/core
构建
moon run liq-core:build # tsup → dist/