Skip to content

Commit 1946897

Browse files
WT-1789 - migrate Immutable Provider to order V3 (#974)
Co-authored-by: Sam Jeston <[email protected]>
1 parent 49feeeb commit 1946897

File tree

13 files changed

+236
-29
lines changed

13 files changed

+236
-29
lines changed

packages/provider/src/sample-app/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ To install yalc run
1414
npm i -g yalc
1515
```
1616

17-
From the root directory of the `@imtbl/sdk` run
17+
From the `sdk` folder in the root of the repository (`ts-immutable-sdk/sdk`).
1818

1919
```
2020
yalc publish
@@ -27,7 +27,7 @@ yalc add @imtbl/sdk
2727
npm install
2828
```
2929

30-
If changes are made to `@imtbl/sdk` in the root directory of the sdk after already publishing run
30+
If changes are made to `@imtbl/sdk` from `ts-immutable-sdk/sdk`
3131

3232
```
3333
yalc push

packages/provider/src/sample-app/src/App.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ import {
77
import { BiomeCombinedProviders, Heading } from '@biom3/react';
88
import { ConnectButton } from './Components/connect-button';
99
import { DisconnectButton } from './Components/disconnect-button';
10-
import { Environment } from '@imtbl/sdk';
10+
import { config } from '@imtbl/sdk';
1111
import { SignMessage } from './Components/sign-message';
1212
import { useEffect, useReducer } from 'react';
1313
import { WalletDisplay } from './Components/wallet-display';
14+
import { CreateOrder } from './Components/create-order';
15+
import { CancelOrder } from './Components/cancel-order';
16+
import { CreateTrade } from './Components/create-trade';
1417

1518
export const App = () => {
1619
const [state, dispatch] = useReducer(appReducer, initialState);
@@ -19,7 +22,7 @@ export const App = () => {
1922
dispatch({
2023
payload: {
2124
type: Actions.SetEnvironment,
22-
env: Environment.SANDBOX,
25+
env: config.Environment.SANDBOX,
2326
},
2427
});
2528
}, []);
@@ -31,6 +34,9 @@ export const App = () => {
3134
<WalletDisplay />
3235
<ConnectButton />
3336
<SignMessage />
37+
<CreateOrder />
38+
<CancelOrder />
39+
<CreateTrade />
3440
<DisconnectButton />
3541
</AppCtx.Provider>
3642
</BiomeCombinedProviders>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { AppCtx } from '../Context/app-context';
2+
import {
3+
Box,
4+
Button,
5+
FormControl,
6+
TextInput,
7+
Heading,
8+
} from '@biom3/react';
9+
import { ChangeEvent, useContext, useState } from 'react';
10+
11+
export const CancelOrder = () => {
12+
const { state } = useContext(AppCtx);
13+
const [orderId, setorderId] = useState<undefined | number>(undefined);
14+
15+
const cancelOrder = async () => {
16+
if (!orderId) {
17+
alert('missing requirements')
18+
return;
19+
}
20+
21+
await state.metaMaskIMXProvider?.cancelOrder({ order_id: orderId })
22+
};
23+
24+
const rendercancelOrder = () => {
25+
const updateOrderId = (event: ChangeEvent<HTMLInputElement>) => {
26+
setorderId(parseInt(event.target.value))
27+
};
28+
29+
return (
30+
<>
31+
<Heading size="medium">Cancel an order</Heading>
32+
<Box sx={{ mb: 'base.spacing.x4' }}>
33+
<FormControl sx={{ mb: 'base.spacing.x2' }}>
34+
<FormControl.Label>Order ID:</FormControl.Label>
35+
<TextInput onChange={updateOrderId} />
36+
</FormControl>
37+
</Box>
38+
<Button onClick={() => cancelOrder()}>Cancel</Button>
39+
</>
40+
);
41+
};
42+
43+
return (
44+
<Box sx={{ padding: 'base.spacing.x5' }}>
45+
{state.address && rendercancelOrder()}
46+
</Box>
47+
);
48+
};

packages/provider/src/sample-app/src/Components/connect-button.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Box, Button } from '@biom3/react';
2-
import { MetaMaskIMXProvider, ProviderConfiguration } from '@imtbl/sdk';
2+
import { provider } from '@imtbl/sdk';
33
import { Environment, ImmutableConfiguration } from '@imtbl/config';
44
import { useContext } from 'react';
55
import { Actions, AppCtx } from '../Context/app-context';
@@ -8,8 +8,8 @@ export const ConnectButton = () => {
88
const { state, dispatch } = useContext(AppCtx);
99

1010
const wrapperMetaMaskConnect = async () => {
11-
const metaMaskIMXProvider = await MetaMaskIMXProvider.connect(
12-
new ProviderConfiguration({
11+
const metaMaskIMXProvider = await provider.MetaMaskIMXProvider.connect(
12+
new provider.ProviderConfiguration({
1313
baseConfig: new ImmutableConfiguration({
1414
environment: Environment.PRODUCTION,
1515
}),
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import { AppCtx } from '../Context/app-context';
2+
import {
3+
Box,
4+
Button,
5+
FormControl,
6+
TextInput,
7+
Heading,
8+
Select,
9+
Option,
10+
} from '@biom3/react';
11+
import { ChangeEvent, useContext, useState } from 'react';
12+
13+
export const CreateOrder = () => {
14+
const { state } = useContext(AppCtx);
15+
const [amount, setAmount] = useState<undefined | string>(undefined);
16+
const [tokenAddress, setTokenAddress] = useState<undefined | string>(undefined);
17+
const [tokenId, setTokenId] = useState<undefined | string>(undefined);
18+
19+
const createOrder = async () => {
20+
if (
21+
!amount ||
22+
!tokenAddress ||
23+
!tokenId
24+
) {
25+
alert('missing requirements')
26+
return;
27+
}
28+
29+
await state.metaMaskIMXProvider?.createOrder({
30+
// buy: {
31+
// amount: '1000000000000000000',
32+
// type: 'ETH',
33+
// },
34+
// sell: {
35+
// tokenAddress: '0xacb3c6a43d15b907e8433077b6d38ae40936fe2c',
36+
// tokenId: '194488020',
37+
// type: 'ERC721',
38+
// }
39+
buy: {
40+
amount,
41+
type: 'ETH',
42+
},
43+
sell: {
44+
tokenAddress,
45+
tokenId,
46+
type: 'ERC721',
47+
}
48+
})
49+
};
50+
51+
const renderCreateOrder = () => {
52+
const updateAmount = (event: ChangeEvent<HTMLInputElement>) => {
53+
setAmount(event.target.value)
54+
};
55+
56+
const updateTokenAddress = (event: ChangeEvent<HTMLInputElement>) => {
57+
setTokenAddress(event.target.value)
58+
};
59+
60+
const updateTokenId = (event: ChangeEvent<HTMLInputElement>) => {
61+
setTokenId(event.target.value)
62+
};
63+
64+
return (
65+
<>
66+
<Heading size="medium">Create an order</Heading>
67+
<Box sx={{ mb: 'base.spacing.x4' }}>
68+
<FormControl sx={{ mb: 'base.spacing.x2' }}>
69+
<FormControl.Label>Amount:</FormControl.Label>
70+
<TextInput onChange={updateAmount} />
71+
</FormControl>
72+
<FormControl sx={{ mb: 'base.spacing.x2' }}>
73+
<FormControl.Label>Type:</FormControl.Label>
74+
<Select disabled selectedOption={'ETH'}>
75+
<Option optionKey='ETH' selected>
76+
<Option.Label>ETH</Option.Label>
77+
</Option>
78+
</Select>
79+
</FormControl>
80+
<FormControl sx={{ mb: 'base.spacing.x2' }}>
81+
<FormControl.Label>Token Address:</FormControl.Label>
82+
<TextInput onChange={updateTokenAddress} />
83+
</FormControl>
84+
<FormControl sx={{ mb: 'base.spacing.x2' }}>
85+
<FormControl.Label>Token Id:</FormControl.Label>
86+
<TextInput onChange={updateTokenId} />
87+
</FormControl>
88+
<FormControl sx={{ mb: 'base.spacing.x2' }}>
89+
<FormControl.Label>Type:</FormControl.Label>
90+
<Select disabled selectedOption={'ERC721'}>
91+
<Option optionKey='ERC721' selected>
92+
<Option.Label>ERC721</Option.Label>
93+
</Option>
94+
</Select>
95+
</FormControl>
96+
</Box>
97+
<Button onClick={() => createOrder()}>Create</Button>
98+
</>
99+
);
100+
};
101+
102+
return (
103+
<Box sx={{ padding: 'base.spacing.x5' }}>
104+
{state.address && renderCreateOrder()}
105+
</Box>
106+
);
107+
};
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import { AppCtx } from '../Context/app-context';
2+
import {
3+
Box,
4+
Button,
5+
FormControl,
6+
TextInput,
7+
Heading,
8+
} from '@biom3/react';
9+
import { ChangeEvent, useContext, useState } from 'react';
10+
11+
export const CreateTrade = () => {
12+
const { state } = useContext(AppCtx);
13+
const [orderId, setorderId] = useState<undefined | number>(undefined);
14+
15+
const createTrade = async () => {
16+
if (!orderId) {
17+
alert('missing requirements')
18+
return;
19+
}
20+
21+
await state.metaMaskIMXProvider?.createTrade({ order_id: orderId, user: state.address })
22+
};
23+
24+
const renderCreateTrade = () => {
25+
const updateOrderId = (event: ChangeEvent<HTMLInputElement>) => {
26+
setorderId(parseInt(event.target.value))
27+
};
28+
29+
return (
30+
<>
31+
<Heading size="medium">Create a trade</Heading>
32+
<Box sx={{ mb: 'base.spacing.x4' }}>
33+
<FormControl sx={{ mb: 'base.spacing.x2' }}>
34+
<FormControl.Label>Order ID:</FormControl.Label>
35+
<TextInput onChange={updateOrderId} />
36+
</FormControl>
37+
</Box>
38+
<Button onClick={() => createTrade()}>Trade</Button>
39+
</>
40+
);
41+
};
42+
43+
return (
44+
<Box sx={{ padding: 'base.spacing.x5' }}>
45+
{state.address && renderCreateTrade()}
46+
</Box>
47+
);
48+
};

packages/provider/src/sample-app/src/Components/disconnect-button.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { Actions, AppCtx } from '../Context/app-context';
22
import { Box, Heading, Button } from '@biom3/react';
33
import { useContext } from 'react';
4-
import { MetaMaskIMXProvider } from '@imtbl/sdk';
4+
import { provider } from '@imtbl/sdk';
55

66
export const DisconnectButton = () => {
77
const { state, dispatch } = useContext(AppCtx);
88

99
const disconnect = async () => {
10-
await MetaMaskIMXProvider.disconnect();
10+
await provider.MetaMaskIMXProvider.disconnect();
1111

1212
dispatch({
1313
payload: {

packages/provider/src/sample-app/src/Components/sign-message.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
Heading,
99
} from '@biom3/react';
1010
import { ChangeEvent, useContext, useState } from 'react';
11-
import { MetaMaskIMXProvider } from '@imtbl/sdk';
11+
import { provider } from '@imtbl/sdk';
1212

1313
export const SignMessage = () => {
1414
const { state, dispatch } = useContext(AppCtx);
@@ -34,7 +34,7 @@ export const SignMessage = () => {
3434
};
3535

3636
const sign = async () => {
37-
const signedMessage = await MetaMaskIMXProvider.signMessage(signMessage);
37+
const signedMessage = await provider.MetaMaskIMXProvider.signMessage(signMessage);
3838
dispatch({
3939
payload: {
4040
type: Actions.MetaMaskIMXProviderSignMessage,

packages/provider/src/sample-app/src/Context/app-context.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { createContext } from 'react';
2-
import { MetaMaskIMXProvider, Environment } from '@imtbl/sdk';
2+
import { provider, config } from '@imtbl/sdk';
33

44
export interface AppState {
5-
metaMaskIMXProvider: MetaMaskIMXProvider | null;
5+
metaMaskIMXProvider: provider.MetaMaskIMXProvider | null;
66
address: string;
77
signedMessage: string;
88
env: string;
@@ -46,12 +46,12 @@ export enum Actions {
4646

4747
export interface SetEnvironment {
4848
type: Actions.SetEnvironment;
49-
env: Environment;
49+
env: config.Environment;
5050
}
5151

5252
export interface MetaMaskIMXProviderConnected {
5353
type: Actions.MetaMaskIMXProviderConnected;
54-
metaMaskIMXProvider: MetaMaskIMXProvider;
54+
metaMaskIMXProvider: provider.MetaMaskIMXProvider;
5555
address: string;
5656
}
5757

packages/provider/src/signable-actions/orders.test.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ describe('Orders', () => {
5555
});
5656
(OrdersApi as jest.Mock).mockReturnValue({
5757
getSignableOrder: getSignableOrderMock,
58-
createOrder: createOrderMock,
58+
createOrderV3: createOrderMock,
5959
});
6060

6161
(signRaw as jest.Mock).mockReturnValue('raw-eth-signature');
@@ -87,7 +87,6 @@ describe('Orders', () => {
8787
asset_id_buy: getSignableOrderResponse.asset_id_buy,
8888
asset_id_sell: getSignableOrderResponse.asset_id_sell,
8989
expiration_timestamp: getSignableOrderResponse.expiration_timestamp,
90-
include_fees: true,
9190
fees: signableOrderRequest.fees,
9291
nonce: getSignableOrderResponse.nonce,
9392
stark_key: getSignableOrderResponse.stark_key,
@@ -128,8 +127,8 @@ describe('Orders', () => {
128127
data: createCancelResponse,
129128
});
130129
(OrdersApi as jest.Mock).mockReturnValue({
131-
getSignableCancelOrder: getSignableCancelOrderMock,
132-
cancelOrder: cancelOrderMock,
130+
getSignableCancelOrderV3: getSignableCancelOrderMock,
131+
cancelOrderV3: cancelOrderMock,
133132
});
134133

135134
(signRaw as jest.Mock).mockReturnValue('raw-eth-signature');

0 commit comments

Comments
 (0)