import {
TokenStaticFactory,
MsgBroadcasterWithPk,
MsgSubmitProposalPerpetualMarketLaunch,
} from "@injectivelabs/sdk-ts/core/modules";
import { toChainFormat } from "@injectivelabs/utils";
import { TokenStaticFactory } from "@injectivelabs/sdk-ts/service";
import { MsgBroadcasterWithPk } from "@injectivelabs/sdk-ts/core/tx";
import { getNetworkEndpoints, Network } from "@injectivelabs/networks";
// https://github.com/InjectiveLabs/injective-lists 참조
import { tokens } from "../data/tokens.json";
const tokenStaticFactory = new TokenStaticFactory(tokens as TokenStatic[]);
const denom = "inj";
const privateKey = "0x...";
const injectiveAddress = "inj...";
const amount = toChainFormat(1).toFixed();
const market = {
title: "INJ/USDT Perpetual 마켓 런칭",
description:
"이 제안은 메이커 및 테이커 수수료가 각각 0.001%와 0.002%인 INJ/USDT Spot 마켓을 런칭합니다",
ticker: "INJ/USDT PERP",
quoteDenom: "peggy0x...",
oracleBase: "INJ",
oracleQuote: "USDT",
oracleScaleFactor: 6,
oracleType: 10, // BAND IBC
initialMarginRatio: "0.05",
maintenanceMarginRatio: "0.02",
makerFeeRate: "0.01",
takerFeeRate: "0.02",
minPriceTickSize: "0.01",
minQuantityTickSize: "0.01",
};
const quoteDenom = await tokenStaticFactory.toToken(market.quoteDenom);
const marketWithDecimals = {
...market,
quoteTokenDecimals: quoteDenom ? quoteDenom.decimals : 6,
};
const marketWithTickSizes = {
...market,
minPriceTickSize: toChainFormat(
marketWithDecimals.minPriceTickSize,
marketWithDecimals.quoteTokenDecimals
).toFixed(),
};
const message = MsgSubmitProposalPerpetualMarketLaunch.fromJSON({
market: marketWithTickSizes,
proposer: injectiveAddress,
deposit: {
denom,
amount,
},
});
const txHash = await new MsgBroadcasterWithPk({
privateKey,
network: Network.Testnet,
}).broadcast({
msgs: message,
});