Skip to content

Commit

Permalink
add Gravity network (#698)
Browse files Browse the repository at this point in the history
  • Loading branch information
IDIDOS authored Aug 27, 2024
2 parents dad4718 + a146a67 commit e4b693a
Show file tree
Hide file tree
Showing 22 changed files with 313 additions and 6 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rubic-sdk",
"version": "5.35.0",
"version": "5.36.0",
"description": "Simplify dApp creation",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down
7 changes: 7 additions & 0 deletions src/common/tokens/constants/native-tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -495,5 +495,12 @@ export const nativeTokensList: Record<BlockchainName, Token> = {
name: 'Bitcoin',
symbol: 'BTC',
decimals: 18
}),
[BLOCKCHAIN_NAME.GRAVITY]: new Token({
blockchain: BLOCKCHAIN_NAME.GRAVITY,
address: EvmWeb3Pure.nativeTokenAddress,
name: 'Gravity',
symbol: 'G',
decimals: 18
})
};
1 change: 1 addition & 0 deletions src/common/tokens/constants/wrapped-addresses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export const wrappedAddress: Partial<Record<EvmBlockchainName, string>> = {
[BLOCKCHAIN_NAME.SEI]: '0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7',
[BLOCKCHAIN_NAME.CORE]: '0x191e94fa59739e188dce837f7f6978d84727ad01',
[BLOCKCHAIN_NAME.BAHAMUT]: '0x4084ab20f8ffca76c19aaf854fb5fe9de6217fbb',
[BLOCKCHAIN_NAME.GRAVITY]: '0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD',
// Testnet
[BLOCKCHAIN_NAME.GOERLI]: '0xb4fbf271143f4fbf7b91a5ded31805e42b2208d6',
[BLOCKCHAIN_NAME.SCROLL_SEPOLIA]: '0x5300000000000000000000000000000000000004',
Expand Down
7 changes: 7 additions & 0 deletions src/common/tokens/constants/wrapped-native-tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -471,5 +471,12 @@ export const wrappedNativeTokensList: Partial<Record<EvmBlockchainName, Token>>
name: 'Wrapped BTC',
symbol: 'WBTC',
decimals: 18
}),
[BLOCKCHAIN_NAME.GRAVITY]: new Token({
blockchain: BLOCKCHAIN_NAME.GRAVITY,
address: '0xBB859E225ac8Fb6BE1C7e38D87b767e95Fef0EbD',
name: 'Wrapped Gravity',
symbol: 'WG',
decimals: 18
})
};
3 changes: 2 additions & 1 deletion src/core/blockchain/models/backend-blockchains.ts
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ const BLOCKCHAINS_MAPPING = {
[BLOCKCHAIN_NAME.SEI]: 'sei',
[BLOCKCHAIN_NAME.CORE]: 'core',
[BLOCKCHAIN_NAME.BAHAMUT]: 'bahamut',
[BLOCKCHAIN_NAME.BITLAYER]: 'bitlayer'
[BLOCKCHAIN_NAME.BITLAYER]: 'bitlayer',
[BLOCKCHAIN_NAME.GRAVITY]: 'gravity'
} as const;

export const TO_BACKEND_BLOCKCHAINS: Record<BlockchainName, BackendBlockchain> = {
Expand Down
3 changes: 2 additions & 1 deletion src/core/blockchain/models/blockchain-name.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ export const EVM_BLOCKCHAIN_NAME = {
SEI: 'SEI',
CORE: 'CORE',
BAHAMUT: 'BAHAMUT',
BITLAYER: 'BITLAYER'
BITLAYER: 'BITLAYER',
GRAVITY: 'GRAVITY'
} as const;

export const BLOCKCHAIN_NAME = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ export const blockchainId: Record<BlockchainName, number> = {
[BLOCKCHAIN_NAME.CORE]: 1116,
[BLOCKCHAIN_NAME.BAHAMUT]: 5165,
[BLOCKCHAIN_NAME.BITLAYER]: 200901,
[BLOCKCHAIN_NAME.GRAVITY]: 1625,
// Tesnents
[BLOCKCHAIN_NAME.GOERLI]: 5,
[BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN_TESTNET]: 87,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,5 +67,6 @@ export const MULTICALL_ADDRESSES: Record<Web3PublicSupportedBlockchain, string>
[BLOCKCHAIN_NAME.SEI]: '0xcA11bde05977b3631167028862bE2a173976CA11',
[BLOCKCHAIN_NAME.CORE]: '0xcA11bde05977b3631167028862bE2a173976CA11',
[BLOCKCHAIN_NAME.BAHAMUT]: '0xa385B1436fD2A6a1c6865E22c522A1aA40CaDCC6',
[BLOCKCHAIN_NAME.BITLAYER]: '0x5B256fE9e993902eCe49D138a5b1162cBb529474'
[BLOCKCHAIN_NAME.BITLAYER]: '0x5B256fE9e993902eCe49D138a5b1162cBb529474',
[BLOCKCHAIN_NAME.GRAVITY]: '0xcA11bde05977b3631167028862bE2a173976CA11'
};
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,9 @@ export const stargateV2BlockchainSupportedPools: Record<StargateV2SupportedBlock
stargateV2PoolId[stargateV2BridgeToken.USDT],
stargateV2PoolId[stargateV2BridgeToken.WETH]
]
// [BLOCKCHAIN_NAME.GRAVITY]: [
// stargateV2PoolId[stargateV2BridgeToken.USDC],
// stargateV2PoolId[stargateV2BridgeToken.USDT],
// stargateV2PoolId[stargateV2BridgeToken.WETH]
// ]
};
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,6 @@ export const stargateV2ChainIds: Record<StargateV2SupportedBlockchains, number>
[BLOCKCHAIN_NAME.TAIKO]: 30290,
[BLOCKCHAIN_NAME.SEI]: 30280,
[BLOCKCHAIN_NAME.FLARE]: 30295
// [BLOCKCHAIN_NAME.GRAVITY]: 30294
// [BLOCKCHAIN_NAME.IOTA]: 30284,
};
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ type StargateV2ContractAddress = Record<
export const chainsWithoutPoolBalanceMethodOnContract = [
BLOCKCHAIN_NAME.TAIKO,
BLOCKCHAIN_NAME.SEI,
BLOCKCHAIN_NAME.FLARE
BLOCKCHAIN_NAME.FLARE,
BLOCKCHAIN_NAME.GRAVITY
] as const;

export const stargateV2ContractAddress: StargateV2ContractAddress = {
Expand Down Expand Up @@ -96,4 +97,9 @@ export const stargateV2ContractAddress: StargateV2ContractAddress = {
[stargateV2BridgeToken.USDT]: '0x1C10CC06DC6D35970d1D53B2A23c76ef370d4135',
[stargateV2BridgeToken.WETH]: '0x8e8539e4CcD69123c623a106773F2b0cbbc58746'
}
// [BLOCKCHAIN_NAME.GRAVITY]: {
// [stargateV2BridgeToken.USDC]: '0xC1B8045A6ef2934Cf0f78B0dbD489969Fa9Be7E4',
// [stargateV2BridgeToken.USDT]: '0x0B38e83B86d491735fEaa0a791F65c2B99535396',
// [stargateV2BridgeToken.WETH]: '0x17d65bF79E77B6Ab21d8a0afed3bC8657d8Ee0B2'
// }
};
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export const stargateV2SupportedBlockchains = [
BLOCKCHAIN_NAME.TAIKO,
BLOCKCHAIN_NAME.SEI,
BLOCKCHAIN_NAME.FLARE
// BLOCKCHAIN_NAME.GRAVITY
// BLOCKCHAIN_NAME.IOTA,
];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ const addresses: StargateV2TokenAddress = {
'0x0B38e83B86d491735fEaa0a791F65c2B99535396': stargateV2BridgeToken.USDT,
'0x1502FA4be69d526124D453619276FacCab275d3D': stargateV2BridgeToken.WETH
}
// [BLOCKCHAIN_NAME.GRAVITY]: {
// '0xf6f832466Cd6C21967E0D954109403f36Bc8ceaA': stargateV2BridgeToken.WETH,
// '0xFbDa5F676cB37624f28265A144A48B0d6e87d3b6': stargateV2BridgeToken.USDC,
// '0x816E810f9F787d669FB71932DeabF6c83781Cd48': stargateV2BridgeToken.USDT
// }
};

export const stargateV2TokenAddress = Object.entries(addresses).reduce(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export const symbiosisCrossChainSupportedBlockchains = [
BLOCKCHAIN_NAME.TAIKO,
BLOCKCHAIN_NAME.CORE,
BLOCKCHAIN_NAME.BAHAMUT,
BLOCKCHAIN_NAME.GRAVITY,
// Testnets
BLOCKCHAIN_NAME.GOERLI,
BLOCKCHAIN_NAME.BINANCE_SMART_CHAIN_TESTNET,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ export const AlgebraTradeProviders = [
BerachainTestnetAlgebraProvider,
ModeAlgebraProvider,
BlastFenixProvider
//CamelotGravityProvider
] as const;
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import { UniSwapV3ScrollSepoliaTrade } from 'src/features/on-chain/calculation-m
import { AbiItem } from 'web3-utils';

import { AlgebraIntegralTrade } from '../../arthera-testnet/algebra-integral/algebra-integral-trade';
import { CamelotGravityTrade } from '../../gravity/camelot-gravity/camelot-gravity-trade';

export abstract class UniswapV3AlgebraAbstractProvider<
T extends UniswapV3AlgebraAbstractTrade = UniswapV3AlgebraAbstractTrade
Expand All @@ -53,7 +54,8 @@ export abstract class UniswapV3AlgebraAbstractProvider<
| typeof UniSwapV3ScrollSepoliaTrade
| typeof BerachainTestnetAlgebraTrade
| typeof ModeAlgebraTrade
| typeof BlastFenixTrade;
| typeof BlastFenixTrade
| typeof CamelotGravityTrade;

protected abstract readonly quoterController: UniswapV3AlgebraQuoterController;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { BLOCKCHAIN_NAME } from 'src/core/blockchain/models/blockchain-name';
import { EvmWeb3Pure } from 'src/core/blockchain/web3-pure/typed-web3-pure/evm-web3-pure/evm-web3-pure';
import { createTokenNativeAddressProxyInPathStartAndEnd } from 'src/features/common/utils/token-native-address-proxy';

import { ON_CHAIN_TRADE_TYPE, OnChainTradeType } from '../../../common/models/on-chain-trade-type';
import { AlgebraQuoterController } from '../../common/algebra/algebra-quoter-controller';
import { UniswapV3AlgebraTradeStructOmitPath } from '../../common/uniswap-v3-algebra-abstract/models/uniswap-v3-algebra-trade-struct';
import { UniswapV3AlgebraAbstractProvider } from '../../common/uniswap-v3-algebra-abstract/uniswap-v3-algebra-abstract-provider';
import { QUICK_SWAP_V3_ROUTER_CONTRACT_ABI } from '../../polygon/quick-swap-v3/constants/swap-router-contract-data';
import { QuickSwapV3Route } from '../../polygon/quick-swap-v3/models/quick-swap-v3-route';
import { defaultzGravityProviderConfiguration } from '../default-constants';
import { CamelotGravityTrade } from './camelot-gravity-trade';
import { CAMELOT_GRAVITY_ROUTER_CONTRACT_ADDRESS } from './constants/gravity-swap-router-contract-address';
import { CAMELOT_GRAVITY_PROVIDER_CONFIGURATION } from './constants/provider-configuration';
import {
CAMELOT_GRAVITY_QUOTER_CONTRACT_ABI,
CAMELOT_GRAVITY_QUOTER_CONTRACT_ADDRESS
} from './constants/quote-contract-data';

export class CamelotGravityProvider extends UniswapV3AlgebraAbstractProvider<CamelotGravityTrade> {
protected readonly contractAddress = CAMELOT_GRAVITY_ROUTER_CONTRACT_ADDRESS;

protected readonly contractAbi = QUICK_SWAP_V3_ROUTER_CONTRACT_ABI;

public readonly blockchain = BLOCKCHAIN_NAME.GRAVITY;

protected readonly OnChainTradeClass = CamelotGravityTrade;

protected readonly quoterController = new AlgebraQuoterController(
this.blockchain,
defaultzGravityProviderConfiguration.routingProvidersAddresses,
CAMELOT_GRAVITY_QUOTER_CONTRACT_ADDRESS,
CAMELOT_GRAVITY_QUOTER_CONTRACT_ABI
);

protected readonly providerConfiguration = CAMELOT_GRAVITY_PROVIDER_CONFIGURATION;

public get type(): OnChainTradeType {
return ON_CHAIN_TRADE_TYPE.CAMELOT;
}

protected createTradeInstance(
tradeStruct: UniswapV3AlgebraTradeStructOmitPath,
route: QuickSwapV3Route,
providerAddress: string
): CamelotGravityTrade {
const path = createTokenNativeAddressProxyInPathStartAndEnd(
route.path,
EvmWeb3Pure.nativeTokenAddress
);
return new CamelotGravityTrade(
{
...tradeStruct,
path,
route
},
providerAddress
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { Token } from 'src/common/tokens';
import { MethodData } from 'src/core/blockchain/web3-public-service/web3-public/models/method-data';

import { ON_CHAIN_TRADE_TYPE, OnChainTradeType } from '../../../common/models/on-chain-trade-type';
import { AlgebraQuoterController } from '../../common/algebra/algebra-quoter-controller';
import { UniswapV3AlgebraAbstractTrade } from '../../common/uniswap-v3-algebra-abstract/uniswap-v3-algebra-abstract-trade';
import { QUICK_SWAP_V3_ROUTER_CONTRACT_ABI } from '../../polygon/quick-swap-v3/constants/swap-router-contract-data';
import { QuickSwapV3Route } from '../../polygon/quick-swap-v3/models/quick-swap-v3-route';
import { QuickSwapV3TradeStruct } from '../../polygon/quick-swap-v3/models/quick-swap-v3-trade-struct';
import { CAMELOT_GRAVITY_ROUTER_CONTRACT_ADDRESS } from './constants/gravity-swap-router-contract-address';

export class CamelotGravityTrade extends UniswapV3AlgebraAbstractTrade {
public static get type(): OnChainTradeType {
return ON_CHAIN_TRADE_TYPE.CAMELOT;
}

public readonly dexContractAddress = CAMELOT_GRAVITY_ROUTER_CONTRACT_ADDRESS;

protected readonly contractAbi = QUICK_SWAP_V3_ROUTER_CONTRACT_ABI;

protected readonly unwrapWethMethodName = 'unwrapWNativeToken';

private readonly route: QuickSwapV3Route;

public readonly wrappedPath: ReadonlyArray<Token>;

constructor(tradeStruct: QuickSwapV3TradeStruct, providerAddress: string) {
super(tradeStruct, providerAddress);

this.route = tradeStruct.route;

this.wrappedPath = this.route.path;
}

/**
* Returns swap `exactInput` method's name and arguments to use in Swap contract.
*/
protected getSwapRouterExactInputMethodData(walletAddress: string): MethodData {
const amountParams = this.getAmountParams();

if (this.route.path.length === 2 && this.route?.path?.[0] && this.route?.path?.[1]) {
const methodName = this.exact === 'input' ? 'exactInputSingle' : 'exactOutputSingle';

return {
methodName,
methodArguments: [
[
this.route.path[0].address,
this.route.path[1].address,
walletAddress,
this.deadlineMinutesTimestamp,
...amountParams,
0
]
]
};
}

const methodName = this.exact === 'input' ? 'exactInput' : 'exactOutput';

return {
methodName,
methodArguments: [
[
AlgebraQuoterController.getEncodedPath(this.route.path),
walletAddress,
this.deadlineMinutesTimestamp,
...amountParams
]
]
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const CAMELOT_GRAVITY_ROUTER_CONTRACT_ADDRESS = '0x60A186019F81bFD04aFc16c9C01804a04E79e68B';
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { wrappedNativeTokensList } from 'src/common/tokens/constants/wrapped-native-tokens';
import { BLOCKCHAIN_NAME } from 'src/core/blockchain/models/blockchain-name';

import { UniswapV3AlgebraProviderConfiguration } from '../../../common/uniswap-v3-algebra-abstract/models/uniswap-v3-algebra-provider-configuration';

export const CAMELOT_GRAVITY_PROVIDER_CONFIGURATION: UniswapV3AlgebraProviderConfiguration = {
wethAddress: wrappedNativeTokensList[BLOCKCHAIN_NAME.GRAVITY]!.address,
maxTransitTokens: 1
};
Loading

0 comments on commit e4b693a

Please sign in to comment.