Skip to content

Commit d686ff4

Browse files
authored
Merge pull request #121 from compolabs/fix/1460-bugs
[1460] Working on bugs related to ui
2 parents 31c3c42 + 65a0876 commit d686ff4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+3517
-2951
lines changed

.env.example

Lines changed: 0 additions & 4 deletions
This file was deleted.

.github/workflows/deploy-to-cf-pages.yaml

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: Cloudflare Pages Deploy
2-
2+
33
on:
44
push:
55
branches:
@@ -11,16 +11,18 @@ on:
1111
jobs:
1212
deploy:
1313
environment:
14-
name: ${{ (github.ref == 'refs/heads/main' && 'production') || (github.ref == 'refs/heads/develop' && 'dev') || 'preview' }}
14+
name:
15+
${{ (github.ref == 'refs/heads/main' && 'production') || (github.ref == 'refs/heads/develop' && 'dev') ||
16+
'preview' }}
1517
permissions:
1618
actions: read # Only required for private GitHub Repo
1719
contents: read
1820
deployments: write
1921
pull-requests: write
2022
runs-on: ubuntu-latest
21-
timeout-minutes: 5
23+
timeout-minutes: 5
2224
steps:
23-
- name: 'Checkout Github Action'
25+
- name: "Checkout Github Action"
2426
uses: actions/checkout@v4
2527
- name: Install pnpm
2628
uses: pnpm/action-setup@v4
@@ -34,18 +36,10 @@ jobs:
3436
- name: Install Dependencies
3537
run: |
3638
pnpm install
37-
- name: create env file
38-
run: |
39-
touch .env
40-
echo VITE_CONTRACT_ADDRESSES_MARKET=${{ vars.VITE_CONTRACT_ADDRESSES_MARKET }} >> .env
41-
echo VITE_CONTRACT_ADDRESSES_PYTH=${{ vars.VITE_CONTRACT_ADDRESSES_PYTH }} >> .env
42-
echo VITE_CONTRACT_ADDRESSES_TOKEN_FACTORY=${{ vars.VITE_CONTRACT_ADDRESSES_TOKEN_FACTORY }} >> .env
43-
echo VITE_INDEXER_URL=${{ vars.VITE_INDEXER_URL }} >> .env
44-
cat .env
4539
- name: Build Project
4640
run: |
4741
npm run build
48-
- name: 'Deploy to Cloudflare Pages'
42+
- name: "Deploy to Cloudflare Pages"
4943
uses: andykenward/[email protected]
5044
with:
5145
cloudflare-api-token: ${{ secrets.CLOUDFLARE_API_TOKEN }}

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
"deploy": "gh-pages -d build"
1212
},
1313
"engines": {
14-
"node": "20.x",
15-
"pnpm": "9.7.x"
14+
"node": ">=20.11.0",
15+
"pnpm": ">=9.7.0"
1616
},
1717
"dependencies": {
18-
"@compolabs/spark-orderbook-ts-sdk": "^1.4.8",
18+
"@compolabs/spark-orderbook-ts-sdk": "^1.6.2",
1919
"@emotion/react": "^11.11.3",
2020
"@emotion/styled": "^11.11.0",
2121
"@fuels/connectors": "^0.9.1",

pnpm-lock.yaml

Lines changed: 2639 additions & 2368 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/config.json

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"version": "1.0.0",
3+
"contractVer": 257,
4+
"tokens": [
5+
{
6+
"name": "Ethereum",
7+
"symbol": "ETH",
8+
"decimals": 9,
9+
"assetId": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07",
10+
"priceFeed": "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",
11+
"precision": 9
12+
},
13+
{
14+
"name": "Bitcoin",
15+
"symbol": "BTC",
16+
"decimals": 8,
17+
"assetId": "0x38e4ca985b22625fff93205e997bfc5cc8453a953da638ad297ca60a9f2600bc",
18+
"priceFeed": "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",
19+
"precision": 8
20+
},
21+
{
22+
"name": "USDC",
23+
"symbol": "USDC",
24+
"decimals": 6,
25+
"assetId": "0x336b7c06352a4b736ff6f688ba6885788b3df16e136e95310ade51aa32dc6f05",
26+
"priceFeed": "0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
27+
"precision": 2
28+
}
29+
],
30+
"markets": [
31+
{
32+
"marketName": "BTCUSDC",
33+
"owner": "0xf47e0ef744ac8c993550e03d17f1c4844494553a12cac11ab8c568c8999fdbbf",
34+
"baseAssetId": "0x38e4ca985b22625fff93205e997bfc5cc8453a953da638ad297ca60a9f2600bc",
35+
"baseAssetDecimals": 8,
36+
"quoteAssetId": "0x336b7c06352a4b736ff6f688ba6885788b3df16e136e95310ade51aa32dc6f05",
37+
"quoteAssetDecimals": 6,
38+
"priceDecimals": 9,
39+
"feeAssetId": "0xf8f8b6283d7fa5b672b530cbb84fcccb4ff8dc40f8176ef4544ddb1f1952ad07",
40+
"contractId": "0x58959d086d8a6ee8cf8eeb572b111edb21661266be4b4885383748d11b72d0aa"
41+
}
42+
],
43+
"indexers": {
44+
"0x58959d086d8a6ee8cf8eeb572b111edb21661266be4b4885383748d11b72d0aa": {
45+
"httpUrl": "https://indexer.bigdevenergy.link/c940d97/v1/graphql",
46+
"wsUrl": "wss://indexer.bigdevenergy.link/c940d97/v1/graphql"
47+
}
48+
},
49+
"contracts": {
50+
"orderbook": "0x0713334e61ed73ba9421a3a49891953f9ccb7353828566b569752a82a39803e8",
51+
"multiAsset": "0xdc527289bdef8ec452f350c9b2d36d464a9ebed88eb389615e512a78e26e3509"
52+
},
53+
"networkUrl": "https://testnet.fuel.network/v1/graphql",
54+
"explorerUrl": "https://app.fuel.network"
55+
}

src/assets/icons/info.svg

Lines changed: 5 additions & 1 deletion
Loading

src/assets/icons/success.svg

Lines changed: 4 additions & 0 deletions
Loading

src/assets/icons/warning.svg

Lines changed: 5 additions & 0 deletions
Loading

src/blockchain/FuelNetwork.ts

Lines changed: 36 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -12,50 +12,41 @@ import { Account, B256Address, Bech32Address } from "fuels";
1212
import { makeObservable } from "mobx";
1313
import { Nullable } from "tsdef";
1414

15-
import { PerpMarket, PerpOrder, PerpPosition, SpotMarketOrder, Token } from "@src/entity";
16-
import { PerpMarketTrade } from "@src/entity/PerpMarketTrade";
17-
import { FAUCET_AMOUNTS } from "@src/stores/FaucetStore";
15+
import { PerpMarket, PerpMarketTrade, PerpOrder, PerpPosition, SpotMarketOrder, Token } from "@src/entity";
1816
import BN from "@src/utils/BN";
17+
import { CONFIG } from "@src/utils/getConfig";
1918

20-
import {
21-
CONTRACT_ADDRESSES,
22-
INDEXER_HTTP_URL,
23-
INDEXER_WS_URL,
24-
NETWORK,
25-
PYTH_URL,
26-
TOKENS_BY_ASSET_ID,
27-
TOKENS_BY_SYMBOL,
28-
TOKENS_LIST,
29-
} from "./constants";
3019
import {
3120
Balances,
3221
FetchTradesParams,
33-
MarketCreateEvent,
3422
PerpMaxAbsPositionSize,
3523
PerpPendingFundingPayment,
3624
SpotMarketVolume,
3725
} from "./types";
3826
import { WalletManager } from "./WalletManager";
3927

28+
const MARKET = "0x58959d086d8a6ee8cf8eeb572b111edb21661266be4b4885383748d11b72d0aa";
29+
4030
export class FuelNetwork {
4131
private static instance: Nullable<FuelNetwork> = null;
4232

4333
private walletManager = new WalletManager();
4434
orderbookSdk: SparkOrderBookSdk;
4535

46-
public network = NETWORK;
47-
4836
private constructor() {
4937
makeObservable(this.walletManager);
5038

5139
this.orderbookSdk = new SparkOrderBookSdk({
52-
networkUrl: NETWORK.url,
53-
contractAddresses: CONTRACT_ADDRESSES,
40+
networkUrl: CONFIG.APP.networkUrl,
41+
contractAddresses: {
42+
market: MARKET, // Temporary solution
43+
orderbook: CONFIG.APP.contracts.orderbook,
44+
multiAsset: CONFIG.APP.contracts.multiAsset,
45+
},
5446
indexerConfig: {
55-
httpUrl: INDEXER_HTTP_URL,
56-
wsUrl: INDEXER_WS_URL,
47+
httpUrl: CONFIG.APP.indexers[MARKET].httpUrl,
48+
wsUrl: CONFIG.APP.indexers[MARKET].wsUrl,
5749
},
58-
pythUrl: PYTH_URL,
5950
});
6051
}
6152

@@ -66,6 +57,10 @@ export class FuelNetwork {
6657
return FuelNetwork.instance;
6758
}
6859

60+
setActiveMarket = (marketAddress: string) => {
61+
this.orderbookSdk.setActiveMarketAddress(marketAddress);
62+
};
63+
6964
getAddress = (): Nullable<B256Address> => {
7065
return this.walletManager.address;
7166
};
@@ -86,15 +81,15 @@ export class FuelNetwork {
8681
getIsExternalWallet = () => false;
8782

8883
getTokenList = (): Token[] => {
89-
return TOKENS_LIST;
84+
return CONFIG.TOKENS;
9085
};
9186

9287
getTokenBySymbol = (symbol: string): Token => {
93-
return TOKENS_BY_SYMBOL[symbol];
88+
return CONFIG.TOKENS_BY_SYMBOL[symbol];
9489
};
9590

9691
getTokenByAssetId = (assetId: string): Token => {
97-
return TOKENS_BY_ASSET_ID[assetId.toLowerCase()];
92+
return CONFIG.TOKENS_BY_ASSET_ID[assetId.toLowerCase()];
9893
};
9994

10095
connect = async (wallet: Account): Promise<void> => {
@@ -108,9 +103,9 @@ export class FuelNetwork {
108103
this.orderbookSdk.setActiveWallet((this.walletManager.wallet as any) ?? undefined);
109104
};
110105

111-
disconnectWallet = (): void => {
112-
this.walletManager.disconnect();
113-
this.orderbookSdk.setActiveWallet((this.walletManager.wallet as any) ?? undefined);
106+
disconnectWallet = async (): Promise<void> => {
107+
await this.walletManager.disconnect();
108+
this.orderbookSdk.setActiveWallet(undefined);
114109
};
115110

116111
addAssetToWallet = async (assetId: string): Promise<void> => {
@@ -125,25 +120,23 @@ export class FuelNetwork {
125120
return this.orderbookSdk.fulfillOrderMany(order);
126121
};
127122

128-
cancelSpotOrder = async (order: SpotMarketOrder): Promise<void> => {
129-
await this.orderbookSdk.cancelOrder(order.id);
123+
cancelSpotOrder = async (order: SpotMarketOrder): Promise<WriteTransactionResponse> => {
124+
return this.orderbookSdk.cancelOrder(order.id);
130125
};
131126

132-
mintToken = async (assetAddress: string): Promise<void> => {
127+
mintToken = async (amount: string, assetAddress: string): Promise<WriteTransactionResponse> => {
133128
const token = this.getTokenByAssetId(assetAddress);
134129
const asset = this.getAssetFromToken(token);
135130

136-
const amount = FAUCET_AMOUNTS[token.symbol].toString();
137-
138-
await this.orderbookSdk.mintToken(asset, amount);
131+
return this.orderbookSdk.mintToken(asset, amount);
139132
};
140133

141-
withdrawSpotBalance = async (amount: string, assetType: AssetType): Promise<void> => {
142-
await this.orderbookSdk.withdraw(amount, assetType);
134+
withdrawSpotBalance = async (amount: string, assetType: AssetType): Promise<WriteTransactionResponse> => {
135+
return this.orderbookSdk.withdraw(amount, assetType);
143136
};
144137

145-
depositSpotBalance = async (amount: string, asset: Asset): Promise<void> => {
146-
await this.orderbookSdk.deposit(asset, amount);
138+
depositSpotBalance = async (amount: string, asset: Asset): Promise<WriteTransactionResponse> => {
139+
return this.orderbookSdk.deposit(asset, amount);
147140
};
148141

149142
depositPerpCollateral = async (assetAddress: string, amount: string): Promise<void> => {
@@ -189,10 +182,6 @@ export class FuelNetwork {
189182
// await this.sdk.fulfillPerpOrder(gasAsset, orderId, amount, tokenPriceFeed);
190183
};
191184

192-
fetchSpotMarkets = async (limit: number): Promise<MarketCreateEvent[]> => {
193-
return this.orderbookSdk.fetchMarkets(limit);
194-
};
195-
196185
fetchSpotMarketPrice = async (baseTokenAddress: string): Promise<BN> => {
197186
const token = this.getTokenByAssetId(baseTokenAddress);
198187
const asset = this.getAssetFromToken(token);
@@ -206,7 +195,7 @@ export class FuelNetwork {
206195
const formatOrder = (order: Order) =>
207196
new SpotMarketOrder({
208197
...order,
209-
quoteAssetId: TOKENS_BY_SYMBOL.USDC.assetId,
198+
quoteAssetId: CONFIG.TOKENS_BY_SYMBOL.USDC.assetId,
210199
});
211200

212201
if ("ActiveSellOrder" in data) {
@@ -254,7 +243,7 @@ export class FuelNetwork {
254243
const asset = this.getAssetFromToken(token);
255244

256245
// return this.sdk.fetchPerpCollateralBalance(accountAddress, asset);
257-
return new BN("0");
246+
return BN.ZERO;
258247
};
259248

260249
fetchPerpAllTraderPositions = async (
@@ -307,7 +296,7 @@ export class FuelNetwork {
307296
const asset = this.getAssetFromToken(token);
308297

309298
// return this.sdk.fetchPerpFundingRate(asset);
310-
return new BN("0");
299+
return BN.ZERO;
311300
};
312301

313302
fetchPerpMaxAbsPositionSize = async (
@@ -319,7 +308,7 @@ export class FuelNetwork {
319308
const asset = this.getAssetFromToken(token);
320309

321310
// return this.sdk.fetchPerpMaxAbsPositionSize(accountAddress, asset, tradePrice);
322-
return { shortSize: new BN("0"), longSize: new BN("0") };
311+
return { shortSize: BN.ZERO, longSize: BN.ZERO };
323312
};
324313

325314
fetchPerpPendingFundingPayment = async (
@@ -330,15 +319,15 @@ export class FuelNetwork {
330319
const asset = this.getAssetFromToken(token);
331320

332321
// return this.sdk.fetchPerpPendingFundingPayment(accountAddress, asset);
333-
return { fundingGrowthPayment: new BN("0"), fundingPayment: new BN("0") };
322+
return { fundingGrowthPayment: BN.ZERO, fundingPayment: BN.ZERO };
334323
};
335324

336325
fetchPerpMarkPrice = async (assetAddress: string): Promise<BN> => {
337326
const token = this.getTokenByAssetId(assetAddress);
338327
const asset = this.getAssetFromToken(token);
339328

340329
// return this.sdk.fetchPerpMarkPrice(asset);
341-
return new BN("0");
330+
return BN.ZERO;
342331
};
343332

344333
private getAssetFromToken = (token: Token) => {

src/blockchain/WalletManager.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { makeAutoObservable } from "mobx";
33
import { Nullable } from "tsdef";
44

55
import { FUEL_CONFIG } from "@src/constants";
6+
import { CONFIG } from "@src/utils/getConfig";
67

7-
import { TOKENS_BY_ASSET_ID } from "./constants";
88
import { NETWORK_ERROR, NetworkError } from "./NetworkError";
99
import { Balances } from "./types";
1010

@@ -42,7 +42,7 @@ export class WalletManager {
4242
throw new NetworkError(NETWORK_ERROR.NOT_CONNECTED);
4343
}
4444

45-
const token = TOKENS_BY_ASSET_ID[assetId];
45+
const token = CONFIG.TOKENS_BY_ASSET_ID[assetId];
4646

4747
if (!token) {
4848
throw new NetworkError(NETWORK_ERROR.INVALID_TOKEN);
@@ -81,10 +81,11 @@ export class WalletManager {
8181
}, {});
8282
};
8383

84-
disconnect = () => {
84+
disconnect = async () => {
8585
this.address = null;
8686
this.privateKey = null;
87+
this.wallet = null;
8788

88-
void this.fuel.disconnect();
89+
await this.fuel.disconnect();
8990
};
9091
}

0 commit comments

Comments
 (0)