Skip to content

Commit c5ee177

Browse files
authored
Merge pull request #64 from compolabs/feat/1113-new-orderbook-contract
[1113] Connecting new sdk with updated order book contract
2 parents 4eb4d87 + f8127ec commit c5ee177

File tree

19 files changed

+334
-226
lines changed

19 files changed

+334
-226
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"deploy": "gh-pages -d build"
1212
},
1313
"dependencies": {
14-
"@compolabs/spark-orderbook-ts-sdk": "1.2.4",
14+
"@compolabs/spark-orderbook-ts-sdk": "1.3.3-beta",
1515
"@emotion/react": "^11.11.3",
1616
"@emotion/styled": "^11.11.0",
1717
"@fuels/connectors": "^0.6.0",

pnpm-lock.yaml

+7-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/App.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import { usePrivateKeyAsAuth } from "./hooks/usePrivateKeyAsAuth";
1010
import UnderConstruction from "./screens/Errors/UnderConstruction";
1111
import Faucet from "./screens/Faucet";
1212
import TradeScreen from "./screens/TradeScreen";
13-
import { isProduction, ROUTES } from "./constants";
13+
import { ROUTES } from "./constants";
1414

15-
const isUnderConstruction = isProduction;
15+
const isUnderConstruction = false;
1616

1717
const App: React.FC = observer(() => {
1818
usePrivateKeyAsAuth();

src/blockchain/FuelNetwork.ts

+65-26
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
import Spark from "@compolabs/spark-orderbook-ts-sdk";
1+
import SparkOrderBookSdk, {
2+
AssetType,
3+
CreateOrderParams,
4+
DepositParams,
5+
GetMatchOrderEventsParams,
6+
GetOrdersParams,
7+
OrderType,
8+
WriteTransactionResponse,
9+
} from "@compolabs/spark-orderbook-ts-sdk";
210
import { makeObservable } from "mobx";
311
import { Nullable } from "tsdef";
412

@@ -17,7 +25,6 @@ import {
1725
TOKENS_LIST,
1826
} from "./constants";
1927
import {
20-
FetchOrdersParams,
2128
FetchTradesParams,
2229
MarketCreateEvent,
2330
PerpMaxAbsPositionSize,
@@ -30,14 +37,14 @@ export class FuelNetwork {
3037
private static instance: Nullable<FuelNetwork> = null;
3138

3239
private walletManager = new WalletManager();
33-
private sdk: Spark;
40+
private orderbookSdk: SparkOrderBookSdk;
3441

3542
public network = NETWORKS[0];
3643

3744
private constructor() {
3845
makeObservable(this.walletManager);
3946

40-
this.sdk = new Spark({
47+
this.orderbookSdk = new SparkOrderBookSdk({
4148
networkUrl: NETWORKS[0].url,
4249
contractAddresses: CONTRACT_ADDRESSES,
4350
indexerApiUrl: INDEXER_URL,
@@ -68,6 +75,7 @@ export class FuelNetwork {
6875
return this.walletManager.wallet;
6976
};
7077

78+
// TODO: Fix for mobile wallets connected to desktop
7179
getIsExternalWallet = () => false;
7280

7381
getTokenList = (): Token[] => {
@@ -84,34 +92,46 @@ export class FuelNetwork {
8492

8593
setWallet = async (account: string, wallet?: any): Promise<void> => {
8694
await this.walletManager.setWallet(account, wallet);
87-
this.sdk.setActiveWallet(this.walletManager.wallet ?? undefined);
95+
this.orderbookSdk.setActiveWallet((this.walletManager.wallet as any) ?? undefined);
8896
};
8997

9098
connectWalletByPrivateKey = async (privateKey: string): Promise<void> => {
91-
await this.walletManager.connectByPrivateKey(privateKey, await this.sdk.getProvider());
92-
this.sdk.setActiveWallet(this.walletManager.wallet ?? undefined);
99+
await this.walletManager.connectByPrivateKey(privateKey, (await this.orderbookSdk.getProvider()) as any);
100+
this.orderbookSdk.setActiveWallet((this.walletManager.wallet as any) ?? undefined);
93101
};
94102

95103
disconnectWallet = (): void => {
96104
this.walletManager.disconnect();
97-
this.sdk.setActiveWallet(this.walletManager.wallet ?? undefined);
105+
this.orderbookSdk.setActiveWallet((this.walletManager.wallet as any) ?? undefined);
98106
};
99107

100108
addAssetToWallet = async (assetId: string): Promise<void> => {
101109
await this.walletManager.addAsset(assetId);
102110
};
103111

104-
createSpotOrder = async (assetAddress: string, size: string, price: string): Promise<any> => {
105-
const baseToken = this.getTokenByAssetId(assetAddress);
106-
const baseAsset = this.getAssetFromToken(baseToken);
107-
const quoteToken = this.getTokenBySymbol("USDC");
108-
const quoteAsset = this.getAssetFromToken(quoteToken);
112+
createSpotOrder = async (deposit: DepositParams, order: CreateOrderParams): Promise<WriteTransactionResponse> => {
113+
// const token = this.getTokenByAssetId(assetAddress);
114+
// const asset = this.getAssetFromToken(token);
109115

110-
return this.sdk.createSpotOrder(baseAsset, quoteAsset, size, price);
116+
return this.orderbookSdk.createOrder(deposit, order);
111117
};
112118

113-
cancelSpotOrder = async (orderId: string): Promise<void> => {
114-
await this.sdk.cancelSpotOrder(orderId);
119+
cancelSpotOrder = async (order: SpotMarketOrder): Promise<void> => {
120+
const withdrawAmount = order.orderType === OrderType.Buy ? order.currentQuoteAmount : order.currentAmount;
121+
const assetType = order.orderType === OrderType.Buy ? AssetType.Quote : AssetType.Base;
122+
123+
console.log({
124+
amount: withdrawAmount.toString(),
125+
assetType: assetType,
126+
});
127+
128+
await this.orderbookSdk.cancelOrder(
129+
{
130+
amount: withdrawAmount.toString(),
131+
assetType: assetType,
132+
},
133+
order.id,
134+
);
115135
};
116136

117137
mintToken = async (assetAddress: string): Promise<void> => {
@@ -120,7 +140,7 @@ export class FuelNetwork {
120140

121141
const amount = FAUCET_AMOUNTS[token.symbol].toString();
122142

123-
await this.sdk.mintToken(asset, amount);
143+
await this.orderbookSdk.mintToken(asset, amount);
124144
};
125145

126146
depositPerpCollateral = async (assetAddress: string, amount: string): Promise<void> => {
@@ -167,30 +187,49 @@ export class FuelNetwork {
167187
};
168188

169189
fetchSpotMarkets = async (limit: number): Promise<MarketCreateEvent[]> => {
170-
return this.sdk.fetchSpotMarkets(limit);
190+
return this.orderbookSdk.fetchMarkets(limit);
171191
};
172192

173193
fetchSpotMarketPrice = async (baseTokenAddress: string): Promise<BN> => {
174194
const token = this.getTokenByAssetId(baseTokenAddress);
175195
const asset = this.getAssetFromToken(token);
176196

177-
return this.sdk.fetchSpotMarketPrice(asset);
197+
return this.orderbookSdk.fetchMarketPrice(asset);
178198
};
179199

180-
fetchSpotOrders = async (params: FetchOrdersParams): Promise<SpotMarketOrder[]> => {
181-
const orders = await this.sdk.fetchSpotOrders(params);
200+
fetchSpotOrders = async (params: GetOrdersParams): Promise<SpotMarketOrder[]> => {
201+
const orders = await this.orderbookSdk.fetchOrders(params);
182202

183-
return orders.map((obj) => new SpotMarketOrder(obj));
203+
return orders.map(
204+
(order) =>
205+
new SpotMarketOrder({
206+
...order,
207+
quoteAssetId: TOKENS_BY_SYMBOL.USDC.assetId,
208+
}),
209+
);
184210
};
185211

186-
fetchSpotTrades = async (params: FetchTradesParams): Promise<SpotMarketTrade[]> => {
187-
const trades = await this.sdk.fetchSpotTrades(params);
212+
fetchSpotTrades = async (params: GetMatchOrderEventsParams): Promise<SpotMarketTrade[]> => {
213+
const trades = await this.orderbookSdk.getMatchOrderEvents(params);
188214

189-
return trades.map((obj) => new SpotMarketTrade({ ...obj, userAddress: params.trader }));
215+
return trades.map(
216+
(trade) =>
217+
new SpotMarketTrade({
218+
...trade,
219+
user: this.getAddress() ?? "",
220+
quoteAssetId: TOKENS_BY_SYMBOL.USDC.assetId,
221+
}),
222+
);
190223
};
191224

192225
fetchSpotVolume = async (): Promise<SpotMarketVolume> => {
193-
return this.sdk.fetchSpotVolume();
226+
const data = await this.orderbookSdk.fetchVolume();
227+
228+
return {
229+
low: new BN(data.low24h),
230+
high: new BN(data.high24h),
231+
volume: new BN(data.volume24h),
232+
};
194233
};
195234

196235
matchPerpOrders = async (order1: string, order2: string): Promise<unknown> => {

src/blockchain/constants.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import { Token } from "@src/entity/Token";
66

77
import TOKENS_JSON from "./tokens.json";
88

9-
export const CONTRACT_ADDRESSES: any = {
10-
spotMarket: "0x4a2ce054e3e94155f7092f7365b212f7f45105b74819c623744ebcc5d065c6ac",
9+
export const CONTRACT_ADDRESSES = {
10+
market: "0x08ca18ed550d6229f001641d43aac58e00f9eb7e25c9bea6d33716af61e43b2a",
1111
tokenFactory: "0x3141a3f11e3f784364d57860e3a4dcf9b73d42e23fd49038773cefb09c633348",
1212
pyth: "0x3cd5005f23321c8ae0ccfa98fb07d9a5ff325c483f21d2d9540d6897007600c9",
1313
};
@@ -43,7 +43,7 @@ export const TOKENS_BY_ASSET_ID: Record<string, Token> = TOKENS_LIST.reduce(
4343
{},
4444
);
4545

46-
export const INDEXER_URL = "https://indexer.bigdevenergy.link/22318a2/v1/graphql";
46+
export const INDEXER_URL = "https://indexer.bigdevenergy.link/67b693c/v1/graphql";
4747
// export const INDEXER_URL = "http://localhost:8080/v1/graphql";
4848
// export const INDEXER_URL = "https://envio-orderbook-indexer.spark-defi.com/v1/graphql";
4949
export const PYTH_URL = "https://hermes.pyth.network";

src/blockchain/types/index.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import BN from "@src/utils/BN";
22

3-
export type FetchOrdersParams<T = string> = {
4-
baseToken: T;
5-
limit: number;
6-
trader?: T;
7-
type?: "BUY" | "SELL";
8-
isActive?: boolean;
9-
};
3+
// export type FetchOrdersParams = {
4+
// baseToken: string;
5+
// limit: number;
6+
// trader?: string;
7+
// type?: "BUY" | "SELL";
8+
// isActive?: boolean;
9+
// };
1010

11-
export type FetchTradesParams<T = string> = {
12-
baseToken: T;
11+
export type FetchTradesParams = {
1312
limit: number;
14-
trader?: T;
13+
asset?: string;
14+
user?: string;
1515
};
1616

1717
export type MarketCreateEvent = {

0 commit comments

Comments
 (0)