Skip to content

Commit

Permalink
Merge pull request #334 from oraichain/feat/add-pepe-cat
Browse files Browse the repository at this point in the history
Feat/add pepe cat
  • Loading branch information
haunv3 authored Sep 24, 2024
2 parents 87032d5 + e1fab51 commit 325645f
Show file tree
Hide file tree
Showing 9 changed files with 276 additions and 131 deletions.
2 changes: 1 addition & 1 deletion packages/oraidex-common/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oraichain/oraidex-common",
"version": "1.1.8",
"version": "1.1.17",
"main": "build/index.js",
"files": [
"build/"
Expand Down
7 changes: 6 additions & 1 deletion packages/oraidex-common/src/constant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ export const USDT_BSC_CONTRACT = "0x55d398326f99059fF775485246999027B3197955";
export const WRAP_BNB_CONTRACT = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c";
export const KWT_BSC_CONTRACT = "0x257a8d1E03D17B8535a182301f15290F11674b53";
export const MILKY_BSC_CONTRACT = "0x6fE3d0F096FC932A905accd1EB1783F6e4cEc717";
export const PEPE_BSC_CONTRACT = "0x25d887Ce7a35172C62FeBFD67a1856F20FaEbB00";
export const CAT_BSC_CONTRACT = "0x6894CDe390a3f51155ea41Ed24a33A4827d3063D";
// tron contracts
export const USDT_TRON_CONTRACT = "0xa614f803B6FD780986A42c78Ec9c7f77e6DeD13C";
export const WRAP_TRON_TRX_CONTRACT = "0x891cdb91d149f23B1a45D9c5Ca78a88d0cB44C18";
Expand All @@ -67,7 +69,7 @@ export const KWT_DENOM = ORAI_BRIDGE_EVM_DENOM_PREFIX + KWT_BSC_CONTRACT;
export const MILKY_DENOM = ORAI_BRIDGE_EVM_DENOM_PREFIX + MILKY_BSC_CONTRACT;
export const USDT_ETH_CONTRACT = "0xdAC17F958D2ee523a2206206994597C13D831ec7";
export const ORAIX_ETH_CONTRACT = "0x2d869aE129e308F94Cc47E66eaefb448CEe0d03e";

export const PEPE_ETH_CONTRACT = "0x6982508145454Ce325dDbE47a25d4ec3d2311933";
// config for relayer
export const ATOM_ORAICHAIN_CHANNELS = "channel-301 channel-15";
// export const ATOM_ORAICHAIN_CHANNELS="channel-642 channel-124"
Expand Down Expand Up @@ -95,6 +97,9 @@ export const INJECTIVE_ORAICHAIN_DENOM = "ibc/49D820DFDE9F885D7081725A58202ABA2F
export const ORAIIBC_INJECTIVE_DENOM = "ibc/C20C0A822BD22B2CEF0D067400FCCFB6FAEEE9E91D360B4E0725BD522302D565";

export const TON_ORAICHAIN_DENOM = "factory/orai1wuvhex9xqs3r539mvc6mtm7n20fcj3qr2m0y9khx6n5vtlngfzes3k0rq9/ton";
export const PEPE_ORAICHAIN_EXT_DENOM =
"factory/orai1wuvhex9xqs3r539mvc6mtm7n20fcj3qr2m0y9khx6n5vtlngfzes3k0rq9/extPEPE";
export const CAT_ORAICHAIN_EXT_DENOM = "factory/orai1wuvhex9xqs3r539mvc6mtm7n20fcj3qr2m0y9khx6n5vtlngfzes3k0rq9/extCAT";

// config for oraichain token
export const AIRI_CONTRACT = "orai10ldgzued6zjp0mkqwsv2mux3ml50l97c74x8sg";
Expand Down
18 changes: 14 additions & 4 deletions packages/oraidex-common/src/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,10 +252,20 @@ export const getTokenOnSpecificChainId = (
return flattenTokens.find((t) => t.coinGeckoId === coingeckoId && t.chainId === chainId);
};

export const getTokenOnOraichain = (coingeckoId: CoinGeckoId, decimals?: number) => {
return oraichainTokens.find(
(token) => token.coinGeckoId === coingeckoId && token.decimals === (decimals || CW20_DECIMALS)
);
/**
* This function get token on oraichain from coingeckoId
* @param coingeckoId - coingeckoId of tokenInOraichain
* @param isNative - isNative token
* @returns token on oraichain
*/

export const getTokenOnOraichain = (coingeckoId: CoinGeckoId, isNative?: boolean) => {
const filterOraichainToken = oraichainTokens.filter((orai) => orai.coinGeckoId === coingeckoId);
if (!filterOraichainToken.length) return undefined;
if (filterOraichainToken.length === 1) return filterOraichainToken[0];

const oraichainToken = filterOraichainToken.find((token) => (isNative ? !token.evmDenoms : token.evmDenoms));
return oraichainToken;
};

export const parseTokenInfoRawDenom = (tokenInfo: TokenItemType) => {
Expand Down
82 changes: 80 additions & 2 deletions packages/oraidex-common/src/network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,12 @@ import {
ORAIDEX_BID_POOL_CONTRACT,
ORAIX_ETH_CONTRACT,
MIXED_ROUTER,
AMM_V3_CONTRACT
AMM_V3_CONTRACT,
PEPE_ORAICHAIN_EXT_DENOM as PEPE_ORAICHAIN_DENOM,
CAT_ORAICHAIN_EXT_DENOM as CAT_ORAICHAIN_DENOM,
PEPE_ETH_CONTRACT,
PEPE_BSC_CONTRACT,
CAT_BSC_CONTRACT
} from "./constant";
import { listOsmosisToken } from "./alpha-network";

Expand Down Expand Up @@ -113,7 +118,9 @@ export type CoinGeckoId =
| "neutaro"
| "och"
| "celestia"
| "the-open-network";
| "the-open-network"
| "pepe"
| "simon-s-cat";

export type NetworkType = "cosmos" | "evm";
export interface NetworkConfig {
Expand Down Expand Up @@ -317,6 +324,22 @@ export const oraichainNetwork: CustomChainInfo = {
},
currencies: [
OraiToken,
{
coinDenom: "PEPE",
coinGeckoId: "pepe",
coinMinimalDenom: PEPE_ORAICHAIN_DENOM,
bridgeTo: ["0x38", "0x01"],
coinDecimals: 6,
coinImageUrl: "https://assets.coingecko.com/coins/images/29850/standard/pepe-token.jpeg?1696528776"
},
// {
// coinDenom: "CAT",
// coinMinimalDenom: CAT_ORAICHAIN_DENOM,
// coinDecimals: 6,
// bridgeTo: ["0x38"],
// coinGeckoId: "simon-s-cat",
// coinImageUrl: "https://assets.coingecko.com/coins/images/39765/standard/Simon's_Cat_Logo.png?1724017505"
// },
{
coinDenom: "ATOM",
coinGeckoId: "cosmos",
Expand Down Expand Up @@ -637,7 +660,34 @@ export const chainInfos: CustomChainInfo[] = [
coinGeckoId: "oraidex",
prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX,
coinImageUrl: "https://i.ibb.co/VmMJtf7/oraix.png"
},
{
coinDenom: "PEPE",
coinMinimalDenom: ORAI_BRIDGE_EVM_DENOM_PREFIX + PEPE_BSC_CONTRACT,
bridgeNetworkIdentifier: "0x38",
coinDecimals: 18,
coinGeckoId: "pepe",
prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX,
coinImageUrl: "https://assets.coingecko.com/coins/images/29850/standard/pepe-token.jpeg?1696528776"
},
{
coinDenom: "PEPE",
coinMinimalDenom: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX + PEPE_ETH_CONTRACT,
bridgeNetworkIdentifier: "0x01",
coinDecimals: 18,
coinGeckoId: "pepe",
prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX,
coinImageUrl: "https://assets.coingecko.com/coins/images/29850/standard/pepe-token.jpeg?1696528776"
}
// {
// coinDenom: "CAT",
// coinMinimalDenom: ORAI_BRIDGE_EVM_DENOM_PREFIX + CAT_BSC_CONTRACT,
// bridgeNetworkIdentifier: "0x38",
// coinDecimals: 18,
// prefixToken: ORAI_BRIDGE_EVM_DENOM_PREFIX,
// coinGeckoId: "simon-s-cat",
// coinImageUrl: "https://assets.coingecko.com/coins/images/39765/standard/Simon's_Cat_Logo.png?1724017505"
// }
],
txExplorer: {
name: "OraiBridge Scan",
Expand Down Expand Up @@ -934,6 +984,16 @@ export const chainInfos: CustomChainInfo[] = [
coinGeckoId: "oraidex",
prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX,
coinImageUrl: "https://i.ibb.co/VmMJtf7/oraix.png"
},
{
coinDenom: "PEPE",
coinMinimalDenom: "erc20_pepe",
contractAddress: PEPE_ETH_CONTRACT,
coinDecimals: 18,
bridgeTo: ["Oraichain"],
coinGeckoId: "pepe",
prefixToken: ORAI_BRIDGE_EVM_ETH_DENOM_PREFIX,
coinImageUrl: "https://assets.coingecko.com/coins/images/29850/standard/pepe-token.jpeg?1696528776"
}
],
txExplorer: {
Expand Down Expand Up @@ -1055,7 +1115,25 @@ export const chainInfos: CustomChainInfo[] = [
coinGeckoId: "binancecoin",
bridgeTo: ["Oraichain"],
coinImageUrl: "https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png"
},
{
coinDenom: "PEPE",
coinMinimalDenom: "bep20_pepe",
contractAddress: PEPE_BSC_CONTRACT,
coinDecimals: 18,
coinGeckoId: "pepe",
bridgeTo: ["Oraichain"],
coinImageUrl: "https://assets.coingecko.com/coins/images/29850/standard/pepe-token.jpeg?1696528776"
}
// {
// coinDenom: "CAT",
// coinMinimalDenom: "bep20_cat",
// contractAddress: CAT_BSC_CONTRACT,
// coinDecimals: 18,
// coinGeckoId: "simon-s-cat",
// bridgeTo: ["Oraichain"],
// coinImageUrl: "https://assets.coingecko.com/coins/images/39765/standard/Simon's_Cat_Logo.png?1724017505"
// }
],
txExplorer: {
name: "Bsc Scan",
Expand Down
2 changes: 1 addition & 1 deletion packages/universal-swap/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@oraichain/oraidex-universal-swap",
"version": "1.1.5",
"version": "1.1.6",
"main": "build/index.js",
"files": [
"build/"
Expand Down
125 changes: 68 additions & 57 deletions packages/universal-swap/src/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@ export class UniversalSwapHandler {
private readonly currentTimestamp = Date.now()
) {}

private getTokenOnOraichain(coinGeckoId: CoinGeckoId, decimals?: number): TokenItemType {
const fromTokenOnOrai = getTokenOnOraichain(coinGeckoId, decimals);
private getTokenOnOraichain(coinGeckoId: CoinGeckoId, isNative?: boolean): TokenItemType {
const fromTokenOnOrai = getTokenOnOraichain(coinGeckoId, isNative);
if (!fromTokenOnOrai) throw generateError(`Could not find token ${coinGeckoId} on Oraichain. Could not swap`);
return fromTokenOnOrai;
}
Expand Down Expand Up @@ -137,10 +137,7 @@ export class UniversalSwapHandler {
let toTokenInOrai = this.getTokenOnOraichain(toCoinGeckoId);
const isSpecialChain = ["kawaii_6886-1", "injective-1"].includes(toChainId);
const isSpecialCoingecko = ["kawaii-islands", "milky-token", "injective-protocol"].includes(toCoinGeckoId);
if (isSpecialChain && isSpecialCoingecko) {
const IBC_DECIMALS = 18;
toTokenInOrai = this.getTokenOnOraichain(toCoinGeckoId, IBC_DECIMALS);
}
if (isSpecialChain && isSpecialCoingecko) toTokenInOrai = this.getTokenOnOraichain(toCoinGeckoId, true);

let msgTransfer: EncodeObject[];
// if ibc info source has wasm in it, it means we need to transfer IBC using IBC wasm contract, not normal ibc transfer
Expand Down Expand Up @@ -280,7 +277,7 @@ export class UniversalSwapHandler {
let getEncodedExecuteMsgs = [];
if (["kawaii-islands", "milky-token"].includes(originalToToken.coinGeckoId)) {
const IBC_DECIMALS = 18;
const toTokenInOrai = this.getTokenOnOraichain(originalToToken.coinGeckoId, IBC_DECIMALS);
const toTokenInOrai = this.getTokenOnOraichain(originalToToken.coinGeckoId, true);
const evmToken = tokenMap[toTokenInOrai.denom];
const evmAmount = coin(toAmount(this.swapData.fromAmount, evmToken.decimals).toString(), evmToken.denom);
const msgConvertReverses = UniversalSwapHelper.generateConvertCw20Erc20Message(
Expand Down Expand Up @@ -937,31 +934,37 @@ export class UniversalSwapHandler {
break;
case "oraichain-to-evm":
const { evm: metamaskAddress, tron: tronAddress } = this.swapData.sender;
const routerClient = new OraiswapRouterQueryClient(client, network.mixer_router);
const isSufficient = await UniversalSwapHelper.checkFeeRelayer({
originalFromToken: this.swapData.originalFromToken,
fromAmount: this.swapData.fromAmount,
relayerFee: this.swapData.relayerFee,
routerClient
});
if (!isSufficient)
throw generateError(
`Your swap amount ${this.swapData.fromAmount} cannot cover the fees for this transaction. Please try again with a higher swap amount`
);
if (!this.config?.swapOptions?.isCheckBalanceIbc) {
const routerClient = new OraiswapRouterQueryClient(client, network.mixer_router);
const isSufficient = await UniversalSwapHelper.checkFeeRelayer({
originalFromToken: this.swapData.originalFromToken,
fromAmount: this.swapData.fromAmount,
relayerFee: this.swapData.relayerFee,
routerClient
});
if (!isSufficient)
throw generateError(
`Your swap amount ${this.swapData.fromAmount} cannot cover the fees for this transaction. Please try again with a higher swap amount`
);
}

encodedObjects = await this.combineMsgEvm(metamaskAddress, tronAddress);
break;
default:
throw generateError(`Universal swap type ${universalSwapType} is wrong. Should not call this function!`);
}
const ibcInfo = this.getIbcInfo("Oraichain", originalToToken.chainId);
await UniversalSwapHelper.checkBalanceChannelIbc(
ibcInfo,
originalFromToken,
originalToToken,
simulateAmount,
client,
this.getCwIcs20ContractAddr()
);

if (!this.config?.swapOptions?.isCheckBalanceIbc) {
const ibcInfo = this.getIbcInfo("Oraichain", originalToToken.chainId);
await UniversalSwapHelper.checkBalanceChannelIbc(
ibcInfo,
originalFromToken,
originalToToken,
simulateAmount,
client,
this.getCwIcs20ContractAddr()
);
}

// handle sign and broadcast transactions
return client.signAndBroadcast(sender.cosmos, encodedObjects, "auto");
Expand Down Expand Up @@ -1030,27 +1033,29 @@ export class UniversalSwapHandler {
return this.evmSwap(evmSwapData);
}

await UniversalSwapHelper.checkBalanceIBCOraichain(
originalToToken,
originalFromToken,
fromAmount,
simulateAmount,
client,
this.getCwIcs20ContractAddr()
);

const routerClient = new OraiswapRouterQueryClient(client, network.mixer_router);
const isSufficient = await UniversalSwapHelper.checkFeeRelayer({
originalFromToken,
fromAmount,
relayerFee,
routerClient
});
if (!isSufficient)
throw generateError(
`Your swap amount ${fromAmount} cannot cover the fees for this transaction. Please try again with a higher swap amount`
if (!this.config?.swapOptions?.isCheckBalanceIbc) {
await UniversalSwapHelper.checkBalanceIBCOraichain(
originalToToken,
originalFromToken,
fromAmount,
simulateAmount,
client,
this.getCwIcs20ContractAddr()
);

const routerClient = new OraiswapRouterQueryClient(client, network.mixer_router);
const isSufficient = await UniversalSwapHelper.checkFeeRelayer({
originalFromToken,
fromAmount,
relayerFee,
routerClient
});
if (!isSufficient)
throw generateError(
`Your swap amount ${fromAmount} cannot cover the fees for this transaction. Please try again with a higher swap amount`
);
}

return this.transferEvmToIBC(swapRoute);
}

Expand Down Expand Up @@ -1185,9 +1190,7 @@ export class UniversalSwapHandler {
obridgeAddress
);

// version alpha smart router oraiDEX pool + osmosis pool
if (
swapOptions?.isAlphaSmartRouter &&
this.swapData?.alphaSmartRoutes?.routes?.length &&
["oraichain-to-oraichain", "oraichain-to-cosmos", "cosmos-to-others"].includes(universalSwapType) &&
!swapOptions?.isIbcWasm
Expand Down Expand Up @@ -1219,11 +1222,21 @@ export class UniversalSwapHandler {
);
if (!!subRelayerFee) {
const routerClient = new OraiswapRouterQueryClient(client, network.mixer_router);
const { amount } = await UniversalSwapHelper.simulateSwap({
fromInfo: this.getTokenOnOraichain("oraichain-token"),
toInfo: this.getTokenOnOraichain(originalToToken.coinGeckoId),
amount: subRelayerFee,
routerClient
const { amount } = await UniversalSwapHelper.handleSimulateSwap({
originalFromInfo: this.getTokenOnOraichain("oraichain-token"),
originalToInfo: this.getTokenOnOraichain(originalToToken.coinGeckoId),
originalAmount: toDisplay(subRelayerFee),
routerClient: routerClient,
routerOption: {
useAlphaSmartRoute: true,
useIbcWasm: true
},
routerConfig: {
url: "https://osor.oraidex.io",
path: "/smart-router/alpha-router",
protocols: ["Oraidex", "OraidexV3"],
dontAllowSwapAfter: ["Oraidex", "OraidexV3"]
}
});
if (amount) subRelayerFee = amount;
}
Expand All @@ -1250,8 +1263,7 @@ export class UniversalSwapHandler {
generateMsgsSmartRouterSwap(route: Routes, isLastRoute: boolean) {
let contractAddr: string = network.mixer_router;
const { originalFromToken, fromAmount, affiliates, userSlippage } = this.swapData;
let decimals = originalFromToken.denom === TON_ORAICHAIN_DENOM ? originalFromToken.decimals : undefined;
const fromTokenOnOrai = this.getTokenOnOraichain(originalFromToken.coinGeckoId, decimals);
const fromTokenOnOrai = this.getTokenOnOraichain(originalFromToken.coinGeckoId);
const _fromAmount = toAmount(fromAmount, fromTokenOnOrai.decimals).toString();
const isValidSlippage = this.swapData.userSlippage || this.swapData.userSlippage === 0;
if (!this.swapData.simulatePrice || !isValidSlippage) {
Expand Down Expand Up @@ -1280,8 +1292,7 @@ export class UniversalSwapHandler {
let contractAddr: string = network.mixer_router;
const { originalFromToken, originalToToken, fromAmount, affiliates, userSlippage } = this.swapData;
// since we're swapping on Oraichain, we need to get from token on Oraichain
let decimals = originalFromToken.denom === TON_ORAICHAIN_DENOM ? originalFromToken.decimals : undefined;
const fromTokenOnOrai = this.getTokenOnOraichain(originalFromToken.coinGeckoId, decimals);
const fromTokenOnOrai = this.getTokenOnOraichain(originalFromToken.coinGeckoId);
const toTokenInOrai = this.getTokenOnOraichain(originalToToken.coinGeckoId);
try {
const _fromAmount = toAmount(fromAmount, fromTokenOnOrai.decimals).toString();
Expand Down
Loading

0 comments on commit 325645f

Please sign in to comment.